diff --git a/cat.json b/cat.json new file mode 100644 index 00000000..8443e9fc --- /dev/null +++ b/cat.json @@ -0,0 +1,193 @@ +{ + "video": { + "sites": [ + { + "key": "drpy_js_boosj_open", + "name": "童趣┃猫", + "type": 3, + "api": "assets://js/boosj_open.js" + }, + { + "key": "drpy_js_tuxiaobei_open", + "name": "兔小贝┃猫", + "type": 3, + "api": "assets://js/tuxiaobei_open.js" + }, + { + "key": "drpy_js_ubestkid_open", + "name": "贝乐虎┃猫", + "type": 3, + "api": "assets://js/ubestkid_open.js" + }, + { + "key": "drpy_js_dj0898_open", + "name": "世纪DJ┃猫", + "type": 3, + "api": "assets://js/dj0898_open.js" + }, + { + "key": "drpy_js_zxzj_open", + "name": "在线之家┃猫", + "type": 3, + "api": "assets://js/zxzj_open.js" + }, + { + "key": "drpy_js_cntv_open", + "name": "视聚场┃猫", + "type": 3, + "api": "assets://js/cntv_open.js" + }, + { + "key": "drpy_js_bili_open", + "name": "哔哩合集┃猫", + "type": 3, + "api": "assets://js/bili_open.js" + }, + { + "key": "wogg", + "name": "Cat_open_js_玩偶|猫影视app", + "type": 3, + "api": "assets://js/wogg_open.js", + "ext": "8069d2ca50c749ed932e171fb2a41b95" + }, + { + "key": "kunyu77", + "name": "Cat_open_js_鲲鱼|猫影视app", + "type": 3, + "api": "assets://js/kunyu77_open.js" + }, + { + "key": "czzy", + "name": "Cat_open_js_厂长|猫影视app", + "type": 3, + "api": "assets://js/czzy_open.js" + }, + { + "key": "libvio", + "name": "Cat_open_js_黎波|猫影视app", + "type": 3, + "api": "assets://js/libvio_open.js" + }, + { + "key": "kkys", + "name": "Cat_open_js_快看|猫影视app", + "type": 3, + "api": "assets://js/kkys_open.js" + }, + { + "key": "ikanbot", + "name": "Cat_open_js_爱看|猫影视app", + "type": 3, + "api": "assets://js/ikanbot_open.js" + }, + { + "key": "ngys", + "name": "Cat_open_js_南瓜|猫影视app", + "type": 3, + "api": "assets://js/ng_open.js" + }, + { + "key": "duboku", + "name": "Cat_open_js_独播库|猫影视app", + "type": 3, + "api": "assets://js/duboku_open.js" + }, + { + "key": "subaibai", + "name": "Cat_open_js_素白白|猫影视app", + "type": 3, + "api": "assets://js/subaibai_open.js" + }, + { + "key": "sharenice", + "name": "Cat_open_js_短视频|猫影视app", + "type": 3, + "api": "assets://js/sharenice_open.js" + }, + { + "key": "mybili", + "name": "Cat_open_js_哔哩|猫影视app", + "type": 3, + "api": "assets://js/mybili_open.js" + }, + { + "key": "kuqimv", + "name": "Cat_open_js_酷奇|猫影视app", + "type": 3, + "api": "assets://js/kuqimv_open.js" + }, + { + "key": "230ts", + "name": "Cat_open_js_听书|猫影视app", + "type": 3, + "api": "assets://js/230ts_open.js" + } + ] + }, + "pan": { + "sites": [ + { + "key": "alist", + "name": "Alist", + "type": 40, + "api": "assets://js/alist_open.js", + "ext": [ + { + "name": "🙋丫仙女", + "server": "http://alist.xiaoya.pro/", + "startPage": "/", + "showAll": false, + "search": true, + "headers": { + "Authorization": "" + }, + "params": { + "/abc": { + "password": "123" + }, + "/abc/abc": { + "password": "123" + } + } + }, + { + "name": "🐋一只鱼", + "server": "https://alist.youte.ml" + }, + { + "name": "杜比", + "server": "https://dubi.tk" + }, + { + "name": "资源", + "server": "https://pan.ecve.cn" + }, + { + "name": "🌊七米蓝", + "server": "https://al.chirmyram.com" + }, + { + "name": "🐉神族九帝", + "server": "https://alist.shenzjd.com" + }, + { + "name": "☃️姬路白雪", + "server": "https://pan.jlbx.xyz" + }, + { + "name": "✨星梦", + "server": "https://pan.bashroot.top" + }, + { + "name": "💢repl", + "server": "https://ali.liucn.repl.co" + }, + { + "name": "💦讯维云盘", + "server": "https://pan.xwbeta.com" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/cat_js.json b/cat_js.json new file mode 100644 index 00000000..1fa6876d --- /dev/null +++ b/cat_js.json @@ -0,0 +1,125 @@ +{ + "sites": [ + { + "key": "drpy_js_boosj_open", + "name": "童趣┃猫", + "type": 3, + "api": "assets://js/boosj_open.js" + }, + { + "key": "drpy_js_tuxiaobei_open", + "name": "兔小贝┃猫", + "type": 3, + "api": "assets://js/tuxiaobei_open.js" + }, + { + "key": "drpy_js_ubestkid_open", + "name": "贝乐虎┃猫", + "type": 3, + "api": "assets://js/ubestkid_open.js" + }, + { + "key": "drpy_js_dj0898_open", + "name": "世纪DJ┃猫", + "type": 3, + "api": "assets://js/dj0898_open.js" + }, + { + "key": "drpy_js_zxzj_open", + "name": "在线之家┃猫", + "type": 3, + "api": "assets://js/zxzj_open.js" + }, + { + "key": "drpy_js_cntv_open", + "name": "视聚场┃猫", + "type": 3, + "api": "assets://js/cntv_open.js" + }, + { + "key": "drpy_js_bili_open", + "name": "哔哩合集┃猫", + "type": 3, + "api": "assets://js/bili_open.js" + }, + { + "key": "wogg", + "name": "Cat_open_js_玩偶|猫影视app", + "type": 3, + "api": "assets://js/wogg_open.js", + "ext": "8069d2ca50c749ed932e171fb2a41b95" + }, + { + "key": "kunyu77", + "name": "Cat_open_js_鲲鱼|猫影视app", + "type": 3, + "api": "assets://js/kunyu77_open.js" + }, + { + "key": "czzy", + "name": "Cat_open_js_厂长|猫影视app", + "type": 3, + "api": "assets://js/czzy_open.js" + }, + { + "key": "libvio", + "name": "Cat_open_js_黎波|猫影视app", + "type": 3, + "api": "assets://js/libvio_open.js" + }, + { + "key": "kkys", + "name": "Cat_open_js_快看|猫影视app", + "type": 3, + "api": "assets://js/kkys_open.js" + }, + { + "key": "ikanbot", + "name": "Cat_open_js_爱看|猫影视app", + "type": 3, + "api": "assets://js/ikanbot_open.js" + }, + { + "key": "ngys", + "name": "Cat_open_js_南瓜|猫影视app", + "type": 3, + "api": "assets://js/ng_open.js" + }, + { + "key": "duboku", + "name": "Cat_open_js_独播库|猫影视app", + "type": 3, + "api": "assets://js/duboku_open.js" + }, + { + "key": "subaibai", + "name": "Cat_open_js_素白白|猫影视app", + "type": 3, + "api": "assets://js/subaibai_open.js" + }, + { + "key": "sharenice", + "name": "Cat_open_js_短视频|猫影视app", + "type": 3, + "api": "assets://js/sharenice_open.js" + }, + { + "key": "mybili", + "name": "Cat_open_js_哔哩|猫影视app", + "type": 3, + "api": "assets://js/mybili_open.js" + }, + { + "key": "kuqimv", + "name": "Cat_open_js_酷奇|猫影视app", + "type": 3, + "api": "assets://js/kuqimv_open.js" + }, + { + "key": "230ts", + "name": "Cat_open_js_听书|猫影视app", + "type": 3, + "api": "assets://js/230ts_open.js" + } + ] +} \ No newline at end of file diff --git a/js/230ts_open.js b/js/230ts_open.js new file mode 100644 index 00000000..fb12c6a7 --- /dev/null +++ b/js/230ts_open.js @@ -0,0 +1,253 @@ +// 网站搜索异常 +import { load, _ } from './lib/cat.js'; + +let key = '爱上你听书网'; +let HOST = 'https://wap.230ts.net'; +let siteKey = ''; +let siteType = 0; +const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36'; + +async function request(reqUrl, agentSp) { + let res = await req(reqUrl, { + method: 'get', + headers: { + 'User-Agent': agentSp || MOBILE_UA, + 'Referer': HOST + }, + }); + return res.content; +} + +// cfg = {skey: siteKey, ext: extend} +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; +} + +async function home(filter) { + const html = await request(HOST + '/sort/'); + const $ = load(html); + let filterObj = {}; + const class_parse = $('dl.pd-class:first > dd > a[href*=sort]'); + let classes = []; + classes = _.map(class_parse, (cls) => { + let typeId = cls.attribs['href']; + typeId = typeId.replace(/.*?\/sort\/(.*).html/g, '$1'); + return { + type_id: typeId, + type_name: cls.children[0].data, + }; + }); + const sortName = ['玄幻有声', '灵异有声', '综艺娱乐', '长篇评书', '都市有声', '军事有声', '职场有声', '其他有声']; + classes = _.sortBy(classes, (c) => { + const index = sortName.indexOf(c.type_name); + return index === -1 ? sortName.length : index; + }); + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + const link = HOST + '/top/lastupdate/1.html'; + const html = await request(link); + const $ = load(html); + const items = $('ul.list-ul > li'); + let videos = _.map(items, (item) => { + const it = $(item).find('a:first')[0]; + const img = $(item).find('img:first')[0]; + const remarks = $($(item).find('p.module-slide-author')[0]).text().trim(); + return { + vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'), + vod_name: it.attribs.title.replace('有声小说',''), + vod_pic: HOST + img.attribs['data-original'], + vod_remarks: remarks || '', + }; + }); + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0) pg = 1; + const link = HOST + '/sort/' + tid +'/' + (`${pg}`) + '.html'; + const html = await request(link); + const $ = load(html); + const items = $('ul.book-ol > li'); + let videos = _.map(items, (item) => { + const it = $(item).find('a:first')[0]; + const img = $(item).find('img:first')[0]; + const remarks = $($(item).find('div.book-meta')[0]).text().trim(); + return { + vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'), + vod_name: it.attribs.title.replace('有声小说',''), + vod_pic: HOST + img.attribs['data-original'], + vod_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '', + }; + }); + const hasMore = $('div.paging > a:contains(下一页)').length > 0; + const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 24, + total: 24 * pgCount, + list: videos, + }); +} + +async function detail(id) { + const html = await request(HOST + '/tingshu/' + id); + const $ = load(html); + const detail = $('div.book-cell:first > div'); + let vod = { + vod_id: id, + vod_name: $('h1:first').text().trim().replace('有声小说',''), + vod_pic: HOST + $('div.myui-content__thumb img:first').attr('data-original'), + vod_content: $('div.ellipsis').text().trim(), + }; + for (const info of detail) { + const i = $(info).text().trim(); + if (i.startsWith('类型:')) { + vod.vod_type = _.map($(info).find('a'), (a) => { + return a.children[0].data; + }).join('/'); + } else if (i.startsWith('作者:')) { + vod.vod_director = _.map($(info).find('a'), (a) => { + return a.children[0].data; + }).join('/'); + } else if (i.startsWith('演播:')) { + vod.vod_actor = _.map($(info).find('a'), (a) => { + return a.children[0].data; + }).join('/'); + } else if (i.startsWith('连载中')) { + vod.vod_remarks = i.substring(3); + } + } + const playlist = _.map($('#playlist > ul > li > a'), (it) => { + return it.children[0].data + '$' + it.attribs.href.replace(/\/mp3\/(.*).html/g, '$1'); + }); + vod.vod_play_from = '道长在线'; + vod.vod_play_url = playlist.join('#'); + return JSON.stringify({ + list: [vod], + }); +} + +async function play(flag, id, flags) { + const link = HOST + '/mp3/' + id + '.html'; + const html = await request(link); + const $ = load(html); + const iframe = $('body iframe[src*=player]'); + const iframeHtml = ( + await req(HOST + iframe[0].attribs.src, { + headers: { + 'Referer': link, + 'User-Agent': MOBILE_UA, + }, + }) + ).content; + const playUrl = iframeHtml.match(/mp3:'(.*?)'/)[1]; + if (playUrl.indexOf('m4a') >= 0 || playUrl.indexOf('mp3') >= 0 ) { + return JSON.stringify({ + parse: 0, + url: playUrl, + }); + } else { + try { + const iframeHtml = ( + await req(HOST + iframe[0].attribs.src, { + headers: { + 'Referer': link, + 'User-Agent': MOBILE_UA, + }, + }) + ).content; + const playUrl = playUrl + '.m4a' + iframeHtml.match(/(\?.*?)'/)[1]; + if (playUrl.indexOf('http') >= 0) { + return JSON.stringify({ + parse: 0, + url: playUrl, + }); + } else { + const iframeHtml = ( + await req(HOST + iframe[0].attribs.src, { + headers: { + 'Referer': link, + 'User-Agent': MOBILE_UA, + }, + }) + ).content; + const playUrl2 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1]; + if (playUrl2.indexOf('\?') >= 0) { + return JSON.stringify({ + parse: 0, + url: playUrl2, + }); + } else { + const playUrl3 = playUrl2 + playUrl + return JSON.stringify({ + parse: 0, + url: playUrl3, + }); + } + } + } catch (e) {} + if (playUrl.indexOf('http') >= 0) { + const playUrl = playUrl + '.m4a'; + return JSON.stringify({ + parse: 0, + url: playUrl, + }); + } else { + const iframeHtml = ( + await req(HOST + iframe[0].attribs.src, { + headers: { + 'Referer': link, + 'User-Agent': MOBILE_UA, + }, + }) + ).content; + const playUrl4 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1]; + return JSON.stringify({ + parse: 0, + url: playUrl4 + '.m4a', + }); + } + } +} + +async function search(wd, quick) { + const link = HOST + '/search.html?searchtype=name&searchword=' + wd +'&page=1'; + const html = await request(link); + const $ = load(html); + const items = $('ul.book-ol > li'); + let videos = _.map(items, (item) => { + const it = $(item).find('a:first')[0]; + const img = $(item).find('img:first')[0]; + const remarks = $($(item).find('div.book-meta')[0]).text().trim(); + return { + vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'), + vod_name: it.attribs.title.replace('有声小说',''), + vod_pic: img.attribs['data-original'], + vod_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '', + }; + }); + return JSON.stringify({ + list: videos, + }); +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file diff --git a/js/alist_open.js b/js/alist_open.js new file mode 100644 index 00000000..0cafedab --- /dev/null +++ b/js/alist_open.js @@ -0,0 +1,275 @@ +import { _ } from './lib/cat.js'; +import { findBestLCS } from './lib/similarity.js'; + +const http = async function (url, options = {}) { + if (options.method == 'POST' && options.data) { + options.body = JSON.stringify(options.data); + options.headers = Object.assign({ 'content-type': 'application/json' }, options.headers); + } + const res = await req(url, options); + res.json = () => (res.content ? JSON.parse(res.content) : null); + res.text = () => res.content; + return res; +}; +['get', 'post'].forEach((method) => { + http[method] = function (url, options = {}) { + return http(url, Object.assign(options, { method: method.toUpperCase() })); + }; +}); + +const __drives = {}; +const __subtitle_cache = {}; + +async function get_drives_path(tid) { + const index = tid.indexOf('/', 1); + const name = tid.substring(1, index); + const path = tid.substring(index); + return { drives: await get_drives(name), path }; +} + +async function get_drives(name) { + const { settings, api, server } = __drives[name]; + if (settings.v3 == null) { + //获取 设置 + settings.v3 = false; + const data = (await http.get(server + '/api/public/settings')).json().data; + if (_.isArray(data)) { + settings.title = data.find((x) => x.key == 'title')?.value; + settings.v3 = false; + settings.version = data.find((x) => x.key == 'version')?.value; + settings.enableSearch = data.find((x) => x.key == 'enable search')?.value == 'true'; + } else { + settings.title = data.title; + settings.v3 = true; + settings.version = data.version; + settings.enableSearch = false; //v3 没有找到 搜索配置 + } + //不同版本 接口不一样 + api.path = settings.v3 ? '/api/fs/list' : '/api/public/path'; + api.file = settings.v3 ? '/api/fs/get' : '/api/public/path'; + api.search = settings.v3 ? '/api/public/search' : '/api/public/search'; + api.other = settings.v3 ? '/api/fs/other' : null; + } + return __drives[name]; +} + +let siteKey = ''; +let siteType = 0; + +function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + cfg.ext.forEach( + (item) => + (__drives[item.name] = { + name: item.name, + server: item.server.endsWith('/') ? item.server.substring(0, item.server.length - 1) : item.server, + startPage: item.startPage || '/', //首页 + showAll: item.showAll === true, //默认只显示 视频和文件夹,如果想显示全部 showAll 设置true + params: item.params || {}, + _path_param: item.params + ? _.sortBy(Object.keys(item.params), function (x) { + return -x.length; + }) + : [], + settings: {}, + api: {}, + getParams(path) { + const key = this._path_param.find((x) => path.startsWith(x)); + return Object.assign({}, this.params[key], { path }); + }, + async getPath(path) { + const res = (await http.post(this.server + this.api.path, { data: this.getParams(path) })).json(); + return this.settings.v3 ? res.data.content : res.data.files; + }, + async getFile(path) { + const res = (await http.post(this.server + this.api.file, { data: this.getParams(path) })).json(); + const data = this.settings.v3 ? res.data : res.data.files[0]; + if (!this.settings.v3) data.raw_url = data.url; //v2 的url和v3不一样 + return data; + }, + async getOther(method, path) { + const data = this.getParams(path); + data.method = method; + const res = (await http.post(this.server + this.api.other, { data: data })).json(); + return res; + }, + isFolder(data) { + return data.type == 1; + }, + isVideo(data) { + //判断是否是 视频文件 + return this.settings.v3 ? data.type == 2 : data.type == 3; + }, + isSubtitle(data) { + if (data.type == 1) return false; + const ext = ['.srt', '.ass', '.scc', '.stl', '.ttml']; + return ext.some((x) => data.name.endsWith(x)); + }, + getType(data) { + const isVideo = this.isVideo(data); + return this.isFolder(data) ? 0 : isVideo ? 10 : 1; + }, + getPic(data) { + let pic = this.settings.v3 ? data.thumb : data.thumbnail; + return pic || (this.isFolder(data) ? 'http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png' : ''); + }, + getSize(data) { + let sz = data.size || 0; + if (sz <= 0) return ''; + let filesize = ''; + if (sz > 1024 * 1024 * 1024 * 1024.0) { + sz /= 1024 * 1024 * 1024 * 1024.0; + filesize = 'TB'; + } else if (sz > 1024 * 1024 * 1024.0) { + sz /= 1024 * 1024 * 1024.0; + filesize = 'GB'; + } else if (sz > 1024 * 1024.0) { + sz /= 1024 * 1024.0; + filesize = 'MB'; + } else { + sz /= 1024.0; + filesize = 'KB'; + } + return sz.toFixed(2) + filesize; + }, + getRemark(data) { + return ''; + }, + }) + ); +} + +async function dir(dir, pg) { + for (const k in __subtitle_cache) { + delete __subtitle_cache[k]; + } + pg = pg || 1; + if (pg == 0) pg == 1; + if (dir === '/' || dir === '') { + const result = _.map(__drives, function (d) { + return { name: d.name, path: '/' + d.name + d.startPage, type: 0, thumb: '' }; + }); + return JSON.stringify({ + parent: '', + page: pg, + pagecount: pg, + list: result, + }); + } + + let { drives, path } = await get_drives_path(dir); + const id = dir.endsWith('/') ? dir : dir + '/'; + const list = await drives.getPath(path); + let subtList = []; + let videos = []; + let allList = []; + list.forEach((item) => { + if (drives.isSubtitle(item)) subtList.push(item.name); + const isVideo = drives.isVideo(item); + if (!drives.showAll && !drives.isFolder(item) && !isVideo) return; + const file = { + name: item.name.replaceAll('$', '_').replaceAll('#', '_'), + path: id + item.name + (drives.isFolder(item) ? '/' : ''), + thumb: drives.getPic(item), + type: drives.getType(item), + size: drives.getSize(item), + remark: drives.getRemark(item), + }; + if (drives.isVideo(item)) videos.push(file); + allList.push(file); + }); + if (subtList.length > 0) { + videos.forEach((item) => { + var sbust = findBestLCS(item.name, subtList); + if (sbust.bestMatch) __subtitle_cache[item.path] = [id + sbust.bestMatch.target]; + }); + } + return JSON.stringify({ + parent: id, + page: pg, + pagecount: pg, + list: allList, + }); +} + +async function file(file) { + let { drives, path } = await get_drives_path(file); + const item = await drives.getFile(path); + const subs = []; + if (__subtitle_cache[file]) { + for (const sub of __subtitle_cache[file]) { + try { + let subP = await get_drives_path(sub); + const subItem = await drives.getFile(subP.path); + subs.push(subItem.raw_url); + } catch (error) {} + } + } + if (item.provider === 'AliyundriveShare2Open' && drives.api.other) { + const urls = ['原画', item.raw_url]; + try { + const res = await drives.getOther('video_preview', path); + for (const live of res.data.video_preview_play_info.live_transcoding_task_list) { + if (live.status === 'finished') { + urls.push(live.template_id); + urls.push(live.url); + } + } + } catch (error) {} + const result = { + name: item.name, + url: urls, + size: drives.getSize(item), + remark: drives.getRemark(item), + header: {}, + extra: { + subt: subs, + }, + }; + return JSON.stringify(result); + } else if (item.provider === '123Pan') { + let url = item.raw_url; + try { + url = (await http.get(url)).json().data.redirect_url; + } catch (error) {} + const result = { + name: item.name, + url: url, + size: drives.getSize(item), + remark: drives.getRemark(item), + header: {}, + extra: { + subt: subs, + }, + }; + return JSON.stringify(result); + } else { + const result = { + name: item.name, + url: item.raw_url, + size: drives.getSize(item), + remark: drives.getRemark(item), + header: {}, + extra: { + subt: subs, + }, + }; + return JSON.stringify(result); + } +} + +function search(wd) { + return JSON.stringify({ + list: [], + }); +} + +export function __jsEvalReturn() { + return { + init: init, + dir: dir, + file: file, + search: search, + }; +} diff --git a/js/app.js b/js/app.js new file mode 100644 index 00000000..32165447 --- /dev/null +++ b/js/app.js @@ -0,0 +1,8 @@ +function __jsEvalReturn() { + return { + isVideoFormat: function (url) { + return !0; + }, + }; +} +export { __jsEvalReturn }; diff --git a/js/bili_open.js b/js/bili_open.js new file mode 100644 index 00000000..0e850317 --- /dev/null +++ b/js/bili_open.js @@ -0,0 +1,508 @@ +import { Crypto, _ } from './lib/cat.js'; + +let siteKey = ''; +let siteType = 0; + +let cookie = ''; +let login = ''; +let vip = ''; +let extendObj = {}; +let vod_audio_id = { + 30280: 192000, + 30232: 132000, + 30216: 64000, +}; +let vod_codec = { + // 13: 'AV1', + 12: 'HEVC', + 7: 'AVC', +}; + +const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'; + +async function request(reqUrl, ua) { + let res = await req(reqUrl, { + method: 'get', + headers: ua ? ua : { 'User-Agent': UA }, + timeout: 60000, + }); + return res.content; +} + +function getHeaders() { + const headers = { + 'User-Agent': UA, + }; + if (!_.isEmpty(cookie)) { + headers.cookie = cookie; + } + return headers; +} + +async function getCookie() { + let result = await req('https://www.bilibili.com', { + method: 'get', + headers: { 'User-Agent': UA }, + timeout: 60000, + }); + const setCookieHeaders = result.headers['set-cookie']; + cookie = setCookieHeaders.map((kk) => kk.split(';')[0] + ';').join(''); +} + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + let extend = cfg.ext; + if (cfg.ext.hasOwnProperty('categories')) extend = cfg.ext.categories; + if (cfg.ext.hasOwnProperty('cookie')) cookie = cfg.ext.cookie; + if (_.isEmpty(cookie)) await getCookie(); + let result = JSON.parse(await request('https://api.bilibili.com/x/web-interface/nav', getHeaders())); + login = result.data.isLogin; + vip = result.data.hasOwnProperty('vipStatus'); + const ext = extend.split('#'); + const jsonData = [ + { + key: 'order', + name: '排序', + value: [ + { n: '综合排序', v: '0' }, + { n: '最多点击', v: 'click' }, + { n: '最新发布', v: 'pubdate' }, + { n: '最多弹幕', v: 'dm' }, + { n: '最多收藏', v: 'stow' }, + ], + }, + { + key: 'duration', + name: '时长', + value: [ + { n: '全部时长', v: '0' }, + { n: '60分钟以上', v: '4' }, + { n: '30~60分钟', v: '3' }, + { n: '10~30分钟', v: '2' }, + { n: '10分钟以下', v: '1' }, + ], + }, + ]; + const newarr = []; + const d = {}; + for (const kk of ext) { + const c = { + type_name: kk, + type_id: kk, + land: 1, + ratio: 1.78, + }; + newarr.push(c); + d[kk] = jsonData; + } + extendObj = { + classes: newarr, + filter: d, + }; +} + +function home(filter) { + try { + const jSONObject = { + class: extendObj.classes, + }; + if (filter) { + jSONObject.filters = extendObj.filter; + } + return JSON.stringify(jSONObject); + } catch (e) { + return ''; + } +} + +async function homeVod() { + try { + const list = []; + const type_id = extendObj.classes[0].type_id; + const url = `https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword=${type_id}&duration=4`; + + const response = await request(url, getHeaders()); + const responseData = JSON.parse(response); + const vods = responseData.data.result; + + for (const item of vods) { + const vod = {}; + let imageUrl = item.pic; + if (imageUrl.startsWith('//')) { + imageUrl = 'https:' + imageUrl; + } + + vod.vod_id = item.bvid; + vod.vod_name = removeTags(item.title); + vod.vod_pic = imageUrl; + vod.vod_remarks = item.duration.split(':')[0] + '分钟'; + list.push(vod); + } + + const result = { list: list }; + return JSON.stringify(result); + } catch (e) {} +} + +async function category(tid, page, filter, ext) { + if (page < 1) page = 1; + try { + if (Object.keys(ext).length > 0 && ext.hasOwnProperty('tid') && ext['tid'].length > 0) { + tid = ext['tid']; + } + let url = `https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword=${encodeURIComponent(tid)}`; + + if (Object.keys(ext).length > 0) { + for (const k in ext) { + if (k == 'tid') { + continue; + } + url += `&${encodeURIComponent(k)}=${encodeURIComponent(ext[k])}`; + } + } + + url += `&page=${encodeURIComponent(page)}`; + + const response = await request(url, getHeaders()); + + const resp = JSON.parse(response); + const data = resp.data; + + const videos = []; + const items = data.result; + + for (const item of items) { + const video = {}; + let pic = item.pic; + if (pic.startsWith('//')) { + pic = 'https:' + pic; + } + + video.vod_id = item.bvid; + video.vod_name = removeTags(item.title); + video.vod_pic = pic; + video.vod_remarks = item.duration.split(':')[0] + '分钟'; + videos.push(video); + } + + const result = { + page: page, + pagecount: data.numPages, + limit: data.pagesize, + total: data.numResults, + list: videos, + }; + + return JSON.stringify(result); + } catch (e) {} + return null; +} + +async function detail(ids) { + try { + const bvid = ids; + const bvid2aidUrl = `https://api.bilibili.com/x/web-interface/archive/stat?bvid=${bvid}`; + + const bvid2aidResp = JSON.parse(await request(bvid2aidUrl, getHeaders())); + + const aid = bvid2aidResp.data.aid + ''; + const detailUrl = `https://api.bilibili.com/x/web-interface/view?aid=${aid}`; + const detailData = JSON.parse(await request(detailUrl, getHeaders())).data; + + const video = { + vod_id: bvid, + vod_name: detailData.title, + vod_pic: detailData.pic, + type_name: detailData.tname, + vod_year: '', + vod_area: '', + vod_remarks: `${Math.floor(detailData.duration / 60)}分钟`, + vod_actor: '', + vod_director: '', + vod_content: detailData.desc, + }; + + const playurldata = 'https://api.bilibili.com/x/player/playurl?avid=' + aid + '&cid=' + detailData.cid + '&qn=127&fnval=4048&fourk=1'; + const playurldatas = JSON.parse(await request(playurldata, getHeaders())); + + const playurldatalist = playurldatas.data; + const a = playurldatalist.accept_description; + const accept_quality = playurldatalist.accept_quality; + const Aq = []; + const pFrom = []; + + for (let i = 0; i < accept_quality.length; i++) { + if (!login) { + if (accept_quality[i] > 32) continue; + } else if (!vip && login) { + if (accept_quality[i] > 80) continue; + } else { + if (accept_quality[i] > 32) continue; + } + pFrom.push(a[i]); + Aq.push(accept_quality[i]); + } + + const jSONArray = detailData.pages; + const playList = []; + for (let j = 0; j < jSONArray.length; j++) { + const jSONObject6 = jSONArray[j]; + const j2 = jSONObject6.cid; + const playUrl = j + '$' + aid + '+' + j2 + '+' + Aq.join(':') + '+' + pFrom.join(':'); + playList.push(playUrl); + } + + video.vod_play_from = 'external$$$dash$$$mp4'; + video.vod_play_url = playList.join('#'); + video.vod_play_url = [video.vod_play_url, video.vod_play_url, video.vod_play_url].join('$$$'); + + const list = [video]; + const result = { list }; + return JSON.stringify(result); + } catch (e) {} + return null; +} + +async function play(flag, id, flags) { + try { + const playHeaders = { Referer: 'https://www.bilibili.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36' }; + const ids = id.split('+'); + const aid = ids[0]; + const cid = ids[1]; + const qualityIds = ids[2].split(':'); + const qualityName = ids[3].split(':'); + if (flag == 'dash') { + // dash mpd 代理 + const js2Base = await js2Proxy(true, siteType, siteKey, 'dash/', {}); + let urls = []; + for (let i = 0; i < qualityIds.length; i++) { + urls.push(qualityName[i], js2Base + base64Encode(aid + '+' + cid + '+' + qualityIds[i])); + } + return JSON.stringify({ + parse: 0, + url: urls, + header: playHeaders, + }); + } else if (flag == 'mp4') { + // 直链 + let urls = []; + for (let i = 0; i < qualityIds.length; i++) { + const url = `https://api.bilibili.com/x/player/playurl?avid=${aid}&cid=${cid}&qn=${qualityIds[i]}&fourk=1`; + const resp = JSON.parse(await request(url, getHeaders())); + const data = resp.data; + if (data.quality != qualityIds[i]) continue; + let durl = data.durl[0].url; + urls.push(qualityName[i], durl); + } + + return JSON.stringify({ + parse: 0, + url: urls, + header: playHeaders, + }); + } else { + // 音频外挂 + let urls = []; + let audios = []; + for (let i = 0; i < qualityIds.length; i++) { + const url = `https://api.bilibili.com/x/player/playurl?avid=${aid}&cid=${cid}&qn=${qualityIds[i]}&fnval=4048&fourk=1`; + let resp = JSON.parse(await request(url, getHeaders())); + const dash = resp.data.dash; + const video = dash.video; + const audio = dash.audio; + for (let j = 0; j < video.length; j++) { + const dashjson = video[j]; + if (dashjson.id == qualityIds[i]) { + for (const key in vod_codec) { + if (dashjson.codecid == key) { + urls.push(qualityName[i] + ' ' + vod_codec[key], dashjson.baseUrl); + } + } + } + } + if (audios.length == 0) { + for (let j = 0; j < audio.length; j++) { + const dashjson = audio[j]; + for (const key in vod_audio_id) { + if (dashjson.id == key) { + audios.push({ + title: _.floor(parseInt(vod_audio_id[key]) / 1024) + 'Kbps', + bit: vod_audio_id[key], + url: dashjson.baseUrl, + }); + } + } + } + audios = _.sortBy(audios, 'bit'); + } + } + + return JSON.stringify({ + parse: 0, + url: urls, + extra: { + audio: audios, + }, + header: playHeaders, + }); + } + } catch (e) {} + return null; +} + +async function search(key, quick, pg) { + let page = pg || 1; + if (page == 0) page = 1; + try { + const ext = { + duration: '4', + }; + let resp = JSON.parse(await category(key, page, true, ext)); + const catVideos = resp.list; + const pageCount = resp.pagecount; + const videos = []; + for (let i = 0; i < catVideos.length; ++i) { + videos.push(catVideos[i]); + } + const result = { + page: page, + pagecount: pageCount, + land: 1, + ratio: 1.78, + list: videos, + }; + return JSON.stringify(result); + } catch (e) {} + return null; +} + +async function proxy(segments, headers) { + let what = segments[0]; + let url = base64Decode(segments[1]); + if (what == 'dash') { + const ids = url.split('+'); + const aid = ids[0]; + const cid = ids[1]; + const str5 = ids[2]; + const urls = `https://api.bilibili.com/x/player/playurl?avid=${aid}&cid=${cid}&qn=${str5}&fnval=4048&fourk=1`; + let videoList = ''; + let audioList = ''; + + let resp = JSON.parse(await request(urls, getHeaders())); + const dash = resp.data.dash; + const video = dash.video; + const audio = dash.audio; + + for (let i = 0; i < video.length; i++) { + // if (i > 0) continue; // 只取一个 + const dashjson = video[i]; + if (dashjson.id == str5) { + videoList += getDashMedia(dashjson); + } + } + + for (let i = 0; i < audio.length; i++) { + // if (i > 0) continue; + const ajson = audio[i]; + for (const key in vod_audio_id) { + if (ajson.id == key) { + audioList += getDashMedia(ajson); + } + } + } + + let mpd = getDash(resp, videoList, audioList); + return JSON.stringify({ + code: 200, + content: mpd, + headers: { + 'Content-Type': 'application/dash+xml', + }, + }); + } + return JSON.stringify({ + code: 500, + content: '', + }); +} + +function getDashMedia(dash) { + try { + let qnid = dash.id; + const codecid = dash.codecid; + const media_codecs = dash.codecs; + const media_bandwidth = dash.bandwidth; + const media_startWithSAP = dash.startWithSap; + const media_mimeType = dash.mimeType; + const media_BaseURL = dash.baseUrl.replace(/&/g, '&'); + const media_SegmentBase_indexRange = dash.SegmentBase.indexRange; + const media_SegmentBase_Initialization = dash.SegmentBase.Initialization; + const mediaType = media_mimeType.split('/')[0]; + let media_type_params = ''; + + if (mediaType == 'video') { + const media_frameRate = dash.frameRate; + const media_sar = dash.sar; + const media_width = dash.width; + const media_height = dash.height; + media_type_params = `height='${media_height}' width='${media_width}' frameRate='${media_frameRate}' sar='${media_sar}'`; + } else if (mediaType == 'audio') { + for (const key in vod_audio_id) { + if (qnid == key) { + const audioSamplingRate = vod_audio_id[key]; + media_type_params = `numChannels='2' sampleRate='${audioSamplingRate}'`; + } + } + } + qnid += '_' + codecid; + + return ` + + + ${media_BaseURL} + + + + + `; + } catch (e) { + // Handle exceptions here + } +} + +function getDash(ja, videoList, audioList) { + const duration = ja.data.dash.duration; + const minBufferTime = ja.data.dash.minBufferTime; + return ` + + ${videoList} + ${audioList} + + `; +} + +function base64Encode(text) { + return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text)); +} + +function base64Decode(text) { + return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); +} + +function removeTags(input) { + return input.replace(/<[^>]*>/g, ''); +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + proxy: proxy, + search: search, + }; +} diff --git a/js/build.js b/js/build.js new file mode 100644 index 00000000..e54ab65f --- /dev/null +++ b/js/build.js @@ -0,0 +1,61 @@ +import fs from 'node:fs'; +import path from 'path'; +import uglifyjs from 'uglify-js'; + +const copySpider = ['app', 'kunyu77_open', 'alist_open']; + +const root = process.cwd(); + +const src = path.join(root); +const out = path.join(root, 'dist'); + +function minify(s, d) { + var jsContent = fs.readFileSync(s).toString(); + jsContent = jsContent.replace('./lib/cat.js', 'assets://js/lib/cat.js'); + jsContent = jsContent.replace('./cat.js', 'assets://js/lib/cat.js'); + jsContent = uglifyjs.minify(jsContent, { + mangle: false, + }); + fs.writeFileSync(d, jsContent.code); +} + +function listAllFiles(dirPath, arrayOfFiles) { + var files = fs.readdirSync(dirPath); + + arrayOfFiles = arrayOfFiles || []; + + files.forEach(function (file) { + if (fs.statSync(dirPath + '/' + file).isDirectory()) { + arrayOfFiles = listAllFiles(dirPath + '/' + file, arrayOfFiles); + } else { + arrayOfFiles.push(path.join(dirPath, '/', file)); + } + }); + + return arrayOfFiles; +} + +function src2Out() { + if (fs.existsSync(out)) fs.rmSync(out, { recursive: true, force: true }); + + fs.mkdirSync(out, { recursive: true }); + const libSrc = path.join(src, 'lib'); + const libOut = path.join(out, 'lib'); + fs.mkdirSync(libOut, { recursive: true }); + const libs = listAllFiles(libSrc); + for (let index = 0; index < libs.length; index++) { + const element = libs[index]; + const relative = path.relative(libSrc, element); + minify(element, path.join(libOut, relative)); + } + + for (const sp of copySpider) { + minify(path.join(src, sp + '.js'), path.join(out, sp + '.js')); + } +} + +src2Out(); + +fs.copyFileSync(path.join(src, 'config_open.json'), path.join(out, 'config_open.json')); + +console.log('done'); diff --git a/js/config_open.json b/js/config_open.json new file mode 100644 index 00000000..12146d9a --- /dev/null +++ b/js/config_open.json @@ -0,0 +1,161 @@ +{ + "video": { + "sites": [ +{"key":"drpy_js_boosj_open","name":"童趣┃猫","type":3,"api":"assets://js/boosj_open.js"}, +{"key":"drpy_js_tuxiaobei_open","name":"兔小贝┃猫","type":3,"api":"assets://js/tuxiaobei_open.js"}, +{"key":"drpy_js_ubestkid_open","name":"贝乐虎┃猫","type":3,"api":"assets://js/ubestkid_open.js"}, +{"key":"drpy_js_dj0898_open","name":"世纪DJ┃猫","type":3,"api":"assets://js/dj0898_open.js"}, +{"key":"drpy_js_zxzj_open","name":"在线之家┃猫","type":3,"api":"assets://js/zxzj_open.js"}, +{"key":"drpy_js_cntv_open","name":"视聚场┃猫","type":3,"api":"assets://js/cntv_open.js"}, +{"key":"drpy_js_bili_open","name":"哔哩合集┃猫","type":3,"api":"assets://js/bili_open.js"}, + { + "key": "wogg", + "name": "Cat_open_js_玩偶|猫影视app", + "type": 3, + "api": "assets://js/wogg_open.js", + "ext": "8069d2ca50c749ed932e171fb2a41b95" + }, + + { + "key": "kunyu77", + "name": "Cat_open_js_鲲鱼|猫影视app", + "type": 3, + "api": "assets://js/kunyu77_open.js" + }, + { + "key": "czzy", + "name": "Cat_open_js_厂长|猫影视app", + "type": 3, + "api": "assets://js/czzy_open.js" + }, + { + "key": "libvio", + "name": "Cat_open_js_黎波|猫影视app", + "type": 3, + "api": "assets://js/libvio_open.js" + }, + { + "key": "kkys", + "name": "Cat_open_js_快看|猫影视app", + "type": 3, + "api": "assets://js/kkys_open.js" + }, + { + "key": "ikanbot", + "name": "Cat_open_js_爱看|猫影视app", + "type": 3, + "api": "assets://js/ikanbot_open.js" + }, + { + "key": "ngys", + "name": "Cat_open_js_南瓜|猫影视app", + "type": 3, + "api": "assets://js/ng_open.js" + }, + { + "key": "duboku", + "name": "Cat_open_js_独播库|猫影视app", + "type": 3, + "api": "assets://js/duboku_open.js" + }, + { + "key": "subaibai", + "name": "Cat_open_js_素白白|猫影视app", + "type": 3, + "api": "assets://js/subaibai_open.js" + }, + + { + "key": "sharenice", + "name": "Cat_open_js_短视频|猫影视app", + "type": 3, + "api": "assets://js/sharenice_open.js" + }, + { + "key": "mybili", + "name": "Cat_open_js_哔哩|猫影视app", + "type": 3, + "api": "assets://js/mybili_open.js" + }, + { + "key": "kuqimv", + "name": "Cat_open_js_酷奇|猫影视app", + "type": 3, + "api": "assets://js/kuqimv_open.js" + }, + { + "key": "230ts", + "name": "Cat_open_js_听书|猫影视app", + "type": 3, + "api": "assets://js/230ts_open.js" + } + + ] + }, + "pan": { + "sites": [ + { + "key": "alist", + "name": "Alist", + "type": 40, + "api": "assets://js/alist_open.js", + "ext": [ + { + "name": "🙋丫仙女", + "server": "http://alist.xiaoya.pro/", + "startPage": "/", + "showAll": false, + "search": true, + "headers": { + "Authorization": "" + }, + "params": { + "/abc": { + "password": "123" + }, + "/abc/abc": { + "password": "123" + } + } + }, + { + "name": "🐋一只鱼", + "server": "https://alist.youte.ml" + }, + { + "name": "杜比", + "server": "https://dubi.tk" + }, + { + "name": "资源", + "server": "https://pan.ecve.cn" + }, + { + "name": "🌊七米蓝", + "server": "https://al.chirmyram.com" + }, + { + "name": "🐉神族九帝", + "server": "https://alist.shenzjd.com" + }, + { + "name": "☃️姬路白雪", + "server": "https://pan.jlbx.xyz" + }, + { + "name": "✨星梦", + "server": "https://pan.bashroot.top" + }, + { + "name": "💢repl", + "server": "https://ali.liucn.repl.co" + }, + { + "name": "💦讯维云盘", + "server": "https://pan.xwbeta.com" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/js/czzy_open.js b/js/czzy_open.js new file mode 100644 index 00000000..09451be8 --- /dev/null +++ b/js/czzy_open.js @@ -0,0 +1,244 @@ +// 自动从 地址发布页 获取&跳转url地址 +import { Crypto, load, _ } from './lib/cat.js'; + +let key = 'czzy'; +let host = 'https://www.czzy.site'; // 厂长地址发布页 +// let url = 'https://cz01.cc'; +let url = ''; +let siteKey = ''; +let siteType = 0; +const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'; +const cookie = {}; + +async function request(reqUrl, referer, mth, data, hd) { + const headers = { + 'User-Agent': UA, + Cookie: _.map(cookie, (value, key) => { + return `${key}=${value}`; + }).join(';'), + }; + if (referer) headers.referer = encodeURIComponent(referer); + let res = await req(reqUrl, { + method: mth || 'get', + headers: headers, + data: data, + postType: mth === 'post' ? 'form' : '', + }); + if (res.headers['set-cookie']) { + const set_cookie = _.isArray(res.headers['set-cookie']) ? res.headers['set-cookie'].join(';') : res.headers['set-cookie']; + const cks = set_cookie.split(';'); + for (const c of cks) { + const tmp = c.trim(); + if (tmp.startsWith('result=')) { + cookie.result = tmp.substring(7); + return await request(reqUrl, reqUrl, 'post', { + result: cookie.result, + }); + } else if (tmp.startsWith('esc_search_captcha=1')) { + cookie.esc_search_captcha = 1; + delete cookie.result; + return await request(reqUrl); + } + } + // console.log(res.headers['set-cookie']); + } + return res.content; +} + +// cfg = {skey: siteKey, ext: extend} +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + let html = await request(host); + url = html.match(/推荐访问' + url); // js_debug.log +} + +async function home(filter) { + let filterObj = {}; + const html = await request(url + '/movie_bt'); + const $ = load(html); + const tags = $('div#beautiful-taxonomy-filters-tax-movie_bt_tags > a'); + let tag = { + key: 'tag', + name: '类型', + value: _.map(tags, (n) => { + let v = n.attribs['cat-url'] || ''; + v = v.substring(v.lastIndexOf('/') + 1); + return { n: n.children[0].data, v: v }; + }), + }; + tag['init'] = tag.value[0].v; + const series = $('div#beautiful-taxonomy-filters-tax-movie_bt_series > a[cat-url*=movie_bt_series]'); + let classes = _.map(series, (s) => { + let typeId = s.attribs['cat-url']; + typeId = typeId.substring(typeId.lastIndexOf('/') + 1); + filterObj[typeId] = [tag]; + return { + type_id: typeId, + type_name: s.children[0].data, + }; + }); + const sortName = ['电影', '电视剧', '国产剧', '美剧', '韩剧', '日剧', '海外剧(其他)', '华语电影', '印度电影', '日本电影', '欧美电影', '韩国电影', '动画', '俄罗斯电影', '加拿大电影']; + classes = _.sortBy(classes, (c) => { + const index = sortName.indexOf(c.type_name); + return index === -1 ? sortName.length : index; + }); + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + return '{}'; +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0) pg = 1; + const tag = extend.tag || ''; + const link = url + '/movie_bt' + (tag.length > 0 ? `/movie_bt_tags/${tag}` : '') + '/movie_bt_series/' + tid + (pg > 1 ? `/page/${pg}` : ''); + const html = await request(link); + const $ = load(html); + const items = $('div.mrb > ul > li'); + let videos = _.map(items, (item) => { + const img = $(item).find('img:first')[0]; + const a = $(item).find('a:first')[0]; + const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim(); + const jidi = $($(item).find('div.jidi')[0]).text().trim(); + return { + vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'), + vod_name: img.attribs.alt, + vod_pic: img.attribs['data-original'], + vod_remarks: jidi || hdinfo || '', + }; + }); + const hasMore = $('div.mrb > div.pagenavi_txt > a:contains(>)').length > 0; + const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 20, + total: 20 * pgCount, + list: videos, + }); +} + +function stripHtmlTag(src) { + return src + .replace(/<\/?[^>]+(>|$)/g, '') + .replace(/&.{1,5};/g, '') + .replace(/\s{2,}/g, ' '); +} + +async function detail(id) { + const html = await request(url + '/movie/' + id + '.html'); + const $ = load(html); + const detail = $('ul.moviedteail_list > li'); + let vod = { + vod_id: id, + vod_pic: $('div.dyimg img:first').attr('src'), + vod_remarks: '', + vod_content: stripHtmlTag($('div.yp_context').html()).trim(), + }; + for (const info of detail) { + const i = $(info).text().trim(); + if (i.startsWith('地区:')) { + vod.vod_area = i.substring(3); + } else if (i.startsWith('年份:')) { + vod.vod_year = i.substring(3); + } else if (i.startsWith('导演:')) { + vod.vod_director = _.map($(info).find('a'), (a) => { + return a.children[0].data; + }).join('/'); + } else if (i.startsWith('主演:')) { + vod.vod_actor = _.map($(info).find('a'), (a) => { + return a.children[0].data; + }).join('/'); + } else if (i.startsWith('语言:')) { + vod.vod_lang = i.substring(3); + } + } + const playlist = _.map($('div.paly_list_btn > a'), (a) => { + return a.children[0].data + '$' + a.attribs.href.replace(/.*?\/v_play\/(.*).html/g, '$1'); + }); + vod.vod_play_from = key; + vod.vod_play_url = playlist.join('#'); + return JSON.stringify({ + list: [vod], + }); +} + +async function play(flag, id, flags) { + const link = url + '/v_play/' + id + '.html'; + const html = await request(link); + const $ = load(html); + const iframe = $('body iframe[src*=Cloud]'); + if (iframe.length > 0) { + const iframeHtml = ( + await req(iframe[0].attribs.src, { + headers: { + Referer: link, + 'User-Agent': UA, + }, + }) + ).content; + let code = iframeHtml + .match(/var url = '(.*?)'/)[1] + .split('') + .reverse() + .join(''); + let temp = ''; + for (let i = 0x0; i < code.length; i = i + 0x2) { + temp += String.fromCharCode(parseInt(code[i] + code[i + 0x1], 0x10)); + } + const playUrl = temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7); + return JSON.stringify({ + parse: 0, + url: playUrl, + }); + } else { + const js = $('script:contains(window.wp_nonce)').html(); + const group = js.match(/(var.*)eval\((\w*\(\w*\))\)/); + const md5 = Crypto; + const result = eval(group[1] + group[2]); + const playUrl = result.match(/url:.*?['"](.*?)['"]/)[1]; + return JSON.stringify({ + parse: 0, + url: playUrl, + }); + } +} + +async function search(wd, quick) { + const html = await request(url + '/?s=' + wd); + const $ = load(html); + const items = $('div.search_list > ul > li'); + let videos = _.map(items, (item) => { + const img = $(item).find('img:first')[0]; + const a = $(item).find('a:first')[0]; + const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim(); + const jidi = $($(item).find('div.jidi')[0]).text().trim(); + return { + vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'), + vod_name: img.attribs.alt, + vod_pic: img.attribs['data-original'], + vod_remarks: jidi || hdinfo || '', + }; + }); + return JSON.stringify({ + list: videos, + }); +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} diff --git a/js/duboku_open.js b/js/duboku_open.js new file mode 100644 index 00000000..b7f7a43e --- /dev/null +++ b/js/duboku_open.js @@ -0,0 +1,166 @@ +import { Crypto, load, _, jinja2 } from './lib/cat.js'; + +let key = 'duboku'; +let url = 'https://www.duboku.tv'; +let siteKey = ''; +let siteType = 0; + +const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'; + +async function request(reqUrl, agentSp) { + let res = await req(reqUrl, { + method: 'get', + headers: { + 'User-Agent': agentSp || UA, + 'Referer': url + }, + }); + return res.content; +} + +// cfg = {skey: siteKey, ext: extend} +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; +} + +async function home(filter) { + const html = await request(url); + const $ = load(html); + const class_parse = $('ul.nav-list > li > a[href*=vodtype]'); + let classes = []; + classes = _.map(class_parse, (cls) => { + let typeId = cls.attribs['href']; + typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html',''); + return { + type_id: typeId, + type_name: cls.children[0].data, + }; + }); + let filterObj = { + "2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"陆剧","v":"13"},{"n":"日韩剧","v":"15"},{"n":"短剧","v":"21"},{"n":"台泰剧","v":"14"},{"n":"港剧","v":"20"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"英国","v":"英国"},{"n":"巴西","v":"巴西"},{"n":"泰国","v":"泰国"},{"n":"法国","v":"法国"},{"n":"日本","v":"日本"},{"n":"荷兰","v":"荷兰"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"韩语","v":"韩语"},{"n":"泰语","v":"泰语"},{"n":"法语","v":"法语"},{"n":"日语","v":"日语"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], + "3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"真人秀","v":"真人秀"},{"n":"选秀","v":"选秀"},{"n":"竞演","v":"竞演"},{"n":"情感","v":"情感"},{"n":"访谈","v":"访谈"},{"n":"播报","v":"播报"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"纪实","v":"纪实"},{"n":"曲艺","v":"曲艺"},{"n":"生活","v":"生活"},{"n":"游戏互动","v":"游戏互动"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"韩国","v":"韩国"},{"n":"美国","v":"美国"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], + "4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"玄幻","v":"玄幻"},{"n":"武侠","v":"武侠"},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], + "13":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], + "15":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], + "21":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], + "14":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"台湾","v":"台湾"},{"n":"泰国","v":"泰国"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], + "20":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}] + }; + + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + const link = url + '/vodshow/2--hits---------.html'; + const html = await request(link); + const $ = load(html); + const items = $('div.myui-panel_bd > ul.myui-vodlist > li'); + let videos = _.map(items, (item) => { + const it = $(item).find('a:first')[0]; + const remarks = $($(item).find('span.pic-text')[0]).text().trim(); + return { + vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'), + vod_name: it.attribs.title, + vod_pic: it.attribs['data-original'], + vod_remarks: remarks || '', + }; + }); + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0) pg = 1; + + const link = url + '/vodshow/' + (extend.CateId || tid) + '-'+(extend.area || '')+'-'+(extend.by || 'time')+'-'+(extend.class || '')+'-'+(extend.lang || '')+'-'+(extend.letter || '')+'---' + (`${pg}`) + '---'+(extend.year || '')+'.html'; + const html = await request(link); + const $ = load(html); + const items = $('div.myui-panel_bd > ul.myui-vodlist > li'); + let videos = _.map(items, (item) => { + const it = $(item).find('a:first')[0]; + const remarks = $($(item).find('span.pic-text')[0]).text().trim(); + return { + vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'), + vod_name: it.attribs.title, + vod_pic: it.attribs['data-original'], + vod_remarks: remarks || '', + }; + }); + const hasMore = $('ul.myui-page > li > a:contains(下一页)').length > 0; + const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 24, + total: 24 * pgCount, + list: videos, + }); +} + +async function detail(id) { + const html = await request(url + '/voddetail/' + id + '.html'); + const $ = load(html); + let vod = { + vod_id: id, + vod_name: $('h1:first').text().trim(), + vod_type: $('.myui-content__detail p:first a').text(), + vod_actor: $('.myui-content__detail p:nth-child(5)').text().replace('主演:',''), + vod_director: $('.myui-content__detail p:nth-child(6)').text().replace('导演:',''), + vod_pic: $('div.myui-content__thumb img:first').attr('data-original'), + vod_remarks :$('#rating:first span').text().replace(/\s{2,}/g, ' '), + vod_content: $('span.data').text().trim(), + }; + const playlist = _.map($('ul.sort-list > li > a'), (it) => { + return it.children[0].data + '$' + it.attribs.href.replace(/\/vodplay\/(.*).html/g, '$1'); + }); + vod.vod_play_from = key; + vod.vod_play_url = playlist.join('#'); + return JSON.stringify({ + list: [vod], + }); +} + +async function play(flag, id, flags) { + const link = url + '/vodplay/' + id + '.html'; + const html = await request(link); + const $ = load(html); + const js = JSON.parse($('script:contains(player_)').html().replace('var player_data=','')); + const playUrl = js.url.replace('index.m3u8','hls\/index.m3u8'); + return JSON.stringify({ + parse: 0, + url: playUrl, + }); +} + +async function search(wd, quick) { + let data = JSON.parse(await request(url + '/index.php/ajax/suggest?mid=1&wd=' + wd)).list; + let videos = []; + for (const vod of data) { + videos.push({ + vod_id: vod.id, + vod_name: vod.name, + vod_pic: vod.pic, + vod_remarks: '', + }); + } + return JSON.stringify({ + list: videos, + }); +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file diff --git a/js/ikanbot_open.js b/js/ikanbot_open.js new file mode 100644 index 00000000..c099cfa9 --- /dev/null +++ b/js/ikanbot_open.js @@ -0,0 +1,261 @@ +import { Crypto, load, _ } from './lib/cat.js'; + +let key = 'ikanbot'; +let url = 'https://www.ikanbot.com'; +let siteKey = ''; +let siteType = 0; + +const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'; + +async function request(reqUrl, agentSp) { + let res = await req(reqUrl, { + method: 'get', + headers: { + 'User-Agent': agentSp || UA, + 'referer': url + }, + }); + return res.content; +} + +// cfg = {skey: siteKey, ext: extend} +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; +} + +function getClass($) { + const nav = $('ul.nav-pills:eq(1) > li > a'); + let tags = { + key: 'tag', + name: '标签', + value: _.map(nav, (n) => { + return { n: n.children[0].data, v: n.attribs.href }; + }), + }; + tags['init'] = tags.value[0].v; + const title = $('title:first').text().split('-')[0].substring(2); + return { cls: { type_id: tags.value[0].v, type_name: title }, tags: [tags] }; +} + +async function home(filter) { + let classes = []; + let filterObj = {}; + for (const cate of ['/hot/index-movie-热门.html', '/hot/index-tv-热门.html']) { + const html = await request(url + cate); + const $ = load(html); + const { cls, tags } = getClass($); + classes.push(cls); + filterObj[cls.type_id] = tags; + } + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + const html = await request(url); + const $ = load(html); + const items = $('div.v-list a.item'); + var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); + let videos = _.map(items, (item) => { + const img = $(item).find('img:first')[0]; + return { + vod_id: item.attribs.href, + vod_name: img.attribs.alt, + vod_pic: jsBase + base64Encode(img.attribs['data-src']), + vod_remarks: '', + }; + }); + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0) pg = 1; + const link = url + (extend.tag || tid).replace('.html', pg > 1 ? `-p-${pg}.html` : '.html'); + const html = await request(link); + const $ = load(html); + const items = $('div.v-list a.item'); + var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); + let videos = _.map(items, (item) => { + const img = $(item).find('img:first')[0]; + return { + vod_id: item.attribs.href, + vod_name: img.attribs.alt, + vod_pic: jsBase + base64Encode(img.attribs['data-src']), + vod_remarks: '', + }; + }); + const hasMore = $('div.page-more > a:contains(下一页)').length > 0; + const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 24, + total: 24 * pgCount, + list: videos, + }); +} + +async function detail(id) { + const html = await request(url + id); + const $ = load(html); + var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); + const detail = $('div.detail'); + const remarks = $('span#line-tips').text(); + let vod = { + vod_id: id, + vod_pic: jsBase + base64Encode($('div.item-root > img')[0].attribs['data-src']), + vod_remarks: '', + vod_content: remarks || '', + vod_name: $(detail).find('h2').text().trim(), + vod_year: $(detail).find('h3:nth-child(3)').text(), + vod_area: $(detail).find('h3:nth-child(4)').text(), + vod_actor: $(detail).find('h3:nth-child(5)').text(), + }; + const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=2', { + headers: { + Referer: url, + 'User-Agent': UA, + }, + }); + const list = JSON.parse(res.content).data.list; + let playlist = {}; + let arr = [] + for (const l of list) { + const flagData = JSON.parse(l.resData); + for (const f of flagData) { + const from = f.flag; + const urls = f.url; + if (!from || !urls) continue; + if (playlist[from]) continue; + playlist[from] = urls; + } + } + for (var key in playlist) { + if ('kuaikan' == key) { + arr.push({ + flag: '快看', + url: playlist[key], + sort: 1 + }) + } else if ('bfzym3u8' == key) { + arr.push({ + flag: '暴风', + url: playlist[key], + sort: 2 + }) + } else if ('ffm3u8' == key) { + arr.push({ + flag: '非凡', + url: playlist[key], + sort: 3 + }) + } else if ('lzm3u8' == key) { + arr.push({ + flag: '量子', + url: playlist[key], + sort: 4 + }) + } else { + arr.push({ + flag: key, + url: playlist[key], + sort: 5 + }) + } + } + arr.sort((a, b) => a.sort - b.sort); + let playFrom = []; + let playList = []; + arr.map(val => { + playFrom.push(val.flag); + playList.push(val.url); + }) + vod.vod_play_from = playFrom.join("$$$"); + vod.vod_play_url = playList.join("$$$"); + return JSON.stringify({ + list: [vod], + }); +} + +function base64Encode(text) { + return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text)); +} + +function base64Decode(text) { + return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); +} + +async function proxy(segments, headers) { + let what = segments[0]; + let url = base64Decode(segments[1]); + if (what == 'img') { + var resp = await req(url, { + buffer: 2, + headers: { + Referer: url, + 'User-Agent': UA, + }, + }); + return JSON.stringify({ + code: resp.code, + buffer: 2, + content: resp.content, + headers: resp.headers, + }); + } + return JSON.stringify({ + code: 500, + content: '', + }); +} + +async function play(flag, id, flags) { + return JSON.stringify({ + parse: 0, + url: id, + }); +} + +async function search(wd, quick, pg) { + if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; + const html = await request(url + '/search?q=' + wd + '&p=' + pg); + const $ = load(html); + const items = $('div.media'); + var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); + let videos = _.map(items, (item) => { + const a = $(item).find('a:first')[0]; + const img = $(item).find('img:first')[0]; + const remarks = $($(item).find('span.label')[0]).text().trim(); + return { + vod_id: a.attribs.href, + vod_name: img.attribs.alt, + vod_pic: jsBase + base64Encode(img.attribs['data-src']), + vod_remarks: remarks || '', + }; + }); + const hasMore = $('div.page-more > a:contains(下一页)').length > 0; + const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + list: videos, + }); +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + proxy: proxy, + search: search, + }; +} diff --git a/js/kkys_open.js b/js/kkys_open.js new file mode 100644 index 00000000..6017353f --- /dev/null +++ b/js/kkys_open.js @@ -0,0 +1,364 @@ +import { Crypto, dayjs, jinja2, _ } from './lib/cat.js'; + +let key = 'kkys'; +let url = 'https://api1.baibaipei.com:8899'; +let device = {}; +let siteKey = ''; +let siteType = 0; + +async function request(reqUrl, postData, agentSp, get) { + let ts = dayjs().valueOf().toString(); + let rand = randStr(32); + let sign = Crypto.MD5('abcdexxxdd2daklmn25129_' + ts + '_' + rand) + .toString() + .toLowerCase(); + let headers = { + 'user-agent': agentSp || device.ua, + }; + if (reqUrl.includes('baibaipei')) { + headers['device-id'] = device.id; + headers['push-token'] = ''; + headers['sign'] = sign; + headers['time'] = ts; + headers['md5'] = rand; + headers['version'] = '2.1.0'; + headers['system-model'] = device.model; + headers['system-brand'] = device.brand; + headers['system-version'] = device.release; + } + let res = await req(reqUrl, { + method: get ? 'get' : 'post', + headers: headers, + data: postData || {}, + postType: get ? '' : 'form', + }); + + let content = res.content; + // console.log(content); + return content; +} + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + var deviceKey = 'device'; + var deviceInfo = await local.get(key, deviceKey); + if (deviceInfo.length > 0) { + try { + device = JSON.parse(deviceInfo); + } catch (error) {} + } + if (_.isEmpty(device)) { + device = randDevice(); + device.id = randStr(33).toLowerCase(); + device.ua = 'okhttp/4.1.0'; + await local.set(key, deviceKey, JSON.stringify(device)); + } +} + +async function home(filter) { + // await req('https://www.facebook.com', {}); + let data = JSON.parse(await request(url + '/api.php/Index/getTopVideoCategory')).data; + let classes = []; + let filterObj = {}; + for (const type of data) { + let typeName = type.nav_name; + if (typeName == '推荐') continue; + let typeId = type.nav_type_id.toString(); + classes.push({ + type_id: typeId, + type_name: typeName, + }); + if (!filter) continue; + try { + let filterAll = []; + let filterData = JSON.parse(await request(url + '/api.php/Video/getFilterType', { type: typeId })).data; + for (let key of Object.keys(filterData)) { + let itemValues = filterData[key]; + if (key === 'plot') key = 'class'; + let typeExtendName = ''; + switch (key) { + case 'class': + typeExtendName = '类型'; + break; + case 'area': + typeExtendName = '地区'; + break; + case 'lang': + typeExtendName = '语言'; + break; + case 'year': + typeExtendName = '年代'; + break; + case 'sort': + typeExtendName = '排序'; + break; + } + if (typeExtendName.length === 0) continue; + let newTypeExtend = { + key: key, + name: typeExtendName, + }; + let newTypeExtendKV = []; + for (let j = 0; j < itemValues.length; j++) { + const name = itemValues[j]; + let value = key === 'sort' ? j + '' : name === '全部' ? '0' : name; + newTypeExtendKV.push({ n: name, v: value }); + } + newTypeExtend['init'] = key === 'sort' ? '1' : newTypeExtendKV[0]['v']; + newTypeExtend.value = newTypeExtendKV; + filterAll.push(newTypeExtend); + } + if (!_.isEmpty(filterAll)) { + filterObj[typeId] = filterAll; + } + } catch (e) { + console.log(e); + } + } + // console.log(await homeVod()); + // console.log(classes); + // console.log(filterObj); + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + let jsonArray = JSON.parse(await request(url + '/api.php/Index/getHomePage', { type: 1, p: 1 })).data.video; + let videos = []; + for (const item of jsonArray) { + if (item.title.styleType !== 0) continue; + for (const vObj of item.list) { + videos.push({ + vod_id: vObj.vod_id, + vod_name: vObj.vod_name, + vod_pic: vObj.vod_pic, + vod_remarks: vObj.vod_remarks || vObj.vod_score || '', + }); + } + } + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + if (pg == 0) pg = 1; + let reqUrl = url + '/api.php/Video/getFilterVideoList'; + var formData = JSON.parse( + jinja2( + `{ + "type": "{{tid}}", + "p": "{{pg}}", + "area": "{{ext.area|default(0)}}", + "year": "{{ext.year|default(0)}}", + "sort": "{{ext.sort|default(0)}}", + "class": "{{ext.class|default(0)}}" + }`, + { ext: extend, tid: tid, pg: pg } + ) + ); + console.log(formData); + let data = JSON.parse(await request(reqUrl, formData)).data; + let videos = []; + for (const vod of data.data) { + videos.push({ + vod_id: vod.vod_id, + vod_name: vod.vod_name, + vod_pic: vod.vod_pic, + vod_remarks: vod.vod_remarks || vod.vod_score || '', + }); + } + return JSON.stringify({ + page: parseInt(data.current_page), + pagecount: parseInt(data.last_page), + limit: parseInt(data.per_page), + total: parseInt(data.total), + list: videos, + }); +} + +async function detail(id) { + let data = JSON.parse(await request(url + '/api.php/Video/getVideoInfo', { video_id: id })).data.video; + let vod = { + vod_id: data.vod_id, + vod_name: data.vod_name, + vod_pic: data.vod_pic, + type_name: data.vod_class, + vod_year: data.vod_year, + vod_area: data.vod_area, + vod_remarks: data.vod_remarks || '', + vod_actor: data.vod_actor, + vod_director: data.vod_director, + vod_content: data.vod_content.trim(), + }; + let playlist = {}; + for (const item of data.vod_play) { + let from = item.playerForm; + if (from === 'jp') continue; + if (from === 'xg') continue; + let urls = []; + for (const u of item.url) { + urls.push(formatPlayUrl(vod.vod_name, u.title) + '$' + u.play_url); + } + if (!playlist.hasOwnProperty(from) && urls.length > 0) { + playlist[from] = urls; + } + } + parse = data.parse || []; + vod.vod_play_from = _.keys(playlist).join('$$$'); + let urls = _.values(playlist); + let vod_play_url = []; + for (const urlist of urls) { + vod_play_url.push(urlist.join('#')); + } + vod.vod_play_url = vod_play_url.join('$$$'); + return JSON.stringify({ + list: [vod], + }); +} + +var parse = []; + +async function play(flag, id, flags) { + try { + if (id.indexOf('youku') >= 0 || id.indexOf('iqiyi') >= 0 || id.indexOf('v.qq.com') >= 0 || id.indexOf('pptv') >= 0 || id.indexOf('le.com') >= 0 || id.indexOf('1905.com') >= 0 || id.indexOf('mgtv') >= 0) { + if (parse.length > 0) { + for (let index = 0; index < parse.length; index++) { + try { + const p = parse[index]; + let res = await req(p + id, { + headers: { 'user-agent': 'okhttp/4.1.0' }, + }); + var result = jsonParse(id, JSON.parse(res.content)); + if (result.url) { + result.parse = 0; + return JSON.stringify(result); + } + } catch (error) {} + } + } + } + if (id.indexOf('jqq-') >= 0) { + var jqqHeader = await request(url + '/jqqheader.json', null, null, true); + var jqqHeaders = JSON.parse(jqqHeader); + var ids = id.split('-'); + var jxJqq = await req('https://api.juquanquanapp.com/app/drama/detail?dramaId=' + ids[1] + '&episodeSid=' + ids[2] + '&quality=LD', { headers: jqqHeaders }); + var jqqInfo = JSON.parse(jxJqq.content); + if (jqqInfo.data.playInfo.url) { + return JSON.stringify({ + parse: 0, + playUrl: '', + url: jqqInfo.data.playInfo.url, + }); + } + } + let res = await request(url + '/video.php', { url: id }); + var result = jsonParse(id, JSON.parse(res).data); + if (result.url) { + result.parse = 0; + return JSON.stringify(result); + } + return JSON.stringify({ + parse: 0, + playUrl: '', + url: id, + }); + } catch (e) { + console.log(e); + return JSON.stringify({ + parse: 0, + url: id, + }); + } +} + +async function search(wd, quick) { + let data = JSON.parse(await request(url + '/api.php/Search/getSearch', { key: wd, type_id: 0, p: 1 })).data; + let videos = []; + for (const vod of data.data) { + videos.push({ + vod_id: vod.vod_id, + vod_name: vod.vod_name, + vod_pic: vod.vod_pic, + vod_remarks: vod.vod_remarks || vod.vod_score || '', + }); + } + return JSON.stringify({ + list: videos, + }); +} + +const charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789'; +function randStr(len, withNum) { + var _str = ''; + let containsNum = withNum === undefined ? true : withNum; + for (var i = 0; i < len; i++) { + let idx = _.random(0, containsNum ? charStr.length - 1 : charStr.length - 11); + _str += charStr[idx]; + } + return _str; +} + +function randDevice() { + return { + brand: 'Huawei', + model: 'HUAWEI Mate 20', + release: '10', + buildId: randStr(3, false).toUpperCase() + _.random(11, 99) + randStr(1, false).toUpperCase(), + }; +} + +function formatPlayUrl(src, name) { + return name + .trim() + .replaceAll(src, '') + .replace(/<|>|《|》/g, '') + .replace(/\$|#/g, ' ') + .trim(); +} + +function jsonParse(input, json) { + try { + let url = json.url ?? ''; + if (url.startsWith('//')) { + url = 'https:' + url; + } + if (!url.startsWith('http')) { + return {}; + } + let headers = json['headers'] || {}; + let ua = (json['user-agent'] || '').trim(); + if (ua.length > 0) { + headers['User-Agent'] = ua; + } + let referer = (json['referer'] || '').trim(); + if (referer.length > 0) { + headers['Referer'] = referer; + } + _.keys(headers).forEach((hk) => { + if (!headers[hk]) delete headers[hk]; + }); + return { + header: headers, + url: url, + }; + } catch (error) { + console.log(error); + } + return {}; +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file diff --git a/js/kunyu77_open.js b/js/kunyu77_open.js new file mode 100644 index 00000000..a7af1d7d --- /dev/null +++ b/js/kunyu77_open.js @@ -0,0 +1,346 @@ +import { Crypto, dayjs, jinja2, Uri, _ } from './lib/cat.js'; + +let key = 'kunyu77'; +let url = 'http://api.tyun77.cn'; +let device = {}; +let timeOffset = 0; +let siteKey = ''; +let siteType = 0; + +async function request(reqUrl, agentSp) { + let sj = dayjs().unix() - timeOffset; + let uri = new Uri(reqUrl); + uri.addQueryParam('pcode', '010110005'); + uri.addQueryParam('version', '2.1.6'); + uri.addQueryParam('devid', device.id); + uri.addQueryParam('package', 'com.sevenVideo.app.android'); + uri.addQueryParam('sys', 'android'); + uri.addQueryParam('sysver', device.release); + uri.addQueryParam('brand', device.brand); + uri.addQueryParam('model', device.model.replaceAll(' ', '_')); + uri.addQueryParam('sj', sj); + let keys = []; + for (var i = 0; i < uri.queryPairs.length; i++) { + keys.push(uri.queryPairs[i][0]); + } + keys = _.sortBy(keys, function (name) { + return name; + }); + let tkSrc = uri.path(); + for (let k of keys) { + let v = uri.getQueryParamValue(k); + v = encodeURIComponent(v); + tkSrc += v; + } + tkSrc += sj; + tkSrc += 'XSpeUFjJ'; + console.log(tkSrc); + let tk = Crypto.MD5(tkSrc).toString().toLowerCase(); + console.log(tk); + let header = { + 'user-agent': agentSp || 'okhttp/3.12.0', + t: sj, + TK: tk, + }; + let res = await req(uri.toString(), { + headers: header, + }); + + let serverTime = res.headers.date; // dart all response header key is lowercase + let content = res.content; + let serverTimeS = dayjs(serverTime).unix(); + timeOffset = dayjs().unix() - serverTimeS; + // console.log(content); + return content; +} + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + var deviceKey = 'device'; + var deviceInfo = await local.get(key, deviceKey); + if (deviceInfo.length > 0) { + try { + device = JSON.parse(deviceInfo); + } catch (error) {} + } + if (_.isEmpty(device)) { + device = randDevice(); + device.id = randStr(32).toLowerCase(); + device.ua = 'Dalvik/2.1.0 (Linux; U; Android ' + device.release + '; ' + device.model + ' Build/' + device.buildId + ')'; + await local.set(key, deviceKey, JSON.stringify(device)); + } + + await request(url + '/api.php/provide/getDomain'); + await request(url + '/api.php/provide/config'); + await request(url + '/api.php/provide/checkUpgrade'); + await request(url + '/api.php/provide/channel'); +} + +async function home(filter) { + let data = JSON.parse(await request(url + '/api.php/provide/filter')).data; + let classes = []; + let filterObj = {}; + let filterAll = []; + for (const key in data) { + classes.push({ + type_id: key, + type_name: data[key][0].cat, + }); + if (!filter) continue; + try { + let typeId = key.toString(); + if (_.isEmpty(filterAll)) { + let filterData = JSON.parse(await request(url + '/api.php/provide/searchFilter?type_id=0&pagenum=1&pagesize=1')).data.conditions; + // console.log(filterData); + // 年份 + let year = { + key: 'year', + name: '年份', + init: '', + }; + let yearValues = []; + yearValues.push({ n: '全部', v: '' }); + filterData.y.forEach((e) => { + yearValues.push({ n: e.name, v: e.value }); + }); + year['value'] = yearValues; + // 地区 + let area = { + key: 'area', + name: '地区', + init: '', + }; + let areaValues = []; + areaValues.push({ n: '全部', v: '' }); + filterData.a.forEach((e) => { + areaValues.push({ n: e.name, v: e.value }); + }); + area['value'] = areaValues; + // 类型 + let type = { + key: 'category', + name: '类型', + init: '', + }; + let typeValues = []; + typeValues.push({ n: '全部', v: '' }); + filterData.scat.forEach((e) => { + typeValues.push({ n: e.name, v: e.value }); + }); + type['value'] = typeValues; + + filterAll.push(year, area, type); + } + if (!_.isEmpty(filterAll)) { + filterObj[typeId] = filterAll; + } + } catch (e) { + console.log(e); + } + } + // console.log(classes); + // console.log(filterObj); + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + let data = JSON.parse(await request(url + '/api.php/provide/homeBlock?type_id=0')).data; + let blocks = data.blocks; + let videos = []; + for (const block of blocks) { + let name = block.block_name; + if (name.indexOf('热播') >= 0) continue; + let contents = block.contents; + for (const content of contents) { + videos.push({ + vod_id: content.id, + vod_name: content.title, + vod_pic: content.videoCover, + vod_remarks: content.msg, + }); + } + } + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + let reqUrl = url + '/api.php/provide/searchFilter?type_id=' + tid + '&pagenum=' + pg + '&pagesize=24&'; + reqUrl += jinja2('year={{ext.year}}&category={{ext.category}}&area={{ext.area}}', { ext: extend }); + let data = JSON.parse(await request(reqUrl)).data; + let videos = []; + for (const vod of data.result) { + videos.push({ + vod_id: vod.id, + vod_name: vod.title, + vod_pic: vod.videoCover, + vod_remarks: vod.msg, + }); + } + return JSON.stringify({ + page: parseInt(data.page), + pagecount: data.pagesize, + limit: 24, + total: data.total, + list: videos, + }); +} + +async function detail(id) { + let data = JSON.parse(await request(url + '/api.php/provide/videoDetail?ids=' + id)).data; + console.log(data); + let vod = { + vod_id: data.id, + vod_name: data.videoName, + vod_pic: data.videoCover, + type_name: data.subCategory, + vod_year: data.year, + vod_area: data.area, + vod_remarks: data.msg, + vod_actor: data.actor, + vod_director: data.director, + vod_content: data.brief.trim(), + }; + let episodes = JSON.parse(await request(url + '/api.php/provide/videoPlaylist?ids=' + id)).data.episodes; + let playlist = {}; + for (const episode of episodes) { + let playurls = episode.playurls; + for (const playurl of playurls) { + let from = playurl.playfrom; + let t = formatPlayUrl(vod.vod_name, playurl.title); + if (t.length == 0) t = playurl.title.trim(); + if (!playlist.hasOwnProperty(from)) { + playlist[from] = []; + } + playlist[from].push(t + '$' + playurl.playurl); + } + } + vod.vod_play_from = _.keys(playlist).join('$$$'); + let urls = _.values(playlist); + let vod_play_url = []; + for (const urlist of urls) { + vod_play_url.push(urlist.join('#')); + } + vod.vod_play_url = vod_play_url.join('$$$'); + return JSON.stringify({ + list: [vod], + }); +} + +async function play(flag, id, flags) { + try { + let data = JSON.parse(await request(url + '/api.php/provide/parserUrl?url=' + id + '&retryNum=0')).data; + let playHeader = data.playHeader; + let jxUrl = data.url; + let res = await req(jxUrl, { + headers: { + 'user-agent': 'okhttp/3.12.0', + }, + }); + let result = jsonParse(id, JSON.parse(res.content)); + result['parse'] = 0; + if (playHeader) { + result.header = _.merge(result.header, playHeader); + } + return JSON.stringify(result); + } catch (e) { + return JSON.stringify({ + parse: 0, + url: id, + }); + } +} + +async function search(wd, quick, pg) { + let page = pg || 1; + if (page == 0) page = 1; + let data = JSON.parse(await request(url + '/api.php/provide/searchVideo?searchName=' + wd + '&pg=' + page, 'okhttp/3.12.0')); + let videos = []; + for (const vod of data.data) { + videos.push({ + vod_id: vod.id, + vod_name: vod.videoName, + vod_pic: vod.videoCover, + vod_remarks: vod.msg, + }); + } + return JSON.stringify({ + page: page, + pagecount: data.pages, + list: videos, + }); +} + +const charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789'; +function randStr(len, withNum) { + var _str = ''; + let containsNum = withNum === undefined ? true : withNum; + for (var i = 0; i < len; i++) { + let idx = _.random(0, containsNum ? charStr.length - 1 : charStr.length - 11); + _str += charStr[idx]; + } + return _str; +} + +function randDevice() { + return { + brand: 'Huawei', + model: 'HUAWEI Mate 20', + release: '10', + buildId: randStr(3, false).toUpperCase() + _.random(11, 99) + randStr(1, false).toUpperCase(), + }; +} + +function formatPlayUrl(src, name) { + return name + .trim() + .replaceAll(src, '') + .replace(/<|>|《|》/g, '') + .replace(/\$|#/g, ' ') + .trim(); +} + +function jsonParse(input, json) { + try { + let url = json.url ?? ''; + if (url.startsWith('//')) { + url = 'https:' + url; + } + if (!url.startsWith('http')) { + return {}; + } + let headers = json['headers'] || {}; + let ua = (json['user-agent'] || '').trim(); + if (ua.length > 0) { + headers['User-Agent'] = ua; + } + let referer = (json['referer'] || '').trim(); + if (referer.length > 0) { + headers['Referer'] = referer; + } + return { + header: headers, + url: url, + }; + } catch (error) { + console.log(error); + } + return {}; +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} diff --git a/js/libvio_open.js b/js/libvio_open.js new file mode 100644 index 00000000..ad1db416 --- /dev/null +++ b/js/libvio_open.js @@ -0,0 +1,195 @@ +// 自动从 地址发布页 获取&跳转url地址 +import { load, _ } from './lib/cat.js'; + +var key = 'libvio'; +var HOST = 'https://libvio.app'; // 地址发布页 +var host = ''; +var siteKey = ''; +var siteType = 0; + +const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36'; + +async function request(reqUrl, agentSp) { + var res = await req(reqUrl, { + method: 'get', + headers: { + 'User-Agent': agentSp || MOBILE_UA, + 'Referer': host + }, + }); + return res.content; +} + +// cfg = {skey: siteKey, ext: extend} +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + var html = await request(HOST); + var $ = load(html); + host = $('div.content-top > ul > li').find('a:first')[0].attribs.href; + // console.debug('libvio跳转地址 =====>' + urls); // js_debug.log +} + +async function home(filter) { + var html = await request(host); + var $ = load(html); + var class_parse = $('ul.stui-header__menu > li > a[href*=type]'); + var classes = []; + classes = _.map(class_parse, (cls) => { + var typeId = cls.attribs['href']; + typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html',''); + return { + type_id: typeId, + type_name: cls.children[0].data, + }; + }); + var filterObj = { + 1:[{key:'area',name:'地区',value:[{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'法国',v:'法国'},{n:'英国',v:'英国'},{n:'日本',v:'日本'},{n:'韩国',v:'韩国'},{n:'德国',v:'德国'},{n:'泰国',v:'泰国'},{n:'印度',v:'印度'},{n:'意大利',v:'意大利'},{n:'西班牙',v:'西班牙'},{n:'加拿大',v:'加拿大'},{n:'其他',v:'其他'}]},{key:'year',name:'年份',value:[{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'}]},{key:'lang',name:'语言',value:[{n:'全部',v:''},{n:'国语',v:'国语'},{n:'英语',v:'英语'},{n:'粤语',v:'粤语'},{n:'闽南语',v:'闽南语'},{n:'韩语',v:'韩语'},{n:'日语',v:'日语'},{n:'法语',v:'法语'},{n:'德语',v:'德语'},{n:'其它',v:'其它'}]},{key:'by',name:'排序',value:[{n:'时间',v:'time'},{n:'人气',v:'hits'},{n:'评分',v:'score'}]}], + 2:[{key:'area',name:'地区',value:[{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国台湾',v:'中国台湾'},{n:'中国香港',v:'中国香港'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'美国',v:'美国'},{n:'泰国',v:'泰国'},{n:'英国',v:'英国'},{n:'新加坡',v:'新加坡'},{n:'其他',v:'其他'}]},{key:'year',name:'年份',value:[{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'}]},{key:'lang',name:'语言',value:[{n:'全部',v:''},{n:'国语',v:'国语'},{n:'英语',v:'英语'},{n:'粤语',v:'粤语'},{n:'闽南语',v:'闽南语'},{n:'韩语',v:'韩语'},{n:'日语',v:'日语'},{n:'其它',v:'其它'}]},{key:'by',name:'排序',value:[{n:'时间',v:'time'},{n:'人气',v:'hits'},{n:'评分',v:'score'}]}], + 4:[{key:'area',name:'地区',value:[{n:'全部',v:''},{n:'中国',v:'中国'},{n:'日本',v:'日本'},{n:'欧美',v:'欧美'},{n:'其他',v:'其他'}]},{key:'year',name:'年份',value:[{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'}]},{key:'lang',name:'语言',value:[{n:'全部',v:''},{n:'国语',v:'国语'},{n:'英语',v:'英语'},{n:'粤语',v:'粤语'},{n:'闽南语',v:'闽南语'},{n:'韩语',v:'韩语'},{n:'日语',v:'日语'},{n:'其它',v:'其它'}]},{key:'by',name:'排序',value:[{n:'时间',v:'time'},{n:'人气',v:'hits'},{n:'评分',v:'score'}]}], + 27:[{key:'by',name:'排序',value:[{n:'时间',v:'time'},{n:'人气',v:'hits'},{n:'评分',v:'score'}]}], + 15:[{key:'area',name:'地区',value:[{n:'全部',v:''},{n:'日本',v:'日本'},{n:'韩国',v:'韩国'}]},{key:'year',name:'年份',value:[{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'}]},{key:'lang',name:'语言',value:[{n:'全部',v:''},{n:'国语',v:'国语'},{n:'英语',v:'英语'},{n:'粤语',v:'粤语'},{n:'闽南语',v:'闽南语'},{n:'韩语',v:'韩语'},{n:'日语',v:'日语'},{n:'其它',v:'其它'}]},{key:'by',name:'排序',value:[{n:'时间',v:'time'},{n:'人气',v:'hits'},{n:'评分',v:'score'}]}], + 16:[{key:'area',name:'地区',value:[{n:'全部',v:''},{n:'美国',v:'美国'},{n:'英国',v:'英国'},{n:'德国',v:'德国'},{n:'加拿大',v:'加拿大'},{n:'其他',v:'其他'}]},{key:'year',name:'年份',value:[{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'}]},{key:'lang',name:'语言',value:[{n:'全部',v:''},{n:'国语',v:'国语'},{n:'英语',v:'英语'},{n:'粤语',v:'粤语'},{n:'闽南语',v:'闽南语'},{n:'韩语',v:'韩语'},{n:'日语',v:'日语'},{n:'其它',v:'其它'}]},{key:'by',name:'排序',value:[{n:'时间',v:'time'},{n:'人气',v:'hits'},{n:'评分',v:'score'}]}] + }; + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + var link = host + '/show/1--hits---------.html'; + var html = await request(link); + var $ = load(html); + var items = $('ul.stui-vodlist > li'); + let videos = _.map(items, (item) => { + var a = $(item).find('a:first')[0]; + var remarks = $($(item).find('span.pic-text')[0]).text().trim(); + return { + vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'), + vod_name: a.attribs.title, + vod_pic: a.attribs['data-original'], + vod_remarks: remarks || '', + }; + }); + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; + var link = host + '/show/' + tid + '-' + (extend.area || '') + '-' + (extend.by || 'time') + '--' + (extend.lang || '') + '----' + pg + '---' + (extend.year || '') + '.html'; + var html = await request(link); + var $ = load(html); + var items = $('ul.stui-vodlist > li'); + let videos = _.map(items, (item) => { + var a = $(item).find('a:first')[0]; + var remarks = $($(item).find('span.pic-text')[0]).text().trim(); + return { + vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'), + vod_name: a.attribs.title, + vod_pic: a.attribs['data-original'], + vod_remarks: remarks || '', + }; + }); + var hasMore = $('ul.stui-page__item > li > a:contains(下一页)').length > 0; + var pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 24, + total: 24 * pgCount, + list: videos, + }); +} + +async function detail(id) { + var html = await request(host + '/detail/' + id + '.html'); + var $ = load(html); + var vod = { + vod_id: id, + vod_name: $('h1:first').text().trim(), + vod_type: $('.stui-content__detail p:first a').text(), + vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:',''), + vod_pic: $('.stui-content__thumb img:first').attr('data-original'), + vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '', + vod_content: $('span.detail-content').text().trim(), + }; + var playMap = {}; + var tabs = $('div.stui-pannel__head > h3[class*=iconfont]'); + var playlists = $('ul.stui-content__playlist'); + _.each(tabs, (tab, i) => { + var from = tab.children[0].data; + var list = playlists[i]; + list = $(list).find('a'); + _.each(list, (it) => { + var title = it.children[0].data; + var playUrl = it.attribs.href; + if (title.length == 0) title = it.children[0].data.trim(); + if (!playMap.hasOwnProperty(from)) { + playMap[from] = []; + } + playMap[from].push( title + '$' + playUrl); + }); + }); + vod.vod_play_from = _.keys(playMap).join('$$$'); + var urls = _.values(playMap); + var vod_play_url = _.map(urls, (urlist) => { + return urlist.join('#'); + }); + vod.vod_play_url = vod_play_url.join('$$$'); + return JSON.stringify({ + list: [vod], + }); +} + +async function play(flag, id, flags) { + var html = await request(host + id); + html = html.match(/r player_.*?=(.*?)' + playUrl); // js_debug.log + return JSON.stringify({ + parse: 0, + url: playUrl, + }); +} + +async function search(wd, quick) { + var data = JSON.parse(await request(host + '/index.php/ajax/suggest?mid=1&wd=' + wd + '&limit=50')).list; + var videos = []; + for (const vod of data) { + videos.push({ + vod_id: vod.id, + vod_name: vod.name, + vod_pic: vod.pic, + vod_remarks: '', + }); + } + return JSON.stringify({ + list: videos, + limit: 50, + }); +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file diff --git a/js/mybili_open.js b/js/mybili_open.js new file mode 100644 index 00000000..0aacbcb1 --- /dev/null +++ b/js/mybili_open.js @@ -0,0 +1,265 @@ +// 一级&搜索页 直向改横向 --> land:1, ratio:1.78, +import { _ } from "assets://js/lib/cat.js"; +let key = '我的哔哩'; +let HOST = 'https://api.bilibili.com'; +let siteKey = ''; +let siteType = 0; +const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.361"; +// let cookie = "DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"; // 可更换成自己的cookie +let cookie = "https://ghproxy.net/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/txt/cookie.txt"; // 可更换成自己的cookie + +async function request(reqUrl) { + const res = await req(reqUrl, { + headers: getMb(), + }); + return res.content; +} + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + if (cookie.startsWith('http')) cookie = await request(cookie); + // console.debug('我的哔哩 cookie =====>' + cookie); // js_debug.log +} + +async function home(filter) { + let classes = [{"type_id":"经典无损音乐合集","type_name":"经典无损音乐合集"},{"type_id":"帕梅拉","type_name":"帕梅拉"},{"type_id":"太极拳","type_name":"太极拳"},{"type_id":"健身","type_name":"健身"},{"type_id":"舞蹈","type_name":"舞蹈"},{"type_id":"音乐","type_name":"音乐"},{"type_id":"歌曲","type_name":"歌曲"},{"type_id":"MV4K","type_name":"MV"},{"type_id":"演唱会4K","type_name":"演唱会"},{"type_id":"白噪音4K","type_name":"白噪音"},{"type_id":"知名UP主","type_name":"知名UP主"},{"type_id":"说案","type_name":"说案"},{"type_id":"解说","type_name":"解说"},{"type_id":"演讲","type_name":"演讲"},{"type_id":"时事","type_name":"时事"},{"type_id":"探索发现超清","type_name":"探索发现"},{"type_id":"纪录片超清","type_name":"纪录片"},{"type_id":"平面设计教学","type_name":"平面设计教学"},{"type_id":"软件教程","type_name":"软件教程"},{"type_id":"实用教程","type_name":"实用教程"},{"type_id":"旅游","type_name":"旅游"},{"type_id":"风景4K","type_name":"风景"},{"type_id":"食谱","type_name":"食谱"},{"type_id":"美食超清","type_name":"美食"},{"type_id":"搞笑","type_name":"搞笑"},{"type_id":"球星","type_name":"球星"},{"type_id":"动物世界超清","type_name":"动物世界"},{"type_id":"相声小品","type_name":"相声小品"},{"type_id":"戏曲","type_name":"戏曲"},{"type_id":"儿童","type_name":"儿童"},{"type_id":"小姐姐4K","type_name":"小姐姐"},{"type_id":"热门","type_name":"热门"},{"type_id":"旅行探险","type_name":"旅行探险"}]; + let filterObj = { + 经典无损音乐合集:[{key:'tid',name:'分类','value':[{n:'全部',v:'经典无损音乐合集'},{n:'粤语',v:'粤语歌曲超清'},{n:'热榜',v:'2022年热们歌曲'},{n:'经典',v:'经典老歌'},{n:'古风',v:'古风歌曲'},{n:'闽南',v:'闽南语歌曲'},{n:'舞曲',v:'DJ歌曲'},{n:'翻唱',v:'网红翻唱歌曲'},{n:'音乐',v:'音乐 4k'},{n:'阿黛尔',v:'阿黛尔演唱会超清超清'},{n:'Blackpink',v:'blackpink演唱会超清'},{n:'Beyond',v:'beyond演唱会超清'},{n:'坂井泉水',v:'坂井泉水演唱会超清'},{n:'宝丽金',v:'宝丽金演唱会超清'},{n:'布兰妮',v:'布兰妮演唱会超清'},{n:'陈瑞',v:'陈瑞演唱会超清'},{n:'陈奕迅',v:'陈奕迅演唱会超清'},{n:'崔健',v:'崔健演唱会超清'},{n:'Coldplay',v:'coldplay演唱会超清'},{n:'陈慧娴',v:'陈慧娴演唱会超清'},{n:'陈百强',v:'陈百强演唱会超清'},{n:'陈淑桦',v:'陈淑桦演唱会超清'},{n:'陈慧琳',v:'陈慧琳演唱会超清'},{n:'邓丽君',v:'邓丽君演唱会超清'},{n:'邓紫棋',v:'邓紫棋演唱会超清'},{n:'刀郎',v:'刀郎演唱会超清'},{n:'达明一派',v:'刘以达歌曲'},{n:'费玉清',v:'费玉清演唱会超清'},{n:'谷村新司',v:'谷村新司演唱会超清'},{n:'郭富城',v:'郭富城演唱会超清'},{n:'邰正宵',v:'邰正宵演唱会超清'},{n:'关淑怡',v:'关淑怡演唱会超清'},{n:'黄凯芹',v:'黄凯芹演唱会超清'},{n:'黑豹乐队',v:'H黑豹乐队'},{n:'降央卓玛',v:'降央卓玛演唱会超清'},{n:'江慧',v:'江慧歌曲'},{n:'吉永小百合',v:'吉永小百合歌曲'},{n:'金庸',v:'金庸影视歌曲'},{n:'刘德华',v:'刘德华演唱会超清'},{n:'Lady Gaga',v:'Lady Gaga演唱会超清'},{n:'龙飘飘',v:'龙飘飘演唱会超清'},{n:'罗百吉',v:'罗百吉演唱会超清'},{n:'罗大佑',v:'罗大佑演唱会超清'},{n:'林志炫',v:'林志炫演唱会超清'},{n:'林忆莲',v:'林忆莲演唱会超清'},{n:'李知恩',v:'李知恩演唱会超清'},{n:'梁静茹',v:'梁静茹演唱会超清'},{n:'冷漠',v:'冷漠演唱会超清'},{n:'李克勤',v:'李克勤演唱会超清'},{n:'林子祥',v:'林子祥演唱会超清'},{n:'黎明',v:'黎明演唱会超清'},{n:'刘若英',v:'刘若英演唱会超清'},{n:'McHotdog',v:'MC Hotdog演唱会超清'},{n:'莫文蔚',v:'莫文蔚演唱会超清'},{n:'孟庭苇',v:'孟庭苇演唱会超清'},{n:'麦当娜',v:'麦当娜演唱会超清'},{n:'迈克杰克逊',v:'迈克杰克逊演唱会超清'},{n:'雅尼紫禁城',v:'雅尼紫禁城演唱会超清'},{n:'潘越云',v:'潘越云演唱会超清'},{n:'潘美辰',v:'潘美辰演唱会超清'},{n:'齐秦',v:'齐秦演唱会超清'},{n:'祁美云',v:'祁美云演唱会超清'},{n:'任贤齐',v:'任贤齐演唱会超清'},{n:'苏慧伦',v:'苏慧伦演唱会超清'},{n:'唐朝乐队',v:'唐朝乐队'},{n:'童安格',v:'童安格演唱会超清'},{n:'TFBOYS',v:'TFBOYS演唱会超清'},{n:'太极乐队',v:'太极乐队演唱会超清'},{n:'唐朝摇滚',v:'唐朝摇滚演唱会超清'},{n:'谭咏麟',v:'谭咏麟演唱会超清'},{n:'王琪',v:'王琪歌曲'},{n:'伍珂玥',v:'伍珂玥演唱会超清'},{n:'王杰',v:'王杰演唱会超清'},{n:'伍佰',v:'伍佰演唱会超清'},{n:'温兆伦',v:'温兆伦演唱会超清'},{n:'王菲',v:'王菲演唱会超清'},{n:'熊天平',v:'熊天平演唱会超清'},{n:'徐小凤',v:'徐小凤演唱会超清'},{n:'席琳迪翁',v:'席琳迪翁演唱会超清'},{n:'许嵩',v:'黄许嵩演唱会超清'},{n:'许美静',v:'许美静演唱会超清'},{n:'许冠杰',v:'许冠杰演唱会超清'},{n:'小虎队',v:'小虎队演唱会超清'},{n:'许巍',v:'许巍演唱会超清'},{n:'叶启田',v:'叶启田演唱会超清'},{n:'叶玉卿',v:'叶玉卿演唱会超清'},{n:'杨千嬅',v:'杨千嬅演唱会超清'},{n:'左麟右李',v:'左麟右李演唱会超清'},{n:'赵传',v:'赵传演唱会超清'},{n:'周华健',v:'周华健演唱会超清'},{n:'周启生',v:'周启生演唱会超清'},{n:'张信哲',v:'张信哲演唱会超清'},{n:'周慧敏',v:'周慧敏演唱会超清'},{n:'张碧晨',v:'张碧晨演唱会超清'},{n:'中岛美雪',v:'中岛美雪演唱会超清'},{n:'张学友',v:'张学友演唱会超清'},{n:'猪哥亮',v:'猪哥亮歌曲'},{n:'周杰伦',v:'周杰伦演唱会超清'},{n:'周深',v:'周深演唱会超清'},{n:'张蔷',v:'张蔷演唱会超清'},{n:'张帝',v:'张帝演唱会超清'},{n:'张国荣',v:'张国荣演唱会超清'},{n:'郑钧',v:'郑钧演唱会超清'},{n:'张楚',v:'张楚演唱会超清'},{n:'张真',v:'张真演唱会超清'},{n:'赵传',v:'赵传演唱会超清'},{n:'周传雄',v:'周传雄演唱会超清'}]}], + 帕梅拉:[{key:'tid',name:'分类','value':[{n:'全部',v:'帕梅拉'},{n:'瘦腿',v:'帕梅拉瘦腿'},{n:'腹部',v:'帕梅拉腹部'},{n:'手臂',v:'帕梅拉手臂'},{n:'热身',v:'帕梅拉热身'},{n:'舞蹈',v:'帕梅拉舞蹈'},{n:'燃脂',v:'帕梅拉燃脂'},{n:'有氧',v:'帕梅拉有氧'},{n:'拉伸',v:'帕梅拉拉伸'}]}], + 太极拳:[{key:'tid',name:'分类','value':[{n:'全部',v:'太极拳'},{n:'邱慧芳',v:'太极拳邱慧芳'},{n:'陈氏',v:'太极拳陈氏'},{n:'武当',v:'太极拳武当'},{n:'二十四式',v:'太极拳二十四式'},{n:'三十六式',v:'太极拳三十六式'},{n:'五禽戏',v:'五禽戏'},{n:'八段锦',v:'八段锦'}]}], + 健身:[{key:'tid',name:'分类','value':[{n:'全部',v:'健身'},{n:'瘦腿',v:'健身瘦腿'},{n:'腹部',v:'健身腹部'},{n:'手臂',v:'健身手臂'},{n:'热身',v:'健身热身'},{n:'燃脂',v:'健身燃脂'},{n:'有氧',v:'健身有氧'},{n:'拉伸',v:'健身拉伸'},{n:'军体拳第一套',v:'军体拳第一套'},{n:'军体拳第二套',v:'军体拳第二套'},{n:'军体拳第三套',v:'军体拳第三套'},{n:'帕梅拉',v:'帕梅拉'},{n:'广场舞',v:'广场舞'},{n:'瑜伽',v:'瑜伽'},{n:'冥想',v:'冥想'}]}], + 舞蹈:[{key:'tid',name:'分类','value':[{n:'全部',v:'舞蹈'},{n:'古典舞',v:'古典舞'},{n:'芭蕾舞',v:'芭蕾舞'},{n:'民族舞',v:'民族舞'},{n:'现代舞',v:'现代舞'},{n:'踢踏舞',v:'踢踏舞'},{n:'爵士舞',v:'爵士舞'},{n:'拉丁舞',v:'拉丁舞'},{n:'摩登舞',v:'摩登舞'},{n:'街舞',v:'街舞'},{n:'广场舞',v:'广场舞'},{n:'宅舞',v:'宅舞'},{n:'肚皮舞',v:'肚皮舞'},{n:'钢管舞',v:'钢管舞'},{n:'迪斯科',v:'迪斯科'},{n:'劲舞',v:'热舞劲舞'},{n:'独舞',v:'独舞'},{n:'双人舞',v:'双人舞'},{n:'三人舞',v:'三人舞'},{n:'群舞',v:'群舞'},{n:'组舞',v:'组舞'},{n:'舞剧',v:'舞剧'},{n:'电影歌舞',v:'电影歌舞'},{n:'国风舞蹈',v:'国风舞蹈'},{n:'河卫国风',v:'河南卫视国风'}]}], + 歌曲:[{key:'tid',name:'分类','value':[{n:'全部',v:'歌曲超清'},{n:'歌曲合集',v:'经典无损音乐合集'},{n:'歌曲热榜',v:'2022年歌曲排行榜'},{n:'香港歌曲',v:'香港歌曲'},{n:'台湾歌曲',v:'台湾歌曲'},{n:'内地歌曲',v:'内地歌曲'},{n:'粤语歌曲',v:'粤语歌曲'},{n:'闽南歌曲',v:'闽南语歌曲'},{n:'英文歌曲',v:'英文歌曲'},{n:'日文歌曲',v:'日文歌曲'},{n:'印度歌曲',v:'印度歌曲'},{n:'韩国歌曲',v:'韩国歌曲'},{n:'小语种歌曲',v:'小语种歌曲'},{n:'经典老歌',v:'经典老歌'},{n:'抖音热歌',v:'抖音热歌'},{n:'网红翻唱',v:'网红翻唱'},{n:'劲歌',v:'劲歌'},{n:'慢歌',v:'慢歌'},{n:'古风',v:'古风歌曲'},{n:'舞曲',v:'DJ歌曲'},{n:'欢快歌曲',v:'欢快歌曲'},{n:'伤感歌曲',v:'伤感歌曲'},{n:'70年代歌曲',v:'70年代歌曲'},{n:'80年代歌曲',v:'80年代歌曲'},{n:'90年代歌曲',v:'90年代歌曲'},{n:'00年代歌曲',v:'00年代歌曲'},{n:'10年代歌曲',v:'10年代歌曲'},{n:'2020年歌曲',v:'2020年歌曲'},{n:'2021年歌曲',v:'2021年歌曲'},{n:'2022年歌曲',v:'2022年歌曲'},{n:'经典儿歌',v:'经典儿歌'},{n:'大合唱',v:'大合唱'},{n:'音乐汇',v:'音乐汇'},{n:'美声歌曲',v:'美声歌曲'},{n:'通俗歌曲',v:'通俗歌曲'},{n:'民族歌曲',v:'民族歌曲'}]}], + 音乐:[{key:'tid',name:'分类','value':[{n:'全部',v:'音乐4K'},{n:'钢琴',v:'钢琴曲'},{n:'小提琴',v:'小提音乐'},{n:'手风琴',v:'手风音乐'},{n:'二胡',v:'二胡音乐'},{n:'古筝',v:'古筝音乐'},{n:'笛子',v:'笛子音乐'},{n:'琵琶',v:'琵琶音乐'},{n:'古琴',v:'古琴音乐'},{n:'编钟',v:'编钟音乐'},{n:'协奏曲',v:'协奏曲'},{n:'中国古风音乐',v:'中国古风音乐'},{n:'背景音乐',v:'背景音乐'},{n:'助眠音乐',v:'助眠音乐'},{n:'胎教音乐',v:'胎教音乐'},{n:'芭蕾舞曲',v:'芭蕾舞曲'},{n:'拉丁舞曲',v:'拉丁舞曲'},{n:'爵士舞曲',v:'爵士舞曲'},{n:'摩登舞曲',v:'摩登舞曲'},{n:'DJ舞曲',v:'DJ舞曲'}]}], + MV4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'MV4K'},{n:'A阿杜',v:'阿杜MV4K'},{n:'A阿黛尔',v:'阿黛尔MV4K'},{n:'BBeyond',v:'BeyondMV4K'},{n:'BBy2',v:'By2MV4K'},{n:'BBIGBANG',v:'BIGBANGMV4K'},{n:'B布兰妮',v:'布兰妮MV4K'},{n:'C陈奕迅',v:'陈奕迅MV4K'},{n:'C蔡依林',v:'蔡依林MV4K'},{n:'C初音未来',v:'初音未来MV4K'},{n:'C蔡健雅',v:'蔡健雅MV4K'},{n:'C陈小春',v:'陈小春MV4K'},{n:'C草蜢',v:'草蜢MV4K'},{n:'C陈慧娴',v:'陈慧娴MV4K'},{n:'C崔健',v:'崔健MV4K'},{n:'C仓木麻衣',v:'仓木麻衣MV4K'},{n:'D戴荃',v:'戴荃MV4K'},{n:'D动力火车',v:'动力火车MV4K'},{n:'D邓丽君',v:'邓丽君MV4K'},{n:'D丁当',v:'丁当MV4K'},{n:'D刀郎',v:'刀郎MV4K'},{n:'D邓紫棋',v:'邓紫棋MV4K'},{n:'D戴佩妮',v:'戴佩妮MV4K'},{n:'D邓丽君',v:'邓丽君MV4K'},{n:'F飞儿乐队',v:'飞儿乐队MV4K'},{n:'F费玉清',v:'费玉清MV4K'},{n:'F费翔',v:'费翔MV4K'},{n:'F方大同',v:'方大同MV4K'},{n:'F房东的猫',v:'房东的猫MV4K'},{n:'F凤飞飞',v:'凤飞飞MV4K'},{n:'F凤凰传奇',v:'凤凰传奇MV4K'},{n:'G古风歌曲',v:'古风歌曲4K'},{n:'G国乐大典',v:'国乐大典4K'},{n:'G郭采洁',v:'郭采洁MV4K'},{n:'G光良',v:'光良MV4K'},{n:'G郭静',v:'郭静MV4K'},{n:'G郭富城',v:'郭富城MV4K'},{n:'H胡彦斌',v:'胡彦斌MV4K'},{n:'H胡夏',v:'胡夏MV4K'},{n:'H韩红',v:'韩红MV4K'},{n:'H黄品源',v:'黄品源MV4K'},{n:'H黄小琥',v:'黄小琥MV4K'},{n:'H花儿乐队',v:'花儿乐队MV4K'},{n:'H黄家强',v:'黄家强MV4K'},{n:'H后街男孩',v:'后街男孩MV4K'},{n:'J经典老歌',v:'经典老歌4K'},{n:'J贾斯丁比伯',v:'贾斯丁比伯MV4K'},{n:'J金池',v:'金池MV4K'},{n:'J金志文',v:'金志文MV4K'},{n:'J焦迈奇',v:'焦迈奇MV4K'},{n:'K筷子兄弟',v:'筷子兄弟MV4K'},{n:'L李玟',v:'李玟MV4K'},{n:'L林忆莲',v:'林忆莲MV4K'},{n:'L李克勤',v:'李克勤MV4K'},{n:'L刘宪华',v:'刘宪华MV4K'},{n:'L李圣杰',v:'李圣杰MV4K'},{n:'L林宥嘉',v:'林宥嘉MV4K'},{n:'L梁静茹',v:'梁静茹MV4K'},{n:'L李健',v:'李健MV4K'},{n:'L林俊杰',v:'林俊杰MV4K'},{n:'L李玉刚',v:'李玉刚MV4K'},{n:'L林志炫',v:'林志炫MV4K'},{n:'L李荣浩',v:'李荣浩MV4K'},{n:'L李宇春',v:'李宇春MV4K'},{n:'L洛天依',v:'洛天依MV4K'},{n:'L林子祥',v:'林子祥MV4K'},{n:'L李宗盛',v:'李宗盛MV4K'},{n:'L黎明',v:'黎明MV4K'},{n:'L刘德华',v:'刘德华MV4K'},{n:'L罗大佑',v:'罗大佑MV4K'},{n:'L林肯公园',v:'林肯公园MV4K'},{n:'LLadyGaga',v:'LadyGagaMV4K'},{n:'L旅行团乐队',v:'旅行团乐队MV4K'},{n:'M莫文蔚',v:'莫文蔚MV4K'},{n:'M毛不易',v:'毛不易MV4K'},{n:'M梅艳芳',v:'梅艳芳MV4K'},{n:'M迈克尔杰克逊',v:'迈克尔杰克逊MV4K'},{n:'N南拳妈妈',v:'南拳妈妈MV4K'},{n:'P朴树',v:'朴树MV4K'},{n:'Q齐秦',v:'齐秦MV4K'},{n:'Q青鸟飞鱼',v:'青鸟飞鱼MV4K'},{n:'R容祖儿',v:'容祖儿MV4K'},{n:'R热歌',v:'热歌MV4K'},{n:'R任贤齐',v:'任贤齐MV4K'},{n:'S水木年华',v:'水木年华MV4K'},{n:'S孙燕姿',v:'孙燕姿MV4K'},{n:'S苏打绿',v:'苏打绿MV4K'},{n:'SSHE',v:'SHEMV4K'},{n:'S孙楠',v:'孙楠MV4K'},{n:'T陶喆',v:'陶喆MV4K'},{n:'T谭咏麟',v:'谭咏麟MV4K'},{n:'T田馥甄',v:'田馥甄MV4K'},{n:'T谭维维',v:'谭维维MV4K'},{n:'T逃跑计划',v:'逃跑计划MV4K'},{n:'T田震',v:'田震MV4K'},{n:'T谭晶',v:'谭晶MV4K'},{n:'T屠洪刚',v:'屠洪刚MV4K'},{n:'T泰勒·斯威夫特',v:'泰勒·斯威夫特MV4K'},{n:'W王力宏',v:'王力宏MV4K'},{n:'W王杰',v:'王杰MV4K'},{n:'W吴克群',v:'吴克群MV4K'},{n:'W王心凌',v:'王心凌MV4K'},{n:'W汪峰',v:'汪峰MV4K'},{n:'W伍佰',v:'伍佰MV4K'},{n:'W王菲',v:'王菲MV4K'},{n:'W五月天',v:'五月天MV4K'},{n:'W汪苏泷',v:'汪苏泷MV4K'},{n:'X徐佳莹',v:'徐佳莹MV4K'},{n:'X弦子',v:'弦子MV4K'},{n:'X萧亚轩',v:'萧亚轩MV4K'},{n:'X许巍',v:'许巍MV4K'},{n:'X薛之谦',v:'薛之谦MV4K'},{n:'X许嵩',v:'许嵩MV4K'},{n:'X小虎队',v:'小虎队MV4K'},{n:'X萧敬腾',v:'萧敬腾MV4K'},{n:'X谢霆锋',v:'谢霆锋MV4K'},{n:'X徐小凤',v:'徐小凤MV4K'},{n:'X信乐队',v:'信乐队MV4K'},{n:'Y夜愿乐队',v:'夜愿乐队MV4K'},{n:'Y原创音乐',v:'原创音乐MV4K'},{n:'Y羽泉',v:'羽泉MV4K'},{n:'Y粤语',v:'粤语MV4K'},{n:'Y郁可唯',v:'郁可唯MV4K'},{n:'Y叶倩文',v:'叶倩文MV4K'},{n:'Y杨坤',v:'杨坤MV4K'},{n:'Y庾澄庆',v:'庾澄庆MV4K'},{n:'Y尤长靖',v:'尤长靖MV4K'},{n:'Y易烊千玺',v:'易烊千玺MV4K'},{n:'Y袁娅维',v:'袁娅维MV4K'},{n:'Y杨丞琳',v:'杨丞琳MV4K'},{n:'Y杨千嬅',v:'杨千嬅MV4K'},{n:'Y杨宗纬',v:'杨宗纬MV4K'},{n:'Z周杰伦',v:'周杰伦MV4K'},{n:'Z张学友',v:'张学友MV4K'},{n:'Z张信哲',v:'张信哲MV4K'},{n:'Z张宇',v:'张宇MV4K'},{n:'Z周华健',v:'周华健MV4K'},{n:'Z张韶涵',v:'张韶涵MV4K'},{n:'Z周深',v:'周深MV4K'},{n:'Z纵贯线',v:'纵贯线MV4K'},{n:'Z赵雷',v:'赵雷MV4K'},{n:'Z周传雄',v:'周传雄MV4K'},{n:'Z张国荣',v:'张国荣MV4K'},{n:'Z周慧敏',v:'周慧敏MV4K'},{n:'Z张惠妹',v:'张惠妹MV4K'},{n:'Z周笔畅',v:'周笔畅MV4K'},{n:'Z郑中基',v:'郑中基MV4K'},{n:'Z张艺兴',v:'张艺兴MV4K'},{n:'Z张震岳',v:'张震岳MV4K'},{n:'Z中国好声音',v:'中国好声音MV4K'},{n:'Z张雨生',v:'张雨生MV4K'},{n:'Z郑智化',v:'郑智化MV4K'},{n:'Z卓依婷',v:'卓依婷MV4K'},{n:'Z中岛美雪',v:'中岛美雪MV4K'}]}], + 演唱会4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'演唱会4K'},{n:'A阿杜',v:'阿杜演唱会4K'},{n:'A阿黛尔',v:'阿黛尔演唱会4K'},{n:'BBeyond',v:'Beyond演唱会4K'},{n:'BBy2',v:'By2演唱会4K'},{n:'BBIGBANG',v:'BIGBANG演唱会4K'},{n:'B布兰妮',v:'布兰妮演唱会4K'},{n:'B坂井泉水',v:'坂井泉水演唱会4K'},{n:'C陈奕迅',v:'陈奕迅演唱会4K'},{n:'C蔡依林',v:'蔡依林演唱会4K'},{n:'C初音未来',v:'初音未来演唱会4K'},{n:'C蔡健雅',v:'蔡健雅演唱会4K'},{n:'C陈小春',v:'陈小春演唱会4K'},{n:'C草蜢',v:'草蜢演唱会4K'},{n:'C陈慧娴',v:'陈慧娴演唱会4K'},{n:'C崔健',v:'崔健演唱会4K'},{n:'C仓木麻衣',v:'仓木麻衣演唱会4K'},{n:'D戴荃',v:'戴荃演唱会4K'},{n:'D动力火车',v:'动力火车演唱会4K'},{n:'D邓丽君',v:'邓丽君演唱会4K'},{n:'D丁当',v:'丁当演唱会4K'},{n:'D刀郎',v:'刀郎演唱会4K'},{n:'D邓紫棋',v:'邓紫棋演唱会4K'},{n:'D戴佩妮',v:'戴佩妮演唱会4K'},{n:'D邓丽君',v:'邓丽君演唱会4K'},{n:'F飞儿乐队',v:'飞儿乐队演唱会4K'},{n:'F费玉清',v:'费玉清演唱会4K'},{n:'F费翔',v:'费翔演唱会4K'},{n:'F方大同',v:'方大同演唱会4K'},{n:'F房东的猫',v:'房东的猫演唱会4K'},{n:'F凤飞飞',v:'凤飞飞演唱会4K'},{n:'F凤凰传奇',v:'凤凰传奇演唱会4K'},{n:'G郭采洁',v:'郭采洁演唱会4K'},{n:'G光良',v:'光良演唱会4K'},{n:'G郭静',v:'郭静演唱会4K'},{n:'G郭富城',v:'郭富城演唱会4K'},{n:'H胡彦斌',v:'胡彦斌演唱会4K'},{n:'H胡夏',v:'胡夏演唱会4K'},{n:'H韩红',v:'韩红演唱会4K'},{n:'H黄品源',v:'黄品源演唱会4K'},{n:'H黄小琥',v:'黄小琥演唱会4K'},{n:'H花儿乐队',v:'花儿乐队演唱会4K'},{n:'H黄家强',v:'黄家强演唱会4K'},{n:'H后街男孩',v:'后街男孩演唱会4K'},{n:'J经典老歌',v:'经典老歌演唱会4K'},{n:'J贾斯丁比伯',v:'贾斯丁比伯演唱会4K'},{n:'J金池',v:'金池演唱会4K'},{n:'J金志文',v:'金志文演唱会4K'},{n:'J焦迈奇',v:'焦迈奇演唱会4K'},{n:'K筷子兄弟',v:'筷子兄弟演唱会4K'},{n:'L李玟',v:'李玟演唱会4K'},{n:'L林忆莲',v:'林忆莲演唱会4K'},{n:'L李克勤',v:'李克勤演唱会4K'},{n:'L刘宪华',v:'刘宪华演唱会4K'},{n:'L李圣杰',v:'李圣杰演唱会4K'},{n:'L林宥嘉',v:'林宥嘉演唱会4K'},{n:'L梁静茹',v:'梁静茹演唱会4K'},{n:'L李健',v:'李健演唱会4K'},{n:'L林俊杰',v:'林俊杰演唱会4K'},{n:'L李玉刚',v:'李玉刚演唱会4K'},{n:'L林志炫',v:'林志炫演唱会4K'},{n:'L李荣浩',v:'李荣浩演唱会4K'},{n:'L李宇春',v:'李宇春演唱会4K'},{n:'L洛天依',v:'洛天依演唱会4K'},{n:'L林子祥',v:'林子祥演唱会4K'},{n:'L李宗盛',v:'李宗盛演唱会4K'},{n:'L黎明',v:'黎明演唱会4K'},{n:'L刘德华',v:'刘德华演唱会4K'},{n:'L罗大佑',v:'罗大佑演唱会4K'},{n:'L林肯公园',v:'林肯公园演唱会4K'},{n:'LLadyGaga',v:'LadyGaga演唱会4K'},{n:'L旅行团乐队',v:'旅行团乐队演唱会4K'},{n:'M莫文蔚',v:'莫文蔚演唱会4K'},{n:'M毛不易',v:'毛不易演唱会4K'},{n:'M梅艳芳',v:'梅艳芳演唱会4K'},{n:'M迈克尔杰克逊',v:'迈克尔杰克逊演唱会4K'},{n:'N南拳妈妈',v:'南拳妈妈演唱会4K'},{n:'P朴树',v:'朴树演唱会4K'},{n:'Q齐秦',v:'齐秦演唱会4K'},{n:'Q青鸟飞鱼',v:'青鸟飞鱼演唱会4K'},{n:'R容祖儿',v:'容祖儿演唱会4K'},{n:'R任贤齐',v:'任贤齐演唱会4K'},{n:'S水木年华',v:'水木年华演唱会4K'},{n:'S孙燕姿',v:'孙燕姿演唱会4K'},{n:'S苏打绿',v:'苏打绿演唱会4K'},{n:'SSHE',v:'SHE演唱会4K'},{n:'S孙楠',v:'孙楠演唱会4K'},{n:'T陶喆',v:'陶喆演唱会4K'},{n:'T谭咏麟',v:'谭咏麟演唱会4K'},{n:'T田馥甄',v:'田馥甄演唱会4K'},{n:'T谭维维',v:'谭维维演唱会4K'},{n:'T逃跑计划',v:'逃跑计划演唱会4K'},{n:'T田震',v:'田震演唱会4K'},{n:'T谭晶',v:'谭晶演唱会4K'},{n:'T屠洪刚',v:'屠洪刚演唱会4K'},{n:'T泰勒·斯威夫特',v:'泰勒·斯威夫特演唱会4K'},{n:'W王力宏',v:'王力宏演唱会4K'},{n:'W王杰',v:'王杰演唱会4K'},{n:'W吴克群',v:'吴克群演唱会4K'},{n:'W王心凌',v:'王心凌演唱会4K'},{n:'W汪峰',v:'汪峰演唱会4K'},{n:'W伍佰',v:'伍佰演唱会4K'},{n:'W王菲',v:'王菲演唱会4K'},{n:'W五月天',v:'五月天演唱会4K'},{n:'W汪苏泷',v:'汪苏泷演唱会4K'},{n:'X徐佳莹',v:'徐佳莹演唱会4K'},{n:'X弦子',v:'弦子演唱会4K'},{n:'X萧亚轩',v:'萧亚轩演唱会4K'},{n:'X许巍',v:'许巍演唱会4K'},{n:'X薛之谦',v:'薛之谦演唱会4K'},{n:'X许嵩',v:'许嵩演唱会4K'},{n:'X小虎队',v:'小虎队演唱会4K'},{n:'X萧敬腾',v:'萧敬腾演唱会4K'},{n:'X谢霆锋',v:'谢霆锋演唱会4K'},{n:'X徐小凤',v:'徐小凤演唱会4K'},{n:'X信乐队',v:'信乐队演唱会4K'},{n:'Y夜愿乐队',v:'夜愿乐队演唱会4K'},{n:'Y羽泉',v:'羽泉演唱会4K'},{n:'Y郁可唯',v:'郁可唯演唱会4K'},{n:'Y叶倩文',v:'叶倩文演唱会4K'},{n:'Y杨坤',v:'杨坤演唱会4K'},{n:'Y庾澄庆',v:'庾澄庆演唱会4K'},{n:'Y尤长靖',v:'尤长靖演唱会4K'},{n:'Y易烊千玺',v:'易烊千玺演唱会4K'},{n:'Y袁娅维',v:'袁娅维演唱会4K'},{n:'Y杨丞琳',v:'杨丞琳演唱会4K'},{n:'Y杨千嬅',v:'杨千嬅演唱会4K'},{n:'Y杨宗纬',v:'杨宗纬演唱会4K'},{n:'Z周杰伦',v:'周杰伦演唱会4K'},{n:'Z张学友',v:'张学友演唱会4K'},{n:'Z张信哲',v:'张信哲演唱会4K'},{n:'Z张宇',v:'张宇演唱会4K'},{n:'Z周华健',v:'周华健演唱会4K'},{n:'Z张韶涵',v:'张韶涵演唱会4K'},{n:'Z周深',v:'周深演唱会4K'},{n:'Z纵贯线',v:'纵贯线演唱会4K'},{n:'Z赵雷',v:'赵雷演唱会4K'},{n:'Z周传雄',v:'周传雄演唱会4K'},{n:'Z张国荣',v:'张国荣演唱会4K'},{n:'Z周慧敏',v:'周慧敏演唱会4K'},{n:'Z张惠妹',v:'张惠妹演唱会4K'},{n:'Z周笔畅',v:'周笔畅演唱会4K'},{n:'Z郑中基',v:'郑中基演唱会4K'},{n:'Z张艺兴',v:'张艺兴演唱会4K'},{n:'Z张震岳',v:'张震岳演唱会4K'},{n:'Z张雨生',v:'张雨生演唱会4K'},{n:'Z郑智化',v:'郑智化演唱会4K'},{n:'Z卓依婷',v:'卓依婷演唱会4K'},{n:'Z中岛美雪',v:'中岛美雪演唱会4K'}]}], + 白噪音4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'白噪音4K'},{n:'窗白噪音',v:'窗白噪音4K'},{n:'环境白噪音',v:'环境白噪音4K'},{n:'自然白噪音',v:'自然白噪音4K'},{n:'助眠白噪音',v:'助眠白噪音4K'}]}], + 知名UP主:[{key:'tid',name:'分类','value':[{n:'全部',v:'知名UP主'},{n:'菠萝赛东',v:'菠萝赛东'},{n:'冯提莫',v:'冯提莫'},{n:'徐云流浪中国',v:'徐云流浪中国'},{n:'YanGeographer',v:'YanGeographer'},{n:'棋手战鹰',v:'棋手战鹰'},{n:'林延秋',v:'林延秋'},{n:'吴sir说电影',v:'吴sir说电影'},{n:'李子柒',v:'李子柒'},{n:'美食作家王刚R',v:'美食作家王刚R'},{n:'智能路障',v:'智能路障'},{n:'于赓哲老师',v:'于赓哲老师'},{n:'一战成名_功夫',v:'一战成名_功夫'},{n:'历史调研室',v:'历史调研室'},{n:'利利川',v:'利利川'},{n:'我叫孙火旺',v:'我叫孙火旺'},{n:'渤海小吏',v:'渤海小吏'},{n:'无穷小亮的科普日常',v:'无穷小亮的科普日常'},{n:'申六宫',v:'申六宫'},{n:'-LKs-',v:'-LKs-'},{n:'小约翰可汗',v:'小约翰可汗'},{n:'low馆长',v:'low馆长'},{n:'自说自话的总裁',v:'自说自话的总裁'},{n:'所长林超',v:'所长林超'},{n:'世界未解之谜M',v:'世界未解之谜M'},{n:'李永乐老师官方',v:'李永乐老师官方'},{n:'罗兹',v:'罗兹'},{n:'回到2049',v:'回到2049'},{n:'二次元的中科院物理所',v:'二次元的中科院物理所'},{n:'毕导THU',v:'毕导THU'},{n:'罗翔讲刑法',v:'罗翔讲刑法'},{n:'戴博士实验室',v:'戴博士实验室'},{n:'芳斯塔芙',v:'芳斯塔芙'},{n:'参赛者网',v:'参赛者网'},{n:'三维地图看世界',v:'三维地图看世界'},{n:'有机社会',v:'有机社会'},{n:'乌鸦校尉CaptainWuya',v:'乌鸦校尉CaptainWuya'},{n:'果壳',v:'果壳'},{n:'严伯钧',v:'严伯钧'},{n:'是你们的康康',v:'是你们的康康'},{n:'老爸评测',v:'老爸评测'},{n:'硬核的半佛仙人',v:'硬核的半佛仙人'},{n:'盗月社食遇记',v:'盗月社食遇记'},{n:'我是郭杰瑞',v:'我是郭杰瑞'},{n:'papi酱',v:'papi酱'},{n:'老番茄',v:'老番茄'},{n:'绵羊料理',v:'绵羊料理'},{n:'老师好我叫何同学',v:'老师好我叫何同学'},{n:'敬汉卿',v:'敬汉卿'},{n:'周六野Zoey',v:'周六野Zoey'},{n:'木鱼水心',v:'木鱼水心'},{n:'凉风Kaze',v:'凉风Kaze'},{n:'小潮院长',v:'小潮院长'},{n:'中国BOY超级大猩猩',v:'中国BOY超级大猩猩'},{n:'敖厂长',v:'敖厂长'},{n:'A阿阳热爱前端',v:'阿阳热爱前端'},{n:'A艾栗夏',v:'艾栗夏'},{n:'A爱读书的King',v:'爱读书的King'},{n:'A爱看报的Kris',v:'爱看报的Kris'},{n:'A安森垚',v:'安森垚'},{n:'A安慰记心理小店',v:'安慰记心理小店'},{n:'A安因思谈',v:'安因思谈'},{n:'A昂克英文君',v:'昂克英文君'},{n:'B阪神电车',v:'阪神电车'},{n:'B宝剑侍从',v:'宝剑侍从'},{n:'B北京青年x凉子访谈录',v:'北京青年x凉子访谈录'},{n:'B北师大刘文利',v:'北师大刘文利'},{n:'B备胎说车',v:'备胎说车'},{n:'B毕导THU',v:'毕导THU'},{n:'B哔哩哔哩纪录片',v:'哔哩哔哩纪录片'},{n:'B蝙蝠音乐',v:'蝙蝠音乐'},{n:'B冰零-Mahiru忠诚眷属',v:'冰零-Mahiru忠诚眷属'},{n:'B冰糖雪梨Cherie',v:'冰糖雪梨Cherie'},{n:'B波普尔2020',v:'波普尔2020'},{n:'B不务正业的李雷',v:'不务正业的李雷'},{n:'B不正经老丝',v:'不正经老丝'},{n:'C草说木言',v:'草说木言'},{n:'C柴知道',v:'柴知道'},{n:'C程十安',v:'C程十安'},{n:'D大啊毛君',v:'大啊毛君'},{n:'D大连老师王博文',v:'大连老师王博文'},{n:'D大门ZRR',v:'大门ZRR'},{n:'D大象放映室',v:'大象放映室'},{n:'D大又元',v:'大又元'},{n:'D戴建业老师',v:'戴建业老师'},{n:'D调侃企业发展史',v:'调侃企业发展史'},{n:'D动画讲编程',v:'动画讲编程'},{n:'D动物学博士陈睿',v:'动物学博士陈睿'},{n:'D杜滑滑',v:'杜滑滑'},{n:'E鹅姐职场',v:'鹅姐职场'},{n:'F帆雨动画',v:'帆雨动画'},{n:'F反诈骗',v:'反诈骗'},{n:'F方猫boom',v:'方猫boom'},{n:'F芳斯塔芙',v:'芳斯塔芙'},{n:'F菲比老司机',v:'菲比老司机'},{n:'F附议YJango',v:'附议YJango'},{n:'G肝帝董佳宁',v:'肝帝董佳宁'},{n:'G高盛元',v:'高盛元'},{n:'G龚老师课堂',v:'龚老师课堂'},{n:'G郭爷物理',v:'郭爷物理'},{n:'G国家玮-开明致学',v:'国家玮-开明致学'},{n:'G果壳',v:'果壳'},{n:'G果木浪子',v:'果木浪子'},{n:'H哈佛雪梨',v:'哈佛雪梨'},{n:'H韩顺平',v:'韩顺平'},{n:'H韩语养乐多老师',v:'韩语养乐多老师'},{n:'H画画的番木',v:'画画的番木'},{n:'H画渣花小烙',v:'画渣花小烙'},{n:'H幻海航行',v:'幻海航行'},{n:'H灰细胞',v:'灰细胞'},{n:'H回到2049',v:'回到2049'},{n:'H会放羊的教书匠',v:'会放羊的教书匠'},{n:'J机械百宝箱',v:'机械百宝箱'},{n:'J纪录片我去看世界',v:'纪录片我去看世界'},{n:'J纪录片之家字幕组',v:'纪录片之家字幕组'},{n:'J技术研究院',v:'技术研究院'},{n:'J季绝学',v:'季绝学'},{n:'J夹性芝士',v:'夹性芝士'},{n:'J讲历史的赵冬梅',v:'讲历史的赵冬梅'},{n:'J经济研究室-祈祷',v:'经济研究室-祈祷'},{n:'J军武志',v:'军武志'},{n:'K看懂村',v:'看懂村'},{n:'K科普中国',v:'科普中国'},{n:'K科学声音',v:'科学声音'},{n:'L拉片实验室',v:'拉片实验室'},{n:'L唠点历史',v:'唠点历史'},{n:'L老K的无聊杂谈',v:'老K的无聊杂谈'},{n:'L老爸评测',v:'老爸评测'},{n:'L老龙山下的狐狸',v:'老龙山下的狐狸'},{n:'L老师好我叫何同学',v:'老师好我叫何同学'},{n:'L乐乐老师的网络课堂',v:'乐乐老师的网络课堂'},{n:'L乐有为医生',v:'乐有为医生'},{n:'L冷静医夏',v:'冷静医夏'},{n:'L李船长笔记',v:'李船长笔记'},{n:'L李永乐老师官方',v:'李永乐老师官方'},{n:'L历史调研室',v:'历史调研室'},{n:'L历史启示录',v:'历史启示录'},{n:'L罗翔说刑法',v:'罗翔说刑法'},{n:'M木鱼水心',v:'木鱼水心'},{n:'S森纳映画',v:'森纳映画'},{n:'S沙盘上的战争',v:'沙盘上的战争'},{n:'S设计师的睡前毒物',v:'设计师的睡前毒物'},{n:'S生命中国',v:'生命中国'},{n:'S史图馆',v:'史图馆'},{n:'S世界记忆大师龙雅',v:'世界记忆大师龙雅'},{n:'S司马南',v:'司马南'},{n:'S思想史万有引力',v:'思想史万有引力'},{n:'S所长林超',v:'所长林超'},{n:'T汤质看本质',v:'汤质看本质'},{n:'T天真的和感伤的小说家',v:'天真的和感伤的小说家'},{n:'T听君一席课',v:'听君一席课'},{n:'W唯一讲述者',v:'唯一讲述者'},{n:'X心理学陈祉妍',v:'心理学陈祉妍'},{n:'X心理学于悦',v:'心理学于悦'},{n:'X心医林霖',v:'心医林霖'},{n:'X刑法学',v:'刑法学'},{n:'Y有观点大历史',v:'有观点大历史'},{n:'Z这知识好冷',v:'这知识好冷'},{n:'Z中科院格致论道讲坛',v:'中科院格致论道讲坛'},{n:'Z中医基础理论',v:'中医基础理论'},{n:'Z周观鱼UP',v:'周观鱼UP'},{n:'Z周末音乐',v:'周末音乐'},{n:'Z诸葛呈像',v:'诸葛呈像'},{n:'Z子小孙的老年生活',v:'子小孙的老年生活'},{n:'Z专心种花兔',v:'专心种花兔'},{n:'Z子都忆情',v:'子都忆情'}]}], + 说案:[{key:'tid',name:'分类','value':[{n:'全部',v:'说案'},{n:'汤圆',v:'汤圆说案'},{n:'唐唐',v:'唐唐说案'},{n:'罗翔',v:'罗翔说刑法'},{n:'何家弘',v:'何家弘说案'},{n:'韩诺',v:'韩诺说案'},{n:'老V',v:'老V说案'},{n:'禁播档案',v:'禁播档案'}]}], + 解说:[{key:'tid',name:'分类','value':[{n:'全部',v:'解说'},{n:'电影',v:'电影解说'},{n:'电视',v:'电视解说'},{n:'小说',v:'小说解说'},{n:'历史',v:'历史解说'},{n:'动漫',v:'动漫解说'},{n:'电影',v:'歌词解说'},{n:'科普',v:'科普'}]}], + 演讲:[{key:'tid',name:'分类','value':[{n:'全部',v:'全部演讲4K'},{n:'A艾跃进',v:'艾跃进演讲4K'},{n:'C超级演说家',v:'超级演说家4K'},{n:'D电影',v:'电影演讲4K'},{n:'D典籍里的中国',v:'典籍里的中国4K'},{n:'G感动中国',v:'感动中国4K'},{n:'G郭继承',v:'郭继承演讲4K'},{n:'H华春莹',v:'华春莹演讲4K'},{n:'L雷军',v:'雷军演讲4K'},{n:'L罗翔',v:'罗翔演讲4K'},{n:'R任正非',v:'任正非演讲4K'},{n:'TED',v:'TED演讲4K'},{n:'W汪文斌',v:'汪文斌演讲4K'},{n:'Y一刻',v:'一刻演讲4K'},{n:'Z赵立坚',v:'赵立坚演讲4K'},{n:'Z郑强',v:'郑强演讲4K'}]}], + 时事:[{key:'tid',name:'分类','value':[{n:'全部',v:'时事'},{n:'时事热点',v:'时事热点'},{n:'时事评论',v:'时事评论'},{n:'时事新闻',v:'时事新闻'},{n:'时事开讲',v:'时事开讲'},{n:'时事报告',v:'时事报告'},{n:'时事纵横',v:'时事纵横'},{n:'时事政治',v:'时事政治'},{n:'时事亮亮点',v:'时事亮亮点'},{n:'时事直通车',v:'时事直通车'}]}], + 平面设计教学:[{key:'tid',name:'分类','value':[{n:'全部',v:'平面设计教学'},{n:'AI绘画',v:'AI绘画'},{n:'AdobePhotoshop',v:'AdobePhotoshop教程'},{n:'AdobeIllustrator',v:'AdobeIllustrator教程'},{n:'CorelDRAW',v:'CorelDRAW教程'},{n:'AdobeInDesign',v:'AdobeInDesign教程'},{n:'AdobePagermaker',v:'AdobePagermaker教程'},{n:'SAI',v:'SAI教程'},{n:'AdobeBridge',v:'AdobeBridge教程'},{n:'AdobePagermaker',v:'AdobePagermake教程r'},{n:'3DStudioMax',v:'3DStudioMax教程'},{n:'PR',v:'PR教程'},{n:'AE',v:'AE教程'},{n:'CINEMA4D',v:'CINEMA4D教程'}]}], + 软件教程:[{key:'tid',name:'分类','value':[{n:'全部',v:'软件教程'},{n:'Windows',v:'Windows'},{n:'MT管理器',v:'MT管理器'},{n:'NP管理器',v:'NP管理器'},{n:'mixplorer',v:'mixplorer'},{n:'脱壳',v:'脱壳'},{n:'爬虫',v:'爬虫'},{n:'json&jar',v:'json&jar'},{n:'网盘挂载',v:'网盘挂载'},{n:'alist+WebDav',v:'alist+WebDav'},{n:'TVBox',v:'TVBox'},{n:'EXCEL',v:'EXCEL教程'},{n:'Git入门到精通',v:'Git入门到精通'},{n:'java',v:'java教程'},{n:'phyton',v:'phyton教程'},{n:'xml',v:'xml教程'}]}], + 实用教程:[{key:'tid',name:'分类','value':[{n:'全部',v:'实用教程'},{n:'考公考证',v:'考公考证'},{n:'风水',v:'风水教学'},{n:'水电维修',v:'水电维修'},{n:'装修',v:'装修'},{n:'生活小技巧',v:'生活小技巧'},{n:'绿植',v:'绿植'},{n:'宠物',v:'宠物'},{n:'汽车',v:'汽车养护'},{n:'穿衣搭配',v:'穿衣搭配'},{n:'毛衣编织',v:'毛衣编织'},{n:'美妆',v:'美妆'},{n:'数独',v:'数独教程'},{n:'魔方',v:'魔方教程'}]}], + 旅游:[{key:'tid',name:'分类','value':[{n:'全部',v:'旅游'},{n:'A澳门',v:'澳门旅游'},{n:'A安徽',v:'安徽旅游'},{n:'B布达拉宫',v:'布达拉宫旅游'},{n:'B北京',v:'北京旅游'},{n:'C重庆',v:'重庆旅游'},{n:'C草原',v:'草原旅游'},{n:'D大海',v:'大海旅游'},{n:'F福建',v:'福建旅游'},{n:'G广东',v:'广东旅游'},{n:'G广西',v:'广西旅游'},{n:'G贵州',v:'贵州旅游'},{n:'G甘肃',v:'甘肃旅游'},{n:'H海南',v:'海南旅游'},{n:'H河北',v:'河北旅游'},{n:'H河南',v:'河南旅游'},{n:'H湖北',v:'湖北旅游'},{n:'H湖南',v:'湖南旅游'},{n:'H黑龙江',v:'黑龙江旅游'},{n:'J吉林',v:'吉林旅游'},{n:'J江苏',v:'江苏旅游'},{n:'J江西',v:'江西旅游'},{n:'L辽宁',v:'辽宁旅游'},{n:'M民宿',v:'民宿旅游'},{n:'N内蒙古',v:'内蒙古旅游'},{n:'N宁夏',v:'宁夏旅游'},{n:'Q青海',v:'青海旅游'},{n:'S上海',v:'上海旅游'},{n:'S陕西',v:'陕西旅游'},{n:'S四川',v:'四川旅游'},{n:'S山西',v:'山西旅游'},{n:'S山东',v:'山东旅游'},{n:'T天津',v:'天津旅游'},{n:'T台湾',v:'台湾旅游'},{n:'T天空',v:'天空旅游'},{n:'X西湖',v:'西湖旅游'},{n:'X西藏',v:'西藏旅游'},{n:'X新疆',v:'新疆旅游'},{n:'X香港',v:'香港旅游'},{n:'Y云南',v:'云南旅游'},{n:'Z浙江',v:'浙江旅游'}]}], + 风景4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'风景4K'},{n:'A澳门',v:'澳门风景4K'},{n:'A安徽',v:'安徽风景4K'},{n:'B布达拉宫',v:'布达拉宫风景4K'},{n:'B北京',v:'北京风景4K'},{n:'C重庆',v:'重庆风景4K'},{n:'C草原',v:'草原风景4K'},{n:'D大海',v:'大海风景4K'},{n:'F福建',v:'福建风景4K'},{n:'G广东',v:'广东风景4K'},{n:'G广西',v:'广西风景4K'},{n:'G贵州',v:'贵州风景4K'},{n:'G甘肃',v:'甘肃风景4K'},{n:'H海南',v:'海南风景4K'},{n:'H河北',v:'河北风景4K'},{n:'H河南',v:'河南风景4K'},{n:'H湖北',v:'湖北风景4K'},{n:'H湖南',v:'湖南风景4K'},{n:'H黑龙江',v:'黑龙江风景4K'},{n:'J吉林',v:'吉林风景4K'},{n:'J江苏',v:'江苏风景4K'},{n:'J江西',v:'江西风景4K'},{n:'L辽宁',v:'辽宁风景4K'},{n:'L洛阳',v:'洛阳风景4K'},{n:'M民宿',v:'民宿风景4K'},{n:'N南京',v:'南京风景4K'},{n:'N内蒙古',v:'内蒙古风景4K'},{n:'N宁夏',v:'宁夏风景4K'},{n:'Q青海',v:'青海风景4K'},{n:'S上海',v:'上海风景4K'},{n:'S陕西',v:'陕西风景4K'},{n:'S四川',v:'四川风景4K'},{n:'S山西',v:'山西风景4K'},{n:'S山东',v:'山东风景4K'},{n:'S苏州',v:'苏州风景4K'},{n:'T天津',v:'天津风景4K'},{n:'T台湾',v:'台湾风景4K'},{n:'T天空',v:'天空风景4K'},{n:'X西安',v:'西安风景4K'},{n:'X西湖',v:'西湖风景4K'},{n:'X西藏',v:'西藏风景4K'},{n:'X新疆',v:'新疆风景4K'},{n:'X香港',v:'香港风景4K'},{n:'Y云南',v:'云南风景4K'},{n:'Z浙江',v:'浙江风景4K'}]}], + 食谱:[{key:'tid',name:'分类','value':[{n:'全部',v:'食谱'},{n:'川菜食谱',v:'川菜食谱'},{n:'豫菜食谱',v:'豫菜食谱'},{n:'淮扬菜食谱',v:'淮扬菜食谱'},{n:'湘菜食谱',v:'湘菜食谱'},{n:'鲁菜食谱',v:'鲁菜食谱'},{n:'粤菜食谱',v:'粤菜食谱'},{n:'浙菜食谱',v:'浙菜食谱'},{n:'徽菜食谱',v:'徽菜食谱'},{n:'闽菜食谱',v:'闽菜食谱'},{n:'苏菜食谱',v:'苏菜食谱'},{n:'健康食谱',v:'健康食谱'},{n:'面食',v:'面食'},{n:'米饭',v:'米饭'},{n:'粥',v:'粥的做法'},{n:'酿酒',v:'自酿酒'},{n:'小吃',v:'小吃制作'}]}], + 美食超清:[{key:'tid',name:'分类','value':[{n:'全部',v:'美食超清'},{n:'舌尖上的中国',v:'舌尖上的中国超清'},{n:'老字号',v:'老字号美食超清'},{n:'家常菜',v:'家常菜美食超清'},{n:'香港美食探店',v:'香港美食探店超清'},{n:'澳门美食探店',v:'澳门美食探店超清'},{n:'上海美食探店',v:'上海美食探店超清'},{n:'北京美食探店',v:'北京美食探店超清'},{n:'重庆美食探店',v:'重庆美食探店超清'},{n:'南京美食探店',v:'南京美食探店超清'},{n:'广州美食探店',v:'广州美食探店超清'},{n:'杭州美食探店',v:'杭州美食探店超清'},{n:'成都美食探店',v:'成都美食探店超清'},{n:'苏州美食探店',v:'苏州美食探店超清'},{n:'武汉美食探店',v:'武汉美食探店超清'},{n:'台湾美食探店',v:'台湾美食探店超清'},{n:'川菜',v:'川菜美食超清'},{n:'豫菜',v:'豫菜美食超清'},{n:'淮扬菜',v:'淮扬菜美食超清'},{n:'湘菜',v:'湘菜美食超清'},{n:'鲁菜',v:'鲁菜美食超清'},{n:'粤菜',v:'粤菜美食超清'},{n:'潮菜',v:'潮菜美食超清'},{n:'浙菜',v:'浙菜美食超清'},{n:'徽菜',v:'徽菜美食超清'},{n:'闽菜',v:'闽菜美食超清'},{n:'东北菜',v:'东北菜美食超清'},{n:'客家菜',v:'客家菜美食超清'},{n:'苏菜',v:'苏菜美食超清'},{n:'火锅',v:'火锅'},{n:'面食',v:'面食'},{n:'炒菜',v:'炒菜'},{n:'点心',v:'点心'},{n:'日料',v:'日料'},{n:'小吃',v:'小吃'},{n:'素食',v:'素食'},{n:'蒸菜',v:'蒸菜'},{n:'凉菜',v:'凉菜'},{n:'早餐',v:'早餐'},{n:'披萨',v:'披萨'},{n:'烤鱼',v:'烤鱼'},{n:'海鲜',v:'海鲜美食超清'},{n:'汉堡',v:'汉堡'},{n:'韩国菜',v:'韩国菜'},{n:'泰国菜',v:'泰国菜'},{n:'穆斯林菜',v:'穆斯林菜'},{n:'法国菜',v:'法国菜'},{n:'意大利菜',v:'意大利菜'},{n:'西班牙菜',v:'西班牙菜'},{n:'土耳其菜',v:'土耳其菜系'},{n:'阿拉伯菜',v:'阿拉伯菜'},{n:'德国菜',v:'德国菜'}]}], + 搞笑:[{key:'tid',name:'分类','value':[{n:'全部',v:'搞笑'},{n:'搞笑配音',v:'搞笑配音'},{n:'搞笑电影',v:'搞笑电影'},{n:'搞笑综艺',v:'搞笑综艺'},{n:'鬼畜电影',v:'鬼畜电影'},{n:'搞笑动画',v:'搞笑动画'},{n:'搞笑番',v:'搞笑番'},{n:'十万个冷笑话',v:'十万个冷笑话'}]}], + 球星:[{key:'tid',name:'分类','value':[{n:'全部',v:'球星'},{n:'B巴萨',v:'巴萨4K'},{n:'B巴黎圣日耳曼',v:'巴黎圣日耳曼4K'},{n:'B贝克汉姆',v:'贝克汉姆4K'},{n:'C罗',v:'C罗4K'},{n:'D杜兰特',v:'杜兰特4K'},{n:'D德布劳内',v:'德布劳内4K'},{n:'D德甲',v:'德甲4K'},{n:'F1',v:'F14K'},{n:'G国米',v:'国米4K'},{n:'G高尔夫',v:'高尔夫4K'},{n:'H亨利',v:'亨利4K'},{n:'H皇马',v:'皇马4K'},{n:'K库里',v:'库里4K'},{n:'L罗纳尔多',v:'罗纳尔多4K'},{n:'M梅西',v:'梅西4K'},{n:'M曼联',v:'曼联4K'},{n:'M曼城',v:'曼城4K'},{n:'NBA',v:'NBA4K'},{n:'N内马尔',v:'内马尔4K'},{n:'O欧冠',v:'欧冠4K'},{n:'Q齐达内',v:'齐达内4K'},{n:'S世界杯',v:'世界杯4K'},{n:'S斯诺克',v:'斯诺克4K'},{n:'T天下足球',v:'天下足球4K'},{n:'UFC',v:'UFC4K'},{n:'W网球',v:'网球4K'},{n:'X小罗',v:'小罗4K'},{n:'X西甲',v:'西甲4K'},{n:'Y英超',v:'英超4K'},{n:'Y意甲',v:'意甲4K'},{n:'Z詹姆斯',v:'詹姆斯4K'}]}], + 相声小品:[{key:'tid',name:'分类','value':[{n:'全部',v:'相声小品'},{n:'C陈佩斯',v:'陈佩斯小品4K'},{n:'C春晚小品',v:'春晚小品4K'},{n:'C曹云金',v:'曹云金相声4K'},{n:'D单口相声',v:'单口相声4K'},{n:'D德云社',v:'德云社小品4K'},{n:'E二人转',v:'二人转4K'},{n:'F冯巩',v:'冯巩小品4K'},{n:'G郭德纲',v:'郭德纲相声4K'},{n:'G郭冬临',v:'郭冬临小品4K'},{n:'G郭达',v:'郭达小品4K'},{n:'K开心麻花',v:'开心麻花小品4K'},{n:'P评书',v:'评书4K'},{n:'P潘长江',v:'潘长江小品4K'},{n:'Q青曲社',v:'青曲社相声4K'},{n:'Q群口相声',v:'群口相声4K'},{n:'S宋小宝',v:'宋小宝小品4K'},{n:'W文松',v:'文松小品4K'},{n:'X小曲',v:'小曲相声4K'},{n:'X喜剧综艺',v:'喜剧综艺4K'},{n:'Y严顺开',v:'严顺开小品4K'},{n:'Y岳云鹏',v:'岳云鹏相声小品4K'},{n:'Z赵本山',v:'赵本山小品4K'},{n:'Z赵丽蓉',v:'赵丽蓉小品4K'}]}], + 戏曲:[{key:'tid',name:'分类','value':[{n:'全部',v:'戏曲4K'},{n:'B梆子腔',v:'梆子腔戏曲4K'},{n:'C采茶戏',v:'采茶戏戏曲4K'},{n:'C潮剧',v:'潮剧戏曲4K'},{n:'C彩调',v:'彩调戏曲4K'},{n:'C川剧',v:'川剧戏曲4K'},{n:'D滇剧',v:'滇剧戏曲4K'},{n:'D傣剧',v:'傣剧戏曲4K'},{n:'E二人台',v:'二人台戏曲4K'},{n:'G高腔',v:'高腔戏曲4K'},{n:'G高甲戏',v:'高甲戏戏曲4K'},{n:'G赣剧',v:'赣剧戏曲4K'},{n:'G桂剧',v:'桂剧戏曲4K'},{n:'H黄梅戏',v:'黄梅戏戏曲4K'},{n:'H河北梆子',v:'河北梆子戏曲4K'},{n:'H河南曲剧',v:'河南曲剧戏曲4K'},{n:'H淮剧',v:'淮剧戏曲4K'},{n:'H沪剧',v:'沪剧戏曲4K'},{n:'H滑稽戏',v:'滑稽戏戏曲4K'},{n:'H徽剧',v:'徽剧4K'},{n:'H汉剧',v:'汉剧戏曲4K'},{n:'H湖南花鼓戏',v:'湖南花鼓戏戏曲4K'},{n:'J京剧',v:'京剧戏曲4K'},{n:'J晋剧',v:'晋剧戏曲4K'},{n:'J吉剧',v:'吉剧戏曲4K'},{n:'K昆曲',v:'昆曲戏曲4K'},{n:'L梨园戏',v:'梨园戏戏曲4K'},{n:'L龙江剧',v:'龙江剧戏曲4K'},{n:'M闽剧',v:'闽剧戏曲4K'},{n:'P评剧',v:'评剧戏曲4K'},{n:'P蒲剧',v:'蒲剧戏曲4K'},{n:'P皮影戏',v:'皮影戏戏曲4K'},{n:'P莆仙戏',v:'莆仙戏戏曲4K'},{n:'Q黔剧',v:'黔剧戏曲4K'},{n:'Q祁剧',v:'祁剧戏曲4K'},{n:'Q秦腔',v:'秦腔戏曲4K'},{n:'S上党梆子',v:'上党梆子戏曲4K'},{n:'S山东梆子',v:'山东梆子戏曲4K'},{n:'S绍剧',v:'绍剧戏曲4K'},{n:'W武安平调',v:'武安平调戏曲4K'},{n:'W婺剧',v:'婺剧戏曲4K'},{n:'X湘剧',v:'湘剧戏曲4K'},{n:'Y越剧',v:'越剧戏曲4K'},{n:'Y豫剧',v:'豫剧戏曲4K'},{n:'Y雁剧',v:'雁剧戏曲4K'},{n:'Y越调',v:'越调戏曲4K'},{n:'Y粤剧',v:'粤剧戏曲4K'},{n:'Z壮剧',v:'壮剧戏曲4K'},{n:'Z藏剧',v:'藏剧戏曲4K'}]}], + 儿童:[{key:'tid',name:'分类','value':[{n:'全部',v:'儿童'},{n:'教育',v:'儿童早教'},{n:'歌曲',v:'贝瓦儿歌'},{n:'舞蹈',v:'儿童舞蹈'},{n:'成语故事',v:'儿童成语故事'},{n:'安全教育',v:'儿童安全教育'},{n:'睡前故事',v:'儿童睡前故事'},{n:'贝乐虎',v:'贝乐虎'},{n:'宝宝巴士',v:'宝宝巴士'},{n:'儿童好声音',v:'儿童好声音'}]}], + 小姐姐4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'小姐姐4K'},{n:'比基尼',v:'比基尼美女4K'},{n:'内衣',v:'内衣模特4K'},{n:'车模',v:'美女车模4K'},{n:'健身',v:'美女健身4K'},{n:'翻唱',v:'美女翻唱4K'},{n:'舞蹈',v:'美女舞蹈4K'},{n:'美妆',v:'美女美妆4K'},{n:'Cos',v:'美女Cos4K'},{n:'户外',v:'美女户外4K'},{n:'居家',v:'美女居家4K'},{n:'自习',v:'自习小姐姐4K'},{n:'职场',v:'职场美女4K'},{n:'工地',v:'工地美女4K'},{n:'安静',v:'安静小姐姐4K'},{n:'活泼',v:'活泼小姐姐4K'}]}], + 热门:[{key:'tid',name:'分类','value':[{n:'全部',v:'热门'},{n:'刀郎',v:'刀郎'},{n:'罗刹海市',v:'罗刹海市'},{n:'狂飙',v:'狂飙'},{n:'淄博烧烤',v:'淄博烧烤'},{n:'原神',v:'原神'},{n:'漫长的季节',v:'漫长的季节'},{n:'AI',v:'AI'},{n:'俄乌',v:'俄乌'},{n:'ChatGPT',v:'ChatGPT'},{n:'重启人生',v:'重启人生'},{n:'棋手战鹰',v:'棋手战鹰'},{n:'中国奇谭',v:'中国奇谭'},{n:'三体',v:'三体'},{n:'刘慈欣',v:'刘慈欣'},{n:'鬼吹灯',v:'鬼吹灯'},{n:'天下霸唱',v:'天下霸唱'}]}], + 旅行探险:[{key:'tid',name:'分类','value':[{n:'全部',v:'旅行探险'},{n:'摩旅',v:'摩托车旅游'},{n:'骑行',v:'骑行旅游'},{n:'徒步旅游',v:'徒步旅游'},{n:'自驾旅游',v:'自驾旅游'},{n:'洞穴探险',v:'洞穴探险'},{n:'荒野求生',v:'荒野求生'},{n:'凶宅探险',v:'凶宅探险'},{n:'灵异探险',v:'灵异探险'},{n:'户外攀岩',v:'户外攀岩'},{n:'高空攀爬',v:'高空攀爬'},{n:'潜水探险',v:'潜水探险'},{n:'翼装飞行',v:'翼装飞行'},{n:'极限运动',v:'极限运动'},{n:'速降',v:'速降'},{n:'高空跑酷',v:'高空跑酷'},{n:'冲浪',v:'冲浪'}]}] + }; + let filOrd = {key:'order',name:'排序',value:[{n:'综合排序',v:'0'},{n:'最多点击',v:'click'},{n:'最新发布',v:'pubdate'},{n:'最多弹幕',v:'dm'},{n:'最多收藏',v:'stow'}]}; + filOrd['init'] = filOrd.value[0].v; + let filDur = {key:'duration',name:'时长',value:[{n:'全部',v:'0'},{n:'60分钟以上',v:'4'},{n:'30~60分钟',v:'3'},{n:'10~30分钟',v:'2'},{n:'10分钟以下',v:'1'}]}; + filDur['init'] = filDur.value[0].v; + return JSON.stringify({ + class: _.map(classes, (cls) => { + cls.land = 1; + cls.ratio = 1.78; + if (filterObj[cls.type_id]){ + filterObj[cls.type_id].push(filOrd, filDur); + filterObj[cls.type_id][0]['init'] = filterObj[cls.type_id][0].value[0].v; + } else { + filterObj[cls.type_id] = []; + filterObj[cls.type_id].push(filOrd, filDur) + } + return cls; + }), + filters: filterObj, + }); +} + +async function homeVod() { + let html = HOST + '/x/web-interface/popular?ps=20'; + let data = JSON.parse(await request(html)).data.list; + let videos = []; + data.forEach(function(it) { + videos.push({ + vod_id: it.aid, + vod_name: stripHtmlTag(it.title), + vod_pic: it.pic, + vod_remarks: '🔥 ' + it.vt_display || '', + }); + }); + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + let html = HOST + '/x/web-interface/search/type?search_type=video&page=' + pg + '&keyword=' + (extend.tid || tid) + '&duration=' + (extend.duration || '') + '&order=' + (extend.order || ''); + let data = JSON.parse(await request(html)).data; + let videos = []; + data.result.forEach(function(it) { + videos.push({ + vod_id: it.aid, + vod_name: stripHtmlTag(it.title), + vod_pic: 'https:' + it.pic, + vod_remarks: turnDHM(it.duration) || '', + }); + }); + return JSON.stringify({ + page: parseInt(data.page), + pagecount: data.numPages, + limit: 20, + total: data.numResults, + list: videos, + }); +} + +async function detail(id) { + let data = JSON.parse(await request(HOST + '/x/web-interface/view?aid=' + id)).data; + let vod = { + vod_id: data.aid, + vod_name: stripHtmlTag(data.title), + vod_pic: data.pic, + type_name: data.tname, + vod_year: new Date(data.pubdate*1000).getFullYear(), + vod_remarks: data.duration || '', + vod_director: data.owner.name, + vod_content: stripHtmlTag(data.desc), + }; + let episodes = data.pages; + let playurls = []; + episodes.forEach(function(it) { + let cid = it.cid; + let part = it.part.replace('#', '﹟').replace('$', '﹩'); + playurls.push( + part + '$' + data.aid + '_' + cid + ) + }); + let playUrl = playurls.join('#'); + vod.vod_play_from = '道长在线'; + vod.vod_play_url = playUrl; + return JSON.stringify({ + list: [vod], + }); +} + +async function play(flag, id, flags) { + let ids = id.split('_'); + let html = HOST + '/x/player/playurl?avid=' + ids[0] + '&cid=' + ids[1] + '&qn=116'; + let data = JSON.parse(await request(html)).data.durl; + let maxSize = -1; + let position = -1; + data.forEach(function(it, i) { + if (maxSize < Number(it.size)) { + maxSize = Number(it.size); + position = i + } + }); + let purl = ''; + if (data.length > 0) { + if (position === -1) { + position = 0 + } + purl = data[position].url + } + // console.debug('我的哔哩 purl =====>' + purl); // js_debug.log + return JSON.stringify({ + parse: 0, + url: purl, + header: getMb(), + }); +} + +async function search(wd, quick, pg) { + if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; + let html = HOST + '/x/web-interface/search/type?search_type=video&keyword=' + wd + '&page=' + pg; + let data = JSON.parse(await request(html)).data; + let videos = []; + data.result.forEach(function(it) { + videos.push({ + vod_id: it.aid, + vod_name: stripHtmlTag(it.title), + vod_pic: 'https:' + it.pic, + vod_remarks: turnDHM(it.duration) || '', + }); + }); + return JSON.stringify({ + page: parseInt(data.page), + pagecount: data.numPages, + limit: 20, + total: data.numResults, + list: videos, + land: 1, + ratio: 1.78, + }); +} + +function getHeader(cookie) { + let header = {}; + header['cookie'] = cookie; + header['User-Agent'] = PC_UA; + header['Referer'] = 'https://www.bilibili.com'; + return header; +} + +function getMb() { + return getHeader(cookie); +} + +function stripHtmlTag(src) { + return src + .replace(/<\/?[^>]+(>|$)/g, '') + .replace(/&.{1,5};/g, '') + .replace(/\s{2,}/g, ' '); +} + +function turnDHM(duration) { + let min = duration.split(':')[0]; + let sec = duration.split(':')[1]; + if (min == 0) { + return sec + '秒'; + } else if (0 < min && min < 60) { + return min + '分'; + } else if (60 <= min && min < 1440) { + if (min % 60 == 0) { + let h = min / 60; + return h + '小时'; + } else { + let h = min / 60; + h = (h + '').split('.')[0]; + let m = min % 60; + return h + '小时' + m + '分'; + } + } else if (min >= 1440) { + let d = min / 60 / 24; + d = (d + '').split('.')[0]; + let h = min / 60 % 24; + h = (h + '').split('.')[0]; + let m = min % 60; + let dhm = ''; + if (d > 0) { + dhm = d + '天' + } + if (h >= 1) { + dhm = dhm + h + '小时' + } + if (m > 0) { + dhm = dhm + m + '分' + } + return dhm; + } + return null; +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file diff --git a/js/ng_open.js b/js/ng_open.js new file mode 100644 index 00000000..74a6bda9 --- /dev/null +++ b/js/ng_open.js @@ -0,0 +1,213 @@ +import { Crypto, jinja2, _ } from './lib/cat.js'; + +let key = '南瓜影视'; +let HOST = 'http://ys.changmengyun.com'; +let siteKey = ''; +let siteType = 0; +let MOBILE_UA = 'okhttp/4.6.0' + +async function request(reqUrl) { + let t = new Date().getTime().toString(); + let res = await req(reqUrl, { + method: 'get', + headers: { + 'version_name': '1.0.6', + 'version_code': '6', + 'package_name': 'com.app.nanguatv', + 'sign': Crypto.MD5('c431ea542cee9679#uBFszdEM0oL0JRn@' + t).toString().toLowerCase(), + 'imei': 'c431ea542cee9679', + 'timeMillis': t, + 'User-Agent': MOBILE_UA + }, + }); + return res.content; +} + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; +} + +async function home(filter) { + let data = JSON.parse(await request(HOST + '/api.php/provide/home_nav')); + let classes = []; + for (const key in data) { + if (data[key].name != '精选') + classes.push({ + type_id: data[key].id, + type_name: data[key].name, + }); + } + let filterObj = { + "2":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"国产剧","v":"国产剧"},{"n":"港台剧","v":"港台剧"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"内地","v":"内地"},{"n":"香港地区","v":"香港地区"},{"n":"台湾地区","v":"台湾地区"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}], + "1":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"动作片","v":"动作片"},{"n":"喜剧片","v":"喜剧片"},{"n":"爱情片","v":"爱情片"},{"n":"科幻片","v":"科幻片"},{"n":"恐怖片","v":"恐怖片"},{"n":"剧情片","v":"剧情片"},{"n":"战争片","v":"战争片"},{"n":"惊悚片","v":"惊悚片"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"华语","v":"华语"},{"n":"香港地区","v":"香港地区"},{"n":"美国","v":"美国"},{"n":"欧洲","v":"欧洲"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"台湾地区","v":"台湾地区"},{"n":"泰国","v":"泰国"},{"n":"台湾地区","v":"台湾地区"},{"n":"印度","v":"印度"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}], + "4":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"国产漫","v":"国产漫"},{"n":"欧美漫","v":"欧美漫"},{"n":"日韩漫","v":"日韩漫"},{"n":"港台漫","v":"港台漫"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"中国大陆","v":"中国大陆"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"欧美","v":"欧美"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"新上线","v":"新上线"}]},{"key":"total","name":"状态","value":[{"n":"全部","v":"状态"},{"n":"连载","v":"连载"},{"n":"完结","v":"完结"}]}], + "3":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"大陆","v":"大陆"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"新上线","v":"新上线"}]}], + "46":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"日韩剧","v":"日韩剧"},{"n":"欧美剧","v":"欧美剧"},{"n":"海外剧","v":"海外剧"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"韩国","v":"韩国"},{"n":"美剧","v":"美剧"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}] + }; + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + let data = JSON.parse(await request(HOST + '/api.php/provide/vod_rank?app=ylys&sort_type=month&imei=c431ea542cee9679&id=2&page=1')); + let videos = []; + data.forEach(function(it) { + videos.push({ + vod_id: it.id, + vod_name: it.name, + vod_pic: it.img, + vod_remarks: it.remarks, + }); + }); + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; + let reqUrl = HOST + '/api.php/provide/vod_list?app=ylys&id=' + tid + '&page=' + pg + '&imei=c431ea542cee9679&'; + reqUrl += jinja2('area={{ext.area}}&year={{ext.year}}&type={{ext.class}}&total={{ext.total}}&order={{ext.by}}', { ext: extend }); + // let data = JSON.parse(await request(reqUrl)); + let data = JSON.parse(await request(reqUrl)).list; + let videos = []; + data.forEach(function(it) { + videos.push({ + vod_id: it.id, + vod_name: it.name, + vod_pic: it.img, + vod_remarks: it.remarks, + }); + }); + let pgChk = JSON.parse(await request(HOST + '/api.php/provide/vod_list?app=ylys&id=' + tid + '&page=' + (parseInt(pg) + 1) + '&imei=c431ea542cee9679&')).msg; + const pgCount = (pgChk == 'ok') ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 20, + total: 20 * pgCount, + list: videos, + }); +} + +async function detail(id) { + let data = JSON.parse(await request(HOST + '/api.php/provide/vod_detail?app=ylys&imei=c431ea542cee9679&id=' + id)).data; + let vod = { + vod_id: data.id, + vod_name: data.name, + vod_pic: data.img, + type_name: data.type, + vod_year: data.year, + vod_remarks: '更新至: ' + data.msg + ' / 评分: ' + data.score, + vod_content: stripHtmlTag(data.info), + }; + let episodes = data.player_info; + let playlist = {}; + episodes.forEach(function(it) { + let playurls = it.video_info; + playurls.forEach(function(playurl) { + let source = it.show; + let t = formatPlayUrl(vod.vod_name, playurl.name); + if (t.length == 0) t = playurl.name.trim(); + if (!playlist.hasOwnProperty(source)) { + playlist[source] = []; + } + playlist[source].push(t + '$' + playurl.url); + }); + }); + vod.vod_play_from = _.keys(playlist).join('$$$'); + let urls = _.values(playlist); + let vod_play_url = []; + urls.forEach(function(it) { + vod_play_url.push(it.join('#')); + }); + vod.vod_play_url = vod_play_url.join('$$$'); + return JSON.stringify({ + list: [vod], + }); +} + +async function play(flag, id, flags) { + try { + if (id.indexOf('m3u8') != -1) { + let mjurl = id.split('url=')[1] + return JSON.stringify({ + parse: 0, + url: mjurl, + }); + } else if (id.indexOf(',') != -1) { + let mjurl = id.split(',')[1] + let jData = JSON.parse(await request(mjurl)); + return JSON.stringify({ + parse: 0, + url: jData.data.url, + }); + } else { + let mjurl = 'http://43.154.104.152:1234/jhapi/cs.php?url=' + id.split('url=')[1] + let jData = JSON.parse(await request(mjurl)); + return JSON.stringify({ + parse: 0, + url: jData.data.url, + }); + } + } catch (e) { + return JSON.stringify({ + parse: 0, + url: id, + }); + } +} + +async function search(wd, quick, pg) { + if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; + let data = JSON.parse(await request(HOST + '/api.php/provide/search_result_more?app=ylys&video_name=' + wd + '&pageSize=20&tid=0&imei=c431ea542cee9679&page=' + pg, 'okhttp/4.6.0')).data; + let videos = []; + data.forEach(function(it) { + videos.push({ + vod_id: it.id, + vod_name: it.video_name, + vod_pic: it.img, + vod_remarks: it.qingxidu + '/' + it.category, + }); + }); + let pgChk = JSON.parse(await request(HOST + '/api.php/provide/search_result_more?app=ylys&video_name=' + wd + '&pageSize=20&tid=0&imei=c431ea542cee9679&page=' + (parseInt(pg) + 1), 'okhttp/4.6.0')).msg; + const pgCount = (pgChk == 'ok') ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 20, + total: 20 * pgCount, + list: videos, + }); +} + +function stripHtmlTag(src) { + return src + .replace(/<\/?[^>]+(>|$)/g, '') + .replace(/&.{1,5};/g, '') + .replace(/\s{2,}/g, ' '); +} + +function formatPlayUrl(src, name) { + return name + .trim() + .replaceAll(src, '') + .replace(/<|>|《|》/g, '') + .replace(/\$|#/g, ' ') + .trim(); +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} diff --git a/js/sharenice_open.js b/js/sharenice_open.js new file mode 100644 index 00000000..409a080c --- /dev/null +++ b/js/sharenice_open.js @@ -0,0 +1,135 @@ +// 搜索滑块验证 +import { load, _ } from './lib/cat.js'; + +let key = '短视频'; +let HOST = 'http://www.sharenice.net'; +let siteKey = ''; +let siteType = 0; +let PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'; + +async function request(reqUrl, agentSp) { + let res = await req(reqUrl, { + method: 'get', + headers: { + 'User-Agent': agentSp || PC_UA, + }, + }); + return res.content; +} + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; +} + +function clsjoin(cls) { + _.each(cls, (s) => { + let typeId = s.attribs['href']; + typeId = typeId.substring(typeId.lastIndexOf('t/') + 2); + classes.push({ + type_id: typeId, + type_name: s.children[0].data, + }); + }); +} + +let classes = []; +async function home(filter) { + let filterObj = {}; + let html = await request(HOST); + let $ = load(html); + let series = $('div.nav > ul > li > a[href*=net/]'); + let tag = $('div.hot-tags-list > a[href*=net]'); + clsjoin(series); + clsjoin(tag); + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + let link = HOST + '/t-576O5aWz'; + let html = await request(link); + let $ = load(html); + let items = $('div.item-box ul li'); + let videos = _.map(items, (item) => { + let a = $(item).find('a:first')[0]; + let img = $(item).find('img:first')[0]; + return { + vod_id: a.attribs.href, + vod_name: a.attribs.title, + vod_pic: img.attribs['data-original'], + vod_remarks: '', + }; + }); + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; + let link = HOST + '/' + tid + '?page=' + pg; + let html = await request(link); + let $ = load(html); + let items = $('div.item-box ul li'); + let videos = _.map(items, (item) => { + let a = $(item).find('a:first')[0]; + let img = $(item).find('img:first')[0]; + return { + vod_id: a.attribs.href, + vod_name: a.attribs.title, + vod_pic: img.attribs['data-original'], + vod_remarks: '', + }; + }); + let hasMore = $('ul.pagination > li > a:contains(»)').length > 0; + let pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 16, + total: 16 * pgCount, + list: videos, + }); +} + +async function detail(id) { + let vod = { + vod_id: id, + vod_remarks: '', + }; + let playlist = ['观看视频' + '$' + id]; + vod.vod_play_from = '道长在线'; + vod.vod_play_url = playlist.join('#'); + return JSON.stringify({ + list: [vod], + }); +} + +async function play(flag, id, flags) { + let html = await request(id); + let $ = load(html); + let playUrl = $('div.video-play-box').find('video:first')[0].attribs.src + '#.mp4'; + return JSON.stringify({ + parse: 0, + url: playUrl, + }); +} + +async function search(wd, quick, pg) { + return '{}'; +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file diff --git a/js/subaibai_open.js b/js/subaibai_open.js new file mode 100644 index 00000000..278ce7aa --- /dev/null +++ b/js/subaibai_open.js @@ -0,0 +1,182 @@ +// 搜索数字验证 +// 20230812 变更 分类&筛选 +import { Crypto, load, _ } from './lib/cat.js'; +let key = "素白白", + url = "https://www.subaibaiys.com", + siteKey = "", + siteType = 0; +const UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1", + cookie = {}; + +async function request(reqUrl, referer, mth, data, hd) { + var headers = { + "User-Agent": UA, + Cookie: _.map(cookie, (value, key) => key + "=" + value).join(";") + }, + referer = (referer && (headers.referer = encodeURIComponent(referer)), await req(reqUrl, { + method: mth || "get", + headers: headers, + data: data, + postType: "post" === mth ? "form" : "" + })); + if (referer.headers["set-cookie"]) + for (const c of (_.isArray(referer.headers["set-cookie"]) ? referer.headers["set-cookie"].join(";") : referer.headers["set-cookie"]).split(";")) { + var tmp = c.trim(); + if (tmp.startsWith("result=")) return cookie.result = tmp.substring(7), request(reqUrl, reqUrl, "post", { + result: cookie.result + }); + if (tmp.startsWith("esc_search_captcha=1")) return cookie.esc_search_captcha = 1, delete cookie.result, request(reqUrl) + } + return referer.content +} + +async function init(cfg) { + siteKey = cfg.skey, siteType = cfg.stype +} + +async function home(filter) { + let classes = [{"type_id":"movie_bt","type_name":"影视筛选"},{"type_id":"new-movie","type_name":"电影"},{"type_id":"tv-drama","type_name":"电视剧"},{"type_id":"hot-month","type_name":"热门电影"},{"type_id":"high-movie","type_name":"高分电影"},{"type_id":"cartoon-movie","type_name":"动漫电影"},{"type_id":"hongkong-movie","type_name":"香港经典电影"},{"type_id":"domestic-drama","type_name":"国产剧"},{"type_id":"american-drama","type_name":"欧美剧"},{"type_id":"korean-drama","type_name":"韩剧"},{"type_id":"anime-drama","type_name":"动漫剧"},{"type_id":"marvel-movies","type_name":"漫威宇宙电影系列"},{"type_id":"fastfurious","type_name":"速度与激情电影系列"},{"type_id":"zero-zero-seven","type_name":"007系列(25部正传+2部外传)"}]; + let filterObj = { + "movie_bt":[{"key":"catedd","name":"分类","value":[{"n":"全部","v":""},{"v":"/movie_bt_series/dongmanju","n":"动漫剧"},{"v":"/movie_bt_series/dongmandy","n":"动漫电影"},{"v":"/movie_bt_series/yindudy","n":"印度电影"},{"v":"/movie_bt_series/guochanju","n":"国产剧"},{"v":"/movie_bt_series/guochandy","n":"国产电影"},{"v":"/movie_bt_series/riju","n":"日剧"},{"v":"/movie_bt_series/rihandy","n":"日韩电影"},{"v":"/movie_bt_series/oumeiju","n":"欧美剧"},{"v":"/movie_bt_series/oumeidy","n":"欧美电影"},{"v":"/movie_bt_series/taiju","n":"泰剧"},{"v":"/movie_bt_series/thaidy","n":"泰国电影"},{"v":"/movie_bt_series/gangju","n":"港台剧"},{"v":"/movie_bt_series/gangtaidy","n":"港台电影"},{"v":"/movie_bt_series/documentary","n":"纪录片"},{"v":"/movie_bt_series/zongyi","n":"综艺"},{"v":"/movie_bt_series/hanju","n":"韩剧"},{"v":"/movie_bt_series/xianggangdy","n":"香港经典电影"}]},{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"v":"/movie_bt_cat/bhutan","n":"不丹"},{"v":"/movie_bt_cat/china","n":"中国"},{"v":"/movie_bt_cat/china-taiwan","n":"中国台湾"},{"v":"/movie_bt_cat/china-mainland","n":"中国大陆"},{"v":"/movie_bt_cat/china-hongkong","n":"中国香港"},{"v":"/movie_bt_cat/denmark","n":"丹麦"},{"v":"/movie_bt_cat/ukraine","n":"乌克兰"},{"v":"/movie_bt_cat/uruguay","n":"乌拉圭"},{"v":"/movie_bt_cat/israel","n":"以色列"},{"v":"/movie_bt_cat/iraq","n":"伊拉克"},{"v":"/movie_bt_cat/iran","n":"伊朗"},{"v":"/movie_bt_cat/russia","n":"俄罗斯"},{"v":"/movie_bt_cat/bulgaria","n":"保加利亚"},{"v":"/movie_bt_cat/croatia","n":"克罗地亚"},{"v":"/movie_bt_cat/iceland","n":"冰岛"},{"v":"/movie_bt_cat/canada","n":"加拿大"},{"v":"/movie_bt_cat/hungary","n":"匈牙利"},{"v":"/movie_bt_cat/south-africa","n":"南非"},{"v":"/movie_bt_cat/botswana","n":"博茨瓦纳"},{"v":"/movie_bt_cat/qatar","n":"卡塔尔"},{"v":"/movie_bt_cat/luxembourg","n":"卢森堡"},{"v":"/movie_bt_cat/india","n":"印度"},{"v":"/movie_bt_cat/indonesia","n":"印度尼西亚"},{"v":"/movie_bt_cat/kazakhstan","n":"哈萨克斯坦"},{"v":"/movie_bt_cat/colombia","n":"哥伦比亚"},{"v":"/movie_bt_cat/turkey","n":"土耳其"},{"v":"/movie_bt_cat/serbia","n":"塞尔维亚"},{"v":"/movie_bt_cat/cyprus","n":"塞浦路斯"},{"v":"/movie_bt_cat/mexico","n":"墨西哥"},{"v":"/movie_bt_cat/dominica","n":"多米尼加"},{"v":"/movie_bt_cat/austria","n":"奥地利"},{"v":"/movie_bt_cat/venezuela","n":"委内瑞拉"},{"v":"/movie_bt_cat/nigeria","n":"尼日利亚"},{"v":"/movie_bt_cat/巴基斯坦","n":"巴基斯坦"},{"v":"/movie_bt_cat/paraguay","n":"巴拉圭"},{"v":"/movie_bt_cat/brazil","n":"巴西"},{"v":"/movie_bt_cat/greece","n":"希腊"},{"v":"/movie_bt_cat/germany","n":"德国"},{"v":"/movie_bt_cat/italy","n":"意大利"},{"v":"/movie_bt_cat/latvia","n":"拉脱维亚"},{"v":"/movie_bt_cat/norway","n":"挪威"},{"v":"/movie_bt_cat/chech","n":"捷克"},{"v":"/movie_bt_cat/摩洛哥","n":"摩洛哥"},{"v":"/movie_bt_cat/斯洛伐克","n":"斯洛伐克"},{"v":"/movie_bt_cat/slovenia","n":"斯洛文尼亚"},{"v":"/movie_bt_cat/singapore","n":"新加坡"},{"v":"/movie_bt_cat/zealand","n":"新西兰"},{"v":"/movie_bt_cat/japan","n":"日本"},{"v":"/movie_bt_cat/chile","n":"智利"},{"v":"/movie_bt_cat/north-korea","n":"朝鲜"},{"v":"/movie_bt_cat/cambodia","n":"柬埔寨"},{"v":"/movie_bt_cat/georgia","n":"格鲁吉亚"},{"v":"/movie_bt_cat/belgium","n":"比利时"},{"v":"/movie_bt_cat/saudi-arabia","n":"沙特阿拉伯"},{"v":"/movie_bt_cat/france","n":"法国"},{"v":"/movie_bt_cat/poland","n":"波兰"},{"v":"/movie_bt_cat/puertorco","n":"波多黎各"},{"v":"/movie_bt_cat/bohei","n":"波黑"},{"v":"/movie_bt_cat/thailand","n":"泰国"},{"v":"/movie_bt_cat/australia","n":"澳大利亚"},{"v":"/movie_bt_cat/ireland","n":"爱尔兰"},{"v":"/movie_bt_cat/estonia","n":"爱沙尼亚"},{"v":"/movie_bt_cat/sweden","n":"瑞典"},{"v":"/movie_bt_cat/switzerland","n":"瑞士"},{"v":"/movie_bt_cat/belarus","n":"白俄罗斯"},{"v":"/movie_bt_cat/peru","n":"秘鲁"},{"v":"/movie_bt_cat/tunisia","n":"突尼斯"},{"v":"/movie_bt_cat/lithuania","n":"立陶宛"},{"v":"/movie_bt_cat/romania","n":"罗马尼亚"},{"v":"/movie_bt_cat/america","n":"美国"},{"v":"/movie_bt_cat/finland","n":"芬兰"},{"v":"/movie_bt_cat/sovietunion","n":"苏联"},{"v":"/movie_bt_cat/england","n":"英国"},{"v":"/movie_bt_cat/netherlands","n":"荷兰"},{"v":"/movie_bt_cat/philippines","n":"菲律宾"},{"v":"/movie_bt_cat/葡萄牙","n":"葡萄牙"},{"v":"/movie_bt_cat/west-germany","n":"西德"},{"v":"/movie_bt_cat/spain","n":"西班牙"},{"v":"/movie_bt_cat/vietnam","n":"越南"},{"v":"/movie_bt_cat/argentina","n":"阿根廷"},{"v":"/movie_bt_cat/korea","n":"韩国"},{"v":"/movie_bt_cat/malaysia","n":"马来西亚"},{"v":"/movie_bt_cat/马耳他","n":"马耳他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "new-movie":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "tv-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "hot-month":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "high-movie":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "cartoon-movie":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "hongkong-movie":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "domestic-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "american-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "korean-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}], + "anime-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}] + }; + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + return "{}" +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; + var link = url + '/' + tid + (extend.area || '') + (extend.year || '') + (extend.class || '') + (extend.catedd || '') + '/page/' + pg; + var html = await request(link); + var $ = load(html); + var items = $('div.mrb > ul > li'); + var videos = _.map(items, (item) => { + var img = $(item).find('img:first')[0]; + var a = $(item).find('a:first')[0]; + var hdinfo = $($(item).find('div.hdinfo')[0]).text().trim(); + var item = $($(item).find('div.jidi')[0]).text().trim(); + return { + vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'), + vod_name: img.attribs.alt, + vod_pic: img.attribs['data-original'], + vod_remarks: item || hdinfo || '' + }; + }); + var hasMore = $('div.mrb > div.pagenavi_txt > a:contains(>)').length > 0; + var pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 20, + total: 20 * pgCount, + list: videos + }) +} + +function stripHtmlTag(src) { + return src.replace(/<\/?[^>]+(>|$)/g, "").replace(/&.{1,5};/g, "").replace(/\s{2,}/g, " ") +} + +async function detail(id) { + var html = await request(url + "/movie/" + id + ".html"), + $ = load(html), + html = $("ul.moviedteail_list > li"), + vod = { + vod_id: id, + vod_pic: $("div.dyimg img:first").attr("src"), + vod_remarks: "", + vod_content: stripHtmlTag($("div.yp_context").html()).trim() + }; + for (const info of html) { + var i = $(info).text().trim(); + i.startsWith("地区:") ? vod.vod_area = i.substring(3) : i.startsWith("年份:") ? vod.vod_year = i.substring(3) : i.startsWith("导演:") ? vod.vod_director = _.map($(info).find("a"), a => a.children[0].data).join("/") : i.startsWith("主演:") ? vod.vod_actor = _.map($(info).find("a"), a => a.children[0].data).join("/") : i.startsWith("语言:") && (vod.vod_lang = i.substring(3)) + } + id = _.map($("div.paly_list_btn > a"), a => a.children[0].data + "$" + a.attribs.href.replace(/.*?\/v_play\/(.*).html/g, "$1")); + return vod.vod_play_from = key, vod.vod_play_url = id.join("#"), JSON.stringify({ + list: [vod] + }) +} + +async function play(flag, id, flags) { + const link = url + "/v_play/" + id + ".html", + html = await request(link), + $ = load(html), + iframe = $("body iframe[src*=Cloud]"); + if (0 < iframe.length) { + const iframeHtml = (await req(iframe[0].attribs.src, { + headers: { + Referer: link, + "User-Agent": UA + } + })).content; + let code = iframeHtml.match(/var url = '(.*?)'/)[1].split("").reverse().join(""), + temp = ""; + for (let i = 0; i < code.length; i += 2) temp += String.fromCharCode(parseInt(code[i] + code[i + 1], 16)); + const playUrl = temp.substring(0, (temp.length - 7) / 2) + temp.substring((temp.length - 7) / 2 + 7); + return JSON.stringify({ + parse: 0, + url: playUrl + }) + } { + const js = $("script:contains(window.wp_nonce)").html(), + group = js.match(/(var.*)eval\((\w*\(\w*\))\)/), + md5 = Crypto, + result = eval(group[1] + group[2]), + playUrl = result.match(/url:.*?['"](.*?)['"]/)[1]; + return JSON.stringify({ + parse: 0, + url: playUrl + }) + } +} + +async function search(wd, quick) { + wd = await request(url + "/page/1?s=" + wd); + const $ = load(wd); + wd = $("div.search_list > ul > li"), wd = _.map(wd, item => { + var img = $(item).find("img:first")[0], + a = $(item).find("a:first")[0], + hdinfo = $($(item).find("div.hdinfo")[0]).text().trim(), + item = $($(item).find("div.jidi")[0]).text().trim(); + return { + vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, "$1"), + vod_name: img.attribs.alt, + vod_pic: img.attribs["data-original"], + vod_remarks: item || hdinfo || "" + } + }); + return JSON.stringify({ + list: wd + }) +} + +function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search + } +} + +export { + __jsEvalReturn +}; \ No newline at end of file diff --git a/js/wogg_open.js b/js/wogg_open.js new file mode 100644 index 00000000..1d473b71 --- /dev/null +++ b/js/wogg_open.js @@ -0,0 +1,155 @@ +import {load, _, Uri} from './lib/cat.js'; +import {log} from './lib/utils.js'; +import {initAli, detailContent, playContent} from './lib/ali.js'; + +let siteKey = 'wogg'; +let siteType = 0; +let siteUrl = 'https://wogg.xyz'; +let UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; +let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/ + +async function init(cfg) { + try { + siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey; + siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype; + await initAli(cfg); + } catch (e) { + await log('init:' + e.message + ' line:' + e.lineNumber); + } +} + +async function request(reqUrl, agentSp) { + let header = { + 'user-agent': agentSp || 'okhttp/3.12.0', + }; + let uri = new Uri(reqUrl); + let res = await req(uri.toString(), { + headers: header, + timeout: 10000 + }); + let content = res.content; + return content; +} + +function getHeader() { + let header = {}; + header['User-Agent'] = UA; + return header; +} + +async function getString(url) { + let res = await req(url, { + headers: getHeader() + }); + return res.content; +} + +let classes = [{'type_id': 1, 'type_name' : '电影'},{'type_id': 20, 'type_name' : '电视剧'},{'type_id': 28, 'type_name' : '综艺'},{'type_id': 24, 'type_name' : '动漫'},{'type_id': 32, 'type_name' : '音乐'}]; +let filterObj = {}; +async function home(filter) { + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + + +async function homeVod() { + return '{}'; +} + + +async function category(tid, pg, filter, extend) { + let reqUrl = siteUrl + '/index.php/vodshow/'+tid+'--------'+pg+'---.html'; + let con = await request(reqUrl, UA); + const $ = load(con); + let items = $('.module:eq(0) > .module-list > .module-items > .module-item'); + let videos = []; + for(var item of items) { + let oneA = $(item).find('.module-item-cover .module-item-pic a').first(); + let href = oneA.attr('href'); + let name = oneA.attr('title'); + let oneImg = $(item).find('.module-item-cover .module-item-pic img').first(); + let pic = oneImg.attr('data-src'); + let remark = $(item).find('.module-item-text').first().text(); + videos.push({ + vod_id: href, + vod_name: name, + vod_pic: pic, + vod_remarks: remark, + }); + } + + const hasMore = $('#page > a:contains(下一页)').length > 0; + const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); + return JSON.stringify({ + page: parseInt(pg), + pagecount: pgCount, + limit: 72, + total: 72 * pgCount, + list: videos, + }); +} + +async function detail(id) { + try { + await log('detail:id:---' + id); + let preMatches = id.match(patternAli); + if (!_.isEmpty(preMatches)) return await detailContent(preMatches[1]); + let url = siteUrl + id; + let aliUrl = await getString(url); + let matches = aliUrl.match(patternAli); + console.log('detailmatche---'); + console.log(matches[1]); + if (!_.isEmpty(matches)) return await detailContent(matches[1]); + return ''; + } catch (e) { + await log( 'detail:' + e.message + ' line:' + e.lineNumber); + } +} + + +async function play(flag, id, flags) { + try { + return await playContent(flag, id, flags); + } catch (e) { + await log( 'play:' + e.message + ' line:' + e.lineNumber); + } +} + + +async function search(wd, quick) { + await log('search---' + wd); + let searchUrl = siteUrl + '/index.php/vodsearch/-------------.html?wd=' + wd; + let html = await getString(searchUrl); + let $ = load(html); + let items = $('.module-search-item'); + let videos = []; + for(var item of items) { + let vodId = $(item).find(".video-serial")[0].attribs.href; + let name = $(item).find(".video-serial")[0].attribs.title; + let pic = $(item).find(".module-item-pic > img")[0].attribs['data-src']; + let remark = ''; + videos.push({ + vod_id: vodId, + vod_name: name, + vod_pic: pic, + vod_remarks: remark, + }); + } + return JSON.stringify({ + list: videos, + }); +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file diff --git a/js/wrapper/index.js b/js/wrapper/index.js new file mode 100644 index 00000000..a08bbdfc --- /dev/null +++ b/js/wrapper/index.js @@ -0,0 +1,266 @@ +// !!!!! Do not use in release mode. Just a native inject fake wrapper for test spider. !!!!! +// !!!!! Do not use in release mode. Just a native inject fake wrapper for test spider. !!!!! +// !!!!! Do not use in release mode. Just a native inject fake wrapper for test spider. !!!!! +import axios from 'axios'; +import crypto from 'crypto'; +import https from 'https'; +import fs from 'node:fs'; +import qs from 'qs'; +import { Uri, _ } from '../lib/cat.js'; + +const confs = {}; + +function initLocalStorage(storage) { + if (!_.has(confs, storage)) { + if (!fs.existsSync('local')) { + fs.mkdirSync('local'); + } + + const storagePath = 'local/js_' + storage; + + if (!fs.existsSync(storagePath)) { + fs.writeFileSync(storagePath, '{}'); + confs[storage] = {}; + } else { + confs[storage] = JSON.parse(fs.readFileSync(storagePath).toString()); + } + } +} + +function localGet(storage, key) { + initLocalStorage(storage); + return _.get(confs[storage], key, ''); +} + +function localSet(storage, key, value) { + initLocalStorage(storage); + confs[storage][key] = value; + fs.writeFileSync('local/js_' + storage, JSON.stringify(confs[storage])); +} + +async function request(url, opt) { + try { + var data = opt ? opt.data || null : null; + var postType = opt ? opt.postType || null : null; + var returnBuffer = opt ? opt.buffer || 0 : 0; + var timeout = opt ? opt.timeout || 5000 : 5000; + + var headers = opt ? opt.headers || {} : {}; + if (postType == 'form') { + headers['Content-Type'] = 'application/x-www-form-urlencoded'; + + if (data != null) { + data = qs.stringify(data, { encode: false }); + } + } + let respType = returnBuffer == 1 || returnBuffer == 2 ? 'arraybuffer' : undefined; + var resp = await axios(url, { + responseType: respType, + method: opt ? opt.method || 'get' : 'get', + headers: headers, + data: data, + timeout: timeout, + httpsAgent: https.Agent({ + rejectUnauthorized: false, + }), + }); + var data = resp.data; + + var resHeader = {}; + for (const hks of resp.headers) { + var v = hks[1]; + resHeader[hks[0]] = Array.isArray(v) ? (v.length == 1 ? v[0] : v) : v; + } + + if (!returnBuffer) { + if (typeof data === 'object') { + data = JSON.stringify(data); + } + } else if (returnBuffer == 1) { + return { code: resp.status, headers: resHeader, content: data }; + } else if (returnBuffer == 2) { + return { code: resp.status, headers: resHeader, content: data.toString('base64') }; + } + return { code: resp.status, headers: resHeader, content: data }; + } catch (error) { + console.error(error); + } + return { headers: {}, content: '' }; +} + +function base64EncodeBuf(buff, urlsafe = false) { + return buff.toString(urlsafe ? 'base64url' : 'base64'); +} + +function base64Encode(text, urlsafe = false) { + return base64EncodeBuf(Buffer.from(text, 'utf8'), urlsafe); +} + +function base64DecodeBuf(text) { + return Buffer.from(text, 'base64'); +} + +function base64Decode(text) { + return base64DecodeBuf(text).toString('utf8'); +} + +function md5(text) { + return crypto.createHash('md5').update(Buffer.from(text, 'utf8')).digest('hex'); +} + +function aes(mode, encrypt, input, inBase64, key, iv, outBase64) { + if (iv.length == 0) iv = null; + try { + if (mode.startsWith('AES/CBC')) { + switch (key.length) { + case 16: + mode = 'aes-128-cbc'; + break; + case 32: + mode = 'aes-256-cbc'; + break; + } + } else if (mode.startsWith('AES/ECB')) { + switch (key.length) { + case 16: + mode = 'aes-128-ecb'; + break; + case 32: + mode = 'aes-256-ecb'; + break; + } + } + const inBuf = inBase64 ? base64DecodeBuf(input) : Buffer.from(input, 'utf8'); + let keyBuf = Buffer.from(key); + if (keyBuf.length < 16) keyBuf = Buffer.concat([keyBuf], 16); + let ivBuf = iv == null ? Buffer.alloc(0) : Buffer.from(iv); + if (iv != null && ivBuf.length < 16) ivBuf = Buffer.concat([ivBuf], 16); + const cipher = encrypt ? crypto.createCipheriv(mode, keyBuf, ivBuf) : crypto.createDecipheriv(mode, keyBuf, ivBuf); + const outBuf = Buffer.concat([cipher.update(inBuf), cipher.final()]); + return outBase64 ? base64EncodeBuf(outBuf) : outBuf.toString('utf8'); + } catch (error) { + console.log(error); + } + return ''; +} + +function des(mode, encrypt, input, inBase64, key, iv, outBase64) { + try { + if (mode.startsWith('DESede/CBC')) { + // https://stackoverflow.com/questions/29831300/convert-desede-ecb-nopadding-algorithm-written-in-java-into-nodejs-using-crypto + switch (key.length) { + case 16: + mode = 'des-ede-cbc'; + break; + case 24: + mode = 'des-ede3-cbc'; + break; + } + } + const inBuf = inBase64 ? base64DecodeBuf(input) : Buffer.from(input, 'utf8'); + let keyBuf = Buffer.from(key); + if (keyBuf.length < 16) keyBuf = Buffer.concat([keyBuf], 16); + let ivBuf = iv == null ? Buffer.alloc(0) : Buffer.from(iv); + if (iv != null && ivBuf.length < 8) ivBuf = Buffer.concat([ivBuf], 8); + const cipher = encrypt ? crypto.createCipheriv(mode, keyBuf, ivBuf) : crypto.createDecipheriv(mode, keyBuf, ivBuf); + const outBuf = Buffer.concat([cipher.update(inBuf), cipher.final()]); + return outBase64 ? base64EncodeBuf(outBuf) : outBuf.toString('utf8'); + } catch (error) { + console.log(error); + } + return ''; +} + +// pkcs8 only +function rsa(mode, pub, encrypt, input, inBase64, key, outBase64) { + try { + let pd = undefined; + const keyObj = pub ? crypto.createPublicKey(key) : crypto.createPrivateKey(key); + if (!keyObj.asymmetricKeyDetails || !keyObj.asymmetricKeyDetails.modulusLength) return ''; + const moduleLen = keyObj.asymmetricKeyDetails.modulusLength; + let blockLen = moduleLen / 8; + switch (mode) { + case 'RSA/PKCS1': + pd = crypto.constants.RSA_PKCS1_PADDING; + blockLen = encrypt ? blockLen - 11 : blockLen; + break; + case 'RSA/None/NoPadding': + pd = crypto.constants.RSA_NO_PADDING; + break; + case 'RSA/None/OAEPPadding': + pd = crypto.constants.RSA_PKCS1_OAEP_PADDING; + blockLen = encrypt ? blockLen - 41 : blockLen; + break; + default: + throw Error('not support ' + mode); + } + let inBuf = inBase64 ? base64DecodeBuf(input) : Buffer.from(input, 'utf8'); + let bufIdx = 0; + let outBuf = Buffer.alloc(0); + while (bufIdx < inBuf.length) { + const bufEndIdx = Math.min(bufIdx + blockLen, inBuf.length); + let tmpInBuf = inBuf.subarray(bufIdx, bufEndIdx); + if (pd == crypto.constants.RSA_NO_PADDING) { + if (tmpInBuf.length < blockLen) { + tmpInBuf = Buffer.concat([Buffer.alloc(128 - tmpInBuf.length), tmpInBuf]); + } + } + let tmpBuf; + if (pub) { + tmpBuf = encrypt ? crypto.publicEncrypt({ key: keyObj, padding: pd }, tmpInBuf) : crypto.publicDecrypt({ key: keyObj, padding: pd }, tmpInBuf); + } else { + tmpBuf = encrypt ? crypto.privateEncrypt({ key: keyObj, padding: pd }, tmpInBuf) : crypto.privateDecrypt({ key: keyObj, padding: pd }, tmpInBuf); + } + bufIdx = bufEndIdx; + outBuf = Buffer.concat([outBuf, tmpBuf]); + } + return outBase64 ? base64EncodeBuf(outBuf) : outBuf.toString('utf8'); + } catch (error) { + console.log(error); + } + return ''; +} + +var charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789'; + +function randStr(len, withNum) { + var _str = ''; + let containsNum = withNum === undefined ? true : withNum; + for (var i = 0; i < len; i++) { + let idx = _.random(0, containsNum ? charStr.length - 1 : charStr.length - 11); + _str += charStr[idx]; + } + return _str; +} + +globalThis.local = { + get: async function (storage, key) { + return localGet(storage, key); + }, + set: async function (storage, key, val) { + localSet(storage, key, val); + }, +}; + +globalThis.md5X = md5; +globalThis.rsaX = rsa; +globalThis.aesX = aes; +globalThis.desX = des; + +globalThis.req = request; + +globalThis.url2Proxy = async function (type, url, headers) { + let hd = Object.keys(headers).length == 0 ? '_' : encodeURIComponent(JSON.stringify(headers)); + let uri = new Uri(url); + let path = uri.path(); + path = path.substring(path.lastIndexOf('/')); + let ext = path.indexOf('.') >= 0 ? path.substring(path.indexOf('.')) : '.bin'; + return 'http://127.0.0.1:13333/up/' + randStr(6) + '/' + type + '/' + hd + '/' + encodeURIComponent(url) + '/' + ext; +}; + +globalThis.js2Proxy = async function (dynamic, siteType, site, url, headers) { + let hd = Object.keys(headers).length == 0 ? '_' : encodeURIComponent(JSON.stringify(headers)); + return (dynamic ? 'js2p://_WEB_/' : 'http://127.0.0.1:13333/jp/') + randStr(6) + '/' + siteType + '/' + site + '/' + hd + '/' + encodeURIComponent(url); +}; + +export default {}; diff --git a/lib/boosj_open.js b/lib/boosj_open.js deleted file mode 100644 index caa0c420..00000000 --- a/lib/boosj_open.js +++ /dev/null @@ -1,190 +0,0 @@ -import { load, _ } from './lib/cat.js'; - -let key = '童趣'; -let HOST = 'https://www.boosj.com'; -let siteKey = ''; -let siteType = 0; - -const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36'; - -async function request(reqUrl, agentSp) { - let res = await req(reqUrl, { - method: 'get', - headers: { - 'User-Agent': agentSp || MOBILE_UA, - 'Referer': HOST - }, - }); - return res.content; -} - -// cfg = {skey: siteKey, ext: extend} -async function init(cfg) { - siteKey = cfg.skey; - siteType = cfg.stype; -} - -async function home(filter) { - const classes = [{ type_id: '', type_name: '全部' }, { type_id: 28, type_name: '辅食' }, { type_id: 582, type_name: '动画' }, { type_id: 3364, type_name: '儿童舞蹈' }, { type_id: 3366, type_name: '少儿英语' }, { type_id: 3367, type_name: '儿童歌曲' }, { type_id: 3622, type_name: '才艺' }, { type_id: 3782, type_name: '播视自制' }, { type_id: 3822, type_name: '故事' }, { type_id: 3842, type_name: '亲子教育' }, { type_id: 4402, type_name: '美术' }, { type_id: 4583, type_name: '其他' }, { type_id: 4762, type_name: '儿童游戏' }, { type_id: 4842, type_name: '识物' }, { type_id: 4843, type_name: '绘本' }, { type_id: 4844, type_name: '古诗' }, { type_id: 4845, type_name: '科普' }, { type_id: 5102, type_name: '儿童玩具' }, { type_id: 5142, type_name: '播视童趣儿童玩具' }]; - const filterObj = {}; - const jsonData = [ - { - key: 'age', - name: '年龄段', - value: [ - { n: '全部', v: '' }, - { n: '6岁以上', v: '?p367=370' }, - { n: '3~6岁', v: '?p367=369' }, - { n: '0~3岁', v: '?p367=368' }, - ], - init: '', - }, - { - key: 'by', - name: '排序', - value: [ - { n: '全部', v: '' }, - { n: '最新发布', v: 'lately' }, - { n: '最多播放', v: 'pop' }, - { n: '最多评论', v: 'view' }, - ], - init: '', - }, - ]; - return JSON.stringify({ - class: _.map(classes, (cls) => { - cls.land = 1; - cls.ratio = 1.78; - filterObj[cls.type_id] = jsonData; - return cls; - }), - filters: filterObj, - }); -} - -async function homeVod() { - const link = HOST + '/search_res_3362__3364_1_.html'; - const html = await request(link); - const $ = load(html); - const items = $('body div.bj-col4:has(h3)'); - let videos = _.map(items, (it) => { - const a = $(it).find('a:first')[0]; - const img = $(it).find('img:first')[0]; - const remarks = $(it).find('span.played')[0]; - return { - vod_id: a.attribs.href, - vod_name: a.attribs.title, - vod_pic: img.attribs['data-original'], - vod_remarks: remarks.children[0].data || '', - }; - }); - return JSON.stringify({ - list: videos, - }); -} - -async function category(tid, pg, filter, extend) { - if (pg <= 0 || typeof (pg) == 'undefined') pg = 1; - const link = HOST + '/search_res_3362__' + tid + '_' + pg + '_' + (extend.by || '') + '.html' + (extend.age || ''); - const html = await request(link); - const $ = load(html); - const items = $('body div.bj-col4:has(h3)'); - let videos = _.map(items, (it) => { - const a = $(it).find('a:first')[0]; - const img = $(it).find('img:first')[0]; - const remarks = $(it).find('span.played')[0]; - return { - vod_id: a.attribs.href, - vod_name: a.attribs.title, - vod_pic: img.attribs['data-original'], - vod_remarks: remarks.children[0].data || '', - }; - }); - const hasMore = $('div.pub_paging > a:contains(下一页)').length > 0; - const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); - return JSON.stringify({ - page: parseInt(pg), - pagecount: pgCount, - limit: 30, - total: 30 * pgCount, - list: videos, - }); -} - -async function detail(id) { - const vod = { - vod_id: id, - vod_remarks: "", - }; - const playlist = ["点击播放" + "$" + vod.vod_id]; - vod.vod_play_from = "道长在线"; - vod.vod_play_url = playlist.join("#"); - return JSON.stringify({ - list: [vod], - }); -} - -async function play(flag, id, flags) { - const body = JSON.parse(await request('https://gslb.boosj.com/ipv2.json')); - body._id = id.match(/\d+/)[0]; - const json = JSON.parse(await request(buildUrl(body.gslb, body))); - const purl = json.url + '?' + json.t - // console.debug('童趣purl =====>' + purl); // js_debug.log - let headers = { - 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 9; 22081212C Build/PQ3B.190801.002)', - }; - return JSON.stringify({ - parse: 0, - url: purl, - header: headers, - }); -} - -async function search(wd, quick) { - var data = JSON.parse(await request('https://search.boosj.com/m_ajax?q=' + wd + '&p=' + pg + '&typeId=3362')).body; - let videos = _.map(data.result, (it) => { - return { - vod_id: it.playUrl, - vod_name: it.resourceName, - vod_pic: it.imageUrl, - vod_remarks: it.clickNumStr || '', - } - }); - return JSON.stringify({ - page: parseInt(pg), - pagecount: data.pageCount, - limit: 30, - total: data.rowCount, - list: videos, - }); -} - -function buildUrl(url, obj) { - obj = obj || {}; - if (url.indexOf('?') < 0) { - url += '?' - } - let param_list = []; - let keys = Object.keys(obj); - keys.forEach(it => { - param_list.push(it + '=' + obj[it]) - }); - let prs = param_list.join('&'); - if (keys.length > 0 && !url.endsWith('?')) { - url += '&' - } - url += prs; - return url -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - }; -} \ No newline at end of file diff --git a/lib/cat.js b/lib/cat.js deleted file mode 100644 index 63f5cf74..00000000 --- a/lib/cat.js +++ /dev/null @@ -1 +0,0 @@ -var e,pe,t=function(){return(t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{var t;return{name:e,value:this.attribs[e],namespace:null==(t=this["x-attribsNamespace"])?void 0:t[e],prefix:null==(t=this["x-attribsPrefix"])?void 0:t[e]}})}}function S(t){return t.type===e.Tag||t.type===e.Script||t.type===e.Style}function C(t){return t.type===e.CDATA}function N(t){return t.type===e.Text}function b(t){return t.type===e.Comment}function I(t){return t.type===e.Directive}function O(t){return t.type===e.Root}function k(e){return Object.prototype.hasOwnProperty.call(e,"children")}function L(e,t=!1){let n;if(N(e))n=new _(e.data);else if(b(e))n=new E(e.data);else if(S(e)){const r=t?D(e.children):[],i=new y(e.name,{...e.attribs},r);r.forEach(e=>e.parent=i),null!=e.namespace&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]={...e["x-attribsNamespace"]}),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]={...e["x-attribsPrefix"]}),n=i}else if(C(e)){const r=t?D(e.children):[],i=new g(r);r.forEach(e=>e.parent=i),n=i}else if(O(e)){const r=t?D(e.children):[],i=new v(r);r.forEach(e=>e.parent=i),e["x-mode"]&&(i["x-mode"]=e["x-mode"]),n=i}else{if(!I(e))throw new Error("Not implemented yet: "+e.type);{const t=new T(e.name,e.data);null!=e["x-name"]&&(t["x-name"]=e["x-name"],t["x-publicId"]=e["x-publicId"],t["x-systemId"]=e["x-systemId"]),n=t}}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function D(e){var t=e.map(e=>L(e,!0));for(let e=1;e$\x80-\uFFFF]/g,M=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]),P=null!=String.prototype.codePointAt?(e,t)=>e.codePointAt(t):(e,t)=>55296==(64512&e.charCodeAt(t))?1024*(e.charCodeAt(t)-55296)+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t);function B(e){let t,n="",r=0;for(;null!==(t=x.exec(e));){var i=t.index,s=e.charCodeAt(i),a=M.get(s);r=void 0!==a?(n+=e.substring(r,i)+a,i+1):(n+=`${e.substring(r,i)}&#x${P(e,i).toString(16)};`,x.lastIndex+=Number(55296==(64512&s)))}return n+e.substr(r)}function F(e,t){return function(n){let r,i=0,s="";for(;r=e.exec(n);)i!==r.index&&(s+=n.substring(i,r.index)),s+=t.get(r[0].charCodeAt(0)),i=r.index+1;return s+n.substring(i)}}const U=F(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),H=F(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]])),G=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),j=new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),q=new Set(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]);function Y(e){return e.replace(/"/g,""")}const K=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]);function W(e,t={}){var n="length"in e?e:[e];let r="";for(let e=0;e`;case c:return``;case f:return``;case u:case l:case h:return function(e,t){!(t="foreign"===t.xmlMode&&(e.name=null!=(n=G.get(e.name))?n:e.name,e.parent)&&$.has(e.parent.name)?{...t,xmlMode:!1}:t).xmlMode&&Q.has(e.name)&&(t={...t,xmlMode:"foreign"});let r="<"+e.name;var n=function(e,t){var n;if(e){const r=!1===(null!=(n=t.encodeEntities)?n:t.decodeEntities)?Y:t.xmlMode||"utf8"!==t.encodeEntities?B:U;return Object.keys(e).map(n=>{var s,i=null!=(i=e[n])?i:"";return"foreign"===t.xmlMode&&(n=null!=(s=j.get(n))?s:n),t.emptyAttrs||t.xmlMode||""!==i?`${n}="${r(i)}"`:n}).join(" ")}}(e.attribs,t);return n&&(r+=" "+n),0===e.children.length&&(t.xmlMode?!1!==t.selfClosingTags:t.selfClosingTags&&K.has(e.name))?(t.xmlMode||(r+=" "),r+="/>"):(r+=">",0`)),r}(e,t);case a:return function(e,t){var n,r=e.data||"";return!1===(null!=(n=t.encodeEntities)?n:t.decodeEntities)||!t.xmlMode&&e.parent&&q.has(e.parent.name)?r:(t.xmlMode||"utf8"!==t.encodeEntities?B:H)(r)}(e,t)}}const $=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),Q=new Set(["svg","math"]);function z(e,t){return W(e,t)}function X(e){return Array.isArray(e)?e.map(X).join(""):k(e)&&!b(e)?X(e.children):N(e)?e.data:""}function Z(t){return Array.isArray(t)?t.map(Z).join(""):k(t)&&(t.type===e.Tag||C(t))?Z(t.children):N(t)?t.data:""}function J(e){return k(e)?e.children:[]}function ee(e){return e.parent||null}function te(e){var t=ee(e);if(null!=t)return J(t);var n=[e];let{prev:r,next:i}=e;for(;null!=r;)n.unshift(r),{prev:r}=r;for(;null!=i;)n.push(i),{next:i}=i;return n}function ne(e){let t=e.next;for(;null!==t&&!S(t);)({next:t}=t);return t}function re(e){let t=e.prev;for(;null!==t&&!S(t);)({prev:t}=t);return t}function ie(e){var t,n;e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent&&0<=(n=(t=e.parent.children).lastIndexOf(e))&&t.splice(n,1),e.next=null,e.prev=null,e.parent=null}function se(e,t,n=!0,r=1/0){return ae(e,Array.isArray(t)?t:[t],n,r)}function ae(e,t,n,r){for(var i=[],s=[t],a=[0];;)if(a[0]>=s[0].length){if(1===a.length)return i;s.shift(),a.shift()}else{const t=s[0][a[0]++];if(e(t)&&(i.push(t),--r<=0))return i;n&&k(t)&&0"function"==typeof e?t=>S(t)&&e(t.name):"*"===e?S:t=>S(t)&&t.name===e,tag_type:e=>"function"==typeof e?t=>e(t.type):t=>t.type===e,tag_contains:e=>"function"==typeof e?t=>N(t)&&e(t.data):t=>N(t)&&t.data===e};function ue(e,t){return"function"==typeof t?n=>S(n)&&t(n.attribs[e]):n=>S(n)&&n.attribs[e]===t}function le(e,t){return n=>e(n)||t(n)}function he(e){var t=Object.keys(e).map(t=>{var n=e[t];return Object.prototype.hasOwnProperty.call(ce,t)?ce[t](n):ue(t,n)});return 0===t.length?null:t.reduce(le)}function fe(e,t,n=!0,r=1/0){return se(ce.tag_name(e),t,n,r)}function de(e,t){var n=[],r=[];if(e===t)return 0;let i=k(e)?e:e.parent;for(;i;)n.unshift(i),i=i.parent;for(i=k(t)?t:t.parent;i;)r.unshift(i),i=i.parent;var o,c,u,l,s=Math.min(n.length,r.length);let a=0;for(;ac.indexOf(l)?o===t?pe.FOLLOWING|pe.CONTAINED_BY:pe.FOLLOWING:o===e?pe.PRECEDING|pe.CONTAINS:pe.PRECEDING)}function me(e){return(e=e.filter((e,t,n)=>!n.includes(e,t+1))).sort((e,t)=>(e=de(e,t))&pe.PRECEDING?-1:e&pe.FOLLOWING?1:0),e}!function(e){e[e.DISCONNECTED=1]="DISCONNECTED",e[e.PRECEDING=2]="PRECEDING",e[e.FOLLOWING=4]="FOLLOWING",e[e.CONTAINS=8]="CONTAINS",e[e.CONTAINED_BY=16]="CONTAINED_BY"}(pe=pe||{});const _e=["url","type","lang"],Ee=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function Te(e){return fe("media:content",e).map(e=>{var t=e.attribs,n={medium:t.medium,isDefault:!!t.isDefault};for(const e of _e)t[e]&&(n[e]=t[e]);for(const e of Ee)t[e]&&(n[e]=parseInt(t[e],10));return t.expression&&(n.expression=t.expression),n})}function Ae(e,t){return fe(e,t,!0,1)[0]}function ge(e,t,n=!1){return X(fe(e,t,n,1)).trim()}function ve(e,t,n,r,i=!1){(n=ge(n,r,i))&&(e[t]=n)}function ye(e){return"rss"===e||"feed"===e||"rdf:RDF"===e}var Se=Object.freeze({__proto__:null,isTag:S,isCDATA:C,isText:N,isComment:b,isDocument:O,hasChildren:k,getOuterHTML:z,getInnerHTML:function(e,t){return k(e)?e.children.map(e=>z(e,t)).join(""):""},getText:function e(t){return Array.isArray(t)?t.map(e).join(""):S(t)?"br"===t.name?"\n":e(t.children):C(t)?e(t.children):N(t)?t.data:""},textContent:X,innerText:Z,getChildren:J,getParent:ee,getSiblings:te,getAttributeValue:function(e,t){return null==(e=e.attribs)?void 0:e[t]},hasAttrib:function(e,t){return null!=e.attribs&&Object.prototype.hasOwnProperty.call(e.attribs,t)&&null!=e.attribs[t]},getName:function(e){return e.name},nextElementSibling:ne,prevElementSibling:re,removeElement:ie,replaceElement:function(e,t){const n=t.prev=e.prev;n&&(n.next=t);var r=t.next=e.next;if(r&&(r.prev=t),r=t.parent=e.parent){const n=r.children;n[n.lastIndexOf(e)]=t,e.parent=null}},appendChild:function(e,t){ie(t),t.next=null,1<(t.parent=e).children.push(t)?((e=e.children[e.children.length-2]).next=t).prev=e:t.prev=null},append:function(e,t){ie(t);var n=e.parent,r=e.next;if(t.next=r,((t.prev=e).next=t).parent=n,r){if(r.prev=t,n){const e=n.children;e.splice(e.lastIndexOf(r),0,t)}}else n&&n.children.push(t)},prependChild:function(e,t){ie(t),t.parent=e,t.prev=null,1!==e.children.unshift(t)?((e=e.children[1]).prev=t).next=e:t.next=null},prepend:function(e,t){ie(t);var r,n=e.parent;n&&(r=n.children).splice(r.indexOf(e),0,t),e.prev&&(e.prev.next=t),t.parent=n,t.prev=e.prev,(t.next=e).prev=t},filter:se,find:ae,findOneChild:function(e,t){return t.find(e)},findOne:oe,existsOne:function e(t,n){return n.some(n=>S(n)&&(t(n)||e(t,n.children)))},findAll:function(e,t){for(var n=[],r=[t],i=[0];;)if(i[0]>=r[0].length){if(1===r.length)return n;r.shift(),i.shift()}else{const t=r[0][i[0]++];S(t)&&(e(t)&&n.push(t),0{var r={media:Te(e=e.children)},t=(ve(r,"id","id",e),ve(r,"title","title",e),null==(t=Ae("link",e))?void 0:t.attribs.href);return t&&(r.link=t),(t=ge("summary",e)||ge("content",e))&&(r.description=t),(t=ge("updated",e))&&(r.pubDate=new Date(t)),r})},t=(ve(r,"id","id",e),ve(r,"title","title",e),null==(t=Ae("link",e))?void 0:t.attribs.href);return t&&(r.link=t),ve(r,"description","subtitle",e),(t=ge("updated",e))&&(r.updated=new Date(t)),ve(r,"author","email",e,!0),r}:function(e){var t=null!=(t=null==(t=Ae("channel",e.children))?void 0:t.children)?t:[],e={type:e.name.substr(0,3),id:"",items:fe("item",e.children).map(e=>{var n={media:Te(e=e.children)};return ve(n,"id","guid",e),ve(n,"title","title",e),ve(n,"link","link",e),ve(n,"description","description",e),(e=ge("pubDate",e)||ge("dc:date",e))&&(n.pubDate=new Date(e)),n})},s=(ve(e,"title","title",t),ve(e,"link","link",t),ve(e,"description","description",t),ge("lastBuildDate",t));return s&&(e.updated=new Date(s)),ve(e,"author","managingEditor",t,!0),e})(e):null}}),Ce=function(){return(Ce=Object.assign||function(e){for(var t,n=1,r=arguments.length;ne.length-3)&&((n=e.charCodeAt(t+1))>=xe.LowerA&&n<=xe.LowerZ||n>=xe.UpperA&&n<=xe.UpperZ||n===xe.Exclamation)&&e.includes(">",t+2)}!function(e){e[e.LowerA=97]="LowerA",e[e.LowerZ=122]="LowerZ",e[e.UpperA=65]="UpperA",e[e.UpperZ=90]="UpperZ",e[e.Exclamation=33]="Exclamation"}(xe=xe||{});var He=Object.prototype.hasOwnProperty,Ge=/\s+/,je="data-",qe={null:null,true:!0,false:!1},Ye=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,Ke=/^{[^]*}$|^\[[^]*]$/;function We(e,t,n){if(e&&S(e))return null==e.attribs&&(e.attribs={}),t?He.call(e.attribs,t)?!n&&Ye.test(t)?t:e.attribs[t]:"option"===e.name&&"value"===t?Oe(e.children):"input"!==e.name||"radio"!==e.attribs.type&&"checkbox"!==e.attribs.type||"value"!==t?void 0:"on":e.attribs}function Ve(e,t,n){null===n?Ze(e,t):e.attribs[t]="".concat(n)}function $e(e,t,n){return t in e?e[t]:!n&&Ye.test(t)?void 0!==We(e,t,!1):We(e,t,n)}function Qe(e,t,n,r){t in e?e[t]=n:Ve(e,t,!r&&Ye.test(t)?n?"":null:"".concat(n))}function ze(e,t,n){null==e.data&&(e.data={}),"object"==typeof t?Object.assign(e.data,t):"string"==typeof t&&void 0!==n&&(e.data[t]=n)}function Xe(e,t){for(var n,i,r=null==t?(n=Object.keys(e.attribs).filter(function(e){return e.startsWith(je)})).map(function(e){return e.slice(je.length).replace(/[_.-](\w|$)/g,function(e,t){return t.toUpperCase()})}):(n=[je+t.replace(/[A-Z]/g,"-$&").toLowerCase()],[t]),a=0;a").parent().html();case"innerHTML":return this.html();default:return $e(i,e,this.options.xmlMode)}}if("object"==typeof e||void 0!==t){if("function"!=typeof t)return Be(this,function(n){S(n)&&("object"==typeof e?Object.keys(e).forEach(function(t){var i=e[t];Qe(n,t,i,r.options.xmlMode)}):Qe(n,e,t,r.options.xmlMode))});if("object"==typeof e)throw new Error("Bad combination of arguments.");return Be(this,function(n,i){S(n)&&Qe(n,e,t.call(n,i,$e(n,e,r.options.xmlMode)),r.options.xmlMode)})}},data:function(e,t){var r=this[0];if(r&&S(r))return null==r.data&&(r.data={}),e?"object"==typeof e||void 0!==t?(Be(this,function(n){S(n)&&("object"==typeof e?ze(n,e):ze(n,e,t))}),this):He.call(r.data,e)?r.data[e]:Xe(r,e):Xe(r)},val:function(e){var t=0===arguments.length,n=this[0];if(!n||!S(n))return t?void 0:this;switch(n.name){case"textarea":return this.text(e);case"select":var r=this.find("option:selected");if(t)return this.attr("multiple")?r.toArray().map(function(e){return Oe(e.children)}):r.attr("value");if(null!=this.attr("multiple")||"object"!=typeof e){this.find("option").removeAttr("selected");for(var i="object"!=typeof e?[e]:e,s=0;s>10|55296,1023&r|56320)}function lt(e){return e.replace(it,ut)}function ht(e){return 39===e||34===e}function ft(e){return 32===e||9===e||10===e||12===e||13===e}function pt(e){var t=[],n=dt(t,""+e,0);if(n>=1)):e.type===et.Pseudo&&(e.data?"has"===e.name||"contains"===e.name?r=0:Array.isArray(e.data)?(r=Math.min(...e.data.map(e=>Math.min(...e.map(vt)))))<0&&(r=0):r=2:r=3),r}const yt=/[-[\]{}()*+?.,\\^$|#\s]/g;function St(e){return e.replace(yt,"\\$&")}const Ct=new Set(["accept","accept-charset","align","alink","axis","bgcolor","charset","checked","clear","codetype","color","compact","declare","defer","dir","direction","disabled","enctype","face","frame","hreflang","http-equiv","lang","language","link","media","method","multiple","nohref","noresize","noshade","nowrap","readonly","rel","rev","rules","scope","scrolling","selected","shape","target","text","type","valign","valuetype","vlink"]);function Nt(e,t){return"boolean"==typeof e.ignoreCase?e.ignoreCase:"quirks"===e.ignoreCase?!!t.quirksMode:!t.xmlMode&&Ct.has(e.name)}const bt={equals(e,t,n){const r=n.adapter,i=t.name;let s=t.value;return Nt(t,n)?(s=s.toLowerCase(),t=>{var n=r.getAttributeValue(t,i);return null!=n&&n.length===s.length&&n.toLowerCase()===s&&e(t)}):t=>r.getAttributeValue(t,i)===s&&e(t)},hyphen(e,t,n){const r=n.adapter,i=t.name;let s=t.value;const a=s.length;return Nt(t,n)?(s=s.toLowerCase(),function(t){var n=r.getAttributeValue(t,i);return null!=n&&(n.length===a||"-"===n.charAt(a))&&n.substr(0,a).toLowerCase()===s&&e(t)}):function(t){var n=r.getAttributeValue(t,i);return null!=n&&(n.length===a||"-"===n.charAt(a))&&n.substr(0,a)===s&&e(t)}},element(e,t,n){const r=n.adapter,{name:i,value:s}=t;if(/\s/.test(s))return mt.falseFunc;const a=new RegExp(`(?:^|\\s)${St(s)}(?:$|\\s)`,Nt(t,n)?"i":"");return function(t){var n=r.getAttributeValue(t,i);return null!=n&&n.length>=s.length&&a.test(n)&&e(t)}},exists:(e,{name:t},{adapter:n})=>r=>n.hasAttrib(r,t)&&e(r),start(e,t,n){const r=n.adapter,i=t.name;let s=t.value;const a=s.length;return 0===a?mt.falseFunc:Nt(t,n)?(s=s.toLowerCase(),t=>{var n=r.getAttributeValue(t,i);return null!=n&&n.length>=a&&n.substr(0,a).toLowerCase()===s&&e(t)}):t=>{var n;return!(null==(n=r.getAttributeValue(t,i))||!n.startsWith(s))&&e(t)}},end(e,t,n){const r=n.adapter,i=t.name;let s=t.value;const a=-s.length;return 0==a?mt.falseFunc:Nt(t,n)?(s=s.toLowerCase(),t=>{var n;return(null==(n=r.getAttributeValue(t,i))?void 0:n.substr(a).toLowerCase())===s&&e(t)}):t=>{var n;return!(null==(n=r.getAttributeValue(t,i))||!n.endsWith(s))&&e(t)}},any(e,t,n){const r=n.adapter,{name:i,value:s}=t;if(""===s)return mt.falseFunc;if(Nt(t,n)){const t=new RegExp(St(s),"i");return function(n){var a=r.getAttributeValue(n,i);return null!=a&&a.length>=s.length&&t.test(a)&&e(n)}}return t=>{var n;return!(null==(n=r.getAttributeValue(t,i))||!n.includes(s))&&e(t)}},not(e,t,n){const r=n.adapter,i=t.name;let s=t.value;return""===s?t=>!!r.getAttributeValue(t,i)&&e(t):Nt(t,n)?(s=s.toLowerCase(),t=>{var n=r.getAttributeValue(t,i);return(null==n||n.length!==s.length||n.toLowerCase()!==s)&&e(t)}):t=>r.getAttributeValue(t,i)!==s&&e(t)}},It=new Set([9,10,12,13,32]),Ot="0".charCodeAt(0),kt="9".charCodeAt(0);function Lt(e){return function(e){const t=e[0],n=e[1]-1;if(n<0&&t<=0)return mt.falseFunc;if(-1===t)return e=>e<=n;if(0===t)return e=>e===n;if(1===t)return n<0?mt.trueFunc:e=>e>=n;const r=Math.abs(t),i=(n%r+r)%r;return 1e>=n&&e%r==i:e=>e<=n&&e%r==i}(function(e){if("even"===(e=e.trim().toLowerCase()))return[2,0];if("odd"===e)return[2,1];let t=0,n=0,r=s(),i=a();if(t=Ot&&e.charCodeAt(t)<=kt;)r=10*r+(e.charCodeAt(t)-Ot),t++;return t===n?null:r}function o(){for(;t{var r=t.getParent(n);return null!=r&&t.isTag(r)&&e(n)}}const Rt={contains:(e,t,{adapter:n})=>function(r){return e(r)&&n.getText(r).includes(t)},icontains(e,t,{adapter:n}){const r=t.toLowerCase();return function(t){return e(t)&&n.getText(t).toLowerCase().includes(r)}},"nth-child"(e,t,{adapter:n,equals:r}){const i=Lt(t);return i===mt.falseFunc?mt.falseFunc:i===mt.trueFunc?Dt(e,n):function(t){var s=n.getSiblings(t);let a=0;for(let e=0;et=>{var r=n.getParent(t);return(null==r||!n.isTag(r))&&e(t)},scope(e,t,n,r){const i=n.equals;return r&&0!==r.length?1===r.length?t=>i(r[0],t)&&e(t):t=>r.includes(t)&&e(t):Rt.root(e,t,n)},hover:wt("isHovered"),visited:wt("isVisited"),active:wt("isActive")};function wt(e){return function(t,n,{adapter:r}){const i=r[e];return"function"!=typeof i?mt.falseFunc:function(e){return i(e)&&t(e)}}}const xt={empty:(e,{adapter:t})=>!t.getChildren(e).some(e=>t.isTag(e)||""!==t.getText(e)),"first-child"(e,{adapter:t,equals:n}){var r;return t.prevElementSibling?null==t.prevElementSibling(e):null!=(r=t.getSiblings(e).find(e=>t.isTag(e)))&&n(e,r)},"last-child"(e,{adapter:t,equals:n}){var r=t.getSiblings(e);for(let i=r.length-1;0<=i;i--){if(n(e,r[i]))return!0;if(t.isTag(r[i]))break}return!1},"first-of-type"(e,{adapter:t,equals:n}){var r=t.getSiblings(e),i=t.getName(e);for(let s=0;sn(e,i)||!t.isTag(i)||t.getName(i)!==r)},"only-child":(e,{adapter:t,equals:n})=>t.getSiblings(e).every(r=>n(e,r)||!t.isTag(r))};function Mt(e,t,n,r){if(null===n){if(e.length>r)throw new Error(`Pseudo-class :${t} requires an argument`)}else if(e.length===r)throw new Error(`Pseudo-class :${t} doesn't have any arguments`)}const Pt={"any-link":":is(a, area, link)[href]",link:":any-link:not(:visited)",disabled:":is(\n :is(button, input, select, textarea, optgroup, option)[disabled],\n optgroup[disabled] > option,\n fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n )",enabled:":not(:disabled)",checked:":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",required:":is(input, select, textarea)[required]",optional:":is(input, select, textarea):not([required])",selected:"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"},Bt={};function Ft(e,t){var n=t.getSiblings(e);return n.length<=1||(e=n.indexOf(e))<0||e===n.length-1?[]:n.slice(e+1).filter(t.isTag)}function Ut(e){return{xmlMode:!!e.xmlMode,lowerCaseAttributeNames:!!e.lowerCaseAttributeNames,lowerCaseTags:!!e.lowerCaseTags,quirksMode:!!e.quirksMode,cacheResults:!!e.cacheResults,pseudos:e.pseudos,adapter:e.adapter,equals:e.equals}}const Ht=(e,t,n,r,i)=>{const s=i(t,Ut(n),r);return s===mt.trueFunc?e:s===mt.falseFunc?mt.falseFunc:t=>s(t)&&e(t)},Gt={is:Ht,matches:Ht,where:Ht,not(e,t,n,r,i){const s=i(t,Ut(n),r);return s===mt.falseFunc?e:s===mt.trueFunc?mt.falseFunc:t=>!s(t)&&e(t)},has(e,t,n,r,i){const s=n.adapter,a=Ut(n),o=(a.relativeSelector=!0,t.some(e=>e.some(Tt))?[Bt]:void 0),c=i(t,a,o);if(c===mt.falseFunc)return mt.falseFunc;const u=function(e,t){return e===mt.falseFunc?mt.falseFunc:n=>t.isTag(n)&&e(n)}(c,s);if(o&&c!==mt.trueFunc){const{shouldTestNextSiblings:t=!1}=c;return n=>{if(!e(n))return!1;o[0]=n;var r=s.getChildren(n),n=t?[...r,...Ft(n,s)]:r;return s.existsOne(u,n)}}return t=>e(t)&&s.existsOne(u,s.getChildren(t))}};function jt(e,t){return(e=t.getParent(e))&&t.isTag(e)?e:null}function qt(e,t,n,r,i){const{adapter:s,equals:a}=n;switch(t.type){case et.PseudoElement:throw new Error("Pseudo-elements are not supported by css-select");case et.ColumnCombinator:throw new Error("Column combinators are not yet supported by css-select");case et.Attribute:if(null!=t.namespace)throw new Error("Namespaced attributes are not yet supported by css-select");return n.xmlMode&&!n.lowerCaseAttributeNames||(t.name=t.name.toLowerCase()),bt[t.action](e,t,n);case et.Pseudo:return function(e,t,n,r,i){const{name:a,data:o}=t;if(Array.isArray(o)){if(a in Gt)return Gt[a](e,o,n,r,i);throw new Error(`Unknown pseudo-class :${a}(${o})`)}const c=null==(t=n.pseudos)?void 0:t[a],u="string"==typeof c?c:Pt[a];if("string"==typeof u){if(null!=o)throw new Error(`Pseudo ${a} doesn't have any arguments`);const t=pt(u);return Gt.is(e,t,n,r,i)}if("function"==typeof c)return Mt(c,a,o,1),t=>c(t,o)&&e(t);if(a in Rt)return Rt[a](e,o,n,r);if(a in xt){const t=xt[a];return Mt(t,a,o,2),r=>t(r,n,o)&&e(r)}throw new Error("Unknown pseudo-class :"+a)}(e,t,n,r,i);case et.Tag:{if(null!=t.namespace)throw new Error("Namespaced tag names are not yet supported by css-select");let r=t.name;return n.xmlMode&&!n.lowerCaseTags||(r=r.toLowerCase()),function(t){return s.getName(t)===r&&e(t)}}case et.Descendant:{if(!1===n.cacheResults||"undefined"==typeof WeakSet)return function(t){let n=t;for(;n=jt(n,s);)if(e(n))return!0;return!1};const t=new WeakSet;return function(n){let r=n;for(;r=jt(r,s);)if(!t.has(r)){if(s.isTag(r)&&e(r))return!0;t.add(r)}return!1}}case"_flexibleDescendant":return function(t){let n=t;do{if(e(n))return!0}while(n=jt(n,s));return!1};case et.Parent:return function(t){return s.getChildren(t).some(t=>s.isTag(t)&&e(t))};case et.Child:return function(t){return null!=(t=s.getParent(t))&&s.isTag(t)&&e(t)};case et.Sibling:return function(t){var n=s.getSiblings(t);for(let r=0;re.some(Yt)))}const Kt={type:et.Descendant},Wt={type:"_flexibleDescendant"},Vt={type:et.Pseudo,name:"scope",data:null};function $t(e,t,n){e.forEach(gt),n=null!=(r=t.context)?r:n;const i=Array.isArray(n),s=n&&(Array.isArray(n)?n:[n]);if(!1!==t.relativeSelector)!function(e,{adapter:t},n){var r=!(null==n||!n.every(e=>{var n=t.isTag(e)&&t.getParent(e);return e===Bt||n&&t.isTag(n)}));for(const t of e){if(!(00{if(2<=e.length){const[t,n]=e;t.type===et.Pseudo&&"scope"===t.name&&(i&&n.type===et.Descendant?e[1]=Wt:n.type!==et.Adjacent&&n.type!==et.Sibling||(a=!0))}return function(e,t,n){return e.reduce((e,r)=>e===mt.falseFunc?mt.falseFunc:qt(e,r,t,n,$t),null!=(e=t.rootFunc)?e:mt.trueFunc)}(e,t,s)}).reduce(Qt,mt.falseFunc);return r.shouldTestNextSiblings=a,r}function Qt(e,t){return t===mt.falseFunc||e===mt.trueFunc?e:e===mt.falseFunc||t===mt.trueFunc?t:function(n){return e(n)||t(n)}}const zt=(e,t)=>e===t,Xt={adapter:Se,equals:zt},Zt=(Jt=$t,function(e,t,n){return t=function(e){var r;return null==(e=null!=e?e:Xt).adapter&&(e.adapter=Se),null==e.equals&&(e.equals=null!=(r=null==(r=e.adapter)?void 0:r.equals)?r:zt),e}(t),Jt(e,t,n)});function en(e,t,n=!1){return n&&(e=function(e,t){const n=Array.isArray(e)?e.slice(0):[e],r=n.length;for(let e=0;ee.some(nn)))}function rn(e){var t=[],n=[];for(const r of e)(r.some(nn)?t:n).push(r);return[n,t]}const sn={type:et.Universal,namespace:null},an={type:et.Pseudo,name:"scope",data:null};function on(e,t,n={}){return cn([e],t,n)}function cn(e,t,n={}){var i;return"function"==typeof t?e.some(t):([t,i]=rn(pt(t)),00S(e)&&!s.has(e)):t;if(0===a.length)break;var o=hn(r,t,n);if(o.length)if(s)o.forEach(e=>s.add(e));else{if(e===i.length-1)return o;s=new Set(o)}}return void 0!==s?s.size===t.length?t:t.filter(e=>s.has(e)):[]}function hn(e,t,n){var r,s;return e.some(ot)?(r=null!=(r=n.root)?r:function(e){for(;e.parent;)e=e.parent;return e}(t[0]),s={...n,context:t,relativeSelector:!1},e.push(an),fn(r,e,s,!0,t.length)):fn(t,e,n,!1,t.length)}function fn(e,t,n,r,i){var s=t.findIndex(nn),a=t.slice(0,s),o=t[s],c=t.length-1===s?i:1/0;if(0===(c=function(e,t,n){var r=null!=t?parseInt(t,10):NaN;switch(e){case"first":return 1;case"nth":case"eq":return isFinite(r)?0<=r?r+1:1/0:0;case"lt":return isFinite(r)?0<=r?Math.min(r,n):1/0:0;case"gt":return isFinite(r)?1/0:0;case"odd":return 2*n;case"even":return 2*n-1;case"last":case"not":return 1/0}}(o.name,o.data,c)))return[];r=(0!==a.length||Array.isArray(e)?0===a.length?(Array.isArray(e)?e:[e]).filter(S):r||a.some(ot)?pn(e,[a],n,c):mn(e,[a],n):J(e).filter(S)).slice(0,c);let h=function(e,t,n,r){var i="string"==typeof n?parseInt(n,10):NaN;switch(e){case"first":case"lt":return t;case"last":return 0t%2==0);case"odd":return t.filter((e,t)=>t%2==1);case"not":{const e=new Set(ln(n,t,r));return t.filter(t=>!e.has(t))}}}(o.name,r,o.data,n);if(0===h.length||t.length===s+1)return h;if(e=(a=t.slice(s+1)).some(ot)){if(ot(a[0])){const e=a[0].type;e!==et.Sibling&&e!==et.Adjacent||(h=en(h,Se,!0)),a.unshift(sn)}n={...n,relativeSelector:!1,rootFunc:e=>h.includes(e)}}else n.rootFunc&&n.rootFunc!==_t&&(n={...n,rootFunc:_t});return a.some(nn)?fn(h,a,n,!1,i):e?pn(h,[a],n,i):mn(h,[a],n)}function pn(e,t,n,r){return dn(e,Zt(t,n,e),r)}function dn(e,t,n=1/0){return ae(e=>S(e)&&t(e),en(e,Se,t.shouldTestNextSiblings),!0,n)}function mn(e,t,n){return 0===(e=(Array.isArray(e)?e:[e]).filter(S)).length||(t=Zt(t,n))===_t?e:e.filter(t)}var _n=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,s=t.length;ifn(t,e,n,!0,1/0)),e.length&&s.push(pn(t,e,n,1/0)),0===s.length?[]:1===s.length?s[0]:me(s.reduce((e,t)=>[...e,...t])))}(e,r,t)))):this._make([])},parent:Sn,parents:Cn,parentsUntil:Nn,closest:function(e){var t,r,i,n=[];return e&&(r={xmlMode:this.options.xmlMode,root:null==(t=this._root)?void 0:t[0]},i="string"==typeof e?function(t){return on(t,e,r)}:xn(e),Be(this,function(e){for(;e&&S(e);){if(i(e,0)){n.includes(e)||n.push(e);break}e=e.parent}})),this._make(n)},next:bn,nextAll:In,nextUntil:On,prev:kn,prevAll:Ln,prevUntil:Dn,siblings:Rn,children:wn,contents:function(){var e=this.toArray().reduce(function(e,t){return k(t)?e.concat(t.children):e},[]);return this._make(e)},each:function(e){for(var t=0,n=this.length;t=e.length?null:e[t+n],l=0;lthis.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,t){0this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(t)return this.html.startsWith(e,this.pos);for(let t=0;t=this.html.length?(this.endOfChunkHit=!this.lastChunkWritten,ar.EOF):(e=this.html.charCodeAt(e))===ar.CARRIAGE_RETURN?ar.LINE_FEED:e}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,ar.EOF;let e=this.html.charCodeAt(this.pos);return e===ar.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,ar.LINE_FEED):e===ar.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,pr(e)&&(e=this._processSurrogate(e)),null===this.handler.onParseError||31䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(function(e){return e.charCodeAt(0)}))}),Nr=(yr(Cr),Sr(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map(function(e){return e.charCodeAt(0)}))})),br=(yr(Nr),Sr(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.replaceCodePoint=t.fromCodePoint=void 0;var n,r=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function i(e){var t;return 55296<=e&&e<=57343||1114111>>10&1023|55296),e=56320|1023&e),t+String.fromCharCode(e)},t.replaceCodePoint=i,t.default=function(e){return(0,t.fromCodePoint)(i(e))}})),Ir=(yr(br),br.replaceCodePoint,br.fromCodePoint,Cr),Or=Nr,kr=br,Lr=Sr(function(e,t){var n=gr&&gr.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){e[r=void 0===r?n:r]=t[n]}),r=gr&&gr.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=gr&&gr.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return r(t,e),t},s=gr&&gr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},a=(Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXML=t.decodeHTMLStrict=t.decodeHTMLAttribute=t.decodeHTML=t.determineBranch=t.EntityDecoder=t.DecodingMode=t.BinTrieFlags=t.fromCodePoint=t.replaceCodePoint=t.decodeCodePoint=t.xmlDecodeTree=t.htmlDecodeTree=void 0,s(Ir)),s=(t.htmlDecodeTree=a.default,s(Or)),c=(t.xmlDecodeTree=s.default,i(kr));t.decodeCodePoint=c.default;var u,h,f,p,l=kr;function d(e){return e>=u.ZERO&&e<=u.NINE}Object.defineProperty(t,"replaceCodePoint",{enumerable:!0,get:function(){return l.replaceCodePoint}}),Object.defineProperty(t,"fromCodePoint",{enumerable:!0,get:function(){return l.fromCodePoint}}),function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"}(u={}),function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"}(h=t.BinTrieFlags||(t.BinTrieFlags={})),function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"}(f={}),function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"}(p=t.DecodingMode||(t.DecodingMode={}));var _=function(){function e(e,t,n){this.decodeTree=e,this.emitCodePoint=t,this.errors=n,this.state=f.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=p.Strict}return e.prototype.startEntity=function(e){this.decodeMode=e,this.state=f.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},e.prototype.write=function(e,t){switch(this.state){case f.EntityStart:return e.charCodeAt(t)===u.NUM?(this.state=f.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=f.NamedEntity,this.stateNamedEntity(e,t));case f.NumericStart:return this.stateNumericStart(e,t);case f.NumericDecimal:return this.stateNumericDecimal(e,t);case f.NumericHex:return this.stateNumericHex(e,t);case f.NamedEntity:return this.stateNamedEntity(e,t)}},e.prototype.stateNumericStart=function(e,t){return t>=e.length?-1:(32|e.charCodeAt(t))===u.LOWER_X?(this.state=f.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=f.NumericDecimal,this.stateNumericDecimal(e,t))},e.prototype.addToNumericResult=function(e,t,n,r){t!==n&&(n-=t,this.result=this.result*Math.pow(r,n)+parseInt(e.substr(t,n),r),this.consumed+=n)},e.prototype.stateNumericHex=function(e,t){for(var r=t;t=u.UPPER_A&&i<=u.UPPER_F||u.LOWER_A<=i&&i<=u.LOWER_F))return this.addToNumericResult(e,r,t,16),this.emitNumericEntity(i,3);t+=1}return this.addToNumericResult(e,r,t,16),-1},e.prototype.stateNumericDecimal=function(e,t){for(var n=t;t>14;t>14)){if(s===u.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==p.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1},e.prototype.emitNotTerminatedNamedEntity=function(){var t=this.result,n=(this.decodeTree[t]&h.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,n,this.consumed),null!=(t=this.errors)&&t.missingSemicolonAfterCharacterReference(),this.consumed},e.prototype.emitNamedEntityData=function(e,t,n){var r=this.decodeTree;return this.emitCodePoint(1===t?r[e]&~h.VALUE_LENGTH:r[e+1],n),3===t&&this.emitCodePoint(r[e+2],n),n},e.prototype.end=function(){var e;switch(this.state){case f.NamedEntity:return 0===this.result||this.decodeMode===p.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case f.NumericDecimal:return this.emitNumericEntity(0,2);case f.NumericHex:return this.emitNumericEntity(0,3);case f.NumericStart:return null!=(e=this.errors)&&e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case f.EntityStart:return 0}},e}();function E(e){var t="",n=new _(e,function(e){return t+=(0,c.fromCodePoint)(e)});return function(e,r){for(var i=0,s=0;0<=(s=e.indexOf("&",s));){t+=e.slice(i,s),n.startEntity(r);var a=n.write(e,s+1);if(a<0){i=s+n.end();break}i=s+a,s=0===a?i+1:i}var o=t+e.slice(i);return t="",o}}function T(e,t,n,r){var i=(t&h.BRANCH_LENGTH)>>7,t=t&h.JUMP_TABLE;if(0==i)return 0!=t&&r===t?n:-1;if(t)return(t=r-t)<0||i<=t?-1:e[n+t]-1;for(var o=n,c=o+i-1;o<=c;){var u=o+c>>>1,l=e[u];if(l=ar.DIGIT_0&&e<=ar.DIGIT_9}function Zr(e){return e>=ar.LATIN_CAPITAL_A&&e<=ar.LATIN_CAPITAL_Z}function Jr(e){return function(e){return e>=ar.LATIN_SMALL_A&&e<=ar.LATIN_SMALL_Z}(e)||Zr(e)}function ei(e){return Jr(e)||Xr(e)}function ti(e){return e>=ar.LATIN_CAPITAL_A&&e<=ar.LATIN_CAPITAL_F}function ni(e){return e>=ar.LATIN_SMALL_A&&e<=ar.LATIN_SMALL_F}function ri(e){return e+32}function ii(e){return e===ar.SPACE||e===ar.LINE_FEED||e===ar.TABULATION||e===ar.FORM_FEED}function si(e){return ii(e)||e===ar.SOLIDUS||e===ar.GREATER_THAN_SIGN}class ai{constructor(e,t){this.options=e,this.handler=t,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=Qr.DATA,this.returnState=Qr.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new Er(t),this.currentLocation=this.getCurrentLocation(-1)}_err(e){var t,n;null!=(n=(t=this.handler).onParseError)&&n.call(t,this.preprocessor.getError(e))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;var e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,this.inLoop||(this._runParsingLoop(),this.paused)||null==e||e()}write(e,t,n){this.active=!0,this.preprocessor.write(e,t),this._runParsingLoop(),this.paused||null==n||n()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return!(!this.preprocessor.endOfChunkHit||(this._unconsume(this.consumedAfterSnapshot),this.active=!1))}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(e){this.consumedAfterSnapshot-=e,this.preprocessor.retreat(e)}_reconsumeInState(e,t){this.state=e,this._callState(t)}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let t=0;t>14)-1;if(e!==ar.SEMICOLON&&this._isCharacterReferenceInAttribute()&&((o=this.preprocessor.peek(1))===ar.EQUALS_SIGN||ei(o))?(t=[ar.AMPERSAND],s+=a):(t=0==a?[Gr[s]&~Rr.VALUE_LENGTH]:1==a?[Gr[++s]]:[Gr[++s],Gr[++s]],n=0,r=e!==ar.SEMICOLON),0==a){this._consume();break}}}return this._unconsume(n),r&&!this.preprocessor.endOfChunkHit&&this._err(_r.missingSemicolonAfterCharacterReference),this._unconsume(1),t}_isCharacterReferenceInAttribute(){return this.returnState===Qr.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===Qr.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===Qr.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case Qr.DATA:this._stateData(e);break;case Qr.RCDATA:this._stateRcdata(e);break;case Qr.RAWTEXT:this._stateRawtext(e);break;case Qr.SCRIPT_DATA:this._stateScriptData(e);break;case Qr.PLAINTEXT:this._statePlaintext(e);break;case Qr.TAG_OPEN:this._stateTagOpen(e);break;case Qr.END_TAG_OPEN:this._stateEndTagOpen(e);break;case Qr.TAG_NAME:this._stateTagName(e);break;case Qr.RCDATA_LESS_THAN_SIGN:this._stateRcdataLessThanSign(e);break;case Qr.RCDATA_END_TAG_OPEN:this._stateRcdataEndTagOpen(e);break;case Qr.RCDATA_END_TAG_NAME:this._stateRcdataEndTagName(e);break;case Qr.RAWTEXT_LESS_THAN_SIGN:this._stateRawtextLessThanSign(e);break;case Qr.RAWTEXT_END_TAG_OPEN:this._stateRawtextEndTagOpen(e);break;case Qr.RAWTEXT_END_TAG_NAME:this._stateRawtextEndTagName(e);break;case Qr.SCRIPT_DATA_LESS_THAN_SIGN:this._stateScriptDataLessThanSign(e);break;case Qr.SCRIPT_DATA_END_TAG_OPEN:this._stateScriptDataEndTagOpen(e);break;case Qr.SCRIPT_DATA_END_TAG_NAME:this._stateScriptDataEndTagName(e);break;case Qr.SCRIPT_DATA_ESCAPE_START:this._stateScriptDataEscapeStart(e);break;case Qr.SCRIPT_DATA_ESCAPE_START_DASH:this._stateScriptDataEscapeStartDash(e);break;case Qr.SCRIPT_DATA_ESCAPED:this._stateScriptDataEscaped(e);break;case Qr.SCRIPT_DATA_ESCAPED_DASH:this._stateScriptDataEscapedDash(e);break;case Qr.SCRIPT_DATA_ESCAPED_DASH_DASH:this._stateScriptDataEscapedDashDash(e);break;case Qr.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataEscapedLessThanSign(e);break;case Qr.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:this._stateScriptDataEscapedEndTagOpen(e);break;case Qr.SCRIPT_DATA_ESCAPED_END_TAG_NAME:this._stateScriptDataEscapedEndTagName(e);break;case Qr.SCRIPT_DATA_DOUBLE_ESCAPE_START:this._stateScriptDataDoubleEscapeStart(e);break;case Qr.SCRIPT_DATA_DOUBLE_ESCAPED:this._stateScriptDataDoubleEscaped(e);break;case Qr.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:this._stateScriptDataDoubleEscapedDash(e);break;case Qr.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:this._stateScriptDataDoubleEscapedDashDash(e);break;case Qr.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataDoubleEscapedLessThanSign(e);break;case Qr.SCRIPT_DATA_DOUBLE_ESCAPE_END:this._stateScriptDataDoubleEscapeEnd(e);break;case Qr.BEFORE_ATTRIBUTE_NAME:this._stateBeforeAttributeName(e);break;case Qr.ATTRIBUTE_NAME:this._stateAttributeName(e);break;case Qr.AFTER_ATTRIBUTE_NAME:this._stateAfterAttributeName(e);break;case Qr.BEFORE_ATTRIBUTE_VALUE:this._stateBeforeAttributeValue(e);break;case Qr.ATTRIBUTE_VALUE_DOUBLE_QUOTED:this._stateAttributeValueDoubleQuoted(e);break;case Qr.ATTRIBUTE_VALUE_SINGLE_QUOTED:this._stateAttributeValueSingleQuoted(e);break;case Qr.ATTRIBUTE_VALUE_UNQUOTED:this._stateAttributeValueUnquoted(e);break;case Qr.AFTER_ATTRIBUTE_VALUE_QUOTED:this._stateAfterAttributeValueQuoted(e);break;case Qr.SELF_CLOSING_START_TAG:this._stateSelfClosingStartTag(e);break;case Qr.BOGUS_COMMENT:this._stateBogusComment(e);break;case Qr.MARKUP_DECLARATION_OPEN:this._stateMarkupDeclarationOpen(e);break;case Qr.COMMENT_START:this._stateCommentStart(e);break;case Qr.COMMENT_START_DASH:this._stateCommentStartDash(e);break;case Qr.COMMENT:this._stateComment(e);break;case Qr.COMMENT_LESS_THAN_SIGN:this._stateCommentLessThanSign(e);break;case Qr.COMMENT_LESS_THAN_SIGN_BANG:this._stateCommentLessThanSignBang(e);break;case Qr.COMMENT_LESS_THAN_SIGN_BANG_DASH:this._stateCommentLessThanSignBangDash(e);break;case Qr.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:this._stateCommentLessThanSignBangDashDash(e);break;case Qr.COMMENT_END_DASH:this._stateCommentEndDash(e);break;case Qr.COMMENT_END:this._stateCommentEnd(e);break;case Qr.COMMENT_END_BANG:this._stateCommentEndBang(e);break;case Qr.DOCTYPE:this._stateDoctype(e);break;case Qr.BEFORE_DOCTYPE_NAME:this._stateBeforeDoctypeName(e);break;case Qr.DOCTYPE_NAME:this._stateDoctypeName(e);break;case Qr.AFTER_DOCTYPE_NAME:this._stateAfterDoctypeName(e);break;case Qr.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._stateAfterDoctypePublicKeyword(e);break;case Qr.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:this._stateBeforeDoctypePublicIdentifier(e);break;case Qr.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypePublicIdentifierDoubleQuoted(e);break;case Qr.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypePublicIdentifierSingleQuoted(e);break;case Qr.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:this._stateAfterDoctypePublicIdentifier(e);break;case Qr.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break;case Qr.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._stateAfterDoctypeSystemKeyword(e);break;case Qr.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:this._stateBeforeDoctypeSystemIdentifier(e);break;case Qr.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypeSystemIdentifierDoubleQuoted(e);break;case Qr.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypeSystemIdentifierSingleQuoted(e);break;case Qr.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:this._stateAfterDoctypeSystemIdentifier(e);break;case Qr.BOGUS_DOCTYPE:this._stateBogusDoctype(e);break;case Qr.CDATA_SECTION:this._stateCdataSection(e);break;case Qr.CDATA_SECTION_BRACKET:this._stateCdataSectionBracket(e);break;case Qr.CDATA_SECTION_END:this._stateCdataSectionEnd(e);break;case Qr.CHARACTER_REFERENCE:this._stateCharacterReference(e);break;case Qr.NAMED_CHARACTER_REFERENCE:this._stateNamedCharacterReference(e);break;case Qr.AMBIGUOUS_AMPERSAND:this._stateAmbiguousAmpersand(e);break;case Qr.NUMERIC_CHARACTER_REFERENCE:this._stateNumericCharacterReference(e);break;case Qr.HEXADEMICAL_CHARACTER_REFERENCE_START:this._stateHexademicalCharacterReferenceStart(e);break;case Qr.HEXADEMICAL_CHARACTER_REFERENCE:this._stateHexademicalCharacterReference(e);break;case Qr.DECIMAL_CHARACTER_REFERENCE:this._stateDecimalCharacterReference(e);break;case Qr.NUMERIC_CHARACTER_REFERENCE_END:this._stateNumericCharacterReferenceEnd(e);break;default:throw new Error("Unknown state")}}_stateData(e){switch(e){case ar.LESS_THAN_SIGN:this.state=Qr.TAG_OPEN;break;case ar.AMPERSAND:this.returnState=Qr.DATA,this.state=Qr.CHARACTER_REFERENCE;break;case ar.NULL:this._err(_r.unexpectedNullCharacter),this._emitCodePoint(e);break;case ar.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case ar.AMPERSAND:this.returnState=Qr.RCDATA,this.state=Qr.CHARACTER_REFERENCE;break;case ar.LESS_THAN_SIGN:this.state=Qr.RCDATA_LESS_THAN_SIGN;break;case ar.NULL:this._err(_r.unexpectedNullCharacter),this._emitChars(sr);break;case ar.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case ar.LESS_THAN_SIGN:this.state=Qr.RAWTEXT_LESS_THAN_SIGN;break;case ar.NULL:this._err(_r.unexpectedNullCharacter),this._emitChars(sr);break;case ar.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case ar.LESS_THAN_SIGN:this.state=Qr.SCRIPT_DATA_LESS_THAN_SIGN;break;case ar.NULL:this._err(_r.unexpectedNullCharacter),this._emitChars(sr);break;case ar.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case ar.NULL:this._err(_r.unexpectedNullCharacter),this._emitChars(sr);break;case ar.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateTagOpen(e){if(Jr(e))this._createStartTagToken(),this.state=Qr.TAG_NAME,this._stateTagName(e);else switch(e){case ar.EXCLAMATION_MARK:this.state=Qr.MARKUP_DECLARATION_OPEN;break;case ar.SOLIDUS:this.state=Qr.END_TAG_OPEN;break;case ar.QUESTION_MARK:this._err(_r.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=Qr.BOGUS_COMMENT,this._stateBogusComment(e);break;case ar.EOF:this._err(_r.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break;default:this._err(_r.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=Qr.DATA,this._stateData(e)}}_stateEndTagOpen(e){if(Jr(e))this._createEndTagToken(),this.state=Qr.TAG_NAME,this._stateTagName(e);else switch(e){case ar.GREATER_THAN_SIGN:this._err(_r.missingEndTagName),this.state=Qr.DATA;break;case ar.EOF:this._err(_r.eofBeforeTagName),this._emitChars("");break;case ar.NULL:this._err(_r.unexpectedNullCharacter),this.state=Qr.SCRIPT_DATA_ESCAPED,this._emitChars(sr);break;case ar.EOF:this._err(_r.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=Qr.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===ar.SOLIDUS?this.state=Qr.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Jr(e)?(this._emitChars("<"),this.state=Qr.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars("<"),this.state=Qr.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){Jr(e)?(this.state=Qr.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars("");break;case ar.NULL:this._err(_r.unexpectedNullCharacter),this.state=Qr.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(sr);break;case ar.EOF:this._err(_r.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=Qr.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===ar.SOLIDUS?(this.state=Qr.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=Qr.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(lr,!1)&&si(this.preprocessor.peek(lr.length))){this._emitCodePoint(e);for(let e=0;e=e;){var t=this.current;0[e.name,e.value]));let i=0;for(let e=0;er.get(e.name)===e.value)&&3<=(i+=1)&&this.entries.splice(t.idx,1)}}}}insertMarker(){this.entries.unshift(Ei)}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.unshift({type:_i.Element,element:e,token:t})}insertElementAfterBookmark(e,t){var n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:_i.Element,element:e,token:t})}removeEntry(e){0<=(e=this.entries.indexOf(e))&&this.entries.splice(e,1)}clearToLastMarker(){var e=this.entries.indexOf(Ei);0<=e?this.entries.splice(0,e+1):this.entries.length=0}getElementEntryInScopeWithTagName(e){var t=this.entries.find(t=>t.type===_i.Marker||this.treeAdapter.getTagName(t.element)===e);return t&&t.type===_i.Element?t:null}getElementEntry(e){return this.entries.find(t=>t.type===_i.Element&&t.element===e)}}function Ai(e){return{nodeName:"#text",value:e,parentNode:null}}const gi={createDocument:()=>({nodeName:"#document",mode:Br.NO_QUIRKS,childNodes:[]}),createDocumentFragment:()=>({nodeName:"#document-fragment",childNodes:[]}),createElement:(e,t,n)=>({nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}),createCommentNode:e=>({nodeName:"#comment",data:e,parentNode:null}),appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,n){n=e.childNodes.indexOf(n),e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent:e=>e.content,setDocumentType(e,t,n,r){const i=e.childNodes.find(e=>"#documentType"===e.nodeName);if(i)i.name=t,i.publicId=n,i.systemId=r;else{const i={nodeName:"#documentType",name:t,publicId:n,systemId:r,parentNode:null};gi.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode:e=>e.mode,detachNode(e){var t;e.parentNode&&(t=e.parentNode.childNodes.indexOf(e),e.parentNode.childNodes.splice(t,1),e.parentNode=null)},insertText(e,t){if(0e.name));for(let r=0;re.childNodes[0],getChildNodes:e=>e.childNodes,getParentNode:e=>e.parentNode,getAttrList:e=>e.attrs,getTagName:e=>e.tagName,getNamespaceURI:e=>e.namespaceURI,getTextNodeContent:e=>e.value,getCommentNodeContent:e=>e.data,getDocumentTypeNodeName:e=>e.name,getDocumentTypeNodePublicId:e=>e.publicId,getDocumentTypeNodeSystemId:e=>e.systemId,isTextNode:e=>"#text"===e.nodeName,isCommentNode:e=>"#comment"===e.nodeName,isDocumentTypeNode:e=>"#documentType"===e.nodeName,isElementNode:e=>Object.prototype.hasOwnProperty.call(e,"tagName"),setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation:e=>e.sourceCodeLocation,updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t}}},vi="html",yi="about:legacy-compat",Si="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",Ci=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],Ni=[...Ci,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],bi=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),Ii=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],Oi=[...Ii,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function ki(e,t){return t.some(t=>e.startsWith(t))}const Li={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},Di="definitionurl",Ri="definitionURL",wi=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),xi=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Mr.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Mr.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Mr.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Mr.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Mr.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Mr.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Mr.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:Mr.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:Mr.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Mr.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Mr.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Mr.XMLNS}]]),Mi=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),Pi=new Set([Ur.B,Ur.BIG,Ur.BLOCKQUOTE,Ur.BODY,Ur.BR,Ur.CENTER,Ur.CODE,Ur.DD,Ur.DIV,Ur.DL,Ur.DT,Ur.EM,Ur.EMBED,Ur.H1,Ur.H2,Ur.H3,Ur.H4,Ur.H5,Ur.H6,Ur.HEAD,Ur.HR,Ur.I,Ur.IMG,Ur.LI,Ur.LISTING,Ur.MENU,Ur.META,Ur.NOBR,Ur.OL,Ur.P,Ur.PRE,Ur.RUBY,Ur.S,Ur.SMALL,Ur.SPAN,Ur.STRONG,Ur.STRIKE,Ur.SUB,Ur.SUP,Ur.TABLE,Ur.TT,Ur.U,Ur.UL,Ur.VAR]);function Bi(e){for(let t=0;tthis.treeAdapter.isDocumentTypeNode(e));t&&this.treeAdapter.setNodeSourceCodeLocation(t,e.location)}}_attachElementToTree(e,t){if(this.options.sourceCodeLocationInfo&&(t=t&&{...t,startTag:t},this.treeAdapter.setNodeSourceCodeLocation(e,t)),this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){t=this.treeAdapter.createElement(e.tagName,t,e.attrs),this._attachElementToTree(t,e.location)}_insertElement(e,t){t=this.treeAdapter.createElement(e.tagName,t,e.attrs),this._attachElementToTree(t,e.location),this.openElements.push(t,e.tagID)}_insertFakeElement(e,t){e=this.treeAdapter.createElement(e,Mr.HTML,[]),this._attachElementToTree(e,null),this.openElements.push(e,t)}_insertTemplate(e){var t=this.treeAdapter.createElement(e.tagName,Mr.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t,e.location),this.openElements.push(t,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){var e=this.treeAdapter.createElement(Fr.HTML,Mr.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,Ur.HTML)}_appendCommentNode(e,t){var n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,e.location)}_insertCharacters(e){let t,n;if(this._shouldFosterParentOnInsertion()?({parent:t,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(t,e.chars,n):this.treeAdapter.insertText(t,e.chars)):(t=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(t,e.chars)),e.location){var r=this.treeAdapter.getChildNodes(t),i=n?r.lastIndexOf(n):r.length,i=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(i)){const{endLine:t,endCol:n,endOffset:r}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(i,{endLine:t,endCol:n,endOffset:r})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(i,e.location)}}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_setEndLocation(e,t){var n,r;this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location&&(n=t.location,r=this.treeAdapter.getTagName(e),r=t.type===Tr.END_TAG&&r===t.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset},this.treeAdapter.updateNodeSourceCodeLocation(e,r))}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let t,n;return 0===this.openElements.stackTop&&this.fragmentContext?(t=this.fragmentContext,n=this.fragmentContextID):{current:t,currentTagId:n}=this.openElements,(e.tagID!==Ur.SVG||this.treeAdapter.getTagName(t)!==Fr.ANNOTATION_XML||this.treeAdapter.getNamespaceURI(t)!==Mr.MATHML)&&(this.tokenizer.inForeignNode||(e.tagID===Ur.MGLYPH||e.tagID===Ur.MALIGNMARK)&&!this._isIntegrationPoint(n,t,Mr.HTML))}_processToken(e){switch(e.type){case Tr.CHARACTER:this.onCharacter(e);break;case Tr.NULL_CHARACTER:this.onNullCharacter(e);break;case Tr.COMMENT:this.onComment(e);break;case Tr.DOCTYPE:this.onDoctype(e);break;case Tr.START_TAG:this._processStartTag(e);break;case Tr.END_TAG:this.onEndTag(e);break;case Tr.EOF:this.onEof(e);break;case Tr.WHITESPACE_CHARACTER:this.onWhitespaceCharacter(e)}}_isIntegrationPoint(e,t,n){return Hi(e,this.treeAdapter.getNamespaceURI(t),this.treeAdapter.getAttrList(t),n)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.entries.length;if(e){var t=this.activeFormattingElements.entries.findIndex(e=>e.type===_i.Marker||this.openElements.contains(e.element));for(let n=t<0?e-1:t-1;0<=n;n--){const e=this.activeFormattingElements.entries[n];this._insertElement(e.token,this.treeAdapter.getNamespaceURI(e.element)),e.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Yi.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(Ur.P),this.openElements.popUntilTagNamePopped(Ur.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;0<=e;e--)switch(0===e&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case Ur.TR:return void(this.insertionMode=Yi.IN_ROW);case Ur.TBODY:case Ur.THEAD:case Ur.TFOOT:return void(this.insertionMode=Yi.IN_TABLE_BODY);case Ur.CAPTION:return void(this.insertionMode=Yi.IN_CAPTION);case Ur.COLGROUP:return void(this.insertionMode=Yi.IN_COLUMN_GROUP);case Ur.TABLE:return void(this.insertionMode=Yi.IN_TABLE);case Ur.BODY:return void(this.insertionMode=Yi.IN_BODY);case Ur.FRAMESET:return void(this.insertionMode=Yi.IN_FRAMESET);case Ur.SELECT:return void this._resetInsertionModeForSelect(e);case Ur.TEMPLATE:return void(this.insertionMode=this.tmplInsertionModeStack[0]);case Ur.HTML:return void(this.insertionMode=this.headElement?Yi.AFTER_HEAD:Yi.BEFORE_HEAD);case Ur.TD:case Ur.TH:if(0e===Pr.COLOR||e===Pr.SIZE||e===Pr.FACE)||Pi.has(t)}(t)?(n=e._getAdjustedCurrentElement(),(n=e.treeAdapter.getNamespaceURI(n))===Mr.MATHML?Bi(t):n===Mr.SVG&&(function(e){var t=Mi.get(e.tagName);null!=t&&(e.tagName=t,e.tagID=qr(e.tagName))}(t),Fi(t)),Ui(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0):(qs(e),e._startTagOutsideForeignContent(t))}(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case Yi.INITIAL:is(this,e);break;case Yi.BEFORE_HTML:!function(e,t){t.tagID===Ur.HTML?(e._insertElement(t,Mr.HTML),e.insertionMode=Yi.BEFORE_HEAD):ss(e,t)}(this,e);break;case Yi.BEFORE_HEAD:!function(e,t){switch(t.tagID){case Ur.HTML:As(e,t);break;case Ur.HEAD:e._insertElement(t,Mr.HTML),e.headElement=e.openElements.current,e.insertionMode=Yi.IN_HEAD;break;default:as(e,t)}}(this,e);break;case Yi.IN_HEAD:os(this,e);break;case Yi.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case Ur.HTML:As(e,t);break;case Ur.BASEFONT:case Ur.BGSOUND:case Ur.HEAD:case Ur.LINK:case Ur.META:case Ur.NOFRAMES:case Ur.STYLE:os(e,t);break;case Ur.NOSCRIPT:e._err(t,_r.nestedNoscriptInHead);break;default:ls(e,t)}}(this,e);break;case Yi.AFTER_HEAD:!function(e,t){switch(t.tagID){case Ur.HTML:As(e,t);break;case Ur.BODY:e._insertElement(t,Mr.HTML),e.framesetOk=!1,e.insertionMode=Yi.IN_BODY;break;case Ur.FRAMESET:e._insertElement(t,Mr.HTML),e.insertionMode=Yi.IN_FRAMESET;break;case Ur.BASE:case Ur.BASEFONT:case Ur.BGSOUND:case Ur.LINK:case Ur.META:case Ur.NOFRAMES:case Ur.SCRIPT:case Ur.STYLE:case Ur.TEMPLATE:case Ur.TITLE:e._err(t,_r.abandonedHeadElementChild),e.openElements.push(e.headElement,Ur.HEAD),os(e,t),e.openElements.remove(e.headElement);break;case Ur.HEAD:e._err(t,_r.misplacedStartTagForHeadElement);break;default:hs(e,t)}}(this,e);break;case Yi.IN_BODY:As(this,e);break;case Yi.IN_TABLE:Cs(this,e);break;case Yi.IN_TABLE_TEXT:ks(this,e);break;case Yi.IN_CAPTION:!function(e,t){var n=t.tagID;Ls.has(n)?e.openElements.hasInTableScope(Ur.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Ur.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Yi.IN_TABLE,Cs(e,t)):As(e,t)}(this,e);break;case Yi.IN_COLUMN_GROUP:Ds(this,e);break;case Yi.IN_TABLE_BODY:ws(this,e);break;case Yi.IN_ROW:Ms(this,e);break;case Yi.IN_CELL:!function(e,t){var n=t.tagID;Ls.has(n)?(e.openElements.hasInTableScope(Ur.TD)||e.openElements.hasInTableScope(Ur.TH))&&(e._closeTableCell(),Ms(e,t)):As(e,t)}(this,e);break;case Yi.IN_SELECT:Bs(this,e);break;case Yi.IN_SELECT_IN_TABLE:!function(e,t){var n=t.tagID;n===Ur.CAPTION||n===Ur.TABLE||n===Ur.TBODY||n===Ur.TFOOT||n===Ur.THEAD||n===Ur.TR||n===Ur.TD||n===Ur.TH?(e.openElements.popUntilTagNamePopped(Ur.SELECT),e._resetInsertionMode(),e._processStartTag(t)):Bs(e,t)}(this,e);break;case Yi.IN_TEMPLATE:!function(e,t){switch(t.tagID){case Ur.BASE:case Ur.BASEFONT:case Ur.BGSOUND:case Ur.LINK:case Ur.META:case Ur.NOFRAMES:case Ur.SCRIPT:case Ur.STYLE:case Ur.TEMPLATE:case Ur.TITLE:os(e,t);break;case Ur.CAPTION:case Ur.COLGROUP:case Ur.TBODY:case Ur.TFOOT:case Ur.THEAD:e.tmplInsertionModeStack[0]=Yi.IN_TABLE,e.insertionMode=Yi.IN_TABLE,Cs(e,t);break;case Ur.COL:e.tmplInsertionModeStack[0]=Yi.IN_COLUMN_GROUP,e.insertionMode=Yi.IN_COLUMN_GROUP,Ds(e,t);break;case Ur.TR:e.tmplInsertionModeStack[0]=Yi.IN_TABLE_BODY,e.insertionMode=Yi.IN_TABLE_BODY,ws(e,t);break;case Ur.TD:case Ur.TH:e.tmplInsertionModeStack[0]=Yi.IN_ROW,e.insertionMode=Yi.IN_ROW,Ms(e,t);break;default:e.tmplInsertionModeStack[0]=Yi.IN_BODY,e.insertionMode=Yi.IN_BODY,As(e,t)}}(this,e);break;case Yi.AFTER_BODY:!function(e,t){(t.tagID===Ur.HTML?As:Gs)(e,t)}(this,e);break;case Yi.IN_FRAMESET:!function(e,t){switch(t.tagID){case Ur.HTML:As(e,t);break;case Ur.FRAMESET:e._insertElement(t,Mr.HTML);break;case Ur.FRAME:e._appendElement(t,Mr.HTML),t.ackSelfClosing=!0;break;case Ur.NOFRAMES:os(e,t)}}(this,e);break;case Yi.AFTER_FRAMESET:!function(e,t){switch(t.tagID){case Ur.HTML:As(e,t);break;case Ur.NOFRAMES:os(e,t)}}(this,e);break;case Yi.AFTER_AFTER_BODY:!function(e,t){(t.tagID===Ur.HTML?As:js)(e,t)}(this,e);break;case Yi.AFTER_AFTER_FRAMESET:!function(e,t){switch(t.tagID){case Ur.HTML:As(e,t);break;case Ur.NOFRAMES:os(e,t)}}(this,e)}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?function(e,t){if(t.tagID===Ur.P||t.tagID===Ur.BR)return qs(e),e._endTagOutsideForeignContent(t);for(let n=e.openElements.stackTop;0=qi;!n||o?(o&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(a)):(a=Zi(e,n),r===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(a,r),r=a)}return r}function Zi(e,t){var n=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n}function Ji(e,t,n){var i,r=qr(e.treeAdapter.getTagName(t));e._isElementCausesFosterParenting(r)?e._fosterParentElement(n):(i=e.treeAdapter.getNamespaceURI(t),r===Ur.TEMPLATE&&i===Mr.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n))}function es(e,t,n){var r=e.treeAdapter.getNamespaceURI(n.element),i=n.token,r=e.treeAdapter.createElement(i.tagName,r,i.attrs);e._adoptNodes(t,r),e.treeAdapter.appendChild(t,r),e.activeFormattingElements.insertElementAfterBookmark(r,i),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,r,i.tagID)}function ts(e,t){for(let n=0;n=n;r--)e._setEndLocation(e.openElements.items[r],t);if(!e.fragmentContext&&0<=e.openElements.stackTop){const n=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(n);if(r&&!r.endTag&&(e._setEndLocation(n,t),1<=e.openElements.stackTop)){const n=e.openElements.items[1],r=e.treeAdapter.getNodeSourceCodeLocation(n);r&&!r.endTag&&e._setEndLocation(n,t)}}}}function is(e,t){e._err(t,_r.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,Br.QUIRKS),e.insertionMode=Yi.BEFORE_HTML,e._processToken(t)}function ss(e,t){e._insertFakeRootElement(),e.insertionMode=Yi.BEFORE_HEAD,e._processToken(t)}function as(e,t){e._insertFakeElement(Fr.HEAD,Ur.HEAD),e.headElement=e.openElements.current,e.insertionMode=Yi.IN_HEAD,e._processToken(t)}function os(e,t){switch(t.tagID){case Ur.HTML:As(e,t);break;case Ur.BASE:case Ur.BASEFONT:case Ur.BGSOUND:case Ur.LINK:case Ur.META:e._appendElement(t,Mr.HTML),t.ackSelfClosing=!0;break;case Ur.TITLE:e._switchToTextParsing(t,zr.RCDATA);break;case Ur.NOSCRIPT:e.options.scriptingEnabled?e._switchToTextParsing(t,zr.RAWTEXT):(e._insertElement(t,Mr.HTML),e.insertionMode=Yi.IN_HEAD_NO_SCRIPT);break;case Ur.NOFRAMES:case Ur.STYLE:e._switchToTextParsing(t,zr.RAWTEXT);break;case Ur.SCRIPT:e._switchToTextParsing(t,zr.SCRIPT_DATA);break;case Ur.TEMPLATE:e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=Yi.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(Yi.IN_TEMPLATE);break;case Ur.HEAD:e._err(t,_r.misplacedStartTagForHeadElement);break;default:us(e,t)}}function cs(e,t){0=t&&e.openElements.shortenToLength(t);break}if(e._isSpecialElement(i,s))break}}function vs(e,t){switch(t.tagID){case Ur.A:case Ur.B:case Ur.I:case Ur.S:case Ur.U:case Ur.EM:case Ur.TT:case Ur.BIG:case Ur.CODE:case Ur.FONT:case Ur.NOBR:case Ur.SMALL:case Ur.STRIKE:case Ur.STRONG:ts(e,t);break;case Ur.P:!function(e){e.openElements.hasInButtonScope(Ur.P)||e._insertFakeElement(Fr.P,Ur.P),e._closePElement()}(e);break;case Ur.DL:case Ur.UL:case Ur.OL:case Ur.DIR:case Ur.DIV:case Ur.NAV:case Ur.PRE:case Ur.MAIN:case Ur.MENU:case Ur.ASIDE:case Ur.BUTTON:case Ur.CENTER:case Ur.FIGURE:case Ur.FOOTER:case Ur.HEADER:case Ur.HGROUP:case Ur.DIALOG:case Ur.ADDRESS:case Ur.ARTICLE:case Ur.DETAILS:case Ur.SECTION:case Ur.SUMMARY:case Ur.LISTING:case Ur.FIELDSET:case Ur.BLOCKQUOTE:case Ur.FIGCAPTION:!function(e,t){t=t.tagID,e.openElements.hasInScope(t)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(t))}(e,t);break;case Ur.LI:!function(e){e.openElements.hasInListItemScope(Ur.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(Ur.LI),e.openElements.popUntilTagNamePopped(Ur.LI))}(e);break;case Ur.DD:case Ur.DT:!function(e,t){t=t.tagID,e.openElements.hasInScope(t)&&(e.openElements.generateImpliedEndTagsWithExclusion(t),e.openElements.popUntilTagNamePopped(t))}(e,t);break;case Ur.H1:case Ur.H2:case Ur.H3:case Ur.H4:case Ur.H5:case Ur.H6:!function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e);break;case Ur.BR:!function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(Fr.BR,Ur.BR),e.openElements.pop(),e.framesetOk=!1}(e);break;case Ur.BODY:!function(e,t){var n;e.openElements.hasInScope(Ur.BODY)&&(e.insertionMode=Yi.AFTER_BODY,e.options.sourceCodeLocationInfo)&&((n=e.openElements.tryPeekProperlyNestedBodyElement())&&e._setEndLocation(n,t))}(e,t);break;case Ur.HTML:!function(e,t){e.openElements.hasInScope(Ur.BODY)&&(e.insertionMode=Yi.AFTER_BODY,Hs(e,t))}(e,t);break;case Ur.FORM:!function(e){var t=0$\x80-\uFFFF]/g;var n=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);function r(e){for(var i="",s=0;null!==(r=t.xmlReplacer.exec(e));)var r=r.index,o=e.charCodeAt(r),c=n.get(o),s=void 0!==c?(i+=e.substring(s,r)+c,r+1):(i+="".concat(e.substring(s,r),"&#x").concat((0,t.getCodePoint)(e,r).toString(16),";"),t.xmlReplacer.lastIndex+=Number(55296==(64512&o)));return i+e.substr(s)}function i(e,t){return function(n){for(var r,i=0,s="";r=e.exec(n);)i!==r.index&&(s+=n.substring(i,r.index)),s+=t.get(r[0].charCodeAt(0)),i=r.index+1;return s+n.substring(i)}}t.getCodePoint=null!=String.prototype.codePointAt?function(e,t){return e.codePointAt(t)}:function(e,t){return 55296==(64512&e.charCodeAt(t))?1024*(e.charCodeAt(t)-55296)+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t)},t.encodeXML=r,t.escape=r,t.escapeUTF8=i(/[&<>'"]/g,n),t.escapeAttribute=i(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),t.escapeText=i(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))}),Ks=(yr(Ys),Ys.escapeText),Ws=Ys.escapeAttribute;Ys.escapeUTF8,Ys.escape,Ys.encodeXML,Ys.getCodePoint,Ys.xmlReplacer;const Vs=new Set([Fr.AREA,Fr.BASE,Fr.BASEFONT,Fr.BGSOUND,Fr.BR,Fr.COL,Fr.EMBED,Fr.FRAME,Fr.HR,Fr.IMG,Fr.INPUT,Fr.KEYGEN,Fr.LINK,Fr.META,Fr.PARAM,Fr.SOURCE,Fr.TRACK,Fr.WBR]),$s={treeAdapter:gi,scriptingEnabled:!0};function Qs(e,t){return zs(e,{...$s,...t})}function zs(e,t){return t.treeAdapter.isElementNode(e)?function(e,t){var n=t.treeAdapter.getTagName(e);return`<${n}${function(e,{treeAdapter:t}){let n="";for(const r of t.getAttrList(e)){if(n+=" ",r.namespace)switch(r.namespace){case Mr.XML:n+="xml:"+r.name;break;case Mr.XMLNS:"xmlns"!==r.name&&(n+="xmlns:"),n+=r.name;break;case Mr.XLINK:n+="xlink:"+r.name;break;default:n+=r.prefix+":"+r.name}else n+=r.name;n+=`="${Ws(r.value)}"`}return n}(e,t)}>`+(function(e,t){return t.treeAdapter.isElementNode(e)&&t.treeAdapter.getNamespaceURI(e)===Mr.HTML&&Vs.has(t.treeAdapter.getTagName(e))}(e,t)?"":function(e,t){let n="";var e=t.treeAdapter.isElementNode(e)&&t.treeAdapter.getTagName(e)===Fr.TEMPLATE&&t.treeAdapter.getNamespaceURI(e)===Mr.HTML?t.treeAdapter.getTemplateContent(e):e,i=t.treeAdapter.getChildNodes(e);if(i)for(const e of i)n+=zs(e,t);return n}(e,t)+``)}(e,t):t.treeAdapter.isTextNode(e)?function(e,t){var n=t.treeAdapter,r=n.getTextNodeContent(e),s=(e=n.getParentNode(e))&&n.isElementNode(e)&&n.getTagName(e);return s&&n.getNamespaceURI(e)===Mr.HTML&&(n=s,e=t.scriptingEnabled,Vr.has(n)||e&&n===Fr.NOSCRIPT)?r:Ks(r)}(e,t):t.treeAdapter.isCommentNode(e)?function(e,{treeAdapter:t}){return``}(e,t):t.treeAdapter.isDocumentTypeNode(e)?function(e,{treeAdapter:t}){return``}(e,t):""}function Xs(e){return new _(e)}function Zs(e){var t=e.includes('"')?"'":'"';return t+e+t}const Js={isCommentNode:b,isElementNode:S,isTextNode:N,createDocument(){var e=new v([]);return e["x-mode"]=Br.NO_QUIRKS,e},createDocumentFragment:()=>new v([]),createElement(e,t,n){var r=Object.create(null),i=Object.create(null),s=Object.create(null);for(let e=0;enew E(e),appendChild(e,t){var n=e.children[e.children.length-1];n&&((n.next=t).prev=n),e.children.push(t),t.parent=e},insertBefore(e,t,n){var r=e.children.indexOf(n),i=n.prev;i&&((i.next=t).prev=i),(n.prev=t).next=n,e.children.splice(r,0,t),t.parent=e},setTemplateContent(e,t){Js.appendChild(e,t)},getTemplateContent:e=>e.children[0],setDocumentType(e,t,n,r){var i=function(e,t,n){let r="!DOCTYPE ";return e&&(r+=e),t?r+=" PUBLIC "+Zs(t):n&&(r+=" SYSTEM"),n&&(r+=" "+Zs(n)),r}(t,n,r);let s=e.children.find(e=>I(e)&&"!doctype"===e.name);s?s.data=null!=i?i:null:(s=new T("!doctype",i),Js.appendChild(e,s)),s["x-name"]=null!=t?t:void 0,s["x-publicId"]=null!=n?n:void 0,s["x-systemId"]=null!=r?r:void 0},setDocumentMode(e,t){e["x-mode"]=t},getDocumentMode:e=>e["x-mode"],detachNode(e){var t,n,r;e.parent&&(t=e.parent.children.indexOf(e),{prev:n,next:r}=e,e.prev=null,e.next=null,n&&(n.next=r),r&&(r.prev=n),e.parent.children.splice(t,1),e.parent=null)},insertText(e,t){var n=e.children[e.children.length-1];n&&N(n)?n.data+=t:Js.appendChild(e,Xs(t))},insertTextBefore(e,t,n){var r=e.children[e.children.indexOf(n)-1];r&&N(r)?r.data+=t:Js.insertBefore(e,Xs(t),n)},adoptAttributes(e,t){for(let n=0;ne.children[0],getChildNodes:e=>e.children,getParentNode:e=>e.parent,getAttrList:e=>e.attributes,getTagName:e=>e.name,getNamespaceURI:e=>e.namespace,getTextNodeContent:e=>e.data,getCommentNodeContent:e=>e.data,getDocumentTypeNodeName(e){return null!=(e=e["x-name"])?e:""},getDocumentTypeNodePublicId(e){return null!=(e=e["x-publicId"])?e:""},getDocumentTypeNodeSystemId(e){return null!=(e=e["x-systemId"])?e:""},isDocumentTypeNode:e=>I(e)&&"!doctype"===e.name,setNodeSourceCodeLocation(e,t){t&&(e.startIndex=t.startOffset,e.endIndex=t.endOffset),e.sourceCodeLocation=t},getNodeSourceCodeLocation:e=>e.sourceCodeLocation,updateNodeSourceCodeLocation(e,t){null!=t.endOffset&&(e.endIndex=t.endOffset),e.sourceCodeLocation={...e.sourceCodeLocation,...t}}};var ea=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,s=t.length;i=na.Zero&&e<=na.Nine}!function(e){e[e.Tab=9]="Tab",e[e.NewLine=10]="NewLine",e[e.FormFeed=12]="FormFeed",e[e.CarriageReturn=13]="CarriageReturn",e[e.Space=32]="Space",e[e.ExclamationMark=33]="ExclamationMark",e[e.Number=35]="Number",e[e.Amp=38]="Amp",e[e.SingleQuote=39]="SingleQuote",e[e.DoubleQuote=34]="DoubleQuote",e[e.Dash=45]="Dash",e[e.Slash=47]="Slash",e[e.Zero=48]="Zero",e[e.Nine=57]="Nine",e[e.Semi=59]="Semi",e[e.Lt=60]="Lt",e[e.Eq=61]="Eq",e[e.Gt=62]="Gt",e[e.Questionmark=63]="Questionmark",e[e.UpperA=65]="UpperA",e[e.LowerA=97]="LowerA",e[e.UpperF=70]="UpperF",e[e.LowerF=102]="LowerF",e[e.UpperZ=90]="UpperZ",e[e.LowerZ=122]="LowerZ",e[e.LowerX=120]="LowerX",e[e.OpeningSquareBracket=91]="OpeningSquareBracket"}(na=na||{}),function(e){e[e.Text=1]="Text",e[e.BeforeTagName=2]="BeforeTagName",e[e.InTagName=3]="InTagName",e[e.InSelfClosingTag=4]="InSelfClosingTag",e[e.BeforeClosingTagName=5]="BeforeClosingTagName",e[e.InClosingTagName=6]="InClosingTagName",e[e.AfterClosingTagName=7]="AfterClosingTagName",e[e.BeforeAttributeName=8]="BeforeAttributeName",e[e.InAttributeName=9]="InAttributeName",e[e.AfterAttributeName=10]="AfterAttributeName",e[e.BeforeAttributeValue=11]="BeforeAttributeValue",e[e.InAttributeValueDq=12]="InAttributeValueDq",e[e.InAttributeValueSq=13]="InAttributeValueSq",e[e.InAttributeValueNq=14]="InAttributeValueNq",e[e.BeforeDeclaration=15]="BeforeDeclaration",e[e.InDeclaration=16]="InDeclaration",e[e.InProcessingInstruction=17]="InProcessingInstruction",e[e.BeforeComment=18]="BeforeComment",e[e.CDATASequence=19]="CDATASequence",e[e.InSpecialComment=20]="InSpecialComment",e[e.InCommentLike=21]="InCommentLike",e[e.BeforeSpecialS=22]="BeforeSpecialS",e[e.SpecialStartSequence=23]="SpecialStartSequence",e[e.InSpecialTag=24]="InSpecialTag",e[e.BeforeEntity=25]="BeforeEntity",e[e.BeforeNumericEntity=26]="BeforeNumericEntity",e[e.InNamedEntity=27]="InNamedEntity",e[e.InNumericEntity=28]="InNumericEntity",e[e.InHexEntity=29]="InHexEntity"}(ra=ra||{}),function(e){e[e.NoValue=0]="NoValue",e[e.Unquoted=1]="Unquoted",e[e.Single=2]="Single",e[e.Double=3]="Double"}(ia=ia||{});const ua={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])};class la{constructor({xmlMode:e=!1,decodeEntities:t=!0},n){this.cbs=n,this.state=ra.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=ra.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.trieIndex=0,this.trieCurrent=0,this.entityResult=0,this.entityExcess=0,this.xmlMode=e,this.decodeEntities=t,this.entityTrie=e?Hr:Gr}reset(){this.state=ra.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=ra.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(e){this.offset+=this.buffer.length,this.buffer=e,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=ra.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&e===na.Amp&&(this.state=ra.BeforeEntity)}stateSpecialStartSequence(e){var t=this.sequenceIndex===this.currentSequence.length;if(t?oa(e):(32|e)===this.currentSequence[this.sequenceIndex]){if(!t)return void this.sequenceIndex++}else this.isSpecial=!1;this.sequenceIndex=0,this.state=ra.InTagName,this.stateInTagName(e)}stateInSpecialTag(e){if(this.sequenceIndex===this.currentSequence.length){if(e===na.Gt||aa(e)){var t=this.index-this.currentSequence.length;if(this.sectionStart=na.LowerA&&e<=na.LowerZ||e>=na.UpperA&&e<=na.UpperZ}(e)}startSpecial(e,t){this.isSpecial=!0,this.currentSequence=e,this.sequenceIndex=t,this.state=ra.SpecialStartSequence}stateBeforeTagName(e){var t;e===na.ExclamationMark?(this.state=ra.BeforeDeclaration,this.sectionStart=this.index+1):e===na.Questionmark?(this.state=ra.InProcessingInstruction,this.sectionStart=this.index+1):this.isTagStartChar(e)?(t=32|e,this.sectionStart=this.index,this.xmlMode||t!==ua.TitleEnd[2]?this.state=this.xmlMode||t!==ua.ScriptEnd[2]?ra.InTagName:ra.BeforeSpecialS:this.startSpecial(ua.TitleEnd,3)):e===na.Slash?this.state=ra.BeforeClosingTagName:(this.state=ra.Text,this.stateText(e))}stateInTagName(e){oa(e)&&(this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=ra.BeforeAttributeName,this.stateBeforeAttributeName(e))}stateBeforeClosingTagName(e){aa(e)||(e===na.Gt?this.state=ra.Text:(this.state=this.isTagStartChar(e)?ra.InClosingTagName:ra.InSpecialComment,this.sectionStart=this.index))}stateInClosingTagName(e){e!==na.Gt&&!aa(e)||(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=ra.AfterClosingTagName,this.stateAfterClosingTagName(e))}stateAfterClosingTagName(e){e!==na.Gt&&!this.fastForwardTo(na.Gt)||(this.state=ra.Text,this.baseState=ra.Text,this.sectionStart=this.index+1)}stateBeforeAttributeName(e){e===na.Gt?(this.cbs.onopentagend(this.index),this.isSpecial?(this.state=ra.InSpecialTag,this.sequenceIndex=0):this.state=ra.Text,this.baseState=this.state,this.sectionStart=this.index+1):e===na.Slash?this.state=ra.InSelfClosingTag:aa(e)||(this.state=ra.InAttributeName,this.sectionStart=this.index)}stateInSelfClosingTag(e){e===na.Gt?(this.cbs.onselfclosingtag(this.index),this.state=ra.Text,this.baseState=ra.Text,this.sectionStart=this.index+1,this.isSpecial=!1):aa(e)||(this.state=ra.BeforeAttributeName,this.stateBeforeAttributeName(e))}stateInAttributeName(e){e!==na.Eq&&!oa(e)||(this.cbs.onattribname(this.sectionStart,this.index),this.sectionStart=-1,this.state=ra.AfterAttributeName,this.stateAfterAttributeName(e))}stateAfterAttributeName(e){e===na.Eq?this.state=ra.BeforeAttributeValue:e===na.Slash||e===na.Gt?(this.cbs.onattribend(ia.NoValue,this.index),this.state=ra.BeforeAttributeName,this.stateBeforeAttributeName(e)):aa(e)||(this.cbs.onattribend(ia.NoValue,this.index),this.state=ra.InAttributeName,this.sectionStart=this.index)}stateBeforeAttributeValue(e){e===na.DoubleQuote?(this.state=ra.InAttributeValueDq,this.sectionStart=this.index+1):e===na.SingleQuote?(this.state=ra.InAttributeValueSq,this.sectionStart=this.index+1):aa(e)||(this.sectionStart=this.index,this.state=ra.InAttributeValueNq,this.stateInAttributeValueNoQuotes(e))}handleInAttributeValue(e,t){e===t||!this.decodeEntities&&this.fastForwardTo(t)?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(t===na.DoubleQuote?ia.Double:ia.Single,this.index),this.state=ra.BeforeAttributeName):this.decodeEntities&&e===na.Amp&&(this.baseState=this.state,this.state=ra.BeforeEntity)}stateInAttributeValueDoubleQuotes(e){this.handleInAttributeValue(e,na.DoubleQuote)}stateInAttributeValueSingleQuotes(e){this.handleInAttributeValue(e,na.SingleQuote)}stateInAttributeValueNoQuotes(e){aa(e)||e===na.Gt?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(ia.Unquoted,this.index),this.state=ra.BeforeAttributeName,this.stateBeforeAttributeName(e)):this.decodeEntities&&e===na.Amp&&(this.baseState=this.state,this.state=ra.BeforeEntity)}stateBeforeDeclaration(e){e===na.OpeningSquareBracket?(this.state=ra.CDATASequence,this.sequenceIndex=0):this.state=e===na.Dash?ra.BeforeComment:ra.InDeclaration}stateInDeclaration(e){e!==na.Gt&&!this.fastForwardTo(na.Gt)||(this.cbs.ondeclaration(this.sectionStart,this.index),this.state=ra.Text,this.sectionStart=this.index+1)}stateInProcessingInstruction(e){e!==na.Gt&&!this.fastForwardTo(na.Gt)||(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=ra.Text,this.sectionStart=this.index+1)}stateBeforeComment(e){e===na.Dash?(this.state=ra.InCommentLike,this.currentSequence=ua.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=ra.InDeclaration}stateInSpecialComment(e){e!==na.Gt&&!this.fastForwardTo(na.Gt)||(this.cbs.oncomment(this.sectionStart,this.index,0),this.state=ra.Text,this.sectionStart=this.index+1)}stateBeforeSpecialS(e){var t=32|e;t===ua.ScriptEnd[3]?this.startSpecial(ua.ScriptEnd,4):t===ua.StyleEnd[3]?this.startSpecial(ua.StyleEnd,4):(this.state=ra.InTagName,this.stateInTagName(e))}stateBeforeEntity(e){this.entityExcess=1,this.entityResult=0,e===na.Number?this.state=ra.BeforeNumericEntity:e!==na.Amp&&(this.trieIndex=0,this.trieCurrent=this.entityTrie[0],this.state=ra.InNamedEntity,this.stateInNamedEntity(e))}stateInNamedEntity(e){if(this.entityExcess+=1,this.trieIndex=Dr(this.entityTrie,this.trieCurrent,this.trieIndex+1,e),this.trieIndex<0)this.emitNamedEntity(),this.index--;else{this.trieCurrent=this.entityTrie[this.trieIndex];var t=this.trieCurrent&Rr.VALUE_LENGTH;if(t)if(t=(t>>14)-1,this.allowLegacyEntity()||e===na.Semi){const e=this.index-this.entityExcess+1;e>this.sectionStart&&this.emitPartial(this.sectionStart,e),this.entityResult=this.trieIndex,this.trieIndex+=t,this.entityExcess=0,this.sectionStart=this.index+1,0==t&&this.emitNamedEntity()}else this.trieIndex+=t}}emitNamedEntity(){if(this.state=this.baseState,0!==this.entityResult)switch((this.entityTrie[this.entityResult]&Rr.VALUE_LENGTH)>>14){case 1:this.emitCodePoint(this.entityTrie[this.entityResult]&~Rr.VALUE_LENGTH);break;case 2:this.emitCodePoint(this.entityTrie[this.entityResult+1]);break;case 3:this.emitCodePoint(this.entityTrie[this.entityResult+1]),this.emitCodePoint(this.entityTrie[this.entityResult+2])}}stateBeforeNumericEntity(e){(32|e)===na.LowerX?(this.entityExcess++,this.state=ra.InHexEntity):(this.state=ra.InNumericEntity,this.stateInNumericEntity(e))}emitNumericEntity(e){var t=this.index-this.entityExcess-1;2+t+Number(this.state===ra.InHexEntity)!==this.index&&(t>this.sectionStart&&this.emitPartial(this.sectionStart,t),this.sectionStart=this.index+Number(e),this.emitCodePoint(xr(this.entityResult))),this.state=this.baseState}stateInNumericEntity(e){e===na.Semi?this.emitNumericEntity(!0):ca(e)?(this.entityResult=10*this.entityResult+(e-na.Zero),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)}stateInHexEntity(e){e===na.Semi?this.emitNumericEntity(!0):ca(e)?(this.entityResult=16*this.entityResult+(e-na.Zero),this.entityExcess++):function(e){return e>=na.UpperA&&e<=na.UpperF||e>=na.LowerA&&e<=na.LowerF}(e)?(this.entityResult=16*this.entityResult+((32|e)-na.LowerA+10),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)}allowLegacyEntity(){return!this.xmlMode&&(this.baseState===ra.Text||this.baseState===ra.InSpecialTag)}cleanup(){this.running&&this.sectionStart!==this.index&&(this.state===ra.Text||this.state===ra.InSpecialTag&&0===this.sequenceIndex?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):this.state!==ra.InAttributeValueDq&&this.state!==ra.InAttributeValueSq&&this.state!==ra.InAttributeValueNq||(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}shouldContinue(){return this.index=this.buffers[0].length;)this.shiftBuffer();let n=this.buffers[0].slice(e-this.bufferOffset,t-this.bufferOffset);for(;t-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),n+=this.buffers[0].slice(0,t-this.bufferOffset);return n}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(e){var t,n;this.ended?null!=(n=(t=this.cbs).onerror)&&n.call(t,new Error(".write() after done!")):(this.buffers.push(e),this.tokenizer.running&&(this.tokenizer.write(e),this.writeIndex++))}end(e){var t,n;this.ended?null!=(n=(t=this.cbs).onerror)&&n.call(t,new Error(".end() after done!")):(e&&this.write(e),this.ended=!0,this.tokenizer.end())}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex(t=this._getPreferredOutput(t),a&&Array.isArray(t)?e=e.concat(t):e.push(t),e),[]):this._getPreferredOutput(e[0]):o?[]:void 0},Fa.prototype._getPreferredOutput=function(e){const t=this.currResultType;switch(t){case"all":{const t=Array.isArray(e.path)?e.path:Fa.toPathArray(e.path);return e.pointer=Fa.toPointer(t),e.path="string"==typeof e.path?e.path:Fa.toPathString(e.path),e}case"value":case"parent":case"parentProperty":return e[t];case"path":return Fa.toPathString(e[t]);case"pointer":return Fa.toPointer(e.path);default:throw new TypeError("Unknown result type")}},Fa.prototype._handleCallback=function(e,t,n){var r;t&&(r=this._getPreferredOutput(e),e.path="string"==typeof e.path?e.path:Fa.toPathString(e.path),t(r,n,e))},Fa.prototype._trace=function(e,t,n,r,i,s,a,o){let c;if(!e.length)return c={path:n,value:t,parent:r,parentProperty:i,hasArrExpr:a},this._handleCallback(c,s,"value"),c;const u=e[0],l=e.slice(1),h=[];function f(e){Array.isArray(e)?e.forEach(e=>{h.push(e)}):h.push(e)}if(("string"!=typeof u||o)&&t&&xa.call(t,u))f(this._trace(l,t[u],Ma(n,u),t,u,s,a));else if("*"===u)this._walk(t,e=>{f(this._trace(l,t[e],Ma(n,e),t,e,s,!0,!0))});else if(".."===u)f(this._trace(l,t,n,r,i,s,a)),this._walk(t,r=>{"object"==typeof t[r]&&f(this._trace(e.slice(),t[r],Ma(n,r),t,r,s,!0))});else{if("^"===u)return this._hasParentSelector=!0,{path:n.slice(0,-1),expr:l,isParentSelector:!0};if("~"===u)return c={path:Ma(n,u),value:i,parent:r,parentProperty:null},this._handleCallback(c,s,"property"),c;if("$"===u)f(this._trace(l,t,n,null,null,s,a));else if(/^(-?\d*):(-?\d*):?(\d*)$/u.test(u))f(this._slice(u,l,t,n,r,i,s));else if(0===u.indexOf("?(")){if(this.currPreventEval)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");const e=u.replace(/^\?\((.*?)\)$/u,"$1");this._walk(t,a=>{this._eval(e,t[a],a,n,r,i)&&f(this._trace(l,t[a],Ma(n,a),t,a,s,!0))})}else if("("===u[0]){if(this.currPreventEval)throw new Error("Eval [(expr)] prevented in JSONPath expression.");f(this._trace(Pa(this._eval(u,t,n[n.length-1],n.slice(0,-1),r,i),l),t,n,r,i,s,a))}else if("@"===u[0]){let e=!1;const a=u.slice(1,-2);switch(a){case"scalar":t&&["object","function"].includes(typeof t)||(e=!0);break;case"boolean":case"string":case"undefined":case"function":typeof t===a&&(e=!0);break;case"integer":!Number.isFinite(t)||t%1||(e=!0);break;case"number":Number.isFinite(t)&&(e=!0);break;case"nonFinite":"number"!=typeof t||Number.isFinite(t)||(e=!0);break;case"object":t&&typeof t===a&&(e=!0);break;case"array":Array.isArray(t)&&(e=!0);break;case"other":e=this.currOtherTypeCallback(t,n,r,i);break;case"null":null===t&&(e=!0);break;default:throw new TypeError("Unknown value type "+a)}if(e)return c={path:n,value:t,parent:r,parentProperty:i},this._handleCallback(c,s,"value"),c}else if("`"===u[0]&&t&&xa.call(t,u.slice(1))){const e=u.slice(1);f(this._trace(l,t[e],Ma(n,e),t,e,s,a,!0))}else if(u.includes(",")){const e=u.split(",");for(const a of e)f(this._trace(Pa(a,l),t,n,r,i,s,!0))}else!o&&t&&xa.call(t,u)&&f(this._trace(l,t[u],Ma(n,u),t,u,s,a,!0))}if(this._hasParentSelector)for(let e=0;e{t(e)})},Fa.prototype._slice=function(e,t,n,r,i,s,a){if(Array.isArray(n)){var o=n.length,u=(e=e.split(":"))[2]&&Number.parseInt(e[2])||1,l=e[0]&&Number.parseInt(e[0])||0,h=e[1]&&Number.parseInt(e[1])||o,l=l<0?Math.max(0,l+o):Math.min(o,l),h=h<0?Math.max(0,h+o):Math.min(o,h);const f=[];for(let e=l;e{f.push(e)});return f}},Fa.prototype._eval=function(e,t,n,r,i,s){if(this.currSandbox._$_parentProperty=s,this.currSandbox._$_parent=i,this.currSandbox._$_property=n,this.currSandbox._$_root=this.json,this.currSandbox._$_v=t,(s=e.includes("@path"))&&(this.currSandbox._$_path=Fa.toPathString(r.concat([n]))),!Fa.cache[i="script:"+e]){let t=e.replace(/@parentProperty/gu,"_$_parentProperty").replace(/@parent/gu,"_$_parent").replace(/@property/gu,"_$_property").replace(/@root/gu,"_$_root").replace(/@([.\s)[])/gu,"_$_v$1");s&&(t=t.replace(/@path/gu,"_$_path")),Fa.cache[i]=new this.vm.Script(t)}try{return Fa.cache[i].runInNewContext(this.currSandbox)}catch(t){throw new Error("jsonPath: "+t.message+": "+e)}},Fa.cache={},Fa.toPathString=function(e){var t=e,n=t.length;let r="$";for(let e=1;e":">"},i=/[&"'<>]/g,s=e.exports={};function a(e,t){return n.hasOwnProperty.call(e,t)}function o(e){return r[e]}function c(e,t,n){var r,i,a,s,o;return e instanceof Error&&(e=(i=e).name+": "+i.message),Object.setPrototypeOf?(r=new Error(e),Object.setPrototypeOf(r,c.prototype)):(r=this,Object.defineProperty(r,"message",{enumerable:!1,writable:!0,value:e})),Object.defineProperty(r,"name",{value:"Template render error"}),Error.captureStackTrace&&Error.captureStackTrace(r,this.constructor),s=i?(a=Object.getOwnPropertyDescriptor(i,"stack"))&&(a.get||function(){return a.value})||function(){return i.stack}:(o=new Error(e).stack,function(){return o}),Object.defineProperty(r,"stack",{get:function(){return s.call(r)}}),Object.defineProperty(r,"cause",{value:i}),r.lineno=t,r.colno=n,r.firstUpdate=!0,r.Update=function(e){return e="("+(e||"unknown path")+")",this.firstUpdate&&(this.lineno&&this.colno?e+=" [Line "+this.lineno+", Column "+this.colno+"]":this.lineno&&(e+=" [Line "+this.lineno+"]")),e+="\n ",this.firstUpdate&&(e+=" "),this.message=e+(this.message||""),this.firstUpdate=!1,this},r}function u(e){return"[object Function]"===n.toString.call(e)}function l(e){return"[object Array]"===n.toString.call(e)}function h(e){return"[object String]"===n.toString.call(e)}function f(e){return"[object Object]"===n.toString.call(e)}function p(e){var t=function(e){return e?"string"==typeof e?e.split("."):[e]:[]}(e);return function(e){for(var n=e,r=0;rr&&(a.warned=!0,(r=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit")).name="MaxListenersExceededWarning",r.emitter=e,r.type=t,r.count=a.length,function(e){"function"==typeof console.warn?console.warn(e):console.log(e)}(r))):(a=s[t]=n,++e._eventsCount),e}function mo(e,t,n){var r=!1;function i(){e.removeListener(t,i),r||(r=!0,n.apply(e,arguments))}return i.listener=n,i}function _o(e){var t=this._events;if(t){if("function"==typeof(t=t[e]))return 1;if(t)return t.length}return 0}function Eo(e,t){for(var n=new Array(t);t--;)n[t]=e[t];return n}function To(){var e;ho.call(this),this.__emitError=(e=this,function(t){e.emit("error",t)})}function Ao(){return new To}lo.prototype=Object.create(null),(ho.EventEmitter=ho).usingDomains=!1,ho.prototype.domain=void 0,ho.prototype._events=void 0,ho.prototype._maxListeners=void 0,ho.defaultMaxListeners=10,ho.init=function(){this.domain=null,ho.usingDomains&&(void 0).active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new lo,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},ho.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},ho.prototype.getMaxListeners=function(){return fo(this)},ho.prototype.emit=function(e){var n,r,i,s,a,c="error"===e;if(a=this._events)c=c&&null==a.error;else if(!c)return!1;if(o=this.domain,c){if(c=arguments[1],o)return(c=c||new Error('Uncaught, unspecified "error" event')).domainEmitter=this,c.domain=o,c.domainThrown=!1,o.emit("error",c),!1;if(c instanceof Error)throw c;var o=new Error('Uncaught, unspecified "error" event. ('+c+")");throw o.context=c,o}if(!(n=a[e]))return!1;var l="function"==typeof n;switch(r=arguments.length){case 1:!function(e,n){if(l)e.call(n);else for(var r=e.length,i=Eo(e,r),s=0;s=","//","**"],u=r+this.current();switch(-1!==Ua.indexOf(c,u)&&(this.forward(),-1!==Ua.indexOf(c,(r=u)+this.current()))&&(r=u+this.current(),this.forward()),r){case"(":o=Ko;break;case")":o=Wo;break;case"[":o=Vo;break;case"]":o=$o;break;case"{":o=Qo;break;case"}":o=zo;break;case",":o=Zo;break;case":":o=Jo;break;case"~":o=ec;break;case"|":o=tc;break;default:o=Xo}return oc(o,r,t,n)}if((e=this._extractUntil(Mo+Po)).match(/^[-+]?[0-9]+$/))return"."===this.current()?(this.forward(),c=this._extract("0123456789"),oc(nc,e+"."+c,t,n)):oc("int",e,t,n);if(e.match(/^(true|false)$/))return oc(rc,e,t,n);if("none"===e)return oc(ic,e,t,n);if("null"===e)return oc(ic,e,t,n);if(e)return oc(sc,e,t,n);throw new Error("Unexpected value while parsing: "+e)}var h,f=this.tags.BLOCK_START.charAt(0)+this.tags.VARIABLE_START.charAt(0)+this.tags.COMMENT_START.charAt(0)+this.tags.COMMENT_END.charAt(0);if(this.isFinished())return null;if(e=(e=this._extractString(this.tags.BLOCK_START+"-"))||this._extractString(this.tags.BLOCK_START))return this.in_code=!0,oc(Ho,e,t,n);if(e=(e=this._extractString(this.tags.VARIABLE_START+"-"))||this._extractString(this.tags.VARIABLE_START))return this.in_code=!0,oc(jo,e,t,n);var e="",p=!1;for(this._matches(this.tags.COMMENT_START)&&(p=!0,e=this._extractString(this.tags.COMMENT_START));null!==(h=this._extractUntil(f));){if(e+=h,(this._matches(this.tags.BLOCK_START)||this._matches(this.tags.VARIABLE_START)||this._matches(this.tags.COMMENT_START))&&!p){if(this.lstripBlocks&&this._matches(this.tags.BLOCK_START)&&0this.len?null:this.str.slice(this.index,this.index+e.length)===e},t._extractString=function(e){return this._matches(e)?(this.forwardN(e.length),e):null},t._extractUntil=function(e){return this._extractMatching(!0,e||"")},t._extract=function(e){return this._extractMatching(!1,e)},t._extractMatching=function(e,t){if(this.isFinished())return null;var n=t.indexOf(this.current());if(e&&-1===n||!e&&-1!==n){var r=this.current();this.forward();for(var i=t.indexOf(this.current());(e&&-1===i||!e&&-1!==i)&&!this.isFinished();)r+=this.current(),this.forward(),i=t.indexOf(this.current());return r}return""},t._extractRegex=function(e){return(e=this.currentStr().match(e))?(this.forwardN(e[0].length),e):null},t.isFinished=function(){return this.index>=this.len},t.forwardN=function(e){for(var t=0;t",n+2),e(t,n+4)}))}};function Iu(e,t){return(Iu=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}bu.Node,bu.Root,bu.NodeList,bu.Value,bu.Literal,bu.Group,bu.Pair,bu.Dict,bu.Output,bu.Capture,bu.TemplateData,bu.If,bu.IfAsync,bu.InlineIf,bu.For,bu.AsyncEach,bu.AsyncAll,bu.Macro,bu.Caller,bu.Import,bu.FromImport,bu.FunCall,bu.Filter,bu.FilterAsync,bu.KeywordArgs,bu.Block,bu.Super,bu.Extends,bu.Include,bu.Switch,bu.Case,bu.LookupVal,bu.BinOp,bu.In,bu.Is,bu.Or,bu.And,bu.Not,bu.Add,bu.Concat,bu.Sub,bu.Mul,bu.Div,bu.FloorDiv,bu.Mod,bu.Pow,bu.Neg,bu.Pos,bu.Compare,bu.CompareOperand,bu.CallExtension,bu.CallExtensionAsync,bu.printNodes;var Ou=function(e){var n;function r(){return e.apply(this,arguments)||this}n=e,(t=r).prototype=Object.create(n.prototype),Iu(t.prototype.constructor=t,n);var t=r.prototype;return t.init=function(e){this.tokens=e,this.peeked=null,this.breakOnBlocks=null,this.dropLeadingWhitespace=!1,this.extensions=[]},t.nextToken=function(e){var t;if(this.peeked){if(e||this.peeked.type!==uc.TOKEN_WHITESPACE)return t=this.peeked,this.peeked=null,t;this.peeked=null}if(t=this.tokens.nextToken(),!e)for(;t&&t.type===uc.TOKEN_WHITESPACE;)t=this.tokens.nextToken();return t},t.peekToken=function(){return this.peeked=this.peeked||this.nextToken(),this.peeked},t.pushToken=function(e){if(this.peeked)throw new Error("pushToken: can only push one token on between reads");this.peeked=e},t.error=function(e,t,n){var r;return void 0!==t&&void 0!==n||(t=(r=this.peekToken()||{}).lineno,n=r.colno),void 0!==t&&(t+=1),void 0!==n&&(n+=1),new Ua.TemplateError(e,t,n)},t.fail=function(e,t,n){throw this.error(e,t,n)},t.skip=function(e){var t=this.nextToken();return!(!t||t.type!==e)||(this.pushToken(t),!1)},t.expect=function(e){var t=this.nextToken();return t.type!==e&&this.fail("expected "+e+", got "+t.type,t.lineno,t.colno),t},t.skipValue=function(e,t){var n=this.nextToken();return!(!n||n.type!==e||n.value!==t)||(this.pushToken(n),!1)},t.skipSymbol=function(e){return this.skipValue(uc.TOKEN_SYMBOL,e)},t.advanceAfterBlockEnd=function(e){var t;return e||((t=this.peekToken())||this.fail("unexpected end of file"),t.type!==uc.TOKEN_SYMBOL&&this.fail("advanceAfterBlockEnd: expected symbol token or explicit name to be passed"),e=this.nextToken().value),(t=this.nextToken())&&t.type===uc.TOKEN_BLOCK_END?"-"===t.value.charAt(0)&&(this.dropLeadingWhitespace=!0):this.fail("expected block end in "+e+" statement"),t},t.advanceAfterVariableEnd=function(){var e=this.nextToken();e&&e.type===uc.TOKEN_VARIABLE_END?this.dropLeadingWhitespace="-"===e.value.charAt(e.value.length-this.tokens.tags.VARIABLE_END.length-1):(this.pushToken(e),this.fail("expected variable end"))},t.parseFor=function(){var e,t,n=this.peekToken();if(this.skipSymbol("for")?(e=new bu.For(n.lineno,n.colno),t="endfor"):this.skipSymbol("asyncEach")?(e=new bu.AsyncEach(n.lineno,n.colno),t="endeach"):this.skipSymbol("asyncAll")?(e=new bu.AsyncAll(n.lineno,n.colno),t="endall"):this.fail("parseFor: expected for{Async}",n.lineno,n.colno),e.name=this.parsePrimary(),e.name instanceof bu.Symbol||this.fail("parseFor: variable name expected for loop"),this.peekToken().type===uc.TOKEN_COMMA){var r=e.name;for(e.name=new bu.Array(r.lineno,r.colno),e.name.addChild(r);this.skip(uc.TOKEN_COMMA);){var i=this.parsePrimary();e.name.addChild(i)}}return this.skipSymbol("in")||this.fail('parseFor: expected "in" keyword for loop',n.lineno,n.colno),e.arr=this.parseExpression(),this.advanceAfterBlockEnd(n.value),e.body=this.parseUntilBlocks(t,"else"),this.skipSymbol("else")&&(this.advanceAfterBlockEnd("else"),e.else_=this.parseUntilBlocks(t)),this.advanceAfterBlockEnd(),e},t.parseMacro=function(){var e=this.peekToken(),t=(this.skipSymbol("macro")||this.fail("expected macro"),this.parsePrimary(!0)),n=this.parseSignature(),t=new bu.Macro(e.lineno,e.colno,t,n);return this.advanceAfterBlockEnd(e.value),t.body=this.parseUntilBlocks("endmacro"),this.advanceAfterBlockEnd(),t},t.parseCall=function(){var e=this.peekToken(),t=(this.skipSymbol("call")||this.fail("expected call"),this.parseSignature(!0)||new bu.NodeList),n=this.parsePrimary(),r=(this.advanceAfterBlockEnd(e.value),this.parseUntilBlocks("endcall")),i=(this.advanceAfterBlockEnd(),new bu.Symbol(e.lineno,e.colno,"caller")),t=new bu.Caller(e.lineno,e.colno,i,t,r);return(r=n.args.children)[r.length-1]instanceof bu.KeywordArgs||r.push(new bu.KeywordArgs),r[r.length-1].addChild(new bu.Pair(e.lineno,e.colno,i,t)),new bu.Output(e.lineno,e.colno,[n])},t.parseWithContext=function(){var e=this.peekToken(),t=null;return this.skipSymbol("with")?t=!0:this.skipSymbol("without")&&(t=!1),null===t||this.skipSymbol("context")||this.fail("parseFrom: expected context after with/without",e.lineno,e.colno),t},t.parseImport=function(){var e=this.peekToken(),t=(this.skipSymbol("import")||this.fail("parseImport: expected import",e.lineno,e.colno),this.parseExpression()),n=(this.skipSymbol("as")||this.fail('parseImport: expected "as" keyword',e.lineno,e.colno),this.parseExpression()),r=this.parseWithContext(),t=new bu.Import(e.lineno,e.colno,t,n,r);return this.advanceAfterBlockEnd(e.value),t},t.parseFrom=function(){var e=this.peekToken(),t=(this.skipSymbol("from")||this.fail("parseFrom: expected from"),this.parseExpression());this.skipSymbol("import")||this.fail("parseFrom: expected import",e.lineno,e.colno);for(var n,r=new bu.NodeList;;){var a,i=this.peekToken();if(i.type===uc.TOKEN_BLOCK_END){r.children.length||this.fail("parseFrom: Expected at least one import name",e.lineno,e.colno),"-"===i.value.charAt(0)&&(this.dropLeadingWhitespace=!0),this.nextToken();break}0","<=",">="],t=this.parseConcat(),n=[];;){var r=this.nextToken();if(!r)break;if(-1===e.indexOf(r.value)){this.pushToken(r);break}n.push(new bu.CompareOperand(r.lineno,r.colno,this.parseConcat(),r.value))}return n.length?new bu.Compare(n[0].lineno,n[0].colno,t,n):t},t.parseConcat=function(){for(var e=this.parseAdd();this.skipValue(uc.TOKEN_TILDE,"~");)var t=this.parseAdd(),e=new bu.Concat(e.lineno,e.colno,e,t);return e},t.parseAdd=function(){for(var e=this.parseSub();this.skipValue(uc.TOKEN_OPERATOR,"+");)var t=this.parseSub(),e=new bu.Add(e.lineno,e.colno,e,t);return e},t.parseSub=function(){for(var e=this.parseMul();this.skipValue(uc.TOKEN_OPERATOR,"-");)var t=this.parseMul(),e=new bu.Sub(e.lineno,e.colno,e,t);return e},t.parseMul=function(){for(var e=this.parseDiv();this.skipValue(uc.TOKEN_OPERATOR,"*");)var t=this.parseDiv(),e=new bu.Mul(e.lineno,e.colno,e,t);return e},t.parseDiv=function(){for(var e=this.parseFloorDiv();this.skipValue(uc.TOKEN_OPERATOR,"/");)var t=this.parseFloorDiv(),e=new bu.Div(e.lineno,e.colno,e,t);return e},t.parseFloorDiv=function(){for(var e=this.parseMod();this.skipValue(uc.TOKEN_OPERATOR,"//");)var t=this.parseMod(),e=new bu.FloorDiv(e.lineno,e.colno,e,t);return e},t.parseMod=function(){for(var e=this.parsePow();this.skipValue(uc.TOKEN_OPERATOR,"%");)var t=this.parsePow(),e=new bu.Mod(e.lineno,e.colno,e,t);return e},t.parsePow=function(){for(var e=this.parseUnary();this.skipValue(uc.TOKEN_OPERATOR,"**");)var t=this.parseUnary(),e=new bu.Pow(e.lineno,e.colno,e,t);return e},t.parseUnary=function(e){var n=this.peekToken(),n=this.skipValue(uc.TOKEN_OPERATOR,"-")?new bu.Neg(n.lineno,n.colno,this.parseUnary(!0)):this.skipValue(uc.TOKEN_OPERATOR,"+")?new bu.Pos(n.lineno,n.colno,this.parseUnary(!0)):this.parsePrimary();return e?n:this.parseFilter(n)},t.parsePrimary=function(e){var t,n=this.nextToken();if(n?n.type===uc.TOKEN_STRING?t=n.value:n.type===uc.TOKEN_INT?t=parseInt(n.value,10):n.type===uc.TOKEN_FLOAT?t=parseFloat(n.value):n.type===uc.TOKEN_BOOLEAN?"true"===n.value?t=!0:"false"===n.value?t=!1:this.fail("invalid boolean: "+n.value,n.lineno,n.colno):n.type===uc.TOKEN_NONE?t=null:n.type===uc.TOKEN_REGEX&&(t=new RegExp(n.value.body,n.value.flags)):this.fail("expected expression, got end of file"),t=void 0!==t?new bu.Literal(n.lineno,n.colno,t):n.type===uc.TOKEN_SYMBOL?new bu.Symbol(n.lineno,n.colno,n.value):(this.pushToken(n),this.parseAggregate()),t=e?t:this.parsePostfix(t))return t;throw this.error("unexpected token: "+n.value,n.lineno,n.colno)},t.parseFilterName=function(){for(var e=this.expect(uc.TOKEN_SYMBOL),t=e.value;this.skipValue(uc.TOKEN_OPERATOR,".");)t+="."+this.expect(uc.TOKEN_SYMBOL).value;return new bu.Symbol(e.lineno,e.colno,t)},t.parseFilterArgs=function(e){return this.peekToken().type===uc.TOKEN_LEFT_PAREN?this.parsePostfix(e).args.children:[]},t.parseFilter=function(e){for(;this.skip(uc.TOKEN_PIPE);){var t=this.parseFilterName();e=new bu.Filter(t.lineno,t.colno,t,new bu.NodeList(t.lineno,t.colno,[e].concat(this.parseFilterArgs(e))))}return e},t.parseFilterStatement=function(){var e=this.peekToken(),t=(this.skipSymbol("filter")||this.fail("parseFilterStatement: expected filter"),this.parseFilterName()),n=this.parseFilterArgs(t),e=(this.advanceAfterBlockEnd(e.value),new bu.Capture(t.lineno,t.colno,this.parseUntilBlocks("endfilter"))),e=(this.advanceAfterBlockEnd(),new bu.Filter(t.lineno,t.colno,t,new bu.NodeList(t.lineno,t.colno,[e].concat(n))));return new bu.Output(t.lineno,t.colno,[e])},t.parseAggregate=function(){var e,t=this.nextToken();switch(t.type){case uc.TOKEN_LEFT_PAREN:e=new bu.Group(t.lineno,t.colno);break;case uc.TOKEN_LEFT_BRACKET:e=new bu.Array(t.lineno,t.colno);break;case uc.TOKEN_LEFT_CURLY:e=new bu.Dict(t.lineno,t.colno);break;default:return null}for(;;){var i,n=this.peekToken().type;if(n===uc.TOKEN_RIGHT_PAREN||n===uc.TOKEN_RIGHT_BRACKET||n===uc.TOKEN_RIGHT_CURLY){this.nextToken();break}0e.length)a=i.slice(0,e.length),i.slice(a.length,o).forEach(function(e,n){n":">","<=":"<=",">=":">="},Qu=function(e){var n;function r(){return e.apply(this,arguments)||this}n=e,(t=r).prototype=Object.create(n.prototype),Ku(t.prototype.constructor=t,n);var t=r.prototype;return t.init=function(e,t){this.templateName=e,this.codebuf=[],this.lastId=0,this.buffer=null,this.bufferStack=[],this._scopeClosers="",this.inBlock=!1,this.throwOnUndefined=t},t.fail=function(e,t,n){throw void 0!==t&&(t+=1),void 0!==n&&(n+=1),new Wu(e,t,n)},t._pushBuffer=function(){var e=this._tmpid();return this.bufferStack.push(this.buffer),this.buffer=e,this._emit("var "+this.buffer+' = "";'),e},t._popBuffer=function(){this.buffer=this.bufferStack.pop()},t._emit=function(e){this.codebuf.push(e)},t._emitLine=function(e){this._emit(e+"\n")},t._emitLines=function(){for(var e=this,t=arguments.length,n=new Array(t),r=0;r=(t=t||80)?e:(t-=e.length,i=Ua.repeat(" ",t/2-t%2),t=Ua.repeat(" ",t/2),Yu.copySafeness(e,i+e+t))},e.default=function(e,t,n){return n?e||t:void 0!==e?e:t},e.dictsort=function(e,t,n){if(!Ua.isObject(e))throw new Ua.TemplateError("dictsort filter: val must be an object");var r,s,i=[];for(s in e)i.push([s,e[s]]);if(void 0===n||"key"===n)r=0;else{if("value"!==n)throw new Ua.TemplateError("dictsort filter: You can only sort by either key or value");r=1}return i.sort(function(e,n){return e=e[r],n=n[r],t||(Ua.isString(e)&&(e=e.toUpperCase()),Ua.isString(n)&&(n=n.toUpperCase())),n\n"))},e.random=function(e){return e[Math.floor(Math.random()*e.length)]},e.reject=a(!1),e.rejectattr=function(e,t){return e.filter(function(e){return!e[t]})},e.select=a(!0),e.selectattr=function(e,t){return e.filter(function(e){return!!e[t]})},e.replace=function(e,t,n,r){var i=e;if(t instanceof RegExp)return e.replace(t,n);void 0===r&&(r=-1);var s="";if("number"==typeof t)t=""+t;else if("string"!=typeof t)return e;if("string"!=typeof(e="number"==typeof e?""+e:e)&&!(e instanceof Yu.SafeString))return e;if(""===t)return s=n+e.split("").join(n)+n,Yu.copySafeness(e,s);var a=e.indexOf(t);if(0===r||-1===a)return e;for(var o=0,c=0;-1]*>|/gi,"")),t=t?r.replace(/^ +| +$/gm,"").replace(/ +/g," ").replace(/(\r\n)/g,"\n").replace(/\n\n\n+/g,"\n\n"):r.replace(/\s+/gi," ");return Yu.copySafeness(e,t)},e.title=function(e){var t=(e=n(e,"")).split(" ").map(i);return Yu.copySafeness(e,t.join(" "))},e.trim=o,e.truncate=function(e,t,r,i){var s=e;return(e=n(e,"")).length<=(t=t||255)?e:(e=r?e.substring(0,t):(-1===(r=e.lastIndexOf(" ",t))&&(r=t),e.substring(0,r)),Yu.copySafeness(s,e+=null!=i?i:"..."))},e.upper=function(e){return(e=n(e,"")).toUpperCase()},e.urlencode=function(e){var t=encodeURIComponent;return Ua.isString(e)?t(e):(Ua.isArray(e)?e:Ua._entries(e)).map(function(e){var n=e[0],e=e[1];return t(n)+"="+t(e)}).join("&")};var c=/^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/,u=/^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i,l=/^https?:\/\/.*$/,h=/^www\./,f=/\.(?:org|net|com)(?:\:|\/|$)/,p=(e.urlize=function(e,t,n){r(t)&&(t=1/0);var i=!0===n?' rel="nofollow"':"";return e.split(/(\s+)/).filter(function(e){return e&&e.length}).map(function(e){var n=e.match(c),s=(n=n?n[1]:e).substr(0,t);return l.test(n)?'"+s+"":h.test(n)?'"+s+"":u.test(n)?''+n+"":f.test(n)?'"+s+"":e}).join("")},e.wordcount=function(e){return(e=(e=n(e,""))?e.match(/\w+/g):null)?e.length:null},e.float=function(e,t){return r(e=parseFloat(e))?t:e},Yu.makeMacro(["value","default","base"],[],function(e,t,n){return void 0===n&&(n=10),r(e=parseInt(e,n))?t:e}));e.int=p,e.d=e.default,e.e=e.escape}),Zu={};function Ju(e,t){for(var n=0,r=e.length-1;0<=r;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;)e.unshift("..");return e}var el=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,tl=function(e){return el.exec(e).slice(1)};function nl(){for(var e="",t=!1,n=arguments.length-1;-1<=n&&!t;n--){var r=0<=n?arguments[n]:"/";if("string"!=typeof r)throw new TypeError("Arguments to path.resolve must be strings");r&&(e=r+"/"+e,t="/"===r.charAt(0))}return(t?"/":"")+Ju(al(e.split("/"),function(e){return!!e}),!t).join("/")||"."}function rl(e){var t=il(e),n="/"===ol(e,-1);return(e=(e=Ju(al(e.split("/"),function(e){return!!e}),!t).join("/"))||t?e:".")&&n&&(e+="/"),(t?"/":"")+e}function il(e){return"/"===e.charAt(0)}var sl={extname:function(e){return tl(e)[3]},basename:function(e,t){return e=tl(e)[2],t&&e.substr(-1*t.length)===t?e.substr(0,e.length-t.length):e},dirname:function(e){var n=(e=tl(e))[0],e=e[1];return n||e?n+(e&&e.substr(0,e.length-1)):"."},sep:"/",delimiter:":",relative:function(e,t){function n(e){for(var t=0;t=e.length&&(t=0),this.current=e[t],this.current}};var e,t},joiner:function(e){e=e||",";var t=!0;return function(){var n=t?"":e;return t=!1,n}}}});function Al(e,t){e.prototype=Object.create(t.prototype),gl(e.prototype.constructor=e,t)}function gl(e,t){return(gl=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}var vl=_l.FileSystemLoader,yl=_l.WebLoader,Sl=_l.PrecompiledLoader,Cl=Ec.Obj,Nl=Ec.EmitterObj,bl=Yu.handleError,Il=Yu.Frame;function Ol(e,t,n){Ro(function(){e(t,n)})}var kl={type:"code",obj:{root:function(e,t,n,r,i){try{i(null,"")}catch(e){i(bl(e,null,null))}}}},Ll=function(e){function t(){return e.apply(this,arguments)||this}Al(t,e);var n=t.prototype;return n.init=function(e,t){var n=this;t=this.opts=t||{},this.opts.dev=!!t.dev,this.opts.autoescape=null==t.autoescape||t.autoescape,this.opts.throwOnUndefined=!!t.throwOnUndefined,this.opts.trimBlocks=!!t.trimBlocks,this.opts.lstripBlocks=!!t.lstripBlocks,this.loaders=[],e?this.loaders=Ua.isArray(e)?e:[e]:vl?this.loaders=[new vl("views")]:yl&&(this.loaders=[new yl("/views")]),"undefined"!=typeof window&&window.nunjucksPrecompiled&&this.loaders.unshift(new Sl(window.nunjucksPrecompiled)),this._initLoaders(),this.globals=Tl(),this.filters={},this.tests={},this.asyncFilters=[],this.extensions={},this.extensionsList=[],Ua._entries(Xu).forEach(function(e){var t=e[0],e=e[1];return n.addFilter(t,e)}),Ua._entries(El).forEach(function(e){var t=e[0],e=e[1];return n.addTest(t,e)})},n._initLoaders=function(){var e=this;this.loaders.forEach(function(t){t.cache={},"function"==typeof t.on&&(t.on("update",function(n,r){t.cache[n]=null,e.emit("update",n,r,t)}),t.on("load",function(n,r){e.emit("load",n,r,t)}))})},n.invalidateCache=function(){this.loaders.forEach(function(e){e.cache={}})},n.addExtension=function(e,t){return t.__name=e,this.extensions[e]=t,this.extensionsList.push(t),this},n.removeExtension=function(e){var t=this.getExtension(e);t&&(this.extensionsList=Ua.without(this.extensionsList,t),delete this.extensions[e])},n.getExtension=function(e){return this.extensions[e]},n.hasExtension=function(e){return!!this.extensions[e]},n.addGlobal=function(e,t){return this.globals[e]=t,this},n.getGlobal=function(e){if(void 0===this.globals[e])throw new Error("global not found: "+e);return this.globals[e]},n.addFilter=function(e,t,n){return n&&this.asyncFilters.push(e),this.filters[e]=t,this},n.getFilter=function(e){if(this.filters[e])return this.filters[e];throw new Error("filter not found: "+e)},n.addTest=function(e,t){return this.tests[e]=t,this},n.getTest=function(e){if(this.tests[e])return this.tests[e];throw new Error("test not found: "+e)},n.resolveTemplate=function(e,t,n){return e.isRelative&&t&&e.isRelative(n)&&e.resolve?e.resolve(t,n):n},n.getTemplate=function(e,t,n,r,i){var s,a=this,o=this,c=null;if(e&&e.raw&&(e=e.raw),Ua.isFunction(n)&&(i=n,n=null,t=t||!1),Ua.isFunction(t)&&(i=t,t=!1),e instanceof Rl)c=e;else{if("string"!=typeof e)throw new Error("template names must be a string: "+e);for(var u=0;u{var t=["th","st","nd","rd"],n=e%100;return`[${e}${t[(n-20)%10]||t[n]||t[0]}]`}};const th=(e,t,n)=>{var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},nh=(e,t)=>{var n,r,i;return e.date(){var e=-e.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),n=n%60;return(e<=0?"+":"-")+th(r,2,"0")+":"+th(n,2,"0")},m:nh,a:e=>e<0?Math.ceil(e)||0:Math.floor(e),p:e=>({M:Vl,y:Ql,w:Wl,d:Kl,D:zl,h:Yl,m:ql,s:jl,ms:Gl,Q:$l})[e]||String(e||"").toLowerCase().replace(/s$/,""),u:e=>void 0===e};let ih="en";const sh={},ah=(sh[ih]=eh,e=>e instanceof lh),oh=(e,t,n)=>{let r;if(!e)return ih;if("string"==typeof e){const n=e.toLowerCase();if(sh[n]&&(r=n),t&&(sh[n]=t,r=n),t=e.split("-"),!r&&1ch(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset});class lh{constructor(e){this.$L=oh(e.locale,null,!0),this.parse(e)}parse(e){this.$d=(e=>{const{date:t,utc:n}=e;if(null===t)return new Date(NaN);if(uh.u(t))return new Date;if(!(t instanceof Date||"string"!=typeof t||/Z$/i.test(t))){const e=t.match(Zl);if(e){const t=e[2]-1||0,r=(e[7]||"0").substring(0,3);return n?new Date(Date.UTC(e[1],t,e[3]||1,e[4]||0,e[5]||0,e[6]||0,r)):new Date(e[1],t,e[3]||1,e[4]||0,e[5]||0,e[6]||0,r)}}return new Date(t)})(e),this.$x=e.x||{},this.init()}init(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()}$utils(){return uh}isValid(){return!(this.$d.toString()===Xl)}isSame(e,t){return e=ch(e),this.startOf(t)<=e&&e<=this.endOf(t)}isAfter(e,t){return ch(e)(t=uh.w(this.$u?Date.UTC(this.$y,t,e):new Date(this.$y,t,e),this),n?t:t.endOf(Kl)),s=(e,t)=>uh.w(this.toDate()[e].apply(this.toDate("s"),(n?[0,0,0,0]:[23,59,59,999]).slice(t)),this),{$W:a,$M:o,$D:c}=this,u="set"+(this.$u?"UTC":"");switch(r){case Ql:return n?i(1,0):i(31,11);case Vl:return n?i(1,o):i(0,o+1);case Wl:{const e=this.$locale().weekStart||0,t=(a{var n=ch(this);return uh.w(n.date(n.date()+Math.round(t*e)),this)};return(t=uh.p(t))===Vl?this.set(Vl,this.$M+e):t===Ql?this.set(Ql,this.$y+e):t===Kl?r(1):t===Wl?r(7):(r={[ql]:Ul,[Yl]:Hl,[jl]:Fl}[t]||1,t=this.$d.getTime()+e*r,uh.w(t,this))}subtract(e,t){return this.add(-1*e,t)}format(e){var t=this.$locale();if(!this.isValid())return t.invalidDate||Xl;const n=e||"YYYY-MM-DDTHH:mm:ssZ",r=uh.z(this),{$H:i,$m:s,$M:a}=this,{weekdays:o,months:c,meridiem:u}=t,l=(e,t,r,i)=>e&&(e[t]||e(this,n))||r[t].slice(0,i),h=e=>uh.s(i%12||12,e,"0"),f=u||((e,t,n)=>(e=e<12?"AM":"PM",n?e.toLowerCase():e)),p={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:uh.s(a+1,2,"0"),MMM:l(t.monthsShort,a,c,3),MMMM:l(c,a),D:this.$D,DD:uh.s(this.$D,2,"0"),d:String(this.$W),dd:l(t.weekdaysMin,this.$W,o,2),ddd:l(t.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(i),HH:uh.s(i,2,"0"),h:h(1),hh:h(2),a:f(i,s,!0),A:f(i,s,!1),m:String(s),mm:uh.s(s,2,"0"),s:String(this.$s),ss:uh.s(this.$s,2,"0"),SSS:uh.s(this.$ms,3,"0"),Z:r};return n.replace(Jl,(e,t)=>t||p[e]||r.replace(":",""))}utcOffset(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)}diff(e,t,n){var t=uh.p(t),s=((e=ch(e)).utcOffset()-this.utcOffset())*Ul,a=this-e,e=uh.m(this,e),e={[Ql]:e/12,[Vl]:e,[$l]:e/3,[Wl]:(a-s)/6048e5,[Kl]:(a-s)/864e5,[Yl]:a/Hl,[ql]:a/Ul,[jl]:a/Fl}[t]||a;return n?e:uh.a(e)}daysInMonth(){return this.endOf(Vl).$D}$locale(){return sh[this.$L]}locale(e,t){var n;return e?(n=this.clone(),(e=oh(e,t,!0))&&(n.$L=e),n):this.$L}clone(){return uh.w(this.$d,this)}toDate(){return new Date(this.valueOf())}toJSON(){return this.isValid()?this.toISOString():null}toISOString(){return this.$d.toISOString()}toString(){return this.$d.toUTCString()}}const hh=lh.prototype;ch.prototype=hh,[["$ms",Gl],["$s",jl],["$m",ql],["$H",Yl],["$W",Kl],["$M",Vl],["$y",Ql],["$D",zl]].forEach(e=>{hh[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),ch.extend=(e,t)=>(e.$i||(e(t,lh,ch),e.$i=!0),ch),ch.locale=oh,ch.isDayjs=ah,ch.unix=e=>ch(1e3*e),ch.en=sh[ih],ch.Ls=sh,ch.p={};var fh=Sr(function(e){function r(e){return e&&(e=e.toString().replace(n.pluses,"%20"),e=decodeURIComponent(e)),e}function i(e){var t,i,s,a,o,c,u,l=[];if(null!=e&&""!==e)for(u=(i=(e=(t=0)===e.indexOf("?")?e.substring(1):e).toString().split(n.query_separator)).length;t>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(1"']/g,$=RegExp(W.source),Q=RegExp(V.source),z=/<%-([\s\S]+?)%>/g,X=/<%([\s\S]+?)%>/g,Z=/<%=([\s\S]+?)%>/g,J=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ee=/^\w*$/,te=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ne=/[\\^$.*+?()[\]{}|]/g,re=RegExp(ne.source),ie=/^\s+/,se=/\s/,ae=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,oe=/\{\n\/\* \[wrapped with (.+)\] \*/,ce=/,? & /,ue=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,le=/[()=,{}\[\]\/\s]/,he=/\\(\\)?/g,fe=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,pe=/\w*$/,de=/^[-+]0x[0-9a-f]+$/i,me=/^0b[01]+$/i,_e=/^\[object .+?Constructor\]$/,Ee=/^0o[0-7]+$/i,Te=/^(?:0|[1-9]\d*)$/,Ae=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ge=/($^)/,ve=/['\n\r\u2028\u2029\\]/g,ye="\\ud800-\\udfff",Se="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Ce="\\u2700-\\u27bf",be="A-Z\\xc0-\\xd6\\xd8-\\xde",Ie="\\ufe0e\\ufe0f",Le="["+ye+"]",De="["+(Oe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000")+"]",Re="["+Se+"]",xe="["+Ce+"]",Me="["+(Ne="a-z\\xdf-\\xf6\\xf8-\\xff")+"]",He="[\\ud800-\\udbff][\\udc00-\\udfff]",je="\\u200d",qe="(?:"+Me+"|"+(Oe="[^"+ye+Oe+"\\d+"+Ce+Ne+be+"]")+")",Oe="(?:"+(be="["+be+"]")+"|"+Oe+")",Ke="(?:['’](?:d|ll|m|re|s|t|ve))?",We="(?:['’](?:D|LL|M|RE|S|T|VE))?",$e=($e="["+Ie+"]?")+(Ve="(?:"+Re+"|"+(Ce="\\ud83c[\\udffb-\\udfff]")+")?")+"(?:"+je+"(?:"+[Ne="[^"+ye+"]",Ue="(?:\\ud83c[\\udde6-\\uddff]){2}",He].join("|")+")"+$e+Ve+")*",Ve="(?:"+[xe,Ue,He].join("|")+")"+$e,xe="(?:"+[Ne+Re+"?",Re,Ue,He,Le].join("|")+")",Ze=RegExp("['’]","g"),Je=RegExp(Re,"g"),et=RegExp(Ce+"(?="+Ce+")|"+xe+$e,"g"),tt=RegExp([be+"?"+Me+"+"+Ke+"(?="+[De,be,"$"].join("|")+")",Oe+"+"+We+"(?="+[De,be+qe,"$"].join("|")+")",be+"?"+qe+"+"+Ke,be+"+"+We,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])","\\d+",Ve].join("|"),"g"),nt=RegExp("["+je+ye+Se+Ie+"]"),rt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,it=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],st=-1,at={},ot=(at[x]=at[M]=at[P]=at[B]=at[F]=at[U]=at[H]=at[G]=at[j]=!0,at[_]=at[E]=at[R]=at[T]=at[w]=at[A]=at[g]=at[v]=at[S]=at[C]=at[N]=at[I]=at[O]=at[k]=at[D]=!1,{}),ct=(ot[_]=ot[E]=ot[R]=ot[w]=ot[T]=ot[A]=ot[x]=ot[M]=ot[P]=ot[B]=ot[F]=ot[S]=ot[C]=ot[N]=ot[I]=ot[O]=ot[k]=ot[L]=ot[U]=ot[H]=ot[G]=ot[j]=!0,ot[g]=ot[v]=ot[D]=!1,{"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"}),ut=parseFloat,lt=parseInt,Ne="object"==typeof gr&&gr&&gr.Object===Object&&gr,Ue="object"==typeof self&&self&&self.Object===Object&&self,pt=Ne||Ue||Function("return this")(),mt=(He=t&&!t.nodeType&&t)&&e&&!e.nodeType&&e,_t=mt&&mt.exports===He,Et=_t&&Ne.process,At=(Le=function(){try{return mt&&mt.require&&mt.require("util").types||Et&&Et.binding&&Et.binding("util")}catch(e){}}())&&Le.isArrayBuffer,gt=Le&&Le.isDate,vt=Le&&Le.isMap,yt=Le&&Le.isRegExp,St=Le&&Le.isSet,Ct=Le&&Le.isTypedArray;function Nt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function bt(e,t,n,r){for(var i=-1,s=null==e?0:e.length;++i":">",'"':""","'":"'"});function sn(e){return"\\"+ct[e]}function an(e){return nt.test(e)}function on(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function cn(e,t){return function(n){return e(t(n))}}function un(e,t){for(var n=-1,r=e.length,i=0,a=[];++n",""":'"',"'":"'"}),_n=function e(t){var ye=(t=null==t?pt:_n.defaults(pt.Object(),t,_n.pick(pt,it))).Array,Se=t.Date,Ce=t.Error,Ne=t.Function,be=t.Math,Ie=t.Object,Oe=t.RegExp,ke=t.String,Le=t.TypeError,De=ye.prototype,Re=Ne.prototype,we=Ie.prototype,xe=t["__core-js_shared__"],Me=Re.toString,Pe=we.hasOwnProperty,Be=0,Fe=(Re=/[^.]+$/.exec(xe&&xe.keys&&xe.keys.IE_PROTO||""))?"Symbol(src)_1."+Re:"",Ue=we.toString,He=Me.call(Ie),Ge=pt._,je=Oe("^"+Me.call(Pe).replace(ne,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Re=_t?t.Buffer:n,Ye=t.Symbol,Ke=t.Uint8Array,We=Re?Re.allocUnsafe:n,Ve=cn(Ie.getPrototypeOf,Ie),$e=Ie.create,Qe=we.propertyIsEnumerable,ze=De.splice,Xe=Ye?Ye.isConcatSpreadable:n,et=Ye?Ye.iterator:n,nt=Ye?Ye.toStringTag:n,ct=function(){try{var e=fs(Ie,"defineProperty");return e({},"",{}),e}catch(e){}}(),ht=t.clearTimeout!==pt.clearTimeout&&t.clearTimeout,ft=Se&&Se.now!==pt.Date.now&&Se.now,dt=t.setTimeout!==pt.setTimeout&&t.setTimeout,mt=be.ceil,Et=be.floor,Tt=Ie.getOwnPropertySymbols,Re=Re?Re.isBuffer:n,Wt=t.isFinite,En=De.join,Tn=cn(Ie.keys,Ie),An=be.max,gn=be.min,vn=Se.now,yn=t.parseInt,Sn=be.random,Cn=De.reverse,Se=fs(t,"DataView"),bn=fs(t,"Map"),In=fs(t,"Promise"),On=fs(t,"Set"),t=fs(t,"WeakMap"),Ln=fs(Ie,"create"),Dn=t&&new t,Rn={},wn=Fs(Se),xn=Fs(bn),Mn=Fs(In),Pn=Fs(On),Bn=Fs(t),Un=(Ye=Ye?Ye.prototype:n)?Ye.valueOf:n,Hn=Ye?Ye.toString:n;function Gn(e){if(to(e)&&!Ya(e)&&!(e instanceof Kn)){if(e instanceof Yn)return e;if(Pe.call(e,"__wrapped__"))return Us(e)}return new Yn(e)}var jn=function(){function e(){}return function(t){return eo(t)?$e?$e(t):(e.prototype=t,t=new e,e.prototype=n,t):{}}}();function qn(){}function Yn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=n}function Kn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=d,this.__views__=[]}function Wn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t>>0,t>>>=0;for(var s=ye(i);++r>>1,a=e[s];null!==a&&!co(a)&&(n?a<=t:a>>0)?(e=Ao(e))&&("string"==typeof t||null!=t&&!so(t))&&!(t=li(t))&&an(e)?yi(pn(e),0,r):e.split(t,r):[]},Gn.spread=function(e,t){if("function"!=typeof e)throw new Le(r);return t=null==t?0:An(mo(t),0),Xr(function(n){var r=n[t],n=yi(n,0,t);return r&&xt(n,r),Nt(e,this,n)})},Gn.tail=function(e){var t=null==e?0:e.length;return t?ii(e,1,t):[]},Gn.take=function(e,t,r){return e&&e.length?ii(e,0,(t=r||t===n?1:mo(t))<0?0:t):[]},Gn.takeRight=function(e,t,r){var i=null==e?0:e.length;return i?ii(e,(t=i-(r||t===n?1:mo(t)))<0?0:t,i):[]},Gn.takeRightWhile=function(e,t){return e&&e.length?di(e,us(t,3),!1,!0):[]},Gn.takeWhile=function(e,t){return e&&e.length?di(e,us(t,3)):[]},Gn.tap=function(e,t){return t(e),e},Gn.throttle=function(e,t,n){var i=!0,s=!0;if("function"!=typeof e)throw new Le(r);return eo(n)&&(i="leading"in n?!!n.leading:i,s="trailing"in n?!!n.trailing:s),Da(e,t,{leading:i,maxWait:t,trailing:s})},Gn.thru=pa,Gn.toArray=fo,Gn.toPairs=Uo,Gn.toPairsIn=Ho,Gn.toPath=function(e){return Ya(e)?wt(e,Bs):co(e)?[e]:Li(Ps(Ao(e)))},Gn.toPlainObject=To,Gn.transform=function(e,t,n){var s,r=Ya(e),i=r||$a(e)||uo(e);return t=us(t,4),null==n&&(s=e&&e.constructor,n=i?r?new s:[]:eo(e)&&Xa(s)?jn(Ve(e)):{}),(i?It:vr)(e,function(e,r,i){return t(n,e,r,i)}),n},Gn.unary=function(e){return Ia(e,1)},Gn.union=ta,Gn.unionBy=na,Gn.unionWith=ra,Gn.uniq=function(e){return e&&e.length?hi(e):[]},Gn.uniqBy=function(e,t){return e&&e.length?hi(e,us(t,2)):[]},Gn.uniqWith=function(e,t){return t="function"==typeof t?t:n,e&&e.length?hi(e,n,t):[]},Gn.unset=function(e,t){return null==e||fi(e,t)},Gn.unzip=ia,Gn.unzipWith=sa,Gn.update=function(e,t,n){return null==e?e:pi(e,t,Ai(n))},Gn.updateWith=function(e,t,r,i){return i="function"==typeof i?i:n,null==e?e:pi(e,t,Ai(r),i)},Gn.values=Go,Gn.valuesIn=function(e){return null==e?[]:Zt(e,wo(e))},Gn.without=aa,Gn.words=Zo,Gn.wrap=function(e,t){return Ba(Ai(t),e)},Gn.xor=oa,Gn.xorBy=ca,Gn.xorWith=ua,Gn.zip=la,Gn.zipObject=function(e,t){return Ei(e||[],t||[],nr)},Gn.zipObjectDeep=function(e,t){return Ei(e||[],t||[],ei)},Gn.zipWith=ha,Gn.entries=Uo,Gn.entriesIn=Ho,Gn.extend=vo,Gn.extendWith=yo,cc(Gn,Gn),Gn.add=Tc,Gn.attempt=Jo,Gn.camelCase=jo,Gn.capitalize=qo,Gn.ceil=Ac,Gn.clamp=function(e,t,r){return r===n&&(r=t,t=n),r!==n&&(r=(r=Eo(r))==r?r:0),t!==n&&(t=(t=Eo(t))==t?t:0),cr(Eo(e),t,r)},Gn.clone=function(e){return ur(e,4)},Gn.cloneDeep=function(e){return ur(e,5)},Gn.cloneDeepWith=function(e,t){return ur(e,5,t="function"==typeof t?t:n)},Gn.cloneWith=function(e,t){return ur(e,4,t="function"==typeof t?t:n)},Gn.conformsTo=function(e,t){return null==t||lr(e,t,Ro(t))},Gn.deburr=Yo,Gn.defaultTo=function(e,t){return null==e||e!=e?t:e},Gn.divide=gc,Gn.endsWith=function(e,t,r){e=Ao(e),t=li(t);var i=e.length,i=r=r===n?i:cr(mo(r),0,i);return 0<=(r-=t.length)&&e.slice(r,i)==t},Gn.eq=Ha,Gn.escape=function(e){return(e=Ao(e))&&Q.test(e)?e.replace(V,rn):e},Gn.escapeRegExp=function(e){return(e=Ao(e))&&re.test(e)?e.replace(ne,"\\$&"):e},Gn.every=function(e,t,r){return(Ya(e)?kt:function(e,t){var n=!0;return pr(e,function(e,r,i){return n=!!t(e,r,i)}),n})(e,us(t=r&&gs(e,t,r)?n:t,3))},Gn.find=_a,Gn.findIndex=qs,Gn.findKey=function(e,t){return Ut(e,us(t,3),vr)},Gn.findLast=Ea,Gn.findLastIndex=Ys,Gn.findLastKey=function(e,t){return Ut(e,us(t,3),yr)},Gn.floor=vc,Gn.forEach=Ta,Gn.forEachRight=Aa,Gn.forIn=function(e,t){return null==e?e:Ar(e,us(t,3),wo)},Gn.forInRight=function(e,t){return null==e?e:gr(e,us(t,3),wo)},Gn.forOwn=function(e,t){return e&&vr(e,us(t,3))},Gn.forOwnRight=function(e,t){return e&&yr(e,us(t,3))},Gn.get=Io,Gn.gt=Ga,Gn.gte=ja,Gn.has=function(e,t){return null!=e&&_s(e,t,Or)},Gn.hasIn=Oo,Gn.head=Ws,Gn.identity=ic,Gn.includes=function(e,t,n,r){return e=Wa(e)?e:Go(e),n=n&&!r?mo(n):0,r=e.length,n<0&&(n=An(r+n,0)),oo(e)?n<=r&&-1=gn(t,n)&&e=this.__values__.length;return{done:e,value:e?n:this.__values__[this.__index__++]}},Gn.prototype.plant=function(e){for(var t,r=this;r instanceof qn;)var i=Us(r),s=(i.__index__=0,i.__values__=n,t?s.__wrapped__=i:t=i,i),r=r.__wrapped__;return s.__wrapped__=e,t},Gn.prototype.reverse=function(){var e=this.__wrapped__;return e instanceof Kn?((e=(e=this.__actions__.length?new Kn(this):e).reverse()).__actions__.push({func:pa,args:[ea],thisArg:n}),new Yn(e,this.__chain__)):this.thru(ea)},Gn.prototype.toJSON=Gn.prototype.valueOf=Gn.prototype.value=function(){return mi(this.__wrapped__,this.__actions__)},Gn.prototype.first=Gn.prototype.head,et&&(Gn.prototype[et]=function(){return this}),Gn}();mt?((mt.exports=_n)._=_n,He._=_n):pt._=_n}.call(gr)}),dh=Sr(function(e,t){e.exports=function(e){var n;if("undefined"!=typeof window&&window.crypto&&(n=window.crypto),"undefined"!=typeof self&&self.crypto&&(n=self.crypto),!(n=!(n=!(n="undefined"!=typeof globalThis&&globalThis.crypto?globalThis.crypto:n)&&"undefined"!=typeof window&&window.msCrypto?window.msCrypto:n)&&void 0!==gr&&gr.crypto?gr.crypto:n))try{n=Zu}catch(e){}function r(){if(n){if("function"==typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")}var i=Object.create||function(){function e(){}return function(t){return e.prototype=t,t=new e,e.prototype=null,t}}(),s={},a=s.lib={},o=a.Base={extend:function(e){var t=i(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),(t.init.prototype=t).$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=a.WordArray=o.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=null!=n?n:4*e.length},toString:function(e){return(e||l).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,i=e.sigBytes;if(this.clamp(),r%4)for(var s=0;s>>2]>>>24-s%4*8&255;t[r+s>>>2]|=a<<24-(r+s)%4*8}else for(var o=0;o>>2]=n[o>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],n=0;n>>2]>>>24-i%4*8&255;r.push((s>>>4).toString(16)),r.push((15&s).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new c.init(n,t/2)}},h=u.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(s))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new c.init(n,t)}},f=u.Utf8={stringify:function(e){try{return decodeURIComponent(escape(h.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return h.parse(unescape(encodeURIComponent(e)))}},p=a.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n,r=this._data,i=r.words,s=r.sigBytes,a=this.blockSize,o=s/(4*a),u=(t?e.ceil(o):e.max((0|o)-this._minBufferSize,0))*a,t=e.min(4*u,s);if(u){for(var h=0;h>>2]|=e[i]<<24-i%4*8;t.call(this,r,n)}else t.apply(this,arguments)}).prototype=e)}(),n.lib.WordArray)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var t=n.lib.WordArray,r=n.enc;function i(e){return e<<8&4278255360|e>>>8&16711935}r.Utf16=r.Utf16BE={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i>>2]>>>16-i%4*8&65535;r.push(String.fromCharCode(s))}return r.join("")},parse:function(e){for(var n=e.length,r=[],i=0;i>>1]|=e.charCodeAt(i)<<16-i%2*16;return t.create(r,2*n)}},r.Utf16LE={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],s=0;s>>2]>>>16-s%4*8&65535);r.push(String.fromCharCode(a))}return r.join("")},parse:function(e){for(var n=e.length,r=[],s=0;s>>1]|=i(e.charCodeAt(s)<<16-s%2*16);return t.create(r,2*n)}}}(),n.enc.Utf16)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var e=n,t=e.lib.WordArray;function r(e,n,r){for(var o,i=[],s=0,a=0;a>>6-a%4*2,i[s>>>2]|=o<<24-s%4*8,s++);return t.create(i,s)}e.enc.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp();for(var i=[],s=0;s>>2]>>>24-s%4*8&255)<<16|(t[s+1>>>2]>>>24-(s+1)%4*8&255)<<8|t[s+2>>>2]>>>24-(s+2)%4*8&255,o=0;o<4&&s+.75*o>>6*(3-o)&63));var c=r.charAt(64);if(c)for(;i.length%4;)i.push(c);return i.join("")},parse:function(e){var t=e.length,n=this._map;if(!(i=this._reverseMap))for(var i=this._reverseMap=[],s=0;s>>6-a%4*2,i[s>>>2]|=o<<24-s%4*8,s++);return t.create(i,s)}e.enc.Base64url={stringify:function(e,t=!0){var n=e.words,r=e.sigBytes,i=t?this._safe_map:this._map;e.clamp();for(var s=[],a=0;a>>2]>>>24-a%4*8&255)<<16|(n[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|n[a+2>>>2]>>>24-(a+2)%4*8&255,c=0;c<4&&a+.75*c>>6*(3-c)&63));var u=i.charAt(64);if(u)for(;s.length%4;)s.push(u);return s.join("")},parse:function(e,t=!0){var n=e.length,i=t?this._safe_map:this._map;if(!(s=this._reverseMap))for(var s=this._reverseMap=[],a=0;a>>24)|4278255360&(i<<24|i>>>8)}var s=this._hash.words,a=e[t+0],c=e[t+1],p=e[t+2],d=e[t+3],m=e[t+4],_=e[t+5],E=e[t+6],T=e[t+7],A=e[t+8],g=e[t+9],v=e[t+10],y=e[t+11],S=e[t+12],C=e[t+13],N=e[t+14],b=e[t+15],I=u(s[0],O=s[1],k=s[2],L=s[3],a,7,o[0]),L=u(L,I,O,k,c,12,o[1]),k=u(k,L,I,O,p,17,o[2]),O=u(O,k,L,I,d,22,o[3]),I=u(I,O,k,L,m,7,o[4]),L=u(L,I,O,k,_,12,o[5]),k=u(k,L,I,O,E,17,o[6]),O=u(O,k,L,I,T,22,o[7]);I=u(I,O,k,L,A,7,o[8]),L=u(L,I,O,k,g,12,o[9]),k=u(k,L,I,O,v,17,o[10]),O=u(O,k,L,I,y,22,o[11]),I=u(I,O,k,L,S,7,o[12]),L=u(L,I,O,k,C,12,o[13]),k=u(k,L,I,O,N,17,o[14]),I=l(I,O=u(O,k,L,I,b,22,o[15]),k,L,c,5,o[16]),L=l(L,I,O,k,E,9,o[17]),k=l(k,L,I,O,y,14,o[18]),O=l(O,k,L,I,a,20,o[19]),I=l(I,O,k,L,_,5,o[20]),L=l(L,I,O,k,v,9,o[21]),k=l(k,L,I,O,b,14,o[22]),O=l(O,k,L,I,m,20,o[23]),I=l(I,O,k,L,g,5,o[24]),L=l(L,I,O,k,N,9,o[25]),k=l(k,L,I,O,d,14,o[26]),O=l(O,k,L,I,A,20,o[27]),I=l(I,O,k,L,C,5,o[28]),L=l(L,I,O,k,p,9,o[29]),k=l(k,L,I,O,T,14,o[30]),I=h(I,O=l(O,k,L,I,S,20,o[31]),k,L,_,4,o[32]),L=h(L,I,O,k,A,11,o[33]),k=h(k,L,I,O,y,16,o[34]),O=h(O,k,L,I,N,23,o[35]),I=h(I,O,k,L,c,4,o[36]),L=h(L,I,O,k,m,11,o[37]),k=h(k,L,I,O,T,16,o[38]),O=h(O,k,L,I,v,23,o[39]),I=h(I,O,k,L,C,4,o[40]),L=h(L,I,O,k,a,11,o[41]),k=h(k,L,I,O,d,16,o[42]),O=h(O,k,L,I,E,23,o[43]),I=h(I,O,k,L,g,4,o[44]),L=h(L,I,O,k,S,11,o[45]),k=h(k,L,I,O,b,16,o[46]),I=f(I,O=h(O,k,L,I,p,23,o[47]),k,L,a,6,o[48]),L=f(L,I,O,k,T,10,o[49]),k=f(k,L,I,O,N,15,o[50]),O=f(O,k,L,I,_,21,o[51]),I=f(I,O,k,L,S,6,o[52]),L=f(L,I,O,k,d,10,o[53]),k=f(k,L,I,O,v,15,o[54]),O=f(O,k,L,I,c,21,o[55]),I=f(I,O,k,L,A,6,o[56]),L=f(L,I,O,k,b,10,o[57]),k=f(k,L,I,O,E,15,o[58]),O=f(O,k,L,I,C,21,o[59]),I=f(I,O,k,L,m,6,o[60]),L=f(L,I,O,k,y,10,o[61]),k=f(k,L,I,O,p,15,o[62]),O=f(O,k,L,I,g,21,o[63]),s[0]=s[0]+I|0,s[1]=s[1]+O|0,s[2]=s[2]+k|0,s[3]=s[3]+L|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes,s=(n[i>>>5]|=128<<24-i%32,e.floor(r/4294967296));n[15+(64+i>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process();for(var c=(s=this._hash).words,u=0;u<4;u++){var l=c[u];c[u]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}}));function u(e,t,n,r,i,s,a){return((e=e+(t&n|~t&r)+i+a)<>>32-s)+t}function l(e,t,n,r,i,s,a){return((e=e+(t&r|n&~r)+i+a)<>>32-s)+t}function h(e,t,n,r,i,s,a){return((e=e+(t^n^r)+i+a)<>>32-s)+t}function f(e,t,n,r,i,s,a){return((e=e+(n^(t|~r))+i+a)<>>32-s)+t}t.MD5=s._createHelper(r),t.HmacMD5=s._createHmacHelper(r)}(Math),n.MD5)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var e=n,r=(t=e.lib).WordArray,i=t.Hasher,t=e.algo,a=[],t=t.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],c=n[4],u=0;u<80;u++){a[u]=u<16?0|e[t+u]:(l=a[u-3]^a[u-8]^a[u-14]^a[u-16])<<1|l>>>31;var l=(r<<5|r>>>27)+c+a[u];l+=u<20?1518500249+(i&s|~i&o):u<40?1859775393+(i^s^o):u<60?(i&s|i&o|s&o)-1894007588:(i^s^o)-899497514,c=o,o=s,s=i<<30|i>>>2,i=r,r=l}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(64+r>>>9<<4)]=Math.floor(n/4294967296),t[15+(64+r>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});e.SHA1=i._createHelper(t),e.HmacSHA1=i._createHmacHelper(t)}(),n.SHA1)}),Sr(function(e,t){var n;e.exports=(n=dh,function(e){var t=n,i=(r=t.lib).WordArray,s=r.Hasher,r=t.algo,o=[],c=[],u=(function(){function n(e){return 4294967296*(e-(0|e))|0}for(var r=2,i=0;i<64;)!function(t){for(var n=e.sqrt(t),r=2;r<=n;r++)if(!(t%r))return;return 1}(r)||(i<8&&(o[i]=n(e.pow(r,.5))),c[i]=n(e.pow(r,1/3)),i++),r++}(),[]),r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],a=n[3],o=n[4],l=n[5],h=n[6],f=n[7],p=0;p<64;p++){u[p]=p<16?0|e[t+p]:(((d=u[p-15])<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+u[p-7]+(((d=u[p-2])<<15|d>>>17)^(d<<13|d>>>19)^d>>>10)+u[p-16];var d=r&i^r&s^i&s,g=f+((o<<26|o>>>6)^(o<<21|o>>>11)^(o<<7|o>>>25))+(o&l^~o&h)+c[p]+u[p],f=h,h=l,l=o,o=a+g|0,a=s,s=i,i=r,r=g+(((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+d)|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+a|0,n[4]=n[4]+o|0,n[5]=n[5]+l|0,n[6]=n[6]+h|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(64+i>>>9<<4)]=e.floor(r/4294967296),n[15+(64+i>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),n.SHA256)}),Sr(function(e,t){var n,r,s,i;e.exports=(r=(n=e=dh).lib.WordArray,i=n.algo,s=i.SHA256,i=i.SHA224=s.extend({_doReset:function(){this._hash=new r.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var e=s._doFinalize.call(this);return e.sigBytes-=4,e}}),n.SHA224=s._createHelper(i),n.HmacSHA224=s._createHmacHelper(i),e.SHA224)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var e=n,t=e.lib.Hasher,i=(r=e.x64).Word,s=r.WordArray,r=e.algo;function o(){return i.create.apply(i,arguments)}var c=[o(1116352408,3609767458),o(1899447441,602891725),o(3049323471,3964484399),o(3921009573,2173295548),o(961987163,4081628472),o(1508970993,3053834265),o(2453635748,2937671579),o(2870763221,3664609560),o(3624381080,2734883394),o(310598401,1164996542),o(607225278,1323610764),o(1426881987,3590304994),o(1925078388,4068182383),o(2162078206,991336113),o(2614888103,633803317),o(3248222580,3479774868),o(3835390401,2666613458),o(4022224774,944711139),o(264347078,2341262773),o(604807628,2007800933),o(770255983,1495990901),o(1249150122,1856431235),o(1555081692,3175218132),o(1996064986,2198950837),o(2554220882,3999719339),o(2821834349,766784016),o(2952996808,2566594879),o(3210313671,3203337956),o(3336571891,1034457026),o(3584528711,2466948901),o(113926993,3758326383),o(338241895,168717936),o(666307205,1188179964),o(773529912,1546045734),o(1294757372,1522805485),o(1396182291,2643833823),o(1695183700,2343527390),o(1986661051,1014477480),o(2177026350,1206759142),o(2456956037,344077627),o(2730485921,1290863460),o(2820302411,3158454273),o(3259730800,3505952657),o(3345764771,106217008),o(3516065817,3606008344),o(3600352804,1432725776),o(4094571909,1467031594),o(275423344,851169720),o(430227734,3100823752),o(506948616,1363258195),o(659060556,3750685593),o(883997877,3785050280),o(958139571,3318307427),o(1322822218,3812723403),o(1537002063,2003034995),o(1747873779,3602036899),o(1955562222,1575990012),o(2024104815,1125592928),o(2227730452,2716904306),o(2361852424,442776044),o(2428436474,593698344),o(2756734187,3733110249),o(3204031479,2999351573),o(3329325298,3815920427),o(3391569614,3928383900),o(3515267271,566280711),o(3940187606,3454069534),o(4118630271,4000239992),o(116418474,1914138554),o(174292421,2731055270),o(289380356,3203993006),o(460393269,320620315),o(685471733,587496836),o(852142971,1086792851),o(1017036298,365543100),o(1126000580,2618297676),o(1288033470,3409855158),o(1501505948,4234509866),o(1607167915,987167468),o(1816402316,1246189591)],u=[],r=(function(){for(var e=0;e<80;e++)u[e]=o()}(),r.SHA512=t.extend({_doReset:function(){this._hash=new s.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var r=(n=this._hash.words)[0],i=n[1],s=n[2],a=n[3],o=n[4],l=n[5],h=n[6],n=n[7],p=r.high,d=r.low,m=i.high,_=i.low,E=s.high,T=s.low,A=a.high,g=a.low,v=o.high,y=o.low,S=l.high,C=l.low,N=h.high,b=h.low,I=n.high,O=n.low,k=p,L=d,D=m,R=_,w=E,x=T,M=A,P=g,B=v,F=y,U=S,H=C,G=N,j=b,q=I,Y=O,K=0;K<80;K++){var W,V,$=u[K];K<16?(V=$.high=0|e[t+2*K],W=$.low=0|e[t+2*K+1]):(z=(Q=u[K-15]).high,Q=Q.low,te=(ee=u[K-2]).high,ee=ee.low,V=(V=(V=((z>>>1|Q<<31)^(z>>>8|Q<<24)^z>>>7)+(se=u[K-7]).high+((W=(Q=(Q>>>1|z<<31)^(Q>>>8|z<<24)^(Q>>>7|z<<25))+se.low)>>>0>>0?1:0))+((te>>>19|ee<<13)^(te<<3|ee>>>29)^te>>>6)+((W+=z=(ee>>>19|te<<13)^(ee<<3|te>>>29)^(ee>>>6|te<<26))>>>0>>0?1:0))+(se=u[K-16]).high+((W+=Q=se.low)>>>0>>0?1:0),$.high=V,$.low=W);var he,ee=B&U^~B&G,te=F&H^~F&j,z=k&D^k&w^D&w,se=(L>>>28|k<<4)^(L<<30|k>>>2)^(L<<25|k>>>7),Q=c[K],$=Q.high,ye=Q.low,Se=q+((B>>>14|F<<18)^(B>>>18|F<<14)^(B<<23|F>>>9))+((he=Y+((F>>>14|B<<18)^(F>>>18|B<<14)^(F<<23|B>>>9)))>>>0>>0?1:0),Ce=se+(L&R^L&x^R&x),q=G,Y=j,G=U,j=H,U=B,H=F,B=M+(Se=Se+ee+((he+=te)>>>0>>0?1:0)+$+((he+=ye)>>>0>>0?1:0)+V+((he+=W)>>>0>>0?1:0))+((F=P+he|0)>>>0

>>0?1:0)|0,M=w,P=x,w=D,x=R,D=k,R=L,k=Se+(((k>>>28|L<<4)^(k<<30|L>>>2)^(k<<25|L>>>7))+z+(Ce>>>0>>0?1:0))+((L=he+Ce|0)>>>0>>0?1:0)|0}d=r.low=d+L,r.high=p+k+(d>>>0>>0?1:0),_=i.low=_+R,i.high=m+D+(_>>>0>>0?1:0),T=s.low=T+x,s.high=E+w+(T>>>0>>0?1:0),g=a.low=g+P,a.high=A+M+(g>>>0

>>0?1:0),y=o.low=y+F,o.high=v+B+(y>>>0>>0?1:0),C=l.low=C+H,l.high=S+U+(C>>>0>>0?1:0),b=h.low=b+j,h.high=N+G+(b>>>0>>0?1:0),O=n.low=O+Y,n.high=I+q+(O>>>0>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[30+(128+r>>>10<<5)]=Math.floor(n/4294967296),t[31+(128+r>>>10<<5)]=n,e.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var e=t.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32}));e.SHA512=t._createHelper(r),e.HmacSHA512=t._createHmacHelper(r)}(),n.SHA512)}),Sr(function(e,t){var n,i,s,o,r;e.exports=(r=(n=e=dh).x64,i=r.Word,s=r.WordArray,r=n.algo,o=r.SHA512,r=r.SHA384=o.extend({_doReset:function(){this._hash=new s.init([new i.init(3418070365,3238371032),new i.init(1654270250,914150663),new i.init(2438529370,812702999),new i.init(355462360,4144912697),new i.init(1731405415,4290775857),new i.init(2394180231,1750603025),new i.init(3675008525,1694076839),new i.init(1203062813,3204075428)])},_doFinalize:function(){var e=o._doFinalize.call(this);return e.sigBytes-=16,e}}),n.SHA384=o._createHelper(r),n.HmacSHA384=o._createHmacHelper(r),e.SHA384)}),Sr(function(e,t){var n;e.exports=(n=dh,function(e){var t=n,i=(r=t.lib).WordArray,s=r.Hasher,a=t.x64.Word,r=t.algo,c=[],u=[],l=[],h=(function(){for(var e=1,t=0,n=0;n<24;n++){c[e+5*t]=(n+1)*(n+2)/2%64;var r=(2*e+3*t)%5,e=t%5,t=r}for(e=0;e<5;e++)for(t=0;t<5;t++)u[e+5*t]=t+(2*e+3*t)%5*5;for(var i=1,s=0;s<24;s++){for(var p,o=0,h=0,f=0;f<7;f++)1&i&&((p=(1<>>24)|4278255360&(s<<24|s>>>8);(O=n[i]).high^=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),O.low^=s}for(var o=0;o<24;o++){for(var f=0;f<5;f++){for(var p=0,d=0,m=0;m<5;m++)p^=(O=n[f+5*m]).high,d^=O.low;var _=h[f];_.high=p,_.low=d}for(f=0;f<5;f++)for(var E=h[(f+4)%5],A=(T=h[(f+1)%5]).high,T=T.low,p=E.high^(A<<1|T>>>31),d=E.low^(T<<1|A>>>31),m=0;m<5;m++)(O=n[f+5*m]).high^=p,O.low^=d;for(var v=1;v<25;v++){var y=(O=n[v]).high,S=O.low,C=c[v];d=C<32?(p=y<>>32-C,S<>>32-C):(p=S<>>64-C,y<>>64-C),(y=h[u[v]]).high=p,y.low=d}var b=h[0],I=n[0];for(b.high=I.high,b.low=I.low,f=0;f<5;f++)for(m=0;m<5;m++){var O=n[v=f+5*m],k=h[v],L=h[(f+1)%5+5*m],D=h[(f+2)%5+5*m];O.high=k.high^~L.high&D.high,O.low=k.low^~L.low&D.low}(O=n[0]).high^=(b=l[o]).high,O.low^=b.low}},_doFinalize:function(){var t=this._data,n=t.words,r=(this._nDataBytes,8*t.sigBytes),s=32*this.blockSize;n[r>>>5]|=1<<24-r%32,n[(e.ceil((1+r)/s)*s>>>5)-1]|=128,t.sigBytes=4*n.length,this._process();for(var a=this._state,c=(r=this.cfg.outputLength/8)/8,u=[],l=0;l>>24)|4278255360&(f<<24|f>>>8);u.push(16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)),u.push(f)}return new i.init(u,r)},clone:function(){for(var e=s.clone.call(this),t=e._state=this._state.slice(0),n=0;n<25;n++)t[n]=t[n].clone();return e}}));t.SHA3=s._createHelper(r),t.HmacSHA3=s._createHmacHelper(r)}(Math),n.SHA3)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var t=n,i=(r=t.lib).WordArray,s=r.Hasher,r=t.algo,o=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),c=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),u=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),l=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),h=i.create([0,1518500249,1859775393,2400959708,2840853838]),f=i.create([1352829926,1548603684,1836072691,2053994217,0]),r=r.RIPEMD160=s.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,i=e[r];e[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}for(var s,a,p,g,v,I,O=this._hash.words,k=h.words,L=f.words,D=o.words,R=c.words,w=u.words,x=l.words,y=s=O[0],S=a=O[1],C=p=O[2],N=g=O[3],b=v=O[4],n=0;n<80;n+=1)I=(I=A(I=(I=s+e[t+D[n]]|0)+(n<16?(a^p^g)+k[0]:n<32?m(a,p,g)+k[1]:n<48?((a|~p)^g)+k[2]:n<64?E(a,p,g)+k[3]:(a^(p|~g))+k[4])|0,w[n]))+v|0,s=v,v=g,g=A(p,10),p=a,a=I,I=(I=A(I=(I=y+e[t+R[n]]|0)+(n<16?(S^(C|~N))+L[0]:n<32?E(S,C,N)+L[1]:n<48?((S|~C)^N)+L[2]:n<64?m(S,C,N)+L[3]:(S^C^N)+L[4])|0,x[n]))+b|0,y=b,b=N,N=A(C,10),C=S,S=I;I=O[1]+p+N|0,O[1]=O[2]+g+b|0,O[2]=O[3]+v+y|0,O[3]=O[4]+s+S|0,O[4]=O[0]+a+C|0,O[0]=I},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;t[r>>>5]|=128<<24-r%32,t[14+(64+r>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e.sigBytes=4*(t.length+1),this._process();for(var s=(r=this._hash).words,a=0;a<5;a++){var o=s[a];s[a]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}return r},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});function m(e,t,n){return e&t|~e&n}function E(e,t,n){return e&n|t&~n}function A(e,t){return e<>>32-t}t.RIPEMD160=s._createHelper(r),t.HmacRIPEMD160=s._createHmacHelper(r)}(),n.RIPEMD160)}),Sr(function(e,t){var i;e.exports=(e=dh.lib.Base,i=dh.enc.Utf8,void(dh.algo.HMAC=e.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=i.parse(t));var n=e.blockSize,r=4*n;(t=t.sigBytes>r?e.finalize(t):t).clamp();for(var e=this._oKey=t.clone(),t=this._iKey=t.clone(),o=e.words,c=t.words,u=0;u>>2];e.sigBytes-=t}},m=(r.BlockCipher=l.extend({cfg:l.cfg.extend({mode:o,padding:d}),reset:function(){l.reset.call(this);var e,n=(t=this.cfg).iv,t=t.mode;this._xformMode==this._ENC_XFORM_MODE?e=t.createEncryptor:(e=t.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==e?this._mode.init(this,n&&n.words):(this._mode=e.call(t,this,n&&n.words),this._mode.__creator=e)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e,t=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e},blockSize:4}),r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),o=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return((e=e.salt)?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(c)},parse:function(e){var t,r=(e=c.parse(e)).words;return 1398893684==r[0]&&1701076831==r[1]&&(t=s.create(r.slice(2,4)),r.splice(0,4),e.sigBytes-=16),m.create({ciphertext:e,salt:t})}},E=r.SerializableCipher=i.extend({cfg:i.extend({format:o}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var t=(i=e.createEncryptor(n,r)).finalize(t),i=i.cfg;return m.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),d=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r=r||s.random(8),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,m.create({key:e,iv:n,salt:r})}},A=r.PasswordBasedCipher=E.extend({cfg:E.cfg.extend({kdf:d}),encrypt:function(e,t,n,r){return n=(r=this.cfg.extend(r)).kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,(e=E.encrypt.call(this,e,t,n.key,r)).mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,E.decrypt.call(this,e,t,n.key,r)}});function e(e){return"string"==typeof e?A:E}}())}),Sr(function(e,t){var n;e.exports=((n=dh).mode.CFB=function(){var e=n.lib.BlockCipherMode.extend();function t(e,t,n,r){var i,s=this._iv;s?(i=s.slice(0),this._iv=void 0):i=this._prevBlock,r.encryptBlock(i,0);for(var a=0;a>24&255)?(n=e>>8&255,r=255&e,255==(t=e>>16&255)?(t=0,255===n?(n=0,255===r?r=0:++r):++n):++t,e=0,e=(e+=t<<16)+(n<<8)+r):e+=1<<24,e}function r(e){0===(e[0]=t(e[0]))&&(e[1]=t(e[1]))}var i=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,i=n.blockSize,s=this._iv,a=this._counter,o=(s&&(a=this._counter=s.slice(0),this._iv=void 0),r(a),a.slice(0));n.encryptBlock(o,0);for(var c=0;c>>2]|=t<<24-n%4*8,e.sigBytes+=t},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},dh.pad.Ansix923)}),Sr(function(e,t){var n;e.exports=((n=dh).pad.Iso10126={pad:function(e,t){t=(t*=4)-e.sigBytes%t,e.concat(n.lib.WordArray.random(t-1)).concat(n.lib.WordArray.create([t<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},n.pad.Iso10126)}),Sr(function(e,t){var n;e.exports=((n=dh).pad.Iso97971={pad:function(e,t){e.concat(n.lib.WordArray.create([2147483648],1)),n.pad.ZeroPadding.pad(e,t)},unpad:function(e){n.pad.ZeroPadding.unpad(e),e.sigBytes--}},n.pad.Iso97971)}),Sr(function(e,t){e.exports=(dh.pad.ZeroPadding={pad:function(e,t){t*=4,e.clamp(),e.sigBytes+=t-(e.sigBytes%t||t)},unpad:function(e){for(var t=e.words,n=e.sigBytes-1,n=e.sigBytes-1;0<=n;n--)if(t[n>>>2]>>>24-n%4*8&255){e.sigBytes=n+1;break}}},dh.pad.ZeroPadding)}),Sr(function(e,t){e.exports=(dh.pad.NoPadding={pad:function(){},unpad:function(){}},dh.pad.NoPadding)}),Sr(function(e,t){var r,i;e.exports=(r=(e=dh).lib.CipherParams,i=e.enc.Hex,e.format.Hex={stringify:function(e){return e.ciphertext.toString(i)},parse:function(e){return e=i.parse(e),r.create({ciphertext:e})}},e.format.Hex)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],a=[],o=[],c=[],u=[],l=[],h=[],f=[],p=[],d=(function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var n=0,r=0,t=0;t<256;t++){var d=r^r<<1^r<<2^r<<3^r<<4,m=(i[n]=d=d>>>8^255&d^99,e[s[d]=n]),_=e[m],E=e[_],T=257*e[d]^16843008*d;a[n]=T<<24|T>>>8,o[n]=T<<16|T>>>16,c[n]=T<<8|T>>>24,u[n]=T,l[d]=(T=16843009*E^65537*_^257*m^16843008*n)<<24|T>>>8,h[d]=T<<16|T>>>16,f[d]=T<<8|T>>>24,p[d]=T,n?(n=m^e[e[e[E^m]]],r^=e[e[r]]):n=r=1}}(),[0,1,2,4,8,16,32,64,128,27,54]),r=r.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,n=e.sigBytes/4,r=4*(1+(this._nRounds=6+n)),s=this._keySchedule=[],a=0;a>>24]<<24|i[u>>>16&255]<<16|i[u>>>8&255]<<8|i[255&u]):(u=i[(u=u<<8|u>>>24)>>>24]<<24|i[u>>>16&255]<<16|i[u>>>8&255]<<8|i[255&u],u^=d[a/n|0]<<24),s[a]=s[a-n]^u);for(var o=this._invKeySchedule=[],c=0;c>>24]]^h[i[u>>>16&255]]^f[i[u>>>8&255]]^p[i[255&u]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,a,o,c,u,i)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,l,h,f,p,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,a,o){for(var c=this._nRounds,u=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],p=4,d=1;d>>24]^i[l>>>16&255]^s[h>>>8&255]^a[255&f]^n[p++],_=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^a[255&u]^n[p++],E=r[h>>>24]^i[f>>>16&255]^s[u>>>8&255]^a[255&l]^n[p++],T=r[f>>>24]^i[u>>>16&255]^s[l>>>8&255]^a[255&h]^n[p++],u=m,l=_,h=E,f=T;m=(o[u>>>24]<<24|o[l>>>16&255]<<16|o[h>>>8&255]<<8|o[255&f])^n[p++],_=(o[l>>>24]<<24|o[h>>>16&255]<<16|o[f>>>8&255]<<8|o[255&u])^n[p++],E=(o[h>>>24]<<24|o[f>>>16&255]<<16|o[u>>>8&255]<<8|o[255&l])^n[p++],T=(o[f>>>24]<<24|o[u>>>16&255]<<16|o[l>>>8&255]<<8|o[255&h])^n[p++],e[t]=m,e[t+1]=_,e[t+2]=E,e[t+3]=T},keySize:8});e.AES=t._createHelper(r)}(),n.AES)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var e=n,r=(t=e.lib).WordArray,t=t.BlockCipher,s=e.algo,a=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],o=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],c=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],u=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],l=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],h=s.DES=t.extend({_doReset:function(){for(var e=this._key.words,t=[],n=0;n<56;n++){var r=a[n]-1;t[n]=e[r>>>5]>>>31-r%32&1}for(var i=this._subKeys=[],s=0;s<16;s++){for(var u=i[s]=[],l=c[s],n=0;n<24;n++)u[n/6|0]|=t[(o[n]-1+l)%28]<<31-n%6,u[4+(n/6|0)]|=t[28+(o[n+24]-1+l)%28]<<31-n%6;for(u[0]=u[0]<<1|u[0]>>>31,n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=i[15-n]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._subKeys)},decryptBlock:function(e,t){this._doCryptBlock(e,t,this._invSubKeys)},_doCryptBlock:function(e,t,n){this._lBlock=e[t],this._rBlock=e[t+1],f.call(this,4,252645135),f.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),f.call(this,1,1431655765);for(var r=0;r<16;r++){for(var i=n[r],s=this._lBlock,a=this._rBlock,o=0,c=0;c<8;c++)o|=u[c][((a^i[c])&l[c])>>>0];this._lBlock=a,this._rBlock=s^o}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,f.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),f.call(this,16,65535),f.call(this,4,252645135),e[t]=this._lBlock,e[t+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function f(e,t){t=(this._lBlock>>>e^this._rBlock)&t,this._rBlock^=t,this._lBlock^=t<>>e^this._lBlock)&t,this._lBlock^=t,this._rBlock^=t<192.");var t=e.slice(0,2),n=e.length<4?e.slice(0,2):e.slice(2,4),e=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=h.createEncryptor(r.create(t)),this._des2=h.createEncryptor(r.create(n)),this._des3=h.createEncryptor(r.create(e))},encryptBlock:function(e,t){this._des1.encryptBlock(e,t),this._des2.decryptBlock(e,t),this._des3.encryptBlock(e,t)},decryptBlock:function(e,t){this._des3.decryptBlock(e,t),this._des2.encryptBlock(e,t),this._des1.decryptBlock(e,t)},keySize:6,ivSize:2,blockSize:2}),e.TripleDES=t._createHelper(s)}(),n.TripleDES)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var e=n,t=e.lib.StreamCipher,r=e.algo,i=r.RC4=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes,r=this._S=[],i=0;i<256;i++)r[i]=i;for(var i=0,s=0;i<256;i++){var a=t[(a=i%n)>>>2]>>>24-a%4*8&255,s=(s+r[i]+a)%256,a=r[i];r[i]=r[s],r[s]=a}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=s.call(this)},keySize:8,ivSize:0});function s(){for(var e=this._S,t=this._i,n=this._j,r=0,i=0;i<4;i++){var n=(n+e[t=(t+1)%256])%256,s=e[t];e[t]=e[n],e[n]=s,r|=e[(e[t]+e[n])%256]<<24-8*i}return this._i=t,this._j=n,r}e.RC4=t._createHelper(i),r=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var e=this.cfg.drop;0>>24)|4278255360&(e[n]<<24|e[n]>>>8);for(var r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],i=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]],n=this._b=0;n<4;n++)c.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(t){var a=(t=t.words)[0],h=(a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8))>>>16|4294901760&(t=16711935&((t=t[1])<<8|t>>>24)|4278255360&(t<<24|t>>>8)),f=t<<16|65535&a;for(i[0]^=a,i[1]^=h,i[2]^=t,i[3]^=f,i[4]^=a,i[5]^=h,i[6]^=t,i[7]^=f,n=0;n<4;n++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),i[0]=n[0]^n[5]>>>16^n[3]<<16,i[1]=n[2]^n[7]>>>16^n[5]<<16,i[2]=n[4]^n[1]>>>16^n[7]<<16,i[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)i[r]=16711935&(i[r]<<8|i[r]>>>24)|4278255360&(i[r]<<24|i[r]>>>8),e[t+r]^=i[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)s[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],i=65535&r,o=r>>>16;a[n]=((i*i>>>17)+i*o>>>15)+o*o^((4294901760&r)*r|0)+((65535&r)*r|0)}e[0]=a[0]+(a[7]<<16|a[7]>>>16)+(a[6]<<16|a[6]>>>16)|0,e[1]=a[1]+(a[0]<<8|a[0]>>>24)+a[7]|0,e[2]=a[2]+(a[1]<<16|a[1]>>>16)+(a[0]<<16|a[0]>>>16)|0,e[3]=a[3]+(a[2]<<8|a[2]>>>24)+a[1]|0,e[4]=a[4]+(a[3]<<16|a[3]>>>16)+(a[2]<<16|a[2]>>>16)|0,e[5]=a[5]+(a[4]<<8|a[4]>>>24)+a[3]|0,e[6]=a[6]+(a[5]<<16|a[5]>>>16)+(a[4]<<16|a[4]>>>16)|0,e[7]=a[7]+(a[6]<<8|a[6]>>>24)+a[5]|0}e.Rabbit=t._createHelper(r)}(),n.Rabbit)}),Sr(function(e,t){var n;e.exports=(n=dh,function(){var e=n,t=e.lib.StreamCipher,r=e.algo,i=[],s=[],a=[],r=r.RabbitLegacy=t.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],r=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]],i=this._b=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(t){var h=(t=16711935&((t=(e=t.words)[0])<<8|t>>>24)|4278255360&(t<<24|t>>>8))>>>16|4294901760&(e=16711935&((e=e[1])<<8|e>>>24)|4278255360&(e<<24|e>>>8)),f=e<<16|65535&t;for(r[0]^=t,r[1]^=h,r[2]^=e,r[3]^=f,r[4]^=t,r[5]^=h,r[6]^=e,r[7]^=f,i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),i[0]=n[0]^n[5]>>>16^n[3]<<16,i[1]=n[2]^n[7]>>>16^n[5]<<16,i[2]=n[4]^n[1]>>>16^n[7]<<16,i[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)i[r]=16711935&(i[r]<<8|i[r]>>>24)|4278255360&(i[r]<<24|i[r]>>>8),e[t+r]^=i[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)s[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],i=65535&r,o=r>>>16;a[n]=((i*i>>>17)+i*o>>>15)+o*o^((4294901760&r)*r|0)+((65535&r)*r|0)}e[0]=a[0]+(a[7]<<16|a[7]>>>16)+(a[6]<<16|a[6]>>>16)|0,e[1]=a[1]+(a[0]<<8|a[0]>>>24)+a[7]|0,e[2]=a[2]+(a[1]<<16|a[1]>>>16)+(a[0]<<16|a[0]>>>16)|0,e[3]=a[3]+(a[2]<<8|a[2]>>>24)+a[1]|0,e[4]=a[4]+(a[3]<<16|a[3]>>>16)+(a[2]<<16|a[2]>>>16)|0,e[5]=a[5]+(a[4]<<8|a[4]>>>24)+a[3]|0,e[6]=a[6]+(a[5]<<16|a[5]>>>16)+(a[4]<<16|a[4]>>>16)|0,e[7]=a[7]+(a[6]<<8|a[6]>>>24)+a[5]|0}e.RabbitLegacy=t._createHelper(r)}(),n.RabbitLegacy)}),Sr(function(e,t){e.exports=dh})),_h=function(t,n,r,i){return"string"==typeof(t="undefined"!=typeof Buffer&&Buffer.isBuffer(t)?t.toString():t)?function(e,t,n,r){return t.xmlMode||t._useHtmlParser2?function(e,t){var n=new w(void 0,t);return new va(n,t).end(e),n.root}(e,t):ta(e,t,n,r)}(t,n,r,i):(n=t,!Array.isArray(n)&&O(n)?n:(Bn(n,r=new v([])),r))},Eh=function(e){return function r(s,a,o){if(void 0===o&&(o=!0),null==s)throw new Error("cheerio.load() expects a string");var c=rr(rr({},n),i(a)),u=e(s,c,o,null),l=function(n){function r(){return null!==n&&n.apply(this,arguments)||this}return nr(r,n),r.prototype._make=function(e,t){return(e=h(e,t)).prevObject=this,e},r.prototype._parse=function(t,n,r,i){return e(t,n,r,i)},r.prototype._render=function(e){return function(e,t){return t.xmlMode||t._useHtmlParser2?W(e,t):function(e){for(var t,n=("length"in e?e:[e]),r=0;r { - cls.land = 1; - cls.ratio = 1.78; - return cls; - }), - filters: filterObj, - }) -} - -async function homeVod() { - const data = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=TOPC1451558856402351&n=10&sort=desc&p=1&mode=0&serviceId=tvcctv')); - let videos = _.map(data.data.list, (it) => { - return { - vod_id: it.guid, - vod_name: it.title, - vod_pic: it.image, - vod_remarks: it.time || '', - } - }); - return JSON.stringify({ - list: videos, - }) -} - -async function category(tid, pg, filter, extend) { - if (pg <= 0 || typeof pg == 'undefined') pg = 1; - const data = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=' + tid + '&n=10&sort=desc&p=' + pg + '&mode=0&serviceId=tvcctv')); - let videos = _.map(data.data.list, (it) => { - return { - vod_id: it.guid, - vod_name: it.title, - vod_pic: it.image, - vod_remarks: it.time || '', - } - }); - const pgChk = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=' + tid + '&n=10&sort=desc&p=' + (parseInt(pg) + 1) + '&mode=0&serviceId=tvcctv')).data.list; - const pgCount = pgChk.length > 0 ? parseInt(pg) + 1 : parseInt(pg); - return JSON.stringify({ - page: parseInt(pg), - pagecount: parseInt(pgCount), - limit: 10, - total: parseInt(data.total), - list: videos, - }) -} - -async function detail(id) { - const vod = { - vod_id: id, - vod_remarks: '', - }; - const playlist = ['点击播放' + '$' + 'https://hls.cntv.myhwcdn.cn/asp/hls/2000/0303000a/3/default/' + id + '/2000.m3u8']; - vod.vod_play_from = key; - vod.vod_play_url = playlist.join('#'); - return JSON.stringify({ - list: [vod], - }); -} - -async function play(flag, id, flags) { - // console.debug('视聚场 id =====>' + id); // js_debug.log - return JSON.stringify({ - parse: 0, - url: id, - }) -} - -async function search(wd, quick, pg) { - return '{}' -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - } -} \ No newline at end of file diff --git a/lib/dj0898_open.js b/lib/dj0898_open.js deleted file mode 100644 index ca9482ca..00000000 --- a/lib/dj0898_open.js +++ /dev/null @@ -1,156 +0,0 @@ -import { load, _ } from "assets://js/lib/cat.js"; - -let key = "世纪DJ音乐网"; -let HOST = "http://m.dj0898.com"; -let siteKey = ""; -let siteType = 0; - -const MOBILE_UA = "Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36"; - -async function request(reqUrl, agentSp) { - let res = await req(reqUrl, { - method: "get", - headers: { - "User-Agent": agentSp || MOBILE_UA, - Referer: HOST, - }, - }); - return res.content; -} - -async function init(cfg) { - siteKey = cfg.skey; - siteType = cfg.stype; -} - -async function home(filter) { - const classes = [{ type_id: 1, type_name: "🎧串烧舞曲" }, { type_id: 2, type_name: "🎧外文舞曲" }, { type_id: 3, type_name: "🎧早场暖场" }, { type_id: 4, type_name: "🎧中文舞曲" }, { type_id: 5, type_name: "🎧其他舞曲" }, { type_id: 6, type_name: "🎧国外电音" }, { type_id: 8, type_name: "🎧慢歌连版" }, { type_id: 9, type_name: "🎧酒吧潮歌" }, { type_id: 10, type_name: "🎧中文串烧" }, { type_id: 11, type_name: "🎧外文串烧" }, { type_id: 12, type_name: "🎧中外串烧" }, { type_id: 13, type_name: "🎧车载串烧" }, { type_id: 14, type_name: "🎧越鼓串烧" }, { type_id: 40, type_name: "🎧3D/环绕" }, { type_id: 45, type_name: "🎧口水旋律" }, { type_id: 46, type_name: "🎧精品收藏" }, { type_id: 47, type_name: "🎧开场舞曲" }, { type_id: 48, type_name: "🎧印度舞曲" }, { type_id: 49, type_name: "🎧编排套曲" }, { type_id: 20, type_name: "🎧DuTch" }, { type_id: 21, type_name: "🎧Mash up" }, { type_id: 22, type_name: "🎧ClubHouse" }, { type_id: 23, type_name: "🎧ElectroHouse" }, { type_id: 24, type_name: "🎧越南鼓Dj" }, { type_id: 30, type_name: "🎧Funky" }, { type_id: 31, type_name: "🎧Reggae" }, { type_id: 32, type_name: "🎧Rnb" }, { type_id: 33, type_name: "🎧Hip Hop" }, { type_id: 34, type_name: "🎧Dubstep" }, { type_id: 8017, type_name: "🎧Hardstyle" }, { type_id: 8018, type_name: "🎧Hands Up" }]; - const filterObj = {}; - return JSON.stringify({ - class: _.map(classes, (cls) => { - cls.land = 1; - cls.ratio = 1.78; - return cls; - }), - filters: filterObj, - }); -} - -async function homeVod() { - const link = HOST + "/dance/lists/id/10/1"; - const html = await request(link); - const $ = load(html); - const list = $("ul.djddv_djList > li"); - let videos = _.map(list, (it) => { - const a = $(it).find("a")[1]; - const img = $(it).find("img:first")[0]; - const tt = $(it).find("strong:first")[0]; - const remarks = $(it).find("font")[5]; - return { - vod_id: a.attribs.href, - vod_name: tt.children[0].data, - vod_pic: img.attribs["src"], - vod_remarks: "🎵" + remarks.children[0].data || "", - }; - }); - return JSON.stringify({ - list: videos, - }); -} - -async function category(tid, pg, filter, extend) { - if (pg <= 0 || typeof pg == "undefined") pg = 1; - const link = HOST + "/dance/lists/id/" + tid + "/" + pg; - const html = await request(link); - const $ = load(html); - const list = $("ul.djddv_djList > li"); - let videos = _.map(list, (it) => { - const a = $(it).find("a")[1]; - const img = $(it).find("img:first")[0]; - const tt = $(it).find("strong:first")[0]; - const remarks = $(it).find("font")[5]; - return { - vod_id: a.attribs.href, - vod_name: tt.children[0].data, - vod_pic: img.attribs["src"], - vod_remarks: "🎵" + remarks.children[0].data || "", - }; - }); - const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0; - const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); - return JSON.stringify({ - page: parseInt(pg), - pagecount: pgCount, - limit: 60, - total: 60 * pgCount, - list: videos, - }); -} - -async function detail(id) { - const vod = { - vod_id: id, - vod_remarks: "", - }; - const playlist = ["点击播放" + "$" + vod.vod_id]; - vod.vod_play_from = "道长在线"; - vod.vod_play_url = playlist.join("#"); - return JSON.stringify({ - list: [vod], - }); -} - -async function play(flag, id, flags) { - const html = await request(id); - const $ = load(html); - const audio = $("body audio[src*=http]"); - const audioUrl = audio[0].attribs.src; - // console.debug('世纪DJ音乐网 audioUrl =====>' + audioUrl); // js_debug.log - return JSON.stringify({ - parse: 0, - url: audioUrl, - }); -} - -async function search(wd, quick, pg) { - if (pg <= 0 || typeof pg == "undefined") pg = 1; - const link = HOST + "/index.php/dance/so/key?key=" + wd + "&cid=0&p=" + pg; - const html = await request(link); - const $ = load(html); - const list = $("ul.djddv_djList > li"); - let videos = _.map(list, (it) => { - const a = $(it).find("a")[1]; - const img = $(it).find("img:first")[0]; - const tt = $(it).find("strong:first")[0]; - const remarks = $(it).find("font:first")[0]; - return { - vod_id: a.attribs.href, - vod_name: tt.children[0].data, - vod_pic: img.attribs["src"], - vod_remarks: "🎵" + remarks.children[0].data || "", - }; - }); - const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0; - const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); - return JSON.stringify({ - page: parseInt(pg), - pagecount: pgCount, - limit: 60, - total: 60 * pgCount, - list: videos, - land: 1, - ratio: 1.78, - }); -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - }; -} \ No newline at end of file diff --git a/lib/kuqimv_open.js b/lib/kuqimv_open.js deleted file mode 100644 index 1cefed47..00000000 --- a/lib/kuqimv_open.js +++ /dev/null @@ -1,173 +0,0 @@ -// 修正:分类改静态 (网站频繁变动分类) -import { load, _ } from "assets://js/lib/cat.js"; - -let key = "酷奇MV"; -let HOST = "https://www.kuqimv.com"; -let siteKey = ""; -let siteType = 0; -const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"; - -async function request(reqUrl, referer, mth, data, hd) { - const headers = { - "User-Agent": PC_UA, - }; - if (referer) headers.referer = encodeURIComponent(referer); - let res = await req(reqUrl, { - method: mth || "get", - headers: headers, - data: data, - postType: mth === "post" ? "form" : "", - }); - return res.content; -} - -async function init(cfg) { - siteKey = cfg.skey; - siteType = cfg.stype; -} - -async function home(filter) { - var classes = [{ "type_id": "1", "type_name": "华语高清" }, { "type_id": "2", "type_name": "日韩精选" }, { "type_id": "3", "type_name": "欧美MV" }, { "type_id": "4", "type_name": "高清现场" }, { "type_id": "5", "type_name": "影视MV" }, { "type_id": "6", "type_name": "夜店视频" }, { "type_id": "7", "type_name": "车模视频" }, { "type_id": "8", "type_name": "热舞视频" }, { "type_id": "9", "type_name": "美女写真" }, { "type_id": "10", "type_name": "美女打碟" }]; - // const html = await request(HOST); - // const $ = load(html); - // const class_parse = $(".lei_fl > a[href*=play]"); - // const classes = []; - // classes = _.map(class_parse, (cls) => { - // const typeId = cls.attribs["href"]; - // typeId = typeId.substring(typeId.lastIndexOf("/") + 1).replace(".html", ""); - // return { - // type_id: typeId, - // type_name: cls.children[0].data, - // }; - // }); - const filterObj = {}; - return JSON.stringify({ - class: _.map(classes, (cls) => { - cls.land = 1; - cls.ratio = 1.78; - return cls; - }), - filters: filterObj, - }); -} - -async function homeVod() { - const link = HOST + "/play/9_1.html"; - const html = await request(link); - const $ = load(html); - const items = $("div.mv_list > li"); - let videos = _.map(items, (it) => { - const a = $(it).find("a:first")[0]; - const img = $(it).find("img:first")[0]; - const singer = $($(it).find("div.singer")[0]).text().trim(); - const remarks = $($(it).find("span.lei_03")[0]).text().trim(); - return { - vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"), - vod_name: a.attribs.title, - vod_pic: img.attribs["src"], - vod_remarks: "🎤" + singer + "|" + remarks || "", - }; - }); - return JSON.stringify({ - list: videos, - }); -} - -async function category(tid, pg, filter, extend) { - if (pg <= 0 || typeof pg == "undefined") pg = 1; - const link = HOST + "/play/" + tid + "_" + pg + ".html"; - const html = await request(link); - const $ = load(html); - const items = $("div.mv_list > li"); - let videos = _.map(items, (it) => { - const a = $(it).find("a:first")[0]; - const img = $(it).find("img:first")[0]; - const singer = $($(it).find("div.singer")[0]).text().trim(); - const remarks = $($(it).find("span.lei_03")[0]).text().trim(); - return { - vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"), - vod_name: a.attribs.title, - vod_pic: img.attribs["src"], - vod_remarks: "🎤" + singer + "|" + remarks || "", - }; - }); - const hasMore = $("div.lei_page > a:contains(下一页)").length > 0; - const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); - return JSON.stringify({ - page: parseInt(pg), - pagecount: pgCount, - limit: 24, - total: 24 * pgCount, - list: videos, - }); -} - -async function detail(id) { - const vod = { - vod_id: id, - vod_remarks: "", - }; - const playlist = ["观看视频" + "$" + id]; - vod.vod_play_from = "道长在线"; - vod.vod_play_url = playlist.join("#"); - return JSON.stringify({ - list: [vod], - }); -} - -async function play(flag, id, flags) { - const link = HOST + "/skin/kuqimv/play.php"; - const ref = HOST + "/play/" + id + ".html"; - const pdata = { id: id }; - const playUrl = JSON.parse(await request(link, ref, "post", pdata)).url; - const headers = { - Referer: HOST, - }; - return JSON.stringify({ - parse: 0, - url: playUrl, - header: headers, - }); -} - -async function search(wd, quick, pg) { - if (pg <= 0 || typeof pg == "undefined") pg = 1; - const link = HOST + "/search.php?key=" + wd + "&pages=" + pg; - const html = await request(link); - const $ = load(html); - const items = $("div.video_list > li"); - let videos = _.map(items, (it) => { - const a = $(it).find("a:first")[0]; - const singer = $($(it).find("div.singer")[0]).text().trim(); - const remarks = $($(it).find("span.lei_04")[0]).text().trim(); - return { - vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"), - vod_name: a.attribs.title, - vod_pic: "https://www.kuqimv.com/static/images/cover/singer.jpg", - vod_remarks: "🎤" + singer + "|" + remarks || "", - }; - }); - const hasMore = $("div.lei_page > a:contains(>)").length > 0; - const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); - return JSON.stringify({ - page: parseInt(pg), - pagecount: pgCount, - limit: 20, - total: 20 * pgCount, - list: videos, - land: 1, - ratio: 1.78, - }); -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - }; -} \ No newline at end of file diff --git a/lib/similarity.js b/lib/similarity.js deleted file mode 100644 index 3dfc497d..00000000 --- a/lib/similarity.js +++ /dev/null @@ -1 +0,0 @@ -function compareTwoStrings(first,second){if((first=first.replace(/\s+/g,""))===(second=second.replace(/\s+/g,"")))return 1;if(first.length<2||second.length<2)return 0;var firstBigrams=new Map;for(let i=0;iratings[bestMatchIndex].rating&&(bestMatchIndex=i)}return{ratings:ratings,bestMatch:ratings[bestMatchIndex],bestMatchIndex:bestMatchIndex}}function lcs(str1,str2){if(!str1||!str2)return{length:0,sequence:"",offset:0};for(var sequence="",str1Length=str1.length,str2Length=str2.length,num=new Array(str1Length),maxlen=0,lastSubsBegin=0,i=0;imaxlen&&(maxlen=num[i][j],lastSubsBegin===(thisSubsBegin=i-num[i][j]+1)?sequence+=str1[i]:(lastSubsBegin=thisSubsBegin,sequence="",sequence+=str1.substr(lastSubsBegin,i+1-lastSubsBegin))));return{length:maxlen,sequence:sequence,offset:thisSubsBegin}}function findBestLCS(mainString,targetStrings){var results=[];let bestMatchIndex=0;for(let i=0;iresults[bestMatchIndex].lcs.length&&(bestMatchIndex=i)}return{allLCS:results,bestMatch:results[bestMatchIndex],bestMatchIndex:bestMatchIndex}}export{compareTwoStrings,findBestMatch,findBestLCS}; \ No newline at end of file diff --git a/lib/tuxiaobei_open.js b/lib/tuxiaobei_open.js deleted file mode 100644 index 8feddb2d..00000000 --- a/lib/tuxiaobei_open.js +++ /dev/null @@ -1,135 +0,0 @@ -import { load, _ } from './lib/cat.js'; -let key = '🐰兔小贝'; -let HOST = 'https://www.tuxiaobei.com'; -let siteKey = ''; -let siteType = 0; -const IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'; - -async function request(reqUrl, agentSp) { - let res = await req(reqUrl, { - method: 'get', - headers: { - 'User-Agent': agentSp || IOS_UA, - }, - }); - return res.content -} - -async function init(cfg) { - siteKey = cfg.skey; - siteType = cfg.stype -} - -async function home(filter) { - const classes = [{ type_id: '', type_name: '🐰全部' }, { type_id: 2, type_name: '🐰儿歌' }, { type_id: 3, type_name: '🐰故事' }, { type_id: 27, type_name: '🐰公益' }, { type_id: 9, type_name: '🐰十万个为什么' }, { type_id: 28, type_name: '🐰安全教育' }, { type_id: 29, type_name: '🐰动物奇缘' }, { type_id: 7, type_name: '🐰弟子规' }, { type_id: 5, type_name: '🐰古诗' }, { type_id: 6, type_name: '🐰三字经' }, { type_id: 8, type_name: '🐰千字文' }, { type_id: 11, type_name: '🐰数学' }, { type_id: 25, type_name: '🐰英语' }, { type_id: 24, type_name: '🐰折纸' }]; - const filterObj = {}; - return JSON.stringify({ - class: _.map(classes, (cls) => { - cls.land = 1; - cls.ratio = 1.78; - return cls; - }), - filters: filterObj, - }) -} - -async function homeVod() { - const link = await request(HOST + '/list/mip-data?typeId=9&page=1&callback='); - const html = link.match(/\((.*?)\);/)[1]; - const data = JSON.parse(html).data; - let videos = _.map(data.items, (it) => { - return { - vod_id: it.video_id, - vod_name: it.name, - vod_pic: it.image, - vod_remarks: it.root_category_name + ' | ' + it.duration_string || '', - } - }); - return JSON.stringify({ - list: videos, - }) -} - -async function category(tid, pg, filter, extend) { - if (pg <= 0 || typeof pg == 'undefined') pg = 1; - const link = await request(HOST + '/list/mip-data?typeId=' + tid + '&page=' + pg + '&callback='); - const html = link.match(/\((.*?)\);/)[1]; - const data = JSON.parse(html).data; - let videos = _.map(data.items, (it) => { - return { - vod_id: it.video_id, - vod_name: it.name, - vod_pic: it.image, - vod_remarks: it.root_category_name + ' | ' + it.duration_string || '', - } - }); - const pgCount = pg * 30 > data.totalCount ? parseInt(pg) : parseInt(pg) + 1; - return JSON.stringify({ - page: parseInt(pg), - pagecount: pgCount, - limit: 30, - total: data.totalCount, - list: videos, - }) -} - -async function detail(id) { - const vod = { - vod_id: id, - vod_remarks: '', - }; - const playlist = ['点击播放' + '$' + HOST + '/play/' + id]; - vod.vod_play_from = "道长在线"; - vod.vod_play_url = playlist.join('#'); - return JSON.stringify({ - list: [vod], - }); -} - -async function play(flag, id, flags) { - const html = await request(id); - const $ = load(html); - const pvideo = $("body mip-search-video[video-src*=http]"); - const purl = pvideo[0].attribs['video-src']; - // console.debug('兔小贝 purl =====>' + purl); // js_debug.log - return JSON.stringify({ - parse: 0, - url: purl, - }); -} - -async function search(wd, quick) { - const link = HOST + "/search/" + wd; - const html = await request(link); - const $ = load(html); - const list = $("div.list-con > div.items"); - let videos = _.map(list, (it) => { - const a = $(it).find("a:first")[0]; - const img = $(it).find("mip-img:first")[0]; - const tt = $(it).find("p:first")[0]; - const remarks = $(it).find("p")[1]; - return { - vod_id: a.attribs.href.replace(/.*?\/play\/(.*)/g, '$1'), - vod_name: tt.children[0].data, - vod_pic: img.attribs["src"], - vod_remarks: remarks.children[0].data || "", - }; - }); - return JSON.stringify({ - list: videos, - land: 1, - ratio: 1.78, - }); -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - } -} \ No newline at end of file diff --git a/lib/ubestkid_open.js b/lib/ubestkid_open.js deleted file mode 100644 index 05a45ac7..00000000 --- a/lib/ubestkid_open.js +++ /dev/null @@ -1,118 +0,0 @@ -// 无搜索功能 -import { _ } from './lib/cat.js'; -let key = '🐯贝乐虎'; -let HOST = 'https://vd.ubestkid.com'; -let siteKey = ''; -let siteType = 0; -const MOBILE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'; - -async function request(reqUrl, referer, mth, data, hd) { - const headers = { - "User-Agent": MOBILE_UA, - }; - if (referer) headers.referer = encodeURIComponent(referer); - let res = await req(reqUrl, { - method: mth || "get", - headers: headers, - data: data, - postType: mth === "post" ? "json" : "", - }); - return res.content; -} - -async function init(cfg) { - siteKey = cfg.skey; - siteType = cfg.stype -} - -async function home(filter) { - const classes = [{ type_id: 65, type_name: '🐯最新上架' }, { type_id: 113, type_name: '🐯人气热播' }, { type_id: 56, type_name: '🐯经典童谣' }, { type_id: 137, type_name: '🐯开心贝乐虎' }, { type_id: 53, type_name: '🐯律动儿歌' }, { type_id: 59, type_name: '🐯经典儿歌' }, { type_id: 101, type_name: '🐯超级汽车1' }, { type_id: 119, type_name: '🐯超级汽车第二季' }, { type_id: 136, type_name: '🐯超级汽车第三季' }, { type_id: 95, type_name: '🐯三字经' }, { type_id: 133, type_name: '🐯幼儿手势舞' }, { type_id: 117, type_name: '🐯哄睡儿歌' }, { type_id: 70, type_name: '🐯英文儿歌' }, { type_id: 116, type_name: '🐯节日与节气' }, { type_id: 97, type_name: '🐯恐龙世界' }, { type_id: 55, type_name: '🐯动画片儿歌' }, { type_id: 57, type_name: '🐯流行歌曲' }, { type_id: 118, type_name: '🐯贝乐虎入园记' }, { type_id: 106, type_name: '🐯贝乐虎大百科' }, { type_id: 62, type_name: '🐯经典古诗' }, { type_id: 63, type_name: '🐯经典故事' }, { type_id: 128, type_name: '🐯萌虎学功夫' }, { type_id: 100, type_name: '🐯绘本故事' }, { type_id: 121, type_name: '🐯开心贝乐虎英文版' }, { type_id: 96, type_name: '🐯嗨贝乐虎情商动画' }, { type_id: 108, type_name: '🐯动物音乐派对' }, { type_id: 126, type_name: '🐯动物音乐派对英文版' }, { type_id: 105, type_name: '🐯奇妙的身体' }, { type_id: 124, type_name: '🐯奇妙的身体英文版' }, { type_id: 64, type_name: '🐯认知卡片' }, { type_id: 109, type_name: '🐯趣味简笔画' }, { type_id: 78, type_name: '🐯数字儿歌' }, { type_id: 120, type_name: '🐯识字体验版' }, { type_id: 127, type_name: '🐯启蒙系列体验版' }]; - const filterObj = {}; - return JSON.stringify({ - class: _.map(classes, (cls) => { - cls.land = 1; - cls.ratio = 1.78; - return cls; - }), - filters: filterObj, - }) -} - -async function homeVod() { - const link = HOST + "/api/v1/bv/video"; - const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: 56, "p": 1 }; - const jo = JSON.parse(await request(link, "", "post", pdata)).result; - const videos = []; - _.each(jo.items, (it) => { - videos.push({ - vod_id: it.url, - vod_name: it.title, - vod_pic: it.image, - vod_remarks: '👀' + it.viewcount || '', - }) - }); - return JSON.stringify({ - list: videos, - }) -} - -async function category(tid, pg, filter, extend) { - if (pg <= 0 || typeof pg == 'undefined') pg = 1; - const link = HOST + "/api/v1/bv/video"; - const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: tid, "p": pg }; - const jo = JSON.parse(await request(link, "", "post", pdata)).result; - const videos = []; - _.each(jo.items, (it) => { - videos.push({ - vod_id: it.url, - vod_name: it.title, - vod_pic: it.image, - vod_remarks: '👀' + it.viewcount || '', - }) - }); - const pgCount = pg * 60 > jo.total ? parseInt(pg) : parseInt(pg) + 1; - return JSON.stringify({ - page: parseInt(pg), - pagecount: pgCount, - limit: 60, - total: jo.total, - list: videos, - }) -} - -async function detail(id) { - const vod = { - vod_id: id, - vod_remarks: '', - }; - const playlist = ['点击播放' + '$' + id]; - vod.vod_play_from = "道长在线"; - vod.vod_play_url = playlist.join('#'); - return JSON.stringify({ - list: [vod], - }); -} - -async function play(flag, id, flags) { - // console.debug('贝乐虎 id =====>' + id); // js_debug.log - return JSON.stringify({ - parse: 0, - url: id, - }); -} - -async function search(wd, quick) { - return '{}' -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - } -} \ No newline at end of file diff --git a/lib/utils.js b/lib/utils.js deleted file mode 100644 index 2411a227..00000000 --- a/lib/utils.js +++ /dev/null @@ -1 +0,0 @@ -function isSub(ext){return"srt"==ext||"ass"==ext||"ssa"==ext}function getSize(size){return size<=0?"":1099511627776 ul > li').find('a:first')[0].attribs.href; - console.debug('在线之家 跳转地址 =====>' + host); // js_debug.log -} - -async function home(filter) { - const html = await request(host); - const $ = load(html); - const class_parse = $('ul.stui-header__menu > li > a[href*=list]'); - let classes = _.map(class_parse, (cls) => { - let typeId = cls.attribs['href']; - typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html', ''); - return { - type_id: typeId, - type_name: cls.children[0].data, - }; - }); - const filterObj = { - 1: [{ key: 'class', name: '剧情', value: [{ n: '全部', v: '' }, { n: '喜剧', v: '喜剧' }, { n: '爱情', v: '爱情' }, { n: '恐怖', v: '恐怖' }, { n: '动作', v: '动作' }, { n: '科幻', v: '科幻' }, { n: '剧情', v: '剧情' }, { n: '战争', v: '战争' }, { n: '警匪', v: '警匪' }, { n: '犯罪', v: '犯罪' }, { n: '动画', v: '动画' }, { n: '奇幻', v: '奇幻' }, { n: '冒险', v: '冒险' }] }, { key: 'area', name: '地区', value: [{ n: '全部', v: '' }, { n: '大陆', v: '大陆' }, { n: '香港', v: '香港' }, { n: '台湾', v: '台湾' }, { n: '欧美', v: '欧美' }, { n: '韩国', v: '韩国' }, { n: '日本', v: '日本' }, { n: '泰国', v: '泰国' }, { n: '印度', v: '印度' }, { n: '俄罗斯', v: '俄罗斯' }, { n: '其他', v: '其他' }] }], - 2: [{ key: 'class', name: '剧情', value: [{ n: '全部', v: '' }, { n: '剧情', v: '剧情' }, { n: '喜剧', v: '喜剧' }, { n: '爱情', v: '爱情' }, { n: '动作', v: '动作' }, { n: '悬疑', v: '悬疑' }, { n: '恐怖', v: '恐怖' }, { n: '奇幻', v: '奇幻' }, { n: '惊悚', v: '惊悚' }, { n: '犯罪', v: '犯罪' }, { n: '科幻', v: '科幻' }, { n: '音乐', v: '音乐' }, { n: '其他', v: '其他' }] }], - 3: [{ key: 'class', name: '剧情', value: [{ n: '全部', v: '' }, { n: '剧情', v: '剧情' }, { n: '喜剧', v: '喜剧' }, { n: '爱情', v: '爱情' }, { n: '动作', v: '动作' }, { n: '悬疑', v: '悬疑' }, { n: '恐怖', v: '恐怖' }, { n: '奇幻', v: '奇幻' }, { n: '惊悚', v: '惊悚' }, { n: '犯罪', v: '犯罪' }, { n: '科幻', v: '科幻' }, { n: '音乐', v: '音乐' }, { n: '其他', v: '其他' }] }], - 4: [{ key: 'class', name: '剧情', value: [{ n: '全部', v: '' }, { n: '剧情', v: '剧情' }, { n: '喜剧', v: '喜剧' }, { n: '爱情', v: '爱情' }, { n: '动作', v: '动作' }, { n: '悬疑', v: '悬疑' }, { n: '恐怖', v: '恐怖' }, { n: '奇幻', v: '奇幻' }, { n: '惊悚', v: '惊悚' }, { n: '犯罪', v: '犯罪' }, { n: '科幻', v: '科幻' }, { n: '音乐', v: '音乐' }, { n: '其他', v: '其他' }] }], - 6: [{ key: 'class', name: '剧情', value: [{ n: '全部', v: '' }, { n: '情感', v: '情感' }, { n: '科幻', v: '科幻' }, { n: '热血', v: '热血' }, { n: '推理', v: '推理' }, { n: '搞笑', v: '搞笑' }, { n: '冒险', v: '冒险' }, { n: '萝莉', v: '萝莉' }, { n: '校园', v: '校园' }, { n: '动作', v: '动作' }, { n: '机战', v: '机战' }, { n: '运动', v: '运动' }, { n: '战争', v: '战争' }, { n: '少年', v: '少年' }] }, { key: 'area', name: '地区', value: [{ n: '全部', v: '' }, { n: '国产', v: '国产' }, { n: '日本', v: '日本' }, { n: '欧美', v: '欧美' }, { n: '其他', v: '其他' }] }] - }; - let filYer = { key: 'year', name: '年份', value: [{ n: '全部', v: '' }, { n: '2023', v: '2023' }, { n: '2022', v: '2022' }, { n: '2021', v: '2021' }, { n: '2020', v: '2020' }, { n: '2019', v: '2019' }, { n: '2018', v: '2018' }, { n: '2017', v: '2017' }, { n: '2016', v: '2016' }, { n: '2015', v: '2015' }, { n: '2014', v: '2014' }, { n: '2013', v: '2013' }, { n: '2012', v: '2012' }, { n: '2011', v: '2011' }] }; - filYer['init'] = filYer.value[0].v; - let filBy = { key: 'by', name: '排序', value: [{ n: '时间', v: 'time' }, { n: '人气', v: 'hits' }, { n: '评分', v: 'score' }] }; - filBy['init'] = filBy.value[0].v; - return JSON.stringify({ - class: _.map(classes, (cls) => { - if (filterObj[cls.type_id]) { - filterObj[cls.type_id].push(filYer, filBy); - filterObj[cls.type_id][0]['init'] = filterObj[cls.type_id][0].value[0].v; - } else { - filterObj[cls.type_id] = []; - filterObj[cls.type_id].push(filYer, filBy) - } - return cls; - }), - filters: filterObj, - }); -} - -async function homeVod() { - const link = host + '/vodshow/1--hits---------2023.html'; - const html = await request(link); - const $ = load(html); - const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {}); - const items = $('ul.stui-vodlist > li'); - let videos = _.map(items, (item) => { - const a = $(item).find('a:first')[0]; - const remarks = $($(item).find('span.pic-text')[0]).text().trim(); - return { - vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'), - vod_name: a.attribs.title, - vod_pic: js2Base + base64Encode(a.attribs['data-original']), - vod_remarks: remarks || '', - }; - }); - return JSON.stringify({ - list: videos, - }); -} - -async function category(tid, pg, filter, extend) { - if (pg <= 0 || typeof (pg) == 'undefined') pg = 1; - const link = host + '/vodshow/' + tid + '-' + (extend.area || '') + '-' + (extend.by || 'time') + '-' + (extend.class || '') + '-' + (extend.lang || '') + '-' + (extend.letter || '') + '---' + pg + '---' + (extend.year || '') + '.html'; - const html = await request(link); - const $ = load(html); - const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {}); - const items = $('ul.stui-vodlist > li'); - let videos = _.map(items, (item) => { - const a = $(item).find('a:first')[0]; - const remarks = $($(item).find('span.pic-text')[0]).text().trim(); - return { - vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'), - vod_name: a.attribs.title, - vod_pic: js2Base + base64Encode(a.attribs['data-original']), - vod_remarks: remarks || '', - }; - }); - const hasMore = $('ul.stui-page__item > li > a:contains(下一页)').length > 0; - const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); - return JSON.stringify({ - page: parseInt(pg), - pagecount: pgCount, - limit: 24, - total: 24 * pgCount, - list: videos, - }); -} - -async function detail(id) { - const html = await request(host + '/detail/' + id + '.html'); - const $ = load(html); - const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {}); - const vod = { - vod_id: id, - vod_name: $('h1:first').text().trim(), - vod_type: $('.stui-content__detail p:first a').text(), - vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:', ''), - vod_director: $('.stui-content__detail p:nth-child(4)').text().replace('导演:', ''), - vod_pic: js2Base + base64Encode($('.stui-content__thumb img:first').attr('data-original')), - vod_remarks: $('.stui-content__detail p:nth-child(5)').text() || '', - vod_content: $('span.detail-content').text().trim(), - }; - let playMap = {}; - const tabs = $('div.stui-vodlist__head > h3'); - const playlists = $('ul.stui-content__playlist'); - _.each(tabs, (tab, i) => { - const from = tab.children[0].data; - let list = playlists[i]; - list = $(list).find('a'); - _.each(list, (it) => { - const title = it.children[0].data; - const playUrl = it.attribs.href; - if (title.length == 0) title = it.children[0].data.trim(); - if (!playMap.hasOwnProperty(from)) { - playMap[from] = []; - } - playMap[from].push(title + '$' + playUrl); - }); - }); - vod.vod_play_from = _.keys(playMap).join('$$$'); - const urls = _.values(playMap); - let vod_play_url = _.map(urls, (urlist) => { - return urlist.join('#'); - }); - vod.vod_play_url = vod_play_url.join('$$$'); - return JSON.stringify({ - list: [vod], - }); -} - -async function play(flag, id, flags) { - const html = await request(host + id); - const mhtml = html.match(/r player_.*?=(.*?)= 0 || url.indexOf('mp4') >= 0) { - // console.debug('在线之家url =====>' + url); // js_debug.log - return JSON.stringify({ - parse: 0, - url: url, - }); - } else if (from.indexOf('line3') >= 0 || from.indexOf('line5') >= 0) { - const ifrwy = await request(url); - const code = ifrwy.match(/var url = '(.*?)'/)[1].split('').reverse().join(''); - let temp = ''; - for (let i = 0x0; i < code.length; i = i + 0x2) { - temp += String.fromCharCode(parseInt(code[i] + code[i + 0x1], 0x10)) - } - const purl = temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7); - // console.debug('在线之家purl =====>' + purl); // js_debug.log - return JSON.stringify({ - parse: 0, - url: purl, - }); - } else { - // console.debug('在线之家url =====>' + '空'); // js_debug.log - return '{}'; - } -} - -async function search(wd, quick) { - var data = JSON.parse(await request(host + '/index.php/ajax/suggest?mid=1&wd=' + wd + '&limit=50')).list; - const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {}); - let videos = _.map(data, (it) => { - return { - vod_id: it.id, - vod_name: it.name, - vod_pic: js2Base + base64Encode(it.pic), - vod_remarks: '', - } - }); - return JSON.stringify({ - list: videos, - limit: 50, - }); -} - -function base64Encode(text) { - return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text)); -} - -function base64Decode(text) { - return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); -} - -async function proxy(segments, headers) { - let what = segments[0]; - let url = base64Decode(segments[1]); - if (what == 'img') { - var resp = await req(url, { - buffer: 2, - headers: { - Referer: 'https://api.douban.com/', - 'User-Agent': MOBILE_UA, - }, - }); - return JSON.stringify({ - code: resp.code, - buffer: 2, - content: resp.content, - headers: resp.headers, - }); - } - return JSON.stringify({ - code: 500, - content: '', - }); -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - proxy: proxy, - search: search, - }; -} \ No newline at end of file