// ==UserScript==
// @name EasyUpload PT一键转种
// @name:en EasyUpload - Trackers Transfer Tool
// @namespace https://github.com/techmovie/easy-upload
// @version 7.0.0-beta.11
// @author birdplane
// @description 一键转种,支持PT站点之间的种子转移。
// @description:en Transfer torrents between trackers with one click.
// @license MIT
// @source git@github.com:techmovie/easy-upload.git
// @match http*://*/torrents.php?id=*
// @match http*://*/torrents.php?torrentid=*
// @match http*://*/details.php?id=*
// @match https://totheglory.im/t/*
// @match https://ptpimg.me/*
// @match http*://*/torrents/*
// @match http*://*/torrents?*
// @match http*://*/upload*
// @match https://*/offers.php*
// @match https://broadcity.in/browse.php?imdb=*
// @match https://*/torrent/*
// @match https://piratethenet.org/browse.php?*
// @match https://teamhd.org/details/id*
// @match https://hd-space.org/index.php?page=upload
// @match https://hd-space.org/index.php?page=torrent-details&id=*
// @match https://speedapp.io/browse/*
// @match https://*.m-team.cc/detail/*
// @exclude https://*/torrent/peers*
// @exclude https://*/torrent/leechers*
// @exclude https://*/torrent/history*
// @require https://cdn.jsdelivr.net/npm/preact@10.24.3/dist/preact.min.js
// @require https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js
// @grant GM_addStyle
// @grant GM_deleteValue
// @grant GM_getValue
// @grant GM_openInTab
// @grant GM_setClipboard
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @downloadURL none
// ==/UserScript==
(e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const t=document.createElement("style");t.textContent=e,document.head.append(t)})(" td.title-td{min-width:80px;vertical-align:middle!important}td.title-td h4{text-align:right;margin:0;font-size:13px;font-weight:500;height:100%;display:flex;align-items:center;justify-content:flex-end}#seed-dom button{line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:6px 16px;font-size:13px;border-radius:4px;margin:0 5px 0 0}#seed-dom button:hover{background:#fff;border-color:#409eff;color:#409eff}#seed-dom button.is-disabled,#seed-dom button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.site-list,.search-list{margin:0;padding:0;list-style:none;display:flex;justify-content:center;align-items:center;flex-wrap:wrap}.site-list .site-icon,.search-list .site-icon{width:12px;margin-right:5px}.ptp-search-list{display:flex;align-items:center;padding-top:10px;justify-content:center}.ptp-search-list h4{margin:0 15px 0 0;min-width:60px}#seed-dom ul li,.search-list li,.site-list li{font-weight:600;line-height:24px;margin:0 5px 0 0;padding:0;display:flex;align-items:center}#seed-dom ul li a,.search-list li a,.site-list li a{padding-right:3px;display:inline-flex;align-items:center;cursor:pointer}.search-list li:last-child span{display:none}.easy-upload-function-list{display:flex;justify-content:space-around;padding:6px 20px;flex-wrap:wrap}.easy-upload-function-list button{line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:8px 20px;font-size:14px;border-radius:4px;margin:0 5px 0 0}.easy-upload-function-list button:hover{background:#fff;border-color:#409eff;color:#409eff}.easy-upload-function-list button.is-disabled,.easy-upload-function-list button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.function-list-item{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.function-list-item input{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:34px;line-height:40px;outline:none;width:200px;padding:0 12px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.function-list-item select{border:0;font-family:inherit;padding:5px;font-size:14px;border-radius:3px;text-transform:none}.function-list-item input::placeholder{color:#c0c4cc}.function-list-item input:hover{border-color:#c0c4cc}.function-list-item input:focus{outline:none;border-color:#409eff}.hdb-tr{display:flex}.hdb-tr td:last-child{flex:1}.hdb-tr td:first-child>h4{width:100px}.function-list-item h4{margin:0 10px 0 0;padding:0;font-weight:600;font-size:14px}.upload-section,.douban-section,.douban-book-section{display:flex;justify-content:center;align-items:center}.upload-section #nsfw{margin-left:0;position:static}.upload-section label{padding-left:0}#kdescr img{max-width:100%}.easy-upload-setting-btn{display:inline-flex;align-items:center;margin-left:3px}svg.setting-svg{height:20px;width:20px;vertical-align:middle;animation:5s linear rotate infinite;cursor:pointer}@keyframes rotate{to{transform:rotate(360deg)}}.easy-upload-setting-panel{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;background:rgba(0,0,0,.5);color:#000}#batch-seed-btn,#auto-fill-douban{border-color:transparent;color:#409eff;background:transparent;padding-left:0;padding-right:0;font-weight:600;cursor:pointer}#batch-seed-btn:hover,#auto-fill-douban:hover{color:#66b1ff;border-color:transparent;background-color:transparent}#batch-seed-btn:active,#auto-fill-douban:active{color:#3a8ee6;background-color:transparent}#auto-fill-douban{font-size:14px;display:inline-block}.easy-upload-setting-panel *{padding:0;margin:0}.easy-upload-setting-panel input[type=text]{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:34px;line-height:40px;outline:none;width:200px;padding:0 12px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.easy-upload-setting-panel input[type=text]::placeholder{color:#c0c4cc}.easy-upload-setting-panel input[type=text]:hover{border-color:#c0c4cc}.easy-upload-setting-panel input[type=text]:focus{outline:none;border-color:#409eff}.easy-upload-setting-panel h3,.easy-upload-setting-panel h1{color:#000;margin-bottom:15px}.easy-upload-setting-panel .panel-content-wrap{max-width:800px;box-sizing:border-box;margin:50px auto;border-radius:8px;background:#fff;position:relative;text-align:center;box-shadow:0 1px 3px rgba(0,0,0,.3);padding:20px 10px 10px 20px}.easy-upload-setting-panel .panel-content{height:500px;overflow-y:auto}.easy-upload-setting-panel .panel-content ul{list-style:none;display:flex;flex-direction:row;flex-wrap:wrap;margin:0 auto;padding:0 10px}.easy-upload-setting-panel .panel-content li{width:90px;text-align:left;margin-bottom:10px}.easy-upload-setting-panel .panel-content label{cursor:pointer;color:#000!important;font-size:12px;display:flex;align-items:center}.easy-upload-setting-panel .panel-content label input{margin:0 3px 0 0;padding:0}.panel-content p{display:block;margin-bottom:10px;font-size:12px}.easy-upload-setting-panel button{line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:8px 20px;font-size:14px;border-radius:4px;margin:0 5px 10px 0}.easy-upload-setting-panel button:hover{background:#fff;border-color:#409eff;color:#409eff}.easy-upload-setting-panel .confirm-btns{padding-top:15px}.easy-upload-setting-panel .img-upload-setting{margin-bottom:10px}.easy-upload-setting-panel .img-upload-setting label{justify-content:center}.easy-upload-setting-panel .img-upload-setting label input{margin-left:8px;margin-right:8px}.easy-upload-setting-panel .img-upload-setting label a{color:#000;font-weight:500}.easy-upload-setting-panel .img-upload-setting label a:hover{color:#f7d584}.feature-list{display:flex;flex-wrap:wrap;justify-content:space-between;padding:0 50px}.feature-list .site-enable-setting{width:250px;padding-top:5px;margin-bottom:8px;text-align:center}.easy-upload-setting-panel .save-setting-btn{background-color:#007bff;border-color:#007bff;color:#fff}.easy-upload-setting-panel .save-setting-btn:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.ptp-api-key-btn{text-align:center}.easy-notification{box-sizing:border-box;position:fixed;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;overflow:hidden;right:0;margin:0 24px 0 0;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715;z-index:2010}.easy-notification-enter{right:16px;transform:translate(0)}.easy-notification-notice{position:relative;width:300px;max-width:calc(100vw - 48px);margin-bottom:16px;margin-left:auto;padding:16px 24px;overflow:hidden;line-height:1.5715;word-wrap:break-word;background:#fff;border-radius:2px;box-sizing:border-box;box-shadow:0 2px 12px rgba(0,0,0,.1)}.notification-message{margin-bottom:8px;color:rgba(0,0,0,.85);font-size:16px;line-height:24px}.notification-description{font-size:14px;line-height:21px;margin:6px 0 0;text-align:justify;padding-right:10px}.notification-description p{margin:0}.easy-notification-notice-close svg{height:14px;width:14px;font-size:14px}.easy-notification-notice-close{position:absolute;top:13px;right:15px;cursor:pointer;color:#909399;font-size:16px}.easy-notification-notice-close:hover{color:#606266}#transfer-progress{display:none}.custom-site{display:flex;align-items:center;width:100%}.custom-site h4{flex-shrink:0;margin:0 10px 0 0;line-height:initial}.custom-site .easy-upload-function-list{flex:1}.custom-site img{border-radius:0}tr.pad[id*=torrent_]{font-family:Proxima Nova,Lato,Segoe UI,sans-serif}#seed-dom .easy-upload-function-list .copy-img{margin-left:5px}.quick-search{cursor:pointer;color:#409eff;font-weight:600}.ptp-title-wrapper{position:relative}#seed-dom .ptp-title-wrapper h4{position:absolute;left:0;top:0;margin:0!important;display:flex!important;align-items:center;line-height:24px}#seed-dom .ptp-title-wrapper .site-list li:first-child{padding:0 0 0 140px}#seed-dom .ptp-title-wrapper .search-list li:first-child{padding-left:70px}#seed-dom.use-eng .ptp-title-wrapper .search-list li:first-child{padding-left:95px}#batch-search-btn{color:#409eff;padding-left:0;padding-right:0;font-weight:600;cursor:pointer}.douban-config{display:flex;justify-content:center}.douban-config textarea{resize:none;width:300px;height:100px;margin-left:6px} ");
(function (preact, $$2) {
'use strict';
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a2, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a2, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a2, prop, b[prop]);
}
return a2;
};
var __spreadProps = (a2, b) => __defProps(a2, __getOwnPropDescs(b));
var __objRest = (source, exclude) => {
var target = {};
for (var prop in source)
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
target[prop] = source[prop];
if (source != null && __getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(source)) {
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
target[prop] = source[prop];
}
return target;
};
var _a;
var f$1 = 0;
function u$1(e2, t2, n, o2, i, u2) {
t2 || (t2 = {});
var a2, c2, l2 = t2;
"ref" in t2 && (a2 = t2.ref, delete t2.ref);
var p2 = { type: e2, props: l2, key: n, ref: a2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: --f$1, __i: -1, __u: 0, __source: i, __self: u2 };
if ("function" == typeof e2 && (a2 = e2.defaultProps)) for (c2 in a2) void 0 === l2[c2] && (l2[c2] = a2[c2]);
return preact.options.vnode && preact.options.vnode(p2), p2;
}
const PT_SITE = {
"1PTBA": {
url: "https://1ptba.com",
host: "1ptba.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACqVBMVEUAerwqYXVnYVNybF9uaFtjXUxTXlcyYnQOb54Ae7wMcKJYaWi0rqbUz8fTz8fSzcXNycG/urKemY1bcXERb50sYnSOioHf29Lt6d/s6N/m4tnBvLFNcntrb2bFwLjt6eHu6eHt6eDr597q5t3n49qRkINrf3+1t7C5u7W6u7S+urG9urG5urTEw7vj39br59/s6eCuqZ0Qc6Uib5Ijb5EkbIxQZGN8d2qAem6JhXlDaXMibpEwaoGVmpLl4disp5sAe70OcKBscWnEv7fV0MjV0cnMx706a3sAe74IcqdjdnXTzcTq59+Mj4UBe7wBerskZoGSj4bi3dTv6+O5urIibpAAerscZod4enLW0cnu6+PPy8JFcoABebg9Y26zrKLp5dyOl5EMcqUCeLcbZodaY12uqJ/t6uHk4Nh3jY4Pb54JcqZdb27Iwrji3tVggYgKbZ4yX21obGavqaDi3dXd2dF9kJIVcZ0Wa5N/f3Xb1s7Lx70zboYvY3WDfXLFwLft6ODKycFhfYESb50AebouZ36emY6nraYWZolMbXXCvLOdoJcTZ44Cd7VIZGi6tKvr5t14jY4HcqgxbIO6tKm6tqprdG/SzcTs6N7e2dBJc38AebsUa5WOk4vn4tns6ODQy8I+dYoAeLgeZoaMi4Lf2tK+vLMncZISa5R3fnnb1czMx743c40AebkCebg2ZXWrpJno5NuSl44YY4IcZYRHXmCcmI6vsKcabpUHc6pYa2vDvbTk4NecnJNnbWd9eW+po5ra1c1nhIoGc6sRbpt3eG3Z1Mza1cze2dHh3dSAk5UUcJ0qa4ajn5Xn5Nzu6uLt6uLv6+Tp5d7Y1MyxtK1hgIgUcZ8lbYyTkYSxrqOxraOwraOtqp+XlIV9iIFReYUfaowGdKz///88yl8CAAAAAWJLR0TixgGeHAAAAAd0SU1FB+UECgcrNELreWwAAAGKSURBVBjTY2BgZGJGABZWNnYOTgYubh5eOODjFxAUEhZhEBUTl5BEBlLSMgyycvIKCvJgoKCgqKSspKyiyqCmrqGhoamlraWtoaGjq6evrGxgyGBkbGJsamZuYWFpZW1sY2unpCxvz8DJwODg6OTs4urmzuDh6eWtpOTjy+Dn5+8QEBikGBwS6hAWHhGpFBUdAxTkjI2LT1CST0xKTklNk0rPyMwCCjpk5+RKSublFxQWFZcEl5aVMzD4cTpUVFYppVfX1NbVSzU0NjUDrfHjbGltk1JSaO/o7FJWUuru8eD0Bwr29vUnKE2YOGnyFEklxanWDJx+DH4OjtOmz5CcOWv2nLnzlOYvWLgIKMjpsHjJUqX0Zcs9VqxcpSS/es1akOC69Rs2Kslv2rxl67Y8peDtOxyAgg47d+1WUtqzd9/+AweV5EsOHXbwAwoeOXoMGDLHp59Qlg8+eeo0JydQMOzM2XPnL1w4H3zx0uUrV68B7QYKMly/cfPW7ds379y9d//BQwZOf6AgACIJgNAMLRaxAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA3OjQzOjUyKzAwOjAwjJgVBwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNzo0Mzo1MiswMDowMP3FrbsAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: "#torrenttable>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "406",
sport: "407",
cartoon: "405",
variety: "403"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
x264: "1",
hevc: "10",
x265: "10",
h265: "10",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "3",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "18",
dd: "18",
"dd+": "18",
flac: "1",
dts: "3",
truehd: "20",
lpcm: "21",
dtshdma: "19",
atmos: "19",
dtsx: "3",
ape: "2",
wav: "22",
mp3: "4",
m4a: "5",
other: "7"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "10",
bluray: "13",
remux: "3",
encode: "7",
web: "11",
hdtv: "5",
dvd: "2",
dvdrip: "7",
other: "12",
cd: "8"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"4320p": "11",
"2160p": "10",
"1080p": "2",
"1080i": "2",
"720p": "4",
"576p": "5",
"480p": "5"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
"1ptba": "1",
chd: "2",
mysilu: "3",
wiki: "4",
other: "5"
}
}
},
"3Wmg": {
url: "https://www.3wmg.com",
host: "3wmg.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBykVPLQLsAAABCVJREFUOMuVlctvVVUYxX97n3PPvb0t0BZKSKW0FdpSDCAkViMmjU9kAImaMDVGnOo/4IApGo0xccLQmYkgJhhfCSA4sgUJjz5JsbVwS/q6lN7bc/brc3AanGiiO9mjb+1k7d/KXlvxP9ax04tsfyKmMucatGYrsAysnHln82ON+rfDB967RXU+Zc/hroZSSTeXErVNKfq0Ym8cq6cizQ7rZKyeyYdxxFQ9Fc69u5kYYLxi8Q4aSiq5Mp2VhmZse93SGxS7g7BHK/qiiO44Ui1xRBxppZUC6+TpWMvVjw4WP/n6QeAcoE58s8xCVXZtKKmXTwyUD+/cHHWlTppTK80La7Lxh8ksWloLaKUoFWCwK+HJlhgBRIRI8WtXS3S8oFWlIdHElYWwt6msT0UFdeTStGEpjTnSWySJQIBqKpwfz/AiiFWMzjs2FTWD3QUmFz0/T2StFzxxMcrpxcAhYJ8XmJh3LNQCg90J09VAZ3PEoc4CN+Ys4wsOreBmxZFZ2L8t5uo9y6W7ZkOtJluBPwG0dVzNrCxlRjAOjBVEYHjWMjRr2VLWvNidUECRGcE6wTjBeGGpFgieFgV9CnjliwW0MWHEmjBjTMCagLUCwKO1wPmRlPlVz0BHgYPtMcYEjBXcusYHwXtpEpE9v99ew3tBX3x/S81YGXEu4HzA+wDrwEcrhh/HUwoaXu8t0lZWWJtrRCB4wftACNK/qzPZGIKgj56ex1q5YYxYawRrBRHBeyHNhJ9GUkYfOHraYl7aVUS84JyAgPe52+ClVylpQQT9qBbwPoxZEx46G3A2dxg8eBe4v+w4c61O3QRe6yuye0uMMYIA3gnWBLwLHRJkByLoNBMyIxVj5K5ZZygCzkvOzAhXJte4OJbS2hjxxv4GmhIIQXKNDTgnjc5Jf6wCsXMQhCpaJpSSZx4Dd4I1gkJYyeCroRr7ticMdBWp1sPfmkxQSmIvau9vS41o74VStlZzVkZsFoIxOXDvBJMFjMkxjM4azg7XiDS82l9iY0njbH5lawLehv7u0mqLvn6ynVUSrJMxa+WRMzlw5/OArMl3lga+HV5leCqjIdEkETgnmPW5s7IteGnXkKflvUxYK8utZU0hgnKs8OshORvwLlBZcnx5eYVq3aOUwjtZnwvOyR8SWIwBerYWKBfV7As9xeXne0pdm8qa48810dEa8fn3Ve4vO7TK3+rlkTX57lotvPVsky4X9YzzXItidV0JZ0Pq52KAYwfKbGiMaosP7egvt+sHLt6s5Q6CSGokeE8mmorSTNaMjF0YSWfeHGgqHT3YePnkmepQT2diAZn8uD0v2Ia3p+hrU9xbkcGCklME2kQxh2IyKeibkeIWSk2pSC8prR4iuDufdvxjMT9u7O4PpkGhEXYi0opS0yjmAX/3s87//E38BWXDuj9j0ViVAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA3OjQxOjIxKzAwOjAws0DWvgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNzo0MToyMSswMDowMMIdbgIAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="pt_gen[douban][link]"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
chinese_audio: 'input[name="tags[]"][value="16"]',
diy: 'input[name="tags[]"][value="8"]',
hdr: 'input[name="tags[]"][value="64"]',
chinese_subtitle: 'input[name="tags[]"][value="32"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "403",
tvPack: "402",
documentary: "404",
concert: "406",
sport: "410",
cartoon: "405",
variety: "403"
}
},
source: {
selector: 'select[name="source_sel"]',
map: {
uhdbluray: "1",
bluray: "1",
hdtv: "4",
dvd: "3",
web: "6",
vhs: "6",
hddvd: "2"
}
}
},
"52pt": {
url: "https://52pt.site",
host: "52pt.site",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABtlBMVEUAAAD/f1D+f1D8f0nrlATcRhAAAP8AAP72vAX2vAX2uwX2vAX2vAX1vAT2vAX2vAX2vAX2uwX/f1D/f1D/f1D/f1D2vAX2vAX2uwX1ugX0tQT/flD/f1D+f1D+fk/+f1D+f1D2vAX1uAXyrQTwpgT+fk//f1D/f1D/flD/f0//f1D1uwX0twTxqgTuoATslgTohAX/f1D/fk/+flD/f1D/f1DwpQTtmwTqkATohQTmfwT+flD/f0//f1D/f1D/f1D/f1DxqgTvogTslQTpigTmfwTldwXiaAr+f1D/f1D/f1D+f1DrlQPqjQTohQTleQXjbQnhYgrgYgr/f1D/f1D/f1D/f1D/f1DqjwTpiwTkcwfiaArfWwvdTw7/f1D+flD+f1D/f1DpiwXkdgbjbwnhYgreVA3cRRDbPRL/f0/hZArgXQveUA7bQRHbOhLbOhPeUQ3cSQ/bOhLbOhPbOhMAAP8AAP4AAP/bPhLbOhLbOhMAAP8AAP4AAP8AAP8AAP8AAP/bORPaORPbOhMAAP8AAP8AAP8AAP8AAP8AAP/bOhPbOhPbOhPbOhP2uwXysATmfwT////emFSbAAAAjnRSTlMAAAAAAAAAACiIUl5wyHjAdsYQChQGvkoOeMawXHYIIjbQ0IjGLDhAKEZS5Hbk+MoygkRUYljmUu78XiJoaFBKVnCo+t5KQghmVEhuVJJi+vrUAgKApERuMt7AaPjGMhIgDAp44u7QvroGdsg+6rjEdsgEdsYiGih2yHhsOlJKTgZqyLo0OlBYPAQWYDo8iaK1gQAAAAFiS0dEkQ8NvpoAAAAHdElNRQflBBUOAAFlgzxgAAAA50lEQVQY02Ng4OBkYODiZkAAHl4GBj5+JAEBkIAgA6OQsAgDoyhIQExcQlKKgUlaRlZOXgEkoNinpKzCwKSqpq6hqQUS0NbR1dM3YDY0MjYxNQEK6PSbmVtYWjFY29ja2TsABRydnF1c3dxFPWztPb28GRhYfHz9/AMCg4LtQ0Jtw8IZGCIiJ0RFx8QyMMTFJ2glJjIwJCWnpKalZ4CdpJUJIrOyc3Lz8sECTIwgsqCQtai4hIGttKycnQ0kUFHJwFAFFKiuqa2rbwAKNDYBBZoZ2Fpa29o7OoECXd0MDD29QAYbCDAAALdvLFoE/tjvAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTIxVDE0OjAwOjAxKzAwOjAwc0mO0gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0yMVQxNDowMDowMSswMDowMAIUNm4AAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "406",
sport: "407",
cartoon: "405",
variety: "403"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "13",
x264: "11",
hevc: "1",
x265: "12",
h265: "1",
mpeg2: "4",
mpeg4: "13",
vc1: "2",
xvid: "3",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "13",
ac3: "6",
dd: "6",
"dd+": "6",
flac: "1",
dts: "15",
truehd: "12",
lpcm: "14",
dtshdma: "4",
atmos: "10",
dtsx: "3",
ape: "2",
wav: "11",
other: "7"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "1",
bluray: "11",
remux: "4",
encode: "7",
web: "10",
hdtv: "3",
dvd: "6",
dvdrip: "7",
other: "9",
cd: "8"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"4320p": "7",
"2160p": "5",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "6",
"480p": "6"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
beyondhd: "1",
hdsky: "2",
ttg: "3",
mteam: "8",
coaster: "4",
chdbits: "9",
ourbits: "10",
hdhome: "11",
cmct: "12",
hdchina: "14",
pthome: "15",
other: "5"
}
}
},
ACM: {
url: "https://eiga.moi",
host: "eiga.moi",
siteType: "UNIT3D-Legacy",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBjskFFwRbgAAA11JREFUOMvNlM1vlGUUxc+5zzPvfLT2y5a0BqglgAFCcaGIYaEhAYIaTYgxLo1x5wL+BBf+Ay6NceOChYnGjVVj4wchkAhE1AKKWqopTBinZdrpFGbe97nHBSaSqNENiWd3N79zF/f+gP97ePdwfXwbIJFkXxbsfjfVEjwJvmZ5q1luLffyPmBs6T8AFzbuAIASyAmS0wHaJWhURCHghqA5gHNmpYbkPrkw97fACACXJ3aitdhEdXJ8E8nnSDxF6SFBQ3dquQrgssC3Bc6C1vynDePM1iNYT034g/0bPOCAES9JPgUgI5AgQOQoiL2QfqUw7yE254c3czlU9ciBd/Du6eN4YfHMHWD0hOpwjqXO0DSgpwHfSiGn/JRJ35kxJto0iZql4mSlu3alUe6rLo1MjnW7nfrVmx/kM3/AAIDvbX8GvWT9g5X8FUDH5BqN8FPB/UT0dI7GsoDtJMo91+lWebAWgX3mvsGNdYgnvZ1dZTmlo1feR7ydVSBxdDVkmwENy3wpwD8xaNal+q3lFRN4KY/lEIdHNlWYDko6IFOfyKrLrBgMq0RoAEDslPtJoObw+wAESCuSfoCrDRKLGyd94PZKjhCrA0EPJ/k4oWsulZ22X+CTIH+cWm81Xtv/KuJyrAlAj1ACZAAoB+QAjagwoVMbKhm0pfCiL5IysC7P52Vhj2h7BZ7/cqT/bMmxHtusAMItRbZA3JY4koTdAr+FuNauj7B/fHXCSulFSlsMyA06E3udz0tCIw+VZ53Wy5NXE7EeO8wQPLW6sXJN4E0BEw4eKmCNLuM3Ycr7k6r7otJhQg+AnId0pp63ry38ki8e3DnYJJQ7ilsSERvVGrbYSGfZV644eNHBDQIedVpw8KccqOWwPVRpkoRTWofUTpXx8HXnUj7anTj36dnX/zzszB2XrQdaeQ4WPxQ4lqRdIB4H8BggAiShLsGvDJhh8gtZeaD0/L4nihgy3f0p4cLCF5jaeBTd+sCaD/pvhcW1PGZDuWW1gjEWFnu5xUYRsvOJ8YRkH2We/wzFHmESEi4tzPxVDoeOvAmTYqKNJXK303YDnAAEya8bcN7A760ITZnS7Mcv/7u+dhx+Cy4hkOWBEMfMbFAk5Hl7NbXrF7cdy+PF40ifvXHvhHrP8zvmB8JDHarovgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNjo1OTozNiswMDowMLWCrh8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDY6NTk6MzYrMDA6MDDE3xajAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
uploadPath: "/upload/1",
needDoubanInfo: true,
seedDomSelector: '#meta-info+.meta-general>.panel:has(".table-responsive"):first table tr:last',
torrentDownloadLinkSelector: 'a[href*="/torrents/download/"]',
search: {
path: "/torrents",
params: {
name: "{name}",
imdb: "{imdb}"
}
},
name: {
selector: "#title"
},
description: {
selector: "#upload-form-description"
},
imdb: {
selector: "#autoimdb"
},
tmdb: {
selector: "#autotmdb"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
anonymous: {
selector: '.radio-inline:first input[name="anonymous"]'
},
torrent: {
selector: 'input[name="file"]'
},
videoType: {
selector: "#autocat",
map: {
movie: "1",
tv: "2",
tvPack: "2"
}
},
category: {
selector: "#autotype",
map: {
BD100: "1",
BD66: "2",
UHD50: "3",
BD50: "4",
BD25: "5",
remux: [
"12",
"7"
],
encode: [
"8",
"10",
"11",
"13"
],
web: "9",
hdtv: "17",
dvd: [
"14",
"16"
],
dvdrip: "13",
other: ""
}
},
resolution: {
selector: "#autores",
map: {
"2160p": [
"1",
"1",
"2",
"3",
"12",
"8"
],
"1080p": [
"2",
"4",
"5",
"7",
"10"
],
"1080i": [
"2",
"4",
"5",
"7",
"10"
],
"720p": [
"3",
"11"
],
"576p": [
"4",
"13"
],
"480p": [
"5",
"14",
"16",
"13"
],
other: ""
}
}
},
AGSV: {
url: "https://www.agsvpt.com",
host: "agsvpt.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,AAABAAIAMDAAAAEAIACoJQAAJgAAABgYAAABACAAiAkAAM4lAAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEZADQxGgD/MRoA/zEaAP8xGgD/MRoA/zEaAP8xGgD/MRoA/zEdADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIbAf8wGwD/MRoA/yISAf/z683//vbZ//Przf///tz//fTS//n01f/58M7/+/nb/zIhB/80HAD/MBgA/zAbAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxGgD/MRsC/+newP/j2L3//v7W//Dqvf//9cX/49is/9nTpv8uGQD/MBgC/+HRo//347r/6dqs//Dnu//++dL/+PDS///02P8zHQH/NhsB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMRoA/zIbAf/t5MP/9+/H///0zv//+tH/VEAn/zIdAv8yGwH/MBsA/zAbAP8wGwD/MBkD/zAaAf8yGwH/MhsB/zIbAf8iDwD/+/HC/+HYrP/i2bT/8+zR/y4bAP8xGgD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIbAf8xHAD////b/+TYsP/w4bP///XG/zIbAf8yHAD/MhwA///9/P/+/v7///////////////////////////80HAD//////y4bAP8wGwD/MRwA/zIcAP/s3q3//e+///7/1f/49tj/MRoA/zEaAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhsB/zUdAf/j2rX///nO//rvyf8yHAD/Mx0B/yoYAf8wGQP//f///zUbA/8wGgH/LxkA/zAaAf8wGwD/LxkA/y4bAP8xGQP//////zEcAf///v3/NBwA/zIeAP8yHAD/MhwA/+japv/s4bX/6eC//zAeAf8xGgD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyHAD/qp2D//324//89uP/LhsA/zIbAf8yHAD/MxsD//z++P8xGgD/o5eL//79///////////////////////////////////9/f3/MRkF/y8fAv//////NBsB/y4WAP/y8/H/MRwA/zIcAP8zHgL/7d+q//nsvv//8tL/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIcAP/4993//vng//v35P8xGwL/MhsB/7OSYf82HgD/LxgC////+f/6+uL/9PHi////+f////n////5////+f////f////7////+////vb////+//7//f////v/LhcB/y8ZAP//////MRwB//////8yHAD/MhsB/9zDZf//9bn/5dSh/zEaAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhwA//f43v/7997/+fje/zQbAf8zHQH/+/78/7ueZf8zGwP/NBsB//////8yGwH/MhwK/ysYAP8tFQH/KRQA/ywUAP8qEQH/KxYA/y4XAf8wGwD/MBsA/zMbBf8uHgH/5dCZ/zghAf//////MBsA//3///8rFgD/Mx0E/zIbAf/8+OX/9vji//742/8yGwH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyHAD/4NCi/zIbAf///+X/MRsA///+9P84IAT//f///8OucP/aw3P/Mx0B///9/////////////////////////////////////////////zEcAP/ZwX//2sKA/zQfA//19uL/+Pfi/zIbAf//////MRwA////+/////r/NR0B////9/8zHQH/38Rq/9m+bf/Zvnv/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEcAf8yGwH/9eSx///8z/8xHAD/Mx0B//f07/89Igf//f///zMdAf/48tv/9/TV/zIbAf8yGwH/MRoA/zMaAP8wGQD/MxsD/zUcAv8zGwP///////7+/v8zHgL/MRwB/zAbAP8wGwD/MRwB/zEcAf//////Mx4C/zMdAf8sGQD/Nh4A//Lu7f8zHQH/MhwA///9/P/+/v7/LRMF/zEaAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIbAf//98j/uKZ3/zEcAP8wGwD/NB4C/+jm5f86IQf//v7+/zIeAP8zHgL///7p//j44P/5+eH/+fnh//n45P///+z/2MB0/9nBdf/exYX/+fXq//3////+/v7//v7+///////+/v7//////zAaAf//////Mx4C/861a/8lFQX/Mx0B//////8xGgD/HAwA/zIbAf/8//3//////zUeBP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBsA///0zP/45r3/MhwA/zMdAf+1mVz/Nh4C//39/f85IQP//v/9/zEaAP//////LBgA/y0fA/8pHgL/LRwB/ywbAP8tHwP/LB4C/ycaAP8wHwT/Mx4C/zYfBf82Hwn/Mx4C/zUgBf82HgL/TkEx//////8uGwD/Mx4C/zQfAP//////NB4C//////8yGwH/LhgA/zIbAf80HAD////////+//8xGgD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMx8A/9vKo////+H/Mx0B/zMdAf/GtnT/OCAC//////81HQH///////3+/P8qHAr//v/9///////////////////////////////////////////////+/y8YAv/ZzpL////j//j44P/7++P/MhwD///+/f//////Mx4C////////////MRwB/y8cAf/9/////f////////8yHAD/+//+//////82Hgb/AAAAAAAAAAAAAAAAAAAAAAAAAAAxHAD///PP//710P8zHgL/Mx0B/zMbA/81HwP/Nx8B//////8yHgD/NhwE/62ml///+fb/MBsA/zEcAf8xHAH/MBsA/zEcAf8xHAH/Mx4D/zMbA/81HAL///////////8yGgL/MhsB/zIbAf8yGwH/Mx0B/zIcAP8xHAH/Mx4C/zMdAf8xHAH/Mx4D/zMeA/8zGwP/Mx4D/zMbA/82HQP/Mx0B///////9////MRoA/wAAAAAAAAAAAAAAAAAAAAAyHAD/8ejH//DkyP8zHQH/+vbd//z42//6+Nr/Nx8B//7+/v80HgL/2sF7/97Efv/lzHb/2Ltm//X21v/8+N//+Pjg//v24f/5+N7//Prc//v43P8pEgL//vv3//78+//7+vb//Pvt//745f/2+eD/9vng/ykUAP9YQRP/Mx0B//j12f/5+N7/9PbZ//n43v/5+N7/+vXg//v33v/59uH/MhwA///////+//3/MRoA/wAAAAAAAAAAAAAAADIcAP/Pxa3/MRwB/zIcAP8wGwD////x////8P///+X/NB4C//7//f8zIQT//v/l////5////ub//f7q////6v///+r//f/p///+6f///+r////n////5/+bkHz///7p////5////uz////t///97v/7+OP/+fbh/zIcA//+/v7/MhwA////6////+r///7r////7f///+3//v7s//7/6/////D/LxsC/zMdAf8yGgL//f/p/zIbAf8AAAAAAAAAADIcAP///vr///34/zMdAf82GwH/MRwB/zIdAv8zHgL/NB4C//7//f81HQH/Mx0B/zIcAP8zGwP/Mh0B/zEcAf8xGQH/LxoA/y8YAv8wGgH/MBoB/y4YAP8zHgD/MRwA/zMdAf8yGwH/MRoA/zIYAP8xHAH/MxwC/zIbAf8zHgL/NB8D/zMeAv8wGwD/LhsA/zAaAf8uHQP/MRoA/zEaAP8xGgD/MhsB/zMdAf////7//f///zIbAf8AAAAAAAAAADEcAf///un///3y/zQeAv/+/v7//////yERAP/Txnj/MBsA//z9+f8uGQP///////////8xHAD/Mx4C/zUgBf////////////////////////////////8eCgD/Mx0B/zIcAP81Jhb/////////////////+/f2/zEcAf8xHAH/0Llp/9C4ZP/Wumb/Mx0B////////////NSAE/9G5bf/RuGj/0bho/zIbAf/QuKT////x/zIbAf8AAAAAMR0ANDEbAv/Ny8D/Mx0B/zMdAf///v7///////3///8rFgD/KRMB/yYSAP////////////////8zHgL/Oy0a//////////////////////////////////////8ZBwD/Mx0B//////////////////////////////////z+/v8uHQL/Mh0C/zEbAP8zHQH/NR0A/////////////P/9/zMeA/8zHQH/MBsA/zQbAf8zHQH/8uvi/zIaBP8xHQA0MhwA//Pn2//5/Oz/Mx0B/zMdAf8yGAD//v7+/////////////////////////////////3FoWv8yHwT//////////////////f////////////////////////8bCAD/pJqJ///////////////////+//////////////////81IAT/MR0A/zUbA/8zHgL///z4/////////////////y8dAP8xHAD/MhsB/zMcAv8zHQH///v2//j48v8xGgD/MhwA//vy7v/Evbr/Mx0B//3///8zHQH//f///////////////////////////////////zEcAP////7///////////8zGgD/MRwA/zMeAv8xHAD///////////8dCwD/Mx0B/x4SAP/+//3/MhwA/zMdAf81IQL////////////37uT/MhwA/zEaAP8zHgP//////////////////////0M2Jv8xHAD///////79//8zHQH/8ern//Xz8/8xGgD/MhwA//779////vn/Mx0B/y4dAv8yGwH/qZ+V//3/////////MBsA/////////////f///zEcAP////////////////8yHAD/Mx4C//////////////////////8fDgH/Mx0B/zMdAf8wGwD/Mx4D/zYfBf///v////////////80HAj/Mx4C/zIcAP8qFwL////////////+//3///////////8wGwD/Mh0B/y0eAP8zHQH//Pj3//////8yHAD/MhwA/+fn5/////v/Mx0B/zQeAv8yHAD/Mx0B////////////oJaM////////////NRwC/zIcAP////////////////8zHQH/Mx4C//////////////////////8iDwD/MhwA/zUdAf////////////////////////////7//f8xHAH/MBsA/zIcAP////////////////8uFQH///////////8vHAH/MRwA/zEcAP8zHQH//Pz8//////8yHAD/MhwA//7+/v/4+vr/Mx0B/zMeAv8tGgD/Mx0B//7//f//////////////////////Mx4D/zIcAP/+//3///////////8zHQH/Mx0B/zIeAP80HAD/MRoA/zMaAP8zHQH/Mx0B//////////////////7+/v////////39/zEaAP8wGgH/MhsB/zMdAf///////////yMRAP82HgL//////////////v3/MhsB///9/P8zHQH//v/9//7//f8yGwH/MhwA//j4+P///fz/MhwA/zQcBP8zHgP/MhsB/zcfA/////////////////8iFgD/MRwB/zEcAf/+//3///////////8xHAD/MRwA/zIcAP8zHQH/NRoA/zEcAP8zHQH/NiEC////////////KBkA/zAbAP8xHAD/MBsA/zAbAP8yHAD/MhwA///9/f///////////zMdAf8zHQH//v7+////////////MRoA/zIcAP8zHQH/4ODg//39/f8yHAD/MhwA//7+/v///P3/MhwA/zIcAP8yHAD/MhwA/zMdAf////////////////8xHAH/MRwA/zIbAf8jEgD//////////////v//MRwB/zEcAf/9/////////zIdAv8zHQH/MRwB//////////////j1/zEcAf8vHAH///////7//f8xHAD/MhwA////////////+//+/zMdAf8zHQH/MxsF////////////MxsH/zMdAf8zHQH///////v+/P8yHAD/MhwA///////7/vz/MhsB////+//+/v7//f///zMdAf+hmof///////7+/v8xHAD//f///yQUB/8zHQH///////////////////////////////////////39/f8zHQH/Mx0B//7//f////////////////////////////////8zGgD/KhwF////////////NyEF/zcoGP////7/Mx0B//7+/v///////f78/zMdAf8zHQH///////3+/P8xGgD/MR0ANDcgBv///fz/MhwA/zIcAP8yHAD/NB4C/zMdAf8zHgD//////zIcAP8yHAD/MRoA/zEaAP8yHAD/MhwA/////////////////////////////////zEaAP/+/f//49bI/zMdAf/+//3//////////////////////y4XAf8yHAD//P7+////////////MhwA/zUdAf8yHAD/MhwA/x8OAf///////////zAbAP8zHQH//////xIJAP8xGQA0AAAAADMdAf/z9PL///3y/zIcAP8yGwH/MRwB/zEcAP8yHAD//P/9/zIcAP8yHAD/MhwA/zIcAP8xHAD/MhwA/zIcAP8yHAD/JREA/zEcBv8yHAD/MhwA/zIcAP8yHQH/MhwA/zIcAP8yHAD/MRwA/yANAP8vGAL/MBsA/zIcAP8yHAD/NR0F/zMbB/8vGwL/MhwA/zIcAP8yHAD/MhwA/zIcAP81HgT/NR4E/zYeCP+7rqD//////zEcAf8AAAAAAAAAADIcAP///fz//P37/zIcAP/exWn/18Bq/9bAaP/Yumf/1r5m/9a4Z//WuWj/NB4C/9u8Z//Yumf/2b1o/9a/af/Yv2n/0bln/9q6Z//Zu2T/27xn/9i7YP/Yu2D/2rxl/9m7ZP/bu2L/2rph/9i6Yf/YumH/2rph/9q/Zf88IgT/2b9z/9m+bf/Wvmz/2rlp/9q8bf/Yu2r/2bxr/9W6af/WuWj/1r5q/zIcAP/a2Nj///7//zEcAf8AAAAAAAAAADIcAP+Bbl///f///zIbAf82IAT/4djL//z+/v8dEAD/Hg8A/xcLAf8YCQD/NB4C////+//Ks2///////x4MAf8dCwD/HAwA/x8OAf8gDwL/IBAA/826d//+/v7/Oyki/yUQAf8gDQD/Hg0A/yQQAP8jEQD/IA0A/9jDhf80HwD/IhIC/52FQ//Cr2z/x7Ny/8iycf/Hs3L/yLVy//////8qGgP/MhwA/zgeAP/m4uH///72/zEaAP8AAAAAAAAAAAAAAAAyHAD/+vr6//z9+f8xHAD/9Pne//z53f/8+d3/+/jc//v52//7+Nz/Nx8D//v33v/6+d//+Pjg//j44P/5+eH/+fnh//r64v/6+uL/+vnf//z74f/6+d//+vnf//r53//6+d//+fnh//n54f/6+uL/+vnf//n43v83IQX/+/fl//n45P/5+eH//fjj//z43//8+uj////t//n54f/3+eP/Mx0B////+P/z8fD/MRoA/wAAAAAAAAAAAAAAAAAAAAAyHAD///79//7+/v8wGwD/MhwA/zIcAP8yHAD/MhwA/zMdAf8zHQH/Mx4D/zQeAv8zHgL/MRwB/zEcAf8zHgL/MhwA/zIcAP8zHAL/Mx4C/zMeA/8zHgL/Mx4D/zAZAP8wGAD/MBgA/zAYAP8wGAD/MhsB/zIbAf8xGgD/MBsA/y8ZAP8xGgD/MRoA/zMbA/8yGwH/MRoA/zIbAf8yGwH/MxsD/9TU1P///v3/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAMx4A//39/f///v7/MhsB////+/8uGgH/MxsA/0gqAf+uj1D/wKFi/zYeAv+rhjT/LxwB/9m+bv8zHQH/2cJ2/zEcAP/WvG//Mh0B/8e0d/+7o2n/jXdH/zMcAv///////////zIcAP/Zu2j/1Llp//////83HQX///////////8yGwH///79///+///+//3////+/////v8yHAD///z+//r49/8yGQD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhwA//7+/v/k5OT/Lx4E/zIcAP8cCQH/HAkB/zQcAP/v1JT/wqZm/zYeAv/auWr/Lx4D/9e+bv81HQH/2MB0/zMeA//Vu27/Mx0B///usf/myJf/Oh0C/////////////////zIcAP/WuGX//P/9//////8zHQT//////zMdAf8gDQD/IA0A/yIMAf8fCwD/HgoA/zQfAP8zHQH///////37+v8yGwH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIcAP///////////zEcAf8xHAH/NB8D/zMdAf///v3/28CH/zQbAf/cu2z/2L1s/zQfBP81HQH/2L5x/y4eAf/EqGv/NR0A/4NtPf84IAT/KhoD/////////////////zccAf///f///v/9//v///80HQP/+fj0/zQbAf8yHAD/MhwA/zIcAP8yHAD/MRoA/zIcAP/7/Pj///38/zEaAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIcAP82HwX///////36/P8xHAH/KhYF//////81HAL/7dmq//nnuP8xGwL/17xr//7/9v8zHQH/3cOA/93Kjf8sGwD//+yz/zQcAP8zHQH//v/9////////////FQgA//3x5f/////////5/zMeAv/+//3/MRoA//3////7/f3/+/39//z+/v8qFAL/MRwA//38/v/9/f3/Nx0F/zEaAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyHAD/OiYV//j59///////MRwB/zIcAP8zHQH/OB8F/9zIpf/p26v////x//////8jEQD//f39//LepP/e0J//WUkf/9rCiP8zGwP//v/9///////v7ur/ORwB////////////MRoA//7+/v/+//3/MhwA/zIcAP8yGwH/MRwA/zIcAP8yHAD/+Pr6/////////Pf/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhwA//z9+f/5+vj//v/9/zEaAP80HAT/Mx0B/yoVAP///tj///////////////v/MhwA//z//f/ZzZf/KxoA/9i+cv82IQL//v/9//////8yHAP/NB8A//////8yHgD/rpdZ//z//f8xGgD/KBIA//v5+f/8/Pz/MhwA/zIcAP/9//////////////8xGgD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIcAP/8/vj/5+fn//3++v8xGwL/MhwA/zMdAf/8/vj//////zIdB/8yGwH/MRoA/zIcAP///v///vPY/9q9cv82Hgb//v/9////////////Mh4A/zQfAP81HQD//f7u/y8cAf8vHAH/NRwC/zEcAP8yHAD/NBwA/////v/////////+/zEaAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyHAD//f/2//v7+///////GwgD/zIcAP8zHQH/Mx4C/zIcAP8vGQD/MRwB/zIdAv8yHAD/8e7m/9q/df81IAH//v/9////////////MxwC/zIcAP8yHAD/MhsB/zEcAP8xHAD/MhwA/zIcAP8vGQf///////////////r/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhwA/zchCP////////////7//f8xHAD/MRwA/zEcAP8rEwH/PCoZ//v7+/8xHAD/NSAA/+7dnv/Ft4b//v/9//////8xHQD/MhwA///98/8zHQv/MRkB/zEYBP8yGwH/MhwA//Lx8//9+/r//////yIRBP8xGgD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIcAP8wGwD///79/////////////////zQhBv8zHQH/Mx0B/zAbAP8wGwD/SkAv/zIcAP/79ML//v7+/zEaAP8vGAL/MhwA/zIcAP8yGwH/MhsB/y8dBv/9/f3/8vLy//39/f/+//3/MRoA/zEaAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhwA/zIZBf/9/////f///////////////////zAZA/8vHAH/MRwA/zIcAP8wGwD/MhwA/zEcAP8zHQH/NBwA/zMeAP///f3/9/f3////////////9vj4/zMaCv8xGgD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxGgD/MBkA///9/P/+/v7//v/9///////////////////////c2dH/t66k//v7+////////////+zq6f/h4Nz///7///z//f8vGQD/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIbAf8yGgT/MhsB/yEOAf/+//3//f/////////9///////////+/v/+//3//////09AN/8wGwD/MRoA/zEaAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEdADQyHAD/MhwA/zIcAP8yHAD/MhsB/zMcAv8xGgD/MhsB/zEZADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///gB///AAD//wAA//8AAP/8AAA//wAA//AAAA//AAD/wAAAA/8AAP+AAAAB/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD+AAAAAH8AAP8AAAAA/wAA/4AAAAH/AAD/wAAAA/8AAP/wAAAP/wAA//wAAD//AAD//wAA//8AAP//4Af//wAAKAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAbAP8zHQH/IAkB/ycTAf8xGgD/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEaAP8mGQD/7+bB//3uwP8vGAL/MBsA/y4bAP8rFgD/va59/9DEoP+hlnj/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMR0A//fsxv81IAH/MhsB/zIcAP84JRD/PS0c/0M1I/8uGQP///76/zEcAP8yHQH/7+a6/y0aAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD99tv//Pjg/zIcAP80HwD/MRwA/zEcAP80GwH/MhsB/zIcAP8wGwD////////tsP/r6+v/MRwB//Pdlv/968b/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIdAf/18tb/MhwA/zcgAP8yHAD//////zgcAP82GwD/MxoA/zMeAv8xGQH/Lx8C/+3Xp////////f///zIaBP/z+eL/3sNy/wAAAAAAAAAAAAAAAAAAAAAAAAAAMx0B/+3drv8zHQH/MhwA/zEcAP81Jgz/+Pfj//r45v8zHQH/Mx4A///////+/v7/////////////////NB4C/zMdBP8qGAH//////y8ZAP8AAAAAAAAAAAAAAAAxGgD//fPD/zMdAf8yHQL/MBkA/0o/Mf8zGwD//////////////////////zIdAv/068b/+Pjg/////v8hEAP//////zMdAf8eDgH/MhwA//3///8xGgD/AAAAAAAAAAAnEwH/NCAB//v74/8vFwD/MRsA/zQcAP8xGgD/+vnf//v74//9+t7////n///////+/vL/+vri//n54f/Xv3P/+Pjg//f54//3+eP/+Pjg/zUcAv+QhYH/AAAAAAAAAAD29eH/NB8A//r64v8xHwL/Mx0B//r23f/3+N7/9/nj//f54//6+d//+vTh//j65P/6+d//+Pjg//f33/81HwP/+Pnf//b44v/3+eP/+fnh/zIcAP/49OH/AAAAADIcAP/t6tz/JBIB//////8wGwD/MRwA//////8zHgL//v7+/////////////////zIcAP////////////////8zHgL/MBsA/5mPiP//////MBsA/zAYAP///Or/MBsA/zIcAP///v7/Mx0B/////////////////////////////////zEcAP/+//3//////xwPAf//////NR0B//////8yHAD/NBwA////////////MRwA/zIcAP////v/MRoA/zAZAP83HgT//f///////////////////zEaAP//////IREA/zAeAf///////////zMdAf////////////////8xHAD/Mx4D///////////////5//////82IAT/Nh4I/zMeAP83HwH/NB8D/zUcAv///////////zEcAP//////IRMA/zMdAf8yHAD/Mx0B////////////LR0A/zAbAP8yGwH///////39/f81IAX//////zIbAf8zHQH/OCEL/zQfAP////n/MRwA/zIcAP//////LxkA/zAbAP/+/v7////////+////////Mh0C////+v////////76//////8zHQH//////zMdAf8zHQH//////zMeAP+Ddmj/MhwA/zIcAP/9+/r///////7//f8sGwD/MhwA//3///8yHAD/+PLl//3///8qGQT/MhwA/zMdAf/+/Pv//f///zEbAP9eUUH//////zAYAP////v///////z//f/9////MhwA/wAAAAD+/v7/MhwA/9W7Yf/Vu2H/1bpj/9e8Yv/Uu2X/07tn/9K6Zv/WvWf/1rpm/9e8Yv/Xu2T/1rpj/9i7Zv8zHgL/2bxr/9q9bP/XvGv/1Ldm/zMdAf//////AAAAAAAAAAAwGAD/PSYM//X34f/0897/9Pbg//ny4f/48eL/9/Tl//f14//29OL/9fXj//fz4P/59OX/+fXj//j14P8yHQH/9vPk//j25P8wGwD/+fXj/zEbAv8mFAP/AAAAAAAAAAAyHAD/8vDv/zIdAP8yHAD/KxEA/6+TVv+ogzP/2r9v/+HIgv/SuGz/7tSY/zUdAf//////38F6//3//P8zGwP/Mx0B/zIcAP8wGgH/MhwA//////8yGwH/AAAAAAAAAAAAAAAAMx0B//7//f8xHAH/NB8A//Peqv/bumr/MhsB/9W7bv/44rL/clw4//////////////76/zMdAf/+/v7/MRwA/zIcAP8yHAD///7//zEbAP8AAAAAAAAAAAAAAAAAAAAAAAAAAP/////k4uH/Mx0B/zciB//z4bj///////////8xHQD/n4ZU//////8pFAD///////7//f8xHAD/Mx8G/zIcAP/+/f////7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///r//v7+/zIcAP/8//r/MhwA/////////v//3sBz////////////Mx0B/zYeDP81Hwb/MhwA/////v/8//3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMRwB//////9mWk7/MhwA/zMdAf81HQH///rJ//3///8yHAD/MhsB/zIbAf8fDgH//v/9/y4WAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIcAP8yIhb///////////////7/MyAF/yoaA//07+7//fv6///////Wz8b/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEaAP8xGgD/KRgF/xwMAP8yHAD/MRoA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+B/wD8AD8A+AAfAPAADwDgAAcAwAADAIAAAQCAAAEAgAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEAgAABAMAAAwDgAAcA8AAPAPgAHwD8AD8A/4H/AA==",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#outer > table",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
needDoubanInfo: true,
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_url"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
mediaInfo: {
selector: 'textarea[name="technical_info"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "408",
sport: "407",
cartoon: "405",
variety: "403"
}
},
source: {
selector: 'select[name="medium_sel[4]"]',
map: {
uhdbluray: "11",
bluray: "1",
remux: "3",
hdtv: "4",
dvd: "2",
encode: "7",
web: "10"
}
},
videoCodec: {
selector: 'select[name="codec_sel[4]"]',
map: {
h264: "3",
hevc: "6",
x264: "3",
x265: "6",
h265: "6",
mpeg2: "4",
mpeg4: "5",
vc1: "5",
xvid: "5"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel[4]"]',
map: {
aac: "6",
ac3: "11",
dd: "11",
"dd+": "19",
flac: "1",
dts: "3",
truehd: "9",
lpcm: "10",
dtshdma: "8",
atmos: "17",
dtsx: "18"
}
},
resolution: {
selector: 'select[name="standard_sel[4]"]',
map: {
"4320p": "5",
"2160p": "5",
"1080p": "1",
"1080i": "1",
"720p": "3",
"576p": "8",
"480p": "4"
}
}
},
Aither: {
url: "https://aither.cc",
host: "aither.cc",
siteType: "UNIT3D",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABO1BMVEUnPUA0UVVAZWpQfoRTgolJc3lIcXdSgYc5Wl4zUFQfMDIuSExCaG1SgYhckZhimKBbkJdajpVPfIJEa3Bdk5pXiZBLdnxFbXI4WFwvSU1PfYN1paxvoahsn6aGsLZhmKBbj5ZRgIZVho06W182VVlYi5Jgl59elJyLs7miw8eoxsqryMywy8+px8ucvsNrn6ZflZ0yTlJJcng/Y2iavcJtoKeBrbNelJtDaW4rREcxTVE9X2R5qK5KdHoqQkUoP0IsRUiNtbo3VlomOz5NeX8lOj0jNjkeLzEgMjQiNDchMzYkODslOTxYipEoPkEiNTgbKiwZJykcLC4dLS8uR0tBZmsaKCoZJig+YWYSHB0XIyUWIiQWISMfMTMRGhsVICIUHyATHR4cKy0QGRoTHh8YJScQGBkPFxj////TR8cdAAAAAWJLR0Roy2z0IgAAAAd0SU1FB+UEFw4WFlDBxPsAAAEBSURBVBjTFcppX4IwHADgPwmWmuWRVmCZdF9W2mmFlnlWNtBGY7YxWfL9v0H69vk9AMpCRFVVLaotaksxiENiObmymkpnsupaLr++sQmKbhS2UoVtwyjulEx9F/b2Dw6Pjk9Oz87LF1rpMgtXlap5faNG8+nb8l0ldw8PtcenZwvq9Yaiv5jVV2jWI2+tdqfb679bmWQsAR/Nz8FXHNkOGvZH2qgBqPfdH2LXdTFy2j/NLhBc8+iYenP6VbpjYHzgC59zOtOJhSgEojNmbE5c4tafD4RxTKaMCCGkg6WEMAypx8kscdcOwhACSTjFtkddNJFMBMCoCIj0bIq4DKY++wfZwT9SAOOuEQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0yM1QxNDoyMjoyMiswMDowMNu9360AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMjNUMTQ6MjI6MjIrMDA6MDCq4GcRAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
uploadPath: "/torrents/create?category_id=1",
needDoubanInfo: true,
seedDomSelector: ".torrent__buttons+.panelV2",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents",
replaceKey: [
"tt",
""
],
params: {
name: "{name}",
imdbId: "{imdb}",
sortField: "size"
}
},
name: {
selector: 'input[name="name"][class="form__text"]'
},
description: {
selector: "#bbcode-description"
},
imdb: {
selector: "#autoimdb"
},
tmdb: {
selector: "#autotmdb"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
anonymous: {
selector: '.form__group input[type="checkbox"][name="anonymous"]'
},
torrent: {
selector: 'input[type="file"][accept=".torrent"]'
},
category: {
selector: "#browsecat",
map: {
movie: "1",
tv: "2",
tvPack: "2",
documentary: "1",
concert: "1",
sport: "9",
cartoon: "405",
app: "10",
ebook: "11",
magazine: "11",
audioBook: "14"
}
},
videoType: {
selector: "#autotype",
map: {
uhdbluray: "1",
bluray: "1",
remux: "2",
encode: "3",
web: "4",
hdtv: "6",
dvd: "1",
dvdrip: "3",
other: "7"
}
},
resolution: {
selector: "#autores",
map: {
"4320p": "1",
"2160p": "2",
"1080p": "3",
"1080i": "4",
"720p": "5",
"576p": "6",
"480p": "8"
}
}
},
Audiences: {
url: "https://audiences.me",
host: "audiences.me",
siteType: "NexusPHP",
icon: "data:image/png;base64,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",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_id"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
chinese_audio: "#tag_gy",
diy: "#tag_diy",
cantonese_audio: "#tag_yy",
chinese_subtitle: "#tag_zz",
hdr: "#tag_hdr10",
hdr10_plus: "#tag_hdrm",
dolby_vision: "#tag_db"
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "401",
concert: "408",
sport: "407",
cartoon: "401",
variety: "403",
app: "411",
ebook: "405",
magazine: "412",
audioBook: "404"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
x264: "1",
hevc: "6",
x265: "6",
h265: "6",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "5",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "18",
dd: "18",
"dd+": "18",
flac: "1",
dts: "3",
truehd: "20",
lpcm: "21",
dtshdma: "19",
atmos: "26",
dtsx: "25",
ape: "2",
wav: "22",
mp3: "23",
m4a: "24"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "12",
bluray: "1",
remux: "3",
encode: "15",
web: "10",
hdtv: "5",
dvd: "2",
dvdrip: "15",
other: "11"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"4320p": "10",
"2160p": "5",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
other: "5"
}
}
},
AvistaZ: {
url: "https://avistaz.to",
host: "avistaz.to",
siteType: "AvistaZ",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QUPDicuFlMtFwAABCJJREFUOMu1lW1olWUYx3/3/TzPeT9nZ+7NHecr25TFFPFl2UJNtJqURUYFkVFQoCAlTIrCXiDB8IuUFGqCJYn2oZJEhH0Im1NC0G3OaJ7N6Uhzm562s7Oz85w9z3P1wQ2cVh+s/nB9u+7ffV339XLD/yT1L86FgKlAAMgDvYD9t+DtEc11T3SDX5WVKjUjrIg7wtgQ3NiW8VIn87IMeBqYDlSOX5AB9gI7AA/AnAB+ZkHPGMaagLe03G9siMIKS0hoCAh4KNIvofraBqVi2GOKC1lgFDgJ/AI4wHKgBxhSAE1zNKkRL7Jk9sw3SyLxzYFrl0qVYyMo9HieWQ+yAl2O0JyT9JEhOXTRpgC4AMwDHgVc4ArQah6t0fzmEVod5aMSX36TWVxgySCIA0pBly3s7hd+yghBDcvCisqQiq3SrE/2SVNeKAeqgONAB9AC9Jjr3vLTvdd+tVipjUbUsMRyIW6BbYMCx4IZLhQBHRnoTguFGaE6rIoVPD9esIPAaeB34BzgmM0H7Jr5MTabiI8pIVSijHSqlayCMp8wTytqsopnA9AaFE5pQfthSRw1amD4DZLHr9MGnAIuT9TMnFbIC0EflYgCXxroo1PyTI+C6lPY7eDLKkoRUgIRv2LqLKHDgVEPttSqkuIQya+6JHtnd+lIAQ06ipaYQpm3uHnjZ5ygQ7mGs+3w4rDHOQQDiAFeDhLXFLVBiEdgfkIVf1Cvwn+8rm/cCTatmFRhKhABy09vOszMWAp93qUrI3yPUCfCEq1ZrxTPALmssLFdWFmnSJTi681Kdbxi8khoYoSJCCoijJTXMDpnFaUVJciIUCaKEmCf5/GG65IUQQM/ukKbT3iqFiQiECFOzeRBMwkxIiYFWinOX+0gELwMRWl+CEEjLv1AP/CJCM2uy3bD4LAIK2ph9jTwBIBBMjIZPBYkiY/FoqC13+Z0t0tqKE/7tdvACcXHO/851+WBCBx4UKEjkPfI2w7J1NDkiHXG4IQXwsv7hLqFCSrmLuZsLyyqhHfXQti67TgdeF9pChQYU6HTESQIY356BxzO/zp4F/h6Tg7nLLrNMCyoCrPlyRAtO6Pseg3SGpzxDJMKhmqEdUth2IOqWSBBSGv5bvk2udp8afJT6IcbjYsDjux2feStgCZRlKOk2M87h+DTY2A7tx1zAj0zhbpHYGAQBkYgZ0rr1Qx7LuyHt7+8K+JjO13O9LD/Zo49rhFydLSaIy3wbfO9S/hmCuqroSAELUmupF221q+g++sW/lpNu+DIh0R7ji58b/hE1cArj2kB7rENq5Fb3+A+vpQzpYWsBNi1lX/WF42w/WWM059Tv2gu+4BOIF0Ux9aaUaC/oY7mzoNs+XgT5SL39/kYwDTL5KEnlrM2HGQNUOv3Ed25QzF/wX0x/xv9CdGEqkHFq79tAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA1LTE1VDE0OjM5OjQ2KzAwOjAwBxpkNgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNS0xNVQxNDozOTo0NiswMDowMHZH3IoAAAAASUVORK5CYII=",
asSource: true,
asTarget: false,
uploadPath: "/upload.php",
seedDomSelector: "#content-area .block:last table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="/download/torrent/"]',
needDoubanInfo: true,
search: {
path: "/torrents",
params: {
search: "{imdb}",
"in": "1",
order: "size",
sort: "desc"
}
}
},
BLUEBIRD: {
url: "https://bluebird-hd.org",
host: "bluebird-hd.org",
siteType: "bluebird",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACGVBMVEWotrlCjJo7l6k6laY7l6g/jp6brbE6f41G2vRF2PJF1/FF1/JH3Pc8j54ueok7vdU4tc04ts06vNQ5jZwra3gtnLAtmKwuma0rl6splaoqlqotmK0wnrMzeoclWmYyiJknfY4ieYoieYsheIosgJE2iJg1h5g2iJkwg5Qhd4kgeowsZnIuV2F3rrxBf4wSWGcYXGsXW2oWW2qDt8Oq2OOg0NyVxtOAtcNjnaspbnwiUVswUFh7r747bXkAMDwEN0IENkICNEAFOEOYxM+l0NtjkJtgjplnlaF9sL1nm6gjRk8qRU2Cs8FkkZ1Gb3lOd4FReYNVfYdGbXemztiLs70AHCYAIiwAIStHb3mGucc3UlsqQ0t+rryKvMqcy9ep1uG13+vF7vinztibwsx7oqwAHCUBIywAGyQoTFY7V18uTFR9sL5RgIwjUFsoVmEqWGIgTVgdS1YSQEsTQUwXRE9biZV9sb80VFwzWWF3rLpAeYYJSFYPTlsOTFoPTVt5qbSbxtKNu8iCsb55q7h4rLtWkJ0iTVctXWhgorE6hJQbbX4fcIEecIBsrbqDvcp2ssBtqrhoprVRl6YjdYYoX2ooZnIrk6cpj6IqkKMqj6MmjKAnjKAojaEpjqIojqEli58xdIItdYQ3s8o1rMM1rMI3h5Y2foxE1O9C0OpCz+lE1vE6j56Yqq9DmalAqLpAprhCnrCGn6X////cFElzAAAAAWJLR0SyrWrP6AAAAAd0SU1FB+YDAgQyIDB3PAEAAADuSURBVBjTY2BgZGKGAxZWNgZ2Dk4uOODm4WXg4xcQhAMBIWEGEVExcRCQkJSSkpCWkWWQk1dQVFJSUlZRVVPX0NTSZtDR1dM3MDA0MjYxNTO3sLRisLaxtbN3cHRydnF1c/fw9GLw9vH18w8IDAoOCQ0Lj4iMYoiOiY2LT0hMSk5JTUvPiMxkyMrOyc3Lyy8oLCgqLiktK2eoqKyqrqmpratvaGxqbmltY2jv6Ozq7u7p6e3rnzBx0uQpDFOnTZ8BBDNnzZ4zd978aQsYFi5aDAFLlixZvHjRUoZly1esRIBVqxnWrF23Hg7WbdgIAFw/WUNqMtpuAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTAzLTAyVDA0OjUwOjMyKzAwOjAwrsTcpgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wMy0wMlQwNDo1MDozMiswMDowMN+ZZBoAAAAASUVORK5CYII=",
asSource: false,
asTarget: false,
search: {
path: "/browse.php",
params: {
search: "{name}",
incldead: 0,
cat: 0,
dsearch: "{imdb}",
stype: "or"
}
}
},
BTN: {
url: "https://broadcasthe.net",
host: "broadcasthe.net",
siteType: "gazelle",
icon: "data:image/png;base64,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",
asSource: true,
asTarget: false,
needDoubanInfo: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
params: {
action: "advanced",
imdb: "{imdb}",
artistname: "{name}"
}
}
},
BTSCHOOL: {
url: "https://pt.btschool.club",
host: "btschool.club",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBwQr3f9M9AAAAz1JREFUOMt91M+LHXYVBfDPefPmR2ZeY0tnWoyxVgihrT8KQoo/SmwUN23RKtGdiAsFS7vRko1/QYdUEMGFS90KcSWoBIRY6mS0oRoTqVLjj9bEpI2pjUle5r3j4k1k6sID39W953A599xvbGPpu2dN3yoDu9UeHMRS2RNeR8ogXMCb5BTOM/13suLGM/eCwOLRM7CEfZkJ3UlW6JsYmwkOMIfbKltYoOdbL0jOYWv8zP2yePSM1m2D5PFwD21C5VTa1/Bak6tUarnskaxq908pRq1T1V9qxsNp7Q6fo7vDivhV6oXE65Lp1W/cbwfGK8+d/WcYTJPTaQ+WEfa3dk3rRObXzzySeGgQBpwIm5Kt/xF6G0bPvexmtyRZaPuB1qFpO5nW8cyv/+6BJJPZ82fcvP5/xHZi/uhZWNC+a1LT1iRrz25gEoaPiYMt+GuS5/FiMcQWS+EOLGN3dS+up/6B82K5bA2bqOGd4cnwoRk3I2zgS/TKFo+RR9vux91JRuosTpf3hC3MqeVhZsl5n3ZSvphYxVe2Y/RuPI0n1Mt4EYfxE3wTnxVPkO9rfxSWB22XtYdxCfdVPlNdxc+rH8R8+Gr4PI4luYLvjTN+VWzip9WH8WFsDvGx8ClxDL+pnsA9eAqb1R+QcWKOHK6exrlFiyIbE9OXwpfF18u5QeIRyVLlZOVPZEAen20qGwOD8bYtH8X78UM8VB1NTQ1YDHuxivcO1RtNx/gWuYB5eqF8e2p6cc4cM8LX8DNyLHxh5mEv4z58Eqfwi6w9u3F7kz1YjRTj6ivVNyKTyDw+YhaZ43gLi/g4Hsbd+C1+jFeyur65Fi1RvRyZXDxyAKytb97KcMzu1q3ajvoC1jrr2RpG98286a7MJjiztn6yjFw88sAtbndeyNr6S+qGMqQPhkfxLxwfkNPkUrlUPlE9hHdwNTsmfNtUNR6EVXoYny6Xw+/DH7ZJXS6H1F24FuaanNNeCH8vYyGyq+yl78SB7f9xiBOR5+mN7PBiSXvvLBJGYk41XC/XxBLZhZF2GQuSv23b9EfcvHjkwCxgsPadk1zFwO2tu8SDYV7ta1zByvY5vqq5Rn+d5C/b3v13Wf8BYeJvdWEcGZ8AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDc6MDQ6NDMrMDA6MDC0QHbWAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA3OjA0OjQzKzAwOjAwxR3OagAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
poster: 'input[name="picture"]',
imdb: {
selector: 'input[name="imdbid"]'
},
douban: {
selector: 'input[name="doubanid"]'
},
tags: {
chinese_audio: 'input[type="checkbox"][name="span[]"][value="5"]',
chinese_subtitle: 'input[type="checkbox"][name="span[]"][value="6"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "405",
tv: "406",
tvPack: "406",
documentary: "408",
concert: "409",
sport: "410",
cartoon: "407",
variety: "412",
music: "411"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
x264: "1",
hevc: "10",
x265: "10",
h265: "10",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "3",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "10",
dd: "10",
"dd+": "10",
flac: "1",
dts: "3",
truehd: "11",
lpcm: "5",
dtshdma: "3",
atmos: "3",
dtsx: "3"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "12",
bluray: "1",
remux: "3",
encode: "7",
web: "10",
hdtv: "5",
dvd: "6",
dvdrip: "6",
other: "11",
cd: "8"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "5",
"1080p": "1",
"1080i": "1",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
btschool: "1",
zone: "13",
btshd: "2",
btstv: "3",
btspad: "4",
wiki: "5",
hdchina: "6",
hdbint: "7",
mteam: "9",
cmct: "10",
ourbits: "11",
other: "12"
}
}
},
BYR: {
url: "https://byr.pt",
host: "byr.pt",
siteType: "NexusPHP",
icon: "data:image/png;base64,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",
asSource: false,
asTarget: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
}
},
subtitle: {
selector: 'input[name="small_descr"]'
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="dburl"]'
},
torrent: {
selector: "#torrent"
}
},
BeyondHD: {
url: "https://beyond-hd.me",
host: "beyond-hd.me",
siteType: "F3NIX",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACMVBMVEUAAAAJIO///wAAAP8IGvAWQ9wWQdsYSNgYSNkWQNgUPd4vgrlGuZU6n6w1kbMVPdwVPdsZRNEYRNUWQtkVQNkGGPGu/zQIHugZStkeV9EhXc4iYcwiYsshYMwgXM4eVdEYRtgSOeEeVtIiYcwkZskkZskiYMwdU9MRNuEVP9wgWs8jZcojZcofWdAUPt4RMt4fWs4kZskkZskQMeMeVc8kZckjZModU9IiYMsiYMwXRdkeVc8fZMcdVNAhW8qxwvNljuBTg9o/dtUgW80iX8n+/v/6+v709f7K1fgiYMsiYMoiYssiYMsiYssiX8siYMsgXMwgW8weVM8kZckdUs8XQtciYMwXQtgdU9MjZModVNEQMeIfWM0fWM0QMOEVOtQfWc0fWM4UOtkSNt4cUtEhXswkZckiYcsdVNARNt4WQNgdUs4gWswhXssiYcoiYcsiYMogXMweVs8YSNUkZ8klaMgkZ8glaMklZ8kkaMglZ8gjZ8hbidxJfNgtbM3B0PSete8kZssiZsgfZMdnkt729/7j5/xGeNkpacw6c9JMf9dnkd7N2vX//////v8ras0jZshKetrL1fjx8/36+v7+/v9GetYnaMp0muLr7/z+/v7k6vpnk9wjZslrk+Du8f3p7vxfi9w0cNDY4PnZ4vk1cdBNgdbu8vzv8f3s7/xJftYhZchgjdzr7f2vwPJVgtxTgtulufDo6/1mkN5GeNhcht4oZ8wmZstUgttHetgkZsmOuILKAAAAdHRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcbLvo9O3DcR4IXcz6+9JmCQ6N9viWEQeN/P0KXfX4aM3TIm7+dbr+/v7+wOf+/v7+6/T28/fr7L++cvtzIdEhafdjCZGMCA+RjA4IYNL6zF0IH2697Pb057prG30aCesAAAABYktHRI0bDOLVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5QQKBwYCrXu2GgAAAXtJREFUGNNjYGBgYGSSkJSSlpGRlZNXYGZhAANWRSVllZJSIChTVVPXYAOJsWtqaZeWlpeXlZWXl5bq6OpxMDBw6hsYllaUl1eWlABlKkqNdI25GLhNTEFiVdU1tdUVIFEzcx4GBQuQWElZXX1DY2U5SNTSisFapbS8rLqpuaW1rd2mqbqsvFTVlsGurLyso7Oru6e3z97B0akfyHVmcCktnzBx0uQpU3t7Xd3cPaZNKC/1ZPAC6p4+Y2bvrN6pU3tnz6kA6vdm8AE5ce68+b1AsGBhE8ixvgx+QMHy6kWLQYJLllZXAQX9GQLKqqrKm5Yt752/onflqiagirJAhqDg0qry1WvWrlu/YeOmzavLq0qDQxhC1UqrSids2bqtqWn7jp0TgI4PC2fgjdABKt0FsqGsCSQWGcXHwB8dAwwQUDABAZARHBsnwMAgGJ8QCRUDBp12YpIQKECFk1NS08pAgVyikp6RKQIJelHmrOyc3Lz8gsKiYjFxoAAAdfCapAG3hnMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDc6MDY6MDIrMDA6MDCSiKOlAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA3OjA2OjAyKzAwOjAw49UbGQAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
seedDomSelector: ".table-details tr:last",
torrentDownloadLinkSelector: 'a[href*="/download/"].bhd-fl-button',
needDoubanInfo: true,
uploadPath: "/upload",
search: {
path: "/torrents/all",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
imdb: "{imdb}",
search: "{name}",
sorting: "size",
direction: "desc",
doSearch: "Search"
}
},
sourceInfo: {
editionTags: {
"10-bit": "10_bit",
"2-Disc Set": "2_disc_set",
"2D/3D Edition": "2d_3d_edition",
"2in1": "2_in_1",
"3D": "3d",
"3D Anaglyph": "3d_anaglyph",
"3D Full SBS": "3d_full_sbs",
"3D Half OU": "3d_half_ou",
"3D Half SBS": "3d_half_sbs",
"4K Remaster": "4k_remaster",
"4K Restoration": "4k_restoration",
"Digital Extras": "extras",
"Director's Cut": "director_s_cut",
"Dolby Atmos": "dolby_atmos",
"Dolby Vision": "dolby_vision",
"Dual Audio": "dual_audio",
"English Dub": "english_dub",
"Extended Cut": "extended_edition",
"Extended Edition": "extended_edition",
Extras: "extras",
HDR10: "hdr",
"HDR10+": "hdr10_plus",
"Masters of Cinema": "masters_of_cinema",
Scene: "scene",
"The Criterion Collection": "the_criterion_collection",
"Theatrical Cut": "theatrical_cut",
"Two-Disc Set": "two_disc_set",
Remux: "remux",
Rifftrax: "rifftrax",
Uncut: "uncut",
Unrated: "unrated",
"Warner Archive Collection": "warner_archive_collection",
Commentary: "with_commentary"
}
},
targetInfo: {
editionTags: {
"2d_3d_edition": "2D3D",
"2_in_1": "2in1",
"3d": "3D",
"3d_anaglyph": "3D",
"3d_full_sbs": "3D",
"3d_half_ou": "3D",
"3d_half_sbs": "3D",
"4k_remaster": "4kRemaster",
director_s_cut: "Director",
dual_audio: "DualAudio",
english_dub: "EnglishDub",
extended_edition: "Extended",
extras: "Extras",
hybrid: "Hybrid",
scene: "Scene",
theatrical_cut: "Theatrical",
uncut: "Uncut",
unrated: "Unrated",
webdl: "WEBDL",
webrip: "WEBRip",
with_commentary: "Commentary",
dolby_vision: "DV",
hdr10: "HDR10",
"hdr10_plus?": "HDR10+",
hlg: "HLG"
}
},
name: {
selector: "#title"
},
description: {
selector: "#upload-form-description"
},
imdb: {
selector: "#imdbauto"
},
tmdb: {
selector: "#tmdbauto"
},
mediaInfo: {
selector: "#mediainfo"
},
anonymous: {
selector: 'input[name="anonymous"]'
},
videoType: {
selector: "#category_id",
map: {
movie: "1",
tv: "2",
tvPack: "2"
}
},
torrent: {
selector: 'input[type="file"][accept=".torrent"]'
},
category: {
selector: "#autotype",
map: {
BD100: "UHD 100",
BD66: "UHD 66",
UHD50: "UHD 50",
BD50: "BD 50",
BD25: "BD 25",
DVD5: "DVD 5",
DVD9: "DVD 9",
remux: [
"UHD Remux",
"BD Remux",
"DVD Remux"
],
encode: [
"2160p",
"1080p",
"720p",
"576p",
"540p",
"480p"
],
web: [
"2160p",
"1080p",
"720p",
"576p",
"540p",
"480p"
],
hdtv: [
"2160p",
"1080p",
"1080i",
"720p"
],
dvd: [
"DVD 9",
"DVD 5",
"DVD Remux"
],
dvdrip: [
"480p"
],
other: ""
}
},
source: {
selector: "#autosource",
map: {
uhdbluray: [
"Blu-ray"
],
bluray: [
"Blu-ray",
"BD 50",
"BD 25",
"BD Remux",
"UHD 100",
"UHD 66",
"UHD 50",
"UHD Remux",
"2160p",
"1080p",
"720p",
"576p",
"540p",
"480p"
],
hdtv: [
"HDTV",
"2160p",
"1080p",
"1080i",
"720p"
],
dvd: [
"DVD",
"DVD 9",
"DVD 5",
"DVD Remux",
"480p"
],
web: [
"WEB",
"2160p",
"1080p",
"720p",
"576p",
"540p",
"480p"
],
hddvd: "HD-DVD"
}
},
resolution: {
map: {
"2160p": [
"UHD 100",
"UHD 66",
"UHD 50",
"UHD Remux",
"2160p"
],
"1080p": [
"BD 50",
"BD 25",
"BD Remux",
"1080p"
],
"1080i": [
"BD 50",
"BD 25",
"BD Remux",
"1080i"
],
"720p": [
"720p"
],
"576p": [
"576p"
],
"540p": [
"540p"
],
"480p": [
"DVD 9",
"DVD 5",
"DVD Remux",
"480p"
],
other: [
"Other"
]
}
}
},
Bib: {
url: " https://bibliotik.me",
host: "bibliotik.me",
siteType: "Bib",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBwgUxywuxQAAA51JREFUOMvNlM1rXGUUxn/nvfe99733zkxnmk6bxDRaUGwWUsEiSPcF0X+g24JLN4LbLtwJurXQ7rqxuhTcuKiWWlxJaamC1CRtmpjJfGSSSe6dO/fjfV20paDQgiuf1QPnPL8DB86B/7vkZQ3Xrl0DaAEXRVzH97WNopgkSZib61qt9dfW2j/PnHnr5cDLl7/CWtvRWn+odfCl7/tdrQOiKCRJGiRJo/aU+qyy9vb+5DAYDXr/Bl65cvWZ7YIoa8vzwFXt69CYBqEJiSKNMYaytK6ZRLZG3P7kgMPJHv6z9A8/3sTzPGpbqwf37/u+1l+AOy/iKc9TQbPVxDnBGB9jQmazgtpGUtZ44/GAg4OUY91jz4FKKZTnnZ3l+aWqKn1r7Tta6+NBEJA0EowxhKHBGIPnefh+gOeHjHeHOGfpdueIIvMEeP36N4x62+equv54Vsw+qOpaBcpDeepp2MdEBiWKoigJQyGOI8bjMc5ZWq0WsUmwucX79d5v79+/e+e1qio/cs5eyNJDMSYiSRJ83wdxKOVjTBNbW0QcSinyPKfX69Fut4miiKqo0U7j7+2NvyuKgtFwoOYXFul05gjCgMgYiqIgz6dY65jslxw9GtFoBBwcHPJ4YwNfa5TnkaUZZVXS7R7H//mnG/6gv0OWZQxHu8RxTKvVYmVlhcXFBeq6ZjQa4zjAmAbD4ZCtrS3iOGZhYZE8z8nzKUkco0SQG7d+caPhgI2H6zxaX2c42CH0PY7PL7DwyiLLy6+yvHyKophSVRVpmlKWJe0jRzgxP0+apsxmM+qqYprnyKPersvSlOGgT2/7L3Z2tulvbbLd20bhOP3mKc6++za1i3j4cIP0MCXQAVprmq0mYRjSbrdptloIIKuPd74XkVopddrBG/ks59HaGg/++J29QR8lOUFkUapDv79LlmUA2Nqitc/c3BxLJ0+ytLREp9NB1jb7HlADnzjnPn3qTygRfzLZ597dO9y+dZOqLGi32wBMsynW1pRFQRzHJHGMDgI8z3tyemubfZxzLRFpACeBb4Fla21VFIVMp5ma7E+kKGZM9saMd4eMxyPWV1exRY7WIToMnwOfaW2zD2Ccc+8BsYjKlafO4dylsqy8uq4oi4KimFGWBVmakmUp6WFKmh4wy7MXf5vVxzsAr4vIBRFRAKIUSsSKSEeEi0VZHZlmGdNpSjHLX/4PXzDoGPC5iMyLSAUgIv8N+HQ1AN4/a38DST6z5HJSpzwAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDc6MDg6MjArMDA6MDBZ+4VCAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA3OjA4OjIwKzAwOjAwKKY9/gAAAABJRU5ErkJggg==",
asSource: false,
asTarget: true,
uploadPath: "/upload",
name: {
selector: "#TitleField"
},
description: {
selector: "#DescriptionField"
},
anonymous: {
selector: "#AnonymousField"
},
image: {
selector: "#ImageField"
},
format: {
selector: "#FormatField",
map: {
epub: "15",
mobi: "16",
pdf: "2",
azw3: "21"
}
}
},
Blutopia: {
url: "https://blutopia.cc",
host: "blutopia.cc",
siteType: "UNIT3D",
icon: "data:image/png;base64,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",
asSource: true,
asTarget: true,
uploadPath: "/torrents/create?category_id=1",
torrentDownloadLinkSelector: 'a[href*="/torrents/download/"]',
needDoubanInfo: true,
seedDomSelector: ".torrent__buttons+.panelV2",
search: {
path: "/torrents",
replaceKey: [
"tt",
""
],
params: {
name: "{name}",
imdbId: "{imdb}",
sortField: "size"
}
},
name: {
selector: 'input[name="name"][class="form__text"]'
},
description: {
selector: "#bbcode-description"
},
imdb: {
selector: "#autoimdb"
},
tmdb: {
selector: "#autotmdb"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
anonymous: {
selector: '.form__group input[type="checkbox"][name="anon"]'
},
torrent: {
selector: 'input[type="file"][accept=".torrent"]'
},
category: {
selector: "#browsecat",
map: {
movie: "1",
tv: "2",
tvPack: "2"
}
},
videoType: {
selector: "#autotype",
map: {
uhdbluray: "1",
bluray: "1",
remux: "3",
encode: "12",
web: "4",
hdtv: "6",
dvd: "1",
dvdrip: "12",
other: ""
}
},
resolution: {
selector: "#autores",
map: {
"4320p": "11",
"2160p": "1",
"1080p": "2",
"1080i": "3",
"720p": "5",
"576p": "6",
"480p": "8"
}
}
},
CHDBits: {
url: "https://ptchdbits.co",
host: "ptchdbits.co",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA81BMVEX/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD0AAAAAAAAAAAAAAAAAAAAAAD/AAD/AAD/AAD/AAAAAAAAAAAAAAAAAAAAAAAAAAARAAAjAADaAAD/ICBmiIgEBAQDAwMBAQEAAAAAAAAAAAD/AAD/3d39/v7GxsYAAAAAAAD/AAD/5OT/////AAAAAAADAwMCAgIBAQG5ubmAgIBaWlq6urq1tbWysrI0NDT///9/f3/7+/tJSUnLy8tRUVFOTk6mpqb19fXe3t7d3d3c3Nzu7u69vb0hISEdHR0XFxeOjo5X4OIMAAAAM3RSTlMAgbIHAnne59jwjna/7aAVK0RCQQ1VtrUFA7L7/PhdGBgDAwW2/unnnQaxGKDt6LawIeA+sl6aAAAAAWJLR0QyQNJMyAAAAAd0SU1FB+UECQo4D4hi7WcAAACoSURBVBjTY2BgYDRGBUzMDCysbGiC7EwMjBzGxpxc3HDAymNszACU4uXjFxAUggBhEVExcZCgmISklIk0GMjIyskrKIIExZWUVUzNTExMzE1NVdXUNTRBglraOroWlkBRK2sbWzsTPX2QoIGhkb29jamJiYO9vaMTUAdc0NnF1ckNXdDdw9PLG13Qx9fPPwBdEKuZ6IJYnYTV8Vi9iRkgWIMOayBjiw4AMGtCDVTI3J4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMDlUMTA6NTY6MTUrMDA6MDBQcxNEAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTA5VDEwOjU2OjE1KzAwOjAwIS6r+AAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(6)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: 'textarea[name="descr"]'
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: "#torrent"
},
tags: {
chinese_audio: 'input[name="cnlang"]',
chinese_subtitle: 'input[name="cnsub"]',
diy: 'input[name="diy"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "403",
tvPack: "402",
documentary: "404",
cartoon: "405",
sport: "407",
concert: "406",
music: "406"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "5",
h265: "5",
x264: "1",
x265: "5",
mpeg2: "4",
mpeg4: "6",
vc1: "2",
xvid: "6"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "7",
dd: "4",
"dd+": "7",
flac: "1",
dts: "3",
truehd: "11",
lpcm: "13",
dtshdma: "10",
atmos: "10",
dtsx: "3"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: [
"19"
],
bluray: [
"1"
],
remux: [
"3"
],
encode: [
"4"
],
web: [
"18"
],
hdtv: [
"6"
]
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": [
"6"
],
"1080p": [
"1"
],
"1080i": [
"2"
],
"720p": [
"3"
],
"480p": [
"5"
]
}
},
area: {
selector: 'select[name="processing_sel"]',
map: {
CN: "8",
US: "3",
EU: "7",
HK: "5",
TW: "9",
JP: "4",
KR: "6",
OT: "0"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
chdbits: "14",
sgnb: "13",
remux: "1",
chdtv: "2",
chdpad: "15",
chdweb: "12",
chdhktv: "11",
stbox: "10",
onehd: "8",
blucook: "16",
hqc: "17",
gbt: "18",
kan: "19"
}
}
},
Carpt: {
url: "https://carpt.net",
host: "carpt.net",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAFZUlEQVR4nGWVeTQVaBjGPy5Tlq4lNAzGtNKinJutRlLTJqJmLJPtJEmbasScamZUamomS5pSYUqFa7m4rmS7C4UU10jFvVxxyTIqJVLd7ZnjNpnm9Pzzfn+873Oe95z3/D5CPhaISjSiVcefqaie4lbrFELdS3yWMy2TQlq9W+acpW63Pq+9NXI03PV9Pyb6P5FXjhdlvM6Fl7ZtuuW2PWyv1vThVHladwLY4ixwxQUo7r2muDjwO/Z3hIz41biVBHbssM7Bw88+hPnEjDgTg58EEcLiQTqeKp7IOl4Kpe1jIqlwrE3W+JKvqB2qkd4cKJbm9WTKkrrj5XtbA7FN5B83PhraEKo+saayriHGh6t3PxiQd2JM8lomGm2Xikba0DX6GMJXrWga4uP2IA83egtBF19TpHQkSWNbTsrDhVuw9sbi2PfByPtgMxV21MSe2Aeidy34+82A9NGrh+gcFeH5u2cYlgyj/00/2kYEqH9eh4qBUjB6spDSkYQ4wUkcaAqX+Ak8EdwV9OvEypG8sJAXeAbR2065WDGAZnk7emT9GJGNQgLgmWIYIqkYDa/44PaVImcwD8m9qTj9+DT2t+yTr+evg0utnTi+67ix0rByhMu/N8jBk9Y6+dDVNHR6eqCLx8Tg6z4MCZvQJ6yHqKUS/E4OSsaqcJOTgOzyo7hUdRjHS7YiNHuldHnVXMx77nSAOBXRgjLH6Hi0f7ukb5Mf2vVMICIaaHf8GqL8y+iaaoou468g1jRCt6EFeKw4lLBi0GpLQz/VDGKzWXihPwft08wVgRn2cmJBnx1QxjiKtx47JPfWuIDZlo7K5mzU9XLRmJGAZkNTNJtOR+O6Vajf7I6/HG3BDfXAxZqjqHFciFZdM7BtpqPM1gK+P+qBuNW4pjXm/YE7uWdk11LDUFh0AmVZx8ER5KEy5zRqtfVRazEDJeJClCbsA8/ZDs1EDVcS/JC5ZRkERB+ReyxA6qmYnE9A/Cs9uxmhqxH9IkGR2PIb0o8FoGCfB1j0w2DmxaBMXQulpqbIqT+P8pnG4BKCKqKJuARPJHsvQj2hYtdWA6iyKaDmEBD7N/470v3sEHdktfRE4yGkRW1Acl4EkvtTcf3PcDAok5BraICU+3G4VHoQ5+g7cSojEGFV3yN+lTm4RBP+AZNBKgim5BAZcXkaFHDgkCWYhEgYhCBlgw0u/LAWqTE+SEoMwlVCcEVLA/FNxxDz5BSiHh9EsCAE7ndW47iDHoqJOnx91ZSGs/M/B3HPdF9l3eSA4N0mOGuirUgnKkqTMw5m+PnWLsSc3YgjFzYhsnE3dtZvgV+1J1x5zrArnw/7eB0siSCYcY6iUL9BMJ89X6C8w6UVzhzzBjPYllrJgiItEHRuMbwe+cC/3hsB9/2wuckHXrVuWH9rBZZxbbGgbAZMWFRosFQxqZhAhUGkRhU6oBXTNisN3RpCLWfVzIFuoZrMtM4CVrVWsKuYhyXsRVjKsYED2xq0civMLfkSZix96BWoQyuPQLeAAkInUsc7NnBuWFPzPzhYVTjE6lfpQCuLSPQYFJkBUwPGhVSYs/RhUqgDI6YmphZ8Bp18itJMg6ECkkkkLrdpSGpLHF1R8q3TfzCMJkpIflE6L27q7WnQKiJSHYaqdHIuGU8AlWwClfGToBOQLAKNXKKwKNKTuPOXI/Ru8LsQdqTSbAKD4yk/oMe0wOEktdi4N6jVD+YsXcV31d/AmbMQjhVW8K1ZB/cqJ9hXLsDlgRTpUu56PrlEcRmfozXQ/uXhx+I5qympzXIzV80w+cWYORthdRFw5XljJWcDdt6Nku9qjIIhY7rQ6PqsjdE50Upaf/wN/AMeaUa+v6I4TwAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: 'textarea[name="descr"]'
},
imdb: {
selector: 'input[name="pt_gen"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: 'select[name="type"]',
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
cartoon: "403",
concert: "445",
variety: "405",
music: "406",
sport: "407"
}
},
videoCodec: {
selector: 'select[name="codec_sel[4]"]',
map: {
h264: "1",
hevc: "2",
h265: "2",
x264: "1",
x265: "2",
mpeg2: "3",
mpeg4: "1",
vc1: "4",
xvid: "5"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel[4]"]',
map: {
aac: "7",
ac3: "3'",
dd: "3",
"dd+": "3",
flac: "5",
dts: "2",
truehd: "1",
lpcm: "4",
dtshdma: "2",
atmos: "2",
dtsx: "2",
mp3: "6",
ape: "8",
wav: "10"
}
},
videoType: {
selector: 'select[name="medium_sel[4]"]',
map: {
uhdbluray: "7",
bluray: "8",
remux: "9",
encode: "1",
web: "2",
hdtv: "3",
dvd: "6",
hddvd: "1",
dvdrip: "4",
other: "9",
cd: "6"
}
},
resolution: {
selector: 'select[name="standard_sel[4]"]',
map: {
"2160p": "1",
"1080p": "2",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel[4]"]',
map: {
carpt: "1",
wiki: "2",
cmct: "3",
mteam: "4",
other: "5"
}
}
},
CinemaZ: {
url: "https://cinemaz.to",
host: "cinemaz.to",
siteType: "AvistaZ",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAABGdBTUEAALGPC/xhBQAAAAJiS0dEAP+Hj8y/AAAAB3RJTUUH5QwGCikNXab0zAAAAL1JREFUGNNlyi1IA3EAxuFnHzoE3WSw4hBsBpOIzWTUZBaFlctL64LdImJfH1ZBZ7YLNneMQ8OF3dzcQNC/QZGh7y8+bwFbTkVKEg0ndsRScjZdSiR2DS26ta7iSMyFKws4lNnDsjtN8mpeTNGX6SOTqlJQciyzpGlD1bN9B87FzGsZGBvpmhhJReZUoK4nCD4FwYNtZ9qw6kn4bagnuC/6u7IyPvL/4N0bct8wy7HIjdcixrrWhJ/Lo45rK18qoT8Iilms5wAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0xMi0wNlQxMDo0MToxMyswMDowMGagtagAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMTItMDZUMTA6NDE6MTMrMDA6MDAX/Q0UAAAAAElFTkSuQmCC",
asSource: true,
asTarget: false,
uploadPath: "/upload.php",
seedDomSelector: "#content-area .block:last table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="/download/torrent/"]',
needDoubanInfo: true,
search: {
path: "/torrents",
params: {
search: "{imdb}",
"in": "1",
order: "size",
sort: "desc"
}
}
},
Cinematik: {
url: "https://cinematik.net",
host: "cinematik.net",
siteType: "Cinematik",
icon: "data:image/png;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8ACAgIAA0NDQATExMAFBQUABsbGwAfHx8AJycnACoqKgAtLS0AMTExADU1NQA5OTkAPj4+AEFBQQBFRUUASEhIAE1NTQBRUVEAVVVVAFlZWQBdXV0AYWFhAGVlZQBpaWkAbm5uAHJycgB1dXUAenp6AH5+fgCCgoIAhoaGAImJiQCOjo4AkpKRAJSUlACdnZ0ApaWlAKioqACsrKwAsrKyALS0tAC8vLwAxcXFAM3NzQDa2toA6enoAO/u7QD+/v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ykgICAfHx8fICv///////8iJiAZGRkYGRgiKf//////IBsZFBQUFBQSIC4p/////yIkGxQQEhISEB0wLib///8gGRUQDQ0NDQ0SFBkfKf//ICIZDBQdEgwMCQwYGxv//x8dFQkZMC0fDQkJFRsZ//8fHxUFGDAwMCwYBxUbGP//Hx8YAhgwMDAwIgUVHxj//x0VDTEVMDAqFQUCEBUV//8dIhgxDSkVAzExMRUgFf//HRAJMTECMTExMTEMEBX//x0lGTExMTExMTExGSQU//8dEgwxMTExMTExMQwQFP//HSAVMTExMTExMTEVIBX//yYYGBUYGBgYGBUYGBQg/4Af//+AD///gAf/P4AD//+AAf85gAH//4AB//+AAf//gAH/P4AB++eAAb5fgAFc6YABvl+AAVc6gAE/v4AB/z8=",
asSource: true,
asTarget: false,
uploadPath: "/upload.php",
seedDomSelector: "div.odiv_1 + table >tbody tr:nth-child(3n)",
needDoubanInfo: true,
search: {
path: "/browse.php",
params: {
search: "{imdb}",
cat: 0,
incldead: 1,
srchdtls: 1
}
}
},
Concertos: {
url: "https://concertos.live",
host: "concertos.live",
siteType: "UNIT3D-Legacy",
icon: "data:image/png;base64,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rRvmotBO9rKvAe39kDEM7dv4twRt539nXA9abmZahZabmUah5WamVWi5mWkVWm5mGoWWm5lWoeVmplVouZlpFFpuZlqFlpuZRqHlZqZVaLmZaRVabmYahZabmVah5WamUWi5mWkVWm5mWoWWm5lGoeVmplVouZlpFFpuZlqFlpuZVqHlZqZRaLmZaRVabmZahZabmUah5WamVWi5mWkUWm5mWoWWm5lWoeVmplFouZlpFVpuZhqFlpuZVqHlZqZVaLmZaRRabmZahZabmUah5WamVWi5mWkVWm5mGoWWm5mPpas/zCs/nqA/xpnS8Ju69C9khqnUdh3WhAAAAAFvck5UAc+id5oAAACZSURBVDjL1dOxEQMxCATAU0AJ9EMJCkT/rfzYL/HcRXbgwGTsD9L8cAKocnHvmdRbMrz6DiMFUsAFLBlGMlSfdOADLvAMbLCfwnIBCEAgBCYYFgQgEAIBhgmB+HcYwWBtDVGZaGAKrpCfg803jAO2t1hw1npGTMEVKgn3p9XA7kw8gHZJ/f4k6A8D34BX4HbZSSTN9H7fXnUBXz+QkWPfUykAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMTAtMjdUMDM6NDc6MzUrMDA6MDBKPrQ3AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTEwLTI3VDAzOjQ3OjM1KzAwOjAwO2MMiwAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyMy0xMC0yN1QwMzo0NzozNSswMDowMGx2LVQAAAATdEVYdGRjOmZvcm1hdABpbWFnZS9wbmf/uRs+AAAAFXRFWHRwaG90b3Nob3A6Q29sb3JNb2RlADNWArNAAAAAJnRFWHRwaG90b3Nob3A6SUNDUHJvZmlsZQBzUkdCIElFQzYxOTY2LTIuMRwvbAsAAAAQdEVYdHhtcDpDb2xvclNwYWNlADEFDsjRAAAAKHRFWHR4bXA6Q3JlYXRlRGF0ZQAyMDE4LTA0LTE1VDE4OjE0OjIxKzAyOjAwX6YhzgAAADN0RVh0eG1wOkNyZWF0b3JUb29sAEFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChNYWNpbnRvc2gpmllTCQAAACp0RVh0eG1wOk1ldGFkYXRhRGF0ZQAyMDE4LTA0LTE1VDE4OjMzOjE2KzAyOjAwJmTVnAAAACh0RVh0eG1wOk1vZGlmeURhdGUAMjAxOC0wNC0xNVQxODozMzoxNiswMjowMBrAhiIAAAAWdEVYdHhtcDpQaXhlbFhEaW1lbnNpb24ANjTJIcZzAAAAFnRFWHR4bXA6UGl4ZWxZRGltZW5zaW9uADY0FLcf9gAAAEt0RVh0eG1wTU06RG9jdW1lbnRJRABhZG9iZTpkb2NpZDpwaG90b3Nob3A6MGI0NjQyYjktODE1OS0xMTdiLWI3MzQtOWVjODc3YWYyZDliEBg3pQAAAD10RVh0eG1wTU06SW5zdGFuY2VJRAB4bXAuaWlkOjlmMThhNDc5LWIwYTUtNDczMS1hNjcxLTZhYTllMjAyNjdhMl6RzKYAAABFdEVYdHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRAB4bXAuZGlkOmMwOGUxNmM1LTZkNGYtNGVlMy04ZGVkLWYzMTJiZWIyMWVlOSZ+IrEAAAAASUVORK5CYII=",
asSource: false,
asTarget: true,
seedDomSelector: "div.torrent > div.buttons.mbox.mbox--small-bottom",
uploadPath: "/upload",
needDoubanInfo: false,
search: {
path: "/torrents",
replaceKey: [
"tt",
""
],
params: {
name: "{name}",
imdb: "{imdb}",
order_by: "size"
}
},
name: {
selector: "#title"
},
description: {
selector: "div.sceditor-container textarea"
},
imdb: {
selector: 'input[name="imdb"]'
},
tmdb: {
selector: 'input[name="tmdb"]'
},
mediaInfo: {
selector: "#mediainfo"
},
anonymous: {
selector: 'input[name="anonymous"]'
},
category: {
selector: 'select[name="type_id"]',
map: {
BD100: "1",
BD66: "2",
UHD50: "3",
BD50: "4",
BD25: "5",
remux: [
"12",
"7"
],
encode: [
"8",
"10",
"11",
"13"
],
web: "9",
hdtv: "17",
dvd: [
"14",
"16"
],
dvdrip: "13",
other: ""
}
}
},
DicMusic: {
url: "https://dicmusic.com",
host: "dicmusic.com",
siteType: "gazelle",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB0VBMVEUAAABRyvRWzPVd0PRQyvRdz/V83fiA3/h+3vil7vt32/d/3vhRyfVRyfRQyfVRyPVSy/NNzvBQy/RRyvNdx/BcxvFSzvgA//9RyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRQyvRRyvRRyvRRyvRRyvRRyvRRyvRSy/VUzPRRyvRRyvRRyvR73fiB3/lRyvRRyvRRyvRRyvRUy/Rl0/Z53PiC4PmF4fmF4fmA3/iC4PmF4vqF4fmD4PlRyvRRyvRRyvRQyvRe0PV73fiA3/h+3vh+3vht1vdazvVSyvRs1vZ/3vh+3vhRyvRPyfRQyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyvRRyfRRyvRRyvRQy/RRyvRRyvRRyvNRyfNQyvRSyvRSy/ZRttpRqcdVzPRg0PVq1fZw2Pdz2fd02vd12vh02vh00+90z+ly2ff///+GemWQAAAAh3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLmt8WBYGi/v8w0AJg+iRUDw1GggrWZ72+vTw1WkEGV2y5/JNdNKfAlaZiUlUxv7IDh+OFxWT9eczjK6505EQit33+fv7+/v5/f37/ukOjUNFS1FRUVCB8dtmUDTreOXCPjbxMAskEfiWBXOqAzMzDrfyAAAAAWJLR0SamN9nEgAAAAd0SU1FB+cKGgg3G6bwFqAAAAE1SURBVCjPY2AYHoARBnBIS0hKScvI4lLAKCev0K6opIzVDJCIiqpCe7uauoamljaqPEhSR1dP36AdCAyNjE1MzYDyUFNApLmFpZViOxxY28CkQUDW1k6hHQXYOzAyODo5u6gwMsq5urmjSnZ0engyMXh5KxrY+/j6+QNFurrau2Ggp7cvIJAZ6Jeg9vbgEJD6/gkTJ02eMmXq1ClAMG36jGmhYUC7wyMi2xWjDKJjYuPi4+MTEmdOTooHgeT4lFSQ09KC29MzMrOyc3Jzc/PyC9oLi4pzIaAE5CXJ0nYZRhZWNnZ2dg7OsvKKSi5udgjgBoVHVXVpDTSAeBhr6+p5+fgRoSXAmNHQ2ASXBgJBIaTAFGZsbtHGFYUMDEKtbfWMjLy4pEVEgeaJ4Uwh4kBAv/RIPQAAlh1hyJQd92oAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMTAtMjZUMDg6NTU6MjYrMDA6MDA7po/7AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTEwLTI2VDA4OjU1OjI3KzAwOjAw7Iw88wAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyMy0xMC0yNlQwODo1NToyNyswMDowMLuZHSwAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
params: {
searchstr: "{name}"
}
},
torrent: {
selector: "#file"
}
},
DiscFan: {
url: "https://discfan.net",
host: "discfan.net",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBzkJYndFrgAAAwxJREFUOMt9lFlvJEUQhLOOrj6qp+duH2Ps1bJIIOD//xOeOBZ7oe2Zcc/0XXfyYEu7sBbxlqH8lEopFAQR4S29+oS8jOStHf4m9iI9TagUBRdEEsVpJAQh5P9grbVVOhKJSAVaF+/3pnt4qNpjXFx8+HD7zV2c8DdgRDyfz1VVCRFflJdcCESCwQXVHY/HX5qn3451fap/+vEHKfMXhL6SgF1zru7v6/rcNk3XNICBc8oCjqN56vXAARnW9enjH/dKqX/BMCk4PEmjYuoHNT63J6UnoBQI1q07ekhkNi+KvJCB4vF49N6/wgig2zZV6oLhNecJpX3b1afngL4x6rEbJpGuN5vNuiyKpRBCKTVN4+vPzphmaCgEGUUbgjGxfxn76f7TaVYb5ZrZspyx3VU5X8wjRiLnInTdYS9lzgHAWFM7HdAzChknGeO5MRMAR5JsN5YxpaZ5JBbOiVGlWnMaOq2m8ZIDgJ4mZY1BxwPrECgBT0mayovr3Xq9rqrq14+/R+OptI6gJeAogcFmahg4ACjvD88nPekQggveaTeT8lKkIo6BkCRNMAQ1tBO2hAfCkdNoghA5ywGAEXJ8PNXns7EOrY8ciquNny+qx2oYuqf9HoBM0eyhI2IcGdo4QpWwPMs4AMhMUkJNP4rA1nF0M8vuVmuTZVqNfz7XRo95Khe7azVM/fkc+j511rM8zyQHgCxNv73eRXUzj/ilzHflKru5g91l0zf4d3VrdZQIxUW2TgYp9dAPbb8py0gIDgCUsfffvRfHukC/nC/ysvTbjUjTDEOR95lWmdJ+aE1eZEmSCeEDrMvt52wvtxv/8/difyhmhduuaJ4QQO99ANBA02DkMBrKIC/6pt8sV7Ni9hmmhC5vbgYhFOFQFCllIQR0DgmxlARLYgzS2upwSOWsvLogQL7INkAkxOzqSiexHUeLGBCRECRA4sSzqLX6NE6L5er23S3jryfJf5okhGCMGbpOGWOMmaYxTJOgpNhs56t1kmVf9gH5uoZeHKP1qJRzTjCWScmF+LqJ/gFiT9/X+5vOiQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNzo1NzowOSswMDowMA4aMCMAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDc6NTc6MDkrMDA6MDB/R4ifAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: 'textarea[name="descr"]'
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_url"]'
},
torrent: {
selector: 'input[type="file"]'
},
category: {
selector: "#browsecat1",
map: {
tv: "411",
tvPack: "411",
documentary: "413",
cartoon: "419",
sport: "417",
concert: "414",
variety: "416"
}
},
videoType: {
selector: 'select[name="source_sel"]',
map: {
uhdbluray: "2",
bluray: "3",
remux: "0",
encode: "10",
web: "9",
hdtv: "1",
dvd: "4",
hddvd: "4",
dvdrip: "10",
other: "0"
}
},
area: {
selector: "#browsecat",
map: {
CN: "401",
US: "410",
EU: "410",
HK: "404",
TW: "405",
JP: "403",
KR: "406"
}
}
},
FL: {
url: "https://filelist.io",
host: "filelist.io",
siteType: "FL",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABAlBMVEUsg6Qsg6MsgqMsWWssRU8sR1IsJiYsKSosLS8sLC4rLS8rLjErLjArLTAsKSkrMjYpSVcjeZsig6oihKsje54oS1okb40nWGwsKissKCkrNDknV2ofm8sifqIlaYQkbIglZ4IoUWIhj7okbIknVWgglsQoTFstIiAoT18laoUrNTogl8UmWm8qNz4qNz0qNjwmXnQglMElaYUsKCgqOkIlaIIfmsogmMcglMIjfJ8mYXgsJycpQUwfnMwpSFUqPkclZ4EsJSQsKy0rKisqNj0oTl4sJCIrMDMnUWIgkb0hi7Ula4glaoYpP0grNDojdZUpRlMsKiosLC0igqgpRlL///+rTVq6AAAAAWJLR0RVkwS4MwAAAAd0SU1FB+UEDAMIEgwtfPAAAADJSURBVBjTbZHHFoIwFAUDAoGoqGAv2BV7r1iw9+7/f4uKiKDMIos5bzM3AGD4DxgAmIUgDRAWDOAEBQ1QBA5wEtIGIKlIRkMnEbK+QDY7o0nW4XRxHO/2eH1+TQaCoXBEiMbiiSSrk6l0JkshMZGDX5n3FYqlcqVaq39lo9lqd7q9TF8vpYF7KIijsbctTyCczt6X82p4sWRX6822vtsfJEXO/MfT+YKYq8xz3O1OqUXIhhj6+SoJahH9DlRTP/J/ELPpTEc2+44Hf1AYDR9uHSMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTJUMDM6MDg6MTgrMDA6MDCjgoMzAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEyVDAzOjA4OjE4KzAwOjAw0t87jwAAAABJRU5ErkJggg==",
asSource: false,
asTarget: false,
uploadPath: "/upload.php",
search: {
path: "/browse.php",
imdbOptionKey: "3",
nameOptionKey: "0",
params: {
search: "{imdb}",
searchin: "{optionKey}",
sort: "3"
}
}
},
GPW: {
url: "https://greatposterwall.com",
host: "greatposterwall.com",
siteType: "gazelle",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAYCAMAAADJYP15AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABVlBMVEUAAAAvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMEvnMH////T/m9bAAAAcHRSTlMAABScbxoq5/nNlouiawwn4/36fQENv7PZH3D85e83GcnmK5OtCcbdOWzyWjjfowdURS3wQ3PcxQ8bYuGdBChjj5rWqqu2ICRMCL0y29cCprcje/v30U/+znJJX/boSPQGEsM6CpX1hBGN4FCw6p41N9CYMAAAAAFiS0dEca8HXOIAAAAHdElNRQflBg8QJipZPSzlAAABIUlEQVQoz13R11bCQBAG4AyCYkGToKImWBAsCAQLKmLsLRbsohKw9zbvf+WWILv+V3u+zJmdnSgKCfga/AGgUcRAY1OwuaW1LdQuOXSoiKhperhTdOjqJhyJYE+vxNBnIJomRvvlLgODSDMUkxmGGccTMvtGqI6O/Sse14kmJ0C+MZWmxRmrrlYsOzlF58PpGaE2N2sk0wbluXmB8wsF5FmkncFesoE1Xg5yXmGcWE2xiyG/xnndZtUbm1vbO+Tg7HJW9yhDzthXD8iheOg1PzomG3dOTs/OL+j3sMely6vrctytZAOsefXGc9R0Mmrmlg0Kd/coxHzgKwAou3V1/bU/BI9PRk2fX5y/t8LrW5Rf+h5yhA2A9fH5VdIK3z9Frr/KLlYZgS4NmAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNi0xNVQxNjozODo0MiswMDowMN+dGPkAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDYtMTVUMTY6Mzg6NDIrMDA6MDCuwKBFAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
params: {
searchstr: "{imdb}",
order_by: "size",
order_way: "desc",
group_results: 1,
action: "basic",
searchsubmit: 1
}
},
needDoubanInfo: true,
torrent: {
selector: "#file"
},
sourceInfo: {
editionTags: {
"10_bit": "10_bit",
hdr10: "hdr10",
hdr10plus: "hdr10_plus",
dolby_vision: "dolby_vision",
dts_x: "dts_x",
dolby_atmos: "dolby_atmos",
chinese_dubbed: "chinese_audio",
special_effects_subtitles: "special_effects_subtitles"
}
},
targetInfo: {
editionTags: {
"2_disc_set": "2_disc_set",
"2d_3d_edition": "2d_3d_edition",
"2_in_1": "2_in_1",
"3d": "3d",
"3d_anaglyph": "3d_anaglyph",
"3d_full_sbs": "3d_full_sbs",
"3d_half_ou": "3d_half_ou",
"3d_half_sbs": "3d_half_sbs",
"4k_remaster": "4k_remaster",
"4k_restoration": "4k_restoration",
director_s_cut: "director_s_cut",
dual_audio: "dual_audio",
english_dub: "english_dub",
extended_edition: "extended_edition",
extras: "extras",
masters_of_cinema: "masters_of_cinema",
scene: "sc",
the_criterion_collection: "the_criterion_collection",
theatrical_cut: "theatrical_cut",
two_disc_set: "2_disc_set",
remux: null,
rifftrax: "rifftrax",
uncut: "uncut",
unrated: "unrated",
warner_archive_collection: "warner_archive_collection",
with_commentary: "with_commentary"
}
},
description: {
selector: "#release_desc"
},
imdb: {
selector: "#imdb"
},
mediaInfo: {
selector: 'textarea[name="mediainfo[]"]'
},
category: {
selector: "#releasetype",
map: {
movie: "1",
tv: "3",
tvPack: "3",
concert: "5"
}
},
source: {
selector: "#source",
map: {
uhdbluray: "Blu-ray",
bluray: "Blu-ray",
web: "WEB",
hdtv: "HDTV",
hddvd: "HD-DVD",
dvd: "DVD",
other: "Other"
}
},
videoCodec: {
selector: "#codec",
map: {
h264: "H.264",
hevc: "H.265",
x264: "x264",
x265: "x265",
h265: "H.265",
mpeg2: "Other",
mpeg4: "H.264",
vc1: "Other",
xvid: "xvid"
}
},
resolution: {
selector: "#resolution",
map: {
NTSC: "NTSC",
PAL: "PAL",
"2160p": "2160p",
"1080p": "1080p",
"1080i": "1080i",
"720p": "720p",
"576p": "576p",
"480p": "480p"
}
},
format: {
selector: "#container",
map: {
mkv: "MKV",
mp4: "MP4",
avi: "AVI",
ts: "TS",
wmv: "WMV",
vob: "VOB IFO",
iso: "ISO",
mpg: "MPG",
m2ts: "m2ts"
}
},
videoType: {
selector: "#processing",
map: {
encode: "Encode",
remux: "Remux",
DIY: "DIY",
bluray: "Untouched",
uhdbluray: "Untouched",
dvd: "Untouched",
dvdrip: "Encode"
}
}
},
HD4FANS: {
url: "https://pt.hd4fans.org",
host: "hd4fans.org",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBykVPLQLsAAABCVJREFUOMuVlctvVVUYxX97n3PPvb0t0BZKSKW0FdpSDCAkViMmjU9kAImaMDVGnOo/4IApGo0xccLQmYkgJhhfCSA4sgUJjz5JsbVwS/q6lN7bc/brc3AanGiiO9mjb+1k7d/KXlvxP9ax04tsfyKmMucatGYrsAysnHln82ON+rfDB967RXU+Zc/hroZSSTeXErVNKfq0Ym8cq6cizQ7rZKyeyYdxxFQ9Fc69u5kYYLxi8Q4aSiq5Mp2VhmZse93SGxS7g7BHK/qiiO44Ui1xRBxppZUC6+TpWMvVjw4WP/n6QeAcoE58s8xCVXZtKKmXTwyUD+/cHHWlTppTK80La7Lxh8ksWloLaKUoFWCwK+HJlhgBRIRI8WtXS3S8oFWlIdHElYWwt6msT0UFdeTStGEpjTnSWySJQIBqKpwfz/AiiFWMzjs2FTWD3QUmFz0/T2StFzxxMcrpxcAhYJ8XmJh3LNQCg90J09VAZ3PEoc4CN+Ys4wsOreBmxZFZ2L8t5uo9y6W7ZkOtJluBPwG0dVzNrCxlRjAOjBVEYHjWMjRr2VLWvNidUECRGcE6wTjBeGGpFgieFgV9CnjliwW0MWHEmjBjTMCagLUCwKO1wPmRlPlVz0BHgYPtMcYEjBXcusYHwXtpEpE9v99ew3tBX3x/S81YGXEu4HzA+wDrwEcrhh/HUwoaXu8t0lZWWJtrRCB4wftACNK/qzPZGIKgj56ex1q5YYxYawRrBRHBeyHNhJ9GUkYfOHraYl7aVUS84JyAgPe52+ClVylpQQT9qBbwPoxZEx46G3A2dxg8eBe4v+w4c61O3QRe6yuye0uMMYIA3gnWBLwLHRJkByLoNBMyIxVj5K5ZZygCzkvOzAhXJte4OJbS2hjxxv4GmhIIQXKNDTgnjc5Jf6wCsXMQhCpaJpSSZx4Dd4I1gkJYyeCroRr7ticMdBWp1sPfmkxQSmIvau9vS41o74VStlZzVkZsFoIxOXDvBJMFjMkxjM4azg7XiDS82l9iY0njbH5lawLehv7u0mqLvn6ynVUSrJMxa+WRMzlw5/OArMl3lga+HV5leCqjIdEkETgnmPW5s7IteGnXkKflvUxYK8utZU0hgnKs8OshORvwLlBZcnx5eYVq3aOUwjtZnwvOyR8SWIwBerYWKBfV7As9xeXne0pdm8qa48810dEa8fn3Ve4vO7TK3+rlkTX57lotvPVsky4X9YzzXItidV0JZ0Pq52KAYwfKbGiMaosP7egvt+sHLt6s5Q6CSGokeE8mmorSTNaMjF0YSWfeHGgqHT3YePnkmepQT2diAZn8uD0v2Ia3p+hrU9xbkcGCklME2kQxh2IyKeibkeIWSk2pSC8prR4iuDufdvxjMT9u7O4PpkGhEXYi0opS0yjmAX/3s87//E38BWXDuj9j0ViVAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA3OjQxOjIxKzAwOjAws0DWvgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNzo0MToyMSswMDowMMIdbgIAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "403",
tvPack: "402",
documentary: "404",
concert: "406",
sport: "407",
cartoon: "405",
variety: "405"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "1",
bluray: "1",
hddvd: "2",
remux: "3",
encode: "7",
web: "7",
hdtv: "5",
dvd: "6",
dvdrip: "6",
other: ""
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "10",
x264: "1",
x265: "10",
h265: "10",
mpeg2: "4",
mpeg4: "5",
vc1: "2",
xvid: "3",
dvd: "4"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "5",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
chd: "2",
mysilu: "3",
wiki: "4",
other: "5",
cmct: "6",
r2ts: "7",
kbits: "8"
}
}
},
HDArea: {
url: "https://hdarea.club",
host: "hdarea.club",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBhQINJhF4AAABH1JREFUOMuNlEtsVGUYht//P/85c86c6bQz7UynMx2mLdALt2IFLZabNaAmGgRMJDFhoe41LtgYNiYsSIxRdxIJMZHISgwmLgjQCLFSC5XWQikNLQidTi+203Yu5/p/LlTUoMi7+r7vTd58m/dheAxRaeavxbMBkoDQAMYAACyYeGCzxwok+nNUYS/qIJ8jELHBmA2AGGOPF/ggKPuDjvmxFgx93SHDTT7VJct87mwdgvEsi7TNILZlGrU7cwAWxSNfO7kbAGIA64bEDkxPbHVE5bLnhZbN/K1WuHM5WNlJZL+7I5Vjg6X1hwYEANBkH1CZUtD/uU73B3Rv1XMuhRJF+ck+n3W0t1M5fxTFhaT0dLUcCFueUP1gcSbIrLtpMLmZHHBZsf6mD3Gak2cBS/eAhfE6OIX9IHmEmHhDKmqSH6OQF+1Y7Si1taVUl5jf9i7chu0/Gw6/ZFU+7UsW4vDBpVoNJ9QqnGBGCCgB4PirQLJut5TikBtsDC2knqzRqjIT+sCnLtPERhKGpeYm1EB6x0Uv1nICeTYumXsDo0NvwkWlHVuDUuypnODiG4Gx08DhsXqc6O7E8nQLk8Izez/cFFi6H0Q5yzhDo2q5KtkeuGr+KpPrbmvJddcxmm9lcBySgG82lpxE980oygMCdy5yZPu7oATXMs+BWpgUyvCZDAVERsICt8sAN1BO7ZBOpH7RBgrapbeisOc2EuyAb8QAIzWG2o7+vOOWBaLNKn76rJPKS62kmPD1GscJt9kU5JqWH1G1wgSnQJCKrbtKMMPn64EhzPc/Czv/PHwZtOJd8EKNNyoC6COmEEdkVRNmb7f5vhJdXnOwmDt4dnhp70dfMT0+otiWTQKQWsim1JY+O9N9C0AIRmwtypMr4EnFij1TLsS2DlUAg4wx4hg+dQAl2WBHm1FueGKYatLvmQqd0+9d9pT8lOEHamCnNpeFHu4RApMYfL8N5HcSMdU1MuBGoo/F24anFvMIaxzCUyOrYSRDXqSl4GW2XqkuLF8IFr20FWk+oNge+WacCmv3ZgXDucTC1TByPS9h7vp26RqslNguSTN7TA3XiFcBAIRX0dRLqU1VqGlz1Xjb98bgkTDGT65zV72+4Bupa1LRVL9uZbZq6HCa2XMvUHFir7RKaSe0QdqpXXMUTF099Rq7/84p+XuXrdyoWg7Xb+NcqHpAu6v+eCiNkY+PU+WGCTe956qr1whl9lp7YOpCA1n5uOSmaletd0rpl2eVzJ5zzIx/QK47UmUKCIVDlGqbXQC9LiBD82MRokAXyAywheFObeHGBs3njEjT3OAKUVi5X9iJnVOoaO41BM5A6D1SwRSTKoTC/kkbf/RLcCMunMXbza419zabvrxHWRyv9dVqFFMvOqhcPQIzcd6tSPc64fRojUBWYchLQIb+C18zPgEcGjx3o37l6BbP4/tcsyHpxNq/peqmPlM3rkQZfiHA4uzfyffQ9W8w5XeX8QqAxnoTXygcswAkY49m8kM89OQfBofkvnuaCMz1IMEZfML/6jelxwpRbOI1GgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNjoyMDowOCswMDowML4c7OgAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDY6MjA6MDgrMDA6MDDPQVRUAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="dburl"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: [
"300",
"401",
"415",
"416",
"410",
"411",
"414",
"412",
"413",
"417"
],
tv: [
"402",
"403"
],
tvPack: "402",
documentary: "404",
concert: "406",
sport: "407",
cartoon: "405",
variety: "403"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "7",
x264: "7",
hevc: "6",
x265: "6",
h265: "6",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "0",
dvd: "0"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "11",
dd: "5",
"dd+": "4",
flac: "1",
dts: "3",
truehd: "7",
lpcm: "8",
dtshdma: "4",
atmos: "10",
dtsx: "0"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: [
"1",
"300"
],
bluray: [
"1",
"401"
],
remux: [
"3",
"415"
],
encode: "7",
web: [
"9",
"412"
],
hdtv: [
"5",
"413"
],
dvd: [
"2",
"414"
],
dvdrip: "6",
other: "0"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "5",
"1080p": [
"1",
"410"
],
"1080i": "2",
"720p": [
"3",
"411"
],
"576p": "4",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
epic: "1",
hdarea: "2",
hdwing: "3",
wiki: "4",
ttg: "5",
other: "6",
mteam: "7",
hdapad: "8",
chd: "9",
hdaccess: "10",
hdatv: "11",
cxcy: "12",
cmct: "13"
}
}
},
HDAtmos: {
url: "https://hdatmos.club",
host: "hdatmos.club",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACqVBMVEUAerwqYXVnYVNybF9uaFtjXUxTXlcyYnQOb54Ae7wMcKJYaWi0rqbUz8fTz8fSzcXNycG/urKemY1bcXERb50sYnSOioHf29Lt6d/s6N/m4tnBvLFNcntrb2bFwLjt6eHu6eHt6eDr597q5t3n49qRkINrf3+1t7C5u7W6u7S+urG9urG5urTEw7vj39br59/s6eCuqZ0Qc6Uib5Ijb5EkbIxQZGN8d2qAem6JhXlDaXMibpEwaoGVmpLl4disp5sAe70OcKBscWnEv7fV0MjV0cnMx706a3sAe74IcqdjdnXTzcTq59+Mj4UBe7wBerskZoGSj4bi3dTv6+O5urIibpAAerscZod4enLW0cnu6+PPy8JFcoABebg9Y26zrKLp5dyOl5EMcqUCeLcbZodaY12uqJ/t6uHk4Nh3jY4Pb54JcqZdb27Iwrji3tVggYgKbZ4yX21obGavqaDi3dXd2dF9kJIVcZ0Wa5N/f3Xb1s7Lx70zboYvY3WDfXLFwLft6ODKycFhfYESb50AebouZ36emY6nraYWZolMbXXCvLOdoJcTZ44Cd7VIZGi6tKvr5t14jY4HcqgxbIO6tKm6tqprdG/SzcTs6N7e2dBJc38AebsUa5WOk4vn4tns6ODQy8I+dYoAeLgeZoaMi4Lf2tK+vLMncZISa5R3fnnb1czMx743c40AebkCebg2ZXWrpJno5NuSl44YY4IcZYRHXmCcmI6vsKcabpUHc6pYa2vDvbTk4NecnJNnbWd9eW+po5ra1c1nhIoGc6sRbpt3eG3Z1Mza1cze2dHh3dSAk5UUcJ0qa4ajn5Xn5Nzu6uLt6uLv6+Tp5d7Y1MyxtK1hgIgUcZ8lbYyTkYSxrqOxraOwraOtqp+XlIV9iIFReYUfaowGdKz///88yl8CAAAAAWJLR0TixgGeHAAAAAd0SU1FB+UECgcrNELreWwAAAGKSURBVBjTY2BgZGJGABZWNnYOTgYubh5eOODjFxAUEhZhEBUTl5BEBlLSMgyycvIKCvJgoKCgqKSspKyiyqCmrqGhoamlraWtoaGjq6evrGxgyGBkbGJsamZuYWFpZW1sY2unpCxvz8DJwODg6OTs4urmzuDh6eWtpOTjy+Dn5+8QEBikGBwS6hAWHhGpFBUdAxTkjI2LT1CST0xKTklNk0rPyMwCCjpk5+RKSublFxQWFZcEl5aVMzD4cTpUVFYppVfX1NbVSzU0NjUDrfHjbGltk1JSaO/o7FJWUuru8eD0Bwr29vUnKE2YOGnyFEklxanWDJx+DH4OjtOmz5CcOWv2nLnzlOYvWLgIKMjpsHjJUqX0Zcs9VqxcpSS/es1akOC69Rs2Kslv2rxl67Y8peDtOxyAgg47d+1WUtqzd9/+AweV5EsOHXbwAwoeOXoMGDLHp59Qlg8+eeo0JydQMOzM2XPnL1w4H3zx0uUrV68B7QYKMly/cfPW7ds379y9d//BQwZOf6AgACIJgNAMLRaxAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA3OjQzOjUyKzAwOjAwjJgVBwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNzo0Mzo1MiswMDowMP3FrbsAAAAASUVORK5CYII=",
asSource: false,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: 'textarea[name="descr"]'
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
cartoon: "405",
sport: "407",
concert: "406"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "10",
h265: "10",
x264: "1",
x265: "10",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "3"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "20",
ac3: "22",
dd: "23",
"dd+": "23",
flac: "17",
dts: "14",
truehd: "13",
lpcm: "15",
dtshdma: "10",
atmos: "11",
dtsx: "12"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "1",
bluray: "1",
remux: "3",
encode: "7",
web: "10",
hdtv: "5",
dvd: "6",
hddvd: "2",
dvdrip: "13",
other: "13"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"4320p": "15",
"2160p": "10",
"1080p": "11",
"1080i": "12",
"720p": "13",
"576p": "14",
"480p": "14"
}
},
area: {
selector: 'select[name="processing_sel"]',
map: {
CN: "3",
US: "4",
EU: "8",
HK: "5",
TW: "3",
JP: "5",
KR: "6",
OT: "9"
}
},
source: {
selector: 'select[name="source_sel"]',
map: {
uhdbluray: "6",
bluray: "6",
hdtv: "3",
dvd: "8",
web: "2",
vhs: "12",
hddvd: "7"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
other: "22"
}
}
},
HDBits: {
url: "https://hdbits.org",
host: "hdbits.org",
siteType: "HDB",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACUlBMVEWwxdaswdKswtKtwtKtwdKtwtOovc6juMmit8miuMmes8SftMWtv86qvMues8Omucmwwc+htcaywtC3xtO3x9Oxw9CYrb6fs8Pd5OnQ2uKXrL29y9Xn7PCpusiousjq7vHs8PPi6Ozo7PDp7vHDz9qdscGSp7iarr7g5uvS2+KTp7mRpre8ydTs8PKltsXF0NmesMCktsTG0dry9fbCzteTqLmMobKVqLje5OnP2N+LoLGJnrC3xM/r7vGgscC4xc+Jn7GLoLKOo7PN1t2ZrLuFmqyPorLd4ufY3+SfsL6er73Fz9ebrLrq7fC1wsyEmauGm6yFmquot8P3+PmltMF/lKWJnKzb4OX19/jk6ezw8vTs7/GVp7WWp7Xp7O+xvsh+k6SAlaZ+k6Wpt8N4jZ+DlqbZ3+TO1dyHmqmFmKi1wcro6+6QorDn6+6tusR3jZ55jp94jZ6Yqbb2+PmdrLlyh5h9kaDX3eLFztVwhpeptcDm6u2LnauptsBxhpdziJlyh5m2wcqGmKdxh5hsgZJ3i5rW2+DDy9NtgZNrgJGlsr3l6eyGl6WntL5ug5Nyh5eYp7O6xMxxhZZme4xyhZXU2t+/yM9ne4xkeougrrjk6OuCk6GBkqDk5+vP1tvV29/d4uW5w8p0h5ZnfIxgdYZleYqLm6eCkqBhdoZhdod2iJeRn6trf49rfo6Uoq2dqrWeqrWWo69/kJ5hdYdbcIFZbn9Zb4Bab4BYbn9ab4FYbX9YbX5XbX9Wa3xRZndNYnJMYnJNYXJNYXNNYnNJXm////9b9tfLAAAAAWJLR0TFYwsrdwAAAAd0SU1FB+UECgcqMrKT7RgAAAFGSURBVBjTY2DABhjBgImRkRlEszAyszIyMbBhAQzsSICDkxNMM3Bx8/DycXHxCwgKCgmLiPJzAQGDmLiEpJiYlLSMrJy8gqKSsoqqmBiDmrqGppaato6unp6CvoGhkbGJqRqDmbmFpZWVtY2tnZ2tvYOjk7OSixWDq5u7h6enl7e8j4+vn39AYFBwSCBDaFh4RGRkZFR0TGxcfEJiUmxwcihDSmpaekZGZlZ2Tk5uXn5BYVFxSSFDaVl5RWlpZVV1TU11bV19Q6NvUzNDS2tbe0dHZ1d3T093b1//hOqJk1oYJk+ZOm369BkzZ82ekz133vwFCxdNXsywZOmy5StWLlm1es3ades3bNy0dMmKzQxbtmzdtmXLlu07dm7ZtXvPDhB7C8NeLIBhHxbAsP/AgYP79x86fPjggcOHDwHpw/sPMxzBAgDlBZmERX8RVgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNzo0Mjo1MCswMDowMPTFbxAAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDc6NDI6NTArMDA6MDCFmNesAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
needDoubanInfo: true,
uploadPath: "/upload.php",
seedDomSelector: "#details >tbody >tr:contains(Last seeded)",
torrentDownloadLinkSelector: 'a[href*="download.php/"]',
search: {
path: "/browse.php",
params: {
sort: "size",
d: "DESC",
search: "{imdb}"
}
},
name: {
selector: "#name"
},
description: {
selector: "#descr"
},
imdb: {
selector: "#imdb"
},
mediaInfo: {
selector: 'textarea[name="techinfo"]'
},
torrent: {
selector: "#file"
},
category: {
selector: "#type_category",
map: {
movie: "1",
tv: "2",
tvPack: "2",
documentary: "3",
concert: "4",
sport: "5",
cartoon: "1"
}
},
videoCodec: {
selector: "#type_codec",
map: {
h264: "1",
h265: "5",
hevc: "5",
x264: "1",
x265: "5",
mpeg2: "2",
vc1: "3",
xvid: "4",
bluray: "1",
uhdbluray: "5",
vp9: "6"
}
},
videoType: {
selector: "#type_medium",
map: {
uhdbluray: "1",
bluray: "1",
remux: "5",
encode: "3",
web: "6",
hdtv: "4"
}
}
},
HDDolby: {
url: "https://www.hddolby.com",
host: "hddolby.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAAAAACo4kLRAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQflBAoGHTIjVicbAAABTUlEQVQY01WOvy9DURzFz/feW0/1pY2gogaLX4lBJBZCqiKxITGYTGIx+wOsRpbGarEwV0SExCTR+LU0GoIYMLw8vFfv1b1fgz6p73DyzUnOOR/SBEL9MVhR+Kz/mdTRpOhhwSUYFgAMJLhhK6sQ3qUWrcfDewDpqR65U64AfG2POlw9HgS69gI287LAAgCYZXY1TitzMcMAIKLJsf6OKcG/IKo2iea0bo7gRERS8fyv6P+Ll0pPV/UmCRIv+bcgXyaiWid9XNgP2wXgdGm5jxwCwDdtDclUQiqllIwnU1Zin4mdg5BBYOBX5USGjPa0HXv/Tn3H6FM3sRUoqehpo7Nx4ER0u7nkpp3xx89m2wVcf+ZyNzN9dO16TuOrWA9bWACsWTATf/jc6g5/5hTLtaB42zN5Xhqxi6bi9Q59jcaJDLORVNUWNJGRxCD8AK0whyYuCRA4AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA2OjI5OjUwKzAwOjAwOQaHIQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNjoyOTo1MCswMDowMEhbP50AAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_id"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
chinese_audio: "#tag_gy",
diy: "#tag_diy",
chinese_subtitle: "#tag_zz",
cantonese_audio: "#tag_yy",
hdr: "#tag_hdr10",
hdr10_plus: "#tag_hdrm",
dolby_vision: "#tag_db"
},
anonymous: {
selector: 'input[name="uplver"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "406",
sport: "407",
cartoon: "405",
variety: "403"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
x264: "3",
hevc: "2",
x265: "4",
h265: "2",
mpeg2: "6",
mpeg4: "0",
vc1: "5",
xvid: "0",
dvd: "0"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "1",
bluray: "2",
remux: "3",
encode: "10",
web: "6",
hdtv: "5",
dvd: "8",
dvdrip: "8",
other: "0"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "5",
dd: "5",
"dd+": "14",
flac: "7",
dts: "4",
truehd: "2",
lpcm: "3",
dtshdma: "1",
atmos: "2",
dtsx: "1"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "1",
"1080p": "2",
"1080i": "3",
"720p": "4",
"576p": "5",
"480p": "5"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
dream: "1",
hdo: "9",
dbtv: "10",
nazorip: "12",
mteam: "2",
frds: "7",
wiki: "4",
beast: "11",
chd: "5",
cmct: "6",
pthome: "3",
other: "8"
}
}
},
HDF: {
url: "https://hdf.world",
host: "hdf.world",
siteType: "gazelle",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQMAxUG6ZvEkQAABCJJREFUOMt9lc1rXFUUwH/3vq958zIz+ZhJZkzS1Jo0ta0iSCm40YK2SxH3grhUBBf+G/0LBKkFty5cuKq40SIKRdtS0pCpmXxNMpP5yrzv9+510WmLbfG3Oodz4d574PyO4CkCpAUqAyEkQtiobAlYBxqTQwfABrADpIDiOQQv4gEfYdhX0PkKKveAwqQWAT7wD/AL8MMkf4r5JKi89yXpwf3XVJ5+koyOrmohLwrUlA766HEHYRfRaQRagxBjVHYBw1oTUn6HkFs6CZ+9cPrdz9CwKgWfStRXIg0KlhRCCEHQaTHcuoO9sEY2OkLnOcLx0EJr6ZYjhLyuc/2tEGxlu39hVN++hjq4W3SXzn/uzs1/PbNyxp5vzIvlshS1aQ+tNf1Oh9L6Owi7iFGqYTfWsOpnsBvnDLS+LFQ6Nk1+t+ZOZaZVmpVWpfZxxU6uuU7kCHwdOnN46Ygci8BLMUqzlOqLeCurqCTAHLWRhxukvUzE7mwhma1dy5JkE62+N0yn4EydOvuFlw4/KKQjM3crwsoj0Tk+YfdRk9FwgLtynvqMw1x0wNR4D8c/QgZ9oaOx0EKg3XKN0tw4PWz+ZI5am0vilYvLBddxpqSJCELsYoFMl9Gqx4w3xdyrb1AOW0iRo1WApVOM6SWcapHU8vCdGSfQ1vK401oyVRKe7e82vfn1tyjNn0aGPkWvBoakXvQoFzTeTIXIWMC3PbR0sd0Yr7LMfK1KZhRp9SJ29vc8lURrJipfoPvIKb9+jnpjic4opVoymC07GLmFK8ZoUzOqryKHA3KjgmHaTNcWeXNRME5MjodNou6+Q5YsmGgFg0NkPMY0BJoMSyi0dFHCIVMZ5ODhU5l2oFLDVy6hPUs3GLB7sM/2xh8Mtm6jtcIE3UYncRDD/liyedAlHwOFnDyLIR6CkLimIjag3byPPwyoXXifuFple6fNwVGLLDyO0LptTAblap7rM71+n85RC0Pm6KBDt/WA7c27DDotKgVFH5vtjb85uvcbYTCiK1zCxCdOA1Jhb+iToxsmsAvsHO/ci9nfdMzqMsPKJXJius0HdFqPcLwp5qtFholFHEVkUZ/uxq8UCmUapxYpV+tRZJRaIhnvmUAC/AycR2WXVRLqSJuMw1T4QQIqIklMHh6OiQa3SdrNxzOrU9yTPW2c2MKW1h0r9m/J+mpqABrYBBoIeVkUyobROCfC3Q2RHG491plKSXr75IM2pAGg0UrpeHSsR71+eNLv3bQqtW+U30+f9DADdrCKoTaLl3KlrKzTFISDZ17KU1D55P7H6DyNVJJcz3NuJO2tTrp/D+NpdXa9P/Gcr/yejd+bRucOL+cE+BO4iUpvkIyapP7/CvZD4ApwepK/TLC3gB+fF6z4b/j0OxKwgEVg7bkV8BDYm7TphRXwL0hsE/fwC5NaAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEyVDAzOjIxOjA2KzAwOjAwm25q+wAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMlQwMzoyMTowNiswMDowMOoz0kcAAAAASUVORK5CYII=",
asSource: false,
asTarget: false,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
params: {
order_way: "desc",
order_by: "time",
searchstr: "{name}",
group_results: "1",
action: "basic"
}
}
},
HDFans: {
url: "https://hdfans.org",
host: "hdfans.org",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBykVPLQLsAAABCVJREFUOMuVlctvVVUYxX97n3PPvb0t0BZKSKW0FdpSDCAkViMmjU9kAImaMDVGnOo/4IApGo0xccLQmYkgJhhfCSA4sgUJjz5JsbVwS/q6lN7bc/brc3AanGiiO9mjb+1k7d/KXlvxP9ax04tsfyKmMucatGYrsAysnHln82ON+rfDB967RXU+Zc/hroZSSTeXErVNKfq0Ym8cq6cizQ7rZKyeyYdxxFQ9Fc69u5kYYLxi8Q4aSiq5Mp2VhmZse93SGxS7g7BHK/qiiO44Ui1xRBxppZUC6+TpWMvVjw4WP/n6QeAcoE58s8xCVXZtKKmXTwyUD+/cHHWlTppTK80La7Lxh8ksWloLaKUoFWCwK+HJlhgBRIRI8WtXS3S8oFWlIdHElYWwt6msT0UFdeTStGEpjTnSWySJQIBqKpwfz/AiiFWMzjs2FTWD3QUmFz0/T2StFzxxMcrpxcAhYJ8XmJh3LNQCg90J09VAZ3PEoc4CN+Ys4wsOreBmxZFZ2L8t5uo9y6W7ZkOtJluBPwG0dVzNrCxlRjAOjBVEYHjWMjRr2VLWvNidUECRGcE6wTjBeGGpFgieFgV9CnjliwW0MWHEmjBjTMCagLUCwKO1wPmRlPlVz0BHgYPtMcYEjBXcusYHwXtpEpE9v99ew3tBX3x/S81YGXEu4HzA+wDrwEcrhh/HUwoaXu8t0lZWWJtrRCB4wftACNK/qzPZGIKgj56ex1q5YYxYawRrBRHBeyHNhJ9GUkYfOHraYl7aVUS84JyAgPe52+ClVylpQQT9qBbwPoxZEx46G3A2dxg8eBe4v+w4c61O3QRe6yuye0uMMYIA3gnWBLwLHRJkByLoNBMyIxVj5K5ZZygCzkvOzAhXJte4OJbS2hjxxv4GmhIIQXKNDTgnjc5Jf6wCsXMQhCpaJpSSZx4Dd4I1gkJYyeCroRr7ticMdBWp1sPfmkxQSmIvau9vS41o74VStlZzVkZsFoIxOXDvBJMFjMkxjM4azg7XiDS82l9iY0njbH5lawLehv7u0mqLvn6ynVUSrJMxa+WRMzlw5/OArMl3lga+HV5leCqjIdEkETgnmPW5s7IteGnXkKflvUxYK8utZU0hgnKs8OshORvwLlBZcnx5eYVq3aOUwjtZnwvOyR8SWIwBerYWKBfV7As9xeXne0pdm8qa48810dEa8fn3Ve4vO7TK3+rlkTX57lotvPVsky4X9YzzXItidV0JZ0Pq52KAYwfKbGiMaosP7egvt+sHLt6s5Q6CSGokeE8mmorSTNaMjF0YSWfeHGgqHT3YePnkmepQT2diAZn8uD0v2Ia3p+hrU9xbkcGCklME2kQxh2IyKeibkeIWSk2pSC8prR4iuDufdvxjMT9u7O4PpkGhEXYi0opS0yjmAX/3s87//E38BWXDuj9j0ViVAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA3OjQxOjIxKzAwOjAws0DWvgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNzo0MToyMSswMDowMMIdbgIAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~font table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "403",
concert: "441",
sport: "418",
cartoon: "417",
variety: "416",
app: "419",
ebook: "423",
audioBook: "405"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "3",
x264: "2",
x265: "4",
h265: "3",
mpeg2: "10",
mpeg4: "11",
vc1: "5",
xvid: "12"
}
},
source: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "1",
bluray: "2",
hdtv: "6",
dvd: "7",
web: "5",
vhs: "10",
hddvd: "17",
cd: "9",
sacd: "16"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "11",
ac3: "10",
dd: "21",
"dd+": "21",
flac: "12",
dts: "2",
truehd: "6",
lpcm: "7",
dtshdma: "4",
atmos: "1",
dtsx: "3",
ape: "13",
wav: "14",
mp3: "17",
m4a: "5",
other: "7"
}
},
videoType: {
selector: 'select[name="source_sel"]',
map: {
uhdbluray: "1",
bluray: "3",
remux: "10",
encode: "9",
web: "7",
hdtv: "6",
dvd: "17",
dvdrip: "17",
other: "10"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"4320p": "1",
"2160p": [
"2",
"10",
"9"
],
"1080p": [
"3",
"5",
"8"
],
"1080i": [
"4",
"5",
"8"
],
"720p": [
"5",
"11"
],
"576p": "6",
"480p": "6"
}
},
area: {
selector: 'select[name="processing_sel"]',
map: {
CN: "1",
US: "2",
EU: "8",
HK: "4",
TW: "5",
JP: "6",
KR: "7",
OT: "9"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
hdfans: "9",
hdf: "10",
chd: "1",
hdc: "2",
ttg: "19",
wiki: "3",
beast: "4",
cmct: "5",
frds: "6",
hdsky: "7",
ourbits: "17",
hdhome: "18",
pthome: "16",
tlf: "8",
pter: "20",
pbk: "21"
}
}
},
HDHome: {
url: "https://hdhome.org",
host: "hdhome.org",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBykVPLQLsAAABCVJREFUOMuVlctvVVUYxX97n3PPvb0t0BZKSKW0FdpSDCAkViMmjU9kAImaMDVGnOo/4IApGo0xccLQmYkgJhhfCSA4sgUJjz5JsbVwS/q6lN7bc/brc3AanGiiO9mjb+1k7d/KXlvxP9ax04tsfyKmMucatGYrsAysnHln82ON+rfDB967RXU+Zc/hroZSSTeXErVNKfq0Ym8cq6cizQ7rZKyeyYdxxFQ9Fc69u5kYYLxi8Q4aSiq5Mp2VhmZse93SGxS7g7BHK/qiiO44Ui1xRBxppZUC6+TpWMvVjw4WP/n6QeAcoE58s8xCVXZtKKmXTwyUD+/cHHWlTppTK80La7Lxh8ksWloLaKUoFWCwK+HJlhgBRIRI8WtXS3S8oFWlIdHElYWwt6msT0UFdeTStGEpjTnSWySJQIBqKpwfz/AiiFWMzjs2FTWD3QUmFz0/T2StFzxxMcrpxcAhYJ8XmJh3LNQCg90J09VAZ3PEoc4CN+Ys4wsOreBmxZFZ2L8t5uo9y6W7ZkOtJluBPwG0dVzNrCxlRjAOjBVEYHjWMjRr2VLWvNidUECRGcE6wTjBeGGpFgieFgV9CnjliwW0MWHEmjBjTMCagLUCwKO1wPmRlPlVz0BHgYPtMcYEjBXcusYHwXtpEpE9v99ew3tBX3x/S81YGXEu4HzA+wDrwEcrhh/HUwoaXu8t0lZWWJtrRCB4wftACNK/qzPZGIKgj56ex1q5YYxYawRrBRHBeyHNhJ9GUkYfOHraYl7aVUS84JyAgPe52+ClVylpQQT9qBbwPoxZEx46G3A2dxg8eBe4v+w4c61O3QRe6yuye0uMMYIA3gnWBLwLHRJkByLoNBMyIxVj5K5ZZygCzkvOzAhXJte4OJbS2hjxxv4GmhIIQXKNDTgnjc5Jf6wCsXMQhCpaJpSSZx4Dd4I1gkJYyeCroRr7ticMdBWp1sPfmkxQSmIvau9vS41o74VStlZzVkZsFoIxOXDvBJMFjMkxjM4azg7XiDS82l9iY0njbH5lawLehv7u0mqLvn6ynVUSrJMxa+WRMzlw5/OArMl3lga+HV5leCqjIdEkETgnmPW5s7IteGnXkKflvUxYK8utZU0hgnKs8OshORvwLlBZcnx5eYVq3aOUwjtZnwvOyR8SWIwBerYWKBfV7As9xeXne0pdm8qa48810dEa8fn3Ve4vO7TK3+rlkTX57lotvPVsky4X9YzzXItidV0JZ0Pq52KAYwfKbGiMaosP7egvt+sHLt6s5Q6CSGokeE8mmorSTNaMjF0YSWfeHGgqHT3YePnkmepQT2diAZn8uD0v2Ia3p+hrU9xbkcGCklME2kQxh2IyKeibkeIWSk2pSC8prR4iuDufdvxjMT9u7O4PpkGhEXYi0opS0yjmAX/3s87//E38BWXDuj9j0ViVAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA3OjQxOjIxKzAwOjAws0DWvgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNzo0MToyMSswMDowMMIdbgIAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_id"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: "#torrent"
},
tags: {
chinese_audio: "#tag_gy",
diy: "#tag_diy",
cantonese_audio: "#tag_yy",
chinese_subtitle: "#tag_zz",
hdr: "#tag_hdr10",
hdr10_plus: "#tag_hdrm",
dolby_vision: "#tag_db"
},
category: {
selector: "#browsecat",
map: {
movie: [
"411",
"412",
"413",
"414",
"415",
"450",
"499",
"416"
],
tv: [
"425",
"426",
"471",
"427",
"428",
"429",
"430",
"452",
"431"
],
tvPack: [
"432",
"433",
"434",
"435",
"436",
"437",
"438",
"502"
],
documentary: [
"417",
"418",
"419",
"420",
"421",
"451",
"500",
"422"
],
concert: "441",
sport: [
"442",
"443"
],
cartoon: [
"444",
"445",
"446",
"447",
"448",
"454",
"449",
"501"
],
variety: ""
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "12",
x264: "1",
x265: "2",
h265: "2",
mpeg2: "4",
mpeg4: "1",
vc1: "3",
xvid: "5",
dvd: "5"
}
},
source: {
selector: 'select[name="source_sel"]',
map: {
uhdbluray: "9",
bluray: "1",
hdtv: "4",
dvd: "3",
web: "7",
vhs: "8",
hddvd: "8"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "15",
dd: "15",
"dd+": "15",
dts: "3",
truehd: "13",
lpcm: "14",
dtshdma: "11",
atmos: "12",
dtsx: "17"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: [
"10",
"499",
"500",
"502",
"501"
],
bluray: [
"1",
"450",
"451",
"452",
"453",
"454"
],
remux: [
"3",
"415",
"421",
"430",
"437",
"448"
],
encode: [
"7",
"411",
"412",
"413",
"414",
"416",
"417",
"418",
"419",
"420",
"422",
"425",
"426",
"471",
"427",
"428",
"429",
"431",
"432",
"433",
"434",
"435",
"436",
"438",
"444",
"445",
"446",
"447",
"449"
],
web: [
"11",
"411",
"412",
"413",
"414",
"416",
"417",
"418",
"419",
"420",
"422",
"425",
"426",
"471",
"427",
"429",
"431",
"432",
"433",
"434",
"436",
"438",
"444",
"445",
"446",
"447",
"449"
],
hdtv: [
"5",
"412",
"413",
"416",
"418",
"419",
"422",
"424",
"426",
"471",
"427",
"428",
"431",
"433",
"434",
"435",
"438",
"442",
"443",
"445",
"446",
"449"
],
dvd: [
"",
"411",
"417",
"425",
"432",
"444"
],
dvdrip: [
"7",
"411",
"417",
"425",
"432",
"444"
],
other: ""
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": [
"1",
"499",
"416",
"500",
"422",
"431",
"438",
"502",
"449",
"501"
],
"1080p": [
"2",
"414",
"420",
"429",
"436",
"447"
],
"1080i": [
"3",
"424",
"428",
"435",
"443"
],
"720p": [
"4",
"413",
"419",
"423",
"427",
"434",
"442",
"446"
],
"576p": [
"5",
"411",
"417",
"425",
"432",
"444"
],
"480p": [
"5",
"411",
"417",
"425",
"432",
"444"
]
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
"3201": "20",
"969154968": "22",
hdhome: "1",
hdh: "2",
hdhtv: "3",
hdhpad: "4",
hdhweb: "12",
shma: "17",
tvman: "21",
arin: "19",
ttg: "6",
mteam: "7",
other: "11"
}
}
},
HDPOST: {
url: "https://pt.hdpost.top",
host: "hdpost.top",
siteType: "UNIT3D",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5QQKBy0Lotfz1wAABIZJREFUOMuNlG1olXUYxn/3//+cs3Oec852ztnRc1LnGG5Zrm2uQvAF0pAUgla+VRZIHyJm1IciiCj8FJWJxqhPUX2QBFHJXqBC0KnlG7nM0XRo6hw62XA76s52Xp7nuftgWkZFv0/3/eG6uLjhvoS/8fI7fQBWlbs10CWB8iCQAwKBQTEcNSLdIgyool1vzLlDL7eGl947he8rxkpj4GunNTxRHXPqamtCTtx1UFWuF3yu5sul8Un/N4VtxsgnqnoFhA9fv/dPwxffP42tCuEVy8tQ3s+lwy3zW2ponhUnVR0i5AgolCsBI/kyJ/rHOdZ3LRi74R0UI6+g2oMIH712D9K5pR/xFRWWC3w8tzE+47FFU8imw/wbqsqFoSJfHBjhzKXJk2JknaAnFMEERvBDptE3srH17sSMp5Zm/9MMQERomBbl2WU5GmZEW33h3cAx6cAKxquyxhNZn51S1dKxIEPCdW4Ly+UylUrl9u77PqVSCVUFYGoqTMfCDPFEaKkn8jQCBrhXQubxBc015P6S7PTp03R1dbFz5048zwOgu7ubTZs2cfjwYYIgAKBpWpS2xrj1raz1wjbjeEYWJ6OmrilrKJeKBHoz2cDAAIsWLSKXy6GqqCqzZ88mk8kwNDTE8PAwyWQSa4T2WXEOnS80Fz1tdzTsPFApjjib3t7MlUsXicfjrF27lunTp3Po0CHK5TLr1q3DdV2OHDnCmTNnWLx4MXv37mX37t3U1qa5Z+583NSSRKGgbaZi9K76+iydLzzPxMQEHR0dNDc347oura2tbNmyhf3793P27Fk2bNhAMpmksbGRnp4eYrEYq1etZtf2z5mYvGY0bHOOZ8W30QgNDQ0kEgnq6+uJRqNs376d3t5eLl68SH9/P8lkkgsXLrBjxw7y+TylUom+vj527dpFW3s7oVQN+QKBE4TM4FgloOQrcPNWiUSC0dFRtm7diuu6ZLNZXNdl6tSp7Nu3j2QySVNTE3V1dXR2duJm69l8fNL3HW/QwZGjQ8XgueEiVfe3t1NTU0MkEmHlypWMjY1RXV3NvHnzSKVSrF+/nt7eXtasWUOhUGDmzJnc19LCkctFRr2JPCFzQlZ8PdSg8M2KxticJ2dFsNZijKFUKlEoFFBVqqursdaSz+cBqKqqIhKJoBqg4tD1yzUOXirucYRVpug6530r2/ZdKem5AhhjbovS6TS1tbWEQiGMMaTTadLpNLFYDGstjhPi2EiJn0YrRRzzme+Y6ybkK+KYT4Yruv/TswUuT/j8X07lK2w9N8ENZYdY+VKNYHxrCBy5gpVXf73undx8apzefAX/j/f6J8qB8sNIiQ/6xxksBnuMlbd8RyYqEXuzvh7tvkoAGLTNh43JsHl4QSbszK8NM9M1RK2gwLinnC/4HBgpc3y0XCxUdKcV3gQGAoFvH8r8WbCPHMvjTPogpH14WuGZqJXmVNjEY44YVbjhqZ+vBPmSrz0Cn1n4CigEyQjftcbubOxbLP9xFLGKepIJoD2ANpScQmCEQQM/C5wU9Hoghu8Xpu7Q/w5HIu8yT4GwdgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNzo0NToxMSswMDowMDQkcScAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDc6NDU6MTErMDA6MDBFecmbAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
uploadPath: "/upload/1",
needDoubanInfo: true,
seedDomSelector: '#meta-info+.meta-general>.panel:has(".table-responsive"):first table tr:last',
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents",
params: {
name: "{name}",
imdb: "{imdb}"
}
},
name: {
selector: "#title"
},
description: {
selector: "#bbcode-description"
},
imdb: {
selector: "#autoimdb"
},
tmdb: {
selector: "#autotmdb"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
anonymous: {
selector: '.form__group input[type="checkbox"][name="anonymous"]'
},
torrent: {
selector: "#torrent"
},
category: {
selector: "#browsecat",
map: {
movie: "1",
tv: "2",
tvPack: "2"
}
},
videoType: {
selector: "#autotype",
map: {
uhdbluray: "1",
bluray: "1",
remux: "2",
encode: "3",
web: "4",
hdtv: "6",
dvd: "1",
dvdrip: "12",
other: ""
}
},
resolution: {
selector: "#autores",
map: {
"4320p": "1",
"2160p": "2",
"1080p": "3",
"1080i": "4",
"720p": "5",
"576p": "6",
"480p": "8"
}
}
},
HDRoute: {
url: "http://hdroute.org",
host: "hdroute.org",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBy01Y7bufAAAA3xJREFUOMttlc1vlFUUxn/nzjCoTEsnQClBIehIaNTG+hU0rkwXsNBo4n9QF40kuGFh3GqIC1aYEBKtf4NxA4su1ESNCSHYBBrxI7akQK3tQJwO7cw593Hxvh1a40nu5r3v+b3PPc9z8xpb6oPTpwEMaAIngQnDRkEHAQSLwJzQDOISxm+Azp//rM8wgFPvnwITyBpmvA28Z9gYqC7+t9qSZoEvJL6iohZuXLh4Afvkw49ZWF0gWdpvZmeASWUaGYGs0LWlUgLDyi21QNOIc5Hz0qE9h6jOL88DNMLyGdBUSlYfGa4xOFD5L4v19czyao/2mhdHMxrAlCQQZ+eX51vVzsY6O6s73sGYBOqVZLzx+gAvjg0ibSeudYKFxQ2+/eEec7+uUW7XgUmhuY1e58uUzI56xKR7NNwdj0ASZuWQzfqrvqvKs8d28e6b+zj8eI1ez3F33L0RHpMVakdTRJyI8DEPxz0I974yMyNn0XngbGwEADnD8N4aLzxXxyz3e9x9zCNOVMN9AijcFFQq6SEQaK85X1++A8BbJw6we2AHACPDNVIqgMVAqSNNVD18lBImoBoJKfdD1e1mbi894LFHq2Rps5leL+M93wrEYLTq7gc3hy6Bb1EIkCVee6nBM6NDDA3WkEASN27ep73WLd/tx+tgNTw2BYLAq9rursRAvdI/KsDV2VW++3GJbq+HmRXNpcqqeyyCmpvQqle2AQXkrL6SnMWNX+5xZ6lDsodRLXmLycPnPAKP0q3whzMskXf/6tDtFc8qFeNoc5DaDhUOR7HKyM2lHDETEe3wElrmsH/Zzbg6u8L8rXY/m8eagzz9ZJ2eO+FB2duOiJkUEZfDfTbC+19j2w0Ryysdvvn+Nu4ZCYZ27+SV8b2kJDyKU+XIsxFxOZl0M3JMe0RrU2GWSjdLozz46cpdbi0WKiV4eXyY/ft2FgojWpFjOiVu2qvHjwNqCPtIYipVqB95YoDG0COA6HaD3//8h84Dp3lkkN1ldHIWf8zf5979XtuMi5idBVrWPPAUew7vRZH3C86AJiPU0Bb7UjIMiKxyGsIwUrKWGdMY58zS0vrKCpXVdosDIyNkaQ10RWLB0D6Mhhk1K7MoCQPMwIy2GVdAnwo+t6y/s8TP169vxqeo8efHMcyEmkInzZiQGAU2b9MiMAfMAJeg+AVcu3atz/gXdAVC3vg+5BoAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDc6NDU6NTIrMDA6MDCBhmVAAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA3OjQ1OjUyKzAwOjAw8Nvd/AAAAABJRU5ErkJggg==",
asSource: false,
asTarget: true,
uploadPath: "/upload.php",
search: {
path: "/browse.php",
imdbOptionKey: "4",
nameOptionKey: "0",
replaceKey: [
"tt",
""
],
params: {
s: "{name}",
dp: "0",
add: "0",
action: "s",
or: "4",
imdb: "{imdb}"
}
},
name: {
selector: "#title_eng"
},
subtitle: {
selector: 'input[name="title_sub"]'
},
description: {
selector: 'textarea[name="description"]'
},
poster: 'input[name="poster_big"]',
imdb: {
selector: "#upload-imdb_url"
},
anonymous: {
selector: 'input[name="is_anonymous"]'
},
torrent: {
selector: "#file_torrent"
},
tags: {
chinese_audio: 'input[name="is_mandrain"]',
cantonese_audio: 'input[name="is_cantonese"]',
diy: 'input[name="is_diyed"]',
chinese_subtitle: 'input[name="is_chs_sub_incl"]'
},
category: {
selector: "#type_category",
map: {
movie: "1",
tv: "3",
tvPack: "3",
documentary: "2",
concert: "5",
sport: "6",
cartoon: "4",
variety: "9"
}
},
videoCodec: {
selector: "#type_codec",
map: {
h264: "1",
hevc: "7",
x264: "1",
x265: "7",
h265: "7",
mpeg2: "3",
mpeg4: "1",
vc1: "2",
xvid: "4",
dvd: "3"
}
},
audioCodec: {
selector: "#type_audio",
map: {
aac: "9",
ac3: "5",
dd: "5",
"dd+": "5",
flac: "7",
dts: "4",
truehd: "3",
lpcm: "1",
dtshdma: "2",
atmos: "2",
dtsx: "4"
}
},
videoType: {
selector: "#type_medium",
map: {
uhdbluray: "1",
bluray: "1",
remux: "2",
encode: "4",
web: "6",
hddvd: "6",
hdtv: "3",
dvd: "6",
dvdrip: "6",
other: "6"
}
},
resolution: {
selector: "#type_resolution",
map: {
"2160p": "7",
"1080p": "1",
"1080i": "2",
"720p": "4",
"576p": "6",
"480p": "6"
}
}
},
HDSpace: {
url: "https://hd-space.org",
host: "hd-space.org",
siteType: "HDSpace",
icon: "data:image/png;base64,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",
asSource: true,
asTarget: true,
seedDomSelector: "#mcol>table>tbody>tr:last table:first>tbody>tr:nth-child(2)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
needDoubanInfo: true,
uploadPath: "/index.php?page=upload",
search: {
path: "/index.php",
imdbOptionKey: "2",
nameOptionKey: "0",
replaceKey: [
"tt",
""
],
params: {
search: "{imdb}",
page: "torrents",
options: "{optionKey}",
order: 4,
by: 2
}
},
name: {
selector: "#filename"
},
imdb: {
selector: 'input[name="imdb"]'
},
description: {
selector: 'textarea[name="info"]'
},
anonymous: {
selector: 'input[name="anonymous"][value="true"]'
},
torrent: {
selector: 'input[type="file"][name="torrent"]'
},
category: {
selector: 'select[name="category"]',
map: {
movie: [
"15",
"40",
"16",
"18",
"19",
"41"
],
tv: [
"15",
"40",
"16",
"21",
"22"
],
tvPack: [
"15",
"40",
"16",
"21",
"22"
],
documentary: [
"15",
"40",
"16",
"24",
"25"
],
cartoon: [
"15",
"40",
"16",
"27",
"28"
],
concert: [
"15",
"40",
"16",
"31"
]
}
},
videoType: {
map: {
uhdbluray: [
"15"
],
bluray: [
"15"
],
remux: [
"40"
],
encode: [
"18",
"19",
"41",
"21",
"22",
"24",
"25",
"27",
"28",
"31"
],
web: [
"18",
"19",
"41",
"21",
"22",
"24",
"25",
"27",
"28",
"31"
],
hdtv: [
"18",
"19",
"41",
"21",
"22",
"24",
"25",
"27",
"28",
"31"
]
}
},
resolution: {
map: {
"2160p": [
"15",
"40",
"16",
"41"
],
"1080p": [
"19",
"22",
"25",
"28",
"31"
],
"1080i": [
"19",
"22",
"25",
"28",
"31"
],
"720p": [
"18",
"21",
"24",
"24",
"31"
]
}
}
},
HDT: {
url: "https://hd-torrents.org",
host: "hd-torrents.org",
siteType: "HDT",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAQAAAAngNWGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQflBAoHLibMJfxhAAABTklEQVQoz4XSz2oTURzF8c+dyUwSqSUKitJuqq5cFxfWt/BpfCxfwa2CC3VjsUWptYUqJmlmzEzujIuk+SNIzg/u6svh3PP7BSQSrS0KEq+8UG0DSb3Wbp/Ounn6j0erWWZagpkducDSBGqlWrsC+/btm4mIolpEpuvKD5N1cOBYgSBq5DJRqWvP3RUYpGpXDlz76UBuz67SNx/RE7Q3YKvS9cxXlUMDDxUmHrsUzVYgqVyw44GhXbkzb5ReemRsuvp1kMpE9z13pO+DPxpDx3pG6s16glThrU+eKhWmOnouVIuiOjfVRsHQqXe6BvqeqGW+CxKYv/N6K5+dmzpz4rc7bvviAtmq8EYjl3svap0Izt0ycSnom61vpjBxqFSj0WrQc0/fL+P1jIVTI6l2EaTRChLRyPU62BgrZMLGBbeL7W/UMz+G/yvZftlz/QVf65MTdoZVvQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNzo0NjozOCswMDowMAiuiIoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDc6NDY6MzgrMDA6MDB58zA2AAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
seedDomSelector: ".listadetails>tbody>tr:nth-child(2)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
needDoubanInfo: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "2",
nameOptionKey: "3",
params: {
search: "{imdb}",
options: "{optionKey}",
order: "size",
by: "DESC"
}
},
name: {
selector: 'input[name="filename"]'
},
imdb: {
selector: 'input[name="infosite"]'
},
description: {
selector: 'textarea[name="info"]'
},
tags: {
hdr: 'input[name="HDR10"]',
hdr10_plus: 'input[name="HDR10Plus"]',
dolby_vision: 'input[name="DolbyVision"]'
},
anonymous: {
selector: 'input[name="anonymous"][value="true"]'
},
torrent: {
selector: 'input[name="torrent"]',
announce: "https://hdts-announce.ru/announce.php"
},
category: {
selector: 'select[name="category"]',
map: {
movie: [
"70",
"1",
"71",
"2",
"64",
"5",
"3",
"63"
],
tv: [
"72",
"59",
"73",
"60",
"65",
"30",
"38"
],
tvPack: [
"72",
"59",
"73",
"60",
"65",
"30",
"38"
],
documentary: [
"70",
"1",
"71",
"2",
"64",
"5",
"3",
"63"
],
cartoon: [
"70",
"1",
"71",
"2",
"64",
"5",
"3",
"63"
],
concert: [
"61",
"62",
"66",
"57",
"45",
"44"
],
variety: [
"72",
"59",
"73",
"60",
"65",
"30",
"38"
]
}
},
videoType: {
map: {
uhdbluray: [
"70",
"72"
],
bluray: [
"1",
"59",
"61"
],
remux: [
"71",
"2",
"62",
"73",
"60"
],
encode: [
"64",
"5",
"3",
"65",
"30",
"38",
"66",
"57",
"45"
],
web: [
"64",
"5",
"3",
"65",
"30",
"38",
"66",
"57",
"45"
],
hdtv: [
"64",
"5",
"3",
"65",
"30",
"38",
"66",
"57",
"45"
]
}
},
resolution: {
map: {
"2160p": [
"70",
"72",
"71",
"73",
"64",
"65",
"66"
],
"1080p": [
"1",
"59",
"61",
"2",
"60",
"62",
"5",
"30",
"57"
],
"1080i": [
"1",
"59",
"61",
"2",
"60",
"62",
"5",
"30",
"57"
],
"720p": [
"3",
"38",
"45"
]
}
}
},
HDTime: {
url: "https://hdtime.org",
host: "hdtime.org",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABnlBMVEVyICB6Hh57HR2GGhqKGBiLGBiRJiajTEx+IiKeQkKDLS2BKiqYOjp9ISGYODiNHh6PFxeQFxeuWlqzYWGeNjaxXl6iQECSHx+nSUm1ZGS0Y2OtV1eaMDCTIyOuV1e0ZGTt4eH59fW7dHTz7OzIlJSXLy/Vr6/////+/f3y6enJmJicNDSbOzvq19fStbX28PDjzs7izMzw5ub17+/CioqeQ0PRq6vhysrz6+vizc3gysrBlZXl09OpU1OjRka0amrn1NTfxsakSUmfPDyjRESqVVXu4uLcvr6pVlaiRETfysqXKSmSHR27dXX8+vqsVVWZKyvq3Nz37+/y5eX9/PytVlbx6Oj38vKwXFz+/v77+Pj59PSsVlbw5+f38/OwXV37+fnWs7O8gYH48/OQGBixYGCvW1uZMTHLm5vr3d2pUFDFiIjBgIDPoqL17u7Tra2bNDT8+/vkz8+tXFyRGxvRr6/ZvLyvXl7XubnXurq4d3eVKCi+hYXbv7/Zvb2mSUmTISGWJyfQra2aMzOcNTWVJCSQGhqXKiqRGhqbMzMP6rAIAAAAEHRSTlPB4en7/f39/en96en96f39DMn6iQAAAAFiS0dEJy0PqCMAAAAHdElNRQflBgoEEjQ06RnvAAABJUlEQVQ4y2NgYGTCAxgZGBiZWVhxAhZmRgYmFgE8gIWJgYlVQBAnEGAdNgrYhIRFgGxRYTFxCUkgkJKWEZSVkwQDeXYOBiZOBUUloAJlRRVVNXUg0NDU0tbRVYcAPS40BfoGhkbqxiamZuYGiuoWllbW3GgKbGzt7B3UHZ2cXVzd1N09PHl40RR4eQv6+PoZ+QsKBgSqq6mCHcmpoBEUHBwcAlMgGBoWHoGqIDIqOjpaA64gJjYuHlVBQmJSUlIyTEFKqr5+GqoCFDekpGeoZ2bhVKCQnZObF5JfgFMBCBQWFZcgK+ArLSsHKqiorKquqQWCOq36BiC/sam2phqsgL+5pRUo0KLt3dbeAgTa3uB46uhsaW8bNAmGcgWEsh7BzEso+wMAFb1rT/22c/EAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDYtMTBUMDQ6MTg6NTErMDA6MDD9uTIQAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA2LTEwVDA0OjE4OjUxKzAwOjAwjOSKrAAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
mediaInfo: {
selector: 'textarea[name="technical_info"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
diy: 'input[type="checkbox"][name="tags[]"][value="8"]',
chinese_audio: 'input[type="checkbox"][name="tags[]"][value="16"]',
chinese_subtitle: 'input[type="checkbox"][name="tags[]"][value="32"]',
hdr: 'input[type="checkbox"][name="tags[]"][value="64"]',
hdr10_plus: 'input[type="checkbox"][name="tags[]"][value="64"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "406",
sport: "407",
cartoon: "405",
variety: "403"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "12",
x264: "10",
x265: "12",
h265: "12",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "3",
dvd: "4"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "1 ",
bluray: "1",
remux: "3",
encode: "7",
web: "7",
hddvd: "2",
hdtv: "5",
dvd: "6",
dvdrip: "6",
other: "0"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
hdtime: "6",
hdt: "12",
vtime: "15",
padtime: "7",
cmct: "8",
wiki: "4",
beast: "3",
chd: "2",
other: "5"
}
}
},
HDU: {
url: "https://pt.hdupt.com",
host: "hdupt.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBy8jpVQ5rwAABFlJREFUOMs9lElvXMcBhL9e3j4LZ6gR6SFpLhITWU4gKTSyIRdHgZBTfpN/UZBrTrEBI4ccAmRBLjYgWZFEUZztLTNv6dfdOVAI6lKnQhUKVeIPFydeSokQAqUU86NPePyTSx59/oD9/QFCAEhQA2Q6QURjOgP//vs/+POf/shmtcYLiUfgvUdN48FXjZP0QvOjx5c8f/FrLh/OiAOLNS3O1HR1gbM9QkY4r7HWs394xGCyR1WWrLeGzkmcDFDDwfQrGUb87OkjXjz/gulQ0m+XeG9x3mO6FtM2dKan2Va024reGHpCDo+OOdiL0GHKphHIcIgeTA958ctHfPmLh0i34+b1W7Q3hFFI0xlUlCKlQoUe6x29rXH+hmBUk+7N6KxkOJ5yehpzu2nRz3/zhC9//pBYtbx/ec3bl69wXc1klLLZ9axqwafn53jZkiZDrn94xfHZGYYcnU3wwNff/oXj8yuy0R76d7+6JFaecl1S5iVKK9J4iJWCk4tT5iJmnTfsjOX9as3X3/yNLxYfuHr2BKtb9sZzjk9OeP3uB84uforeFRtcqGi7HofEiwCnY1abNYv8FYfzQzSCemepW8vDkwmZavjvd/+iWP+VbHbO1WdPWVXf4zzodtdQrXdUZYlH8iFvuF0uMX3Htqg4Wu44nB9Q5i1CaT6dZbi25s37FZvSsHj7PU+GF1w9u+LNokW/eXnDeDagqg14i1URr2/f0vUObywqbHAqp1hucb5nfqBpasdt0bIVI75b52z/+R9+/9tjpFLI63crwnTM/aMzVoVhU3UEcYIOI5I0w1rB8npNvioo25Ztp1hXnrIVOBWRjWc0dU1RNQgp0Pkq5/rNguHekKKs2eQlaRKjXI0wHtEZTNNRNTXjyQFNo+gaSW8EWg/Znw7IhiNaGyKQaNc23F7fUOxKrO2YjDKqakfvHML1aC/AexIdEBByuyhZFTmdjrE7x/mDU87OT+/miUCbvmNbViSjmPnhPcp8w2axwjQN2nmQIUpp9pOMUGl6oTAyIBhO+ezzZ5xdXKD13RcIAdpYg7UtUQB917Je5pjWIKxFeEU6mqC8QFpDNrrP+JMfcxanDGbHjOcH6NgjhUAiEEIgvfc02x1lXrL4sKTKS2xrwAm0CkkmBzROki9zgnjK+PwpgQyJtCAbSAZZRJaGpGlAmgToNA5o6o5iVdK3Dar3RCrAek+UjghHM+Ryzfj+KcHsnGg8xfdL9g5HJEmA+OjMA8IL9CgOabYFN+9uieMI7yVeWIIoYrg/xxrBeP+M8fEDiDPiCO4/vkSFdyXcAe6OUyBT4UiVp9gULFYFTddje0iye0gZY27ek907ITu+JBuNiBOPDhXcyQDgAbwHPDrWinESkemGqjXsrCUMIorVmmaZk4QZu+2aqQcZBCgl8fiPEfnI/q+KFl6QRSF7SURtGpwVWCydLSFMcL0nXrzGrG+I9oc4LzEteOfw3uOtA+9xzoJ1/A9EnjRTvBUMaAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNzo0NzozNSswMDowMIa7gnQAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDc6NDc6MzUrMDA6MDD35jrIAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "406",
sport: "407",
cartoon: "405",
variety: "403"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "14",
x264: "16",
x265: "14",
h265: "14",
mpeg2: "18",
mpeg4: "18",
vc1: "2",
xvid: "3",
dvd: "18"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "2",
dd: "2",
"dd+": "2",
flac: "7",
dts: "4",
truehd: "3",
lpcm: "11",
dtshdma: "1",
atmos: "17",
dtsx: "16"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "11",
bluray: "1",
remux: "3",
encode: "7",
web: "10",
hddvd: "2",
hdtv: "5",
dvd: "6",
dvdrip: "6",
other: "0"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "5",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
area: {
selector: 'select[name="processing_sel"]',
map: {
CN: "1",
US: "2",
EU: "2",
HK: "3",
TW: "3",
JP: "4",
KR: "5",
IND: "6",
SEA: "8",
OT: "7"
}
}
},
HH: {
url: "https://hhanclub.top",
host: "hhanclub.top",
siteType: "HanHan",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB+FBMVEX/////+/r/8O3/5N/+08z+xLr/8O7//f3/6eb+z8f+uq7+rp//rJ3+rZ//saT+tqn/t6r+ppb+jHj/eWL/bVT/ZUv/XkP+oZH//Pv//fz+2NH+mYj/b1f/X0P/aE7+fmf/XED/Wj3/Wj7+gGr/XEH/Wz//XD//Wz7/blX+497+1Mz+a1L/WT3+hXD+2dL+sqX+3tj/Zkv/Ykf+zsb+vrP/XkL+i3b+5N//tan/6+j/X0T+w7n+z8b/Y0j+jnv+6uf/clr/taj/8vD/dV3+vbL+5eD+kn//eGD/9/X/e2X+vLH/8/H+f2n+lYL/9PP/fWf/WTz+taj/+vn/gWv+vbH+l4X/+Pf+iHT/a1L+x73/hnH+vLD+mIb+4tz/3tj/5uH/7uv/+/v+inb+wLX+wrj+moj//Pz+u7D/n4/+m4n/kn/+h3L+w7j//v3+jXn+pJT+nIr/Vjr/Vzv/r6H+kHz/YEX+yL7+4t3/b1b+no3//v7+lIH/sKL+k4H+zMP+oJD+m4r+zsX+xrz+o5P+opL+sKL+p5j+qpz/ZEn+0sr+19H+mIf+rJ3/Z03+2tT+7er+inX/cVj/ZUr+i3f+dFz/6uf/6ub+uq3+rqD+nIv9fmj+cVn/YUb/ZEr/alH+6ub+4Nr+zcT+wrf+zcX+1M3/08z/0cn/9vQySTsrAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+cKGggqKOZMG6oAAAFmSURBVBjTTdHlW4IxEADwEwMVu8BA907nizrrtVHs7sLuwG4xUFGxu7v733TDL+7Lbb/dPffcBvB/2chs7ewd+E7u6OSscHF1c/fw9PL28fVTqsA/IDBIHRyCBIxxUGgYCRc1ERAZRUUaHRNMEMKxcfEsSAmQmIQQTU7x4ZiaxoM2HTJ0DDOzskWGObl5GKGkfCjQEEQLZUWYZxaXcCyFsnKMaEVlFSVidU1tncCwHkAhIqpvaNQ1ZXs3q1oY+iUCtLLyNnl7R2daV0N3D0VI3QvQxxr1GwYGh4ZHRsfGqbW7fIJlThq8piidnoFZhsY5mF9guGhaYie8DCssSGaYM7LyVVj7Qz3HdbBw3IBNjlvWO10GOPGJtmFH4LODkuHuHuz7EiQcGA45Kv1ZATk6hpNoLFDp9Iy9BDm/0BBSfXkFcH1ze3f/8Kg1GqVdSXp6HjHLrb9genl9e7dYPj6/vr9efwB+AedbWaa0tk+DAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTEwLTI2VDA4OjQyOjM5KzAwOjAwIhY7NQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0xMC0yNlQwODo0Mjo0MCswMDowMMwWz0MAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjMtMTAtMjZUMDg6NDI6NDArMDA6MDCbA+6cAAAAAElFTkSuQmCC",
asSource: true,
asTarget: false,
uploadPath: "/upload.php",
needDoubanInfo: true,
seedDomSelector: ".bg-content_bg div.leading-6:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrenttable>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
}
},
HUNO: {
url: "https://hawke.uno",
host: "hawke.uno",
siteType: "UNIT3D-Legacy",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAADOklEQVR4nL1U32/TVhT+kpUXeIAW/gd4Ytr+gT1XCBC/JJAm8RYJTaNqrmP73sRxC+w/mJCmTUKa4AUhBLET0rERDbQ9dR1FRRRBW8UJELa2lC52nNj1QddpsoYB2st2pE86Oj76fI6+7x7gf4gEiLp4TxBRQiLufW/IhkplCNhKJGsU1whIVExzaCtJr0b0NrFJyf5EREkU1vfgOu2O6z3izR+Zppms6/ruZ+n0HjLNZH/izbxLJsNeG4bdzMNy52B7q7C8FVjebNJqckzRDmKf71higteZmK0pYqXGxKrD+JzDeL6q68MxcZ+0sL4PRf8J7hLh9sYGii2K8UMYJX4lwrXl2XtfarOReYFe6vmormSprgj6U89vuMYFmT9ZSvN9XbIr1WFMBY9QIULB9VH0QvxEFMP2gmSp1QH7nvafVOkpE53nighW+AStigmqKSJ0GPdfZyepoRmPHpw5Mwzcak/EkxWabdzqEMptH5Zr4cZ6CRXq4Otp+mj0ixCH1TCfEuRzo7OQ1ktVxq2GlvNfqDmqMt6Wk77IGBNAuTOPckCw3Qh2K0DBH+2L9TMdw9lvKXlwLMIRLfrklE6vFHGs97nGxGhdEYGjiKihGtRQs/OA7UWw3BB3iGB5dtz5zfQ2mNJCAI5kKjiRJZwQlJC51PEzc2g6ldomc0fh9pqYJIfxsKaIaJCw4BZjEum9HuHRdxNS15NwGC++GiDsrWy5EYqtEHbzQH/lu3QcY9/1V/5Urqzmjv+9snagLoWRK2tyZWMeKHpGLIolRWkTyp02brol3PyrjDsU4OJvXVEOqeFkilNLzwULjJerab3UUHPtWJS03naN8/RczRnApaVdmAoe9m0jhZGW+XGLbZTL9PFJlRaZ6DzbYptYEMb99ew5eqkZD38/PbarO/uN13theY8Hje13jf1LbOyZe2f1mcj8iv7QzaieyZLE8qaxa4p4vDiW2Tv49G6v7oTdzMH27sP2lmNY3kzSbmoo0HZKpbYvMqHVGJ9xmFiOofD7TiabW9C0nb13/q7jkECZRnB1bWSgtpnLCzM3Pj7ijI+PyBz/OA4fOl9xbfB89Ug+fL7ejn9/YP/7eAMLS3CiKim0CAAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/torrents/create?category_id=1",
torrentDownloadLinkSelector: 'a[href*="/torrents/download/"]',
needDoubanInfo: true,
seedDomSelector: ".torrent__buttons+.panelV2",
search: {
path: "/torrents",
replaceKey: [
"tt",
""
],
params: {
name: "{name}",
imdbId: "{imdb}",
sortField: "size"
}
},
name: {
selector: 'input[name="name"][class="form__text"]'
},
description: {
selector: "#bbcode-description"
},
imdb: {
selector: "#autoimdb"
},
tmdb: {
selector: "#autotmdb"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
anonymous: {
selector: '.form__group input[type="checkbox"][name="anon"]'
},
torrent: {
selector: 'input[type="file"][accept=".torrent"]'
},
category: {
selector: "#browsecat",
map: {
movie: "1",
tv: "2",
tvPack: "2"
}
},
videoType: {
selector: "#autotype",
map: {
uhdbluray: "1",
bluray: "1",
remux: "3",
encode: "12",
web: "4",
hdtv: "6",
dvd: "1",
dvdrip: "12",
other: ""
}
},
resolution: {
selector: "#autores",
map: {
"4320p": "11",
"2160p": "1",
"1080p": "2",
"1080i": "3",
"720p": "5",
"576p": "6",
"480p": "8"
}
}
},
KEEPFRDS: {
url: "https://pt.keepfrds.com",
host: "keepfrds.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACDVBMVEX////8/Pz19fXs7Oz09PT+/v7p6enQ0NC7u7uwsLCvr6+6urrOzs7n5+f7+/v6+vri4uKrq6uBgYFzc3N5eXl6enp0dHR/f3+np6be3t75+fjj4+OSkpJ8fHyhoaHh4eHT09OlpaV+fn2Li4ve3t3s8PXu8vfh5uu6vsKLjY+3uLjl5eX5+fm8vLyLjY6zt7vf4+isvtSOp8WCnsB+mbl6kKyutb3c3d7v7u7m5ubY2NjY2NfP0NGqsrt1jKd8lreCnr+OqMWcss1chLAvZZ4uZp9ahbPS3ejOzs+3trbLy8ugoKCioqHBwsPK1eJXg7EtZZ8uZJ5bhLCds83t8faoxt9Yl8g/icJ2qtLh6vGwr697e3uNjY3FxcWRkZGenp3MzMvf6fFyqNE8h8FXlseoxd78/f7f7PWPweJWpdZ7uuDh7fWzs7OampqoqKipqamXl5enp6fk8fh4uN9Uo9X6/P3Q6PaQzex3xenX7ffP0dLR0NDW1ta5ubna2trx8fH1+PnY8Pp0xOqOzOz1/P/L5vKUwtaxwMfa3N329fX39/f4+Pjq7e6xwsmOvtLJ5fD2/P/x8/PDyMuMjpC0tLX29va2t7eKjo67wcPu8PH9/P3m5eWXlpabm5vKysrd3d3MzMyQkI/h4OCxsbGGhoZ4eHiEhISurq79/f3U1NTAwMC1tbW/v7/q6urw8PAgqDn/AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+UECgYrK84hHq4AAAEbSURBVBjTY2AgFTAyMTOzMCKLsDKysXNwcnHz8PKxwgX5BQSFhEVExcQlJKXAoqysDIzSMrJy7PICCopKyir8IBFVVTV1DU0tbR1WVj42XT19AzVVVQZDI2MTUzNzC2ZLeStrG1s7ewdHQwYnZxdXN3cPTw4vbm8fXz//gMCgYIaQ0LDwiMio6JhYwbj4hMSk5JTUEIa09IzMrOyc3Lz8gsJY7aLikoz0NAbW0rLyisqq6hqO2rr6hsam5rJSkKtaWtvaOzq7tHm7GXp6+/onQNw+cdLkKfJTWVm7pKdNnzET6qFZs+dEz503f/4Cb9mFi/jg3tRevERs6VKxZcsFdOCeZ13BvHLV6tVrFNYysqIEVHf9uu4VJIc4AFHVRtljPRexAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA2OjQzOjQzKzAwOjAwO9PHqAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNjo0Mzo0MyswMDowMEqOfxQAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
needDoubanInfo: true,
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
}
},
name: {
selector: 'input[name="small_descr"]'
},
subtitle: {
selector: "#name"
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_url"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "408",
sport: "407",
cartoon: "405",
variety: "403"
}
},
source: {
selector: 'select[name="source_sel"]',
map: {
uhdbluray: "10",
bluray: "1",
hdtv: "4",
dvd: "3",
web: "7",
vhs: "8",
hddvd: "8"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "3",
hevc: "0",
x264: "3",
x265: "0",
h265: "0",
mpeg2: "17",
mpeg4: "1",
vc1: "16",
xvid: "5"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"4320p": "0",
"2160p": "7",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "5",
"480p": "5"
}
}
},
KG: {
url: "https://karagarga.in",
host: "karagarga.in",
siteType: "KG",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAC0FBMVEUAAADMzMyDgIDBxMSAgIB6gID/4uIAgICAhYXNzc2IiIiXl5eDg4O/v7/BwcHAwMCFhYXGxsbS0tK5ubl7e3tzc3P////Ly8vMzMzMzMzMzMzMzMxvamqlpKSmpqZaWlqChYXP0tJ/gICChYVISUkTExMFBQWJh4fJycmDhYV+hYU9iIhXWloAhIQAgIDNzc3Q0NCsrKxVV1cdDg56OTk4OTkODQ1bAAA9REQAhYWSkpJfX18QEBB4eHiLi4uVlJSZmpqNjY15eXkODg5hYWEgICCIQEC9u7vBxMQ/Pz+CgoJGRkYVeXmuuLjq1NQAAAAZGRljXl5iqKi+v7/BwMBWVlaNjY2IiIiIiIhoaGihoaGMjIycoKCwsLDJw8PAwMC/v7/AwMDAwMCWlpaLi4uDg4PGxsbHx8fDw8PIyMiwsLDAwMDAwMDAwMDAwMC/v7+8vLzAwMDAwMC8vLy4uLi3t7eQkJCenp7BwcHAwMDAwMDAwMDBwcHBwcHPz8+NjY2Hh4eEhISnp6fBwcHAwMDAwMB7e3t7e3t7e3uqqqqHh4dhYWH8/Pyjo6N5eXmAgIB/f3+AgICbm5uKiorCwsLDw8OMjIy9vb3///////+JiYl/f39/f3+AgICwsLCioqK6urq/v7+amprw8PDMzMy/v7/AwMDExMR5eXmAgIDKysp/f3+AgICvr6+hoaG/v7++vr7BwcHAwMDExMR5eXmAgICpqakUFBQRQkIAAAABAABrJiYoQUEAHR0SERGKiopaW1sMBgZOHh4aCwsMAABKLS1OTk45OTlTUVEBDg4BYGAIISE9AAAJCQkDAwMODg4FBQUHBwcLCwsBAwMCDg5TAwNCOTk+Pj5bW1tZWVleXl4rKysWFxdYV1dcWVl3WFg7Ozs8PDxzc3PFxcW2trbAwMC4uLiHh4eIiIiMjIyPj4+zs7OdnZ2/v78GBgb///+lKbQMAAAAtnRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkTUEIDo3hNxoOBqD3++TnchSh7eSBAgFag32O8PCOfIhfJExJTMrhHQ6N+/v++sYaBp33vCADtuicX5oUv3t/dbruiNi6nO+WikT90FgtpehaxPfEwV7dRgKc9f786eDlxx0BHQkRkfleFR4aAwJ63elXD39/g4iIidzagX9/g1oB3Le5ubO3F6TuswxDUSMVTIEDAwMEBrawIHRE97mnD1YAAAABYktHRBZ80agZAAAAB3RJTUUH5QQMAwUgcVRTPQAAAThJREFUGNNjYKAaYJSQlJJmRBFiYpKR3SYnr6DIjBBjYVVSVtmuqqauwcYOF+TQ1NLesXPnrt06unpgAU59A0MjY5M9e/eZmplbWAIFuaysbWzt9h84eOjwkaP2DtwgVTyOTsecXVyPnzh56vQZN3cPXpCgp5f32XPnL1y8dPnK1Ws+vn58IEH/gOs3bty8dfvO3Xv3A4OCQ/hBgg8ehoaFh0dEPoqKjomNi09ITAIKJ6ekCggKpqU/zsjMevI0Oyc3DyiYXyDEwl9YVPyspLSsvKKyir8aKFhTy8cgLFxX//xFQ2NTc0srP8w3Im3tHS87u7pFYQI9vX39EyZOejV5ytRp02fMFAMLvn4za/acufPmty9YuOjt4iVLly1fsZLh3fNVYqvXrF3XJr5+w9uNm/Kfbt6yFQBipHYOvCm+yAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMlQwMzowNToyOCswMDowMNjzD2AAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTJUMDM6MDU6MjgrMDA6MDCprrfcAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: ".outer h1~table:first>tbody>tr:nth-child(6)",
torrentDownloadLinkSelector: 'a[href*="/down.php/"]',
needDoubanInfo: true,
search: {
path: "/browse.php",
imdbOptionKey: "imdb",
nameOptionKey: "title",
params: {
search: "{imdb}",
search_type: "{optionKey}",
sort: "size",
d: "DESC"
}
},
source: {
selector: "select[name='source']",
map: {
uhdbluray: "Blu-ray",
bluray: "Blu-ray",
hdtv: "TV",
dvd: "DVD",
web: "WEB",
vhs: "VHS",
hddvd: "HD-DVD",
other: "Other"
}
},
resolution: {
selector: "select[name='hdrip']",
map: {
"720p": "1",
"1080p": "2",
bluray: "3"
}
},
torrent: {
selector: 'input[name="file"]'
},
genres: {
map: {
Action: "4",
Adventure: "55",
Animation: "5",
Arthouse: "6",
Camp: "43",
Classics: "8",
Comedy: "9",
Crime: "10",
Cult: "11",
Documentary: "20",
Drama: "12",
Epic: "44",
Erotica: "13",
Experimental: "51",
Exploitation: "47",
Fantasy: "14",
"Film Noir": "15",
Giallo: "53",
Horror: "17",
"Martial Arts": "18",
Musical: "19",
Mystery: "54",
Performance: "60",
Philosophy: "48",
Politics: "49",
Romance: "50",
"Sci-Fi": "21",
Short: "22",
Silent: "23",
Thriller: "24",
TV: "25",
"Video Art": "56",
War: "26",
Western: "27"
}
},
country: {
map: {
USA: "2",
UK: "12",
Germany: "7",
Italy: "9",
"---": "255",
Abkhazia: "119",
Afghanistan: "54",
"Akrotiri and Dhekelia": "120",
"Aland Islands": "121",
Albania: "65",
Algeria: "35",
"American Samoa": "122",
Andorra: "68",
Angola: "36",
Anguilla: "123",
"Antigua Barbuda": "89",
Argentina: "19",
Armenia: "124",
Aruba: "125",
"Ascension Island": "126",
Australia: "20",
Austria: "37",
Azerbaijan: "118",
Bahamas: "82",
Bahrain: "127",
Bangladesh: "86",
Barbados: "85",
Belarus: "129",
Belgium: "16",
Belize: "34",
Benin: "116",
Bermuda: "130",
Bhutan: "131",
Bolivia: "132",
"Bosnia Herzegovina": "67",
Botswana: "133",
Brazil: "18",
"British Virgin Islands": "134",
Brunei: "135",
Bulgaria: "104",
"Burkina Faso": "60",
Burundi: "136",
Cambodia: "84",
Cameroon: "137",
Canada: "5",
"Cape Verde": "138",
"Cayman Islands": "139",
"Central African Republic": "140",
Chad: "114",
Chile: "51",
China: "8",
"Christmas Island": "141",
"Cocos (Keeling) Islands": "142",
Colombia: "99",
Comoros: "143",
"Congo (Brazzaville)": "53",
"Congo-Kinshasa (Zaire)": "252",
"Cook Islands": "144",
"Costa Rica": "102",
"Cote d'Ivoire": "145",
Croatia: "97",
Cuba: "52",
Cyprus: "146",
"Czech Republic": "46",
Denmark: "10",
Djibouti: "147",
Dominica: "148",
"Dominican Republic": "41",
Ecuador: "81",
Egypt: "103",
"El Salvador": "149",
"Equatorial Guinea": "150",
Eritrea: "151",
Estonia: "98",
Ethiopia: "112",
"European Union": "253",
"Falkland Islands": "153",
"Faroe Islands": "111",
Fiji: "152",
Finland: "4",
France: "6",
"French Polynesia": "154",
Gabon: "155",
Gambia: "156",
Georgia: "108",
Ghana: "157",
Gibraltar: "158",
Greece: "42",
Greenland: "159",
Grenada: "160",
Guam: "161",
Guatemala: "43",
Guernsey: "162",
Guinea: "113",
"Guinea-Bissau": "163",
Guyana: "164",
Haiti: "165",
Honduras: "79",
"Hong Kong": "33",
Hungary: "74",
Iceland: "62",
India: "70",
Indonesia: "166",
Iran: "107",
Iraq: "167",
Ireland: "13",
"Isla de Muerte": "105",
"Isle of Man": "168",
Israel: "44",
Jamaica: "31",
Japan: "17",
Jersey: "170",
Jordan: "169",
Kazakhstan: "110",
Kenya: "172",
Kiribati: "58",
Kosovo: "173",
Kuwait: "171",
Kyrgyzstan: "80",
Laos: "87",
Latvia: "101",
Lebanon: "100",
Lesotho: "174",
Liberia: "175",
Libya: "176",
Liechtenstein: "177",
Lithuania: "69",
Luxembourg: "32",
Macau: "178",
Macedonia: "179",
Madagascar: "180",
Malawi: "181",
Malaysia: "40",
Maldives: "182",
Mali: "115",
Malta: "183",
"Marshall Islands": "184",
Mauritania: "185",
Mauritius: "186",
Mayotte: "187",
Mexico: "25",
Micronesia: "188",
Moldova: "189",
Monaco: "190",
Mongolia: "109",
Montenegro: "257",
Montserrat: "191",
Morocco: "192",
Mozambique: "193",
Myanmar: "194",
"Nagorno-Karabakh": "195",
Namibia: "196",
Nauru: "63",
Nepal: "197",
Netherlands: "15",
"Netherlands Antilles": "71",
"New Caledonia": "198",
"New Zealand": "21",
Nicaragua: "199",
Niger: "200",
Nigeria: "61",
Niue: "201",
"Norfolk Island": "202",
"North Korea": "96",
"Northern Cyprus": "203",
"Northern Mariana Islands": "204",
Norway: "11",
Oman: "205",
Pakistan: "45",
Palau: "207",
Palestine: "208",
Panama: "206",
"Papua New Guinea": "209",
Paraguay: "90",
Peru: "83",
Philippines: "59",
"Pitcairn Islands": "210",
Poland: "14",
Portugal: "24",
"Puerto Rico": "50",
Qatar: "211",
Romania: "75",
Russia: "3",
Rwanda: "212",
"Saint Helena": "213",
"Saint Kitts and Nevis": "214",
"Saint Lucia": "215",
"Saint Vincent and the Grenadines": "217",
"Saint-Pierre and Miquelon": "216",
Samoa: "39",
"San Marino": "219",
"São Tomé and Príncipe": "220",
"Saudi Arabia": "221",
Sealand: "258",
Senegal: "94",
Serbia: "256",
"Serbia and Montenegro": "47",
Seychelles: "48",
"Sierra Leone": "222",
Singapore: "26",
Slovakia: "223",
Slovenia: "64",
"Solomon Islands": "224",
Somalia: "225",
Somaliland: "226",
"South Africa": "29",
"South Korea": "30",
"South Ossetia": "227",
Spain: "23",
"Sri Lanka": "228",
Sudan: "229",
Suriname: "230",
Svalbard: "231",
Swaziland: "232",
Sweden: "1",
Switzerland: "57",
Syria: "233",
Taiwan: "49",
Tajikistan: "234",
Tanzania: "235",
Thailand: "93",
"Timor-Leste": "236",
Togo: "95",
Tokelau: "237",
Tonga: "238",
Transnistria: "239",
"Trinidad & Tobago": "78",
"Tristan da Cunha": "240",
Tunisia: "106",
Turkey: "55",
Turkmenistan: "66",
"Turks and Caicos Islands": "241",
Tuvalu: "242",
Uganda: "243",
Ukraine: "72",
"United Arab Emirates": "244",
"United Kingdom": "12",
Uruguay: "88",
USSR: "92",
Uzbekistan: "56",
Vanuatu: "76",
"Various/International": "117",
"Vatican City": "245",
Venezuela: "73",
Vietnam: "77",
"Virgin Islands": "246",
"Wallis and Futuna": "247",
"Western Sahara": "248",
World: "254",
Yemen: "249",
Yugoslavia: "38",
Zambia: "250",
Zimbabwe: "251"
}
}
},
KamePT: {
url: "https://kamept.com",
host: "kamept.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5woaCDQq3ANFWQAAA51JREFUOMuFlFtT21YUhb+jI8m2ZMtXCgYMLiEpoXGmTXpvc5k8NP83nabT5z4ktNOZUEiDSyBASInxVb7JliWdPNDSIZB0v+9v1t577SWivlK8XUpRPzyg9uI5Uig+WFomlZ9GN02klFzQcVr6eZZi5+kfvNx6RKcxwNQNOo1jMsVl9HicfHGGzFQBKbULwWeAQkDP7fLjTw/x/SZSxEnG4kR+Ej3hYcZD3GaVZKHG4uVLWLZ1DnpO4cT3Oaw1qfVa5BybsqPRFQFmzyNvJkBoHB3UGY0Drt2ooOtnEdrbwFCBFXPA9RnXBZlElkuX85ixGENvwsALaHZ6bG5s0TiuI8T7FAqo1RpY2XlyKRepBDNzWeyE5OVhC8OwAPizusloErBS+YjiXPE9QAXttotumkwtzJMQJo2+wAs8XNfDtgTSEMzNZ9l+XsN1+yilTpS8a4cIDeH1ycmQccKmulcnbQrSlk2gedjJGKufXKPV9pBSQwhx5jDnRrbtOLbmE26/gDmDhZkUmcIUBccilYpz3Gyy93QbiwAnlfz/KxuGTmQlCRbLeJFkdSrNF5VZYjN5QqGRPMjw994OKqojwiFHe7tMlxbRpHwHUNdpDSJc36TvNikcBdy8WsDrJxhhUixPUyjlufLlDbKFHLXdA8beECuVQqkLbGMYOmEUYoo4s9oS3X3JDw/XqVYPSU3PEs9m0E2TmdIcSkU4hTwT33+3D3VdR0UKW4ZUygtUVu5QKi/TbtVoN+pomkQJSafRIAxCpCkZDvqoSF0AVBCGIaFSGGmL8m2HlfsWXb3O2q/rvKjuYpgG6XwGIQTyny8JggkKdXaHvu/zfOsvnlV38YOQtjtg7fctLKPHk18eIzqKaDSh+bpJMpPEyeUYj8YM3QEpJ40QJ9pE1FdKCFhff8aDBz/THY4ZKYO+e4QxbjFvm7ivenx37ytu3LnJwFdsbO7Q6nQYtlxu3bvDZ7e+PQWeKozCkFFkoAwd1WuTtyM+vVLi69UVJk6OYqlITAo6geLRbxvs7B4wl7X45u5tlOL0p0+BuqFj2xbK87GcJJmEQyqboa9Myh+WaB++RkQhZNLksmnE1Y/RpES3nTPZKP5N7PF4zP7+Kx6vrbO1vcfn15e5VlklHHuISZdISyAIkVpEqxeyt/+KTm/I9/fvsrS0cB4oxElabzzZpNXuUrm+QiabJYoiAt9H03WUikApNKnjeUMEYCdTaNp/ZnkDkeWj+pSQ1t4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMTAtMjZUMDg6NTI6NDIrMDA6MDDrWrkWAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTEwLTI2VDA4OjUyOjQyKzAwOjAwmgcBqgAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyMy0xMC0yNlQwODo1Mjo0MiswMDowMM0SIHUAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table>tbody>tr:nth-child(4)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
}
},
LST: {
url: "https://lst.gg",
host: "lst.gg",
siteType: "UNIT3D",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABXFBMVEUAAAAAAAEAAQABAAABAQAAAAAAAAEBAAEAAAAAAQAAAQABAAAAAAEAAAAAAQAAAAABAAAAAAAAAAABAQALCgoKCgoBAADQ0dC2treTkpMoKSmBgICAgIABAACTk5MAAACTkpIBAQEAAAEBAQEAAAEAAQABAAAAAQABAAABAAEAAQABAAAAAAEBAAEBAAEBAAAAAAABAQEAAQAAAAEBAQAEBAQhICAREREAAQH8/PwoKCk+Pz/q6ur//v/9/P13d3d2dnbz8vLz8/Pz8/I3NzexsbH+//5gYWBVVVVISEgyMjJoaGny8/Pg4OBoaWn///5/fn7////p6eiQkZEUFBTp6enJyMg3NjdQUVCys7L8/fzGx8bJyciEhYRgYGE0NDVra2ppaGlHR0bo6Ojs7e37+vr9/Pz9/f2NjY14eXn8/P309PRnZmfV1dXIycgNDQ0gICEHBwcDAgMCAgOj429fAAAALnRSTlMAAAAAADCX2fn52ZcJmv7+CQnCmjD+MJiX2dn5+fnZ2ZeXMP6aCcKa/pqX2fmXK9ig8QAAAAFiS0dEUZRpfCoAAAAHdElNRQfnChsDMwGLF6JaAAAA90lEQVQY0xWOZ1PDMBiD3yQEWiBNE/YsZc9Y2AbMCIXSsqEUCLPsvdf/v8PRJ+k53UlEZJBdXZNI1tbZJsUy6p1UwIBJuE46Bp7POVjAIQDf06AhCCAk4syZY1Bjk7ZianoGUgmZaqaW2Tnw+YVwMbe0nF/Jt1JbWBCiuLq2vrG5tb2z204dpYJke+X9g0MgOmJJ6iwdM6ZOTs/OJaIK66Lu8sXl1fXN7d09gqjCM9Tz8Pj0/PIavr1DfXwiS72unhdf3z+A/P3rs/UxgIGr+Bh4v0XWgK+gNIrxYLqKTMsbciG4ZGp4xCPdIDLt0bHEeGbCtkwy/wE9US4qeYwieAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0xMC0yN1QwMzo1MTowMSswMDowMPxuOEAAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMTAtMjdUMDM6NTE6MDErMDA6MDCNM4D8AAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDIzLTEwLTI3VDAzOjUxOjAxKzAwOjAw2iahIwAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/torrents/create?category_id=1",
needDoubanInfo: true,
seedDomSelector: "#meta-info+.meta-general>.panel:first",
torrentDownloadLinkSelector: 'a[href*="/download/torrent/"]',
search: {
path: "/torrents",
replaceKey: [
"tt",
""
],
params: {
name: "{name}",
imdbId: "{imdb}",
sortField: "size"
}
},
name: {
selector: "#title"
},
description: {
selector: "#bbcode-description"
},
imdb: {
selector: "#autoimdb"
},
tmdb: {
selector: "#autotmdb"
},
mal: {
selector: "#automal"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
anonymous: {
selector: '.form__group input[type="checkbox"][name="anonymous"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "1",
tv: "2",
tvPack: "2"
}
},
videoType: {
selector: "#autotype",
map: {
uhdbluray: "1",
bluray: "1",
remux: "2",
encode: "3",
web: "4",
hdtv: "6",
dvd: "1",
dvdrip: "3",
other: "7"
}
},
resolution: {
selector: "#autores",
map: {
"4320p": "1",
"2160p": "2",
"1080p": "3",
"1080i": "4",
"720p": "5",
"576p": "6",
"480p": "8"
}
}
},
Lemon: {
url: "https://lemonhd.club",
host: "lemonhd.club",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADkUlEQVR4nI2Uf0zUdRjHnzt+CExYwQwbDLChy3TLcrVJqMtNaNRaWWBzZbMhPyLQNoKMk6PmbGVYzIYYakq1OcosS+qPmq11gKKAguF5Id1xAgGCVhr6/X4/r3Z3IMc8imf77vnj+Xxfn/fzfd7PV+R/gvrMIMAUsIanJgFr08K8WcRM16MpnFuayZnkZ3E8ns4vMZE+qNU8I6jnoDefT8+i9/UO+jYprlfD2EHFYBG4S/uUY00ZVgn2dPCf0Fuw7vVvcX0nuLIULYkGjnwN13aN5rsNHGkG/5SDs/AYlRLuey8AdKJNZU/dyNguGP1Goz1Vwxav+K0EXDugeQE0JRn0770BDdCd9rG/ED9lvhv4XqIZtPTiWA2tqQajP8PpZWDPA+e70BgPg4fBWanU6WSd0QqwL1weoNXxITjTsxgpRZ1M1GlKhrMZMPAZ9FRAz5vQ+z5ctEDTPajGOJ2hbHC/tCfQtwv2ZK0np4qrZdC+QqNjDbStAns+/P0rXLvgU9m2EjqeRrWv0hnIhksFP94GrGp4bJYX7MrfCT/B0Fcaw8dg6GsY+hL0v0AZcPk7X8vDDajBIzqGDVxFU4GZmeJtV0TCWhozDjG8CaN5ns7JxXDiPujbD/0HYPALH+zUQ3BiIao5Wcf1JDg3+gGt4p1OyFrJkXVyednWCOivUMap+dDyIAwfha4NcD4beqzQuRaGv4XW5dAUq3G1FNxZFh9rHJZUFmFZuXsOD1fGGHOLzZxtfQ7chejuKnAUg20udL8GrkqwxcKFQuj/xMDxFAxs/pPGqORJhRtkffirQSx9504ta3+8nvJBLI98ZGJ0YAf0vc1NWyR6Y6LCXqT4fbuiaZ6BLUqjd6vBjUPQlpAz6eEX5Q7JFWdMcSiLtkVpK96bo4JKBKkR0urDudaTDQNWxbkUhXsL/LELupYoRgqhN8/gzP0FU02dK0mmXLliKhASyiNUdEmoHlcTrtKPxvJAfQwL6kJU+Q+LDLt9nYb7jREuWa4o18suLj6/j875S/y3azJyJEHy5JmgFyRDtogldJ+ZuIPhavWRu7RZtWZNDgiRNbIZq5g7ayWa4xLmt13m2/w3PmmvqaVW8kM/NRNXF3bz3sORzK4LxlQt2wJt1fQwxCSF4jW17JZXgj83EVJrGpNqOS57JHXCDZ5dn3gCg6aG79CHMluq5YmQall8q1LvNf3M/8zThkeJDzbj+Bc9TIk5RyzZEgAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: "#torrenttable>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: 'textarea[name="descr"]'
},
imdb: {
selector: 'input[name="imdb"]'
},
douban: {
selector: 'input[name="douban"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
category: {
selector: 'select[name="type"]',
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "406",
sport: "407",
cartoon: "405",
variety: "403",
music: "411"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
x264: "1",
hevc: "3",
x265: "3",
h265: "3",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "100",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "8",
ac3: "6",
dd: "6",
"dd+": "7",
flac: "10",
dts: "5",
truehd: "2",
lpcm: "9",
dtshdma: "3",
atmos: "1",
dtsx: "4",
ape: "12",
wav: "11",
mp3: "100",
m4a: "100",
other: "100"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "3",
bluray: "1",
remux: "12",
encode: "13",
web: "10",
hdtv: "11",
dvd: "2",
dvdrip: "13",
other: '5"'
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"4320p": "6",
"2160p": "5",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "100",
"480p": "4"
}
},
area: {
selector: 'select[name="team_sel"]',
map: {
CN: "3",
US: "1",
EU: "1",
HK: "2",
TW: "2",
JP: "4",
KR: "4",
IN: "5",
OT: "10"
}
},
tags: {
chinese_audio: 'input[name="tag_gy"]',
diy: 'input[name="tag_diy"]',
cantonese_audio: 'input[name="tag_yy"]',
chinese_subtitle: 'input[name="tag_zz"]',
hdr: 'input[name="tag_hdr"]',
dolby_vision: 'input[name="tag_dv"]'
}
},
MDU: {
url: "https://monikadesign.uk",
host: "monikadesign.uk",
siteType: "UNIT3D-Legacy",
icon: "data:image/png;base64,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",
asSource: true,
asTarget: true,
uploadPath: "/upload/1",
needDoubanInfo: true,
seedDomSelector: "#meta-info+.meta-general>.panel:first",
torrentDownloadLinkSelector: 'a[href*="/download/torrent/"]',
search: {
path: "/torrents",
replaceKey: [
"tt",
""
],
params: {
name: "{name}",
imdbId: "{imdb}",
sortField: "size"
}
},
name: {
selector: "#title"
},
subtitle: {
selector: 'input[name="subhead"]'
},
description: {
selector: "#bbcode-description"
},
imdb: {
selector: "#autoimdb"
},
tmdb: {
selector: "#autotmdb"
},
mal: {
selector: "#automal"
},
bgm: {
selector: "#bgm"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
bdinfo: {
selector: 'textarea[name="bdinfo"]'
},
anonymous: {
selector: '.form__group input[type="checkbox"][name="anonymous"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#autocat",
map: {
movie: "1",
tv: "2",
tvPack: "2"
}
},
videoType: {
selector: "#autotype",
map: {
uhdbluray: "1",
bluray: "1",
remux: "2",
encode: "3",
web: "4",
hdtv: "",
dvd: "",
dvdrip: "",
other: ""
}
},
resolution: {
selector: "#autores",
map: {
"4320p": "1",
"2160p": "2",
"1080p": "3",
"1080i": "4",
"720p": "5",
"576p": "6",
"480p": "8"
}
}
},
MTV: {
url: "https://www.morethantv.me",
host: "morethantv.me",
siteType: "gazelle",
asSource: true,
asTarget: true,
needDoubanInfo: true,
uploadPath: "/upload.php",
search: {
path: "/torrents/browse",
params: {
searchtext: "{imdb}",
title: "{name}"
}
},
icon: "data:image/png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAABMLAAATCwAAAAAAAAAAAAAiHaEEIh2hYCIdoaEiHaGaIh2hmCIdoZgiHaGYIh2hmCIdoZgiHaGYIh2hlyIdoZUiHaHAIh2htiIdoUEAAAAAIh2hJyIdoW0iHaFsIh2hbCIdoWsiHaFrIh2hayIdoWsiHaFrIh2hayIdoWoiHaFbIh2hsyIdof8iHaH7Ih2hQSIdoQciHaEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiHaG8Ih2h/yIdoZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIh2hoSIdof8iHaGeAAAAAAAAAAAAAAAAIh2hIiIdoZkiHaGZIh2hIiIdoSIiHaGZIh2hiAAAAAAAAAAAAAAAACIdoaEiHaH/Ih2hngAAAAAAAAAAAAAAACIdoaoiHaH/Ih2h/yIdoUQiHaF3Ih2h/yIdof8iHaFEAAAAAAAAAAAiHaGiIh2h/yIdoZ4AAAAAAAAAAAAAAAAiHaG7Ih2h/yIdoREAAAAAIh2h7iIdof8iHaH/Ih2hqgAAAAAAAAAAIh2hoiIdof8iHaGeAAAAAAAAAAAAAAAAIh2huyIdof8AAAAAIh2hVSIdof8iHaGZIh2hzCIdof8iHaERAAAAACIdoaEiHaH/Ih2hngAAAAAAAAAAIh2hZiIdod0iHaH/Ih2hmSIdobsiHaH/Ih2hVSIdoXciHaH/Ih2hdwAAAAAiHaGhIh2h/yIdoZ4AAAAAAAAAACIdoZkiHaH/Ih2h/yIdof8iHaH/Ih2h7gAAAAAiHaEzIh2h/yIdobsAAAAAIh2hoSIdof8iHaGeAAAAAAAAAAAAAAAAIh2huyIdof8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIdoaEiHaH/Ih2hngAAAAAAAAAAAAAAACIdobsiHaH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiHaGhIh2h/yIdoZ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIh2hoSIdof8iHaGeIh2hCyIdoQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIdocUiHaH/Ih2hlSIdoSMiHaFwIh2hfSIdoXEiHaF3Ih2heiIdoXkiHaF5Ih2heSIdoXoiHaFzIh2hYiIdocIiHaH/Ih2h5yIdoS4AAAAAIh2hLyIdoXoiHaGMIh2hcyIdoXMiHaFzIh2hcyIdoXMiHaFyIh2heSIdoY0iHaFsIh2hSSIdoQoAAAAAAAEgNgAAb2Q/+CA1//hTdOA4cGngGCA54hhHZeQIaW7ACG50wIgAUOf4Q0Xn+E9S//hFVj/4PTYAAFJPgAFTUw==",
seedDomSelector: "#descbox",
torrentDownloadLinkSelector: 'a[href*="/torrents.php"][title="Download Torrent"]',
name: {
selector: 'input[name="title"][class="long"]'
},
description: {
selector: "#desc"
},
anonymous: {
selector: 'input[name="anonymous"][value="1"]'
},
torrent: {
selector: "#file"
},
category: {
selector: "#category",
map: {
movie: "1",
tv: "5",
tvPack: "5",
documentary: "1",
concert: "1"
}
}
},
MTeam: {
url: "https://kp.m-team.cc",
host: "m-team.cc",
siteType: "MTeam",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABdFBMVEUAAAACAgCCajIDAgEHBgImHw5XSCFcSyNTRCAeGAtpVihSQx9yXSxaSSJxXStZSSKxkUR9ZzCafjvNqE+TeDihhD6niUAdFwsAAAAGBQJ3Yi46MBYAAAAHBQJqVyhmVCcAAAAAAAA1LBSGbjMAAAAgGwx1YC0AAAAAAABENxqNdDYAAAAnIA9NPx0IBwMzKROmiUBSQx8IBgMaFQqCajLOqU86MBa9m0lEOBqSeDhyXStsWSlVRSAuJhJrWClxXCtmVCcjHQ1kUiZvWyoqIxBVRiByXixmVCckHg7rwFruw1zvxFzjulf0yV72yl/uw1v0yF7tw1v1yV74zGD3y1/3yl/1yV/4y1/5zGDxxl3lvFjku1jwxVzIpE3qwFrWsFL5zWDCn0vft1bHpE3MqE/Wr1LvxVz4zF/ctVXet1ZKPBzas1Tyx11ZSSK4l0f6zWDdtlVJPBzYsVNYSCK2lUbetlVIOxvXsFNXSCG1lEXpv1r///+72WvcAAAASXRSTlMAAAAAAKvo6uaQ+OL75/vn++v2/vX5+ogrXOazQ1/e2RsBoO85geUyDrfyRI3Hb6f5y2GA7P79/vz9+/nkwfn7+e35++73+/ejS5QV5gAAAAFiS0dEe0/StfwAAAAHdElNRQflBAoGJSzOxqaDAAAA40lEQVQY02NgZWNHAxycDFyeXqjA24ebgcfXDw348zLwBaALBvKTJhjkFxwSHBoU5hceEREaBFMZKSAoFBXq5ycsIhodAhUMFxOXkJSKCY6VlpGViwuFCEbKKzAoKsUnKKswMqkmRkAEA9TUmTU0kxK0tFkUdZKhgiEpunr6Bn4hqYZGxiZpMNvTTc3M/fyCQjIsLCPh7gzJzMoOCfLzy8nNy4c7KaSgsCgE6OzI4pIIP9IErUCCpWiC1pEBAUEZZeV+AQEB3hWVIQG+VTYMtnZ89nwOjk5W9vZ8zi6ubvZ87h4AngBo3AG4MQYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDY6Mzc6NDQrMDA6MDDepEzfAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA2OjM3OjQ0KzAwOjAwr/n0YwAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/upload",
seedDomSelector: ".detail-view .ant-descriptions-view>table>tbody .ant-descriptions-row:nth-child(3)",
search: {
path: "/browse",
replaceKey: [
"tt",
"https://www.imdb.com/title/tt"
],
params: {
keyword: "{imdb}",
sort: "size%3Adescend"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: "#smallDescr"
},
description: {
selector: "#descr"
},
mediaInfo: {
selector: "#mediainfo"
},
imdb: {
selector: "#imdb"
},
douban: {
selector: "#douban"
},
tags: {
diy: 'input[value="diy"]',
chinese_subtitle: 'input[value="sub"]',
chinese_audio: 'input[value="dub"]'
},
torrent: {
selector: "#torrent-input"
},
category: {
selector: "#category",
map: {
movie: [
"401",
"419",
"420",
"421",
"439"
],
tv: [
"403",
"402",
"435",
"438"
],
tvPack: [
"403",
"402",
"435",
"438"
],
documentary: "404",
concert: "406",
sport: "407",
music: "434",
cartoon: "405",
app: "422",
ebook: "427",
magazine: "427",
audioBook: "427"
}
},
videoCodec: {
selector: "#videoCodec",
map: {
h264: "1",
hevc: "16",
h265: "16",
x264: "1",
x265: "16",
mpeg2: "4",
mpeg4: "15",
vc1: "2",
xvid: "3",
av1: "19"
}
},
audioCodec: {
selector: "#audioCodec",
map: {
aac: "6",
ac3: "8",
dd: "8",
"dd+": "8",
flac: "1",
dts: "3",
truehd: "9",
lpcm: "7",
dtshdma: "11",
atmos: "10",
dtsx: "3",
ape: "2",
wav: "7",
other: "7",
mp3: "4"
}
},
source: {
selector: "#source",
map: {
uhdbluray: "1",
bluray: "1",
hdtv: "4",
dvd: "3",
web: "8",
vhs: "6",
hddvd: "6"
}
},
videoType: {
selector: "#medium",
map: {
uhdbluray: [
"1",
"421",
"438"
],
bluray: [
"1",
"421",
"438"
],
remux: [
"3",
"439"
],
encode: [
"7",
"401",
"419",
"403",
"402"
],
web: [
"10",
"419",
"402"
],
hdtv: [
"5",
"419",
"402"
],
dvd: [
"6",
"420",
"435"
],
dvdrip: [
"7",
"401",
"403"
],
other: ""
}
},
resolution: {
selector: "#standard",
map: {
"2160p": [
"6",
"419",
"402"
],
"1080p": [
"1",
"419",
"402"
],
"1080i": [
"2",
"419",
"402"
],
"720p": [
"3",
"419",
"402"
],
"576p": [
"5",
"401",
"403"
],
"480p": [
"5",
"401",
"403"
]
}
},
area: {
selector: "#processing",
map: {
CN: "1",
US: "2",
EU: "2",
HK: "3",
TW: "3",
JP: "4",
KR: "5",
OT: "6"
}
},
team: {
selector: "#team",
map: {
mteam: "9",
tnp: "23",
kishd: "7",
bmdru: "6",
onehd: "18",
cnhk: "19",
stbox: "20",
r2hd: "21",
pack: "8",
geek: "24",
qhstudio: "34"
}
}
},
NYPT: {
url: "https://nanyangpt.com",
host: "nanyangpt.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB71BMVEVTu8ZWu8ZRusVkwctrxM2R09rW7vFTu8ZSusW44ue04eVTu8ZhwMpTu8Z5ydKFzdWs3OLR7O9Tu8bD5enN6u5lwstTu8ZTu8ZiwMpWvMZSusVTu8ZTu8ZTu8bD5up5ydJQucVSu8VSusVVu8aM0NhrxM2W1Nuf2N5Uu8Zpw83S7O98ytO54ueP0dl7ytPT7e93yNFRusVTu8ZiwMpwxs/V7fCO0dmg2d9gwMqz4OWv3uPB5eldv8llwcu64+e34eaBzNTA5emo3OFWvMdQusWw3+Sn2+HO6+6i2d9+y9PG5+tlwst7ytLT7fBvxs93ydHX7/GS09qs3eOFztbh8vTZ7/Ffv8lSusZ/zNTR7O9sxM6T09rc8PKJz9eu3uOp3OLK6e2a1tyAzNRnwsxXvMed193a7/Lf8fNcvsjE5urK6exVvMaHztZWvMa74+eY1dxSu8ZowsxYvMdjwctavchzx9BPucRQucRZvcdtxM6N0diQ0tl6ytKR09qU1NuV1Ntqw82Iz9fQ6+5Zvcie2N7H5+u44uZyx9Btxc6o2+FYvcd4ydHX7vG74+ij2d98y9PW7vFhwMrF5+ub193E5+qd197E5+vM6u3L6u1gv8nT7O90x9C04eW14eWa1t1vxc9uxc7P6+5gv8qy4OT///+e7qWjAAAAHnRSTlMAAEvO+oAXN9f3gYr55/3CaPzNFKD+10sUaMP+6DbE9n4oAAAAAWJLR0SkWb56uQAAAAd0SU1FB+UECgcwCiq8r10AAAFtSURBVBjTJdBlV0JBEAbgtbs7uc5VuZjMKhY2KIqJiV3X7sJusbs7/6gDzqfd58zOeWcZc3SKVQhxIMYnJColAHB2cWVu7qqkZLqIKalp6WrkkOHhybwwU5OVnYOYqxTztPlCQWGRN/NBtaa4pFSnLysXVIaKSmNKFTKO1TW1dfUmbGhAbGxqrmjBVkJzWzt0dHZ19yC29PZx4Jyw3zCA8uDQsBJhZNSE3I7msQyA8aykCYTJqWk7zsBs/BzQo/kFCtm/CDOEdBIselLLfy1RK1ueWFldq1tAcX1jc4vK1I6cbRt2lLG72sq9faPVajVqD9YJD2vMIB8da9SSLJ8sy7pxCTg7PTMjoHx+AYCXW7YfoZmKqzTBIlzf3ALXr91RDlskX43iaPP+4TEBOTY+Pf+j38ur4u39Q0VJsdqwjXb0D/gEUQKkFvj6XrRhIAsKDqHhtj04/Px+EoaGMYfwiMgobi+QrnUQ7RXD/gCppmlft2mUAgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNzo0ODoxMCswMDowMGet8SMAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDc6NDg6MTArMDA6MDAW8EmfAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
}
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="dburl"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "406",
concert: "407",
sport: "405",
cartoon: "403",
variety: "404"
}
}
},
OpenSub: {
url: "https://www.opensubtitles.org",
host: "opensubtitles.org",
siteType: "subtitles",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAAAAAD/aE28AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QADzoyPqMAAAAHdElNRQflBxcLOzjtVivgAAAARElEQVQI12NggAH+D//BCMHAAjj/L2B6/w/IqGRYzuMgC2RcYpDldQBJPWSQY/l/GSw1g4PBF8jg+r+A5/1XbMbgtgsAjDUiHY8LnyYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDctMjNUMTE6NTk6NTUrMDA6MDB7fTP0AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA3LTIzVDExOjU5OjU1KzAwOjAwCiCLSAAAAABJRU5ErkJggg==",
asSource: false,
asTarget: false,
search: {
path: "/en/search/sublanguageid-all/imdbid-{name}"
}
},
Orpheus: {
url: "https://orpheus.network",
host: "orpheus.network",
siteType: "gazelle",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEiklEQVR4nI2UbUhbVxjHr93Y6MdROhDcJzW5MfdeE6/Re5leJSYkYTeSqPElxiiKJjfxbSjXi0i00RhqR1EWNEaR+JJ2idmsqXOz0+lstZ1Yna2tq1q1Gxu1K4V1bF8dR1SiW6EPPJzz4Zwf53nO8/9D0OmIgCDoHPSW0dzcfO7ozv/GCYwgiPN8Pj8xMjKyUCAQlBoMhmyPx6OYnJzMmJqa+nhmZiY6EAi8B84eHBxEgDwLOwRFRUWdFwgEZh6Pt8Dn8/dpmt602+3fe73eG36/PxgIBIKjo6OjwWBwxO/3fzY8PPxJOPgUDEXRqLi4uAkYhv9GUXS/qqpqdmho6JrX6/X19vYG+vr6/AMDA9fA6na7g93d3aHe3t5vXC7X5StXrnx4CioSiS4iCDKPIMhrFEV3LBbLXGdn543W1tYJu90+63A4Jurr66dNJtNybW3ttN1un+zo6Ag5HI5Qe3v7nMPh6OM47oOTejEM88THx/8pFAp3tFrtalNT0636+voZlmUXOY7raG1tjcYwDEEQ5DqGYS9JktzU6/VLHMdNsyw7xbLsEsuylw5hOI6n4Dj+e0JCwg5Jktsmk2mBYZh5hmFWGIZpOdPwiISEhM9FItFLDMN2MzMz16xW67zZbL5tNpuXysvLJVBycvJVgiD2JRLJlkKheGQ0Gu/p9fqfDAbDhF6vPyxDp9O9AxLsJRLJBZIk7xAE8UtSUtJ2dnb2alFR0d3CwsLHBoPBDlEUtUBR1E5qauoTmqYfZmVlLWs0mqdarfbTY9jx89LS0t4FK0VRDRRFPU9JSflZLpc/zsrKWtVoNOtarXYakslkj2Qy2QZI8EKFQrGmVCp3VSoVfRZ4vJdKpWq5XP5MJpOtA6BSqVw/yocQTdNrNE0/ACmVSjcoitpIT0//laKozDcB1Wo1TdP0tlqtXlWpVOtpaWlPQKanp29Aubm5t3Q63YO8vLzljIyMDYIgNkmSfEGSJBdeZjgwJyenVqfTbeXl5S2BhyQnJ28TBLFHEMRdyGg0XiopKVkvLS1d0Ol0K2KxeBfH8d9wHF+EYfjC2U8BH1VSUnKzuLh4paysbBG0SSwWP01MTPwDx/FOiGEYSWVl5T2LxTJfXV39A2iBUCh8hqLoKwzDXOHiByNktVpbLBbLfavVOscwzB2JRLKDouhefHz8cxRFUw8PNjQ0tHAc9yPHcd82NjZ+V1BQsATGSCgUvoJh+AsYhhEw3BzHXeY4boFl2WmbzTal0WhWYRjeQ1H0NYIgfSfTCmQD5ON0OoGMxoGsgLxqampmKioq7tfV1U07nc6bbW1thzIEsjSbzXNxcXG7MAz/JRAIbsfExFw8KQOsQOBA6N3d3VNA+D09PcFjQ/B4PAG32z0K9sAwLBbLrFAofMHj8f6BYfjr6Ojoj8KN5gQKrGhwcJD2+XxXR0ZGrvt8vi99Pt9XIPv7+0M2m21OpVJt8Xi8/djYWGBxJmB5p2DhDT8Gd3V1vT8+Ph4TCoVSxsbGMlwulzI/Pz+Hz+eXAtMF5gtMOAz0Ztc+svW3jf/A/gVj2wYRcKPv6wAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
params: {
searchstr: "{name}"
}
},
torrent: {
selector: "#file"
}
},
OurBits: {
url: "https://ourbits.club",
host: "ourbits.club",
siteType: "NexusPHP",
icon: "data:image/png;base64,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",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: "#torrenttable>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
poster: 'input[name="picture"]',
imdb: {
selector: 'input[name="url"][type="text"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
chinese_audio: "#tagGY",
diy: "#tagDIY",
cantonese_audio: "#tag_yy",
chinese_subtitle: "#tagZZ",
hdr: "#tagHDR10",
hdr10_plus: "#tagHDR10P",
dolby_vision: "#tagDB"
},
category: {
selector: 'select[name="type"]',
map: {
movie: "401",
"3d": "402",
tv: "412",
tvPack: "405",
documentary: "410",
concert: "419",
sport: "415",
cartoon: "411",
variety: "413",
music: "416"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "12",
hevc: "14",
x264: "12",
x265: "14",
h265: "14",
mpeg2: "15",
mpeg4: "12",
vc1: "16",
xvid: "17",
dvd: "18"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "7",
ac3: "6",
dd: "6",
"dd+": "6",
flac: "13",
dts: "4",
truehd: "2",
lpcm: "5",
dtshdma: "1",
atmos: "14",
dtsx: "21"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "12",
bluray: "1",
remux: "4",
encode: "7",
web: "9",
hdtv: "5",
dvd: "2",
dvdrip: "2",
other: "0"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "5",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
area: {
selector: 'select[name="processing_sel"]',
map: {
CN: "1",
US: "2",
EU: "2",
HK: "3",
TW: "3",
JP: "4",
KR: "5",
OT: "6"
}
}
},
PTHome: {
url: "https://www.pthome.net",
host: "pthome.net",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABR1BMVEUAAAD/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/sxz/shv/shv/sxz/sxz/sxz/sxz/sxv/sxz/shv/shr/sx3/tB//vj7/zWv/2pH/4ab/zmz/vTz/2Y7/7s7/+e7//v3/////sx7/uS7/ujH/x1j/68T/8dX/1YL/03z/25P/zGj/6b7/7Mj/9OD//fn/shn/033/sxv/w07/8tj/1oX/1oT/vj//uCr/463//v7/893/14r/14j/8db/2Iv/vDn/57n/+vD///7//fv//fr/6b3/vDj/vTv/ymD/35//89z/xE//yV//6Lv/7MX/7Mf/uTD/0nj/+vH/7sz/1YH/3Zr/uC3/x1r/+e3/5bL/yV3/9N3/8NP/yWD/ujP/zm7/xFD/57j/4qr/wkn/vDf/tym6/awGAAAAGHRSTlMAAAEmcLXj+bYPYsPx/hWL7u6LEPTi+u42ThkjAAAAAWJLR0QnLQ+oIwAAAAd0SU1FB+UECgYoFFNqYFAAAAE4SURBVBjTZdFXW8IwFAbgpINKW1pGq0laFRSIC5xUxIkDFTfiwL33/7/2pMUrz+X7nDz58gUhhLAkK2pM02I9iixhJAbjuG6YCQKTMA09jrEwy06SaCilqbQFijO20xXGPN9z0hmMJD3ao8zvHxjM5ryULiHZCIXRoeF8ocizPjVkpJhgI6Nj4xOl8mSpOOVRU0GqsOmZ2blKmQbzhRyjREUuqbKFGue8skjIUn6ZEeKiXsJWVtcAeX19Y3PLp4RogEFju74DuNvc2z9gIbqE+odHx02xe9ISBsdVQslpu3xWATy/YCKyCpGod9m5ur7pcN6+FQiRIDy7q90/PD7x5xdPnIbwkt5HX1tv742Pz6/QkvBMUQgL4Lbvn/AWx4ZCouqgtIBVxZ5tRYX+L/nvO1xNc9Xud/wCUFAuZX3Re8sAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDY6NDA6MjArMDA6MDAnY2+xAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA2OjQwOjIwKzAwOjAwVj7XDQAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_id"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: "#torrent"
},
tags: {
chinese_audio: "#tag_gy",
diy: "#tag_diy",
cantonese_audio: "#tag_yy",
chinese_subtitle: "#tag_zz",
hdr: "#tag_hdr10",
hdr10_plus: "#tag_hdrm",
dolby_vision: "#tag_db"
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
concert: "408",
sport: "407",
cartoon: "405",
variety: "403"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
x264: "1",
hevc: "6",
x265: "6",
h265: "6",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "5",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "18",
dd: "18",
"dd+": "18",
flac: "1",
dts: "3",
truehd: "20",
lpcm: "21",
dtshdma: "19",
atmos: "19",
dtsx: "3"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "12",
bluray: "1",
remux: "3",
encode: "15",
web: "10",
hdtv: "5",
dvd: "2",
dvdrip: "15",
other: "11"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"4320p": "10",
"2160p": "5",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
pthome: "19",
pth: "21",
pthweb: "20",
pthtv: "22",
pthaudio: "23",
pthebook: "24",
pthmusic: "25",
other: "5"
}
}
},
PTN: {
url: "https://piratethenet.org",
host: "piratethenet.org",
siteType: "PTN",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQflBR0NCTVvZ8yaAAAB3UlEQVQozwXBT0hTcQDA8e977/c298I5Xchaf9S1ZRNLttmhltUQnSc9VAgFUWAgCzrYTYnOEZ0G0T/IiKi0Dv0jughJ64/YQB0q2imTwjmI2h/3tvden4/Ui4Tpczyt/qgkpA2wACvguFet+Zz4k65F2YuOc3L0qK8t5Si9U5GxUB+N9BzZlW7SH1vIZkSbMmIGBQobClV7RZQp5coUcMci72vahOvBlQN5DKYrZWXHhLejov/8lMumiDNmr/SOJUWRv2T5gqkOXztDAzor7ffZ4Dm96FSRghHn6NYvQxu60MUKIVoBuMTLu/UuWXy/Kvn5x3Y6pjpj8+xhkRH2s4Bg6M7SMICQcOPyqJ3zJGhimoc0YqIS6F6yoYNoxGRLRQEJCQkLExkLVBQnJYSGTHYtvxwN36KZDJcJMoediRl3ycsySnMzSfngWulQ6DQmZwmj0cIN5t+2nNL6N9PSwMeL0RyzZkEOc45aTFa5TRGVHnSuvxDC78GBTx43bz6ZbN0XqBiZb/n1k+fjKFSx7WbnYM/igJmyxq32USE5PLZGFyeSb6xXVp9x7GtdVKw/K74+vmD31SP7hcVvmRqkUB0Gmx9mu7EQKHgH+1djM9uCoGEHGrr6MvGM6zDAf9rgrjhkXWjnAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA1LTI5VDEzOjA5OjUzKzAwOjAwiaGjGgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNS0yOVQxMzowOTo1MyswMDowMPj8G6YAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",
asSource: false,
asTarget: true,
uploadPath: "/upload.php",
search: {
path: "/browse.php",
params: {
name: "{name}",
imdb: "{imdb}"
}
},
name: {
selector: "#name"
},
description: {
selector: "#descr"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
}
},
PTP: {
url: "https://passthepopcorn.me",
host: "passthepopcorn.me",
siteType: "gazelle",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABU1BMVEUAAAACAgIEBAQDAwMBAQF7e3u+vr56enoXFxecnJy6urpSUlIuLi6vr6+xsbH///+wsLAhISHg4OB2dnZCQkL8/Px6fHy8vr95ensWFhebm528vL1UVFQuLS6xr7C9vbydnJsXFxZ7e3q/v718fHsXDAoiFQ8gGQ4eHAwfHw4LCwYIDQgQGw8PGxMPHBYNHBkHDg0GCAoOFx0MEBgODxgSDxoOChIDAQGcSj7oh1zgrVng0VrU2lk6Ohc4WzB2x29auXpZv5Fc0rcpY1gXKDVYl8Vae7ZYYqhwXKxZPnYBAQKxVkj/nWv/yWf+8Wj1+WhDQxtAaTiI5oFp145n3alr89Qwc2YaLj1mr+RojtJmcsODa8hoSIkCAQOxVEf/mmn/xWX+7Wbx92ZBQho/ZzeG4X5n04tm2aVp7tAvcGQaLTxkrN9mi85kb7+AacRmR4YCAQJn073lAAAAAWJLR0QPGLoA2QAAAAd0SU1FB+UEDAMAJuVAAk0AAAC+SURBVBjTY2BgZGJkYGZiYWFmZmFhYgZzGRhZ2dg5OLm4eXh5ebi5ODnY2ViBivj4BQSF+IVFREVFhPmFBAX4+YDKxcQlJKWkZWTl5GRl5BUUlZRVgPpV1dQ1NLW0dXT19A0MjYxNTM0YGMwtLK2sbWzt7B0cnZxdXN3cPTy9GMy9fXz9/AMCg4JDQsPCIyKjomNiGczj4hMSk5JTUtPSMzKzsnNy8/IL6CiI1UnYHI/Vm1gDBHvQYQtkbNEBAFOfVLHCxSMQAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEyVDAzOjAwOjM4KzAwOjAw8nDEugAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMlQwMzowMDozOCswMDowMIMtfAYAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
needDoubanInfo: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
params: {
action: "advanced",
searchstr: "{imdb}"
}
},
sourceInfo: {
editionTags: {
HDR10: "hdr10",
"HDR10+": "hdr10_plus",
"Dolby Atmos": "dolby_atmos",
"Dolby Vision": "dolby_vision",
"10-bit": "10_bit",
"2-Disc Set": "2_disc_set",
"2D/3D Edition": "2d_3d_edition",
"2in1": "2_in_1",
"3D": "3d",
"3D Anaglyph": "3d_anaglyph",
"3D Full SBS": "3d_full_sbs",
"3D Half OU": "3d_half_ou",
"3D Half SBS": "3d_half_sbs",
"4K Remaster": "4k_remaster",
"4K Restoration": "4k_restoration",
"Director's Cut": "director_s_cut",
"Dual Audio": "dual_audio",
"English Dub": "english_dub",
"Extended Cut": "extended_edition",
"Extended Edition": "extended_edition",
Extras: "extras",
"Masters of Cinema": "masters_of_cinema",
Scene: "scene",
"The Criterion Collection": "the_criterion_collection",
"Theatrical Cut": "theatrical_cut",
Trumpable: null,
"Two-Disc Set": "two_disc_set",
Remux: "remux",
Rifftrax: "rifftrax",
Uncut: "uncut",
Unrated: "unrated",
"Warner Archive Collection": "warner_archive_collection",
"With Commentary": "with_commentary"
}
},
targetInfo: {
editionTags: {
"2_disc_set": "2-Disc Set",
"2_in_1": "2in1",
"2d_3d_edition": "2D/3D Edition",
"3d_anaglyph": "3D Anaglyph",
"3d_full_sbs": "3D Full SBS",
"3d_half_ou": "3D Half OU",
"3d_half_sbs": "3D Half SBS",
"4k_remaster": "4K Remaster",
"4k_restoration": "4K Restoration",
director_s_cut: "Director's Cut",
dual_audio: "Dual Audio",
english_dub: "English Dub",
extended_edition: "Extended Edition",
extras: "Extras",
masters_of_cinema: "Masters of Cinema",
scene: "sc",
the_criterion_collection: "The Criterion Collection",
theatrical_cut: "Theatrical Cut",
two_disc_set: "2-Disc Set",
remux: "Remux",
rifftrax: "Rifftrax",
uncut: "Uncut",
unrated: "Unrated",
warner_archive_collection: "Warner Archive Collection",
with_commentary: "With Commentary",
"10_bit": "10-bit",
dts_x: "DTS:X",
dolby_atmos: "Dolby Atmos",
dolby_vision: "Dolby Vision",
hdr10: "HDR10",
hdr10plus: "HDR10+"
}
},
description: {
selector: "#release_desc"
},
poster: "#image",
imdb: {
selector: "#imdb"
},
anonymous: {
selector: 'input[name="uplver"]'
},
mediaInfo: {
selector: "#Media_BDInfo"
},
screenshots: {
selector: "#url_vimages"
},
torrent: {
selector: "#file"
},
category: {
selector: "#categories",
map: {
movie: "Feature Film",
tv: "Miniseries",
tvPack: "Miniseries",
documentary: "Feature Film",
concert: "Live Performance"
}
},
videoCodec: {
selector: "#codec",
map: {
h264: "H.264",
hevc: "H.265",
x264: "x264",
x265: "x265",
h265: "H.265",
mpeg2: "Other",
mpeg4: "H.264",
vc1: "Other",
xvid: "XviD",
DVD5: "DVD5",
DVD9: "DVD9",
BD100: "BD100",
BD66: "BD66",
BD50: "BD50",
BD25: "BD25"
}
},
source: {
selector: "#source",
map: {
uhdbluray: "Blu-ray",
bluray: "Blu-ray",
hdtv: "HDTV",
dvd: "DVD",
web: "WEB",
vhs: "VHS",
hddvd: "HD-DVD"
}
},
resolution: {
selector: "#resolution",
map: {
"2160p": "2160p",
"1080p": "1080p",
"1080i": "1080i",
"720p": "720p",
"576p": "576p",
"480p": "480p",
NTSC: "NTSC",
PAL: "PAL",
other: "Other"
}
}
},
PTSBAO: {
url: "https://ptsbao.club",
host: "ptsbao.club",
siteType: "NexusPHP",
icon: "data:image/png;base64,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",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(7)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: "input[name='small_descr']"
},
description: {
selector: "textarea[name='descr']"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
mediaInfo: {
selector: 'textarea[name="technical_info"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
chinese_subtitle: 'input[type="checkbox"][value="6"]',
hdr10_plus: 'input[type="checkbox"][value="7"]',
chinese_audio: 'input[type="checkbox"][value="5"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
variety: "403",
documentary: "404",
cartoon: "405",
music: "414",
other: "409"
}
},
source: {
selector: 'select[name="medium_sel[1]"]',
map: {
uhdbluray: "10",
bluray: "1",
hdtv: "5",
dvd: "3",
web: "2",
vhs: "9",
hddvd: "9"
}
},
videoCodec: {
selector: 'select[name="codec_sel[1]"]',
map: {
h264: "1",
hevc: "6",
x264: "1",
x265: "6",
h265: "6",
mpeg2: "4",
mpeg4: "5",
vc1: "2",
xvid: "3",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel[1]"]',
map: {
aac: "6",
ac3: "11",
dd: "10",
"dd+": "10",
dts: "3",
truehd: "9",
lpcm: "12",
dtshdma: "8",
atmos: "8",
dtsx: "13",
flac: "1"
}
},
videoType: {
selector: 'select[name="processing_sel[1]"]',
map: {
uhdbluray: "5",
bluray: "5",
remux: "1",
encode: "2",
web: "2",
hdtv: "3",
dvd: "3",
dvdrip: "3",
other: "3"
}
},
resolution: {
selector: 'select[name="standard_sel[1]"]',
map: {
"2160p": "5",
"1080p": "1",
"1080i": "1",
"720p": "2",
"576p": "3",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
ffansbd: "8",
ops: "11",
ffansweb: "12",
ffanstv: "13",
hqc: "10",
ttg: "3",
hdc: "6",
chd: "2",
hdsky: "9",
cmct: "4",
frds: "5",
other: "7",
ffansdvd: "14",
fhdmv: "15",
enichi: "16"
}
}
},
PTZone: {
url: "https://ptzone.xyz",
host: "ptzone.xyz",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEmklEQVR4nG2VCUwUZxTHF7FJTZPaIzWlB9XWGqUBlUuFAkJopRQpkRIOTSsmgrpiSyBQjroCglS5CwoVCLAgRytYRQtoRBSKSWkTtUeksi7LXuzMzuyyu6y7OzP/ZmYDlZYvmZlv5s37fe8/7837RKLlBuAiAVbE9cAVgMsyb7i8f2r6RZ+UiWeW9ZdInM48aDm71xnNczGtug3xbYa4vR2G0gM91PWUXsPM5530QEST+hVnDIu+/GQp6KX0h68H1JEfRjXrM/d1UBf2d9MPDvaZrGkDDMSDHI4MAWlDduboLSCqzXKM9xECWhi7GnRukY3k/l+nbQNzVnbyL51dd09tZycIIHsEEA/YIe434egVAzcsszEKg4N5oHXYH9GAnHLcB/DCYpThDSr3hAvG0dQhoORnhr02BXAAOP4EML1/WpmEbopLuWTkUn40onjEhDtyO29jVRagfMQ0fe0u+fy/wDriUFKPxZTcZ0ZsB8UldRtgZzj8McsIYKuDQ86gCQldNJIvGhEtpZHWb+SBnPSeHTsbCENUDbHRmQysEIWUK9bHtOhliT3ziGun2M+6DUJodeMW3JyyCfNRuQ2x7TSSOmnsaaOQ0T8HGwOuatTM7W6dQ1S9Pp7nhUiGVwrgj77TDcd12RDdTDLxUkqA1IyacfB7Gk8cTu1lt8yIOK/H7mYSR/t4FUDlbZMjqp1BZD1RsiQxYd8SFTFSKz5uJNhPW/QCoH7cjMAaHdonLMK9gmaQ0KZH+DkC4ou08FnKhueYiJYniKgnryyps+ByIimy0Yxd52bZT84TTsm3TQiqnsWeRgJTpEN41v6LBX5lWhzqoYQIv7lhZEPPUviglpjyK1G+vAjcUazaGFqhtYdV6xBZOytorLo5h6ByLQLLtPjqEi0AHSyQLCWR2EyCYYHinwyCPbyGwI4zar9FoE/21OqA09rfgyv1CK/SsLxz+XUjfEvUCKvQwv+UGlfvzwvQkUkr9jYRsDEcCq/S8C1RsWE1Rmwr1R586k8RifxPqrsDys3YeVoj6Ds9YMDmEyoElWrgU6hCTK0WlEVYC+3jZhjmWRRcpuElUTJBFUb4FakbRE+n2luiyvUtNiLwpJLhnUr7aXjkzMC/QIlthUpsylGgctBZUnzmecl5P1D8c2bHKRpbjyvGRU+n2jNfGe2ZOwPvPIVQtAW9FNZnyLE1T4EtuQp45Sjgkz+D3x4/wcLI6iTxboac9T6uxeavZ9WbszVrhVYlJKZI/daawzIiuEgjAIt69Vh94BE8MqeFwzNLzr0plrH7ajUMw4LX7kiXUliXrmG3nLDAI3tmbHu6YtWS8mkaNj6irc6E2hwcc3dyngnIm2bXimXYkD6DTVk6vPEFBemYTaiEnC6SWpMqu/xe9vQJ9wz5uiX9kL+23pnvaxkDKvuN7NkbNrSOMvDNJeEuVuHtNBm5/tjj26+mTlVHlKiPAChQ0tj6n164QHQCRSH3fVcmTipWJU0aXBMmH4hiH3a9dliW+U7a36HuX8rdfBqW69BwEcXBdZGxxMD3xpNyt+35Ck/JMJ79v7Ow+sLWsHK57eEfAo6UC1R23N8AAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(6)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
mediaInfo: {
selector: 'textarea[name="technical_info"]'
},
description: {
selector: 'textarea[name="descr"]'
},
imdb: {
selector: 'input[name="pt_gen"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
hdr: 'input[name="tags[4][]"]'
},
category: {
selector: 'select[name="type"]',
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
cartoon: "405",
sport: "407",
concert: "406",
music: "406",
variety: "403"
}
},
videoCodec: {
selector: 'select[name="codec_sel[4]"]',
map: {
h264: "1",
hevc: "6",
h265: "6",
x264: "1",
x265: "6",
mpeg2: "3",
mpeg4: "4",
vc1: "2",
xvid: "5"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel[4]"]',
map: {
aac: "6",
ac3: "8",
dd: "11",
"dd+": "12",
flac: "1",
dts: "9",
truehd: "14",
lpcm: "1",
dtshdma: "10",
atmos: "10",
dtsx: "9",
ape: "2",
mp3: "4",
ogg: "5",
wav: "15"
}
},
videoType: {
selector: 'select[name="medium_sel[4]"]',
map: {
uhdbluray: "10",
bluray: "1",
hddvd: "2",
remux: "3",
encode: "7",
web: "4",
hdtv: "5",
dvd: "6",
dvdrip: "6",
cd: "8"
}
},
resolution: {
selector: 'select[name="standard_sel[4]"]',
map: {
"4320p": "5",
"2160p": "6",
"1080p": "1",
"1080i": "2",
"720p": "3",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel[4]"]',
map: {
hds: "1",
chd: "2",
mysilu: "3",
wiki: "4",
other: "5"
}
}
},
"PTer-offer": {
url: "https://pterclub.com",
host: "pterclub.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACu1BMVEUAAAD////Cl3f/sZv/88f/NgD/z6j/VAD/AAD/++v/NwCGe33/rGgAAAX/6dgABBr/zqgTL1vxCACLblsAAAwAEzYAAgiZgmoCAwX9AAAFBAb7q3IEAAADAgL217wFAAD//////////////f///f////9IPkDRiEj/mTr/lTr/lTr9mz3InGrZlFv9tXP/3r0AAAAkGh27YRL7gBBsUTKpVBb/exP/j0D/xJIAAAE5KiX1ewT5eQLpfhxhSzbOagv/lU3/7dkAAAArIBqFUSWNUh9+TCOtXxv5fgy0aimFTh6OUh6NWzJROCbneA3/gCf/yp0EAAABAAIAABQAABUNDB2YVhz7hiDCpYoAAAAAABIAAAsTFBmlXRv/fBX/vYQbGB+4ZRb/iCT/+eUBDx6PVSH/fhz/wowAAAAwJyP0jjnTuKXvx6kABUtfOybTcBP/hTD/1K0AAAJONCH8fwaPXCikcUz/unz/rnPpjT/dcg7/cQn/lUf///8AABVqQSL5gQ1iSCy1XhL/eAr+cgr+dgf+fSb/zKQAChyFTyHndw9bQi/TbwvrdgrrfC77rXUUFhumXBrFbhBhQCy8bByuYRWxYhiuYBunXh+OXDSai38AAAAsIB+kXQ9dRzqogmIjHRstKCgOFyoAAyAAAAk9KyPShTM1O0gAAAtWOSP+nksAAwxxRyPtcxv7pmwDAgNALB5zRyZnPh2WYzz82LoEAAABAAEAAAUAAAP/dwD/dAH/cwH/cgDTdRX2fAT+eAD/eAD+dwD4eAP0ewX2egT/eQD/bwb9ewH/egD/dAD/fQD/dgD+fgH/dQD/fAD/cwD+fgPUcRP+cwP/ewDpdgr+ewLzeQX+fAD+eQD9bwP7fQT/fwD/fQH+fQT0ewb/fgHBZxP/fgLYcRD/egfufAv+dgznew3ndwb///9+450wAAAAuXRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkNDA4HASCOq6ipq2FhZxcCh/r8yuT4vjQVtf7+99b3tRYnq8fCyvH70sLBpNv981gIHBsXafLnTRYYH6n1/HOC/NEhafX3Xw+pui4IB5D+zSYdxv7PwHBdj+36egIw3P3c8Pf2/LIaUO773Pfrlx9y+/Tj9e3hyJdGBwOR87dgNikaBw+xuyEkz4ZA6PVdQ6WmqX0YBw0LDAI5k3AAAAABYktHRAH/Ai3eAAAAB3RJTUUH5QQKBzAvYbh7GgAAAUJJREFUGNNjYMAGGBkVFJWgQFlFlZERJMikpq6hqQUGmto6unr6zCwMDAaGRjt37dq9e/euXXuMTUzNzC1YGRksrfbus7bZf+DgocNHbO3sjx5zcGRjcHJ2cXVzP37Uw9PL28fX78RJ/wB2hsCg4JDQsFOnwyMio6JjYs+cjYvnANllkJB47nxSMicDQ0rqhbNp6VwgwYzMi+cuZWXncOfm5V8+X1DIAxTjLSq+cqKktKy8orLq6oHqmlo+oCB/Xf21Aw2NTc0trddv3GxrFwDpFuzovHW0q7vn9p2793r7+oXAfmKYMPH+uUmTp0ydNn3GzFnCYCGR2XMenHs4d978BQsXLRaFhojYkqWPTjxetlycESmYJFasfHLi6SpJZDEGqdVrnj1fu04aWUxGdv2GjZs2b5FDEZTfum37jtkMBAEAezt4kKiqYGgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDc6NDg6NDYrMDA6MDBMncp9AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA3OjQ4OjQ2KzAwOjAwPcBywQAAAABJRU5ErkJggg==",
asTarget: true,
uploadPath: "/offers.php?add_offer=1"
},
PTer: {
url: "https://pterclub.com",
host: "pterclub.com",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACu1BMVEUAAAD////Cl3f/sZv/88f/NgD/z6j/VAD/AAD/++v/NwCGe33/rGgAAAX/6dgABBr/zqgTL1vxCACLblsAAAwAEzYAAgiZgmoCAwX9AAAFBAb7q3IEAAADAgL217wFAAD//////////////f///f////9IPkDRiEj/mTr/lTr/lTr9mz3InGrZlFv9tXP/3r0AAAAkGh27YRL7gBBsUTKpVBb/exP/j0D/xJIAAAE5KiX1ewT5eQLpfhxhSzbOagv/lU3/7dkAAAArIBqFUSWNUh9+TCOtXxv5fgy0aimFTh6OUh6NWzJROCbneA3/gCf/yp0EAAABAAIAABQAABUNDB2YVhz7hiDCpYoAAAAAABIAAAsTFBmlXRv/fBX/vYQbGB+4ZRb/iCT/+eUBDx6PVSH/fhz/wowAAAAwJyP0jjnTuKXvx6kABUtfOybTcBP/hTD/1K0AAAJONCH8fwaPXCikcUz/unz/rnPpjT/dcg7/cQn/lUf///8AABVqQSL5gQ1iSCy1XhL/eAr+cgr+dgf+fSb/zKQAChyFTyHndw9bQi/TbwvrdgrrfC77rXUUFhumXBrFbhBhQCy8bByuYRWxYhiuYBunXh+OXDSai38AAAAsIB+kXQ9dRzqogmIjHRstKCgOFyoAAyAAAAk9KyPShTM1O0gAAAtWOSP+nksAAwxxRyPtcxv7pmwDAgNALB5zRyZnPh2WYzz82LoEAAABAAEAAAUAAAP/dwD/dAH/cwH/cgDTdRX2fAT+eAD/eAD+dwD4eAP0ewX2egT/eQD/bwb9ewH/egD/dAD/fQD/dgD+fgH/dQD/fAD/cwD+fgPUcRP+cwP/ewDpdgr+ewLzeQX+fAD+eQD9bwP7fQT/fwD/fQH+fQT0ewb/fgHBZxP/fgLYcRD/egfufAv+dgznew3ndwb///9+450wAAAAuXRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkNDA4HASCOq6ipq2FhZxcCh/r8yuT4vjQVtf7+99b3tRYnq8fCyvH70sLBpNv981gIHBsXafLnTRYYH6n1/HOC/NEhafX3Xw+pui4IB5D+zSYdxv7PwHBdj+36egIw3P3c8Pf2/LIaUO773Pfrlx9y+/Tj9e3hyJdGBwOR87dgNikaBw+xuyEkz4ZA6PVdQ6WmqX0YBw0LDAI5k3AAAAABYktHRAH/Ai3eAAAAB3RJTUUH5QQKBzAvYbh7GgAAAUJJREFUGNNjYMAGGBkVFJWgQFlFlZERJMikpq6hqQUGmto6unr6zCwMDAaGRjt37dq9e/euXXuMTUzNzC1YGRksrfbus7bZf+DgocNHbO3sjx5zcGRjcHJ2cXVzP37Uw9PL28fX78RJ/wB2hsCg4JDQsFOnwyMio6JjYs+cjYvnANllkJB47nxSMicDQ0rqhbNp6VwgwYzMi+cuZWXncOfm5V8+X1DIAxTjLSq+cqKktKy8orLq6oHqmlo+oCB/Xf21Aw2NTc0trddv3GxrFwDpFuzovHW0q7vn9p2793r7+oXAfmKYMPH+uUmTp0ydNn3GzFnCYCGR2XMenHs4d978BQsXLRaFhojYkqWPTjxetlycESmYJFasfHLi6SpJZDEGqdVrnj1fu04aWUxGdv2GjZs2b5FDEZTfum37jtkMBAEAezt4kKiqYGgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDc6NDg6NDYrMDA6MDBMncp9AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA3OjQ4OjQ2KzAwOjAwPcBywQAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: "#torrenttable>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr,#body"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
chinese_audio: "#guoyu",
diy: "#diy",
cantonese_audio: "#yueyu",
chinese_subtitle: "#zhongzi"
},
category: {
selector: "#browsecat,select[name='type']",
map: {
movie: "401",
tv: "404",
tvPack: "404",
documentary: "402",
concert: "406",
sport: "407",
cartoon: "403",
variety: "405",
music: "406"
}
},
videoType: {
selector: 'select[name="source_sel"]',
map: {
uhdbluray: "1",
bluray: "2",
remux: "3",
encode: "6",
web: "5",
hdtv: "4",
dvd: "7",
dvdrip: "7",
other: "15"
}
},
area: {
selector: 'select[name="team_sel"]',
map: {
CN: "1",
US: "4",
EU: "4",
HK: "2",
TW: "3",
JP: "6",
KR: "5",
IND: "7",
OT: "8"
}
}
},
"Piggo-offer": {
url: "https://piggo.me",
host: "piggo.me",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAFRklEQVR4nHWUa1AUVBiG1xmb+pHVr/rhNEVqYolXREQLIQNHQEXDNkNIbkaQUkCQ7rrimuIFXVy2QFFguMttl+WyIAuuLjdBIYQ0NHGE1FKG5SLsBfZplmYaa+zMnDkz5zvnme98530/geA5A5gJOHS1tETqKjQqVUbur0U/nftDeSbrfl1RmV5fo000GJ6sA2Y97/5/YbNaahuczx5OipTFilIVYmlr8neSgaTovUOyGNFjxb6DPcnxkuJTcRKRJr/IG3jrf2ESiWSmYdDwaZ4sVR/vF8i2hc5snLMYb7tF/0yfdxax1d6Rnas8SD94dLDvZm9KX0fHa8CMf8EaJJKZ7bor4v1fhPcl+AeTsjuKw4HBbLFfjs+cxWycu2QavvndZYS7ridrr4gjO8PY7eU3rMzIVo4+fPj6s898eXDQIEwIjuzb5eZFoUjMA005F2Un8bFz4OPZ89nwtgOeby7A224hivBI+itLaUxTsNdXSLin70h3a3uB0Wicb4O90N5wxTk7KaXR38mdQ8Id9BxLgJLzPFAWkhYvJk2UQMbBw5yVSDknkdJRmM9kXioTeamUiURssXfkVMw+S0V2ob8N6JB5XBYZs+lzvOwWUXlAgul8Mpw/xUSzjt87r2O4ewfTw36eDtzjj5vdDPd0MZUph5Jz3Mk8wxfLP+CT95xI2SdNE3Q2NX2dHCdJ3WK/Yro+N1Jk0FLPULOOXr2e9nI1vbpLPOrqoL+9jdZSJT11Wh62NTN1vZF7OecQe/myed4SkuMktwT16upymzQ2zVlC4NLVdBcVUqf4kS/XbiBwhSuBjq4EOLvjv9aTIA9vdntsJMRlHTuWfUj6Pgmt+bnIAoLwnbeUhOCIKYEqI+9XWax4YPO8pUj9g0kX7efAjmCEi13YbPvVuUvY7uyKOCSUQ+ERfPK+E37vOeE7dymBTm5IA8PIEh+YruMen08R2BxwfE+8wSaPCz8cIXqLEOHyNQQ4uRLk7M5XKz8i2W8nV6QnqJccJXqVJ2FrPKbjPnMWEea6nqJjx9m6YAWhbl4IytIy+49FxT/eusCRZoUCRdAuDm7ahjwknIzdMRRvj6ArVMxQ/GkexCRRtS2CrF3f8FNkFImfBXAm5Eua5KcROqwk3MMXgc2bsrj9PX72jnQfT8KUl4tVVcrURQ3Wi1o4cJanO6WMBCQwEZaIMeok5CqZ0l/CcrECii/wNCebUKe1xH8WbBU01WgTT8SIi7Y7rOKXEycx5+dCcSGTFSrM9XVYEs8wErCfJ97fYBB+j0kkx1KiYlKrYaqiDIoKGcvOInylG7IY0Z+C0SdP1iXFSkShLp7clJ/GfCEPa2UZFl0NptZLmOuq6RNGc232em65BWNUqzE3arG01DNZo4ayYsYKcolYvY6UvVK1TdivqLLyvbOOnBy8lZXOeFUJk7pqTM11mK7WY+7Q0f/tIXqc/Ln7eSxG215bPWbbelmDVVvBSGUp8qg4Mk4ovpv28vg4bw0ODMjvapTDY1eqsTTXYmrUYNZrMDfVMpqZzXCCnLFT6ZibaqZjJr3m7zMttRj0tZO1eUWdWo3W5dkG8erE/V6l8WrDiEVfhVGn5uklFWMN5Uw0qDFVqTCpyxjXlTOmUzGhK8dyuYKJptrJ8RvtPYA78NKzwBmjjx69MTX0uMDc3WaZaCrndlsB17W5/Fadw+9VOfRVZdOlyebna/kYLpfAjatM3rvdCRZ3q9X64vM7ttE4n3u9/qO919J+u996q75DO1WgzSG9Qk6mJh3l5Upr1/2WP4dut5VzpyeW4UGXZzP7C6k/2GzdSBujAAAAAElFTkSuQmCC",
asTarget: true,
uploadPath: "/offers.php?add_offer=1"
},
Piggo: {
url: "https://piggo.me",
host: "piggo.me",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAFRklEQVR4nHWUa1AUVBiG1xmb+pHVr/rhNEVqYolXREQLIQNHQEXDNkNIbkaQUkCQ7rrimuIFXVy2QFFguMttl+WyIAuuLjdBIYQ0NHGE1FKG5SLsBfZplmYaa+zMnDkz5zvnme98530/geA5A5gJOHS1tETqKjQqVUbur0U/nftDeSbrfl1RmV5fo000GJ6sA2Y97/5/YbNaahuczx5OipTFilIVYmlr8neSgaTovUOyGNFjxb6DPcnxkuJTcRKRJr/IG3jrf2ESiWSmYdDwaZ4sVR/vF8i2hc5snLMYb7tF/0yfdxax1d6Rnas8SD94dLDvZm9KX0fHa8CMf8EaJJKZ7bor4v1fhPcl+AeTsjuKw4HBbLFfjs+cxWycu2QavvndZYS7ridrr4gjO8PY7eU3rMzIVo4+fPj6s898eXDQIEwIjuzb5eZFoUjMA005F2Un8bFz4OPZ89nwtgOeby7A224hivBI+itLaUxTsNdXSLin70h3a3uB0Wicb4O90N5wxTk7KaXR38mdQ8Id9BxLgJLzPFAWkhYvJk2UQMbBw5yVSDknkdJRmM9kXioTeamUiURssXfkVMw+S0V2ob8N6JB5XBYZs+lzvOwWUXlAgul8Mpw/xUSzjt87r2O4ewfTw36eDtzjj5vdDPd0MZUph5Jz3Mk8wxfLP+CT95xI2SdNE3Q2NX2dHCdJ3WK/Yro+N1Jk0FLPULOOXr2e9nI1vbpLPOrqoL+9jdZSJT11Wh62NTN1vZF7OecQe/myed4SkuMktwT16upymzQ2zVlC4NLVdBcVUqf4kS/XbiBwhSuBjq4EOLvjv9aTIA9vdntsJMRlHTuWfUj6Pgmt+bnIAoLwnbeUhOCIKYEqI+9XWax4YPO8pUj9g0kX7efAjmCEi13YbPvVuUvY7uyKOCSUQ+ERfPK+E37vOeE7dymBTm5IA8PIEh+YruMen08R2BxwfE+8wSaPCz8cIXqLEOHyNQQ4uRLk7M5XKz8i2W8nV6QnqJccJXqVJ2FrPKbjPnMWEea6nqJjx9m6YAWhbl4IytIy+49FxT/eusCRZoUCRdAuDm7ahjwknIzdMRRvj6ArVMxQ/GkexCRRtS2CrF3f8FNkFImfBXAm5Eua5KcROqwk3MMXgc2bsrj9PX72jnQfT8KUl4tVVcrURQ3Wi1o4cJanO6WMBCQwEZaIMeok5CqZ0l/CcrECii/wNCebUKe1xH8WbBU01WgTT8SIi7Y7rOKXEycx5+dCcSGTFSrM9XVYEs8wErCfJ97fYBB+j0kkx1KiYlKrYaqiDIoKGcvOInylG7IY0Z+C0SdP1iXFSkShLp7clJ/GfCEPa2UZFl0NptZLmOuq6RNGc232em65BWNUqzE3arG01DNZo4ayYsYKcolYvY6UvVK1TdivqLLyvbOOnBy8lZXOeFUJk7pqTM11mK7WY+7Q0f/tIXqc/Ln7eSxG215bPWbbelmDVVvBSGUp8qg4Mk4ovpv28vg4bw0ODMjvapTDY1eqsTTXYmrUYNZrMDfVMpqZzXCCnLFT6ZibaqZjJr3m7zMttRj0tZO1eUWdWo3W5dkG8erE/V6l8WrDiEVfhVGn5uklFWMN5Uw0qDFVqTCpyxjXlTOmUzGhK8dyuYKJptrJ8RvtPYA78NKzwBmjjx69MTX0uMDc3WaZaCrndlsB17W5/Fadw+9VOfRVZdOlyebna/kYLpfAjatM3rvdCRZ3q9X64vM7ttE4n3u9/qO919J+u996q75DO1WgzSG9Qk6mJh3l5Upr1/2WP4dut5VzpyeW4UGXZzP7C6k/2GzdSBujAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: "#torrenttable>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr,#body"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="pt_gen"]'
},
mediaInfo: {
selector: 'textarea[name="technical_info"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
tags: {
chinese_audio: "#guoyu",
diy: "#diy",
cantonese_audio: "#yueyu",
chinese_subtitle: "#zhongzi"
},
category: {
selector: '#specialcat,select[name="type"]',
map: {
movie: "401",
tv: "404",
tvPack: "404",
documentary: "402",
concert: "406",
sport: "407",
cartoon: "403",
variety: "405",
music: "406"
}
},
videoType: {
selector: 'select[name="source_sel"]',
map: {
uhdbluray: "1",
bluray: "2",
remux: "3",
encode: "6",
web: "5",
hdtv: "4",
dvd: "7",
dvdrip: "7",
other: "15"
}
},
area: {
selector: 'select[name="team_sel"]',
map: {
CN: "1",
US: "4",
EU: "4",
HK: "2",
TW: "3",
JP: "6",
KR: "5",
IND: "7",
OT: "8"
}
}
},
PrivateHD: {
url: "https://privatehd.to",
host: "privatehd.to",
siteType: "AvistaZ",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACDVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAQFGPyRwZTsXFQxVTS1nXTYpJRVwZTp5bT93az52aj51aj14bD9NRSgEAwIhHQ7FrlbUvF4rJhMDAwGfjUblymWPfj7RuV3jyWXiyGPgxmPfxmLLtFktJxM1LRDWt0HRskAqJA2chTDmxUaskzTPsD/Ss0B/bipwYSZ5aCnHqj7YuUJCORQ0LAzUsTDPri82LQwMCgIODAISDwOfhSTivjSojSbMqy/CoywcFwYPDQOxlSjYtTFCNw80KwnQrCbXsSe5mSGxkh+ykx/NqiXbtSiliR7JpiTAnyMbFwUPDQKwkiDWsSdBNgw0KgfQqhzYsB3Bnhu7mRq8mhrbsx6lhxbJpBvAnRobFgMQDQKxkRjXsB1CNgk1KgXVrBTSqRM8MAYSDwIVEQIYFAKigg/kuBWqiRDOphPEnhIcFgIQDQGzkBDarxRDNgY1KgPZrQzTqQwrIgIDAwCefgnpug2uiwnRpwvUqgyAZgZwWQV5YAXKoQvbrwxDNgMiGwHKoAXZrAUsIwEEAwCigATquQaSdATWqQXouAXntwbltQbltQXRpQUuJAECAQBJOQB0WwEYEgBYRQBrVAErIgBzWwB9YwF7YQF6YAF8YQFQPwD///9sRWxwAAAAE3RSTlMAD2jG8P0cpvgOpWf292nCxe3vW6icJgAAAAFiS0dErrlrk6cAAAAHdElNRQflBR0MDgqXgh1XAAABKUlEQVQY02NgYGBkYmZhFYYCVhZmJkYGIGBj5xBGARzsbAwMnFzCGICdk4GbB1OYl4+BXxgLEGAQxCYsxMAqIiomLiwsIiEpJS0jKycvL6egqMTKIKysoqomLKyuoamlraOrp6+vp2dgKMwgbGRsYgoUNjO3sLSytrGxsbWzdwAKOzo5u7i6uXt4enn7+ALN9fMPCAQKBwWHhIaFh0dERkXHxAKF4+ITEoHCSckpqWlp6ckZmVnZOUDh3Lz8AqBwYVFxSWlZeUVlVXVNLVC4rr6hESjc1NzSKizc1t7R2dXd09vb29c/YSJQeNLkKVOFhadNnzFz1uw5c+fNmztv/gJhBtaFixYvERZeuHTZ8hUrV60GgjVrp7Hi8jyOoMIRsDiiAUekYY9iAOujViqpcnSrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA1LTI5VDEyOjE0OjEwKzAwOjAw1eU6iAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNS0yOVQxMjoxNDoxMCswMDowMKS4gjQAAAAASUVORK5CYII=",
asSource: true,
asTarget: false,
uploadPath: "/upload.php",
seedDomSelector: "#content-area .block:last table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="/download/torrent"]',
needDoubanInfo: true,
search: {
path: "/browse.php",
params: {
search: "{name}",
"in": "1",
order: "size",
sort: "desc"
}
}
},
PuTao: {
url: "https://pt.sjtu.edu.cn",
host: "sjtu.edu.cn",
siteType: "NexusPHP",
icon: "data:image/png;base64,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",
asSource: true,
asTarget: true,
seedDomSelector: "h1~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_url"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: "#torrent"
},
category: {
selector: "#browsecat",
map: {
movie: [
"401",
"402",
"403"
],
tv: [
"407",
"408",
"409",
"410"
],
tvPack: [
"407",
"408",
"409",
"410"
],
documentary: "406",
concert: "427",
cartoon: "431",
app: "434",
sport: "432",
music: [
"420",
"421",
"422"
],
variety: [
"411",
"412",
"413",
"414"
]
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "10",
x264: "1",
x265: "10",
h265: "10",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "3",
dvd: "4"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "9",
bluray: "1",
remux: "3",
encode: "7",
web: "11",
hdtv: "5",
dvd: "6",
dvdrip: "7",
hddvd: "2",
other: "4"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "6",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
area: {
map: {
CN: [
"401",
"409",
"411",
"420"
],
US: [
"402",
"410",
"413",
"422"
],
EU: [
"402",
"410",
"413",
"422"
],
HK: [
"403",
"407",
"412",
"420"
],
TW: [
"403",
"407",
"412",
"420"
],
JP: [
"403",
"408",
"414",
"421"
],
KR: [
"403",
"408",
"414",
"421"
]
}
}
},
R3SUB: {
url: "https://r3sub.com",
host: "r3sub.com",
siteType: "subtitles",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEaklEQVR4nNWUe0zTVxTHf8zxcsOxyYQsLr6yzL2dj8w5kKnJfEyBgW+GmsmyCFkFUbQRBEqhlVrqWqGAkE6KOGq1pKniBItO0XYWeSjSIqwFaSn0Vyi1QOXR7/Ij6lDm/t9Jbs4v9+Z+fufc7zmHIP5Xlp+f787lcr2PHj3qIxaLp1GrvLzcRyaT+VZWVk6Xy+V+IpHIV6PRTJVIJFP+E5aSkvKKTCbdcKroVGZ+zsmzguM5ZXz+cWaO4JfDJwuKzkjK5PdLiqX6I8nJZQpF+QoAvgCmPAG7PQeTSCTeKpVqpcFgqbdYrNZeq/VRT0+P3WK1dnX39nX2WCz9pMUKkuzDX23t/SXic6qkQ8l5WUzmJutg57sAPKiA/klVInlDqayJaTf04kUbnbQDaJtboVFrbJLSshvpaRmJAPwBeI9DAXhy2Qc/yTy8WyQtznusvCCD8pIcN6ov435dPR5c08CoNWDAPjgJfLexGeyM7Pr8XN5ak8n0tsvl8iSuX69am0HfnLRtlfdwxFduoNamYC/s+vYdHNmxHFcSaFCXnkdXh3kc4gIw8gTocIzgqlLdF0+jFcvPnVtos9neIg7s+vxW3NY52h++IbA5iMCmQALhSwl894U7YjYuxv3bWjyyDWNk1IUx6glcGPdjFBlAv20AVZVqR1ryocKcHM4SYueG90xRawJsUV8TiFpJIHIFgfULCER8ORXZjHj02weepUgxxib4p9bf7wBfIDTnFxZuJfb9uDY9NjKwcMf6uW2hyzxc4csIxGz+GAXZSWhqrHt29SnI9YJgAyOAyeIAM4P9iM/n76ZE8a+6plmYsHcPI2TFvKuhwQG69KS9vbfv6CYGMcmGR4EmnWFEUXWrT35Z/SBx//4LubmCCKKjo8MbwOsPSXLmzZt/BhcIhTuYmcfExb/JzYZuO3oHBjHodMI55HQNDjldducQuu1DUNfrwWLxTBFh686yWBmxUqk0rKamZsl4h9y7d8+DJMlpbW1mf5PJNEskOh2WemBn2aHoRWClxoLDYQ9ncQW9Wcf4PdkcpjOT/j22rJ6HjesW3+Bx+bSKiorVKpVqUXNz8+zxwgbgRrWRXq/3AuAlEolXlRyLkV7JXo1yRhBo25eT0dHRp9MZqbykPSEPlbz1yIv9APRdgbeyeMKfamtrFzU1Nc1qb29/c1I/U16mUCyQFzEEF7jbH4sTl2JfZNDthARavKjgRGQabWN1BSdkTBgXBMbPYZeERb9u02q1841Go191dbXXvw4Ko9Hud74kL5xzMKo0LWbd76zkOHbJmTOhcvnFVTz2EfoJ+hYFPXrDxZSDsanKP5TBer1+NgCfl04g6gDAaw4HAvRGy/zGRu2ndXV1H+l0urkkSc40dA3NaTGYPrxz9+5nDQ0N77e2ts5oaWnxfG5AvGDUm7pTQnV1dc0wm83+drvdT6/X+1osFp/Ozs7pT/epVI1G41SCIF4Ke04oqgKov1MewKtU9NQ3VW6UiBqNxn1iqn8DP4ZZROQMmnUAAAAASUVORK5CYII=",
asSource: false,
asTarget: false,
search: {
path: "/movie.php",
params: {
id: "{imdb}"
}
}
},
RED: {
url: "https://redacted.sh",
host: "redacted.sh",
siteType: "gazelle",
icon: "data:image/png;base64,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CaSQOILvX1UNa/D9wHRgZ2pqWlFWVrY1eJNo9J5EIiEjGh26KCLVwKlhk8E0Ev88bYDJg6LfSeIITnmCWU2xbDuH9Tctn7sthg3gX0VnSK9SS2AvAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTEwLTI2VDA4OjU5OjEyKzAwOjAwW1pMhQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0xMC0yNlQwODo1OToxMiswMDowMCoH9DkAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjMtMTAtMjZUMDg6NTk6MTIrMDA6MDB9EtXmAAAAE3RFWHRkYzpmb3JtYXQAaW1hZ2UvcG5n/7kbPgAAABV0RVh0cGhvdG9zaG9wOkNvbG9yTW9kZQAzVgKzQAAAACZ0RVh0cGhvdG9zaG9wOklDQ1Byb2ZpbGUAc1JHQiBJRUM2MTk2Ni0yLjEcL2wLAAAAEHRFWHR4bXA6Q29sb3JTcGFjZQAxBQ7I0QAAACh0RVh0eG1wOkNyZWF0ZURhdGUAMjAxNi0xMS0yNFQwMzozMjoxNS0wNTowMCzxTqAAAAAudEVYdHhtcDpDcmVhdG9yVG9vbABBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaClYcSB0AAAAKnRFWHR4bXA6TWV0YWRhdGFEYXRlADIwMTYtMTEtMjRUMDQ6NDE6MzgtMDU6MDA4Ju9CAAAAKHRFWHR4bXA6TW9kaWZ5RGF0ZQAyMDE2LTExLTI0VDA0OjQxOjM4LTA1OjAwBIK8/AAAABZ0RVh0eG1wOlBpeGVsWERpbWVuc2lvbgAzMl01lwMAAAAWdEVYdHhtcDpQaXhlbFlEaW1lbnNpb24AMzKAo06GAAAAPnRFWHR4bXBNTTpEZXJpdmVkRnJvbQB4bXAuZGlkOmI1ZGM1Mjk4LTViZDEtNDI2ZS1hODE5LTZmZmM4OTA0ZmJhOThL8L8AAAA9dEVYdHhtcE1NOkRvY3VtZW50SUQAeG1wLmRpZDpiNWRjNTI5OC01YmQxLTQyNmUtYTgxOS02ZmZjODkwNGZiYTkCKwxvAAAAPXRFWHR4bXBNTTpJbnN0YW5jZUlEAHhtcC5paWQ6Mjc3NjNmZDAtYmM5Yi00N2FjLWFjNWItNzAxMGU0ZGE5NGY4ZKHHGQAAAEV0RVh0eG1wTU06T3JpZ2luYWxEb2N1bWVudElEAHhtcC5kaWQ6YjVkYzUyOTgtNWJkMS00MjZlLWE4MTktNmZmYzg5MDRmYmE5DvZinAAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
params: {
searchstr: "{name}"
}
},
torrent: {
selector: "#file"
}
},
SC: {
url: "https://secret-cinema.pw",
host: "secret-cinema.pw",
siteType: "gazelle",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAAAAAAgK5ejAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQflBw0KAxGGHdK7AAAAuklEQVQoz2MUY8AHmBhGpbEAFgYGBgaGjZwYEt/9EdIauHQzijEwMDBwMWJI/P+G0P2NgYGBgaFM6lkXg2w6z5Iz2JzW8qjgYgZDw4aCGBM0pzEwMDAwPLE4upPB/eYZhgKEGDM3nHnmf1ziZ8GPVzA9xsDAwMBgsnMnw9zpAQwMsgyPsei2SxHwur/JT082+cAnVI9BgKz1nTMMDCYqK9D9TSBQS9kwJH51I3TfxKJRnQjDB3Fioqk0ADLEKO5/ENcdAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA3LTEzVDEwOjAzOjE3KzAwOjAwgNGSrQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNy0xM1QxMDowMzoxNyswMDowMPGMKhEAAAAASUVORK5CYII=",
asSource: false,
asTarget: true,
uploadPath: "/upload.php",
torrent: {
selector: 'input[name="file_input"]'
},
search: {
path: "/torrents.php",
params: {
action: "advanced",
searchsubmit: 1,
filter_cat: 1,
groupname: "{name}",
cataloguenumber: "{imdb}",
order_by: "size",
order_way: "desc",
tags_type: 0
}
}
},
SSD: {
url: "https://springsunday.net",
host: "springsunday.net",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBjAw7XIc2AAAA6pJREFUOMt11F+o33UdBvDX8/19f2dtMk87W42tieco889GgQtBAhllobmzLBsUEiyoLrLQiXgT5J0RQU23izQk6sLdhYbbWTIxhtnUvCiqZcPtKDQw286O4M7Ozu/8vu8ufktc4Ac+F++L53m/P5/neT/xf2dyer+mu6jS26o8KD6PFn/Bz+kdZngXBspvZ2ceuAzf+2Cx5SeLlmdfIc2NeCIxGfl15PnwcXyTWod7IvN0L05cv9O5E4ff52g/SHjh6OOkWUX9AFeV3KOGf9T0kSfV8N6oH2IcR6pb1vRWXDbh+4Qbd/1CFhZUsoX6AmbIv6V3vepgWfKsqlvx5f/hOlw9vV/DyqiL7dT0Pui7cGGr5FNRnyg+ivmob0vGVbUYo0LWU+epzzW9Fad1y39vGFJfwb4WG1R3L7Ub8ziiakyyXpo9iQXSqmqLldSakk34ZLidejCsVs6WeqJV3U+jdqnqV/IC3gxV3F7V7SrNgWb+tXe7j91m9und8K+p6f1/HV4xcbh3/uwq1W2P+hF1JT6SqR17z6ZqAio5iT+HncqYOF+8FHmG/L6a5mRqODh1cA+YuvMxMkTuwEPK9zO1Y++BlK+KMdSlG0QVyUgQ3iIvFM/hb2ROvNsOx5eWm3N9ZRKnexOb7/hDcUasCVegjwaRS48f1RPi02FnuHskQt3WZXELhnhdaiFTd+51aY71uAGTiU3YhA1Ghl6L1UYNV6ItJYWkMFfM4MctvpR4+5ajD7x6bPu+t5tmg/rPa6zb2KSMYVWpcbI16roamXp9uFZsHTWttal8Q2xs8F08/vL2R29Ou0p1p2+xdsNkStcNlxa7qrnZQ3tmpXmp0hzHJDVZnKJ5uDihKBXc0ER1KTdF/crye9+h7qO+FgNp+t6cGSmq6Z0zWPgdnsK28HUsYV4iyXzJky164gzey2iH1xSTpf1nkreumX5svrioGyynv3IFOVk1PI5t1OawDs+RXybts20lr5AD0syouga3Rm3GDioli7igXBRXUiewiKERdqbkH3n96LwbP6uV3iM0y1Fder25Gg52UDeVHJFmP915NbJRsaxyVfhecVzVq3hn9tD9o2954zfa2YP3LcG1O/dJk9Swrq6yTWpjqlNpHu0P5s4MxtaIrKbbXUzgYcOld9J+SHxV1WhHiHhaeapSD6nhZwb98WOpbqm4GdfhEZpn9FY4dfD+DyPEcFglz1NvJHWs5AS+hS/WKML+RH4mXqQbzB66PP7hvxsRnTJglc+dAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA2OjQ4OjQ4KzAwOjAwwTRopQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNjo0ODo0OCswMDowMLBp0BkAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(6)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: "#small_descr"
},
description: {
selector: "#descr"
},
poster: "#url_poster",
imdb: {
selector: "#url"
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
mediaInfo: {
selector: "#Media_BDInfo"
},
screenshots: {
selector: "#url_vimages"
},
category: {
selector: "#browsecat",
map: {
movie: "501",
tv: "502",
tvPack: "502",
documentary: "503",
concert: "507",
sport: "506",
cartoon: "504",
variety: "505",
music: "508"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "2",
hevc: "1",
x264: "2",
x265: "1",
h265: "1",
mpeg2: "4",
mpeg4: "2",
vc1: "3",
xvid: "",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "5",
ac3: "4",
dd: "4",
"dd+": "4",
flac: "7",
dts: "3",
truehd: "2",
lpcm: "6",
dtshdma: "1",
atmos: "3",
dtsx: "3"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "1",
bluray: "1",
remux: "4",
encode: "6",
web: "7",
hdtv: "5",
dvd: "3",
dvdrip: "10",
other: ""
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "1",
"1080p": "2",
"1080i": "3",
"720p": "4",
"576p": "5",
"480p": "5"
}
},
area: {
selector: 'select[name="source_sel"]',
map: {
CN: "1",
US: "9",
EU: "9",
HK: "2",
TW: "2",
JP: "10",
KR: "10",
OT: "3"
}
}
},
SoulVoice: {
url: "https://pt.soulvoice.club",
host: "soulvoice.club",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBzEdsHQb2wAAA2FJREFUOMut1FuIn9UVBfDf/r7/TKPJSJLGJrWJJo1WMKLgpcSoEYn4oq21gihSCvpii29qC0ZpQSKooeCDLwUvoKDWgigqiBeiBjUVNCApasTMkIpJkwzKjLnM5Vs+/D+pUEtf3LBhwz5ns85eax2+56gtO7oaTVZggOnwVcqM8Mf17Xdeuv/VC9BRg5bueLFIGcH+wcxc5weD5ib8Cp9jomQHXtn6bvd55uP2fvB9r6zXNgNdNz9W1W4gl1JrlVX4JMmtg7GRJpIJah3OLUL9VnkrXbaU2r51R9eZ2iBtK9386mrqjh7AD1F97uy6HGok8B4+wzFM9AcuL/WXyJnD5RTplqr6M27EYvwLX+JIeHMwaOaapCQmsB2jaMg27MU5VXVDKo1mCWzskX2FN3AQJ2C3+EcXmgrV1LTksR7dydRp5DXsJOeLZRa+oNRGfIHnsABn4Wji8ag9Cc1tFzQIjdcj9/bE/Iy6XPJ+4k0MspQk40me7wddiFk8ikcamfvDprc0cNvPW2FO1cPkN3gI46p+Qh2iaUysX4R9qpbiKJ4Jvwt3ah2MDFf9bX3d9/asZF7TjIyoGitaVSvE2Pz0VVPlwOKq+siQySmdo4rbN739H2H/L8Vfc+uoE9f+3uTev5+0csWqJZt/MTmindlzeHrBlyvXHlALDn63U74prtt8CtLQnFJVF+E0HEmy/7jRbttDN9UynEctxwx2hndqduZQjl+oXb6boUS4fvMalbal+WVVPY2HcYs4A4cfearZU2U8jPRk3IWni78aGT275mZ1e1cPB163eY3R0U4ql1TVvTgXB/C88qOqusxkVeIE6ooMey9jHr/GPemcnKL7cPUQ4bGZZnGVm4dy8VmS7Tgbl2L3ow/oovYVh4urw6LIG5jGpuLa6tJY2D+5yrreBdNJ/l1Vl/Ra+zDx4ksfUDGNv+FIcXGp0zN000C5MuXEVAyaZiCZ24BlmKuqdf1X9s/En7pkVyEV1HPFqbgFa2uoRzhD1enY33SZXYjze+YmsQsPJm6UPNuU7qkt49qVEyTTSbYmbsaTvVUncRzOK626/q41Y4mNkhb7sa/PY09uGf8vnc3u/akobc2N4cdiObW8yj7mtw9YNlXlBcUTd7/r/8XIqk+/Kaf6/Pjb/a8BRYVt72oJuZAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDc6NDk6MjkrMDA6MDCTeNgtAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA3OjQ5OjI5KzAwOjAw4iVgkQAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
needDoubanBookInfo: true,
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "404",
cartoon: "405",
sport: "407",
concert: "406",
variety: "403",
music: "408"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "2",
h265: "2",
x264: "1",
x265: "2",
mpeg2: "5",
mpeg4: "1",
vc1: "5",
xvid: "5"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "3",
"1080p": "1",
"1080i": "2",
"720p": "4",
"576p": "4",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
hds: "1",
chd: "2",
frds: "3",
cmct: "4",
other: "5"
}
}
},
SpeedApp: {
url: "https://speedapp.io",
host: "speedapp.io",
siteType: "SpeedApp",
icon: "data:image/x-icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAAAACdnZ0Ao6OjA01NTXwuLi7HAAAA8QAAAOsAAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAA6gAAAOsAAADyLCwsyU5OTnujo6MDnZ2dAJiYmAw2NjbLAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zY2NsuYmJgMRkZGkAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0ZGRpARERHjAAAA/wAAAP8AAwT/AB4p/wAhK/8AHyn/AB8p/wAfKf8AHyn/AB8p/wAfKf8AHyj/ACQs/wARFv8AGiD/ACUu/wAeKP8AHyn/AB8p/wAfKf8AHyn/AB8p/wAfKf8AHyn/AB8o/wAiLP8AHCX/AAAA/wAAAP8AAAD/ERER4wAAAPAAAAD/AAAA/wAtNf8A2f//ANH//wDK//8Ayv//AMr//wDK//8Ayv//AMr//wDJ//8A2P//AKLM/wCkzf8A7f//AMf//wDJ//8Ayv//AMr//wDK//8Ayv//AMr//wDK//8Ayf//ANb//wDM/f8AHCX/AAAA/wAAAP8AAADwAgIC7QAAAP8AAAD/ADQ8/wDj//8A1v//AND//wDQ//8A0P//AND//wDQ//8A0P//AM///wDR//8A9///AG+M/wCXuP8A+P//AM3//wDQ//8A0P//AND//wDQ//8A0P//AND//wDP//8A2///ANb//wAiLf8AAAD/AAAA/wICAu0DAwPsAAAA/wAAAP8AMDf/ANX//wDK//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AO///wCbuP8AAAD/AAAA/wCv0/8A6///AMH//wDE//8AxP//AMT//wDE//8AxP//AMP//wDP//8Ayf//AB8p/wAAAP8AAAD/AwMD7AMDA+wAAAD/AAAA/wAwN/8A1v//AMv//wDF//8Axf//AMX//wDF//8Axf//AMf//wDX//8AgZn/AAAA/wAAAP8AAAD/AAUJ/wCVtP8A2P//AMb//wDF//8Axf//AMX//wDF//8AxP//AND//wDK//8AHyn/AAAA/wAAAP8DAwPsAwMD7AAAAP8AAAD/ADA3/wDW//8Ay///AMX//wDF//8Axf//AMX//wDF//8Ayf//AN7//wA/Vv8AAAD/AAAA/wAAAP8AAAD/AFt1/wDj//8Ax///AMX//wDF//8Axf//AMX//wDE//8A0P//AMr//wAfKf8AAAD/AAAA/wMDA+wDAwPsAAAA/wAAAP8AMDf/ANb//wDL//8Axf//AMX//wDF//8Axf//AMX//wDE//8Azv//AN///wBKYP8AAAD/AAAA/wBief8A4///AMn//wDE//8Axf//AMX//wDF//8Axf//AMT//wDQ//8Ayv//AB8p/wAAAP8AAAD/AwMD7AMDA+wAAAD/AAAA/wAwN/8A1v//AMv//wDF//8Axf//AMX//wDF//8Axf//AMX//wDB//8A1f//AOz//wA1Q/8AR1n/AO7//wDQ//8Awv//AMX//wDF//8Axf//AMX//wDF//8AxP//AND//wDK//8AHyn/AAAA/wAAAP8DAwPsAwMD7AAAAP8AAAD/ADA3/wDW//8Ay///AMT//wDG//8Axv//AMT//wDF//8Axf//AMP//wDR//8Avef/AJ3J/wDW//8Az///AMH//wDF//8Axf//AMX//wDE//8Axv//AMb//wDD//8A0P//AMr//wAfKf8AAAD/AAAA/wMDA+wDAwPsAAAA/wAAAP8AMDf/ANb//wDK//8Aw///ANz//wDf//8Ax///AML//wDD//8A1f//ALfg/wCCqP8Ax/P/ANL//wDC//8Axf//AMX//wDF//8Awv//AMn//wDg//8A2P//AMH//wDP//8Ayv//AB8p/wAAAP8AAAD/AwMD7AMDA+wAAAD/AAAA/wA1PP8A3///AMr//wDu//8AfJn/AGmA/wDr//8Ayf//ANL//wC34f8Agqj/AMPv/wDR//8Aw///AMX//wDF//8Axf//AMH//wDR//8A4v//AGB4/wCTtf8A7P//AM3//wDJ//8AHyn/AAAA/wAAAP8DAwPsAwMD7AAAAP8AAAD/ACIo/wDA6v8A+///AJy3/wAAAP8AAAD/AHeN/wD8//8At+P/AIGn/wDD7/8A0f//AMP//wDF//8Axf//AMX//wDC//8A0P//AO///wBkev8AAAD/AAUH/wCv0/8A+P//AMf//wAeKP8AAAD/AAAA/wMDA+wBAQHsAAAA/wAAAP8AKjP/AKnO/wBsgv8AAAD/AAAA/wAAAP8AAAD/AFVi/wCgy/8AxO7/ANH//wDD//8Axf//AMX//wDF//8Awv//ANP//wDX+v8ARVj/AAAA/wAAAP8AAAD/AAAB/wCatP8A7P//ACMu/wAAAP8AAAD/AQEB7AAAAOwAAAD/AAAA/wA4Q/8A8///AGd+/wAAAP8AAAD/AAAA/wAAAP8AQ1j/ANv//wDS//8Awv//AMX//wDF//8Axf//AMP//wDR//8Ax+//AJ/L/wAwQf8AAAD/AAAA/wAAAP8AAAD/AG+I/wCoyf8AHiX/AAAA/wAAAP8AAADsAwMD7AAAAP8AAAD/AC02/wDa//8A+P//AICW/wAAAP8AAAD/AGR6/wDt//8Az///AML//wDF//8Axf//AMX//wDD//8A0f//AMLu/wCAp/8Avur/AO7//wBMYf8AAAD/AAAA/wCbuf8A9v//AKXQ/wAWHP8AAAD/AAAA/wMDA+wDAwPsAAAA/wAAAP8AMDj/ANT//wDP//8A7///AGd9/wBTZ/8A6P//AND//wDB//8Axf//AMX//wDF//8Aw///ANH//wDD7/8Agaf/ALfg/wDR//8A1f//AN3//wBHWv8Afpv/AO7//wDR//8A1///ACIs/wAAAP8AAAD/AwMD7AMDA+wAAAD/AAAA/wAwOP8A1v//AMn//wDH//8A2f//ANv//wDL//8Awv//AMX//wDF//8Axf//AML//wDS//8AxPH/AICn/wC24f8A1f//AMP//wDB//8Azv//ANz//wDY//8AxP//AM///wDJ//8AHyn/AAAA/wAAAP8DAwPsAwMD7AAAAP8AAAD/ADA4/wDW//8Ay///AMT//wDI//8AyP//AMT//wDF//8Axf//AMX//wDB//8Az///ANj//wCeyP8At+P/ANL//wDD//8Axf//AMX//wDE//8Ayf//AMf//wDD//8A0P//AMr//wAfKf8AAAD/AAAA/wMDA+wDAwPsAAAA/wAAAP8AMDj/ANb//wDL//8Axf//AMX//wDF//8Axf//AMX//wDF//8Awf//AND//wDt//8ARVj/AFVl/wD7//8Ayf//AMP//wDF//8Axf//AMX//wDF//8Axf//AMT//wDQ//8Ayv//AB8p/wAAAP8AAAD/AwMD7AMDA+wAAAD/AAAA/wAwOP8A1v//AMv//wDF//8Axf//AMX//wDF//8Axf//AMP//wDL//8A6f//AGJ5/wAAAP8AAAD/AHWL/wDr//8Ax///AMT//wDF//8Axf//AMX//wDF//8AxP//AND//wDK//8AHyn/AAAA/wAAAP8DAwPsAwMD7AAAAP8AAAD/ADA4/wDW//8Ay///AMX//wDF//8Axf//AMX//wDF//8Ayf//ANz//wBNZf8AAAD/AAAA/wAAAP8AAAD/AGd//wDh//8Axv//AMX//wDF//8Axf//AMX//wDE//8A0P//AMr//wAfKf8AAAD/AAAA/wMDA+wDAwPsAAAA/wAAAP8AMDj/ANb//wDL//8Axf//AMX//wDF//8Axf//AMX//wDI//8A2v//AGd8/wAAAP8AAAD/AAAA/wAAAP8Afpj/ANz//wDG//8Axf//AMX//wDF//8Axf//AMT//wDQ//8Ayv//AB8p/wAAAP8AAAD/AwMD7AMDA+wAAAD/AAAA/wAwOP8A1v//AMv//wDF//8Axf//AMX//wDF//8Axf//AMT//wDH//8A8P//AH6V/wAAAP8AAAD/AJe0/wDu//8Aw///AMT//wDF//8Axf//AMX//wDF//8AxP//AND//wDK//8AHyn/AAAA/wAAAP8DAwPsAwMD7QAAAP8AAAD/ADM7/wDd//8A0f//AMv//wDL//8Ay///AMv//wDL//8Ay///AMn//wDP//8A9///AGV+/wBogf8A/f//AMr//wDK//8Ay///AMv//wDL//8Ay///AMv//wDK//8A1v//ANH//wAhLP8AAAD/AAAA/wMDA+0AAADwAAAA/wAAAP8AMTn/AOf//wDe//8A1v//ANb//wDW//8A1v//ANb//wDW//8A1v//ANT//wDa//8A9P//AKTK/wC76P8A4f//ANb//wDW//8A1v//ANb//wDW//8A1v//ANX//wDj//8A2f//AB4o/wAAAP8AAAD/AAAA8AcHB+UAAAD/AAAA/wAHCf8AMTn/ADM6/wAwN/8AMDf/ADA3/wAwN/8AMDf/ADA3/wAwN/8AMDf/AC43/wA5QP8AKDL/ACAo/wA1Ov8ALzf/ADA3/wAwN/8AMDf/ADA3/wAwN/8ALzf/ADQ7/wAuNv8AAwT/AAAA/wAAAP8HBwflVVVVowAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1VVVaOqqqobERER6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8RERHqqqqqG6GhoQBeXl4dNzc3nA4ODuIAAADxAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAPENDQ3iNzc3nF5eXh2hoaEAgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAE=",
asSource: true,
asTarget: true,
seedDomSelector: "div.row.d-sm-none + div + div",
uploadPath: "/upload",
needDoubanInfo: false,
search: {
path: "/browse",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
search_area: "{optionKey}",
search: "{imdb}"
}
},
name: {
selector: "#name"
},
description: {
selector: "#torrentDescription_releaseInfo"
},
imdb: {
selector: "#url"
},
mediaInfo: {
selector: "#torrentDescription_mediaInfo"
},
bdinfo: {
selector: "#torrentDescription_bdInfo"
},
screenshots: {
selector: "#torrentDescription_screenshots"
}
},
SubHD: {
url: "https://subhd.tv",
host: "subhd.tv",
siteType: "subtitles",
category: [
"subtitles"
],
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAMAAACecocUAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA5FBMVEUAie0Aie4AiO0Lje4wn/FBpvIsnfAIjO4mmvCo1vnb7vzc7vzc7/yd0fgcle8Fi+6j1PjR6ftNrPMzoPFktvTk8v2Py/cBie4Tke/V6/wHi+4Ahe0Bh+1etPRwvfUGjO4HjO6h0/j1+v5kt/QNj+4ble9/w/bJ5vvo9P3q9f3B4vpRrvMSke8PkO5lt/TP6PvY7Pwfl+8Ah+0om/C94PpQrfMAhu0AhO1suvUvnvEQkO+/4frM5/tMrPPF5Pu+4PoAiO44ovG84Prg8Pze7/y33fo1ofERkO82ovFFqfIPj+7///92Ih8bAAAAAXRSTlPpmTCCugAAAAFiS0dES2kLhVAAAAAHdElNRQflBgQEKCzi8yjzAAAAgUlEQVQI1xXK5xbBQBRF4TtHlAgG0YPoojMEiRYtyvs/kOvft9faRAIRLRqLQxAzoSeNVDrDAZnN5c1CsVQGoVLVa1a90bTZrXZH75o98CPQHwyd0Xjyf+RUzrT5YrlSpNYb19ru9o6nCP7h6Hqn88UHBbje7sbjGSIgjtf7E36ZP28ZDcGwKhEtAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA2LTA0VDA0OjQwOjQ0KzAwOjAwUjx2WwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNi0wNFQwNDo0MDo0NCswMDowMCNhzucAAAAASUVORK5CYII=",
asSource: false,
asTarget: false,
search: {
path: "/search/{name}"
}
},
TCCF: {
url: "https://et8.org",
host: "et8.org",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBzILb439SQAABFZJREFUOMuV1MlvVVUcB/DvuecO597XN7Slw6ulLdQCEqcAQQZBIzEhLnRDjNFo4tqd/4BxZ3RhjAtNTIzGGAwKYnAgBEVaEgQBGxFf6SvQuX19452Hc+69LupAE2Lgm5ztJ998T/IjPX19qCwuYuSxvXTvtkc3M017RtGNrsB1T0yNX75U6O4Jvv7qS9xtZNdsgUnYKjK5g9eyfU91bnlkqE1W1eXRU4NVR3y0AuvHu9YAyMe/+yH/8TffH8r2D76SFDdunEGezDV5avJMf1QYupRk8vcGakzPFDeO7Bl8YOuwUrwflSszmLi5AGGLWEoldeXEB7kikI+BJAKScPXFCcABWADSNaAfBr5tNhuWaQrFaNHEMTlfmXXjxdI4cWYTaeeTzwZIN1ACoUskLFAaaVQKFQmNqNW4GNSry7KR4TcnSqvg6M9nrXPHjx/d/MTTvay9tKM6US7L1//8SY6DznD744eSLTsG3XwXzUpJmlcIiqqU9ioEGc+0fz/y6bd1x36fZdom/2343ttvxYHrnukc2TqXCUVHbFbohoF1L287+Nx2OrCpr0qY4VEVSBJIaYIMlVCgBKSpZfO9Q/sloh5WmDGJy7+ugrbrAkBj7MhnFw+99jr09f19iqq+sfvhB4fWD2+Sm14AJxLweQJPxFi0AqzUPYS1SAqDuC1OoBDx34zy7YNqjEEIAU1V074Mw3BWQ0sG3CiGGQoEIkG14WN+tgJvatJuVatjYbOyQjXjzmCrZYILkTBNdZyQCzuKZTuMYYUcC3YI0+eYr7qozi+kXulirTlb/nypPD6dK3TcGTQtC0KINNQ0x4+EcHkMlwu0QoFS3cGF8XnM3KjBr4ckpus7IV3f193dWZZY+7QsU9Rr1bWgbdvgnCdM112PC+FEAhU3wpwdIKfKyLQbiAhgOjEkqSOndu98EYQtRxNnj5GcsQwA9HYw19uPwPcNpOn+7Xv2bTLaO43ysoVz11eQzzCougqbx2hYIbgnJMisIFOyjrblWvWF8g2NIFrTMLQtRGGQSLEwzYBHVhijagX4rbQEYZu4b7AHxf4O1JwISwEHdyRCM/275IQ3ugdG5lLKzqxpaBgM3LVkinRwYNvuh8CMrkrDSf+4Nh01pkoWZQq0QlYGU0lLJIhtn4hEh5z4Xboch9RoP7UGlCQJbrMeS7K86Hn+UM20B5uNGmlcHb0a3LryYezWWaSwIjqLChSauj4nSSCgRi5TpGQGStvRNWDo+0iSNAWRXIXpkyEXl9xm7bS3NHPYny2Ncd+dSvW2Dp6SLVFuHfwUJDVdqK05W3OnzyP2T67Z8J/4thmXL4xN4MLYrb8/zgMA1Kt10tFryAnRY54eSFNdUv2ZGnUWTqZe5VhKlITi/xNj9UwBABgQN+duLOjZQkVlTNc1VmeL46fprV8+2XXw+dHzJ78AuZfjmc3lYJkm3nznXbXY29OTb8sMe54/8epLLywTQkApxV987U+PhqXfyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNC0xMFQwNzo1MDoxMSswMDowMBODZaMAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDQtMTBUMDc6NTA6MTErMDA6MDBi3t0fAAAAAElFTkSuQmCC",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
anonymous: {
selector: 'input[name="uplver"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "622",
tv: "623",
tvPack: "623",
documentary: "404",
concert: "626",
sport: "627",
cartoon: "627",
variety: "627",
app: "625",
ebook: "629",
magazine: "631",
comics: "632",
audioBook: "633",
onlineCourse: "634"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
x264: "7",
hevc: "8",
x265: "6",
h265: "8",
mpeg2: "4",
mpeg4: "1",
vc1: "2",
xvid: "3",
dvd: "4"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "4",
dd: "4",
"dd+": "4",
flac: "1",
dts: "3",
truehd: "9",
lpcm: "10",
dtshdma: "8",
atmos: "8",
dtsx: "3"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "10",
bluray: "1",
remux: "5",
encode: "11",
web: "9",
hdtv: "6",
dvd: "7",
dvdrip: "4",
other: "0"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "5",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
team: {
selector: 'select[name="team_sel"]',
map: {
torrentccf: "1",
tccf: "1",
tlf: "2",
bmdru: "3",
catedu: "4",
madfox: "5",
other: "7"
}
}
},
TJUPT: {
url: "https://www.tjupt.org",
host: "tjupt.org",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBykVPLQLsAAABCVJREFUOMuVlctvVVUYxX97n3PPvb0t0BZKSKW0FdpSDCAkViMmjU9kAImaMDVGnOo/4IApGo0xccLQmYkgJhhfCSA4sgUJjz5JsbVwS/q6lN7bc/brc3AanGiiO9mjb+1k7d/KXlvxP9ax04tsfyKmMucatGYrsAysnHln82ON+rfDB967RXU+Zc/hroZSSTeXErVNKfq0Ym8cq6cizQ7rZKyeyYdxxFQ9Fc69u5kYYLxi8Q4aSiq5Mp2VhmZse93SGxS7g7BHK/qiiO44Ui1xRBxppZUC6+TpWMvVjw4WP/n6QeAcoE58s8xCVXZtKKmXTwyUD+/cHHWlTppTK80La7Lxh8ksWloLaKUoFWCwK+HJlhgBRIRI8WtXS3S8oFWlIdHElYWwt6msT0UFdeTStGEpjTnSWySJQIBqKpwfz/AiiFWMzjs2FTWD3QUmFz0/T2StFzxxMcrpxcAhYJ8XmJh3LNQCg90J09VAZ3PEoc4CN+Ys4wsOreBmxZFZ2L8t5uo9y6W7ZkOtJluBPwG0dVzNrCxlRjAOjBVEYHjWMjRr2VLWvNidUECRGcE6wTjBeGGpFgieFgV9CnjliwW0MWHEmjBjTMCagLUCwKO1wPmRlPlVz0BHgYPtMcYEjBXcusYHwXtpEpE9v99ew3tBX3x/S81YGXEu4HzA+wDrwEcrhh/HUwoaXu8t0lZWWJtrRCB4wftACNK/qzPZGIKgj56ex1q5YYxYawRrBRHBeyHNhJ9GUkYfOHraYl7aVUS84JyAgPe52+ClVylpQQT9qBbwPoxZEx46G3A2dxg8eBe4v+w4c61O3QRe6yuye0uMMYIA3gnWBLwLHRJkByLoNBMyIxVj5K5ZZygCzkvOzAhXJte4OJbS2hjxxv4GmhIIQXKNDTgnjc5Jf6wCsXMQhCpaJpSSZx4Dd4I1gkJYyeCroRr7ticMdBWp1sPfmkxQSmIvau9vS41o74VStlZzVkZsFoIxOXDvBJMFjMkxjM4azg7XiDS82l9iY0njbH5lawLehv7u0mqLvn6ynVUSrJMxa+WRMzlw5/OArMl3lga+HV5leCqjIdEkETgnmPW5s7IteGnXkKflvUxYK8utZU0hgnKs8OshORvwLlBZcnx5eYVq3aOUwjtZnwvOyR8SWIwBerYWKBfV7As9xeXne0pdm8qa48810dEa8fn3Ve4vO7TK3+rlkTX57lotvPVsky4X9YzzXItidV0JZ0Pq52KAYwfKbGiMaosP7egvt+sHLt6s5Q6CSGokeE8mmorSTNaMjF0YSWfeHGgqHT3YePnkmepQT2diAZn8uD0v2Ia3p+hrU9xbkcGCklME2kQxh2IyKeibkeIWSk2pSC8prR4iuDufdvxjMT9u7O4PpkGhEXYi0opS0yjmAX/3s87//E38BWXDuj9j0ViVAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTEwVDA3OjQxOjIxKzAwOjAws0DWvgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xMFQwNzo0MToyMSswMDowMMIdbgIAAAAASUVORK5CYII=",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
seedDomSelector: "#top~table:first>tbody>tr:nth-child(5)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
torrent: {
selector: 'input[name="file"]'
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: "#descr"
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: "#external_url"
},
category: {
selector: "#browsecat",
map: {
movie: "401",
tv: "402",
tvPack: "402",
documentary: "411",
concert: "406",
sport: "407",
cartoon: "405",
variety: "403",
music: "406"
}
}
},
TLF: {
url: "https://pt.eastgame.org",
host: "eastgame.org",
siteType: "NexusPHP",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQKBzMtpJtJ9QAAArNJREFUOMuVk7+OHEUQh7+q7umZm929s2wJjCAhQESEPAIJgXMewvIrOPSDIJEREPAEZEiIiMTZSZjDt3vr3Z2d/93lYJa7PVsW65J6unvU9fXv19Ut3724dIuZY1E6Ls6UhwvhwcxxMRMezRyfzD2PSsUrNNFY70eW25F1PbJpI3Ub6YbEy8stv/1xhQd+BhCm+K83jkMO37u/drToeK0fkj0ZkxGTMSZjsCnfC6iAYUQz1CCmKVWdkB2aV8gUvAJi+H0TUTEEw1DUKcELmZtsqkybZQp9NKou0vSJYUikmEgpEWNkHEfiMOA3q46uVupSqUqlrh1VM7IsHRelcH4mzAPkqiSMbjTaPtH3I+2YGMbErh5YrmraTY1fX3dkORRnSlEI60KYlcq8cJS5UuSQe6Hwgvc2HYNBNANLiMLrVc3VPxu6N3t8W7fEHmIn9LnS50JfC22uFEHJg5BlQghCnkHmBe8EVRA1khnXr3esrt4QuxafYnyeEKKASCKijCI6kH6QJF+RFDMBBEGnWhsvMyc/iZCGMdE2PV3dYzHe3pLb+PbZ7wDO4Bfv+b4ISsgnpSEoIRO88qvBEyD++PSbe/n+XWAId3t4LxMog5AJwUN2sPuheA9Y5BPQbAKGI2WZV8wS3ZDet/YhYB6OgJmSH2BOYVe1rK53VNsWETkNKGKHHlKM1PuBbT/Q1B03y4r1akfX9Kcr/PfV9nacYqTvBup9S7VtqDY1cejvven/Bf7156ujWQKLmEVICWycHFg6HWgp3gMaCbEExAlkET5GIXoEFHBOcV4AJXYQ+4jFj1Ao7q7KIVfK85zZPGCSaHYN1bqia1vgxCq7oAfrUJ7nfP7FBY8/XeA83CwrLi9hdWO316Y7HWjM5jmfPV7w9ZcPKIPj70WgaRqarkd1Au7eyX8L7wlhtfLjAQYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTBUMDc6NTE6NDUrMDA6MDBA7iTqAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEwVDA3OjUxOjQ1KzAwOjAwMbOcVgAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
seedDomSelector: "#top~table:first>tbody>tr:nth-child(3)",
torrentDownloadLinkSelector: 'a[href*="download.php?id="]',
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
imdbOptionKey: "4",
nameOptionKey: "0",
params: {
incldead: "0",
search_area: "{optionKey}",
search: "{imdb}",
sort: "5",
type: "desc"
},
result: {
list: ".torrents>tbody>tr",
url: '.torrentname td a[href*="details.php?id="]',
name: '.torrentname td a[href*="details.php?id="]',
size: "td:nth-child(5)"
}
},
name: {
selector: "#name"
},
subtitle: {
selector: 'input[name="small_descr"]'
},
description: {
selector: 'textarea[name="descr"]'
},
imdb: {
selector: 'input[name="url"][type="text"]'
},
douban: {
selector: 'input[name="douban_url"]'
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: "#browsecat",
map: {
movie: "438",
tv: "440",
tvPack: "440",
documentary: "443",
cartoon: "442",
sport: "444",
concert: "445",
variety: "441",
music: "446"
}
},
videoCodec: {
selector: 'select[name="codec_sel"]',
map: {
h264: "1",
hevc: "6",
h265: "6",
x264: "1",
x265: "6",
mpeg2: "4",
mpeg4: "0",
vc1: "2",
xvid: "3"
}
},
audioCodec: {
selector: 'select[name="audiocodec_sel"]',
map: {
aac: "6",
ac3: "9",
dd: "9",
"dd+": "9",
flac: "1",
dts: "10",
truehd: "14",
lpcm: "12",
dtshdma: "11",
atmos: "13",
dtsx: "10"
}
},
videoType: {
selector: 'select[name="medium_sel"]',
map: {
uhdbluray: "10",
bluray: "1",
remux: "3",
encode: "7",
web: "4",
hdtv: "5",
dvd: "6",
hddvd: "1",
dvdrip: "6",
other: "9"
}
},
resolution: {
selector: 'select[name="standard_sel"]',
map: {
"2160p": "6",
"1080p": "1",
"1080i": "2",
"720p": "3",
"576p": "4",
"480p": "4"
}
},
area: {
selector: 'select[name="processing_sel"]',
map: {
CN: "1",
US: "2",
EU: "2",
HK: "3",
TW: "3",
JP: "4",
KR: "5",
OT: "6"
}
}
},
TMDB: {
url: "https://www.themoviedb.org",
host: "www.themoviedb.org",
siteType: "tmdb",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAMAAACecocUAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA4VBMVEUDJUEDJUEDJUEDJUECJEABI0ACI0ACIz8CIj4QNUobRFQQOU8PPFIQQlkJOFINVHAHUnEDME0TOk0oVl8rY2wpanUjbHwWZXwhr8kQqc4ET3ARN0scRlUXRFYbUWMVTWIMQVsNU28IWnoDNlQBIj8oU1xHf3kxbHJGn54fZXYVWnALTGgIZocDQF8RNkstXmUlWmYoaHQSR10NQ1wIP1oGTm4DOVcfSFVvtZxmvKpVurM1kpsWYHcPXXgKbo8ESWoLL0YqWWIpX2kiXm0USl8LP1kIPFcFQmADNFIBIj7///8y4y3nAAAAA3RSTlOL8/J7NBHxAAAAAWJLR0RKHgy1xgAAAAd0SU1FB+UEDxE0CxaidT8AAAB5SURBVAjXY2BgZIYARgYGJhZWFjZ2Ng4OFiYGFk4ubh5ePn4BQRYGViFhEVExcQlJKQ4GNmkZWTl5BUUlZXYGFVU1dQ1NLW0dXXYGFj19A0MjYxNTM6C4uYWllbWNrZ09UNzB0cnZxdXN3YMFaL6Kiic7EADNR7IXAHnLC6fWgfiqAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTE1VDE3OjUyOjA5KzAwOjAwD2XHBwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xNVQxNzo1MjowOSswMDowMH44f7sAAAAASUVORK5CYII=",
asSource: false,
asTarget: false,
search: {
path: "/search?query={name}"
}
},
TTG: {
url: "https://totheglory.im",
host: "totheglory.im",
siteType: "TTG",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5woaCC40liGC4QAAA+FJREFUOMttlEtTVEccxX+3+5K5wzyAASKPMaLRLCAp3fhKstG8voRV2eXb+CHMB4hJ9mZhrIpVwZTCiEYepgYYYAZl7ozcV7+yuDBClV3V1b06fc7/nNPenTt37n566dL5YjEYy7LEWuNwzmGtxVpLkiSE3ZA0TdFaY63FGIPWGmMMxhiUUhhjAPA/v7ww/82tby9OT03XtNbW4cABgBCC3d0dHv/1mNbODlppjM3BlFKD8/junMOvVivVs/X6xJkzU6N8YAVBQON5A7ErEEKAB9ZahBB4nvd+4+Gw+HEcJf13PV2r1fA8ge/7AGRZhtaKdmePbrdL2OthjiRrc3QeM8xyhtYZ/O7bLq9fr+OcpTY2zvj4JADd7lt2drZZX9/gXb+PFB5OCJxzOMcpuceSjTX4B297/PPkGe29N8zPz1OrTeB5kKQJ3bAHnmB+YQGjDc5ZrHO02x0ayw0ODw/JlMJoPTDMV0oRxzFRFJNl6mhyHpMTHzM8XEYrjZACj9wrKSRra6tsbjZptVqkaYZz9j1gHo88KidXsThMsTj8IZ8IwxCVKcKwh9IZzoEzFiFFDqhPUAZwOHq9kDTJCIKAarUKDrrhAb1ej/X1NYJiwKXPLiKlIEkS9vbavNl/g38ypAOWDl68XGF7a5uz9U+4evUaOFhuLPFkcZEsU9y4eYOz9TqlUolOp8ODB3/w26+/42utjyKiT0nf2+2wtrqBL4aO3rDs7+8zXC5xdf4Lrly+wtDQEEIIpqamaTabSClzyc45+v0+GxvrBEEBay2rq6uEvRDw8qh4sLAwD3jMTM9SKpUGeY2iiHeHh8RxnDME6Pf7rDxfodlsopSi2WwyMjKClDKvoSc4d+48vvSR0idNU1ZePGd5aZl2p83Ll/+SpmkOaIwhiRP6/T7xf/Hg1UKhAB6DahU+CoC8ent7O9y//wutnRblUoVyucz169dyU5RSeF4uTUqJ7/s45zDGcDwSz/MGsUmzlK2tLZ49fcr3P3zHrdu3CYIivbCXMzwGVFqdqlOSJERRRJZlSCmQ0kcIgZSScqXC9MwU9foss9N1yuUqZtYgL1y48GMQBGestcNpmp7qplKKg4MDXr16xaNHf6KNYmxslFKpTCEIqNVGmZwcZ3RkjFKpnKs7KfkkGOTONxoNlpaWiKKIza1NCoWAr778mtGRUa5fu0mcRARBcTAO3xgjtdae53mDxuSgZiA773rEw4ePqNVqlMsl5s6dp1yuUCpVMMbQ7rTZ3t5Czs3N/RQEwQRQHHxDJ9pzXEcpJd0wpLXdIo4iZmZnqFSqSF8SxxGLi39z7+d7/A+iMsWK5Inr3gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0xMC0yNlQwODo0Njo1MiswMDowMO+VxjIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMTAtMjZUMDg6NDY6NTIrMDA6MDCeyH6OAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDIzLTEwLTI2VDA4OjQ2OjUyKzAwOjAwyd1fUQAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
seedDomSelector: "#main_table h1~table:first>tbody>tr:nth-child(2)",
torrentDownloadLinkSelector: 'a[href*="im/dl/"]',
uploadPath: "/upload.php",
search: {
path: "/browse.php",
replaceKey: [
"tt",
"imdb"
],
params: {
search_field: "{imdb}",
sort: "5",
type: "desc",
c: "M"
},
result: {
list: "#torrent_table>tbody>tr",
url: '.name_left a[href*="/t/"]',
name: '.name_left a[href*="/t/"] b',
size: "td:nth-child(7)"
}
},
name: {
selector: 'input[name="name"]'
},
subtitle: {
selector: 'input[name="subtitle"]'
},
description: {
selector: 'textarea[name="descr"]'
},
imdb: {
selector: 'input[name="imdb_c"]'
},
douban: {
selector: 'input[name="douban_id"]'
},
anonymous: {
selector: 'select[name="anonymity"]',
value: "yes"
},
torrent: {
selector: 'input[name="file"]'
},
category: {
selector: 'select[name="type"]',
map: {
movie: [
"51",
"52",
"53",
"54",
"108",
"109"
],
tv: [
"69",
"70",
"73",
"74",
"75",
"76"
],
tvPack: [
"87",
"88",
"99",
"90"
],
documentary: [
"62",
"63",
"67"
],
concert: "59",
sport: "57",
cartoon: "58",
music: "83",
variety: [
"103",
"60",
"101"
]
}
},
videoType: {
map: {
uhdbluray: [
"109"
],
bluray: [
"54",
"109",
"67"
],
remux: [
"53",
"108",
"63",
"70",
"75"
],
encode: [
"53",
"63",
"70",
"75",
"52",
"62",
"69",
"76",
"108"
],
web: [
"53",
"62",
"63",
"70",
"75",
"52",
"69",
"76",
"108",
"87",
"88",
"99",
"90"
],
hdtv: [
"53",
"63",
"70",
"75",
"52",
"62",
"69",
"76",
"108",
"87",
"88",
"99",
"90"
],
dvd: [
"51"
],
dvdrip: [
"51"
],
other: ""
}
},
resolution: {
map: {
"2160p": [
"108",
"109",
"67"
],
"1080p": [
"53",
"63",
"70",
"75",
"54",
"67",
"87",
"88",
"99",
"90"
],
"1080i": [
"53",
"63",
"70",
"75",
"87",
"88",
"99",
"90"
],
"720p": [
"52",
"62",
"69",
"76",
"87",
"88",
"99",
"90"
],
"576p": "51",
"480p": "51"
}
},
area: {
map: {
CN: [
"76",
"75",
"90"
],
US: [
"69",
"70",
"87"
],
EU: [
"69",
"70",
"87"
],
HK: [
"76",
"75",
"90"
],
TW: [
"76",
"75",
"90"
],
JP: [
"73",
"88",
"101"
],
KR: [
"74",
"99",
"103"
],
OT: ""
}
}
},
UHDBits: {
url: "https://uhdbits.org",
host: "uhdbits.org",
siteType: "gazelle",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQMAxYgELsSrwAABEJJREFUOMtFlE1vXeUVhZ/9fp1zP3x9bcc2TnCCQwIFVIUCA0/opEiIEYNW7RipP6I/pr+AYVVVQkJCKghKFYKliEBCCIkTwHEcfJPre4/PeT92BwZ3S1ta0paewdJaW8796e8fqTF3xZgdEXZw/tuU3eStC4+7v16+pquyTydBAcRGibMRN//Vk/v/bbxIN7JFLir6uyzltULZcoj8xtfVlg/uDYP+nFPZV7F708ff7d2cf3Io7pujeaEDsBV+9nB90Oy/suTN1prx5qw3ds0UWY6xGzWlqRzGjF3wvqq9tSgpa9FSPa0rOwk1U+849oX4C9CFntR17Ydd1V80Po2tFStZUMjSttFhaK0V65213ggWMVqqcfBm7CtwDlwBABvAVxAqS+VrrE9gFRXFRltEpHWiCAgCiChGBSOCtWAtGAdOQQHrwVhBrCBGUCOcXH5ZVXF1cNTBYq1BtWCMMHCWqupjQx9jLKQMAsY6bOjj6gF+1MOGjBhFYyFppswU985rZ1lcWuSbvSO+3v2ZzdWad14/y4C3WdOa4ZOap7c/BWBpa5v+md8zXP8tg/ULLJ5fwQZL6TIPvrjFtfc/xL3wzAJLZ0bsTTtiVvrBcuX8AvOyyqCbEPQamj8DIIwuYOwV6vHLjF9YpOka5s0R/ZURy69usnHvMk7g1IOiiuqJ1hwx1TLDZ7dZO44AjM5tczxZoW0j88mUr/7xCQffPWDjyiXWX3mO5UsbONUTUDn1FYoquTvCjs6ydP49hpf+AoDrDXm4c5/5wWPSFCaf3+fgi9v0msB4ZQVjDU4B7wyDyrHQ8wxqhzGC8YFuNmH/xnUefX8TgOXnXyLOBhjnsc6ysLpEe26dhdVlQq8mNhH3w/5Ttq9s8vqLz/DnN7cYBIOXwpPOUuJdjvc/YO/qPwGoeu/iwx/w/YssXRyz/bc/EqcNvTMjjmZTfvzgU9zVW/s8v7nMq5fXGFihnWau3pswnXdU4TqL0x1Mvo0CzcEOc12jmxWauERvdQEzMLSzQ/au32H3PzdwN/dmvP/vO3z29UN6wdAmZfeJ8py/w8bwY9bct9RjBaA5vMX8wDPZ/ZHm43XcwCBWKF1i+sMBj27s4giBW4eJO9MploKKRaoRG/VdSvmSFB6AP6lenu0SJy3N/cjh7QjSghRISooRjzmJTV17enXAG8gYojhc8LjKYB2nYzy42hDqmt5wiLHhtClt09A1EacKIoI1gjGg+msy5VSj/4eigmAwCEYMGEUsiDEg4FTV5VxMzBktkFTpSqIjEVG6BO2v3yZBPC7ENhK7DqsJyUBSSsoGVedQPcopPY2dHGdKU9QcR5W209J0aNMlujZRAFzBxLb4rkt1jG0/k2qESjL9nFOlqHWiZVdjfNzldI8Yd0vRn5If7bUD96j07MQ75vmYqEAd8GD7KbLYpPlqys2GCOtB/KZSzhfR1f8B1roU+C5nEcAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTJUMDM6MjI6MzIrMDA6MDAKmfIIAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEyVDAzOjIyOjMyKzAwOjAwe8RKtAAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/upload.php",
search: {
path: "/torrents.php",
params: {
order_way: "desc",
order_by: "size",
searchstr: "{imdb}"
}
},
needDoubanInfo: true,
description: {
selector: "#release_desc"
},
imdb: {
selector: "#imdbid"
},
anonymous: {
selector: "#anonymous"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
torrent: {
selector: "#file"
},
category: {
selector: "#categories",
map: {
movie: "0",
tv: "2",
tvPack: "2",
music: "1"
}
},
videoType: {
selector: "#media",
map: {
uhdbluray: "Blu-ray",
bluray: "Blu-ray",
remux: "Remux",
encode: "Encode",
web: "WEB-DL",
hdtv: "HDTV",
dvdrip: "Encode",
other: "Others"
}
},
videoCodec: {
selector: "#codec",
map: {
h264: "AVC/H.264",
hevc: "HEVC",
x264: "x264",
x265: "x265",
h265: "HEVC",
mpeg2: "MPEG-2",
mpeg4: "AVC/H.264",
vc1: "VC-1",
dvd: "MPEG"
}
},
resolution: {
selector: "#format",
map: {
"2160p": "2160p",
"1080p": "1080p",
"1080i": "1080i",
"720p": "720p",
"576p": "Others",
"480p": "Others"
}
}
},
ZHUQUE: {
url: "https://zhuque.in",
host: "zhuque.in",
siteType: "TNode",
icon: "data:image/png;base64,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",
asSource: false,
asTarget: true,
seedDomSelector: "div.layout-container > div > form",
uploadPath: "/torrent/upload",
needDoubanInfo: false,
search: {
path: "/torrent/search",
imdbOptionKey: "imdbid",
nameOptionKey: "title",
params: {
type: "{optionKey}",
keyword: "{imdb}",
sorter: "seeding",
order: "desc"
}
},
name: {
selector: "#form_item_title"
},
subtitle: {
selector: "#form_item_subtitle"
},
description: {
selector: "#form_item_note"
},
anonymous: {
selector: "#form_item_anonymous"
},
torrent: {
selector: "#form_item_torrent"
},
imdb: {
selector: 'input[placeholder="tt123456"]'
},
douban: {
selector: "#form_item_doubanid"
},
tmdb: {
selector: ".ant-space.ant-space-horizontal.ant-space-align-center >.ant-space-item:last-child > input"
},
screenshots: {
selector: "#form_item_screenshot"
},
mediaInfo: {
selector: "#form_item_mediainfo"
},
tags: {
chinese_audio: 'input.ant-checkbox-input[value="603"]',
chinese_subtitle: 'input.ant-checkbox-input[value="604"]',
hdr10: 'input.ant-checkbox-input[value="613"]',
dolby_vision: 'input.ant-checkbox-input[value="611"]'
},
category: {
selector: "#form_item_category",
map: {
movie: "电影",
tv: "电视剧",
tvPack: "电视剧",
cartoon: "动画",
concert: "其它",
documentary: "其它",
variety: "其它"
}
},
videoType: {
selector: "#rc_select_9",
map: {
uhdbluray: "UHD Blu-ray",
bluray: "Blu-ray",
remux: "Remux",
hdtv: "HDTV",
web: "WEB-DL",
webrip: "Encode",
encode: "Encode"
}
},
videoCodec: {
selector: "#rc_select_10",
map: {
h264: "H264",
hevc: "H265",
x264: "x264",
x265: "x265",
h265: "H265",
mpeg2: "Other",
mpeg4: "H265",
vc1: "Other",
xvid: "Other",
dvd: "Other"
}
},
audioCodec: {
selector: "#rc_select_3",
map: {
aac: "AAC",
ac3: "AC3",
dd: "AC3",
"dd+": "DDP",
dts: "DTS",
truehd: "TrueHD",
lpcm: "LPCM",
flac: "FLAC",
dtshdma: "DTS-HD MA",
atmos: "TrueHD Atmos",
dtsx: "DTS-X",
mp3: "Other"
}
},
resolution: {
selector: "#rc_select_12"
}
},
fearnopeer: {
url: "https://fearnopeer.com",
host: "fearnopeer.com",
siteType: "UNIT3D",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACnklEQVR4nK1UO0hjURA9KRIw6EOUYIgWaqVRMRjBQtFnWgujkCLgBwsRERRMZZIiiJqAKIiVqPgjLAiSNJqPIClsBBtFxC4WtjYr2OlZ5vKy7Kq7G1wHhvvevJnz5pw79wIfmwWADmADwBWA7wBejPXKiOtG3j/NBsADIAwgBSAP4BnAq7HmjXjYyLP9CcgEoAxA0ChiEZ438suM+t9Mgt8APBYJVvBHo67sLc3gJ8D4C2iwQN9saFEszb/R9wigbrVaQ1VVVWxoaGBLS4vy1tZWut1utZaWlr4DqK2tVXlNTU2qrq6ujpqmhQRww263p0dGRnh0dMREIsHd3V3u7OwwmUxyb29PFQmIyWSixWJRz0tLS8xms9zf3+fy8jLX19fp8XjSAnitaVq+v7+ft7e3jMVibGxspNlspnRdUlKingXE4XBQfizvq6urzGQyHB8fZ2VlJS8vL7m1tSW08VRdXf08Pz/P+/t7lej3+xVdKQwEApyYmGB9fT1dLhcPDg5ot9t5eHjIeDzOrq4uFX94eODi4qLMKV6cTufr8fExb25uVPuDg4NKF5vNxlwux7OzMw4PD7O3t5fb29tsb29X3Z2cnHB6eprBYJCbm5vs6emR4cdTR0fHs4CJhkJJqIpWAiBFqVSKKysrnJycVBRHR0d5fn6u9J6ZmeHs7Czb2tqkRnV43dfXl7+7u+PU1BQrKip+7mIkEuHc3BwHBga4tramKIoUIsvFxQXHxsbej47P59uIRqPp09NTRaWwi6LT0NAQu7u71dh4vV6Gw2G1YQsLCwpU1/W3gGl0dnbqbrc71NzcTKvVqkZDPgqwaFiYwfLyctbU1Khdl+7FNU17Cxj68KQUQD97Ur78LMOwL71txL78PizYf93YPwA8btamn3E35AAAAABJRU5ErkJggg==",
asSource: true,
asTarget: true,
uploadPath: "/torrents/create?category_id=1",
needDoubanInfo: true,
seedDomSelector: ".torrent__buttons+.panelV2",
torrentDownloadLinkSelector: 'a[href*="/torrents/download/"]',
search: {
path: "/torrents",
replaceKey: [
"tt",
""
],
params: {
name: "{name}",
imdbId: "{imdb}",
sortField: "size"
}
},
name: {
selector: "#title"
},
description: {
selector: "#bbcode-description"
},
imdb: {
selector: "#autoimdb"
},
tmdb: {
selector: "#autotmdb"
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
anonymous: {
selector: '.form__group input[type="checkbox"][name="anon"]'
},
torrent: {
selector: 'input[type="file"][accept=".torrent"]'
},
category: {
selector: "#browsecat",
map: {
movie: "1",
tv: "2",
tvPack: "2"
}
},
videoType: {
selector: "#autotype",
map: {
uhdbluray: "1",
bluray: "1",
remux: "3",
encode: "12",
web: "4",
hdtv: "6",
dvd: "1",
dvdrip: "12",
other: ""
}
},
resolution: {
selector: "#autores",
map: {
"4320p": "11",
"2160p": "1",
"1080p": "2",
"1080i": "3",
"720p": "5",
"576p": "6",
"480p": "8"
}
}
},
iTS: {
url: "http://shadowthein.net",
host: "shadowthein.net",
siteType: "its",
asSource: false,
asTarget: true,
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5QQMAxcfv8YO0wAABQ5JREFUOMutlF2MVPUZxn//c86cMzOH2ZllZ2YZYIddlv2gyAJiEWK9MKXEQk1TUYGqbaQ3LdoES1pNbFou2qSJadI0XDTWikntRzBpVD6k0hBJU8S1iwou7MCwOw7L7Lq7M+zsfJ3vvxerTZv2ss/Ve/HLm/d9nuSB/7PEXKpTm+hfZ06s+Edzdd6Obr5I/fw2jOQc4b7rcGErSLE1+NXTv61uHlkf6i4QaURZ2H+UWGEVmm3AwDWFE7u+7jxw4i917Ur/qt3Uc4fc0sCpjsrVHefu7T9yx+hoFthf13D7rqFMp3OzTu6Rbz30Kmsb8dhPSxvuO1Ruf+N7bQvcJQX+bCquhuqjw/qR5w5oq/K5+bzSXGcpy1N6S8nMyOmHkSFZU9S+UqdPf93Ft6xB74PUfb3jV6vFjuaW95SLu7e12BBEGPAV0J0q7lxbevdZ/zfa1NLl8zfsZrXRmvzDgpbs7ilUH/3Y8IP2sEKnHeCGw7ieQSqoRYKOFW/WDW90qLzwdKlDk2nLQ0iQIiCkiZCRQtOu3tVstoyhCcVLfzL84chaoyxZ3rKU/oZNMwKGDVpIRzYS8vUd6XQmNyajcw1Cniqk8PAVUAQ4ARTHQdvx2lT7hYw/dGvVmqC7Xlo/ZnjcE4D0QbdBCh+BT6RmBFtyf+03q3K9p4AbAtUDXwdfBflZykpuaHPvkrmqLqYLqt50ZO/8Am4koBiDyRh4IXClpLHSxZExpKWBhIgFjgFhCzQHVBfiAtTeR7ZXJmYraxur7+yyPdcpWCSy4CWFo4a9xXemTBNscamcHDjzTuCnroUjbRnctnDgC1dfvPR6IuFYyTv+qDz20hvF7xTLr6y5Pb5ma/Pj7sEus1Fvz0ybDQi7ix5aBKi11gE/0uw6WCjsXdj25V3pOlckoHngK1AP6aXKxtCU1nO7wkgmmWzNVOz5+lK77DbjCTVu2gbYOpgWVIhKA5GYjJl7FSnPBkIft3W31lRA+OD7UBDOjRdnsuNaAJSz2cCLBd6oHvHFzSJh6QuzsWi02oT8uvhkd8vMRwjtOvm1L506d8/g7NDlfEr1W/gq1FSFmY4Om1uPo/38wFMIX/1z4BcyD57/4FBbpURD1WlFQAC5lEHeajsTbN76fNtM/idD71/dV2WBmgpRINqCtxOdVPX06Ydv9vlKvbeHt/bvW9g4p32UKs97qqviSQPVB9WC4UjaHlm54k3riYeKG2/X87rXQOKB9ACYDcP5ZHuxNtjzd/Xe7ajHLl9m03sj38gWLx017PISXw+IeQ6ocNFYwvGevrPBzu2/fuLIC7/MFke/b1h1ITXQFIg6cNzsdM4tjR8+eez4qeErOZQVpZIiBXuXTU2ZIU9iuLCkKckpCke7+kanB1LP3S1NNTl7e/uy6YqCANODRA1eb0vwau/gyWDNht9/89Fvy+d/+CwaIDxNM/FASLBROd0e9c90rr70/qah7z7QcP7pes5KgUQBhCuouAqvrEw4b6cHTl784qYnzWJm/m/HngFAk0L4p7bc/eE7RvSrk5GQHDaXjY0vjb+s79z5p7Gx0Zt7+7+Ap6rudEivzWkRzkVizkSm492Psl0vZHfcf+LOWm3+rc+WAWg/3rMHRSgv30olqo2wcsONLx9+8KXfFScvvCtPAxw+zM8OHvzE2rPnR1OJeP98Mn49RPL8yLEXK18R+/gFP/jPxpZS/msGpBDiv2r935hF8H8wn+tTfi1WST2Ov5MAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTJUMDM6MjM6MzErMDA6MDDUs4OrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEyVDAzOjIzOjMxKzAwOjAwpe47FwAAAABJRU5ErkJggg==",
seedDomSelector: "h1~.line>tbody>tr:nth-child(2)",
needDoubanInfo: true,
uploadPath: "/upload.php",
search: {
path: "/browse.php",
params: {
incldead: 1,
search: "{imdb}",
search_in: "names",
sort: 5,
type: "desc"
}
},
name: {
selector: 'input[name="name"]'
},
imdb: {
selector: 'input[name="imdblink"]'
},
description: {
selector: 'textarea[name="descr"]'
},
mediaInfo: {
selector: 'textarea[name="mediainfo"]'
},
tags: {
hdr: 'input[name="HDR10"]',
hdr10_plus: 'input[name="HDR10Plus"]',
dolby_vision: 'input[name="DolbyVision"]'
},
anonymous: {
selector: 'input[name="anonymous"][value="true"]'
},
category: {
selector: 'select[name="type"]',
map: {
movie: "68",
tv: "65",
concert: "61",
music: "6",
ebook: "26"
}
}
},
"nzbs.in": {
url: "https://nzbs.in",
host: "nzbs.in",
siteType: "nzb",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QATwB9ALSzxfhxAAAAB3RJTUUH5QQMAx4c9w3kIAAAA6xJREFUOMt1lM9rVFcUxz/nvDszieOYMUrGxAR/RU0VreBCUFIo7UIRUqEroUJLVyJ02x9QaKHrLtq/oKUUpKvSdV0VoRulBEG0JJpR44+aTExiMvPuPaeLN5lQ2x54D+65j885993v+crZz645/4ju0gUnQ9SpkHCB3DLMQTAQB4TivRnhXzDf3DaLHB6pcumtfYgIP/x6j9tzy2gmuNOD8r/ALs9RUkqc2Fdj6tQog+M7cHHezSO/XH/A9OwLyDJwR16Bhk2WI9284hwcrTJ1apTjxxt81emwps7nx3YylSDv3Ofu43VS7wcVUAG0B3PBXcgEdg2U+PDsOG+cGOZ5jDQ9Z94TC9GYPN7g/XMHGa4HsgzEpfsUWMWLAgJkRBp14eOLRzi6t455YixkvBeUDzTjoAZM4OieOh9fPMbueongEe0d2VEXBxGiJQ4M93PlwhH276pRDoqIUBI4Hyqcz8pk4kWulLGnsZXL70ywf2QL0SJO0WIIYiQpcWhvjbdf38nE2CC5wbV7OQ9XjLGqMDlWwgWuz0XmVpzRmjM5Eji8ZzvnTo9RuvGMO3OriIBcvnrPV2NgohE4s7ePTJU7C86NVomyRE7WE2utZRZXE82lyFJHKKVF1m/+xMulBXB43mrzvNVBRAhP/rxBa1XJZw2ZEYI4TR/gafU1tvc7z1S4df8FFRfWOhGLQifvMHv/MU8ePcQMREGl0Ka8+dGPLgJu4BF2bqvwyaWTfDc/xPXH4O40thpfninz/bTx2wPh9AhcmVjn66u3eLq0hoj0pBMqtRHEQUjgTq3ex67hBvZXiRUvdDW/bnz7B8wsBVZESJlTq1aIrrSjdIHFTQfFMTXcHHMnOkR3zCF1P3uZC7/PG6iCFrmeiHFMQLsWEBbtNn1a5VA2jmrGYKmfIMpudY5oQivGtpoytyDUvMPDFBBXRKAeKvSFosKGEtU1kHmZdjTWUyK5kQHJnVUzDg8KX5wOTGw3TIr8RrQt8TLltGOkHXPaMUfrNk7wBo/IabLGI1smx5g3ZSaVaXnG8Bbn08nAYCOw7IrjGLBiOQ+8TVPWadKmSZuAOI6jruCyOUTuuAnujgoM90MVw5KSKG5VETIE9WLaem4jPccohrqkwtSBjKODcGAAgijgXNgPx3Yo+waUssRNrxHpWe0rBiu0c2N6ZpGhWomhLSC5cPNusTckzlDVsQjTsx3aeexZ3n8arIjSWja++fk2Ilb07pvFpGt1LoAX4A3xbMTfU7u3vspnhj4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQtMTJUMDM6MzA6MjcrMDA6MDBRcNLMAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTEyVDAzOjMwOjI3KzAwOjAwIC1qcAAAAABJRU5ErkJggg==",
asSource: false,
asTarget: false,
search: {
path: "/search",
params: {
query: "{name}"
}
}
},
zimuku: {
url: "http://zimuku.org",
host: "zimuku.org",
siteType: "subtitles",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACHDwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAACXlBMVEUbbZ0ZbJwAWpCpx9n///4DWIoZbJ0abJwEXpP6/P3///+5yNEAW5EIYZbK1NlMgJ8QaJsZa5wDXpQAQ3rd4+b///0AUIMDXpMYbJ0OZJcYX4kYbJ4LYZQTR2UYbqEabJ0AWo8FQGIab6EAGC4ALU8ALU0ALE0AIUMAPWIBXJETTW4WcKYZcKIacKMMZpoKRmkZbqARZZcJRGUnd6YWaZoNZJcMY5YJYZUIYpUeU3MYbaAPZ5qjq7CnpKOZlZNCa4MOWodzjJuBhol8foAISG0bb6EabZ0KYJIHW4wAV4pbmLshUm8MZ50NZJgOZpkbbZ4SaJtYkrUjVHIXbaAPZpgrUGYVPVQOOlQKOFMLOFMAK0oiRVr08vBeX2AJTXUbb6AXbqEYb6IZcKMSa6AAXJWHtdC4sawAHzQMYpUbcKIRZ5k4fqjs8vZFTE8APWYac6gbbp4Ya5sgb53l3dkCHzAOZJgccaMIYZUBXJICXZIASoWkpKQAEjcAY50CXpQCXJIWa50HYJTW4+z9/f33+fr2+Prz9vjy8/T1/P/9/f4oapEXa53n7fM1YHgVbJ/09/s5ZHwVa50+c5NXZm9DW2k/WWk+WWkqSVv5+fmLkpc1U2Q/WmpOZXNmdn+EiIoLQ2QacKEVa5wSap4TbKAUbKD6+/xthJMJaKASa58QaZ0OZZn7/PxxhpQPaJwOZZcAVY32+PlmnLyArcdqnr1kmrtwhZIGYJTf6O5OanoTa59tnboAMU8acKIWapsoc5/99PA6Q0cQZpgSaZyFkplXanY2VGYJNU8ANlsSaJobbp8uYKy2AAAAAWJLR0QKaND0VgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB+UGBAQjFV4CeTAAAAGYSURBVDjLY2BAAEYmZhZWNgacgJ2Dk4uLmwebDBTw8nFxcfELsMMBVF6QAwqEhEW4uETFxGF8DgmIzZJcuICUNFiBDE4FsnIgBfIKOBUoKoHt4AEylVVUUYGaOlBUA6yAXRPI1NLW0UUBOnpAUX0DsBsMgUwjYxNTM2RgbgEUtbQCm2BtY2tnj2G/g6OTs4sr2A1u7h6eXhgKvH18/VxhQekfEIihICgYObDdQkLDwiMigSAiKjoGJB8bF48SHW4JiUkgkJySCpJOS8/IxBqhWdk5IPncvPwClMiEsQqLQNLFJaVlyBLs5ZoVlVBQBZSvrqmtA3MqNOsbQAoam7iaW1ohoA2ooL0Dwm7p5OLq6gYq4OjBGVlcvX0gBf24FUwAKZg4afKUqdMgYPoMLq6ZsyDs2XPmzpu/AOSIhYsWL4GClKVcXMuWQzkrVq5SQg+HitVcXGvW4k74lCrIWheyfgMeBVkbN23eAvTaVlwKtm2H+H3HThwKQnZBFOzeg0PB3n0g6f0HDvrjUMB+6PCRo8eOnziJKgwAyLSNK8OfEhgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDYtMDRUMDQ6MzU6MjErMDA6MDAJeY68AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA2LTA0VDA0OjM1OjIxKzAwOjAweCQ2AAAAAABJRU5ErkJggg==",
asSource: false,
asTarget: false,
search: {
path: "/search",
params: {
q: "{imdb}"
}
}
},
"豆瓣电影": {
url: "https://search.douban.com",
host: "search.douban.com",
siteType: "douban",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAMAAACecocUAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA2FBMVEUWgSUAdQ4AdA0AdQ0NfR1sr3aZyKCWx50KexlUn110r3tyrnlWn14LehoAdhAegiuGuYuRwJaOvpOOv5OGuowhgiwCdhEAdg8wjT3j7+WgyqRdo2Fgpmadx5/i7+QHdRR3sn8efyojgi9zsHvf7eIJdRUpiTbS5dWz1biv0rRipmnw9/FPmlgngzPu9e9cpWYMdRcHehcdhCtLnVbY6dp1r3wthTZInVQihC4VeR8oizaq0LDR5dTY6dvV59jO49Gr0LApizYhhjAwjz07lUg6lUc6lUj///+7fLO6AAAAAWJLR0RHYL3JewAAAAd0SU1FB+UEDxExDPWxFNkAAAB/SURBVAjXFcbZAoFAAAXQWyqEKEtDTMJUyF7WCm3//0nMeTqAINY4UQAkWalziiyh0VRbnNruQOv2dKNv6IPhCCYZT6ypNaPE/p/OnYWzXBEG0/Wov/ap5zJo9mYb7IL9gR1xOl/C6BqFt/sDz1ecpO80iT9fZHlRVkVVFnn2A2t6DyUkoLRcAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTE1VDE3OjQ5OjEyKzAwOjAw+Ka3VAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xNVQxNzo0OToxMiswMDowMIn7D+gAAAAASUVORK5CYII=",
asSource: false,
asTarget: false,
search: {
path: "/movie/subject_search",
params: {
search_text: "{imdb}"
}
}
},
"豆瓣读书": {
url: "https://search.douban.com",
host: "search.douban.com",
siteType: "doubanBook",
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAMAAACecocUAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA2FBMVEUWgSUAdQ4AdA0AdQ0NfR1sr3aZyKCWx50KexlUn110r3tyrnlWn14LehoAdhAegiuGuYuRwJaOvpOOv5OGuowhgiwCdhEAdg8wjT3j7+WgyqRdo2Fgpmadx5/i7+QHdRR3sn8efyojgi9zsHvf7eIJdRUpiTbS5dWz1biv0rRipmnw9/FPmlgngzPu9e9cpWYMdRcHehcdhCtLnVbY6dp1r3wthTZInVQihC4VeR8oizaq0LDR5dTY6dvV59jO49Gr0LApizYhhjAwjz07lUg6lUc6lUj///+7fLO6AAAAAWJLR0RHYL3JewAAAAd0SU1FB+UEDxExDPWxFNkAAAB/SURBVAjXFcbZAoFAAAXQWyqEKEtDTMJUyF7WCm3//0nMeTqAINY4UQAkWalziiyh0VRbnNruQOv2dKNv6IPhCCYZT6ypNaPE/p/OnYWzXBEG0/Wov/ap5zJo9mYb7IL9gR1xOl/C6BqFt/sDz1ecpO80iT9fZHlRVkVVFnn2A2t6DyUkoLRcAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA0LTE1VDE3OjQ5OjEyKzAwOjAw+Ka3VAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNC0xNVQxNzo0OToxMiswMDowMIn7D+gAAAAASUVORK5CYII=",
asSource: false,
asTarget: false,
search: {
path: "/book/subject_search?search_text={name}"
}
}
};
const BROWSER_LANGUAGE = navigator.language.toLowerCase().split("-")[0];
const getSiteName = (host) => {
let siteName = "";
try {
Object.keys(PT_SITE).forEach((key) => {
const siteKey = key;
const hostName = PT_SITE[siteKey].host;
const matchReg = new RegExp(hostName, "i");
if (hostName && host.match(matchReg)) {
siteName = siteKey;
}
});
return siteName;
} catch (error) {
if (error.message !== "end loop") {
console.log(error);
}
return "";
}
};
const CHINESE_REGEX = /[\u4e00-\u9fa5]+/;
const getSortedSiteKeys = () => {
return Object.keys(PT_SITE).sort((a2, b) => {
const aHasChinese = CHINESE_REGEX.test(a2);
const bHasChinese = CHINESE_REGEX.test(b);
if (aHasChinese && !bHasChinese) return 1;
if (!aHasChinese && bHasChinese) return -1;
return a2.toLowerCase().localeCompare(b.toLowerCase());
});
};
const SORTED_SITE_KEYS = getSortedSiteKeys();
const CURRENT_SITE_NAME = getSiteName(location.host);
const CURRENT_SITE_INFO = CURRENT_SITE_NAME ? PT_SITE[CURRENT_SITE_NAME] : void 0;
const CONFIG$4 = {
URLS: {
IMGBOX: "https://imgbox.com",
PTPIMG: "https://ptpimg.me",
HDB_UPLOAD: "https://img.hdbits.org/upload_api.php",
IMGBOX_UPLOAD: "https://imgbox.com/upload/process",
PIXHOST_UPLOAD: "https://pixhost.to/remote/",
PTPIMG_UPLOAD: "https://ptpimg.me/upload.php",
IMGBB: "https://imgbb.com/json"
},
ERROR_MESSAGES: {
UPLOAD_FAILED: "上传失败,请重试",
PTPIMG_UPLOAD_FAILED: "ptpimg上传失败",
NO_API_KEY: "请到配置面板中填入ptpimg的api_key",
NO_TRANSFER_NEEDED: "无需转存"
},
FILTER_IMGS_NAMES: [
"poster.jpg",
"2019/01/04/info.png",
"MoreScreens",
"PTer.png",
"ms.png",
"trans.gif",
"PTerREMUX.png",
"PTerWEB.png",
"CS.png",
"Ourbits_info",
"GDJT",
"douban",
"logo",
"2019/03/28/5c9cb8f8216d7.png",
"_front",
"info_01.png",
"screens.png",
"04/6b/Ggp5ReQb_o",
"ce/e7/KCmGFMOB_o"
]
};
const en$1 = {
"豆瓣链接获取失败": "Failed to retrieve Douban link",
"豆瓣ID获取失败": "Failed to retrieve Douban ID",
"获取豆瓣信息失败": "Failed to retrieve Douban information",
"缺少IMDB信息": "IMDB information missing",
"获取失败": "Retrieval failed",
"获取成功": "Retrieved successfully",
"请求失败": "Request failed",
"上传失败,请重试": "Upload failed, please try again",
"封面上传失败": "Poster upload failed",
"ptpimg上传失败": "PtpImg upload failed",
"请到配置面板中填入ptpimg的api_key": "Please enter your PtpImg API key in the settings panel",
"数据加载中...": "Loading data...",
"获取图片列表失败": "Failed to retrieve image list",
"转换中...": "Converting...",
"转换成功!": "Conversion successful!",
"获取中...": "Retrieving...",
"缺少豆瓣链接": "Douban link missing",
"本种子可能禁止转载,确定要继续转载么?": "This torrent may be prohibited from transfer. Are you sure you want to continue?",
"手动输入豆瓣链接": "Enter Douban link manually",
"获取豆瓣简介": "Retrieve Douban info",
"获取豆瓣读书简介": "Retrieve Douban Book info",
"转缩略图": "Convert to thumbnails",
"快速检索": "Quick search",
"一键群转": "Batch transfer",
"快捷操作": "Quick actions",
"一键转种": "One-click transfer",
"转种站点启用": "Enable sites for transfer",
"批量转种启用": "Enable sites for batch transfer",
"一键批量转发到以下选中的站点": "One-click batch transfer to selected sites below",
"站点搜索启用": "Enable sites for search",
"图床配置": "Image hosting settings",
"如何获取?": "How to obtain?",
"额外功能关闭": "Disable extra features",
"关闭转缩略图功能": "Disable thumbnail conversion",
"关闭站点图标显示": "Hide site icons",
"关闭转存图片功能": "Disable image rehosting",
"保存": "Save",
"取消": "Cancel",
"错误": "Error",
"成功": "Success",
"保存本地站点设置失败": "Failed to save local site settings",
"请先设置群转列表": "Please configure batch transfer list first",
"转种页面已打开,请前往对应页面操作": "Transfer pages opened. Please navigate to the corresponding pages to proceed",
"提示": "Tip",
"转存截图": "Rehost screenshots",
"无需转存": "No upload needed",
"上传中,请稍候...": "Uploading, please wait...",
"不显示致谢内容": "Hide acknowledgments",
"拷贝": "Copy",
"已拷贝": "Copied",
"不显示豆瓣按钮和豆瓣链接": "Hide Douban button and link field",
"请填写正确链接": "Please enter a valid link",
"批量检索": "Batch search",
"同时打开多个搜索标签页": "Open multiple search tabs simultaneously",
"豆瓣配置": "Douban configuration",
"关闭快速检索": "Disable quick search",
"种子文件下载失败": "Torrent file download failed",
"请手动下载": "Please download manually",
"获取页面配置": "Retrieve page configuration",
"配置已复制到剪贴板,请黏贴到创建的Github Issue中": "Configuration copied to clipboard. Please paste it into a new GitHub issue"
};
const ko = {
"豆瓣链接获取失败": "더우반 링크 얻기 실패",
"豆瓣ID获取失败": "더우반 ID 아이디 얻기 실패",
"获取豆瓣信息失败": "더우반 데이터 얻기 실패",
"缺少IMDB信息": "누락된 IMDB 정보",
"获取失败": "요청 실패",
"获取成功": "데이터 요청 성공",
"请求失败": "요청 실패",
"上传失败,请重试": "업로드 실패, 다시 시도하세요.",
"ptpimg上传失败": "PtpImg 업로드 실패",
"请到配置面板中填入ptpimg的api_key": "설정 패널에 ptpimg의 API_KEY를 입력하세요.",
"封面上传失败": "포스터 업로드 실패",
"数据加载中...": "데이터 불러오기 중...",
"获取图片列表失败": "이미지 목록 얻기 실패",
"转换中...": "변환 중...",
"转换成功!": "변환됨!",
"获取中...": "요청 중...",
"缺少豆瓣链接": "더우반 링크 누락",
"本种子可能禁止转载,确定要继续转载么?": "이 토렌트의 전송이 금지될 수 있습니다, 계속하겠습니까?",
"手动输入豆瓣链接": "더우반 링크 입력",
"获取豆瓣简介": "더우반의 데이터 얻기",
"获取豆瓣读书简介": "더우반 도서 데이터 얻기",
"转缩略图": "썸네일로 변환",
"快速检索": "빠른 검색",
"一键群转": "일괄 전송",
"快捷操作": "빠른 작업",
"一键转种": "전송 대상",
"转种站点启用": "전송 대상 섹션의 사이트 선택",
"批量转种启用": "일괄 전송 버튼을 사용할 사이트 선택",
"一键批量转发到以下选中的站点": "아래에서 선택한 사이트로 원클릭 일괄 전송하기",
"站点搜索启用": "빠른 검색 섹션에서 사이트 선택",
"图床配置": "이미지 호스트 설정",
"如何获取?": "어떻게 얻나요?",
"额外功能关闭": "추가 기능 끄기",
"关闭转缩略图功能": "썸네일로 변환 버튼 제거하기",
"关闭站点图标显示": "아이콘 제거하기",
"关闭转存图片功能": "이미지 리호스팅 기능 끄기",
"保存": "저장",
"取消": "취소",
"错误": "오류",
"成功": "성공",
"保存本地站点设置失败": "로컬 사이트 설정 저장 실패",
"请先设置群转列表": "먼저 일괄 전송 목록 설정",
"转种页面已打开,请前往对应页面操作": "전송 페이지가 열렸고, 해당 페이지로 이동하여 작업",
"提示": "힌트",
"转存截图": "다른 호스트에 스크린샷 업로드",
"无需转存": "업로드할 필요 없음",
"上传中,请稍候...": "업로드 중, 잠시만 기다려주세요.",
"不显示致谢内容": "감사 내용을 포함하지 않음",
"拷贝": "복사",
"已拷贝": "복사됨",
"不显示豆瓣按钮和豆瓣链接": "더우반 버튼 및 링크 필드 숨기기",
"请填写正确链接": "올바른 링크를 입력하세요.",
"批量检索": "일괄 검색",
"同时打开多个搜索标签页": "여러 검색 탭 동시에 열기",
"豆瓣配置": "더우반 구성",
"关闭快速检索": "빠른검색 비활성화",
"种子文件下载失败": "토렌트 파일 다운로드 실패",
"请手动下载": "수동으로 다운로드해주세요",
"配置已复制到剪贴板,请黏贴到创建的Github Issue中": "설정이 클립보드에 복사되었습니다. 생성한 Github Issue에 붙여넣으세요.",
"获取页面配置": "페이지 설정 가져오기"
};
const i18nConfig = {
en: en$1,
ko
};
class HTMLToBBCodeConverter {
constructor(siteInfo) {
this.convertRgbToHex = (rgb) => {
const rgbMatch = rgb == null ? void 0 : rgb.match(
/^rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*/i
);
if (!rgbMatch || rgbMatch.length < 4) {
return "";
}
const hexComponents = rgbMatch.slice(1, 4).map((component) => {
return `0${parseInt(component, 10).toString(16)}`.slice(-2);
});
return `#${hexComponents.join("")}`;
};
this.siteInfo = siteInfo;
}
/**
* Check if the site matches the given site match
*
* @private
* @param {SiteMatch} siteMatch
* @returns {boolean}
*/
isMatchingSite(siteMatch) {
const { siteName } = this.siteInfo;
if (typeof siteMatch === "string") {
return siteName === siteMatch;
}
return !!siteName.match(siteMatch);
}
/**
* Check if the text is a special control text (should be ignored)
*
* @private
* @param {string} text
* @returns {boolean}
*/
isSpecialControlText(text2) {
return !!text2.trim().match(
/^(引用|Quote|代码|代碼|Show|Hide|Hidden text|Hidden content|\[show\]|\[Show\])/
);
}
/**
* Normalize the color format
*
* @private
* @param {string} color
* @returns {string}
*/
normalizeColorFormat(color) {
return /rgba?/.test(color) ? this.convertRgbToHex(color) : color;
}
/**
* Add BBCode tags to the accumulator
*
* @private
* @param {BBCodeTagsAccumulator} accumulator
* @param {string | null} openTag
* @param {string | null
* @returns {void}
*/
addBBCodeTags(accumulator, openTag, closeTag = null) {
if (openTag !== null) accumulator.openingTags.push(openTag);
if (closeTag !== null) accumulator.closingTags.unshift(closeTag);
}
/**
* Convert image element to BBCode
*
* @private
* @param {HTMLImageElement} imgElement
* @returns {string}
*/
convertImageToBBCode(imgElement) {
const { src, title } = imgElement;
const dataSrc = imgElement.getAttribute("data-src") || imgElement.getAttribute("data-echo");
if (title === ":m:") {
return ":m:";
}
const imgUrl = this.determineImageUrl(src, dataSrc);
if (!imgUrl) return "";
return `[img]${imgUrl}[/img]`;
}
/**
* Determine the image URL
*
* @private
* @param {string} src
* @param {string | null} dataSrc
* @returns {string}
*/
determineImageUrl(src, dataSrc) {
if (dataSrc) {
return dataSrc.match(/(http(s)?:)?\/\//) ? dataSrc : `${location.origin}/${dataSrc}`;
}
if (src && !src.match(/ico_\w+.gif|jinzhuan|thumbsup|kralimarko/)) {
return src;
}
return "";
}
/**
* Convert anchor element to BBCode
*
* @private
* @param {HTMLAnchorElement} anchorElement
* @returns {BBCodeConverterResult}
*/
convertLinkToBBCode(anchorElement) {
const { href, textContent } = anchorElement;
if (!href || href.length === 0) {
return {};
}
if (this.isMatchingSite("HDSpace")) {
const div = anchorElement.querySelector("div");
if (div && div.id) {
const img = div.querySelector("img");
if (img) {
const imgUrl = img.getAttribute("src");
return {
content: `[url=${href}][img]${imgUrl}[/img][/url]`
};
}
}
}
if (href.match(/javascript:void/) || textContent === "show" && this.isMatchingSite("HDT")) {
return {};
}
return {
openTag: `[url=${href}]`,
closeTag: "[/url]"
};
}
/**
* handle special cases for div element
*
* @private
* @param {HTMLElement} element
* @param {BBCodeTagsAccumulator} accumulator
* @returns {(string | null)}
*/
handleSpecialDivElement(element, accumulator) {
var _a2, _b;
const { className, id } = element;
const { siteType } = this.siteInfo;
const addTags = this.addBBCodeTags.bind(this, accumulator);
if (className === "codemain") {
if (element.children.length > 0) {
addTags("\n[quote]", "[/quote]");
return null;
}
return "";
}
if (className === "hidden" && this.isMatchingSite("HDT")) {
addTags("\n[quote]", "[/quote]");
return null;
}
if (className.match("spoiler") && this.isMatchingSite("KG")) {
if (className === "spoiler-content") {
addTags("\n[quote]", "[/quote]");
} else if (className === "spoiler-header") {
return "";
}
return null;
}
if (this.isMatchingSite("BeyondHD")) {
if (className === "spoilerChild") {
const firstChildTag = (_b = (_a2 = element.children[0]) == null ? void 0 : _a2.tagName) == null ? void 0 : _b.toUpperCase();
if (firstChildTag === "BLOCKQUOTE" || firstChildTag === "PRE") {
addTags("\n", "");
} else {
addTags("\n[quote]", "[/quote]");
}
} else if (id === "screenMain") {
return "\n";
} else if (className === "spoilerHide") {
return "";
}
return null;
}
if (siteType === "AvistaZ") {
if (className === "spoiler-text") {
addTags("\n[quote]", "[/quote]");
return null;
}
if (className === "spoiler-toggle") {
return "";
}
}
if (className.match(/codetop|highlight/)) {
return "";
}
addTags("\n", "\n");
return null;
}
/**
* handle special cases for TD element
*
* @private
* @param {BBCodeTagsAccumulator} accumulator
* @returns {(string | null)}
*/
handleTDElement(accumulator) {
const { siteType } = this.siteInfo;
const addTags = this.addBBCodeTags.bind(this, accumulator);
if (this.isMatchingSite(/^(TTG|HDBits|KG|HDSpace)/) || this.isMatchingSite("HDT") || siteType === "UNIT3D") {
addTags("[quote]", "[/quote]");
} else if (this.isMatchingSite("EMP")) {
addTags("");
} else if (this.isMatchingSite("PTer")) {
addTags(null, null);
} else {
return "";
}
return null;
}
/**
* handle BR element
*
* @private
* @param {BBCodeTagsAccumulator} accumulator
* @returns {void}
*/
handleBRElement(accumulator) {
const { siteType } = this.siteInfo;
const siteName = this.siteInfo.siteName;
const addTags = this.addBBCodeTags.bind(this, accumulator);
if (siteType === "NexusPHP" && siteName !== "OurBits" || (siteName == null ? void 0 : siteName.match(/^(UHDBits|HDBits|BTN)/))) {
addTags("");
} else {
addTags("\n");
}
}
/**
* handle inline styles
*
* @private
* @param {HTMLElement} element
* @param {BBCodeTagsAccumulator} accumulator
* @returns {void}
*/
handleInlineStyles(element, accumulator) {
const { style } = element;
const addTags = this.addBBCodeTags.bind(this, accumulator);
if (style.textAlign) {
const alignment = style.textAlign.toUpperCase();
if (alignment === "LEFT") addTags("[left]", "[/left]");
else if (alignment === "RIGHT") addTags("[right]", "[/right]");
else if (alignment === "CENTER") addTags("[center]", "[/center]");
}
if (style.fontWeight === "bold" || parseInt(style.fontWeight, 10) >= 600) {
addTags("[b]", "[/b]");
}
if (style.fontStyle === "italic") {
addTags("[i]", "[/i]");
}
if (style.textDecoration === "underline" || style.textDecoration === "overline") {
addTags("[u]", "[/u]");
}
if (style.textDecoration === "line-through") {
addTags("[s]", "[/s]");
}
if (style.color && style.color.trim() !== "") {
addTags(`[color=${this.normalizeColorFormat(style.color)}]`, "[/color]");
}
}
/**
* handle element by tag name
*
* @private
* @param {string} tagName
* @param {HTMLElement} element
* @param {BBCodeTagsAccumulator} accumulator
* @returns {(string | null)}
*/
handleElementByTagName(tagName, element, accumulator) {
var _a2, _b, _c;
const addTags = this.addBBCodeTags.bind(this, accumulator);
const { siteType } = this.siteInfo;
switch (tagName) {
case "SCRIPT":
return "";
case "UL":
addTags(null, null);
break;
case "OL":
addTags("[list=1]", "[/list]");
break;
case "LI": {
const { className } = element;
if (siteType === "UNIT3D" && className) {
return `[quote]${(_a2 = element.textContent) == null ? void 0 : _a2.trim()}[/quote]`;
}
addTags("[*]", "\n");
break;
}
case "B":
addTags("[b]", "[/b]");
break;
case "U":
addTags("[u]", "[/u]");
break;
case "I":
addTags("[i]", "[/i]");
break;
case "DIV":
return this.handleSpecialDivElement(element, accumulator);
case "P":
addTags("\n");
break;
case "BR":
this.handleBRElement(accumulator);
break;
case "SPAN": {
const { className } = element;
if (className == null ? void 0 : className.match(/size/)) {
const matchSize = (_c = (_b = className.match(/size(\d)/)) == null ? void 0 : _b[1]) != null ? _c : "";
if (matchSize) {
addTags(`[size=${matchSize}]`, "[/size]");
}
} else {
addTags(null, null);
}
break;
}
case "BLOCKQUOTE":
case "PRE":
case "FIELDSET":
addTags("[quote]", "[/quote]");
break;
case "CENTER":
addTags("[center]", "[/center]");
break;
case "TD":
return this.handleTDElement(accumulator);
case "IMG":
return this.convertImageToBBCode(element);
case "FONT": {
const fontElement = element;
if (fontElement.color) {
addTags(
`[color=${this.normalizeColorFormat(fontElement.color)}]`,
"[/color]"
);
}
if (fontElement.size) {
addTags(`[size=${fontElement.size}]`, "[/size]");
}
break;
}
case "A": {
const result = this.convertLinkToBBCode(element);
if (result.content) return result.content;
if (result.openTag) addTags(result.openTag, result.closeTag);
if (Object.keys(result).length < 1) return "";
break;
}
case "H1":
addTags('[b][size="7"]', "[/size][/b]\n");
break;
case "H2":
addTags('[b][size="6"]', "[/size][/b]\n");
break;
case "H3":
addTags('[b][size="5"]', "[/size][/b]\n");
break;
case "H4":
addTags('[b][size="4"]', "[/size][/b]\n");
break;
case "STRONG":
addTags("[b]", "[/b]");
break;
case "TABLE": {
if (this.isMatchingSite("PTer") && element.className === "table") {
return "";
}
addTags("");
break;
}
case "TH":
addTags("");
break;
default:
addTags(null, null);
}
return null;
}
/**
* Convert HTML node to BBCode
*
* @param {Element | ChildNode} node
* @returns {string}
*/
convert(node) {
if (node.nodeType === 3) {
const textContent = node.textContent;
if (this.isSpecialControlText(textContent)) {
return "";
}
return textContent;
}
if (node.nodeType !== 1) {
return "";
}
const element = node;
const tagName = element.tagName.toUpperCase();
const accumulator = {
openingTags: [],
closingTags: []
};
const specialTagResult = this.handleElementByTagName(
tagName,
element,
accumulator
);
if (specialTagResult !== null) {
return specialTagResult;
}
this.handleInlineStyles(element, accumulator);
const bbCodeParts = [];
element.childNodes.forEach((childNode) => {
const childCode = this.convert(childNode);
if (childCode) {
bbCodeParts.push(childCode);
}
});
return accumulator.openingTags.concat(bbCodeParts).concat(accumulator.closingTags).join("");
}
}
class NetworkError extends Error {
constructor(message, status, statusText) {
super(message);
this.name = "NetworkError";
this.status = status;
this.statusText = statusText;
}
}
class TimeoutError extends Error {
constructor(message = "Request timed out") {
super(message);
this.name = "TimeoutError";
}
}
const getLocationSearchValueByKey = (key) => {
const reg = new RegExp(`(^|&)${key}=([^&]*)(&|$)`);
const regArray = window.location.search.substring(1).match(reg);
if (regArray) {
return decodeURIComponent(regArray[2]);
}
return "";
};
const convertSizeStringToBytes = (size) => {
if (!size) {
return 0;
}
const sizeFloat = parseFloat(size);
if (isNaN(sizeFloat)) {
return 0;
}
if (size.match(/bytes/)) {
return sizeFloat;
} else if (size.match(/T/i)) {
return sizeFloat * 1024 ** 4;
} else if (size.match(/G/i)) {
return sizeFloat * 1024 ** 3;
} else if (size.match(/M/i)) {
return sizeFloat * 1024 ** 2;
} else if (size.match(/K/i)) {
return sizeFloat * 1024;
}
return sizeFloat;
};
const $t$1 = (key) => {
const languageKey = BROWSER_LANGUAGE;
const translations = i18nConfig[languageKey];
if (!translations) {
return key;
}
return key in translations ? translations[key] : key;
};
const htmlToBBCode = (node) => {
const converter = new HTMLToBBCodeConverter({
siteType: CURRENT_SITE_INFO.siteType,
siteName: CURRENT_SITE_NAME
});
return converter.convert(node);
};
const createFormData = (fields, files) => {
const formData = new FormData();
Object.entries(fields).forEach(([key, value]) => {
if (value instanceof File) {
throw new Error("Files should be passed as a separate argument");
}
formData.append(key, String(value));
});
if (files) {
files.forEach(({ fieldName, file }) => {
if (Array.isArray(file)) {
file.forEach((f2, index) => {
formData.append(`${fieldName}[${index}]`, f2);
});
} else {
formData.append(fieldName, file);
}
});
}
return formData;
};
const GMFetch = (url, options2) => {
return new Promise((resolve28, reject) => {
const finalOptions = __spreadValues({
method: "GET"
}, options2);
GM_xmlhttpRequest(__spreadProps(__spreadValues({
url
}, finalOptions), {
onload: (res) => {
const { statusText, status, response, responseText } = res;
if (status >= 200 && status < 300) {
if (finalOptions.responseType === "json" && typeof response === "undefined" && responseText) {
try {
resolve28(JSON.parse(responseText));
} catch (e2) {
reject(
new Error(
`Failed to parse JSON: ${e2 instanceof Error ? e2.message : String(e2)}`
)
);
}
} else {
resolve28(response);
}
} else {
reject(
new NetworkError(
statusText || `Request failed with status ${status}`,
status
)
);
}
},
ontimeout: () => {
reject(
new TimeoutError(
`Request to ${url} timed out after ${finalOptions.timeout}ms`
)
);
},
onprogress: finalOptions == null ? void 0 : finalOptions.onprogress,
onerror: (error) => {
const errorMessage = error.error || error.statusText || "Unknown network error";
reject(new NetworkError(errorMessage, error.status, error.statusText));
}
}));
});
};
const getOriginalImgUrl = async (urlBBcode) => {
var _a2, _b, _c;
if (!urlBBcode) {
throw new Error("Invalid BBCode - No BBCode found");
}
const urlBBCodeMatch = urlBBcode.match(/\[url=(http(s)*:([^\]]+)?)/);
const directUrlMatch = urlBBcode.match(/http(s)*:([^[])+/);
if (urlBBCodeMatch) {
const imgUrl = urlBBCodeMatch[1];
for (const strategy of URLStrategies) {
if (strategy.matches(imgUrl, urlBBcode)) {
return await strategy.transform(imgUrl, urlBBcode);
}
}
return imgUrl.trim();
} else if (urlBBcode.match(/\[img\]/)) {
return (_c = (_b = (_a2 = urlBBcode.match(/img\](([^[])+)/)) == null ? void 0 : _a2[1]) == null ? void 0 : _b.trim()) != null ? _c : "";
} else if (directUrlMatch) {
return directUrlMatch[0].trim();
}
throw new Error("Invalid BBCode - No valid image URL found");
};
const urlToFile = async (url) => {
var _a2, _b;
const filename = (_b = (_a2 = url.match(/\/([^/]+?)(\?|$)/)) == null ? void 0 : _a2[1]) != null ? _b : "filename";
const data = await GMFetch(url, {
responseType: "blob"
});
const file = new File([data], filename, { type: data.type });
return file;
};
class ImageUploadError extends Error {
constructor(message, originalError) {
super(message);
this.originalError = originalError;
this.name = "ImageUploadError";
}
}
const throwUploadError = (message, originalError) => {
const errorMessage = message || $t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED);
throw new ImageUploadError(errorMessage, originalError);
};
const urlFileCache = /* @__PURE__ */ new Map();
const cachedUrlToFile = async (url) => {
if (!url) {
throw new Error("URL is required to convert to file");
}
if (!urlFileCache.has(url)) {
urlFileCache.set(url, urlToFile(url));
}
return urlFileCache.get(url);
};
class HdBitsStrategy {
matches(url) {
return url.includes("img.hdbits.org");
}
async transform(url) {
const data = await GMFetch(url);
const doc = new DOMParser().parseFromString(data, "text/html");
const imgElem = doc.querySelector("#viewimage");
if (!imgElem) {
throw new Error(
"Couldn't find image element when retrieving from HDBits"
);
}
const imgSrc = imgElem.getAttribute("src");
if (!imgSrc) {
throw new Error(
"No valid image source found when retrieving from HDBits"
);
}
return imgSrc;
}
}
class PterClubStrategy {
matches(url, bbCode) {
return bbCode.includes("img.pterclub.com");
}
async transform(url, bbCode) {
var _a2, _b;
const imgUrl = (_b = (_a2 = bbCode.match(/img\](([^[])+)/)) == null ? void 0 : _a2[1]) != null ? _b : "";
if (!imgUrl) {
throw new Error("Invalid PterClub image URL");
}
return imgUrl.replace(/\.th/g, "");
}
}
class ImageBoxStrategy {
matches(url, bbCode) {
return bbCode.includes("imgbox.com");
}
async transform(url, bbCode) {
var _a2, _b;
const imgUrl = (_b = (_a2 = bbCode.match(/img\](([^[])+)/)) == null ? void 0 : _a2[1]) != null ? _b : "";
if (!imgUrl) {
throw new Error("Invalid ImageBox image BBCode");
}
if (!imgUrl.match(/thumbs\d.+?_t\.(png|jpg)/)) {
throw new Error("Invalid ImageBox image URL");
}
return imgUrl.replace(/thumbs(\d)/, "images$1").replace(/_t(\.(png|jpg))/, "_o.$2");
}
}
class ImageBamStrategy {
matches(url) {
return url.includes("imagebam.com");
}
async transform(url) {
const originalPage = await GMFetch(url);
const doc = new DOMParser().parseFromString(originalPage, "text/html");
const imgElem = doc.querySelector(".main-image");
if (!imgElem) {
throw new Error(
"Couldn't find image element when retrieving from ImageBam"
);
}
const imgSrc = imgElem.getAttribute("src");
if (!imgSrc) {
throw new Error(
"No valid image source found when retrieving from ImageBam"
);
}
return imgSrc;
}
}
class BeyondHdStrategy {
matches(url, bbCode) {
return bbCode.includes("beyondhd.co");
}
async transform(url, bbCode) {
var _a2, _b;
const imgUrl = (_b = (_a2 = bbCode.match(/img\](([^[])+)/)) == null ? void 0 : _a2[1]) != null ? _b : "";
if (!imgUrl) {
throw new Error("Invalid BeyondHD image BBCode");
}
return imgUrl.replace(/\.(th|md)\.(png|jpg|gif)/, ".$2").replace(/cache\/t\//, "cache/i/");
}
}
class PixHostStrategy {
matches(url, bbCode) {
return bbCode.includes("pixhost.to");
}
async transform(url, bbCode) {
var _a2;
const hostNumber = (_a2 = bbCode.match(/img\]https:\/\/t(\d+)\./)) == null ? void 0 : _a2[1];
if (!hostNumber || !url.includes("show")) {
throw new Error("Invalid PixHost image BBCode");
}
return url.replace(/(pixhost\.to)\/show/, `img${hostNumber}.$1/images`);
}
}
const URLStrategies = [
new HdBitsStrategy(),
new PterClubStrategy(),
new ImageBoxStrategy(),
new ImageBamStrategy(),
new BeyondHdStrategy(),
new PixHostStrategy()
];
const withUploadErrorHandling = async (uploadFn, serviceName, options2 = {}) => {
const { validateFirstArg = true, defaultResult = [] } = options2;
return async (...args) => {
try {
if (validateFirstArg) {
const firstArg = args[0];
if (firstArg === void 0 || firstArg === null || Array.isArray(firstArg) && firstArg.length === 0) {
return defaultResult;
}
}
return await uploadFn(...args);
} catch (error) {
if (error instanceof ImageUploadError) {
throw error;
}
const errorMessage = error instanceof Error ? `${error.name}: ${error.message}` : "Unknown error";
throwUploadError(
`${$t$1(
CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED
)} - ${serviceName}. ${errorMessage}`,
error
);
return defaultResult;
}
};
};
const getImageBBCodeMatches = (bbcode) => {
const matches = bbcode.match(
/(\[url=(http(s)*:\/{2}.+?)\])?\[img\](http(s)?:.+?)\[\/img](\[\/url\])?/gi
);
if (!matches) {
return [];
}
return Array.from(matches);
};
const getImgInfoFromBBCode = async (bbcode) => {
var _a2, _b, _c;
if (!bbcode) {
throw new Error("Invalid BBCode - No BBCode found");
}
const originalUrl = await getOriginalImgUrl(bbcode);
if (!originalUrl) {
throw new Error("Invalid BBCode - No original URL found");
}
const thumbnailUrl = (_c = (_b = (_a2 = bbcode.match(/\[img\]((.|\s)*?)\[/)) == null ? void 0 : _a2[1]) == null ? void 0 : _b.trim()) != null ? _c : "";
if (!thumbnailUrl) {
throw new Error("Invalid BBCode - No thumbnail URL found");
}
return {
original: originalUrl,
thumbnail: thumbnailUrl
};
};
const extractImgsFromBBCode = async (bbcode) => {
if (!bbcode) {
return [];
}
const imgBBCodeMatches = getImageBBCodeMatches(bbcode);
const matchImgBBCodes = Array.from(imgBBCodeMatches);
if (matchImgBBCodes.length < 1) {
return [];
}
const extractOriginalUrlsOfScreenshotPromises = matchImgBBCodes.map(
async (bbcode2) => {
return await getOriginalImgUrl(bbcode2);
}
);
const { FILTER_IMGS_NAMES } = CONFIG$4;
const screenshotUrls = (await Promise.all(extractOriginalUrlsOfScreenshotPromises)).filter((url) => !FILTER_IMGS_NAMES.some((name) => url.includes(name)));
return screenshotUrls;
};
const createHDBRequestConfig = async (imgUrls, galleryName) => {
const imgFiles = await Promise.all(
imgUrls.map((item) => cachedUrlToFile(item))
);
const formData = createFormData(
{
galleryoption: "1",
galleryname: galleryName
},
[
{
fieldName: "images_files",
file: imgFiles
}
]
);
return {
url: CONFIG$4.URLS.HDB_UPLOAD,
options: {
data: formData,
method: "POST"
}
};
};
const parseHDBResponse = async (data) => {
if (!data || data.includes("error")) {
throwUploadError(`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} - ${data}`);
}
const urls = data.split(" ").filter((url) => url.trim().length > 0);
if (urls.length < 1) {
throwUploadError(
`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} - Empty Result`
);
}
const promiseResult = urls.map((urlBBcode) => {
return getImgInfoFromBBCode(urlBBcode);
});
return Promise.all(promiseResult);
};
const getImgboxToken = async () => {
var _a2, _b;
const rawHtml = await GMFetch(CONFIG$4.URLS.IMGBOX);
const authToken = (_b = (_a2 = rawHtml.match(/content="(.+)" name="csrf-token"/)) == null ? void 0 : _a2[1]) != null ? _b : "";
if (!authToken) {
throwUploadError(
`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} - Invalid AuthToken`
);
}
const tokenSecret = await GMFetch(
`${CONFIG$4.URLS.IMGBOX}/ajax/token/generate`,
{
responseType: "json",
method: "POST",
headers: {
"X-CSRF-Token": authToken
}
}
);
if (!tokenSecret || !tokenSecret.token_id || !tokenSecret.token_secret) {
throwUploadError(
`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} - Invalid Token`
);
}
return {
tokenSecret,
authToken
};
};
const createImgboxRequestConfig = (tokenSecret, authToken, file) => {
const { token_id: tokenId, token_secret: secret } = tokenSecret;
const formData = createFormData(
{
token_id: tokenId,
token_secret: secret,
content_type: "1",
thumbnail_size: "350c",
gallery_id: "null",
gallery_secret: "null",
comments_enabled: "0"
},
[{ fieldName: "files[]", file }]
);
const options2 = {
method: "POST",
responseType: "json",
headers: {
"X-CSRF-Token": authToken
},
data: formData
};
return options2;
};
const parseImgboxResponse = (data) => {
const imgResultList = data.map((result) => {
if (result && result.files && result.files.length) {
return result.files[0];
}
throwUploadError(
`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} - Empty Data to Parse`
);
return null;
}).filter((item) => item !== null);
return imgResultList.map((item) => {
return {
original: item.original_url,
thumbnail: item.thumbnail_url
};
});
};
const createPixhostRequestConfig = (imgUrls) => {
if (imgUrls.length < 1) {
throwUploadError(`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} - Empty URLs`);
}
const params = encodeURI(
`imgs=${imgUrls.join("\n")}&content_type=1&max_th_size=300`
);
const options2 = {
method: "POST",
data: params,
headers: {
Accept: "application/json",
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
}
};
return {
url: CONFIG$4.URLS.PIXHOST_UPLOAD,
options: options2
};
};
const parsePixhostResponse = (data) => {
const result = data.match(/(upload_results = )({.*})(;)/);
if (!result || result.length < 3) {
throwUploadError(
`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} - Empty Result`
);
return [];
}
const parsedData = JSON.parse(result[2]);
const imgResultList = parsedData.images;
if (!imgResultList || imgResultList.length < 1) {
throwUploadError("No images found in the response");
return [];
}
return imgResultList.map((item) => {
return {
thumbnail: item.th_url,
original: item.show_url
};
});
};
const createPTPImgRequestConfig = (imgArray) => {
const apiKey = GM_getValue("easy-upload.ptp-img-api-key", "");
if (!apiKey) {
throwUploadError(
`${$t$1(CONFIG$4.ERROR_MESSAGES.PTPIMG_UPLOAD_FAILED)} ${$t$1(CONFIG$4.ERROR_MESSAGES.NO_API_KEY)}`
);
}
const options2 = {
method: "POST",
responseType: "json"
};
const isFileUpload = imgArray.length > 0 && imgArray[0] instanceof File;
if (isFileUpload) {
const fileArray = imgArray.filter(
(item) => item instanceof File
);
const formData = createFormData({ api_key: apiKey }, [
{ fieldName: "file-upload", file: fileArray }
]);
options2.data = formData;
} else {
const linkArray = imgArray.filter(
(item) => typeof item === "string"
);
options2.headers = {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
};
options2.data = `link-upload=${linkArray.join("\n")}&api_key=${apiKey}`;
}
return {
url: CONFIG$4.URLS.PTPIMG_UPLOAD,
options: options2
};
};
const parsePTPImgResponse = (data) => {
if (!data || !Array.isArray(data) || data.length < 1) {
throwUploadError();
return [];
}
return data.map((img) => `${CONFIG$4.URLS.PTPIMG}/${img.code}.${img.ext}`);
};
const getCheveretoToken = async (imgHost) => {
var _a2, _b;
const rawHtml = await GMFetch(imgHost.replace("/json", ""));
const authToken = (_b = (_a2 = rawHtml.match(/PF\.obj\.config\.auth_token\s*=\s*"(\w+)"/)) == null ? void 0 : _a2[1]) != null ? _b : "";
if (!authToken) {
throwUploadError(
`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} - Invalid AuthToken`
);
}
return authToken;
};
const createCheveretoRequestConfig = async (imgUrl, imgHost, authToken) => {
const isHdbHost = !!imgUrl.match(/i\.hdbits\.org/);
let formData;
const options2 = {
action: "upload",
timestamp: `${Date.now()}`,
auth_token: authToken
};
if (isHdbHost || imgHost.includes("gifyu")) {
const fileData = await cachedUrlToFile(imgUrl);
formData = createFormData(
__spreadValues({
type: "file"
}, options2),
[{ fieldName: "source", file: fileData }]
);
} else {
formData = createFormData(__spreadValues({
type: "url",
source: imgUrl
}, options2));
}
return {
method: "POST",
data: formData,
responseType: "json"
};
};
const parseCheveretoResponse = (data) => {
const imgResultList = data.map((res) => {
if (res.status_txt !== "OK") {
throwUploadError(
`${$t$1(CONFIG$4.ERROR_MESSAGES.UPLOAD_FAILED)} ${res.status_txt}`
);
return null;
}
if (res.image) {
return res.image;
}
throwUploadError();
return null;
}).filter((item) => item !== null);
return imgResultList.map((item) => {
return {
original: item.url,
thumbnail: item.thumb.url
};
});
};
const uploadToHDB = withUploadErrorHandling(
async (imgUrls, galleryName) => {
const { url, options: options2 } = await createHDBRequestConfig(imgUrls, galleryName);
const data = await GMFetch(url, options2);
return await parseHDBResponse(data);
},
"HDB"
);
const uploadToImgbox = withUploadErrorHandling(
async (imgUrls) => {
const { tokenSecret, authToken } = await getImgboxToken();
const files = await Promise.all(
imgUrls.map((item) => cachedUrlToFile(item))
);
const fileUploadPromises = files.map((file) => {
const requestOptions = createImgboxRequestConfig(
tokenSecret,
authToken,
file
);
return GMFetch(CONFIG$4.URLS.IMGBOX_UPLOAD, requestOptions);
});
const data = await Promise.all(fileUploadPromises);
return parseImgboxResponse(data);
},
"Imgbox"
);
const uploadToPixhost = withUploadErrorHandling(
async (imgUrls) => {
const { url, options: options2 } = createPixhostRequestConfig(imgUrls);
const data = await GMFetch(url, options2);
return parsePixhostResponse(data);
},
"Pixhost",
{ validateFirstArg: true, defaultResult: [] }
);
const uploadToPtpImg = withUploadErrorHandling(
async (imgArray) => {
const { url, options: options2 } = createPTPImgRequestConfig(imgArray);
const data = await GMFetch(url, options2);
return parsePTPImgResponse(data);
},
"PTPImg"
);
const transferImgToCheveretoSite = withUploadErrorHandling(
async (imgUrls, imgHost = CONFIG$4.URLS.IMGBB) => {
const authToken = await getCheveretoToken(imgHost);
const imgUploadPromises = imgUrls.map(async (imgUrl) => {
const requestOptions = await createCheveretoRequestConfig(
imgUrl,
imgHost,
authToken
);
return GMFetch(imgHost, requestOptions);
});
const data = await Promise.all(imgUploadPromises);
return parseCheveretoResponse(data);
},
"Chevereto"
);
const transferImgsToPtpimg = async (imgArray) => {
if (!imgArray || imgArray.length < 1) {
return [];
}
const uploadFn = await uploadToPtpImg;
const isHdbHost = !!imgArray[0].match(/i\.hdbits\.org/);
const isPtpHost = !!imgArray[0].match(/ptpimg\.me/);
if (isPtpHost) {
throwUploadError($t$1(CONFIG$4.ERROR_MESSAGES.NO_TRANSFER_NEEDED));
} else if (isHdbHost) {
const fileArray = await Promise.all(
imgArray.map((item) => cachedUrlToFile(item))
);
return await uploadFn(fileArray);
}
return await uploadFn(imgArray);
};
const CONFIG$3 = {
CODEC_RULES: [
{ codec: "atmos", regex: /atmos/i },
{ codec: "dtshdma", regex: /dtshdma|DTSHD Master/i },
{ codec: "dtsx", regex: /dtsx/i },
{ codec: "dts", regex: /dts/i },
{ codec: "truehd", regex: /truehd/i },
{ codec: "lpcm", regex: /lpcm/i },
{ codec: "flac", regex: /flac/i },
{ codec: "aac", regex: /aac/i },
{ codec: "dd+", regex: /DD\+|DDP|DolbyDigitalPlus/i },
{ codec: "dd", regex: /DD|DolbyDigital/i },
{ codec: "ac3", regex: /ac3/i }
]
};
class MediaParser {
constructor(source) {
this.source = source;
this.result = {
fileName: "",
fileSize: 0,
duration: 0,
format: "",
audioTracks: [],
subtitleTracks: [],
videoTracks: []
};
}
getHdrType(hdrFormat) {
if (!hdrFormat) return "";
if (/Dolby\s*Vision/i.test(hdrFormat)) return "DV";
if (/HDR10\+/i.test(hdrFormat)) return "HDR10+";
if (/HDR10/i.test(hdrFormat)) return "HDR10";
if (/HLG/i.test(hdrFormat)) return "HLG";
return "";
}
}
class MediaInfoParser extends MediaParser {
splitIntoSections() {
const lines = this.source.split("\n");
const sections = {};
let currentSectionLines = {};
let currentSectionType = "";
for (const line of lines) {
const trimmedLine = line.trim();
const sectionHeaderMatch = trimmedLine.match(/^([a-zA-Z]+)(\s*#\d+)?$/);
if (sectionHeaderMatch) {
if (currentSectionType && Object.keys(currentSectionLines).length > 0) {
if (sections[currentSectionType]) {
sections[currentSectionType].push(currentSectionLines);
} else {
sections[currentSectionType] = [currentSectionLines];
}
}
currentSectionType = sectionHeaderMatch[1];
currentSectionLines = {};
continue;
}
if (currentSectionType) {
const [key, value] = trimmedLine.split(":").map((s2) => s2.trim());
if (key && value) {
currentSectionLines[key] = value;
}
}
}
if (currentSectionType && Object.keys(currentSectionLines).length > 0) {
if (sections[currentSectionType]) {
sections[currentSectionType].push(currentSectionLines);
} else {
sections[currentSectionType] = [currentSectionLines];
}
}
return sections;
}
parseGeneralSection(general) {
if (!general) return;
this.result.fileSize = convertSizeStringToBytes(general["File size"]);
this.result.duration = this.parseDuration(general.Duration);
this.result.format = general.Format;
this.result.fileName = general["Complete name"];
}
parseVideoSection(videos) {
if (!videos || videos.length === 0) return [];
const videoTracks = [];
for (const video of videos) {
videoTracks.push(this.parseVideo(video, this.result.format));
}
return videoTracks;
}
parseAudioSection(audios) {
if (!audios || audios.length === 0) return [];
const audioTracks = [];
for (const audio of audios) {
audioTracks.push(this.parseAudio(audio));
}
return audioTracks;
}
parseSubtitleSection(subtitles) {
if (!subtitles || subtitles.length === 0) return [];
const subtitleTracks = [];
for (const subtitle of subtitles) {
const {
ID: id = "",
Title: title = "",
Language: language = "",
Default: isDefault = "",
Forced: isForced = ""
} = subtitle;
subtitleTracks.push({
id,
title,
language,
default: isDefault === "Yes",
forced: isForced === "Yes"
});
}
return subtitleTracks;
}
parseAudio(audio) {
const {
Format: audioFormat = "",
"Format profile": formatProfile = "",
"Commercial name": commercialName = "",
"Channel(s)": audioChannels = "",
ID: id = "",
Default: isDefault = "",
Forced: isForced = "",
Language: language = ""
} = audio;
let channelName = "";
const channelNumber = parseInt(audioChannels, 10);
if (channelNumber && channelNumber >= 6) {
channelName = `${channelNumber - 1}.1`;
} else {
channelName = `${channelNumber}.0`;
}
const codec = this.determineAudioCodec(
audioFormat,
commercialName,
formatProfile
);
return {
channelName,
language,
default: isDefault === "Yes",
forced: isForced === "Yes",
id,
codec
};
}
parseVideo(video, generalFormat) {
const {
Format: videoFormat = "",
"Format version": videoFormatVersion = "",
"Codec ID": videoCodeId = "",
"HDR format": hdrFormat = "",
"Encoding settings": encodingSettings,
Default: isDefault = "",
Forced: isForced = "",
ID: id = "",
Width = "",
Height = "",
"Scan type": scanType = ""
} = video;
const isEncoded = !!encodingSettings;
const formatCodecMap = {
"DVD Video": "mpeg2",
"MPEG-4": "mpeg4"
};
let videoCodec = formatCodecMap[generalFormat] || "";
if (!videoCodec) {
if (videoFormat === "MPEG Video" && videoFormatVersion === "Version 2") {
videoCodec = "mpeg2";
} else if (/xvid/i.test(videoCodeId)) {
videoCodec = "xvid";
} else if (/HEVC/i.test(videoFormat)) {
videoCodec = isEncoded ? "x265" : "hevc";
} else if (/AVC/i.test(videoFormat)) {
videoCodec = isEncoded ? "x264" : "h264";
} else if (/VC-1/i.test(videoFormat)) {
videoCodec = "vc1";
} else if (/vvc/i.test(videoFormat)) {
videoCodec = "vvc";
}
}
const hdrType = this.getHdrType(hdrFormat);
const videoWidth = parseInt(Width.replace(/\s/g, ""), 10);
const videoHeight = parseInt(Height.replace(/\s/g, ""), 10);
const resolution = this.parseResolution(videoWidth, videoHeight, scanType);
return {
hdrType,
codec: videoCodec,
isEncoded,
default: isDefault === "Yes",
forced: isForced === "Yes",
id,
resolution
};
}
parseDuration(duration) {
var _a2, _b, _c, _d, _e, _f;
const hour = (_b = (_a2 = duration.match(/(\d+)\s*h/)) == null ? void 0 : _a2[1]) != null ? _b : "0";
const minute = (_d = (_c = duration.match(/(\d+)\s*min/)) == null ? void 0 : _c[1]) != null ? _d : "0";
const second = (_f = (_e = duration.match(/(\d+)\s*s/)) == null ? void 0 : _e[1]) != null ? _f : "0";
return parseInt(hour, 10) * 3600 + parseInt(minute, 10) * 60 + parseInt(second, 10);
}
parseResolution(width, height, scanType = "") {
if (!width || !height || isNaN(width) || isNaN(height)) {
return "";
}
if (width === 7680 && height === 4320) return "4320p";
if (width === 3840 && height === 2160) return "2160p";
if (height >= 2160 || width >= 3840) {
return "2160p";
} else if (height >= 1080 || width >= 1920) {
const isProgressive = scanType === "Progressive" || !scanType;
return `1080${isProgressive ? "p" : "i"}`;
} else if (height >= 720 || width >= 1280) {
return "720p";
} else if (height >= 576 || width >= 1024) {
return "576p";
} else if (width >= 840 || height === 480) {
return "480p";
} else if (height >= 360) {
return "360p";
} else if (height >= 240) {
return "240p";
}
return `${width}x${height}`;
}
determineAudioCodec(format2, commercialName, formatProfile) {
const codecRules = [
{
match: () => /MLP FBA/i.test(format2) && /Dolby Atmos/i.test(commercialName),
codec: "atmos"
},
{ match: () => /MLP FBA/i.test(format2), codec: "truehd" },
{
match: () => /AC-3/i.test(format2) && /Dolby Digital Plus/i.test(commercialName),
codec: "dd+"
},
{ match: () => /E-AC-3/i.test(format2), codec: "dd+" },
{
match: () => /AC-3/i.test(format2) && /Dolby Digital/i.test(commercialName),
codec: "dd"
},
{ match: () => /AC-3/i.test(format2), codec: "ac3" },
{ match: () => /DTS XLL X/i.test(format2), codec: "dtsx" },
{
match: () => /DTS/i.test(format2) && /DTS-HD Master Audio/i.test(commercialName),
codec: "dtshdma"
},
{
match: () => /DTS/i.test(format2) && /MA \/ Core/i.test(formatProfile),
codec: "dtshdma"
},
{
match: () => /DTS/i.test(format2) && /High Resolution/i.test(commercialName),
codec: "dtshd"
},
{ match: () => /DTS/i.test(format2), codec: "dts" },
{ match: () => /FLAC/i.test(format2), codec: "flac" },
{ match: () => /AAC/i.test(format2), codec: "aac" },
{ match: () => /LPCM/i.test(format2), codec: "lpcm" },
{ match: () => /MP3/i.test(format2), codec: "mp3" },
{ match: () => /Opus/i.test(format2), codec: "opus" },
{ match: () => /Vorbis/i.test(format2), codec: "vorbis" }
];
const matchedRule = codecRules.find((rule) => rule.match());
return matchedRule ? matchedRule.codec : "";
}
parse() {
var _a2;
const sections = this.splitIntoSections();
this.parseGeneralSection((_a2 = sections == null ? void 0 : sections.General) == null ? void 0 : _a2[0]);
const videoTracks = this.parseVideoSection(sections == null ? void 0 : sections.Video);
const audioTracks = this.parseAudioSection(sections == null ? void 0 : sections.Audio);
const subtitleTracks = this.parseSubtitleSection(sections == null ? void 0 : sections.Text);
return __spreadProps(__spreadValues({}, this.result), {
videoTracks,
audioTracks,
subtitleTracks
});
}
}
class BDInfoParser extends MediaParser {
splitIntoSections() {
const lines = this.source.split("\n");
const sectionTypeConfig = [
{ match: /Disc Label|DISC INFO/i, typeName: "general" },
{ match: /\*?VIDEO:/i, typeName: "video" },
{ match: /\*?AUDIO:/i, typeName: "audio" },
{ match: /\*?SUBTITLE(S)?/i, typeName: "subtitle" }
];
const sections = {};
let currentSectionLines = {};
let currentSectionType = "";
let currentSectionLineIndex = 0;
for (const line of lines) {
const trimmedLine = line.trim();
const sectionHeaderMatch = sectionTypeConfig.filter(
(config) => trimmedLine.match(config.match)
);
if (sectionHeaderMatch.length > 0) {
currentSectionLineIndex = 0;
if (currentSectionType && Object.keys(currentSectionLines).length > 0) {
if (sections[currentSectionType]) {
sections[currentSectionType].push(currentSectionLines);
} else {
sections[currentSectionType] = [currentSectionLines];
}
}
currentSectionType = sectionHeaderMatch[0].typeName;
const [key, value, ...extra] = trimmedLine.split(":");
if (key && value) {
if (extra.length > 0) {
currentSectionLines = {
[key]: `${value}:${extra.join(":").trim()}`
};
} else {
currentSectionLines = {
[key]: value.trim()
};
}
} else {
currentSectionLines = {};
}
continue;
}
if (currentSectionType) {
const [key, value, ...extra] = trimmedLine.split(":").map((s2) => s2.trim());
if (key && value && !key.includes("/") && !value.includes("/")) {
if (extra.length > 0) {
currentSectionLines[key] = `${value}:${extra.join(":").trim()}`;
} else {
currentSectionLines[key] = value.trim();
}
} else if (key.trim()) {
if (!key.includes("--") && !key.match(/Bitrate\s*Description|PLAYLIST REPORT/i)) {
if (!sections[currentSectionType]) {
sections[currentSectionType] = [];
}
sections[currentSectionType].push({
[currentSectionLineIndex]: trimmedLine
});
}
}
}
}
if (currentSectionType && Object.keys(currentSectionLines).length > 0) {
if (sections[currentSectionType]) {
sections[currentSectionType].push(currentSectionLines);
} else {
sections[currentSectionType] = [currentSectionLines];
}
}
return sections;
}
parseGeneralSection(general) {
var _a2, _b;
if (!general) {
return;
}
this.result.fileSize = convertSizeStringToBytes(
(_a2 = general == null ? void 0 : general["Disc Size"]) == null ? void 0 : _a2.replace(/,/g, "")
);
this.result.duration = this.parseDuration(
(_b = general == null ? void 0 : general.Length) == null ? void 0 : _b.replace(/\s/g, "")
);
this.result.fileName = general == null ? void 0 : general["Disc Label"];
}
parseVideoSection(videos) {
if (!videos || videos.length === 0) return [];
const videoTracks = [];
for (const video of videos) {
videoTracks.push(this.parseVideo(Object.values(video)[0]));
}
return videoTracks;
}
parseVideo(video) {
var _a2, _b, _c, _d;
const videoCodec = (_b = (_a2 = video.match(/(\w|\s|-|\/)+?Video/i)) == null ? void 0 : _a2[0]) != null ? _b : "";
const codec = /HEVC/i.test(videoCodec) ? "hevc" : "h264";
const resolution = (_d = (_c = video.match(/(\d+)p/i)) == null ? void 0 : _c[0]) != null ? _d : "";
const hdrType = this.getHdrType(video);
return {
hdrType,
codec,
resolution,
default: false,
forced: false,
isEncoded: false
};
}
parseAudioSection(audios) {
if (!audios || audios.length === 0) return [];
const audioTracks = [];
for (const audio of audios) {
audioTracks.push(this.parseAudio(Object.values(audio)[0]));
}
return audioTracks;
}
parseAudio(audio) {
var _a2, _b, _c, _d, _e, _f;
const audioCodec = (_b = (_a2 = audio.match(/(\w|\s|-|\/)+?Audio/i)) == null ? void 0 : _a2[0]) != null ? _b : "";
const codec = getAudioCodecFromSource(audioCodec);
const isQuickSummaryType = /Audio\s*\//.test(audio);
let language;
if (isQuickSummaryType) {
language = audio.split("/")[0].trim();
} else {
language = (_d = (_c = audio.match(/Audio\s*(\w+)/i)) == null ? void 0 : _c[1]) != null ? _d : "";
}
const channelName = (_f = (_e = audio.match(/(\d+\.\d)/)) == null ? void 0 : _e[0]) != null ? _f : "";
return {
channelName,
language,
codec
};
}
parseSubtitleSection(subtitles) {
if (!subtitles || subtitles.length === 0) return [];
const subtitleTracks = [];
for (const subtitle of subtitles) {
subtitleTracks.push(this.parseSubtitle(Object.values(subtitle)[0]));
}
return subtitleTracks;
}
parseSubtitle(subtitle) {
var _a2, _b, _c;
const subtitleSplits = subtitle.split("/");
const firstAudioSplit = (_a2 = subtitleSplits == null ? void 0 : subtitleSplits[0]) == null ? void 0 : _a2.trim();
let language = firstAudioSplit;
if (subtitleSplits.length < 2) {
language = (_c = (_b = subtitle.match(/Graphics\s*(\w+)/)) == null ? void 0 : _b[1]) != null ? _c : "";
}
return {
language
};
}
parseDuration(duration) {
const [hour, minute, second] = duration.split(":");
return parseFloat(hour) * 3600 + parseFloat(minute) * 60 + parseFloat(second);
}
parse() {
var _a2, _b;
const sections = this.splitIntoSections();
this.parseGeneralSection(
(_b = sections == null ? void 0 : sections.general) == null ? void 0 : _b[((_a2 = sections == null ? void 0 : sections.general) == null ? void 0 : _a2.length) > 1 ? 1 : 0]
);
const videoTracks = this.parseVideoSection(sections == null ? void 0 : sections.video);
const audioTracks = this.parseAudioSection(sections == null ? void 0 : sections.audio);
const subtitleTracks = this.parseSubtitleSection(sections == null ? void 0 : sections.subtitle);
return __spreadProps(__spreadValues({}, this.result), {
videoTracks,
audioTracks,
subtitleTracks
});
}
}
const getBDTypeBasedOnSize = (size) => {
const GBSize = size / 1024 ** 3;
const DISK_TYPES = [
{ maxSize: 5, type: "DVD5" },
{ maxSize: 9, type: "DVD9" },
{ maxSize: 25, type: "BD25" },
{ maxSize: 50, type: "BD50" },
{ maxSize: 66, type: "BD66" },
{ maxSize: 100, type: "BD100" }
];
for (const { maxSize, type } of DISK_TYPES) {
if (GBSize < maxSize) {
return type;
}
}
return "Unknown";
};
const getAudioCodecFromSource = (source) => {
if (!source) {
return "";
}
const formattedSource = source.replace(/:|-|\s|\./g, "");
const { CODEC_RULES } = CONFIG$3;
for (const { codec, regex } of CODEC_RULES) {
if (regex.test(formattedSource)) {
return codec;
}
}
return "";
};
const parseMedia = (source, isBluray = false) => {
if (!source) {
return null;
}
const parser = isBluray ? new BDInfoParser(source) : new MediaInfoParser(source);
return parser.parse();
};
const CONFIG$2 = {
URLS: {
TMDB_API: "https://api.themoviedb.org",
DOUBAN_SEARCH_API: "https://omit.mkrobot.org/movie/infos",
DOUBAN_SUGGEST_API: (query) => `https://www.douban.com/search?cat=1002&q=${query}`,
DOUBAN_SUBJECT: (id) => `https://movie.douban.com/subject/${id}/`,
IMDB_URL: (id) => `https://www.imdb.com/title/${id}/`,
DOUBAN_MOBILE_API: "https://m.douban.com/rexxar/api/v2",
PT_GEN_API: (url) => `https://media.pttool.workers.dev?url=${url}`,
IMDB_RATING_API: (id) => `https://p.media-imdb.com/static-content/documents/v1/title/${id}/ratings%3Fjsonp=imdb.rating.run:imdb.api.title.ratings/data.json`,
ROTTEN_TOMATOES_API: "https://79frdp12pn-1.algolianet.com/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20JavaScript%20(4.24.0)%3B%20Browser%20(lite)&x-algolia-api-key=175588f6e5f8319b27702e4cc4013561&x-algolia-application-id=79FRDP12PN"
},
KEY: {
TMDB_API_KEY: "4a06eb7286be2d481fdb30e0a6b4ad77"
},
REGION_PATTERNS: {
US: /USA|US|Canada|CA|美国|加拿大|United States/i,
EU: /欧|英|法|德|俄|意|苏联|西班牙|EU/i,
JP: /Japan|日本|JP/i,
KR: /Korea|韩国|KR/i,
TW: /Taiwan|台湾|TW/i,
HK: /Hong\s?Kong|香港|HK/i,
IN: /India|印度|IN/i,
AU: /Australia|澳大利亚|AU/i,
CN: /CN|China|大陆|中|内地|Mainland/i
},
EUROPE_LIST: [
"Albania",
"Andorra",
"Armenia",
"Austria",
"Azerbaijan",
"Belarus",
"Belgium",
"Bosnia and Herzegovina",
"Bulgaria",
"Croatia",
"Cyprus",
"Czech Republic",
"Denmark",
"Estonia",
"Finland",
"France",
"Georgia",
"Germany",
"Greece",
"Hungary",
"Iceland",
"Ireland",
"Italy",
"Kazakhstan",
"Latvia",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Malta",
"Moldova",
"Monaco",
"Montenegro",
"Netherlands",
"North Macedonia",
"Norway",
"Poland",
"Portugal",
"Romania",
"Russia",
"San Marino",
"Serbia",
"Slovakia",
"Slovenia",
"Spain",
"Sweden",
"Switzerland",
"Turkey",
"Ukraine",
"United Kingdom",
"UK",
"Vatican City"
]
};
const getIMDBData = async (imdbUrl) => {
if (!imdbUrl) {
throw new Error("No IMDB URL provided");
}
const data = await GMFetch(
CONFIG$2.URLS.PT_GEN_API(imdbUrl),
{
responseType: "json"
}
);
if (!data || !data.success) {
throw new Error((data == null ? void 0 : data.error) || "Failed to get IMDB data");
}
return data;
};
const getIMDBRating = async (imdbId) => {
var _a2, _b, _c, _d, _e;
if (!imdbId) {
throw new Error("No IMDB ID provided");
}
const url = CONFIG$2.URLS.IMDB_RATING_API(imdbId);
const data = await GMFetch(url);
const matchData = (_b = (_a2 = data == null ? void 0 : data.match(/[^(]+\((.+)\)/)) == null ? void 0 : _a2[1]) != null ? _b : "";
if (!matchData) {
throw new Error("No rating data found");
}
try {
const ratingData = JSON.parse(matchData);
return __spreadProps(__spreadValues({}, ratingData.resource), {
id: (_e = (_d = (_c = ratingData.resource) == null ? void 0 : _c.id.match(/tt\d+/)) == null ? void 0 : _d[0]) != null ? _e : ""
});
} catch (e2) {
throw new Error("Failed to parse rating data");
}
};
const getIdByIMDbUrl = (imdbUrl) => {
const imdbIdArray = /tt\d+/.exec(imdbUrl);
if (imdbIdArray && imdbIdArray[0]) {
return imdbIdArray[0];
}
return "";
};
const NBSP = " ";
const CREDIT_INDENTATION = 24;
const FORMAT_RULES = [
{
key: "poster",
title: "",
formatter: (url) => `[img]${url}[/img]
`
},
{
key: "translatedTitle",
title: "译名",
formatter: (title) => title.join(" / ")
},
{
key: "originalTitle",
title: "片名"
},
{
key: "year",
title: "年代"
},
{
key: "countries",
title: "产地",
formatter: (countries) => countries.join(" / ")
},
{
key: "genres",
title: "类别",
formatter: (genres) => genres.join(" / ")
},
{
key: "languages",
title: "语言",
formatter: (languages) => languages.join(" / ")
},
{
key: "pubdate",
title: "上映日期",
formatter: (dates) => dates.join(" / ")
},
{
key: "imdbRating",
title: "IMDb评分"
},
{
key: "imdbLink",
title: "IMDb链接"
},
{
key: "doubanRating",
title: "豆瓣评分"
},
{
key: "doubanLink",
title: "豆瓣链接"
},
{
key: "episodes_count",
title: "集数"
},
{
key: "durations",
title: "片长",
formatter: (durations) => durations.join(" / ")
},
{
key: "tags",
title: "标签",
formatter: (tags2) => tags2.join(" | ")
},
{
key: "creditsData",
formatter: (creditsData) => `
${creditsData}`
},
{
key: "intro",
title: "简介",
formatter: (intro) => `
${intro.replace(/\n/g, `
${NBSP.repeat(2)}`)}`
},
{
key: "awards",
title: "获奖情况",
formatter: (awards) => `
${awards.replace(/\n/g, `
${NBSP.repeat(6)}`)}
`
}
];
class DoubanFormatter {
constructor(id, type, imdbId = "") {
this.doubanId = id;
this.type = type;
this.imdbId = imdbId;
}
async fetchAllData() {
try {
const [awards, credits, info, imdbData] = await Promise.all([
getDoubanAwards(this.doubanId),
getDoubanCreditsData(this.doubanId, this.type),
getMobileDoubanInfo(this.doubanId, this.type),
this.fetchIMDbData()
]);
return { awards, credits, info, imdbData };
} catch (e2) {
throw new Error(
`Failed to fetch data for Douban ID: ${this.doubanId} ${e2.message}`
);
}
}
async fetchIMDbData() {
if (!this.imdbId) {
this.imdbId = await getIMDbIDFromDouban(this.doubanId);
}
if (this.imdbId) {
return await getIMDBRating(this.imdbId);
}
return null;
}
formatPosterUrl(poster) {
if (poster.includes("img3")) {
return poster.replace("img3", "img1").replace(/m(_ratio_poster)/, "l$1");
}
return poster;
}
formatTitles(data) {
const { title, original_title: originalTitle, aka } = data;
const translatedTitle = [...aka];
if (originalTitle && originalTitle !== title) {
translatedTitle.unshift(title);
}
return {
translatedTitle: Array.from(new Set(translatedTitle)).filter(Boolean),
originalTitle: originalTitle || title
};
}
updateCredits(credits) {
if (!credits || !credits.items || credits.items.length === 0) {
return "";
}
const indentationMap = {
2: 7,
3: 2,
4: 0,
5: 0
};
const result = {};
for (const item of credits.items) {
if (!result[item.category]) {
result[item.category] = [];
}
result[item.category].push(item);
}
const creditsData = [];
for (const [category, items] of Object.entries(result)) {
const celebrity = items.map((item) => {
var _a2;
return `${item.name} ${(_a2 = item.latin_name) != null ? _a2 : ""}`;
});
const indentation = indentationMap[category.length] || 0;
const celebrityKey = category.split("").join(NBSP.repeat(indentation));
const celebrityValue = celebrity.join(`
${NBSP.repeat(CREDIT_INDENTATION)}`).trim();
creditsData.push(`◎${celebrityKey}${NBSP.repeat(7)}${celebrityValue}`);
}
return creditsData.join("\n");
}
updateRating(data, imdbRating) {
var _a2, _b;
const { value, count } = data.rating;
return {
doubanRating: value ? `${value} (${count}人评分)` : "",
imdbRating: `${(_a2 = imdbRating == null ? void 0 : imdbRating.rating) != null ? _a2 : 0}/10 from ${(_b = imdbRating == null ? void 0 : imdbRating.ratingCount) != null ? _b : 0} users`,
doubanLink: CONFIG$2.URLS.DOUBAN_SUBJECT(this.doubanId),
imdbLink: this.imdbId ? CONFIG$2.URLS.IMDB_URL(this.imdbId) : ""
};
}
generateOutput(formatData) {
const result = [];
for (const rule of FORMAT_RULES) {
const value = formatData[rule.key];
if (value) {
const formattedValue = rule.formatter ? rule.formatter(value) : value;
const { title } = rule;
if (!title) {
result.push(formattedValue);
continue;
}
let prefix = title + NBSP.repeat(7);
if (title.length === 2) {
prefix = title.split("").join(NBSP.repeat(7)) + NBSP.repeat(7);
}
result.push(`◎${prefix}${formattedValue}`);
}
}
return result.join("\n").trim();
}
async format() {
var _a2;
const data = await this.fetchAllData();
if (!(data == null ? void 0 : data.info)) {
throw new Error("failed to fetch douban info");
}
const poster = this.formatPosterUrl((_a2 = data.info) == null ? void 0 : _a2.cover_url);
const { translatedTitle, originalTitle } = this.formatTitles(data.info);
const creditsData = this.updateCredits(data == null ? void 0 : data.credits);
const { doubanRating, imdbRating, doubanLink, imdbLink } = this.updateRating(data.info, data == null ? void 0 : data.imdbData);
const formatData = __spreadProps(__spreadValues({}, data.info), {
awards: data.awards,
poster,
translatedTitle,
originalTitle,
creditsData,
doubanRating,
imdbRating,
doubanLink,
imdbLink,
format: ""
});
return __spreadProps(__spreadValues({}, formatData), {
format: this.generateOutput(formatData)
});
}
}
const getDoubanAwards = async (doubanId) => {
const url = `${CONFIG$2.URLS.DOUBAN_SUBJECT(doubanId)}awards/`;
const data = await GMFetch(url);
const doc = new DOMParser().parseFromString(data, "text/html");
const awardsDom = doc.querySelector("#content > div > div.article");
if (!awardsDom) {
return "";
}
return awardsDom == null ? void 0 : awardsDom.innerHTML.replace(/[ \n]/g, "").replace(/<\/li>
/g, " ").replace(/<\/a> ]*>/g, "\n").replace(/<[^>]+>/g, "").replace(/ /g, " ").replace(/ +\n/g, "\n").trim();
};
const getIMDbIDFromDouban = async (doubanId) => {
var _a2, _b, _c, _d;
const doubanPage = await GMFetch(
CONFIG$2.URLS.DOUBAN_SUBJECT(doubanId)
);
const dom = new DOMParser().parseFromString(doubanPage, "text/html");
const spans = dom.querySelectorAll("#info > span.pl");
const spansContainsIMDb = Array.from(spans).filter(
(span) => {
var _a3;
return (_a3 = span.textContent) == null ? void 0 : _a3.includes("IMDb");
}
);
const imdbId = (_d = (_c = (_b = (_a2 = spansContainsIMDb[0]) == null ? void 0 : _a2.nextSibling) == null ? void 0 : _b.nodeValue) == null ? void 0 : _c.trim()) != null ? _d : "";
return imdbId;
};
const getMobileDoubanInfo = async (id, type) => {
if (!id) {
throw new Error("No Douban ID found");
}
const url = `${CONFIG$2.URLS.DOUBAN_MOBILE_API}/${type}/${id}`;
const data = await GMFetch(`${url}?for_mobile=1&ck=`, {
headers: {
Referer: `https://m.douban.com/${type}/subject/${id}`
},
responseType: "json"
});
if (data && data.title === "未知电影") {
throw new Error("Please login in Douban to and try again");
}
return data;
};
const getDoubanBasicDataByQuery = async (query) => {
var _a2, _b, _c, _d;
if (!query) {
throw new Error("No query provided");
}
const imdbId = getIdByIMDbUrl(query);
const searchParams = imdbId || query;
const url = CONFIG$2.URLS.DOUBAN_SUGGEST_API(searchParams);
const data = await GMFetch(url);
const doc = new DOMParser().parseFromString(data, "text/html");
const linkDom = doc.querySelector(".result-list .result h3 a");
if (!linkDom) {
throw new Error("No Douban Item was found");
} else {
const { href, textContent } = linkDom;
const season = (_b = (_a2 = textContent == null ? void 0 : textContent.match(/第(.+?)季/)) == null ? void 0 : _a2[1]) != null ? _b : "";
const doubanId = (_d = (_c = decodeURIComponent(href).match(/subject\/(\d+)/)) == null ? void 0 : _c[1]) != null ? _d : "";
return {
id: doubanId,
season,
isTV: !!season,
title: textContent
};
}
};
const getDoubanTVItemData = async (doubanData, torrentTitle) => {
var _a2, _b;
const { title } = doubanData;
const seasonNumber = (_b = (_a2 = torrentTitle == null ? void 0 : torrentTitle.match(/S(?!eason)?0?(\d+)\.?(EP?\d+)?/i)) == null ? void 0 : _a2[1]) != null ? _b : "1";
if (parseInt(seasonNumber, 10) === 1) {
return doubanData;
}
const query = title == null ? void 0 : title.replace(/第.+?季/, `第${seasonNumber}季`);
const response = await getDoubanBasicDataByQuery(query);
return response;
};
const getDoubanCreditsData = async (id, type) => {
const url = `${CONFIG$2.URLS.DOUBAN_MOBILE_API}/${type}/${id}/credits?for_mobile=1&ck=`;
const data = await GMFetch(url, {
headers: {
Referer: `https://m.douban.com/${type}/subject/${id}`
},
responseType: "json"
});
return data;
};
const getDoubanBookInfo = async (doubanUrl) => {
const reqUrl = CONFIG$2.URLS.PT_GEN_API(doubanUrl);
const data = await GMFetch(reqUrl, {
responseType: "json"
});
return data;
};
const getDoubanInfoByIdOrDoubanUrl = async (query, type = "movie", imdbId) => {
var _a2, _b;
let doubanId = query;
if (!/^\d/.test(query)) {
doubanId = (_b = (_a2 = query == null ? void 0 : query.match(/douban\.com\/subject\/(\d+)/)) == null ? void 0 : _a2[1]) != null ? _b : "";
}
const parser = new DoubanFormatter(doubanId, type, imdbId);
return await parser.format();
};
const getTMDBDataByIMDBId = async (imdbid) => {
const url = `${CONFIG$2.URLS.TMDB_API}/3/find/${imdbid}?api_key=${CONFIG$2.KEY.TMDB_API_KEY}&language=en&external_source=imdb_id`;
const data = await GMFetch(url, {
responseType: "json"
});
const movieFound = data.movie_results && data.movie_results.length > 0;
const tvFound = data.tv_results && data.tv_results.length > 0;
if (!movieFound && !tvFound) {
throw new Error("No movie or TV found");
}
const tmdbData = movieFound ? data.movie_results[0] : data.tv_results[0];
return tmdbData;
};
const getTMDBVideosById = async (tmdbId) => {
var _a2;
const url = `${CONFIG$2.URLS.TMDB_API}/3/movie/${tmdbId}/videos?api_key=${CONFIG$2.KEY.TMDB_API_KEY}&language=en`;
const data = await GMFetch(url, {
responseType: "json"
});
if (!(data == null ? void 0 : data.results) || ((_a2 = data == null ? void 0 : data.results) == null ? void 0 : _a2.length) === 0) {
throw new Error("No TMDB videos found");
}
return data.results;
};
const getAreaCode = (area) => {
const europeList = CONFIG$2.EUROPE_LIST;
if (!area) return "OT";
if (europeList.includes(area)) return "EU";
for (const [code2, pattern] of Object.entries(CONFIG$2.REGION_PATTERNS)) {
if (pattern.test(area)) return code2;
}
return "OT";
};
const getRottenTomatoesDataByQuery = async (query) => {
var _a2, _b, _c;
const res = await GMFetch(
CONFIG$2.URLS.ROTTEN_TOMATOES_API,
{
data: {
requests: [
{
indexName: "content_rt",
query
}
]
},
responseType: "json"
}
);
return (_c = (_b = (_a2 = res == null ? void 0 : res.results) == null ? void 0 : _a2[0]) == null ? void 0 : _b.hits) != null ? _c : [];
};
const getMatchRottenTomatoes = async (title, year, isTV) => {
var _a2;
try {
const MAX_YEAR_DIFF = 2;
const releaseYear = parseInt(year || "1800", 10);
const searchResultHits = await getRottenTomatoesDataByQuery(title);
const filteredHits = searchResultHits.filter(
(hit) => hit.type === (isTV ? "tv" : "movie")
);
if (!filteredHits.length) return null;
filteredHits.sort((a2, b) => {
const diffA = Math.abs(a2.releaseYear - releaseYear);
const diffB = Math.abs(b.releaseYear - releaseYear);
return diffA !== diffB ? diffA - diffB : b.releaseYear - a2.releaseYear;
});
const normalizedTitle = title.toLowerCase();
let bestMatch, closeMatch;
for (const hit of filteredHits) {
const itemTitle = ((_a2 = hit.title) == null ? void 0 : _a2.toLowerCase()) || "";
if (itemTitle === normalizedTitle) {
bestMatch = hit;
} else if (itemTitle.startsWith(normalizedTitle)) {
closeMatch = closeMatch || hit;
}
if (bestMatch) break;
}
const isYearCompatible = (rtYear) => Math.abs(rtYear - releaseYear) <= MAX_YEAR_DIFF;
if (releaseYear && (!bestMatch || !isYearCompatible(bestMatch.releaseYear))) {
if (closeMatch && isYearCompatible(closeMatch.releaseYear)) {
bestMatch = closeMatch;
} else if (filteredHits.length > 0 && isYearCompatible(filteredHits[0].releaseYear)) {
bestMatch = filteredHits[0];
}
}
bestMatch = bestMatch || closeMatch || searchResultHits[0];
return bestMatch;
} catch (error) {
console.error("Error fetching data from Rotten Tomatoes:", error);
return null;
}
};
const getSubTitleFromDoubanInfo = (data, torrentInfo) => {
var _a2, _b;
const { originalTitle, translatedTitle, title: doubanDefaultTitle } = data;
let title = "";
if (doubanDefaultTitle.match(/[\u4e00-\u9fa5]+/)) {
title += doubanDefaultTitle;
}
const moreTitle = [originalTitle, ...translatedTitle].filter(
(item) => title !== item
);
const { title: torrentTitle, hardcodedSub } = torrentInfo;
let seasonEpisode = (_b = (_a2 = torrentTitle.match(/S\d+EP?(\d+)?/i)) == null ? void 0 : _a2[1]) != null ? _b : "";
seasonEpisode = seasonEpisode.replace(/^0/i, "");
const episode = seasonEpisode ? ` 第${seasonEpisode}集` : "";
const hardcodedSubStr = hardcodedSub ? "| 硬字幕" : "";
return `${title}${moreTitle.length > 0 ? "/" : ""}${moreTitle.join("/")}${episode} ${hardcodedSubStr}`;
};
class FillerRegistry {
constructor() {
this.fillers = [];
}
register(filler) {
this.fillers.push(filler);
this.fillers.sort((a2, b) => b.priority - a2.priority);
}
getApplicableFiller(siteName, siteType) {
return this.fillers.find((filler) => filler.canHandle(siteName, siteType)) || null;
}
}
const registry$1 = new FillerRegistry();
const base64ToBlob = (base64, contentType = "application/x-bittorrent", sliceSize = 512) => {
const regStr = new RegExp(`data:${contentType};base64,`, "i");
const byteCharacters = window.atob(base64.replace(regStr, ""));
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
return new Blob(byteArrays, { type: contentType });
};
const filterEmptyTags = (description) => {
const reg = new RegExp(
"\\[(?!info)([a-zA-Z]+\\d?)(?:=(?:\\w|\\s)+)?\\]\\s*\\[\\/(\\w+)\\]",
"g"
);
if (description.match(reg)) {
description = description.replace(reg, (_match, p1, p2) => {
if (p1 === p2) {
return "";
}
return _match;
});
return filterEmptyTags(description);
}
return description;
};
const getTeamName = (title) => {
var _a2, _b, _c;
const teamMatch = title.match(/-([^-]+)$/);
let teamName = (_c = (_b = (_a2 = teamMatch == null ? void 0 : teamMatch[1]) == null ? void 0 : _a2.replace(/-/g, "")) == null ? void 0 : _b.split("@")) != null ? _c : "";
if (teamName) {
teamName = teamName.length > 1 ? teamName[1] : teamName[0];
} else {
teamName = "other";
}
return teamName;
};
const fixTorrentTitle = (title, isWebSource) => {
let fixedTitle = title.replace(" DoVi ", " DV ").replace(" DDP ", " DD+ ");
if (isWebSource) fixedTitle = fixedTitle.replace(" HEVC", " H.265");
return fixedTitle;
};
const extractChineseMovieName = (description, subtitle) => {
var _a2, _b, _c, _d, _e, _f, _g, _h, _i;
const originalName = (_b = (_a2 = description.match(/(片\s+名)\s+(.+)?/)) == null ? void 0 : _a2[2]) != null ? _b : "";
const translateName = (_f = (_e = (_d = (_c = description.match(/(译\s+名)\s+(.+)/)) == null ? void 0 : _c[2]) == null ? void 0 : _d.split("/")) == null ? void 0 : _e[0]) != null ? _f : "";
let chineseName = originalName;
if (!originalName.match(/[\u4e00-\u9fa5]+/)) {
chineseName = translateName.match(/[\u4e00-\u9fa5]+/) ? translateName : "";
}
if (chineseName === "" && subtitle !== "" && subtitle !== void 0) {
chineseName = (_h = (_g = subtitle == null ? void 0 : subtitle.replace(/【|】.*/g, "").split("/")) == null ? void 0 : _g[0]) != null ? _h : "";
}
return (_i = chineseName == null ? void 0 : chineseName.trim()) != null ? _i : "";
};
const replaceAlignTagsToQuote = (description) => {
description = description.replace(/\[(right|left|center)\]/gi, "[quote]").replace(/\[\/(right|left|center)\]/gi, "[/quote]");
return description;
};
const filterNexusDescription = (description, screenshots) => {
let filterDescription = "";
const quoteList = description.match(/\[quote(=\w+)?\](.|\n)+?\[\/quote\]/g);
if (quoteList && quoteList.length > 0) {
quoteList.forEach((quote) => {
const isMediaInfoOrBDInfo = quote.match(
/Disc\s?Size|\.mpls|Unique\s?ID|唯一ID|Resolution/i
);
if (!quote.match(/[\u4e00-\u9fa5]+/i) || isMediaInfoOrBDInfo) {
filterDescription += `${quote}
`;
}
});
}
if (screenshots.length > 0) {
filterDescription += `
${screenshots.map((v2) => `[img]${v2}[/img]`).join("\n")}
`;
}
return filterDescription;
};
const buildPTPDescription = (info) => {
let text2 = info.originalDescription || "";
text2 = text2.replace(/http:\/\/ptpimg\.me/g, "https://ptpimg.me");
for (const mediainfo of info.mediaInfos) {
text2 = text2.replace(mediainfo, "");
}
text2 = text2.replace(
/\[(mediainfo|bdinfo)\][\s\S]*?\[\/(mediainfo|bdinfo)\]/gi,
""
);
text2 = text2.replace(
/^(?!\[img\])https:\/\/ptpimg.me.*?png(?!\[\/img\])$/gim,
(imgUrl) => {
return `[img]${imgUrl}[/img]`;
}
);
text2 = text2.replace(
/\[comparison.*\][\s\S]*\[\/comparison\]/gi,
(comparisonText) => {
return comparisonText.replace(/\[img\]/g, "").replace(/\[\/img\]/g, "").split("https://ptpimg.me").join("\nhttps://ptpimg.me").replace(/\s*\n\s*/g, "\n");
}
);
text2 = text2.replace(
/\[hide(.*)?\]\s*\[url=https:\/\/ptpimg.me.*?png\]\[img\][\s\S]*?\[\/hide\]/gi,
(imgText) => {
var _a2;
const imgs = [];
for (const urlMatch of imgText.matchAll(/\[url=(.*?)\]/gi)) {
imgs.push(urlMatch[1]);
}
const rawTitle = ((_a2 = imgText.match(/^\[hide=(.*?)\]/)) == null ? void 0 : _a2[1]) || "";
const comparisonTitles = rawTitle.trim().split(/\||\/|,|vs\.?| - /i).map((v2) => v2.trim());
if (comparisonTitles.length >= 2) {
return `[comparison=${comparisonTitles.join(", ")}]
${imgs.join("\n")}
[/comparison]
`;
}
const hideTitle = rawTitle ? `=${rawTitle}` : "";
return `[hide${hideTitle}]
[img]${imgs.join("[/img]\n[img]")}[/img]
[/hide]
`;
}
);
text2 = `${text2}
`;
text2 = text2.replace(
/\[url=https:\/\/ptpimg.me.*?png\]\[img\][\s\S]*?\n\n/gi,
(imgText) => {
const imgs = [];
for (const urlMatch of imgText.matchAll(/\[url=(.*?)\]/gi)) {
imgs.push(urlMatch[1]);
}
return `[hide]
[img]${imgs.join("[/img]\n[img]")}[/img]
[/hide]
`;
}
);
text2 = text2.replace(/\[img=(.+)?\](\n\n)?/gi, "[img]$1[/img]");
text2 = text2.replace(/\[(\/)?IMG\]/g, "[$1img]");
text2 = text2.replace(/\n\s*\n/g, "\n\n");
return text2.trim();
};
var SiteIMDbType = /* @__PURE__ */ ((SiteIMDbType2) => {
SiteIMDbType2["Standard"] = "standard";
SiteIMDbType2["StripTT"] = "strip_tt";
SiteIMDbType2["UNIT3D"] = "unit3d";
SiteIMDbType2["IMDbID"] = "imdb_id";
return SiteIMDbType2;
})(SiteIMDbType || {});
const siteIMDbTypeMap = {
HDRoute: "strip_tt",
HDSpace: "strip_tt",
BeyondHD: "imdb_id",
Blutopia: "unit3d",
fearnopeer: "unit3d",
HDPOST: "unit3d",
ACM: "unit3d",
Aither: "unit3d",
Concertos: "unit3d",
MDU: "unit3d",
LST: "unit3d",
HUNO: "unit3d"
/* UNIT3D */
};
class BaseFiller {
constructor() {
this.priority = 5;
this.info = null;
this.siteInfo = CURRENT_SITE_INFO;
this.imdbId = "";
this.isChineseTacker = (siteType) => {
return siteType.match(/NexusPHP|TTG|TNode|MTeam/);
};
this.mapAndFilterSelectValues = (key, selectArray) => {
var _a2;
const { siteInfo } = this;
if (!siteInfo[key] || !this.info[key]) {
return selectArray || [];
}
const mappedValue = (_a2 = siteInfo[key].map) == null ? void 0 : _a2[this.info[key]];
if (!mappedValue) {
return selectArray || [];
}
if (Array.isArray(mappedValue)) {
if (siteInfo[key].selector) {
const valuesCopy = [...mappedValue];
const firstValue = valuesCopy.shift();
this.setSelectValue(siteInfo[key].selector, firstValue || "");
}
if (Array.isArray(selectArray) && selectArray.length > 1) {
return selectArray.filter((item) => mappedValue.includes(item));
}
return selectArray || [];
} else if (siteInfo[key].selector) {
this.setSelectValue(siteInfo[key].selector, mappedValue);
return selectArray || [];
}
return selectArray || [];
};
}
fill(info) {
this.info = info;
this.prepareToFillInfo();
this.fillTorrentTitle();
this.disableTorrentChange();
this.fillIMDb();
this.fillDescription();
this.fillBasicAttributes();
this.fillCategory();
this.fillRemainingInfo();
this.fillTorrentFile();
this.postProcess();
}
disableTorrentChange() {
var _a2, _b;
const nameSelector = (_b = (_a2 = this.siteInfo.name) == null ? void 0 : _a2.selector) != null ? _b : "";
if (nameSelector.match(/^#\w+/)) {
const nameDom = $$2(nameSelector).clone().attr("name", "").hide();
$$2(nameSelector).attr("id", "").after(nameDom);
}
}
fillTorrentFile() {
const { torrentData, title } = this.info;
const { torrent } = this.siteInfo;
if (!torrent) {
return;
}
const fileInput = $$2(torrent.selector);
if (torrentData && fileInput.length > 0) {
const blob = base64ToBlob(torrentData);
const torrentFileName = title == null ? void 0 : title.replace(/\s/g, ".");
const file = new File([blob], `${torrentFileName}.torrent`, {
type: "application/x-bittorrent"
});
const dataTransfer = new DataTransfer();
dataTransfer.items.add(file);
const uploadInput = fileInput[0];
if (CURRENT_SITE_NAME === "MTeam") {
setTimeout(() => {
const lastValue = uploadInput.files;
uploadInput.files = dataTransfer.files;
const tracker = uploadInput._valueTracker;
if (tracker) {
tracker.setValue(lastValue);
}
const event = new Event("change", { bubbles: true });
uploadInput.dispatchEvent(event);
}, 100);
} else {
uploadInput.files = dataTransfer.files;
}
}
}
prepareToFillInfo() {
}
processTorrentTitle() {
const { title } = this.info;
const fixedTitle = title.replace("H 265", "H.265").replace("H 264", "H.264");
this.info.title = fixedTitle;
}
fillTorrentTitle() {
this.processTorrentTitle();
const { name } = this.siteInfo;
if (name) {
$$2(name.selector).val(this.info.title);
}
}
async fillIMDb() {
var _a2, _b;
const { imdbUrl = "" } = this.info;
const { imdb: imdbConfig, tmdb: tmdbConfig } = this.siteInfo;
this.imdbId = getIdByIMDbUrl(imdbUrl);
if (!(imdbConfig == null ? void 0 : imdbConfig.selector)) {
return;
}
const stripTTIMBb = (_b = (_a2 = this.imdbId) == null ? void 0 : _a2.replace("tt", "")) != null ? _b : "";
if (siteIMDbTypeMap[CURRENT_SITE_NAME] === SiteIMDbType.StripTT) {
$$2(imdbConfig.selector).val(stripTTIMBb);
} else if (siteIMDbTypeMap[CURRENT_SITE_NAME] === SiteIMDbType.UNIT3D) {
$$2(imdbConfig.selector).val(stripTTIMBb);
const { id: tmdbId } = await getTMDBDataByIMDBId(this.imdbId);
$$2(tmdbConfig.selector).val(tmdbId);
$$2("#torrent").on("change", () => {
$$2(imdbConfig).val(stripTTIMBb);
$$2(tmdbConfig.selector).val(tmdbId);
$$2("#automal").val(0);
});
} else if (siteIMDbTypeMap[CURRENT_SITE_NAME] === SiteIMDbType.IMDbID) {
$$2(imdbConfig.selector).val(this.imdbId);
} else {
$$2(imdbConfig.selector).val(imdbUrl);
}
}
processDescription() {
const { description, sourceSite } = this.info;
let fixedDescription = description.replace(/^(\s+)/g, "");
fixedDescription = filterEmptyTags(fixedDescription);
fixedDescription = this.addOrFilterDescription(fixedDescription);
fixedDescription = this.fillMediaInfo(fixedDescription);
fixedDescription = this.fillScreenshots(fixedDescription);
fixedDescription = this.fillPoster(fixedDescription);
const thanksQuoteClosed = GM_getValue("easy-upload.thanks-quote-closed") || "";
if (!thanksQuoteClosed && sourceSite) {
fixedDescription = this.getThanksQuote() + fixedDescription.trim();
}
this.info.description = fixedDescription;
}
addOrFilterDescription(description) {
const { doubanInfo, sourceSiteType, screenshots } = this.info;
const IfAddDoubanInfo = this.isChineseTacker(this.siteInfo.siteType) && CURRENT_SITE_NAME !== "SSD";
const ifFilterNexusDescription = this.isChineseTacker(sourceSiteType) && CURRENT_SITE_NAME !== "Bib";
if (IfAddDoubanInfo) {
if (doubanInfo) {
description = `${doubanInfo}
${description}`;
}
} else if (ifFilterNexusDescription) {
description = filterNexusDescription(description, screenshots);
}
return description;
}
fillMediaInfo(description) {
const { mediaInfo } = this.siteInfo;
if (!mediaInfo) {
return description;
}
const { mediaInfos, videoType } = this.info;
if (!mediaInfos || mediaInfos.length === 0) {
return description;
}
const isBluray = /bluray/i.test(videoType);
if (this.siteInfo.siteType === "UNIT3D") {
const selector = isBluray ? 'textarea[name="bdinfo"]' : this.siteInfo.mediaInfo.selector;
$$2(selector).val(mediaInfos[0]);
description = description.replace(mediaInfos[0].trim(), "");
} else if (isBluray && CURRENT_SITE_NAME.match(/^(SpeedApp)/)) {
$$2(this.siteInfo.bdinfo.selector).val(mediaInfos[0]);
this.info.mediaInfos = [];
} else if (!(isBluray && CURRENT_SITE_NAME.match(/^(HDBits)/))) {
$$2(this.siteInfo.mediaInfo.selector).val(mediaInfos[0]);
description = description.replace(mediaInfos[0].trim(), "");
}
return description;
}
fillScreenshots(description) {
const { screenshots } = this.info;
if (this.siteInfo.screenshots) {
screenshots.forEach((img) => {
if (description.includes(img)) {
description = description.replace(img, "");
if (!img.match(/\[url=.+?\[url]/)) {
description = description.replace(/\[img\]\[\/img\]\n*/g, "");
}
}
});
}
return description;
}
fillPoster(description) {
var _a2, _b;
let { doubanInfo, poster } = this.info;
if (this.siteInfo.poster) {
if (!poster) {
const doubanPosterImage = (description + doubanInfo).match(
/\[img\](http[^[]+?(poster|(img\d\.doubanio))[^[]+?)\[\/img\]/
);
if (doubanPosterImage && doubanPosterImage[1]) {
poster = doubanPosterImage[1];
} else {
poster = (_b = (_a2 = description.match(/\[img\](.+?)\[\/img\]/)) == null ? void 0 : _a2[1]) != null ? _b : "";
}
}
if (poster) {
$$2(this.siteInfo.poster).val(poster);
if (CURRENT_SITE_NAME === "HDRoute") {
$$2('input[name="poster"]').val(poster);
description = description.replace(poster, "");
}
}
}
return description;
}
fillDescription() {
var _a2;
this.processDescription();
$$2((_a2 = this.siteInfo.description) == null ? void 0 : _a2.selector).val(this.info.description);
}
getThanksQuote() {
const { sourceSite } = this.info;
const isChineseSite = this.isChineseTacker(this.siteInfo.siteType) || CURRENT_SITE_NAME.match(/HDPOST|GPW/);
let thanksQuote = `转自[b]${sourceSite}[/b],感谢原发布者!`;
if (!isChineseSite) {
thanksQuote = `Torrent from [b]${sourceSite}[/b].
All thanks to the original uploader!`;
}
return `[quote]${thanksQuote}[/quote]
`;
}
fillBasicAttributes() {
const commonInfoKeys = [
"subtitle",
"douban",
"area",
"audioCodec"
];
const { doubanUrl } = this.info;
commonInfoKeys.forEach((key) => {
const siteInfo = this.siteInfo[key];
if (siteInfo && siteInfo.selector) {
let value = this.info[key];
if (key === "douban") {
value = doubanUrl;
} else if (key === "area" || key === "audioCodec") {
value = siteInfo.map[value];
}
$$2(siteInfo.selector).val(value || "");
}
});
}
setSelectValue(selector, value) {
const selectElement = $$2(selector);
if (selectElement.length > 0) {
selectElement.val(value).trigger("change");
}
}
fillCategory() {
const categoryConfig = this.siteInfo.category;
const { category: categoryKey } = this.info;
if (!categoryConfig || !categoryKey) {
return;
}
const categoryMapValue = categoryConfig.map[categoryKey];
const keyArray = [
"videoCodec",
"videoType",
"resolution",
"source",
"area"
];
let finalSelectArray = [];
if (Array.isArray(categoryMapValue)) {
finalSelectArray = [...categoryMapValue];
keyArray.forEach((key) => {
finalSelectArray = this.mapAndFilterSelectValues(
key,
finalSelectArray
);
if (finalSelectArray.length === 1) {
this.setSelectValue(categoryConfig.selector, finalSelectArray[0]);
}
});
} else {
[...keyArray, "category"].forEach((key) => {
this.mapAndFilterSelectValues(key, finalSelectArray);
});
}
}
fillRemainingInfo() {
const {
format: formatConfig,
image: imageConfig,
anonymous: anonymousConfig,
tags: tagsConfig
} = this.siteInfo;
const { format: format2, image, tags: tags2 } = this.info;
if (formatConfig) {
$$2(formatConfig.selector).val(formatConfig.map[format2]);
}
if (imageConfig) {
$$2(imageConfig.selector).val(image || "");
}
if (anonymousConfig) {
const { selector, value = "" } = anonymousConfig;
if (value) {
$$2(selector).val(value);
} else {
$$2(selector).attr("checked", "true");
}
}
if (tagsConfig) {
Object.keys(tags2).forEach((key) => {
if (tags2[key] && tagsConfig[key]) {
$$2(tagsConfig[key]).attr("checked", "true");
}
});
}
this.fillTeamName();
}
fillTeamName() {
const teamConfig = this.siteInfo.team;
const { title } = this.info;
if (!teamConfig || !title) {
return;
}
const teamName = getTeamName(title);
if (!teamName) {
return;
}
if (teamName && teamConfig) {
const formateTeamName = teamConfig.map[teamName.toLowerCase()];
const matchValue = formateTeamName || teamConfig.map.other;
if (matchValue) {
$$2(teamConfig.selector).val(matchValue.toLowerCase());
}
}
}
postProcess() {
}
}
class Filler52pt extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "52pt";
}
postProcess() {
const { tags: tags2, videoType, resolution } = this.info;
let videoTypeValue = videoType;
if (videoType.match(/bluray/)) {
if (tags2.chinese_audio || tags2.cantonese_audio || tags2.chinese_subtitle) {
videoTypeValue = videoType === "bluray" ? "14" : "15";
}
} else if (videoType === "remux" && resolution === "2160p") {
videoTypeValue = "5";
}
$$2(this.siteInfo.videoType.selector).val(videoTypeValue);
}
}
registry$1.register(new Filler52pt());
class Bib extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "Bib";
}
fill(info) {
var _a2;
this.info = info;
if (!this.info || !this.info.doubanBookInfo) return;
const {
year,
pager,
translator,
author,
publisher,
ISBN,
book_intro: intro,
poster
} = this.info.doubanBookInfo;
$$2("#AuthorsField").val(author.join(","));
$$2("#PublishersField").val(publisher);
$$2("#IsbnField").val(ISBN);
$$2("#YearField").val(year);
$$2("#PagesField").val(pager);
$$2("#LanguageField").val("17");
$$2("#inputFileID").replaceWith(
''
);
$$2("#TranslatorsField").val(translator.join(","));
$$2("#DescriptionField").val(intro);
$$2("#ImageField").val(poster);
const event = new Event("change");
(_a2 = document.getElementById("DescriptionField")) == null ? void 0 : _a2.dispatchEvent(event);
this.fillTorrentFile();
}
}
registry$1.register(new Bib());
const CONFIG$1 = {
HDB_TEAM: [
"Chotab",
"CRiSC",
"CtrlHD",
"DON",
"EA",
"EbP",
"Geek",
"LolHD",
"NTb",
"RightSiZE",
"SA89",
"SbR",
"TayTo",
"VietHD"
]
};
class BTSCHOOL extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "BTSCHOOL";
}
postProcess() {
var _a2, _b;
const { doubanUrl } = this.info;
$$2(this.siteInfo.imdb.selector).val(this.imdbId);
if (doubanUrl) {
const doubanId = (_b = (_a2 = doubanUrl.match(/\/(\d+)/)) == null ? void 0 : _a2[1]) != null ? _b : "";
$$2(this.siteInfo.douban.selector).val(doubanId);
}
}
fillTeamName() {
const { title } = this.info;
const teamConfig = this.siteInfo.team;
const teamName = getTeamName(title);
if (CONFIG$1.HDB_TEAM.includes(teamName)) {
$$2(teamConfig.selector).val(teamConfig.map.hdbint);
}
}
}
registry$1.register(new BTSCHOOL());
class Concertos extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "Concertos";
}
processTorrentTitle() {
let { description, mediaInfos } = this.info;
$$2("#add").trigger("click");
$$2(".sceditor-button.sceditor-button-source.has-icon")[0].click();
mediaInfos.forEach((mediaInfo) => {
description = description.replace(mediaInfo.trim(), "");
});
this.info.description = description;
}
processDescription() {
let { description, mediaInfos } = this.info;
$$2("#add").trigger("click");
$$2(".sceditor-button.sceditor-button-source.has-icon")[0].click();
mediaInfos.forEach((mediaInfo) => {
description = description.replace(mediaInfo.trim(), "");
});
this.info.description = description;
super.processDescription();
}
}
registry$1.register(new Concertos());
class HDBits extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "HDBits";
}
processTorrentTitle() {
super.processTorrentTitle();
const { title, videoType, movieName, movieAkaName } = this.info;
let mediaTitle = title.replace(
/([^\d]+)\s+([12][90]\d{2})/,
(_2, p1, p2) => {
return `${movieName || movieAkaName} ${p2}`;
}
);
if (videoType === "remux") {
mediaTitle = mediaTitle.replace(/\s+(bluray|blu-ray)/gi, "");
}
this.info.title = mediaTitle;
}
}
registry$1.register(new HDBits());
class HDFans extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "HDFans";
}
postProcess() {
const { videoType, resolution, tags: tags2 } = this.info;
if (videoType === "remux") {
$$2(this.siteInfo.videoType.selector).val(
resolution === "2160p" ? "10" : "8"
);
} else if (videoType === "encode") {
const map2 = {
"2160p": "9",
"1080p": "5",
"1080i": "5",
"720p": "11"
};
$$2(this.siteInfo.videoType.selector).val(
map2[resolution] || "16"
);
}
if (tags2.diy) {
$$2(this.siteInfo.videoType.selector).val(
resolution === "2160p" ? "2" : "4"
);
}
}
}
registry$1.register(new HDFans());
class HDRoute extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "HDRoute";
}
postProcess() {
var _a2, _b, _c, _d, _e, _f;
const { description, doubanInfo, subtitle = "" } = this.info;
const fullDescription = description + doubanInfo;
const imdbRank = (_b = (_a2 = fullDescription.match(/IMDb评分\s+(\d(\.\d)?)/i)) == null ? void 0 : _a2[1]) != null ? _b : "";
const chineseName = extractChineseMovieName(description, subtitle);
const summary = (_f = (_e = (_d = (_c = fullDescription.match(/(简\s+介)\s+([^[◎]+)/)) == null ? void 0 : _c[2]) == null ? void 0 : _d.split("/")) == null ? void 0 : _e[0]) != null ? _f : "";
$$2("#upload-imdb").val(imdbRank);
$$2("#title_chs").val(chineseName);
$$2("#upload_introduction").val(summary);
}
}
registry$1.register(new HDRoute());
class HDT extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "HDT";
}
processDescription() {
let { description } = this.info;
description = description.replace(/(\[\/img\])(\[img\])/g, "$1 $2").replace(/(\[\/url\])(\[url)/g, "$1 $2");
this.info.description = description;
super.processDescription();
}
postProcess() {
let { category, imdbUrl = "" } = this.info;
if (category !== "tvPack") {
$$2('select[name="season"').val("true");
}
if (!/.+\/$/.test(imdbUrl) && /tt\d+/.test(imdbUrl)) {
imdbUrl += "/";
}
$$2(this.siteInfo.imdb.selector).val(imdbUrl);
}
}
registry$1.register(new HDT());
class HDTime extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "HDTime";
}
postProcess() {
if (this.info.videoType.match(/bluray/i)) {
$$2(this.siteInfo.category.selector).val("424");
}
}
}
registry$1.register(new HDTime());
class HDU extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "HDU";
}
postProcess() {
let videoTypeValue = "";
const { resolution, videoType, category } = this.info;
const isTV = category.match(/tv/);
if (videoType === "remux") {
if (resolution === "2160p") {
videoTypeValue = isTV ? "16" : "15";
} else {
videoTypeValue = isTV ? "12" : "3";
}
}
if (isTV) {
if (videoType === "encode") {
videoTypeValue = "14";
} else if (videoType === "web") {
videoTypeValue = "13";
}
}
if (videoTypeValue) {
$$2(this.siteInfo.videoType.selector).val(videoTypeValue);
}
}
}
registry$1.register(new HDU());
class KEEPFRDS extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "KEEPFRDS";
}
processTorrentTitle() {
const { category, title, subtitle } = this.info;
if (category === "music") {
const subtitle2 = title;
if (subtitle2 !== void 0) {
this.info.title = subtitle2;
this.info.subtitle = subtitle2;
}
} else if (subtitle === "") {
this.info.subtitle = title;
}
}
processDescription() {
var _a2;
let {
description,
sourceSite,
mediaInfos,
originalDescription,
screenshots,
category,
title,
subtitle
} = this.info;
description = description.replace(/\[\/?(center|code)\]/g, "");
if (sourceSite === "PTP") {
description = (_a2 = originalDescription == null ? void 0 : originalDescription.replace(/^(\s+)/g, "")) != null ? _a2 : "";
description = filterEmptyTags(description);
description = description.replace(/http:\/\/ptpimg/g, "https://ptpimg");
screenshots.forEach((screenshot) => {
const regStr = new RegExp(`\\[img${screenshot}\\[\\/img\\]`, "i");
if (!description.match(regStr)) {
const regOldFormat = new RegExp(`\\[img=${screenshot}\\]`, "i");
if (description.match(regOldFormat)) {
description = description.replace(
regOldFormat,
`[img]${screenshot}[/img]`
);
} else {
description = description.replace(
new RegExp(`(? {
if (category !== "music") {
$(this.siteInfo.name.selector).val(title);
if (subtitle) $(this.siteInfo.subtitle.selector).val(subtitle);
} else {
$(this.siteInfo.name.selector).val(subtitle || "");
if (subtitle) $(this.siteInfo.subtitle.selector).val(title);
}
});
mediaInfos == null ? void 0 : mediaInfos.forEach((mediaInfo) => {
if (!/\[mediainfo\]/.test(description)) {
description = description.replace(
`[quote]${mediaInfo}[/quote]`,
`[mediainfo]${mediaInfo}[/mediainfo]`
);
}
});
this.info.description = description;
super.processDescription();
}
}
registry$1.register(new KEEPFRDS());
class NYPT extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "NYPT";
}
postProcess() {
const { category, title } = this.info;
$$2("#browsecat").trigger("change");
const domTimeout = setTimeout(() => {
const catMap = {
movie: "#movie_enname",
tv: "#series_enname",
tvPack: "#series_enname",
documentary: "#doc_enname",
variety: "#show_enname",
cartoon: "#anime_enname"
};
const selector = catMap[category];
if (selector) {
$$2(selector).val(title);
}
clearTimeout(domTimeout);
}, 2e3);
}
}
registry$1.register(new NYPT());
class PTN extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "PTN";
}
processDescription() {
let { description, imdbUrl } = this.info;
description = `${imdbUrl}
${description}`;
this.info.description = description;
super.processDescription();
}
postProcess() {
const { resolution, videoType, source } = this.info;
let format2 = "";
const formatMap2 = {
remux: "Remux",
web: "WebRip",
dvd: "DVDR",
dvdrip: "DVDRip",
"720p": "720P",
"1080p": "1080P",
"2160p": "2160P"
};
if (videoType.match(/bluray/)) {
format2 = "BluRay";
} else if (videoType === "encode" && source === "bluray") {
format2 = formatMap2[resolution];
} else {
format2 = formatMap2[videoType] || "";
}
$$2("#format").val(format2);
}
}
registry$1.register(new PTN());
class PTSBAO extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "PTSBAO";
}
fill(info) {
this.info = info;
this.prepareToFillInfo();
this.fillTorrentTitle();
this.disableTorrentChange();
this.fillIMDb();
this.fillDescription();
this.fillCategoryAndVideoInfo();
this.fillRemainingInfo();
this.fillTorrentFile();
}
fillCategoryAndVideoInfo() {
if (!this.info) return;
const {
category: categoryConfig,
videoCodec: videoCodecConfig,
audioCodec: audioCodecConfig,
source: sourceConfig,
videoType: videoTypeConfig,
resolution: resolutionConfig
} = this.siteInfo;
const {
category,
videoCodec = "",
audioCodec = "",
source,
videoType,
resolution
} = this.info;
$$2(categoryConfig.selector).val(categoryConfig.map[category]);
$$2(categoryConfig.selector)[0].dispatchEvent(
new Event("change", { bubbles: true })
);
setTimeout(() => {
$$2(videoCodecConfig.selector).val(videoCodecConfig.map[videoCodec]);
$$2(audioCodecConfig.selector).val(audioCodecConfig.map[audioCodec]);
$$2(sourceConfig.selector).val(sourceConfig.map[source]);
$$2(videoTypeConfig.selector).val(videoTypeConfig.map[videoType]);
$$2(resolutionConfig.selector).val(resolutionConfig.map[resolution]);
}, 500);
}
}
registry$1.register(new PTSBAO());
class SpeedApp extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "SpeedApp";
}
processDescription() {
let { description } = this.info;
description = description.replace(/\[url.*\[\/url\]/g, "").replace(/\[img.*\[\/img\]/g, "").replace(/\[\/?(i|b|center|quote|size|color)\]/g, "").replace(/\[(size|color)=#?[a-zA-Z0-9]*\]/g, "").replace(/\n\n*/g, "\n");
this.info.description = description;
super.processDescription();
}
postProcess() {
let { imdbUrl = "" } = this.info;
if (!/.+\/$/.test(imdbUrl) && /tt\d+/.test(imdbUrl)) {
imdbUrl += "/";
}
$$2(this.siteInfo.imdb.selector).val(imdbUrl);
}
}
registry$1.register(new SpeedApp());
class SSD extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "SSD";
}
processTorrentTitle() {
super.processTorrentTitle();
const { title } = this.info;
this.info.title = title.replace(/\s/gi, ".");
}
postProcess() {
const { category, title, doubanUrl, imdbUrl, screenshots, subtitle } = this.info;
if (category === "tvPack" || title.match(/Trilogy|Collection/i) || subtitle && subtitle.match(/合集/)) {
$$2('input[name="pack"]').attr("checked", "true");
}
$$2(this.siteInfo.imdb.selector).val(doubanUrl || imdbUrl);
$$2(this.siteInfo.screenshots.selector).val(screenshots.join("\n"));
}
}
registry$1.register(new SSD());
class TTG extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "TTG";
}
processDescription() {
super.processDescription();
const { description } = this.info;
this.info.description = replaceAlignTagsToQuote(description);
}
postProcess() {
var _a2, _b;
const { doubanUrl } = this.info;
if (doubanUrl) {
const doubanId = (_b = (_a2 = doubanUrl.match(/\/(\d+)/)) == null ? void 0 : _a2[1]) != null ? _b : "";
$$2(this.siteInfo.douban.selector).val(doubanId);
}
}
}
registry$1.register(new TTG());
class UHDBits extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "UHDBits";
}
postProcess() {
const { title } = this.info;
$$2(this.siteInfo.imdb.selector).val(this.imdbId);
if (title.match(/web-?rip/i)) {
$$2(this.siteInfo.videoType.selector).val("WEBRip");
}
const teamName = getTeamName(title);
$$2("#team").val(teamName === "other" ? "Unknown" : teamName);
$$2("#imdb_button").trigger("click");
}
}
registry$1.register(new UHDBits());
class UNIT3D extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 5;
}
canHandle(siteName, siteType) {
return siteType.includes("UNIT3D");
}
processDescription() {
super.processDescription();
let { description, sourceSite, screenshots } = this.info;
if (sourceSite === "PTP") {
description = buildPTPDescription(this.info);
}
if (screenshots.length > 0) {
screenshots.forEach((img) => {
const regStr = new RegExp(`\\[img\\](${img})\\[\\/img\\](
*)?`);
if (description.match(regStr)) {
description = description.replace(regStr, (p1, p2) => {
return `[url=${p2}][img=350x350]${p2}[/img][/url]`;
});
}
});
}
if (description.match(/mobile\.webp\[\/img/gi)) {
description = description.replace(/\[img\]/g, "[img=350x350]");
}
description = description.replace(
/\[align(=(.+?))\]((.|\n)+?)\[\/align\]/g,
"[$2]$3[/$2]"
);
description = description.replace(
/\[(\/)?hide(?:=(.+?))?\]/g,
(_2, p1, p2) => {
const slash = p1 || "";
return p2 ? `${p2}: [${slash}spoiler]` : `[${slash}spoiler]`;
}
);
this.info.description = description;
}
processTorrentTitle() {
super.processTorrentTitle();
const { title, source } = this.info;
const isWebSource = !!source.match(/web/gi);
const fixedTitle = fixTorrentTitle(title, isWebSource);
this.info.title = fixedTitle;
}
}
registry$1.register(new UNIT3D());
class NexusPHP extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 5;
}
canHandle(siteName, siteType) {
return siteType === "NexusPHP";
}
processDescription() {
super.processDescription();
const { description } = this.info;
this.info.description = replaceAlignTagsToQuote(description);
}
processTorrentTitle() {
super.processTorrentTitle();
const { title, source } = this.info;
const isWebSource = !!source.match(/web/gi);
const fixedTitle = fixTorrentTitle(title, isWebSource);
this.info.title = fixedTitle;
}
}
registry$1.register(new NexusPHP());
class BeyondHD extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
this.bhdSiteInfo = PT_SITE.BeyondHD;
}
canHandle(siteName) {
return siteName === "BeyondHD";
}
processTorrentTitle() {
let title = this.info.title;
if (this.info.videoType === "dvd") {
title = this.buildDVDTitle(this.info);
}
this.info.title = title;
}
fillCategory() {
const { category, videoType, size } = this.info;
const isBluray = videoType.match(/bluray/i);
this.info.category = videoType;
this.info.videoType = category;
if (isBluray || videoType === "dvd") {
let bdType = getBDTypeBasedOnSize(size);
if (videoType === "uhdbluray" && bdType === "BD50") {
bdType = "UHD50";
}
this.info.category = bdType || "";
}
super.fillCategory();
}
processDescription() {
let { description, sourceSite, originalDescription, screenshots } = this.info;
if (sourceSite === "PTP") {
description = buildPTPDescription(this.info);
} else if (sourceSite.match(/BeyondHD|UHDBits/)) {
description = originalDescription || "";
} else {
description = this.buildDescription();
}
if (screenshots.length > 0) {
screenshots.forEach((img) => {
const regStr = new RegExp(`\\[img\\](${img})\\[\\/img\\](
*)?`);
if (description.match(regStr)) {
description = description.replace(regStr, (_2, p2) => {
return `[url=${p2}][img=350x350]${p2}[/img][/url]
`;
});
}
});
}
this.info.description = description;
}
buildDescription() {
var _a2;
let { sourceSiteType, description, mediaInfos, comparisons, screenshots } = this.info;
if (this.isChineseTacker(sourceSiteType)) {
description = filterNexusDescription(description, screenshots);
}
description = description.replace(`[quote]${(_a2 = mediaInfos == null ? void 0 : mediaInfos[0]) != null ? _a2 : ""}[/quote]`, "").replace(/\[url.*\[\/url\]/g, "").replace(/\[img.*\[\/img\]/g, "");
if (comparisons && comparisons.length > 0) {
for (const comparison of comparisons) {
description += `
${comparison.reason}[comparison=${comparison.title}]
${comparison.imgs.join("\n")}
[/comparison]
`;
}
}
if (screenshots.length > 0) {
description += `${screenshots.map((v2) => `[img]${v2}[/img]`).join("\n")}
`;
}
return description.trim();
}
fill(info) {
this.info = info;
this.fillTorrentTitle();
this.disableTorrentChange();
this.fillIMDb();
this.fillTMDBId();
this.selectTag();
this.fillDescription();
this.fillMediaInfo(info.description);
this.fillCategory();
this.fillRemainingInfo();
this.fillTorrentFile();
}
buildDVDTitle(info) {
var _a2, _b;
const { movieName, movieAkaName, year, mediaInfos, size, audioCodec } = info;
const mediaInfo = (_a2 = mediaInfos == null ? void 0 : mediaInfos[0]) != null ? _a2 : "";
const scanType = mediaInfo.includes("NTSC") ? "NTSC" : "PAL";
const dvdType = getBDTypeBasedOnSize(size);
const audioChannelNumber = ((_b = mediaInfo.match(/Channel\(s\)\s+:\s+(\d)/)) == null ? void 0 : _b[1]) || "2";
const audio = audioCodec === "ac3" ? "dd" : audioCodec;
const audioName = `${audio == null ? void 0 : audio.toUpperCase()}${audioChannelNumber === "6" ? "5.1" : `${audioChannelNumber}.0`}`;
const akaName = movieAkaName ? ` AKA ${movieAkaName} ` : " ";
return `${movieName}${akaName}${year} ${scanType} ${dvdType} ${audioName}`;
}
fillTMDBId() {
const imdbId = getIdByIMDbUrl(this.info.imdbUrl || "");
getTMDBDataByIMDBId(imdbId).then((data) => {
$$2(this.siteInfo.tmdb.selector).val(data.id);
});
}
selectTag() {
const editionTags = Object.keys(this.info.tags).map(
(tag) => this.info.tags[tag] && this.bhdSiteInfo.targetInfo.editionTags[tag]
).filter(Boolean);
const editionOption = Array.from($$2('select[name="edition"] option')).map(
(opt) => $$2(opt).attr("value")
);
if (editionTags.length > 0) {
for (const tag of editionTags) {
setTimeout(() => {
var _a2, _b;
(_b = (_a2 = $$2(`.bhd-tag #${tag}`)) == null ? void 0 : _a2[0]) == null ? void 0 : _b.dispatchEvent(new Event("click"));
}, 0);
if (tag && editionOption.includes(tag)) {
$$2('select[name="edition"]').val(tag);
}
}
}
}
}
registry$1.register(new BeyondHD());
class SC extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "SC";
}
async fill(info) {
this.info = info;
const { imdbUrl = "" } = this.info;
const imdbId = getIdByIMDbUrl(imdbUrl);
$$2("#catalogue_number").val(imdbId);
$$2("#imdb_autofill").trigger("click");
this.fillMedia();
$$2(".modesw").trigger("click");
$$2("#release_desc").val(this.buildDescription());
await this.fillIMDbInfo(imdbUrl);
this.fillTorrentFile();
}
buildDescription() {
const { screenshots, mediaInfos } = this.info;
const parts = [];
if (screenshots.length > 0) {
const screenshotSection = screenshots.slice(0, 3).map((img) => `[img]${img}[/img]`).join("");
parts.push(screenshotSection);
}
if (mediaInfos.length > 0) {
const mediaInfoSection = mediaInfos.map((mediaInfo) => `[hide=MediaInfo]${mediaInfo}[/hide]`).join("\n\n");
parts.push(mediaInfoSection);
}
return parts.join("\n\n");
}
fillMedia() {
const { videoType, resolution } = this.info;
let mediaValue;
if (videoType.match(/bluray/i)) {
mediaValue = "BDMV";
} else if (videoType === "DVD") {
mediaValue = "DVD-R";
} else if (parseInt(resolution, 10) < 720) {
mediaValue = "SD";
} else {
mediaValue = resolution;
}
$$2("#media").val(mediaValue);
}
async fillIMDbInfo(imdbUrl) {
var _a2, _b, _c;
if (imdbUrl) {
try {
const imdbData = await getIMDBData(imdbUrl);
if (!imdbData) {
return;
}
if ((_a2 = imdbData == null ? void 0 : imdbData.details) == null ? void 0 : _a2.country) {
$$2("#country").val(imdbData.details.country);
}
const akaName = imdbData && ((_b = imdbData == null ? void 0 : imdbData.details) == null ? void 0 : _b["Also known as"]);
const originalName = (_c = imdbData == null ? void 0 : imdbData.name) != null ? _c : "";
if (akaName && akaName !== originalName) {
$$2("#alternate_title").val(imdbData.details["Also known as"]);
$$2("#title").val(originalName);
}
await this.uploadPoster(imdbData.poster);
} catch (error) {
console.error("Error filling IMDB data:", error);
}
}
}
async uploadPoster(posterUrl) {
var _a2;
if (!posterUrl) return;
try {
let uploadedUrl;
const ptpImgApiKey = GM_getValue("easy-upload.ptp-img-api-key");
if (ptpImgApiKey) {
const uploadResult = await (await uploadToPtpImg)([posterUrl]);
uploadedUrl = Array.isArray(uploadResult) && uploadResult.length > 0 ? uploadResult[0] : void 0;
} else {
const data = await (await transferImgToCheveretoSite)([posterUrl], "https://gifyu.com/json");
uploadedUrl = (_a2 = data[0]) == null ? void 0 : _a2.original;
}
if (uploadedUrl) {
$$2("#image").val(uploadedUrl);
}
} catch (error) {
console.error("Failed to upload poster:", error);
}
}
}
registry$1.register(new SC());
class TJUPT extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "TJUPT";
}
fill(info) {
this.info = info;
this.fillBasicAttributes();
this.fillCategory();
this.fillIMDb();
this.processDescription();
this.fillDescription();
this.fillTorrentFile();
const observer = new MutationObserver(() => {
if ($$2("#ename")[0] && $$2("#cname")[0]) {
this.fillSiteSpecificInfo();
observer.disconnect();
}
});
const config = { childList: true, subtree: true };
observer.observe(document.body, config);
}
fillSiteSpecificInfo() {
var _a2, _b;
if (!this.info) return;
const { title, description, doubanInfo, category, tags: tags2 } = this.info;
$$2("#ename").val(title);
const fullDescription = description + doubanInfo;
let area = this.extractPattern(
fullDescription,
/(产\s+地|国\s+家)\s+(.+)/,
2
);
area = area.replace(/\[\/?.+?\]/g, "");
const originalName = this.extractPattern(
fullDescription,
/(片\s+名)\s+(.+)?/,
2
);
const translateName = ((_b = (_a2 = this.extractPattern(fullDescription, /(译\s+名)\s+(.+)/, 2)) == null ? void 0 : _a2.split(
"/"
)) == null ? void 0 : _b[0]) || "";
const language = this.extractPattern(
fullDescription,
/(语\s+言)\s+(.+)/,
2
);
this.fillAreaInfo(area, category);
this.fillLanguageInfo(language);
let chineseName = originalName;
if (!originalName.match(/[\u4e00-\u9fa5]+/)) {
chineseName = translateName.match(/[\u4e00-\u9fa5]+/) ? translateName : "";
}
$$2("#cname").val(chineseName);
if (tags2.chinese_subtitle && !tags2.chinese_audio) {
$$2('input[name="chinese"]').attr("checked", "true");
}
}
extractPattern(text2, pattern, groupIndex) {
var _a2;
return ((_a2 = text2.match(pattern)) == null ? void 0 : _a2[groupIndex]) || "";
}
/**
* 填充区域信息
* @param area 区域信息
* @param category 种子类别
*/
fillAreaInfo(area, category) {
if (!area || !this.info) return;
const areaString = area.replace(/,/g, "/").replace(/\s|中国/g, "");
if (category === "movie") {
$$2("#district").val(areaString);
} else if (category == null ? void 0 : category.match(/tv/)) {
const areaToSelectorMap = {
大陆: "#specificcat1",
"台|港": "#specificcat2",
美国: "#specificcat3",
日本: "#specificcat4",
韩国: "#specificcat5",
英国: "#specificcat6",
泰剧: "#specificcat7"
};
let selector = "";
for (const [key, value] of Object.entries(areaToSelectorMap)) {
if (area.match(new RegExp(key))) {
selector = value;
break;
}
}
if (selector) {
$$2(selector).attr("checked", "true");
this.callGetcheckboxvalue("specificcat");
} else {
$$2("#specificcat").val(areaString);
}
} else if (category == null ? void 0 : category.match(/variety/)) {
const districtMap = {
CN: "#district1",
HK: "#district2",
TW: "#district2",
JP: "#district4",
KR: "#district4",
US: "#district3",
EU: "#district3",
OT: "#district5"
};
const areaKey = this.info.area;
if (districtMap[areaKey]) {
$$2(districtMap[areaKey]).attr("checked", "true");
this.callGetcheckboxvalue("district");
}
}
}
fillLanguageInfo(language) {
if (!$$2("#language").length || !language) return;
let selector = "";
if (language.match(/汉语/)) {
selector = "#language1";
} else if (language.match(/粤/)) {
selector = "#language2";
} else if (language.match(/英语/)) {
selector = "#language3";
} else if (language.match(/日语/)) {
selector = "#language4";
} else if (language.match(/韩语/)) {
selector = "#language5";
}
if (selector) {
$$2(selector).attr("checked", "true");
this.callGetcheckboxvalue("language");
}
}
callGetcheckboxvalue(name) {
if (typeof window.getcheckboxvalue === "function") {
window.getcheckboxvalue(name);
}
}
processDescription() {
let { description, mediaInfos } = this.info;
mediaInfos.forEach((info) => {
description = description.replace(
`[quote]${info}[/quote]`,
`[mediainfo]${info}[/mediainfo]`
);
});
return description;
}
}
registry$1.register(new TJUPT());
class RED extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "RED";
}
async fill(info) {
this.info = info;
await this.fillMusicInfo();
}
async fillMusicInfo() {
if (!this.info || !this.info.musicJson) {
return;
}
if (document.forms.upload_table) {
document.forms.upload_table.reset = () => {
};
}
const { musicJson } = this.info;
const {
name,
year,
musicInfo,
bbBody,
tags: tags2,
releaseType,
categoryId,
wikiImage
} = musicJson.group;
const groupId = getLocationSearchValueByKey("groupid");
if (!groupId) {
await this.searchAndRedirectToGroup(name, year);
$$2("#categories").val(categoryId - 1);
$$2("#title").val(name);
$$2("#year").val(year);
$$2("#releasetype").val(releaseType);
$$2("#tags").val(tags2.join(", "));
$$2("#album_desc").val(bbBody);
$$2("#image").val(wikiImage);
this.fillArtistsForm(musicInfo);
}
this.fillReleaseInfo(musicJson.torrent);
this.fillTorrentFile();
}
async searchAndRedirectToGroup(name, year) {
var _a2;
const url = `/ajax.php?action=browse&searchstr=${encodeURIComponent(name)} ${year}`;
try {
const searchResult = await GMFetch(url, {
responseType: "json"
});
if (searchResult.status === "success" && searchResult.response.results.length > 0) {
const groupId = searchResult.response.results[0].groupId;
const timestampMatchArray = location.hash && location.hash.match(/(^|#)timestamp=([^#]*)(#|$)/);
const timestamp2 = (_a2 = timestampMatchArray == null ? void 0 : timestampMatchArray[2]) != null ? _a2 : "";
location.href = `${CURRENT_SITE_INFO.url}${CURRENT_SITE_INFO.uploadPath}?groupid=${groupId}#timestamp=${timestamp2}`;
return true;
}
} catch (error) {
console.error("Error searching for group:", error);
}
return false;
}
fillArtistsForm(musicInfo) {
const artistTypeMap = {
artists: "1",
with: "2",
composers: "4",
conductor: "5",
dj: "6",
producer: "7",
remixedBy: "3"
};
const artists = [];
Object.keys(musicInfo).forEach((key) => {
const typeKey = key;
const values = musicInfo[typeKey].map((value) => __spreadProps(__spreadValues({}, value), {
type: artistTypeMap[typeKey]
}));
artists.push(...values);
});
for (let i = 1; i < artists.length; i++) {
window.AddArtistField();
}
artists.forEach((artist, index) => {
const selector = index > 0 ? `#artist_${index}` : "#artist";
$$2(selector).val(artist.name).next().val(artist.type || "");
});
}
fillReleaseInfo(info) {
var _a2;
const {
remasterYear,
remasterRecordLabel,
remasterCatalogueNumber,
format: format2,
encoding,
media,
description,
scene,
remasterTitle
} = info;
$$2("#remaster_record_label").val(remasterRecordLabel);
$$2("#remaster_catalogue_number").val(remasterCatalogueNumber);
$$2("#format").val(format2);
$$2("#bitrate").val(encoding);
$$2("#media").val(media);
if (media === "CD" && format2 === "FLAC") {
(_a2 = document.querySelector("#format")) == null ? void 0 : _a2.dispatchEvent(new Event("change"));
}
$$2("#remaster_year").val(remasterYear);
$$2("#release_desc").val(description);
if (scene) {
$$2("#scene").attr("checked", "true");
}
if (remasterTitle) {
$$2("#remaster_title").val(remasterTitle);
}
}
}
registry$1.register(new RED());
class KG extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "KG";
}
async fill(info) {
this.info = info;
await this.processUpload();
}
async processUpload() {
var _a2;
if (!this.info) return;
const { imdbUrl, mediaInfos, resolution, source, videoType } = this.info;
const mediaInfo = (_a2 = mediaInfos == null ? void 0 : mediaInfos[0]) != null ? _a2 : "";
if (!imdbUrl) return;
$$2('input[type="submit"][value="next >>"]').hide().after("loading...
");
$$2('input[name="title"]').val(imdbUrl);
await this.fetchAndFillIMDbData(imdbUrl);
this.fillSourceAndResolution(source, resolution, videoType);
this.fillSubtitleInfo(mediaInfo, videoType);
if (videoType === "dvd") {
$$2('input[name="dvdr"]').attr("checked", "true");
const dvdSpecs = this.buildDvdSpecs();
$$2("#ripspecs").val(dvdSpecs);
} else {
$$2("#ripspecs").val(mediaInfo);
}
}
async fetchAndFillIMDbData(imdbUrl) {
try {
const formData = new FormData();
formData.append("upstep", "2");
formData.append("type", "1");
formData.append("title", imdbUrl);
const doc = await GMFetch(`${PT_SITE.KG.url}/upload.php`, {
method: "POST",
data: formData
});
const uploadPage = new DOMParser().parseFromString(doc, "text/html");
$$2("#upside+div").html($$2("#upside+div", uploadPage).html());
await this.fillIMDbDetails(imdbUrl);
} catch (error) {
console.error("Error fetching IMDB data:", error);
}
}
async fillIMDbDetails(imdbUrl) {
if (!this.info) return;
const imdbData = await getIMDBData(imdbUrl);
if (!imdbData) return;
const siteInfo = PT_SITE.KG;
const { screenshots, poster: infoPoster } = this.info;
const { country, Languages: languages } = imdbData.details;
$$2('input[name="lang"]').val(languages);
let { description, genre, poster = "" } = imdbData;
const genreMap = siteInfo.genres.map;
const countryMap = siteInfo.country.map;
let countryValue = "";
if (country) {
countryValue = country.split(",")[0];
if (countryValue === "United States") {
countryValue = "USA";
} else if (countryValue === "United Kingdom") {
countryValue = "UK";
}
}
if (!poster) {
poster = infoPoster || "";
}
$$2('select[name="country_id"]').val(
countryMap[countryValue]
);
const descriptionBBCode = `[img]${poster}[/img]
Synopsis:
[quote]${description}[/quote]
${screenshots.map((img) => `[img]${encodeURI(img)}[/img]`).join("")}`;
$$2("#bbcodetextarea").html(descriptionBBCode);
const [mainGenre, otherGenre = ""] = genre;
$$2('select[name="genre_main_id"]').val(
genreMap[mainGenre]
);
$$2('select[name="subgenre"]').val(
genreMap[otherGenre]
);
}
fillSourceAndResolution(source, resolution, videoType) {
if (!source || !resolution || !videoType) return;
const siteInfo = PT_SITE.KG;
$$2(siteInfo.source.selector).val(
siteInfo.source.map[source]
);
if (!videoType.match("bluray")) {
$$2(siteInfo.resolution.selector).val(
siteInfo.resolution.map[resolution]
);
} else {
$$2(siteInfo.resolution.selector).val("3");
}
}
fillSubtitleInfo(mediaInfo, videoType) {
if (!mediaInfo || !videoType) return;
const isBluray = videoType.match(/bluray/i);
const parsedMedia = parseMedia(mediaInfo, !!isBluray);
if (!parsedMedia) return;
const { subtitleTracks = [] } = parsedMedia;
if (subtitleTracks.length) {
const subtitleNames = subtitleTracks.map((track) => track.language);
$$2('input[name="subs"]').val(subtitleNames.join(","));
}
}
buildDvdSpecs() {
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
if (!this.info) return "";
const { mediaInfos, size, audioCodec } = this.info;
const mediaInfo = (_a2 = mediaInfos == null ? void 0 : mediaInfos[0]) != null ? _a2 : "";
const scanType = mediaInfo.includes("NTSC") ? "NTSC" : "PAL";
const dvdType = getBDTypeBasedOnSize(size);
const audioChannelNumber = ((_b = mediaInfo.match(/Channel\(s\)\s+:\s+(\d)/)) == null ? void 0 : _b[1]) || "2";
const audioName = `${audioCodec == null ? void 0 : audioCodec.toUpperCase()} ${audioChannelNumber === "6" ? "5.1" : `${audioChannelNumber}.0`}`;
const IFOMediaInfo = (_d = (_c = this.info.mediaInfos) == null ? void 0 : _c.find((info) => info.includes(".IFO"))) != null ? _d : "";
const runtime = (_g = (_f = (_e = IFOMediaInfo.match(/Duration\s*?:([^\n]+)/)) == null ? void 0 : _e[1]) == null ? void 0 : _f.replace(/\s/g, "")) != null ? _g : "";
const hour = (_i = (_h = runtime.match(/(\d)+h/)) == null ? void 0 : _h[1]) != null ? _i : "00";
const minute = (_k = (_j = runtime.match(/(\d+)(mn|min)/)) == null ? void 0 : _j[1]) != null ? _k : "";
return `DVD Label:
DVD Format: ${dvdType} ${scanType}
DVD Audio: ${audioName}
Program(s): Unknown
Menus: Untouched
Video: Untouched
Audio: Untouched
DVD extras: Untouched
Extras contain:
DVD runtime(s): ${+hour < 10 ? `0${hour}` : hour}:${minute}`;
}
}
registry$1.register(new KG());
class PTP extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "PTP";
}
fill(info) {
this.info = info;
if (!this.info) return;
const groupId = getLocationSearchValueByKey("groupid");
if (!groupId) {
this.fillIMDbAndTriggerAutoFill();
}
this.updateResolutionAndCodec();
this.fillBasicInfo();
this.fillDescription();
this.handleEditionInfo();
this.fillSubtitleInfo();
this.fillTorrentFile();
}
fillIMDbAndTriggerAutoFill() {
if (!this.info) return;
const { imdbUrl } = this.info;
const currentSiteInfo = PT_SITE.PTP;
$$2(currentSiteInfo.imdb.selector).val(imdbUrl || 0);
AutoFill();
}
updateResolutionAndCodec() {
if (!this.info) return;
const { title, videoType, resolution, videoCodec, size } = this.info;
this.info.resolution = this.getResolution(resolution, videoType, title);
this.info.videoCodec = this.getVideoCodec(
videoCodec || "",
videoType,
size
);
}
fillBasicInfo() {
if (!this.info) return;
const currentSiteInfo = PT_SITE.PTP;
const keyArray = [
"category",
"source",
"videoCodec",
"resolution"
];
keyArray.forEach((key) => {
const { selector = "", map: map2 } = currentSiteInfo[key];
if (map2) {
const mapValue = map2[this.info[key]];
$$2(selector).val(mapValue);
} else {
$$2(selector).val(this.info[key]);
}
});
}
fillDescription() {
if (!this.info) return;
const currentSiteInfo = PT_SITE.PTP;
const { sourceSite, originalDescription } = this.info;
if (sourceSite.match(/PTP/i)) {
$$2(currentSiteInfo.description.selector).val(originalDescription || "");
} else {
const description = this.getDescription();
$$2(currentSiteInfo.description.selector).val(description);
}
}
handleEditionInfo() {
if (!this.info) return;
const { videoType, tags: tags2 } = this.info;
const editionInfo = this.getEditionInfo(videoType, tags2);
if (editionInfo.length > 0) {
$$2("#remaster").attr("checked", "true");
window.Remaster();
editionInfo.forEach((edition) => {
const selector = $$2("#remaster_tags a").filter(function() {
return new RegExp(edition).test($$2(this).text());
});
if (selector.length > 0) {
const event = new Event("click");
selector[0].dispatchEvent(event);
}
});
}
}
fillSubtitleInfo() {
if (!this.info || !this.info.mediaInfos || this.info.mediaInfos.length === 0)
return;
const parsedMedia = parseMedia(this.info.mediaInfos[0]);
if (!parsedMedia) return;
const { subtitleTracks = [] } = parsedMedia;
if (subtitleTracks && subtitleTracks.length > 0) {
subtitleTracks.forEach((subtitle) => {
const subtitleSelector = $$2(".languageselector li").filter(function() {
return new RegExp(subtitle.language).test($$2(this).text());
});
if (subtitle.language !== "English" && subtitleSelector.length > 0) {
subtitleSelector.find("input").attr("checked", "true");
}
});
}
}
getEditionInfo(videoType, tags2) {
const editionInfo = [];
if (videoType === "remux") {
editionInfo.push("Remux");
}
Object.keys(tags2).forEach((tag) => {
if (tags2[tag]) {
const tagName = PT_SITE.PTP.targetInfo.editionTags[tag];
if (tagName) {
editionInfo.push(tagName);
}
}
});
return editionInfo;
}
getVideoCodec(videoCodec, videoType, size) {
if (!videoType || !size) return videoCodec;
if (videoType === "bluray") {
return getBDTypeBasedOnSize(size);
} else if (videoType === "dvd") {
const GBSize = size / 1e9;
return GBSize < 5 ? "DVD5" : "DVD9";
}
return videoCodec;
}
getResolution(resolution, videoType, title) {
if (!videoType || !title) return resolution;
if (videoType === "DVD" && title.match(/NTSC/i)) {
return "NTSC";
} else if (videoType === "DVD" && title.match(/PAL/i)) {
return "PAL";
}
return resolution;
}
getDescription() {
if (!this.info) return "";
const { mediaInfos, comparisons, screenshots } = this.info;
let filterDescription = "";
if (mediaInfos.length > 0) {
mediaInfos.forEach((mediaInfo) => {
mediaInfo = mediaInfo.replace(
/[\u00A0\u1680\u180e\u2000-\u2009\u200a\u200b\u202f\u205f\u3000]/g,
""
);
filterDescription += `[mediainfo]${mediaInfo}[/mediainfo]
`;
});
}
if (comparisons && comparisons.length > 0) {
for (const comparison of comparisons) {
filterDescription += `
${comparison.reason}[comparison=${comparison.title}]
${comparison.imgs.join("\n")}
[/comparison]
`;
}
}
const screenshotsSection = screenshots.map((item) => `[img]${item}[/img]`).join("\n");
return `${filterDescription}
${screenshotsSection}`;
}
}
registry$1.register(new PTP());
class MTeam extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "MTeam";
}
fill(info) {
this.info = info;
this.setupMutationObserver();
}
setupMutationObserver() {
const targetNode = document.getElementById("root");
if (!targetNode) return;
const config = { childList: true, subtree: true };
const observer = new MutationObserver((mutationsList, observer2) => {
for (const mutation of mutationsList) {
if (mutation.type === "childList") {
const targetElement = document.querySelector("#name");
const editor = document.querySelector(".editor-input");
if (targetElement && editor) {
observer2.disconnect();
this.fillMTeamInfo();
break;
}
}
}
});
observer.observe(targetNode, config);
}
fillMTeamInfo() {
var _a2;
if (!this.info) return;
const currentSiteInfo = PT_SITE.MTeam;
const {
title,
subtitle,
audioCodec,
doubanUrl,
imdbUrl,
mediaInfos,
tags: tags2,
source
} = this.info;
const mediaInfo = (_a2 = mediaInfos == null ? void 0 : mediaInfos[0]) != null ? _a2 : "";
this.setInputValue(currentSiteInfo.name.selector, title);
this.setInputValue(currentSiteInfo.subtitle.selector, subtitle || "");
this.setInputValue(currentSiteInfo.douban.selector, doubanUrl || "");
this.setInputValue(currentSiteInfo.imdb.selector, imdbUrl || "");
this.setInputValue(currentSiteInfo.mediaInfo.selector, mediaInfo);
this.setSelectValue(currentSiteInfo.source.selector, source || "");
this.setSelectValue(
currentSiteInfo.audioCodec.selector,
currentSiteInfo.audioCodec.map[audioCodec]
);
this.info.description = this.info.description.replace(mediaInfo.trim(), "");
this.processDescription();
this.fillMTDescription(this.info.description);
this.fillCategory();
this.fillTags(tags2, currentSiteInfo.tags);
this.fillTorrentFile();
}
fillTags(tags2, siteTagsMap) {
let timeout = 0;
Object.keys(tags2).forEach((key) => {
const siteTagSelector = siteTagsMap[key];
if (tags2[key] && siteTagSelector) {
setTimeout(() => {
this.setInputValue(siteTagSelector, "", true);
}, timeout);
timeout += 100;
}
});
}
setSelectValue(selector, value) {
const select = document.querySelector(selector);
if (select) {
const lastValue = select.value;
select.value = value;
const tracker = select._valueTracker;
if (tracker) {
tracker.setValue(lastValue);
}
const event = new Event("change", { bubbles: true });
select.dispatchEvent(event);
setTimeout(() => {
Array.from(
document.querySelectorAll(
".ant-select-item-option-active .ant-select-item-option-content"
)
).forEach((el) => {
el.dispatchEvent(new Event("click", { bubbles: true }));
});
}, 1e3);
}
}
setInputValue(selector, value, isCheckbox = false) {
const input = document.querySelector(selector);
if (input) {
const lastValue = input.value;
input.value = value;
const tracker = input._valueTracker;
if (tracker) {
tracker.setValue(lastValue);
}
const event = new Event(isCheckbox ? "click" : "input", {
bubbles: true
});
input.dispatchEvent(event);
}
}
fillMTDescription(description) {
var _a2;
const editor = (_a2 = document.querySelector(".editor-input")) == null ? void 0 : _a2.__lexicalEditor;
if (!editor) return;
const descriptionArray = description.split("\n").map((line) => ({
type: "paragraph",
children: [{ type: "text", text: line }]
}));
const content = JSON.stringify({
root: {
children: descriptionArray,
type: "root"
}
});
const editorState = editor.parseEditorState(content);
editor.update(() => {
editor.setEditorState(editorState);
});
}
}
registry$1.register(new MTeam());
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
function getDefaultExportFromCjs(x2) {
return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
}
function getAugmentedNamespace(n) {
if (n.__esModule) return n;
var f2 = n.default;
if (typeof f2 == "function") {
var a2 = function a3() {
if (this instanceof a3) {
return Reflect.construct(f2, arguments, this.constructor);
}
return f2.apply(this, arguments);
};
a2.prototype = f2.prototype;
} else a2 = {};
Object.defineProperty(a2, "__esModule", { value: true });
Object.keys(n).forEach(function(k2) {
var d2 = Object.getOwnPropertyDescriptor(n, k2);
Object.defineProperty(a2, k2, d2.get ? d2 : {
enumerable: true,
get: function() {
return n[k2];
}
});
});
return a2;
}
var buffer = {};
var base64Js = {};
base64Js.byteLength = byteLength;
base64Js.toByteArray = toByteArray;
base64Js.fromByteArray = fromByteArray;
var lookup$1 = [];
var revLookup = [];
var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array;
var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
for (var i$2 = 0, len = code.length; i$2 < len; ++i$2) {
lookup$1[i$2] = code[i$2];
revLookup[code.charCodeAt(i$2)] = i$2;
}
revLookup["-".charCodeAt(0)] = 62;
revLookup["_".charCodeAt(0)] = 63;
function getLens(b64) {
var len = b64.length;
if (len % 4 > 0) {
throw new Error("Invalid string. Length must be a multiple of 4");
}
var validLen = b64.indexOf("=");
if (validLen === -1) validLen = len;
var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
return [validLen, placeHoldersLen];
}
function byteLength(b64) {
var lens = getLens(b64);
var validLen = lens[0];
var placeHoldersLen = lens[1];
return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
}
function _byteLength(b64, validLen, placeHoldersLen) {
return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
}
function toByteArray(b64) {
var tmp;
var lens = getLens(b64);
var validLen = lens[0];
var placeHoldersLen = lens[1];
var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
var curByte = 0;
var len = placeHoldersLen > 0 ? validLen - 4 : validLen;
var i;
for (i = 0; i < len; i += 4) {
tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
arr[curByte++] = tmp >> 16 & 255;
arr[curByte++] = tmp >> 8 & 255;
arr[curByte++] = tmp & 255;
}
if (placeHoldersLen === 2) {
tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
arr[curByte++] = tmp & 255;
}
if (placeHoldersLen === 1) {
tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
arr[curByte++] = tmp >> 8 & 255;
arr[curByte++] = tmp & 255;
}
return arr;
}
function tripletToBase64(num) {
return lookup$1[num >> 18 & 63] + lookup$1[num >> 12 & 63] + lookup$1[num >> 6 & 63] + lookup$1[num & 63];
}
function encodeChunk(uint8, start, end) {
var tmp;
var output = [];
for (var i = start; i < end; i += 3) {
tmp = (uint8[i] << 16 & 16711680) + (uint8[i + 1] << 8 & 65280) + (uint8[i + 2] & 255);
output.push(tripletToBase64(tmp));
}
return output.join("");
}
function fromByteArray(uint8) {
var tmp;
var len = uint8.length;
var extraBytes = len % 3;
var parts = [];
var maxChunkLength = 16383;
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
}
if (extraBytes === 1) {
tmp = uint8[len - 1];
parts.push(
lookup$1[tmp >> 2] + lookup$1[tmp << 4 & 63] + "=="
);
} else if (extraBytes === 2) {
tmp = (uint8[len - 2] << 8) + uint8[len - 1];
parts.push(
lookup$1[tmp >> 10] + lookup$1[tmp >> 4 & 63] + lookup$1[tmp << 2 & 63] + "="
);
}
return parts.join("");
}
var ieee754 = {};
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */
ieee754.read = function(buffer2, offset, isLE, mLen, nBytes) {
var e2, m2;
var eLen = nBytes * 8 - mLen - 1;
var eMax = (1 << eLen) - 1;
var eBias = eMax >> 1;
var nBits = -7;
var i = isLE ? nBytes - 1 : 0;
var d2 = isLE ? -1 : 1;
var s2 = buffer2[offset + i];
i += d2;
e2 = s2 & (1 << -nBits) - 1;
s2 >>= -nBits;
nBits += eLen;
for (; nBits > 0; e2 = e2 * 256 + buffer2[offset + i], i += d2, nBits -= 8) {
}
m2 = e2 & (1 << -nBits) - 1;
e2 >>= -nBits;
nBits += mLen;
for (; nBits > 0; m2 = m2 * 256 + buffer2[offset + i], i += d2, nBits -= 8) {
}
if (e2 === 0) {
e2 = 1 - eBias;
} else if (e2 === eMax) {
return m2 ? NaN : (s2 ? -1 : 1) * Infinity;
} else {
m2 = m2 + Math.pow(2, mLen);
e2 = e2 - eBias;
}
return (s2 ? -1 : 1) * m2 * Math.pow(2, e2 - mLen);
};
ieee754.write = function(buffer2, value, offset, isLE, mLen, nBytes) {
var e2, m2, c2;
var eLen = nBytes * 8 - mLen - 1;
var eMax = (1 << eLen) - 1;
var eBias = eMax >> 1;
var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
var i = isLE ? 0 : nBytes - 1;
var d2 = isLE ? 1 : -1;
var s2 = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
value = Math.abs(value);
if (isNaN(value) || value === Infinity) {
m2 = isNaN(value) ? 1 : 0;
e2 = eMax;
} else {
e2 = Math.floor(Math.log(value) / Math.LN2);
if (value * (c2 = Math.pow(2, -e2)) < 1) {
e2--;
c2 *= 2;
}
if (e2 + eBias >= 1) {
value += rt / c2;
} else {
value += rt * Math.pow(2, 1 - eBias);
}
if (value * c2 >= 2) {
e2++;
c2 /= 2;
}
if (e2 + eBias >= eMax) {
m2 = 0;
e2 = eMax;
} else if (e2 + eBias >= 1) {
m2 = (value * c2 - 1) * Math.pow(2, mLen);
e2 = e2 + eBias;
} else {
m2 = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
e2 = 0;
}
}
for (; mLen >= 8; buffer2[offset + i] = m2 & 255, i += d2, m2 /= 256, mLen -= 8) {
}
e2 = e2 << mLen | m2;
eLen += mLen;
for (; eLen > 0; buffer2[offset + i] = e2 & 255, i += d2, e2 /= 256, eLen -= 8) {
}
buffer2[offset + i - d2] |= s2 * 128;
};
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh
* @license MIT
*/
(function(exports) {
var base64 = base64Js;
var ieee754$1 = ieee754;
var customInspectSymbol = typeof Symbol === "function" && typeof Symbol["for"] === "function" ? Symbol["for"]("nodejs.util.inspect.custom") : null;
exports.Buffer = Buffer2;
exports.SlowBuffer = SlowBuffer;
exports.INSPECT_MAX_BYTES = 50;
var K_MAX_LENGTH = 2147483647;
exports.kMaxLength = K_MAX_LENGTH;
Buffer2.TYPED_ARRAY_SUPPORT = typedArraySupport();
if (!Buffer2.TYPED_ARRAY_SUPPORT && typeof console !== "undefined" && typeof console.error === "function") {
console.error(
"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."
);
}
function typedArraySupport() {
try {
var arr = new Uint8Array(1);
var proto = { foo: function() {
return 42;
} };
Object.setPrototypeOf(proto, Uint8Array.prototype);
Object.setPrototypeOf(arr, proto);
return arr.foo() === 42;
} catch (e2) {
return false;
}
}
Object.defineProperty(Buffer2.prototype, "parent", {
enumerable: true,
get: function() {
if (!Buffer2.isBuffer(this)) return void 0;
return this.buffer;
}
});
Object.defineProperty(Buffer2.prototype, "offset", {
enumerable: true,
get: function() {
if (!Buffer2.isBuffer(this)) return void 0;
return this.byteOffset;
}
});
function createBuffer(length) {
if (length > K_MAX_LENGTH) {
throw new RangeError('The value "' + length + '" is invalid for option "size"');
}
var buf = new Uint8Array(length);
Object.setPrototypeOf(buf, Buffer2.prototype);
return buf;
}
function Buffer2(arg, encodingOrOffset, length) {
if (typeof arg === "number") {
if (typeof encodingOrOffset === "string") {
throw new TypeError(
'The "string" argument must be of type string. Received type number'
);
}
return allocUnsafe(arg);
}
return from(arg, encodingOrOffset, length);
}
Buffer2.poolSize = 8192;
function from(value, encodingOrOffset, length) {
if (typeof value === "string") {
return fromString(value, encodingOrOffset);
}
if (ArrayBuffer.isView(value)) {
return fromArrayView(value);
}
if (value == null) {
throw new TypeError(
"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value
);
}
if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {
return fromArrayBuffer(value, encodingOrOffset, length);
}
if (typeof SharedArrayBuffer !== "undefined" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {
return fromArrayBuffer(value, encodingOrOffset, length);
}
if (typeof value === "number") {
throw new TypeError(
'The "value" argument must not be of type number. Received type number'
);
}
var valueOf = value.valueOf && value.valueOf();
if (valueOf != null && valueOf !== value) {
return Buffer2.from(valueOf, encodingOrOffset, length);
}
var b = fromObject(value);
if (b) return b;
if (typeof Symbol !== "undefined" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === "function") {
return Buffer2.from(
value[Symbol.toPrimitive]("string"),
encodingOrOffset,
length
);
}
throw new TypeError(
"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value
);
}
Buffer2.from = function(value, encodingOrOffset, length) {
return from(value, encodingOrOffset, length);
};
Object.setPrototypeOf(Buffer2.prototype, Uint8Array.prototype);
Object.setPrototypeOf(Buffer2, Uint8Array);
function assertSize(size) {
if (typeof size !== "number") {
throw new TypeError('"size" argument must be of type number');
} else if (size < 0) {
throw new RangeError('The value "' + size + '" is invalid for option "size"');
}
}
function alloc(size, fill, encoding) {
assertSize(size);
if (size <= 0) {
return createBuffer(size);
}
if (fill !== void 0) {
return typeof encoding === "string" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);
}
return createBuffer(size);
}
Buffer2.alloc = function(size, fill, encoding) {
return alloc(size, fill, encoding);
};
function allocUnsafe(size) {
assertSize(size);
return createBuffer(size < 0 ? 0 : checked(size) | 0);
}
Buffer2.allocUnsafe = function(size) {
return allocUnsafe(size);
};
Buffer2.allocUnsafeSlow = function(size) {
return allocUnsafe(size);
};
function fromString(string2, encoding) {
if (typeof encoding !== "string" || encoding === "") {
encoding = "utf8";
}
if (!Buffer2.isEncoding(encoding)) {
throw new TypeError("Unknown encoding: " + encoding);
}
var length = byteLength2(string2, encoding) | 0;
var buf = createBuffer(length);
var actual = buf.write(string2, encoding);
if (actual !== length) {
buf = buf.slice(0, actual);
}
return buf;
}
function fromArrayLike(array) {
var length = array.length < 0 ? 0 : checked(array.length) | 0;
var buf = createBuffer(length);
for (var i = 0; i < length; i += 1) {
buf[i] = array[i] & 255;
}
return buf;
}
function fromArrayView(arrayView) {
if (isInstance(arrayView, Uint8Array)) {
var copy = new Uint8Array(arrayView);
return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);
}
return fromArrayLike(arrayView);
}
function fromArrayBuffer(array, byteOffset, length) {
if (byteOffset < 0 || array.byteLength < byteOffset) {
throw new RangeError('"offset" is outside of buffer bounds');
}
if (array.byteLength < byteOffset + (length || 0)) {
throw new RangeError('"length" is outside of buffer bounds');
}
var buf;
if (byteOffset === void 0 && length === void 0) {
buf = new Uint8Array(array);
} else if (length === void 0) {
buf = new Uint8Array(array, byteOffset);
} else {
buf = new Uint8Array(array, byteOffset, length);
}
Object.setPrototypeOf(buf, Buffer2.prototype);
return buf;
}
function fromObject(obj) {
if (Buffer2.isBuffer(obj)) {
var len = checked(obj.length) | 0;
var buf = createBuffer(len);
if (buf.length === 0) {
return buf;
}
obj.copy(buf, 0, 0, len);
return buf;
}
if (obj.length !== void 0) {
if (typeof obj.length !== "number" || numberIsNaN(obj.length)) {
return createBuffer(0);
}
return fromArrayLike(obj);
}
if (obj.type === "Buffer" && Array.isArray(obj.data)) {
return fromArrayLike(obj.data);
}
}
function checked(length) {
if (length >= K_MAX_LENGTH) {
throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes");
}
return length | 0;
}
function SlowBuffer(length) {
if (+length != length) {
length = 0;
}
return Buffer2.alloc(+length);
}
Buffer2.isBuffer = function isBuffer(b) {
return b != null && b._isBuffer === true && b !== Buffer2.prototype;
};
Buffer2.compare = function compare(a2, b) {
if (isInstance(a2, Uint8Array)) a2 = Buffer2.from(a2, a2.offset, a2.byteLength);
if (isInstance(b, Uint8Array)) b = Buffer2.from(b, b.offset, b.byteLength);
if (!Buffer2.isBuffer(a2) || !Buffer2.isBuffer(b)) {
throw new TypeError(
'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
);
}
if (a2 === b) return 0;
var x2 = a2.length;
var y2 = b.length;
for (var i = 0, len = Math.min(x2, y2); i < len; ++i) {
if (a2[i] !== b[i]) {
x2 = a2[i];
y2 = b[i];
break;
}
}
if (x2 < y2) return -1;
if (y2 < x2) return 1;
return 0;
};
Buffer2.isEncoding = function isEncoding(encoding) {
switch (String(encoding).toLowerCase()) {
case "hex":
case "utf8":
case "utf-8":
case "ascii":
case "latin1":
case "binary":
case "base64":
case "ucs2":
case "ucs-2":
case "utf16le":
case "utf-16le":
return true;
default:
return false;
}
};
Buffer2.concat = function concat2(list, length) {
if (!Array.isArray(list)) {
throw new TypeError('"list" argument must be an Array of Buffers');
}
if (list.length === 0) {
return Buffer2.alloc(0);
}
var i;
if (length === void 0) {
length = 0;
for (i = 0; i < list.length; ++i) {
length += list[i].length;
}
}
var buffer2 = Buffer2.allocUnsafe(length);
var pos = 0;
for (i = 0; i < list.length; ++i) {
var buf = list[i];
if (isInstance(buf, Uint8Array)) {
if (pos + buf.length > buffer2.length) {
Buffer2.from(buf).copy(buffer2, pos);
} else {
Uint8Array.prototype.set.call(
buffer2,
buf,
pos
);
}
} else if (!Buffer2.isBuffer(buf)) {
throw new TypeError('"list" argument must be an Array of Buffers');
} else {
buf.copy(buffer2, pos);
}
pos += buf.length;
}
return buffer2;
};
function byteLength2(string2, encoding) {
if (Buffer2.isBuffer(string2)) {
return string2.length;
}
if (ArrayBuffer.isView(string2) || isInstance(string2, ArrayBuffer)) {
return string2.byteLength;
}
if (typeof string2 !== "string") {
throw new TypeError(
'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof string2
);
}
var len = string2.length;
var mustMatch = arguments.length > 2 && arguments[2] === true;
if (!mustMatch && len === 0) return 0;
var loweredCase = false;
for (; ; ) {
switch (encoding) {
case "ascii":
case "latin1":
case "binary":
return len;
case "utf8":
case "utf-8":
return utf8ToBytes(string2).length;
case "ucs2":
case "ucs-2":
case "utf16le":
case "utf-16le":
return len * 2;
case "hex":
return len >>> 1;
case "base64":
return base64ToBytes(string2).length;
default:
if (loweredCase) {
return mustMatch ? -1 : utf8ToBytes(string2).length;
}
encoding = ("" + encoding).toLowerCase();
loweredCase = true;
}
}
}
Buffer2.byteLength = byteLength2;
function slowToString(encoding, start, end) {
var loweredCase = false;
if (start === void 0 || start < 0) {
start = 0;
}
if (start > this.length) {
return "";
}
if (end === void 0 || end > this.length) {
end = this.length;
}
if (end <= 0) {
return "";
}
end >>>= 0;
start >>>= 0;
if (end <= start) {
return "";
}
if (!encoding) encoding = "utf8";
while (true) {
switch (encoding) {
case "hex":
return hexSlice(this, start, end);
case "utf8":
case "utf-8":
return utf8Slice(this, start, end);
case "ascii":
return asciiSlice(this, start, end);
case "latin1":
case "binary":
return latin1Slice(this, start, end);
case "base64":
return base64Slice(this, start, end);
case "ucs2":
case "ucs-2":
case "utf16le":
case "utf-16le":
return utf16leSlice(this, start, end);
default:
if (loweredCase) throw new TypeError("Unknown encoding: " + encoding);
encoding = (encoding + "").toLowerCase();
loweredCase = true;
}
}
}
Buffer2.prototype._isBuffer = true;
function swap(b, n, m2) {
var i = b[n];
b[n] = b[m2];
b[m2] = i;
}
Buffer2.prototype.swap16 = function swap16() {
var len = this.length;
if (len % 2 !== 0) {
throw new RangeError("Buffer size must be a multiple of 16-bits");
}
for (var i = 0; i < len; i += 2) {
swap(this, i, i + 1);
}
return this;
};
Buffer2.prototype.swap32 = function swap32() {
var len = this.length;
if (len % 4 !== 0) {
throw new RangeError("Buffer size must be a multiple of 32-bits");
}
for (var i = 0; i < len; i += 4) {
swap(this, i, i + 3);
swap(this, i + 1, i + 2);
}
return this;
};
Buffer2.prototype.swap64 = function swap64() {
var len = this.length;
if (len % 8 !== 0) {
throw new RangeError("Buffer size must be a multiple of 64-bits");
}
for (var i = 0; i < len; i += 8) {
swap(this, i, i + 7);
swap(this, i + 1, i + 6);
swap(this, i + 2, i + 5);
swap(this, i + 3, i + 4);
}
return this;
};
Buffer2.prototype.toString = function toString() {
var length = this.length;
if (length === 0) return "";
if (arguments.length === 0) return utf8Slice(this, 0, length);
return slowToString.apply(this, arguments);
};
Buffer2.prototype.toLocaleString = Buffer2.prototype.toString;
Buffer2.prototype.equals = function equals(b) {
if (!Buffer2.isBuffer(b)) throw new TypeError("Argument must be a Buffer");
if (this === b) return true;
return Buffer2.compare(this, b) === 0;
};
Buffer2.prototype.inspect = function inspect() {
var str = "";
var max = exports.INSPECT_MAX_BYTES;
str = this.toString("hex", 0, max).replace(/(.{2})/g, "$1 ").trim();
if (this.length > max) str += " ... ";
return "";
};
if (customInspectSymbol) {
Buffer2.prototype[customInspectSymbol] = Buffer2.prototype.inspect;
}
Buffer2.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
if (isInstance(target, Uint8Array)) {
target = Buffer2.from(target, target.offset, target.byteLength);
}
if (!Buffer2.isBuffer(target)) {
throw new TypeError(
'The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof target
);
}
if (start === void 0) {
start = 0;
}
if (end === void 0) {
end = target ? target.length : 0;
}
if (thisStart === void 0) {
thisStart = 0;
}
if (thisEnd === void 0) {
thisEnd = this.length;
}
if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
throw new RangeError("out of range index");
}
if (thisStart >= thisEnd && start >= end) {
return 0;
}
if (thisStart >= thisEnd) {
return -1;
}
if (start >= end) {
return 1;
}
start >>>= 0;
end >>>= 0;
thisStart >>>= 0;
thisEnd >>>= 0;
if (this === target) return 0;
var x2 = thisEnd - thisStart;
var y2 = end - start;
var len = Math.min(x2, y2);
var thisCopy = this.slice(thisStart, thisEnd);
var targetCopy = target.slice(start, end);
for (var i = 0; i < len; ++i) {
if (thisCopy[i] !== targetCopy[i]) {
x2 = thisCopy[i];
y2 = targetCopy[i];
break;
}
}
if (x2 < y2) return -1;
if (y2 < x2) return 1;
return 0;
};
function bidirectionalIndexOf(buffer2, val, byteOffset, encoding, dir) {
if (buffer2.length === 0) return -1;
if (typeof byteOffset === "string") {
encoding = byteOffset;
byteOffset = 0;
} else if (byteOffset > 2147483647) {
byteOffset = 2147483647;
} else if (byteOffset < -2147483648) {
byteOffset = -2147483648;
}
byteOffset = +byteOffset;
if (numberIsNaN(byteOffset)) {
byteOffset = dir ? 0 : buffer2.length - 1;
}
if (byteOffset < 0) byteOffset = buffer2.length + byteOffset;
if (byteOffset >= buffer2.length) {
if (dir) return -1;
else byteOffset = buffer2.length - 1;
} else if (byteOffset < 0) {
if (dir) byteOffset = 0;
else return -1;
}
if (typeof val === "string") {
val = Buffer2.from(val, encoding);
}
if (Buffer2.isBuffer(val)) {
if (val.length === 0) {
return -1;
}
return arrayIndexOf(buffer2, val, byteOffset, encoding, dir);
} else if (typeof val === "number") {
val = val & 255;
if (typeof Uint8Array.prototype.indexOf === "function") {
if (dir) {
return Uint8Array.prototype.indexOf.call(buffer2, val, byteOffset);
} else {
return Uint8Array.prototype.lastIndexOf.call(buffer2, val, byteOffset);
}
}
return arrayIndexOf(buffer2, [val], byteOffset, encoding, dir);
}
throw new TypeError("val must be string, number or Buffer");
}
function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
var indexSize = 1;
var arrLength = arr.length;
var valLength = val.length;
if (encoding !== void 0) {
encoding = String(encoding).toLowerCase();
if (encoding === "ucs2" || encoding === "ucs-2" || encoding === "utf16le" || encoding === "utf-16le") {
if (arr.length < 2 || val.length < 2) {
return -1;
}
indexSize = 2;
arrLength /= 2;
valLength /= 2;
byteOffset /= 2;
}
}
function read(buf, i2) {
if (indexSize === 1) {
return buf[i2];
} else {
return buf.readUInt16BE(i2 * indexSize);
}
}
var i;
if (dir) {
var foundIndex = -1;
for (i = byteOffset; i < arrLength; i++) {
if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
if (foundIndex === -1) foundIndex = i;
if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
} else {
if (foundIndex !== -1) i -= i - foundIndex;
foundIndex = -1;
}
}
} else {
if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;
for (i = byteOffset; i >= 0; i--) {
var found = true;
for (var j2 = 0; j2 < valLength; j2++) {
if (read(arr, i + j2) !== read(val, j2)) {
found = false;
break;
}
}
if (found) return i;
}
}
return -1;
}
Buffer2.prototype.includes = function includes(val, byteOffset, encoding) {
return this.indexOf(val, byteOffset, encoding) !== -1;
};
Buffer2.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
};
Buffer2.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
};
function hexWrite(buf, string2, offset, length) {
offset = Number(offset) || 0;
var remaining = buf.length - offset;
if (!length) {
length = remaining;
} else {
length = Number(length);
if (length > remaining) {
length = remaining;
}
}
var strLen = string2.length;
if (length > strLen / 2) {
length = strLen / 2;
}
for (var i = 0; i < length; ++i) {
var parsed = parseInt(string2.substr(i * 2, 2), 16);
if (numberIsNaN(parsed)) return i;
buf[offset + i] = parsed;
}
return i;
}
function utf8Write(buf, string2, offset, length) {
return blitBuffer(utf8ToBytes(string2, buf.length - offset), buf, offset, length);
}
function asciiWrite(buf, string2, offset, length) {
return blitBuffer(asciiToBytes(string2), buf, offset, length);
}
function base64Write(buf, string2, offset, length) {
return blitBuffer(base64ToBytes(string2), buf, offset, length);
}
function ucs2Write(buf, string2, offset, length) {
return blitBuffer(utf16leToBytes(string2, buf.length - offset), buf, offset, length);
}
Buffer2.prototype.write = function write(string2, offset, length, encoding) {
if (offset === void 0) {
encoding = "utf8";
length = this.length;
offset = 0;
} else if (length === void 0 && typeof offset === "string") {
encoding = offset;
length = this.length;
offset = 0;
} else if (isFinite(offset)) {
offset = offset >>> 0;
if (isFinite(length)) {
length = length >>> 0;
if (encoding === void 0) encoding = "utf8";
} else {
encoding = length;
length = void 0;
}
} else {
throw new Error(
"Buffer.write(string, encoding, offset[, length]) is no longer supported"
);
}
var remaining = this.length - offset;
if (length === void 0 || length > remaining) length = remaining;
if (string2.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
throw new RangeError("Attempt to write outside buffer bounds");
}
if (!encoding) encoding = "utf8";
var loweredCase = false;
for (; ; ) {
switch (encoding) {
case "hex":
return hexWrite(this, string2, offset, length);
case "utf8":
case "utf-8":
return utf8Write(this, string2, offset, length);
case "ascii":
case "latin1":
case "binary":
return asciiWrite(this, string2, offset, length);
case "base64":
return base64Write(this, string2, offset, length);
case "ucs2":
case "ucs-2":
case "utf16le":
case "utf-16le":
return ucs2Write(this, string2, offset, length);
default:
if (loweredCase) throw new TypeError("Unknown encoding: " + encoding);
encoding = ("" + encoding).toLowerCase();
loweredCase = true;
}
}
};
Buffer2.prototype.toJSON = function toJSON2() {
return {
type: "Buffer",
data: Array.prototype.slice.call(this._arr || this, 0)
};
};
function base64Slice(buf, start, end) {
if (start === 0 && end === buf.length) {
return base64.fromByteArray(buf);
} else {
return base64.fromByteArray(buf.slice(start, end));
}
}
function utf8Slice(buf, start, end) {
end = Math.min(buf.length, end);
var res = [];
var i = start;
while (i < end) {
var firstByte = buf[i];
var codePoint = null;
var bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;
if (i + bytesPerSequence <= end) {
var secondByte, thirdByte, fourthByte, tempCodePoint;
switch (bytesPerSequence) {
case 1:
if (firstByte < 128) {
codePoint = firstByte;
}
break;
case 2:
secondByte = buf[i + 1];
if ((secondByte & 192) === 128) {
tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;
if (tempCodePoint > 127) {
codePoint = tempCodePoint;
}
}
break;
case 3:
secondByte = buf[i + 1];
thirdByte = buf[i + 2];
if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {
tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;
if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {
codePoint = tempCodePoint;
}
}
break;
case 4:
secondByte = buf[i + 1];
thirdByte = buf[i + 2];
fourthByte = buf[i + 3];
if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {
tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;
if (tempCodePoint > 65535 && tempCodePoint < 1114112) {
codePoint = tempCodePoint;
}
}
}
}
if (codePoint === null) {
codePoint = 65533;
bytesPerSequence = 1;
} else if (codePoint > 65535) {
codePoint -= 65536;
res.push(codePoint >>> 10 & 1023 | 55296);
codePoint = 56320 | codePoint & 1023;
}
res.push(codePoint);
i += bytesPerSequence;
}
return decodeCodePointsArray(res);
}
var MAX_ARGUMENTS_LENGTH = 4096;
function decodeCodePointsArray(codePoints) {
var len = codePoints.length;
if (len <= MAX_ARGUMENTS_LENGTH) {
return String.fromCharCode.apply(String, codePoints);
}
var res = "";
var i = 0;
while (i < len) {
res += String.fromCharCode.apply(
String,
codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
);
}
return res;
}
function asciiSlice(buf, start, end) {
var ret = "";
end = Math.min(buf.length, end);
for (var i = start; i < end; ++i) {
ret += String.fromCharCode(buf[i] & 127);
}
return ret;
}
function latin1Slice(buf, start, end) {
var ret = "";
end = Math.min(buf.length, end);
for (var i = start; i < end; ++i) {
ret += String.fromCharCode(buf[i]);
}
return ret;
}
function hexSlice(buf, start, end) {
var len = buf.length;
if (!start || start < 0) start = 0;
if (!end || end < 0 || end > len) end = len;
var out = "";
for (var i = start; i < end; ++i) {
out += hexSliceLookupTable[buf[i]];
}
return out;
}
function utf16leSlice(buf, start, end) {
var bytes = buf.slice(start, end);
var res = "";
for (var i = 0; i < bytes.length - 1; i += 2) {
res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
}
return res;
}
Buffer2.prototype.slice = function slice(start, end) {
var len = this.length;
start = ~~start;
end = end === void 0 ? len : ~~end;
if (start < 0) {
start += len;
if (start < 0) start = 0;
} else if (start > len) {
start = len;
}
if (end < 0) {
end += len;
if (end < 0) end = 0;
} else if (end > len) {
end = len;
}
if (end < start) end = start;
var newBuf = this.subarray(start, end);
Object.setPrototypeOf(newBuf, Buffer2.prototype);
return newBuf;
};
function checkOffset(offset, ext, length) {
if (offset % 1 !== 0 || offset < 0) throw new RangeError("offset is not uint");
if (offset + ext > length) throw new RangeError("Trying to access beyond buffer length");
}
Buffer2.prototype.readUintLE = Buffer2.prototype.readUIntLE = function readUIntLE(offset, byteLength3, noAssert) {
offset = offset >>> 0;
byteLength3 = byteLength3 >>> 0;
if (!noAssert) checkOffset(offset, byteLength3, this.length);
var val = this[offset];
var mul = 1;
var i = 0;
while (++i < byteLength3 && (mul *= 256)) {
val += this[offset + i] * mul;
}
return val;
};
Buffer2.prototype.readUintBE = Buffer2.prototype.readUIntBE = function readUIntBE(offset, byteLength3, noAssert) {
offset = offset >>> 0;
byteLength3 = byteLength3 >>> 0;
if (!noAssert) {
checkOffset(offset, byteLength3, this.length);
}
var val = this[offset + --byteLength3];
var mul = 1;
while (byteLength3 > 0 && (mul *= 256)) {
val += this[offset + --byteLength3] * mul;
}
return val;
};
Buffer2.prototype.readUint8 = Buffer2.prototype.readUInt8 = function readUInt8(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 1, this.length);
return this[offset];
};
Buffer2.prototype.readUint16LE = Buffer2.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 2, this.length);
return this[offset] | this[offset + 1] << 8;
};
Buffer2.prototype.readUint16BE = Buffer2.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 2, this.length);
return this[offset] << 8 | this[offset + 1];
};
Buffer2.prototype.readUint32LE = Buffer2.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 4, this.length);
return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;
};
Buffer2.prototype.readUint32BE = Buffer2.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 4, this.length);
return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
};
Buffer2.prototype.readIntLE = function readIntLE(offset, byteLength3, noAssert) {
offset = offset >>> 0;
byteLength3 = byteLength3 >>> 0;
if (!noAssert) checkOffset(offset, byteLength3, this.length);
var val = this[offset];
var mul = 1;
var i = 0;
while (++i < byteLength3 && (mul *= 256)) {
val += this[offset + i] * mul;
}
mul *= 128;
if (val >= mul) val -= Math.pow(2, 8 * byteLength3);
return val;
};
Buffer2.prototype.readIntBE = function readIntBE(offset, byteLength3, noAssert) {
offset = offset >>> 0;
byteLength3 = byteLength3 >>> 0;
if (!noAssert) checkOffset(offset, byteLength3, this.length);
var i = byteLength3;
var mul = 1;
var val = this[offset + --i];
while (i > 0 && (mul *= 256)) {
val += this[offset + --i] * mul;
}
mul *= 128;
if (val >= mul) val -= Math.pow(2, 8 * byteLength3);
return val;
};
Buffer2.prototype.readInt8 = function readInt8(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 1, this.length);
if (!(this[offset] & 128)) return this[offset];
return (255 - this[offset] + 1) * -1;
};
Buffer2.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 2, this.length);
var val = this[offset] | this[offset + 1] << 8;
return val & 32768 ? val | 4294901760 : val;
};
Buffer2.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 2, this.length);
var val = this[offset + 1] | this[offset] << 8;
return val & 32768 ? val | 4294901760 : val;
};
Buffer2.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 4, this.length);
return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
};
Buffer2.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 4, this.length);
return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
};
Buffer2.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 4, this.length);
return ieee754$1.read(this, offset, true, 23, 4);
};
Buffer2.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 4, this.length);
return ieee754$1.read(this, offset, false, 23, 4);
};
Buffer2.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 8, this.length);
return ieee754$1.read(this, offset, true, 52, 8);
};
Buffer2.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
offset = offset >>> 0;
if (!noAssert) checkOffset(offset, 8, this.length);
return ieee754$1.read(this, offset, false, 52, 8);
};
function checkInt(buf, value, offset, ext, max, min) {
if (!Buffer2.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance');
if (value > max || value < min) throw new RangeError('"value" argument is out of bounds');
if (offset + ext > buf.length) throw new RangeError("Index out of range");
}
Buffer2.prototype.writeUintLE = Buffer2.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength3, noAssert) {
value = +value;
offset = offset >>> 0;
byteLength3 = byteLength3 >>> 0;
if (!noAssert) {
var maxBytes = Math.pow(2, 8 * byteLength3) - 1;
checkInt(this, value, offset, byteLength3, maxBytes, 0);
}
var mul = 1;
var i = 0;
this[offset] = value & 255;
while (++i < byteLength3 && (mul *= 256)) {
this[offset + i] = value / mul & 255;
}
return offset + byteLength3;
};
Buffer2.prototype.writeUintBE = Buffer2.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength3, noAssert) {
value = +value;
offset = offset >>> 0;
byteLength3 = byteLength3 >>> 0;
if (!noAssert) {
var maxBytes = Math.pow(2, 8 * byteLength3) - 1;
checkInt(this, value, offset, byteLength3, maxBytes, 0);
}
var i = byteLength3 - 1;
var mul = 1;
this[offset + i] = value & 255;
while (--i >= 0 && (mul *= 256)) {
this[offset + i] = value / mul & 255;
}
return offset + byteLength3;
};
Buffer2.prototype.writeUint8 = Buffer2.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 1, 255, 0);
this[offset] = value & 255;
return offset + 1;
};
Buffer2.prototype.writeUint16LE = Buffer2.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);
this[offset] = value & 255;
this[offset + 1] = value >>> 8;
return offset + 2;
};
Buffer2.prototype.writeUint16BE = Buffer2.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);
this[offset] = value >>> 8;
this[offset + 1] = value & 255;
return offset + 2;
};
Buffer2.prototype.writeUint32LE = Buffer2.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);
this[offset + 3] = value >>> 24;
this[offset + 2] = value >>> 16;
this[offset + 1] = value >>> 8;
this[offset] = value & 255;
return offset + 4;
};
Buffer2.prototype.writeUint32BE = Buffer2.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);
this[offset] = value >>> 24;
this[offset + 1] = value >>> 16;
this[offset + 2] = value >>> 8;
this[offset + 3] = value & 255;
return offset + 4;
};
Buffer2.prototype.writeIntLE = function writeIntLE(value, offset, byteLength3, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) {
var limit = Math.pow(2, 8 * byteLength3 - 1);
checkInt(this, value, offset, byteLength3, limit - 1, -limit);
}
var i = 0;
var mul = 1;
var sub = 0;
this[offset] = value & 255;
while (++i < byteLength3 && (mul *= 256)) {
if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
sub = 1;
}
this[offset + i] = (value / mul >> 0) - sub & 255;
}
return offset + byteLength3;
};
Buffer2.prototype.writeIntBE = function writeIntBE(value, offset, byteLength3, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) {
var limit = Math.pow(2, 8 * byteLength3 - 1);
checkInt(this, value, offset, byteLength3, limit - 1, -limit);
}
var i = byteLength3 - 1;
var mul = 1;
var sub = 0;
this[offset + i] = value & 255;
while (--i >= 0 && (mul *= 256)) {
if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
sub = 1;
}
this[offset + i] = (value / mul >> 0) - sub & 255;
}
return offset + byteLength3;
};
Buffer2.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 1, 127, -128);
if (value < 0) value = 255 + value + 1;
this[offset] = value & 255;
return offset + 1;
};
Buffer2.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);
this[offset] = value & 255;
this[offset + 1] = value >>> 8;
return offset + 2;
};
Buffer2.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);
this[offset] = value >>> 8;
this[offset + 1] = value & 255;
return offset + 2;
};
Buffer2.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);
this[offset] = value & 255;
this[offset + 1] = value >>> 8;
this[offset + 2] = value >>> 16;
this[offset + 3] = value >>> 24;
return offset + 4;
};
Buffer2.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);
if (value < 0) value = 4294967295 + value + 1;
this[offset] = value >>> 24;
this[offset + 1] = value >>> 16;
this[offset + 2] = value >>> 8;
this[offset + 3] = value & 255;
return offset + 4;
};
function checkIEEE754(buf, value, offset, ext, max, min) {
if (offset + ext > buf.length) throw new RangeError("Index out of range");
if (offset < 0) throw new RangeError("Index out of range");
}
function writeFloat(buf, value, offset, littleEndian, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) {
checkIEEE754(buf, value, offset, 4);
}
ieee754$1.write(buf, value, offset, littleEndian, 23, 4);
return offset + 4;
}
Buffer2.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
return writeFloat(this, value, offset, true, noAssert);
};
Buffer2.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
return writeFloat(this, value, offset, false, noAssert);
};
function writeDouble(buf, value, offset, littleEndian, noAssert) {
value = +value;
offset = offset >>> 0;
if (!noAssert) {
checkIEEE754(buf, value, offset, 8);
}
ieee754$1.write(buf, value, offset, littleEndian, 52, 8);
return offset + 8;
}
Buffer2.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
return writeDouble(this, value, offset, true, noAssert);
};
Buffer2.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
return writeDouble(this, value, offset, false, noAssert);
};
Buffer2.prototype.copy = function copy(target, targetStart, start, end) {
if (!Buffer2.isBuffer(target)) throw new TypeError("argument should be a Buffer");
if (!start) start = 0;
if (!end && end !== 0) end = this.length;
if (targetStart >= target.length) targetStart = target.length;
if (!targetStart) targetStart = 0;
if (end > 0 && end < start) end = start;
if (end === start) return 0;
if (target.length === 0 || this.length === 0) return 0;
if (targetStart < 0) {
throw new RangeError("targetStart out of bounds");
}
if (start < 0 || start >= this.length) throw new RangeError("Index out of range");
if (end < 0) throw new RangeError("sourceEnd out of bounds");
if (end > this.length) end = this.length;
if (target.length - targetStart < end - start) {
end = target.length - targetStart + start;
}
var len = end - start;
if (this === target && typeof Uint8Array.prototype.copyWithin === "function") {
this.copyWithin(targetStart, start, end);
} else {
Uint8Array.prototype.set.call(
target,
this.subarray(start, end),
targetStart
);
}
return len;
};
Buffer2.prototype.fill = function fill(val, start, end, encoding) {
if (typeof val === "string") {
if (typeof start === "string") {
encoding = start;
start = 0;
end = this.length;
} else if (typeof end === "string") {
encoding = end;
end = this.length;
}
if (encoding !== void 0 && typeof encoding !== "string") {
throw new TypeError("encoding must be a string");
}
if (typeof encoding === "string" && !Buffer2.isEncoding(encoding)) {
throw new TypeError("Unknown encoding: " + encoding);
}
if (val.length === 1) {
var code2 = val.charCodeAt(0);
if (encoding === "utf8" && code2 < 128 || encoding === "latin1") {
val = code2;
}
}
} else if (typeof val === "number") {
val = val & 255;
} else if (typeof val === "boolean") {
val = Number(val);
}
if (start < 0 || this.length < start || this.length < end) {
throw new RangeError("Out of range index");
}
if (end <= start) {
return this;
}
start = start >>> 0;
end = end === void 0 ? this.length : end >>> 0;
if (!val) val = 0;
var i;
if (typeof val === "number") {
for (i = start; i < end; ++i) {
this[i] = val;
}
} else {
var bytes = Buffer2.isBuffer(val) ? val : Buffer2.from(val, encoding);
var len = bytes.length;
if (len === 0) {
throw new TypeError('The value "' + val + '" is invalid for argument "value"');
}
for (i = 0; i < end - start; ++i) {
this[i + start] = bytes[i % len];
}
}
return this;
};
var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
function base64clean(str) {
str = str.split("=")[0];
str = str.trim().replace(INVALID_BASE64_RE, "");
if (str.length < 2) return "";
while (str.length % 4 !== 0) {
str = str + "=";
}
return str;
}
function utf8ToBytes(string2, units) {
units = units || Infinity;
var codePoint;
var length = string2.length;
var leadSurrogate = null;
var bytes = [];
for (var i = 0; i < length; ++i) {
codePoint = string2.charCodeAt(i);
if (codePoint > 55295 && codePoint < 57344) {
if (!leadSurrogate) {
if (codePoint > 56319) {
if ((units -= 3) > -1) bytes.push(239, 191, 189);
continue;
} else if (i + 1 === length) {
if ((units -= 3) > -1) bytes.push(239, 191, 189);
continue;
}
leadSurrogate = codePoint;
continue;
}
if (codePoint < 56320) {
if ((units -= 3) > -1) bytes.push(239, 191, 189);
leadSurrogate = codePoint;
continue;
}
codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;
} else if (leadSurrogate) {
if ((units -= 3) > -1) bytes.push(239, 191, 189);
}
leadSurrogate = null;
if (codePoint < 128) {
if ((units -= 1) < 0) break;
bytes.push(codePoint);
} else if (codePoint < 2048) {
if ((units -= 2) < 0) break;
bytes.push(
codePoint >> 6 | 192,
codePoint & 63 | 128
);
} else if (codePoint < 65536) {
if ((units -= 3) < 0) break;
bytes.push(
codePoint >> 12 | 224,
codePoint >> 6 & 63 | 128,
codePoint & 63 | 128
);
} else if (codePoint < 1114112) {
if ((units -= 4) < 0) break;
bytes.push(
codePoint >> 18 | 240,
codePoint >> 12 & 63 | 128,
codePoint >> 6 & 63 | 128,
codePoint & 63 | 128
);
} else {
throw new Error("Invalid code point");
}
}
return bytes;
}
function asciiToBytes(str) {
var byteArray = [];
for (var i = 0; i < str.length; ++i) {
byteArray.push(str.charCodeAt(i) & 255);
}
return byteArray;
}
function utf16leToBytes(str, units) {
var c2, hi, lo;
var byteArray = [];
for (var i = 0; i < str.length; ++i) {
if ((units -= 2) < 0) break;
c2 = str.charCodeAt(i);
hi = c2 >> 8;
lo = c2 % 256;
byteArray.push(lo);
byteArray.push(hi);
}
return byteArray;
}
function base64ToBytes(str) {
return base64.toByteArray(base64clean(str));
}
function blitBuffer(src, dst, offset, length) {
for (var i = 0; i < length; ++i) {
if (i + offset >= dst.length || i >= src.length) break;
dst[i + offset] = src[i];
}
return i;
}
function isInstance(obj, type) {
return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;
}
function numberIsNaN(obj) {
return obj !== obj;
}
var hexSliceLookupTable = function() {
var alphabet2 = "0123456789abcdef";
var table = new Array(256);
for (var i = 0; i < 16; ++i) {
var i16 = i * 16;
for (var j2 = 0; j2 < 16; ++j2) {
table[i16 + j2] = alphabet2[i] + alphabet2[j2];
}
}
return table;
}();
})(buffer);
class GazelleMusic extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName.match(/(DicMusic|Orpheus)/) !== null;
}
async fill(info) {
this.info = info;
const { musicJson } = info;
if (!musicJson) {
return;
}
const { name, year } = musicJson.group;
const groupId = getLocationSearchValueByKey("groupid");
if (!groupId) {
await this.searchAndRedirectToGroup(name, year);
}
await this.processSiteSpecificLogic(musicJson);
this.fillJsonToUploadTable(musicJson, name);
this.fillTorrentFile();
}
async searchAndRedirectToGroup(name, year) {
var _a2;
try {
const searchResult = await GMFetch(
`/ajax.php?action=browse&searchstr=${encodeURIComponent(name)} ${year}`,
{
responseType: "json"
}
);
if (searchResult.status === "success" && searchResult.response.results.length > 0) {
const groupId = searchResult.response.results[0].groupId;
const timestampMatchArray = location.hash && location.hash.match(/(^|#)timestamp=([^#]*)(#|$)/);
const timestamp2 = (_a2 = timestampMatchArray == null ? void 0 : timestampMatchArray[2]) != null ? _a2 : "";
location.href = `${CURRENT_SITE_INFO.url}${CURRENT_SITE_INFO.uploadPath}?groupid=${groupId}#timestamp=${timestamp2}`;
return true;
}
} catch (error) {
console.error("Error searching for group:", error);
}
return false;
}
async processSiteSpecificLogic(musicJson) {
if (CURRENT_SITE_NAME === "Orpheus") {
const { remasterTitle, remasterCatalogueNumber, remasterRecordLabel } = musicJson.torrent;
const { recordLabel, catalogueNumber } = musicJson.group;
if (!remasterCatalogueNumber && !remasterRecordLabel && !remasterTitle && !recordLabel && !catalogueNumber) {
musicJson.torrent.remastered = false;
}
} else if (CURRENT_SITE_NAME === "DicMusic") {
musicJson.group.wikiBody = this.toUnicodeEntities(
musicJson.group.wikiBody
);
}
}
fillJsonToUploadTable(musicJson, name) {
const buf = buffer.Buffer.from(
JSON.stringify({
status: "success",
response: musicJson
})
);
this.attachFile({
data: buf,
selector: "#torrent-json-file",
contentType: "application/json",
fileName: name,
format: "json"
});
}
attachFile(options2) {
const {
data,
selector,
contentType,
fileName,
format: format2,
charset = "UTF-8"
} = options2;
const buf = buffer.Buffer.isBuffer(data) ? data : buffer.Buffer.from(data, charset);
const base64Data = buf.toString("base64");
const fileInput = $$2(selector);
if (base64Data && fileInput.length > 0) {
const blob = base64ToBlob(base64Data, contentType);
const file = new File([blob], `${fileName}.${format2}`, {
type: contentType
});
const dataTransfer = new DataTransfer();
dataTransfer.items.add(file);
const uploadInput = fileInput[0];
uploadInput.files = dataTransfer.files;
uploadInput.dispatchEvent(new Event("change", { bubbles: true }));
}
}
toUnicodeEntities(str) {
const excludedChars = ["<", ">", "&", ";", "/"];
return str.split("").map((char) => {
const code2 = char.charCodeAt(0);
if (code2 > 127 && !excludedChars.includes(char)) {
const hexCode = code2.toString(16);
return `${parseInt(hexCode, 16)};`;
}
return char;
}).join("");
}
}
registry$1.register(new GazelleMusic());
class GPW extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
this.currentSiteInfo = PT_SITE.GPW;
}
canHandle(siteName) {
return siteName === "GPW";
}
fill(info) {
this.info = info;
const isUploadSuccess = !$$2("#mediainfo")[0];
if (isUploadSuccess) {
return;
}
this.transformInfo();
const isAddFormat = getLocationSearchValueByKey("groupid");
if (!isAddFormat) {
this.fillIMDbAndTriggerAutoFill();
}
this.fillCategory();
this.fillEditionInfo();
this.fillMediaInfos();
setTimeout(() => {
this.handleNoAutoCheck();
}, 0);
this.fillScene();
this.fillProcessing();
this.fillDescription();
this.fillTorrentFile();
$$2(".u-bbcodePreview-button").trigger("click");
}
fillIMDbAndTriggerAutoFill() {
if (!this.info) return;
$$2(this.currentSiteInfo.imdb.selector).val(this.info.imdbUrl || 0);
$$2("#imdb_button").trigger("click");
$$2("#upload .collapse").show();
}
fillCategory() {
if (!this.info) return;
$$2(this.currentSiteInfo.category.selector).val(
this.currentSiteInfo.category.map[this.info.category]
);
}
fillEditionInfo() {
if (!this.info) return;
const editionTags = Object.keys(this.info.tags).map(
(tag) => this.info.tags[tag] && this.currentSiteInfo.targetInfo.editionTags[tag]
).filter(Boolean);
let otherTag;
if (this.info.otherTags && Object.keys(this.info.otherTags).length > 0) {
otherTag = Object.keys(this.info.otherTags).join(", ");
}
if (editionTags.length > 0 || otherTag) {
$$2("#movie_edition_information").trigger("click");
}
if (editionTags.length > 0) {
for (const tag of editionTags) {
$$2(`#movie_remaster_tags a[onclick*="'${tag}'"]`).trigger("click");
}
}
if (otherTag) {
$$2("#other-button").trigger("click");
$$2("[name=remaster_custom_title]").val(otherTag);
}
}
fillMediaInfos() {
if (!this.info || !this.info.mediaInfos) {
return;
}
for (let i = 1; i < this.info.mediaInfos.length; i++) {
$$2("#add-mediainfo")[0].click();
}
const textareas = Array.from($$2('[name="mediainfo[]"]'));
for (const [index, textarea] of textareas.entries()) {
textarea.value = this.info.mediaInfos[index];
textarea.dispatchEvent(new Event("input"));
}
$$2('[name="mediainfo[]"]')[0].dispatchEvent(new Event("change"));
}
handleNoAutoCheck() {
if (!this.info) return;
if (!$$2(this.currentSiteInfo.source.selector).val() || !$$2(this.currentSiteInfo.format.selector).val()) {
const { mediaInfos, videoType } = this.info;
const mediaInfo = (mediaInfos == null ? void 0 : mediaInfos[0]) || "";
const isBluray = !!videoType.match(/bluray/i);
const parsedMedia = parseMedia(mediaInfo, isBluray);
if (!parsedMedia) {
console.warn("Failed to parse media info:", mediaInfo);
return;
}
const { format: format2 = "", subtitleTracks = [] } = parsedMedia;
this.info.format = this.getFormat(format2, videoType);
const keyArray = [
"source",
"videoCodec",
"format",
"resolution"
];
keyArray.forEach((key) => {
var _a2, _b;
const { selector = "", map: map2 } = this.currentSiteInfo[key];
if (map2) {
const mapValue = map2[this.info[key]];
$$2(selector).val(mapValue);
if (key === "videoCodec" && mapValue === "Other") {
document.querySelector(selector).dispatchEvent(new Event("change"));
$$2('input[name="codec_other"]').val(
(_b = (_a2 = this.info[key]) == null ? void 0 : _a2.toUpperCase()) != null ? _b : ""
);
}
} else {
$$2(selector).val(this.info[key] || "");
}
});
this.fillSubtitles(subtitleTracks.map((track) => track.language));
}
}
fillSubtitles(subtitles) {
var _a2;
if (subtitles.length > 0) {
$$2("#mixed_subtitles").attr("checked", "true");
$$2('input[name="subtitles[]"][type="checkbox"]').each(function() {
var _a3, _b;
const language = (_b = (_a3 = $$2(this).attr("id")) == null ? void 0 : _a3.replace(
/^\S|(_\S)/g,
(letter) => letter.replace("_", " ").toUpperCase()
)) != null ? _b : "";
if (subtitles.includes(language)) {
$$2(this).attr("checked", "true");
}
});
const event = new Event("change");
(_a2 = document.querySelector("#mixed_subtitles")) == null ? void 0 : _a2.dispatchEvent(event);
const chineseLanguages = subtitles.filter(
(item) => item.match(/Chinese|Traditional|Simplified/i)
);
if (chineseLanguages.length === 1 && chineseLanguages[0] === "Chinese") {
const selector = chineseLanguages[0].match(/Traditional/i) ? "#chinese_traditional" : "#chinese_simplified";
$$2(selector).attr("checked", "true");
} else if (chineseLanguages.length >= 2) {
$$2("#chinese_traditional,#chinese_simplified").attr("checked", "true");
}
}
}
fillScene() {
if (!this.info) return;
if (this.info.tags.scene) {
$$2("#scene").prop("checked", true);
}
}
fillProcessing() {
if (!this.info) return;
let { videoType, size, source, tags: tags2 } = this.info;
if (source.match(/bluray|hddvd|dvd/)) {
if (tags2.diy) {
videoType = "DIY";
}
const videoTypeConfig = this.currentSiteInfo.videoType;
const { selector, map: map2 } = videoTypeConfig;
$$2(selector).val(map2[videoType]);
$$2(selector)[0].dispatchEvent(new Event("change"));
if (map2[videoType] === "Untouched") {
const bdType = getBDTypeBasedOnSize(size);
$$2('select[name="processing_other"]').val(bdType || "");
}
$$2(selector)[0].dispatchEvent(new Event("input"));
}
}
fillDescription() {
if (!this.info) return;
let description = "";
if (this.info.sourceSite === "PTP") {
description = buildPTPDescription(this.info);
} else if (this.info.sourceSite === "BeyondHD") {
description = this.info.originalDescription || "";
} else {
description = this.buildDescription();
}
$$2(this.currentSiteInfo.description.selector).val(description);
$$2(this.currentSiteInfo.description.selector)[0].dispatchEvent(
new Event("input")
);
}
buildDescription() {
if (!this.info) return "";
let description = "";
if (this.info.comparisons && this.info.comparisons.length > 0) {
for (const comparison of this.info.comparisons) {
description += `${comparison.reason}[comparison=${comparison.title}]
${comparison.imgs.join("\n")}
[/comparison]
`;
}
}
if (this.info.screenshots.length > 0) {
description += `${this.info.screenshots.map((v2) => `[img]${v2}[/img]`).join("\n")}
`;
}
return description.trim();
}
transformInfo() {
if (!this.info) return;
if (["encode", "remux"].includes(this.info.videoType) && this.info.mediaInfos) {
const newMediaInfos = [];
for (const mediaInfo of this.info.mediaInfos) {
if (mediaInfo.match(/Disc Title|Disc Label/i)) {
continue;
}
newMediaInfos.push(mediaInfo);
}
this.info.mediaInfos = newMediaInfos;
}
}
getFormat(format2, videoType) {
if (videoType.match(/bluray/) && format2 !== "iso") {
format2 = "m2ts";
} else if (videoType.match(/dvd/)) {
format2 = "vob";
}
return format2 || "mkv";
}
}
registry$1.register(new GPW());
class ZHUQUE extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
this.currentSiteInfo = PT_SITE.ZHUQUE;
}
canHandle(siteName) {
return siteName === "ZHUQUE";
}
fill(info) {
this.info = info;
this.setupMutationObserver();
}
setupMutationObserver() {
if (!this.info) return;
const targetNode = document;
const imdbId = getIdByIMDbUrl(this.info.imdbUrl || "");
const insert = new MutationObserver(() => {
this.fillBasicFields(imdbId);
this.fillZhuqueScreenshots();
this.fillZhuqueMediaInfo();
this.fillZhuqueDescription();
this.setupSelectObserver();
this.fillTorrentFile();
insert.disconnect();
});
insert.observe(targetNode, {
attributes: false,
childList: false,
subtree: true,
characterDataOldValue: false
});
}
fillBasicFields(imdbId) {
if (!this.info) return;
$$2("input.ant-select-selection-search-input[id]").each(function() {
this.dispatchEvent(new Event("keydown"));
});
$$2(this.currentSiteInfo.name.selector).val(this.info.title);
$$2(this.currentSiteInfo.name.selector)[0].dispatchEvent(new Event("input"));
$$2(this.currentSiteInfo.imdb.selector).val(imdbId);
$$2(this.currentSiteInfo.imdb.selector)[0].dispatchEvent(new Event("input"));
if (this.info.subtitle) {
$$2(this.currentSiteInfo.subtitle.selector).val(this.info.subtitle);
$$2(this.currentSiteInfo.subtitle.selector)[0].dispatchEvent(
new Event("input")
);
}
$$2(`.ant-btn-primary span:contains(查 询)`).trigger("click");
}
fillZhuqueScreenshots() {
if (!this.info) return;
let screenshotStr = "";
if (this.info.screenshots.length > 0) {
this.info.screenshots.forEach((img) => {
screenshotStr += `${img}
`;
});
}
$$2(this.currentSiteInfo.screenshots.selector).val(screenshotStr);
$$2(this.currentSiteInfo.screenshots.selector)[0].dispatchEvent(
new Event("input")
);
}
fillZhuqueMediaInfo() {
var _a2, _b;
if (!this.info) return;
$$2(this.currentSiteInfo.mediaInfo.selector).val(
(_b = (_a2 = this.info.mediaInfos) == null ? void 0 : _a2[0]) != null ? _b : ""
);
$$2(this.currentSiteInfo.mediaInfo.selector)[0].dispatchEvent(
new Event("input")
);
}
fillZhuqueDescription() {
var _a2, _b;
if (!this.info) return;
let description = this.info.description.replace(`[quote]${(_b = (_a2 = this.info.mediaInfos) == null ? void 0 : _a2[0]) != null ? _b : ""}[/quote]`, "").trim();
if (this.info.mediaInfos && this.info.mediaInfos.length > 1) {
this.info.mediaInfos.forEach((mediaInfo) => {
description = description.replace(`[quote]${mediaInfo}[/quote]`, "");
});
}
if (this.info.sourceSite === "PTP") {
description = buildPTPDescription(this.info);
description = description.replace(
/\[comparison[^[]*\[\/comparison\]/gi,
""
);
} else if (this.info.sourceSite.match(/BeyondHD|UHDBits/)) {
description = this.info.originalDescription || "";
}
description = description.replace(/\[url.*\[\/url\]/g, "").replace(/\[img.*\[\/img\]/g, "").replace(/\[\/?(i|b|center|quote|size|color)\]/g, "").replace(/\[(size|color)=#?[a-zA-Z0-9]*\]/g, "").replace(/\n\n*/g, "\n");
description = description.replace(/Screen(shot)?s:(\s*)\n?/gi, "").trim();
if (this.info.sourceSite === "KEEPFRDS") {
description = description.replace(/截图对比:[^\n]*\n?/gi, "");
}
if (description !== "") {
description = `\`\`\`
${description}
\`\`\``;
}
if (this.info.comparisons && this.info.comparisons.length > 0) {
for (const comparison in this.info.comparisons) {
description += `
对比图 ${this.info.comparisons[comparison].title}
`;
for (const img in this.info.comparisons[comparison].imgs) {
description += `${this.info.comparisons[comparison].imgs[img]}
`;
}
}
}
const thanksQuoteClosed = GM_getValue(
"easy-upload.thanks-quote-closed",
""
);
if (!thanksQuoteClosed && this.info.sourceSite !== void 0) {
description = `\`\`\`
转自 ${this.info.sourceSite} ,感谢原发布者!
\`\`\`
${description}`;
}
$$2(this.currentSiteInfo.description.selector).val(description);
$$2(this.currentSiteInfo.description.selector)[0].dispatchEvent(
new Event("input")
);
}
setupSelectObserver() {
if (!this.info) return;
const selectNodeParent = document.querySelector("form");
if (!selectNodeParent) return;
const select = new MutationObserver(async () => {
this.fillCategory();
this.fillVideoAndAudioParameters();
select.disconnect();
});
select.observe(selectNodeParent, {
attributes: false,
childList: true,
subtree: true,
characterDataOldValue: false
});
}
fillCategory() {
if (!this.info) return;
const { category: categoryConfig } = this.currentSiteInfo;
$$2(
`div.ant-select-item-option-content:contains(${categoryConfig.map[this.info.category]})`
).trigger("click");
}
fillVideoAndAudioParameters() {
var _a2;
if (!this.info) return;
this.fillTags();
const keyArray = ["videoType", "videoCodec", "audioCodec"];
keyArray.forEach((key) => {
const { map: map2 } = this.currentSiteInfo[key];
if (!map2) return;
const mapValue = map2[this.info[key]];
if (!mapValue) return;
this.clickAppropriateOption(key, mapValue);
});
if (this.info.resolution !== "") {
(_a2 = $$2(
`div.ant-select-item-option-content:contains(${this.info.resolution})`
)[0]) == null ? void 0 : _a2.click();
}
}
async fillTags() {
if (!this.info) return;
const sleep = (ms) => {
return new Promise((resolve28) => setTimeout(resolve28, ms));
};
const { tags: tags2 } = this.currentSiteInfo;
for (const tag in this.info.tags) {
if (tags2[tag]) {
await sleep(100).then(
() => $$2(tags2[tag])[0].click()
);
}
}
}
clickAppropriateOption(key, mapValue) {
if (key !== "videoType" && $$2(`div.ant-select-item-option-content:contains(${mapValue})`).length > 0) {
$$2(`div.ant-select-item-option-content:contains(${mapValue})`)[0].click();
} else if (mapValue === "Blu-ray") {
$$2(`div.ant-select-item-option-content:contains(${mapValue})`)[2].click();
} else if ($$2(`div.ant-select-item-option-content:contains(${mapValue})`).length > 0) {
$$2(`div.ant-select-item-option-content:contains(${mapValue})`)[0].click();
}
}
}
registry$1.register(new ZHUQUE());
class ITS extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "iTS";
}
async fill(info) {
this.info = info;
if (!this.info) return;
this.processTorrentTitle();
this.fillTorrentTitle();
await this.generateAndFillDescription();
this.handleCategoryAndCollection();
this.postProcess();
}
processTorrentTitle() {
super.processTorrentTitle();
const { title } = this.info;
this.info.title = title.replace(/\s/gi, ".");
}
postProcess() {
const { category, title, doubanUrl, imdbUrl, screenshots, subtitle } = this.info;
if (category === "tvPack" || title.match(/Trilogy|Collection/i) || subtitle && subtitle.match(/合集/)) {
$$2('input[name="pack"]').attr("checked", "true");
}
$$2(this.siteInfo.imdb.selector).val(doubanUrl || imdbUrl);
$$2(this.siteInfo.screenshots.selector).val(screenshots.join("\n"));
}
handleCategoryAndCollection() {
if (!this.info) return;
const { resolution, category } = this.info;
if (!resolution.match(/2160|1080|720/) && category === "movie") {
$$2('select[name="type"]').val("67");
}
const collectionMap = this.getCollectionMap();
this.fillCollections(collectionMap);
}
getCollectionMap() {
const collectionMap = {};
$$2('select[name="collection_id1"] option').each(function() {
const option = $$2(this);
collectionMap[option.text()] = option.val();
});
return collectionMap;
}
async fillCollections(collectionMap) {
var _a2, _b, _c;
if (!this.info || !this.info.imdbUrl) return;
const { category } = this.info;
const teamName = getTeamName(this.info.title);
const collectionValues = [];
if (collectionMap[teamName]) {
collectionValues.push(collectionMap[teamName]);
}
if (category.match(/tv|movie|cartoon|documentary/)) {
try {
const imdbData = await getIMDBData(this.info.imdbUrl);
if (imdbData) {
const { directors = [], details } = imdbData;
let language = details.Languages || "";
language = (_c = (_b = (_a2 = language == null ? void 0 : language.split("|")) == null ? void 0 : _a2[0]) == null ? void 0 : _b.trim()) != null ? _c : "";
const director = directors.map((item) => item.name)[0];
if (collectionMap[director]) {
collectionValues.push(collectionMap[director]);
}
if (collectionMap[language]) {
collectionValues.push(collectionMap[language]);
}
}
} catch (error) {
console.error("Error fetching IMDB data:", error);
}
}
collectionValues.forEach((value, index) => {
$$2(`select[name="collection_id${index + 1}"]`).val(value);
});
}
async generateAndFillDescription() {
if (!this.info) return;
const { category, screenshots, comparisons = [] } = this.info;
if (!category.match(/tv|movie|cartoon|documentary/)) return;
let template = this.createDescriptionTemplate();
template = this.fillScreenshotsInTemplate(template, screenshots);
template = this.fillComparisonsInTemplate(template, comparisons);
$$2('textarea[name="descr"]').val($t$1("数据加载中..."));
try {
template = await this.fillTemplateWithMetadata(template);
$$2('textarea[name="descr"]').val(template);
} catch (error) {
$$2('textarea[name="descr"]').val(error.message);
}
}
createDescriptionTemplate() {
return `[center]
[img]$poster$[/img]
[url=$imdbUrl$][img]https://i.ibb.co/KD855ZM/IMDb-Logo-2016.png[/img][/url][size=3]$imdbScore$[/size][*][url=$rtUrl$][img]https://i.ibb.co/BwtmdcV/rottentomatoes-logo.png[/img][/url][size=3]$rtScore$[/size][*][size=3][url=$tmdbUrl$][img]https://i.ibb.co/HhgF1gC/tmdb-logo.png[/img][/url]$tmdbScore$[/size]
[color=DarkOrange][size=2]◢ SYNOPSIS ◣[/size][/color]
$synopsis$
[color=DarkOrange][size=2]◢ TRAILER ◣[/size][/color]
[youtube]$youtubeUrl$[/youtube]
[color=DarkOrange][size=2]◢ SCREENSHOTS ◣[/size][/color]
[box][hide]$SCREENSHOTS$[/hide][/box]
[/center]`;
}
fillScreenshotsInTemplate(template, screenshots) {
const screenshotsBBCode = screenshots.map((img) => `[img]${img}[/img]`);
return template.replace("$SCREENSHOTS$", screenshotsBBCode.join("\n"));
}
fillComparisonsInTemplate(template, comparisons) {
const comparisonImgs = comparisons.flatMap((v2) => v2.imgs);
if (comparisonImgs.length > 0) {
const comparisonImgsBBCode = comparisonImgs.map(
(img) => `[img]${img}[/img]`
);
return template.replace(
/(\[\/center\])$/,
`[color=DarkOrange][size=2]◢ COMPARISONS ◣[/size][/color]
[box][hide]${comparisonImgsBBCode.join(" ")}[/hide][/box]
$1`
);
}
return template;
}
async fillTemplateWithMetadata(template) {
if (!this.info || !this.info.imdbUrl) return template;
const { imdbUrl } = this.info;
const replaceParams = {
tmdbUrl: "",
tmdbScore: "0",
imdbScore: "0",
imdbUrl,
poster: "",
synopsis: "",
rtUrl: "",
rtScore: "0",
youtubeUrl: ""
};
await this.fillIMDBData(replaceParams);
await this.fillTMDBData(replaceParams);
Object.keys(replaceParams).forEach((key) => {
template = template.replace(
`$${key}$`,
replaceParams[key] || ""
);
});
return template;
}
async fillIMDBData(replaceParams) {
var _a2, _b;
if (!this.info || !this.info.imdbUrl) return;
const { category, movieName } = this.info;
try {
const imdbData = await getIMDBData(this.info.imdbUrl);
if (imdbData) {
const {
poster = "",
imdb_rating_average: imdbRate,
description = "",
aka,
year
} = imdbData;
replaceParams.poster = poster;
replaceParams.synopsis = description;
replaceParams.imdbScore = imdbRate;
const searchMovieName = movieName || ((_b = (_a2 = aka.filter((item) => item.country.match(/(World-wide)|UK|USA/))) == null ? void 0 : _a2[0]) == null ? void 0 : _b.title);
await this.fillRottenTomatoesData(
replaceParams,
searchMovieName,
category,
year
);
await this.uploadPosterToPtpImg(replaceParams, poster);
}
} catch (error) {
console.error("Error fetching IMDB data:", error);
}
}
async fillRottenTomatoesData(replaceParams, movieName, category, year) {
if (!movieName) return;
try {
const rtInfo = await getMatchRottenTomatoes(
movieName,
year,
!!category.match(/tv/)
);
if (!rtInfo) return;
const { rottenTomatoes, rtId = "" } = rtInfo;
replaceParams.rtScore = `${rottenTomatoes.audienceScore}%`;
replaceParams.rtUrl = `https://www.rottentomatoes.com/${rtId}`;
} catch (error) {
console.error("Error fetching Rotten Tomatoes data:", error);
}
}
async uploadPosterToPtpImg(replaceParams, poster) {
const ptpImgApiKey = GM_getValue("easy-upload.ptp-img-api-key") || "";
if (ptpImgApiKey && poster) {
try {
const ptpImgPoster = await (await uploadToPtpImg)([poster]);
replaceParams.poster = ptpImgPoster ? ptpImgPoster[0] : "";
} catch (error) {
console.error("Error uploading poster to PTP image host:", error);
}
}
}
async fillTMDBData(replaceParams) {
if (!this.info || !this.info.imdbUrl) return;
try {
const imdbId = getIdByIMDbUrl(this.info.imdbUrl);
const { id: tmdbId, vote_average: tmdbRate } = await getTMDBDataByIMDBId(imdbId);
if (tmdbId) {
replaceParams.tmdbUrl = `https://www.themoviedb.org/movie/${tmdbId}`;
replaceParams.tmdbScore = `${tmdbRate}`;
await this.fillTrailerData(replaceParams, tmdbId);
}
} catch (error) {
console.error("Error fetching TMDB data:", error);
}
}
async fillTrailerData(replaceParams, tmdbId) {
try {
const videos = await getTMDBVideosById(`${tmdbId}`);
const youtubeVideo = videos.find((video) => video.site === "YouTube");
if (youtubeVideo == null ? void 0 : youtubeVideo.key) {
replaceParams.youtubeUrl = `https://www.youtube.com/watch?v=${youtubeVideo.key}`;
}
} catch (error) {
console.error("Error fetching trailer data:", error);
}
}
}
registry$1.register(new ITS());
class BYR extends BaseFiller {
constructor() {
super(...arguments);
this.priority = 10;
}
canHandle(siteName) {
return siteName === "BYR";
}
fill(info) {
this.info = info;
if (!this.info) return;
this.fillBasicInfo();
this.setupDescriptionEditor();
this.fillOriginalTitle();
this.extractAndFillCategoryFields();
this.fillTorrentFile();
}
fillBasicInfo() {
const { subtitle, imdbUrl, doubanUrl } = this.info;
$$2(this.siteInfo.subtitle.selector).val(subtitle || "");
$$2(this.siteInfo.imdb.selector).val(imdbUrl || "");
$$2(this.siteInfo.douban.selector).val(doubanUrl || "");
}
setupDescriptionEditor() {
const { description } = this.info;
CKEDITOR.on("instanceReady", () => {
CKEDITOR.instances.descr.setData(this.convertBBCodeToHtml(description));
});
}
fillOriginalTitle() {
this.processTorrentTitle();
const { title } = this.info;
$$2("#movie_ename0day").val(title);
}
extractAndFillCategoryFields() {
const { category } = this.info;
const torrentInfo = this.extractTorrentInfo();
if (category.match(/movie/)) {
this.fillMovieFields(torrentInfo);
} else if (category.match(/tv/)) {
this.fillTVFields(torrentInfo);
} else if (category.match(/variety/)) {
this.fillVarietyFields(torrentInfo);
}
}
extractTorrentInfo() {
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
const { description, doubanInfo } = this.info;
const fullDescription = description + doubanInfo;
let area = (_b = (_a2 = fullDescription.match(/(产\s+地|国\s+家)\s+(.+)/)) == null ? void 0 : _a2[2]) != null ? _b : "";
area = area.replace(/\[\/?.+?\]/g, "");
const originalName = (_d = (_c = fullDescription.match(/(片\s+名)\s+(.+)?/)) == null ? void 0 : _c[2]) != null ? _d : "";
const translateName = (_h = (_g = (_f = (_e = fullDescription.match(/(译\s+名)\s+(.+)/)) == null ? void 0 : _e[2]) == null ? void 0 : _f.split("/")) == null ? void 0 : _g[0]) != null ? _h : "";
const movieType = (_j = (_i = fullDescription.match(/(类\s+别)\s+(.+)/)) == null ? void 0 : _i[2]) != null ? _j : "";
const language = (_l = (_k = fullDescription.match(/(语\s+言)\s+(.+)/)) == null ? void 0 : _k[2]) != null ? _l : "";
let chineseName = originalName;
if (!originalName.match(/[\u4e00-\u9fa5]+/)) {
chineseName = translateName.match(/[\u4e00-\u9fa5]+/) ? translateName : "";
}
return {
area,
originalName,
translateName,
movieType,
language,
chineseName
};
}
fillMovieFields(torrentInfo) {
const { area, chineseName, movieType } = torrentInfo;
const { category } = this.info;
const regionSelector = this.determineMovieRegion(area);
const typeMap = {
华语: "11",
欧洲: "12",
北美: "13",
亚洲: "14",
其他: "1"
};
$$2('select[name="second_type"]').val(
typeMap[regionSelector]
);
$$2('select[name="second_type"]')[0].dispatchEvent(new Event("change"));
const movieTypeArr = movieType.split(/\s\//);
$$2("#movie_type").val(movieTypeArr.join("/"));
fillField(
regionSelector,
category === "movie" ? "movie_country" : "show_country"
);
$$2("#movie_cname").val(chineseName);
}
determineMovieRegion(area) {
if (area.match(/华语|台|港/)) {
return "华语";
} else if (area.match(/日本|韩国|泰国/)) {
return "亚洲";
} else if (area.match(/美国|加拿大/)) {
return "北美";
} else if (area.match(/欧|英|法|德|俄|意|苏联|EU/)) {
return "欧洲";
}
return "其他";
}
fillTVFields(torrentInfo) {
var _a2, _b;
const { area, chineseName } = torrentInfo;
const { title, videoType, mediaInfos } = this.info;
const regionSelector = this.determineTVRegion(area);
const typeMap = {
大陆: "15",
港台: "16",
欧美: "17",
日韩: "18",
其他: "2"
};
$$2('select[name="second_type"]').val(
typeMap[regionSelector]
);
$$2('select[name="second_type"]')[0].dispatchEvent(new Event("change"));
fillField(regionSelector, "tv_type");
$$2("#tv_ename").val(title);
$$2("#cname").val(chineseName);
const episode = (_b = (_a2 = title.match(/S\d+(E\d+)?/i)) == null ? void 0 : _a2[0]) != null ? _b : "";
$$2("#tv_season").val(episode);
const isBluray = !!videoType.match(/bluray/i);
const parsedMedia = parseMedia(mediaInfos == null ? void 0 : mediaInfos[0], isBluray);
if (!parsedMedia) {
console.warn("Failed to parse media info:", mediaInfos == null ? void 0 : mediaInfos[0]);
return;
}
const { format: format2 } = parsedMedia;
fillField((format2 == null ? void 0 : format2.toUpperCase()) || "MKV", "tv_filetype");
}
determineTVRegion(area) {
if (area.match(/大陆/)) {
return "大陆";
} else if (area.match(/台|港/)) {
return "港台";
} else if (area.match(/美国|欧|英|法|德|俄|意|苏联|EU/)) {
return "欧美";
} else if (area.match(/日本|韩国/)) {
return "日韩";
}
return "其他";
}
fillVarietyFields(torrentInfo) {
const { area, chineseName, language } = torrentInfo;
const { title } = this.info;
const regionSelector = this.determineTVRegion(area);
const typeMap = {
大陆: "27",
港台: "29",
欧美: "30",
日韩: "28",
其他: "5"
};
$$2('select[name="second_type"]').val(
typeMap[regionSelector]
);
$$2('select[name="second_type"]')[0].dispatchEvent(new Event("change"));
fillField(regionSelector, "show_country");
$$2("#show_cname").val(chineseName);
$$2("#show_ename").val(title);
const languageVal = this.determineLanguage(language);
fillField(languageVal, "show_language");
}
determineLanguage(language) {
if (language.match(/汉语/)) {
return "国语";
} else if (language.match(/粤/)) {
return "粤语";
} else if (language.match(/英语/)) {
return "英语";
} else if (language.match(/日语/)) {
return "日语";
} else if (language.match(/韩语/)) {
return "韩语";
}
return "";
}
convertBBCodeToHtml(bbcode) {
let html2 = bbcode.replace(/\[\*\]([^\n]+)/gi, "$1");
html2 = html2.replace(/(\r\n)|\n/g, "
");
html2 = html2.replace(
/\[(quote|hide=.+?)\]/gi,
"