playga / index.js
hhoiw's picture
Update index.js
7061006 verified
const fetch = require('node-fetch');
const jsyaml = require('js-yaml');
const btoa = require('btoa');
const TextEncoder = require('util').TextEncoder;
async function handleRequest(request) {
// 定义要发送请求的地址数组,每个元素包含一个 url 和一个处理函数
const sites = [
{ url: "https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria/1/config.json", type: "hysteria" },
{ url: "https://gitlab.com/free9999/ipupdate/-/raw/master/hysteria/config.json", type: "hysteria" },
{ url: "https://www.githubip.xyz/Alvin9999/pac2/master/hysteria/config.json", type: "hysteria" },
{ url: "https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/hysteria/config.json", type: "hysteria" },
{ url: "https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria/13/config.json", type: "hysteria" },
{ url: "https://gitlab.com/free9999/ipupdate/-/raw/master/hysteria/2/config.json", type: "hysteria" },
{ url: "https://www.githubip.xyz/Alvin9999/pac2/master/hysteria/2/config.json", type: "hysteria" },
{ url: "https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/hysteria/2/config.json", type: "hysteria" },
//hy2
{ url: 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria2/1/config.json', type: "hysteria2" },
{ url: 'https://gitlab.com/free9999/ipupdate/-/raw/master/hysteria2/config.json', type: "hysteria2" },
{ url: 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria2/config.json', type: "hysteria2" },
{ url: 'https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/hysteria2/config.json', type: "hysteria2" },
{ url: 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria2/13/config.json', type: "hysteria2" },
{ url: 'https://gitlab.com/free9999/ipupdate/-/raw/master/hysteria2/2/config.json', type: "hysteria2" },
{ url: 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria2/2/config.json', type: "hysteria2" },
{ url: 'https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/hysteria2/2/config.json', type: "hysteria2" },
//xray
{ url: 'https://www.gitlabip.xyz/Alvin9999/pac2/master/xray/1/config.json', type: "xray" },
{ url: 'https://gitlab.com/free9999/ipupdate/-/raw/master/xray/config.json', type: "xray" },
{ url: 'https://www.githubip.xyz/Alvin9999/pac2/master/xray/config.json', type: "xray" },
{ url: 'https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/xray/config.json', type: "xray" },
{ url: 'https://www.gitlabip.xyz/Alvin9999/pac2/master/xray/3/config.json', type: "xray" },
{ url: 'https://gitlab.com/free9999/ipupdate/-/raw/master/xray/2/config.json', type: "xray" },
{ url: 'https://www.githubip.xyz/Alvin9999/pac2/master/xray/2/config.json', type: "xray" },
//singbox
{ url: "https://gitlab.com/free9999/ipupdate/-/raw/master/singbox/config.json", type: "singbox" },
{ url: "https://www.githubip.xyz/Alvin9999/pac2/master/singbox/config.json", type: "singbox" },
{ url: "https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/singbox/config.json", type: "singbox" },
{ url: "https://www.gitlabip.xyz/Alvin9999/pac2/master/singbox/1/config.json", type: "singbox" },
//clash
{ url: "https://gitlab.com/free9999/ipupdate/-/raw/master/clash.meta2/config.yaml", type: "clash" },
{ url: "https://gitlab.com/free9999/ipupdate/-/raw/master/clash.meta2/config.yaml", type: "clash" },
{ url: "https://www.githubip.xyz/Alvin9999/pac2/master/clash.meta2/config.yaml", type: "clash" },
{ url: "https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/clash.meta2/config.yaml", type: "clash" },
{ url: "https://www.gitlabip.xyz/Alvin9999/pac2/master/clash.meta2/13/config.yaml", type: "clash" },
{ url: "https://gitlab.com/free9999/ipupdate/-/raw/master/clash.meta2/2/config.yaml", type: "clash" },
{ url: "https://www.githubip.xyz/Alvin9999/pac2/master/clash.meta2/2/config.yaml", type: "clash" },
{ url: "https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/clash.meta2/2/config.yaml", type: "clash" },
{ url: "https://www.gitlabip.xyz/Alvin9999/pac2/master/clash.meta2/15/config.yaml", type: "clash" },
{ url: "https://gitlab.com/free9999/ipupdate/-/raw/master/clash.meta2/3/config.yaml", type: "clash" },
{ url: "https://www.githubip.xyz/Alvin9999/pac2/master/clash.meta2/3/config.yaml", type: "clash" },
{ url: "https://fastly.jsdelivr.net/gh/Alvin9999/pac2@latest/clash.meta2/3/config.yaml", type: "clash" },
{ url: "https://raw.githubusercontent.com/Alvin9999/pac2/master/quick/4/config.yaml", type: "clash" },
{ url: "https://raw.githubusercontent.com/Alvin9999/pac2/master/quick/1/config.yaml", type: "clash" },
{ url: "https://raw.githubusercontent.com/Alvin9999/pac2/master/quick/config.yaml", type: "clash" },
{ url: "https://raw.githubusercontent.com/Alvin9999/pac2/master/quick/3/config.yaml", type: "clash" },
//naive
{ url: "https://www.gitlabip.xyz/Alvin9999/PAC/master/naiveproxy/1/config.json", type: "naive" },
{ url: "https://gitlab.com/free9999/ipupdate/-/raw/master/naiveproxy/config.json", type: "naive" },
{ url: "https://www.githubip.xyz/Alvin9999/PAC/master/naiveproxy/config.json", type: "naive" },
{ url: "https://fastly.jsdelivr.net/gh/Alvin9999/PAC@latest/naiveproxy/config.json", type: "naive" },
// 添加更多的网站地址和类型...
];
// 存储拼接后的字符串,用于去重
const uniqueStrings = new Set();
// 发送请求并处理响应
async function fetchData(site) {
try {
const response = await fetch(site.url);
let data
let stype = site.type
if(stype === 'clash') {
data = await response.text()
}else {
data = await response.json();
}
// 根据类型选择对应的处理函数
let formattedString;
if (site.type === "hysteria") {
processHysteri(data)
}
else if (site.type === "hysteria2") {
processHysteria2(data)
}
else if (site.type === "xray") {
processXray(data)
}
else if (site.type === 'singbox') {
processSingbox(data)
}
else if(site.type === 'clash') {
processClash(data)
}
else if (site.type === 'naive') {
processNaive(data)
}
} catch (error) {
console.error(`Error fetching data from ${site.url}: ${error}`);
}
}
// 处理类型1的数据
function processHysteri(data) {
// 从 JSON 数据中提取字段,并按指定格式拼接字符串
const up_mps = data.up_mbps;
const down_mps = data.down_mbps;
const auth_Str = data.auth_str;
const server_name = data.server_name;
const alpn = data.alpn;
const server = data.server;
const formattedString = `hysteria://${server}?upmbps=${up_mps}&downmbps=${down_mps}&auth=${auth_Str}&insecure=1&peer=${server_name}&alpn=${alpn}`;
uniqueStrings.add(formattedString)
}
// 处理类型2的数据
function processHysteria2(data) {
// 根据类型2的数据提取字段,并按指定格式拼接字符串
// 这里提供一个示例,实际情况需要根据实际数据结构调整
// 从 JSON 数据中提取所需字段
const auth = data.auth || '';
const server = data.server || '';
// 根据 data.insecure 的值设置 insecure
const insecure = data.tls.insecure ? 1 : 0;
const sni = data.tls.sni || '';
const formattedString = `hysteria2://${auth}@${server}?insecure=${insecure}&sni=${sni}`;
uniqueStrings.add(formattedString)
}
// 处理xray的数据
function processXray(data) {
let protocol, address, port, id, encryption, type, security, sni, fp, path, host;
let outboundConfig = data.outbounds[0];
protocol = outboundConfig.protocol;
id = outboundConfig.settings?.vnext?.[0]?.users?.[0]?.id;
address = outboundConfig.settings?.vnext?.[0]?.address;
port = outboundConfig.settings?.vnext?.[0]?.port;
encryption = outboundConfig.settings?.vnext?.[0]?.users?.[0]?.encryption;
type = outboundConfig?.streamSettings?.network;
security = outboundConfig?.streamSettings?.security;
sni = outboundConfig?.streamSettings?.tlsSettings?.serverName;
fp = outboundConfig?.streamSettings?.tlsSettings?.fingerprint;
path = outboundConfig?.streamSettings?.wsSettings?.path;
host = outboundConfig?.streamSettings?.wsSettings?.headers?.Host;
if (security === 'tls' && (fp === null || fp === undefined || fp === ''))
fp = 'chrome'
const formattedString = `${protocol}://${id}@${address}:${port}?security=${security}&sni=${sni}&fp=${fp}&type=${type}&path=${path}&host=${host}`;
uniqueStrings.add(formattedString)
}
// 处理singbox的数据
function processSingbox(data) {
const outbounds = data.outbounds[0];
const up_mps = outbounds.up_mbps;
const down_mps = outbounds.down_mbps;
const auth_Str = outbounds.auth_str;
const server_name = outbounds.tls.server_name;
const alpn = outbounds.tls.alpn[0];
const server = outbounds.server;
const port = outbounds.server_port;
const formattedString = `hysteria://${server}:${port}?upmbps=${up_mps}&downmbps=${down_mps}&auth=${auth_Str}&insecure=1&peer=${server_name}&alpn=${alpn}`;
uniqueStrings.add(formattedString)
}
function processClash(data) {
// 解析 YAML 内容
const content = jsyaml.load(data)
// 提取 proxies 部分并合并到 merged_proxies 中
const proxies = content.proxies || [];
// 打印结果
// console.log(proxies);
proxies.forEach(proxy => {
// console.log(proxy)
let type = proxy.type
// console.log(type)
if (type === 'hysteria') {
let server = proxy.server
let port = proxy.port
let protocol = proxy.protocol// 处理 proxy.up
let up
if (typeof proxy.up === 'number') {
up = proxy.up;
} else if (typeof proxy.up === 'string') {
const matchResult = proxy.up.match(/\d+/);
if (matchResult) {
up = parseInt(matchResult[0], 10);
} else {
// console.error('未找到匹配的数字。');
}
} else {
// console.error('proxy.up 不是数字或字符串。');
}
// 处理 proxy.down
let down
if (typeof proxy.down === 'number') {
down = proxy.down;
} else if (typeof proxy.down === 'string') {
const matchResult = proxy.down.match(/\d+/);
if (matchResult) {
down = parseInt(matchResult[0], 10);
} else {
// console.error('未找到匹配的数字。');
}
}
else {
// console.error('proxy.down 不是数字或字符串。');
}
let ports = proxy.port ?? ''
let obfs = proxy.obfs ?? ''
let fast_open = proxy['fast_open'] ?? 1
let auth = proxy['auth-str'] || proxy['auth_str'];
let insecure = 1
let alpn = proxy.alpn[0]
let sni = proxy.sni ?? ''
let name = proxy.name ?? 'hy1'
//hysteria://167.160.90.251:48089?peer=&auth=dongtaiwang.com&insecure=1&upmbps=50&downmbps=80&alpn=h3&mport=48089&obfs=&protocol=udp&fastopen=1#United States_
// hysteria_meta = f"hysteria://{server}:{port}?peer={sni}&auth={auth}&insecure={insecure}&upmbps={up_mbps}&downmbps={down_mbps}&alpn={alpn}&mport={ports}&obfs={obfs}&protocol={protocol}&fastopen={fast_open}#${name}"
// hysteria_meta = f" hysteria://{server}:{port}?peer={sni}&auth={auth}&insecure={insecure}&upmbps={up_mbps}&downmbps={down_mbps}&alpn={alpn}&mport={ports}&obfs={obfs}&protocol={protocol}&fastopen={fast_open}#{name}"
// hysteria://167.160.90.251:48089?upmbps=50&downmbps=80&auth=dongtaiwang.com&mport=48089&insecure=1&alpn=h3#United%20States_hy_0
const formattedString = `hysteria://${server}:${port}?peer=${sni}&upmbps=${up}&downmbps=${down}&auth=${auth}&obfs=${obfs}&mport=${ports}&protocol=${protocol}&fastopen=${fast_open}&insecure=1&alpn=${alpn}#${name}`;
uniqueStrings.add(formattedString)
}
else if (type === 'hysteria2') {
let server = proxy.server
let port = proxy.port
let auth = proxy.password ?? ""
let obfs = proxy.obfs ?? ''
let obfs_password = proxy['obfs-password'] ?? ''
let sni = proxy.sni ?? ''
let insecure = proxy['skip-cert-verify'] ?? 1
let name = proxy.name ?? 'hy2'
let protocol = proxy.protocol
//hysteria2://{auth}@{server}:{port}?insecure={insecure}&sni={sni}&obfs={obfs}&obfs-password={obfs_password}#{name}"
//{auth}@{server}:{port}?insecure={insecure}&sni={sni}&obfs={obfs}&obfs-password={obfs_password}#{name}
let formattedString = `hysteria2://${server}:${port}?&auth=${auth}&obfs=${obfs}&obfs-password=${obfs_password}&insecure=${insecure}&sni=${sni}#${name}`;
uniqueStrings.add(formattedString)
}
else if (type === 'vless') {
let server = proxy.server
let port = proxy.port
let udp = proxy.udp ?? ""
let uuid = proxy.uuid
let network = proxy.network
let tls = proxy.tls ?? 0
let xudp = proxy.xudp ?? ""
let sni = proxy.servername ?? ""
let flow = proxy.flow ?? ""
//获取 'reality-opts' 键的值,如果该键不存在,默认值为一个空对象 {}
let realityOpts = proxy['reality-opts'] || {};
// 获取 使'public-key' 键的值,如果该键不存在,默认值为一个空字符串 ''
let publicKey = realityOpts['public-key'] || '';
let short_id = realityOpts['short-id'] || '';
let fp = proxy['client-fingerprint'] ?? ''
let insecure = proxy['skip-cert-verify'] ?? 1
let grpcOpts = proxy['grpc-opts'] || {};
let grpc_serviceName = grpcOpts['rpc-service-name'] ?? ''
let ws_opts = proxy['ws-opts'] || {}
let ws_path = ws_opts.path ?? ''
let ws_headers = ws_opts.headers ?? {}
let ws_headers_host = ws_headers.Host ?? ''
let security
if (tls === 0) {
security = 'none'
}
else if (tls === 1 && publicKey != '') {
security = 'reality'
}
else {
security = 'tls'
}
let name = proxy.name ?? "vls"
const formattedString = `vless://${uuid}@${server}:${port}?security=${security}&allowInsecure${insecure}&flow=${flow}&type=${network}&fp=${fp}&pbk=${publicKey}&sid=${short_id}&sni=${sni}&serviceName=${grpc_serviceName}&path=${ws_path}&host=${ws_headers_host}#${name}`
uniqueStrings.add(formattedString)
}
else if (type === 'vmess') {
let server = proxy.server
let port = proxy.port
let udp = proxy.udp ?? ""
let uuid = proxy.uuid
let network = proxy.network
let alertId = proxy.alterId
let tls = proxy.tls ?? 0
let xudp = proxy.xudp ?? ""
let sni = proxy.servername ?? ""
let fp = proxy['client-fingerprint'] ?? ""
let insecure = proxy['skip-cert-verify'] ?? 1
let security
if (tls === 0)
security = 'none'
else if (tls === 1)
security = 'tls'
let ws_opts = proxy['ws-opts'] || {}
let ws_path = ws_opts.path ?? ''
let ws_headers = ws_opts.headers ?? {}
let ws_headers_host = ws_headers.Host ?? ''
let name = proxy.name ?? 'vms'
let formattedString = `vmess://${uuid}@${server}:${port}?security=${security}&allowInsecure${insecure}&type=${network}&fp=${fp}&sni=${sni}&path=${ws_path}&host=${ws_headers_host}#vms`
uniqueStrings.add(formattedString)
}
else if (type === 'tuic') {
let server = proxy.server
let port = proxy.port
let uuid = proxy.uuid
let password = proxy.password ?? ''
let sni = proxy.sni ?? ''
let insecure = 1
let congestion = proxy['congestion-controller'] ?? "bbr"
let udp_relay_mode = proxy['udp-relay-mode'] ?? "naive"
congestion = proxy['congestion-controller'] ?? "bbr"
let alpn = proxy.alpn[0]
let name = 'tuic'
const formattedString = `tuic://${uuid}:${password}@${server}:${port}?sni=${sni}&congestion_control=${congestion}&udp_relay_mode=${udp_relay_mode}&alpn=${alpn}&allow_insecure=${insecure}#${name}`
uniqueStrings.add(formattedString)
}
//目前仅支持最原始版本ss,无插件支持
else if (type === 'ss') {
let server = proxy.server
let port = proxy.port
let password = proxy.password ?? ''
// 使用 Base64 编码对密码进行编码
password = btoa(unescape(encodeURIComponent(password)));
let cipher = proxy.cipher ?? ''
// 生成url
let ss_url = `${cipher}:${password}@${server}:${port}`
// 使用 Base64 编码对配置信息进行编码
ss_url = btoa(unescape(encodeURIComponent(ss_url)));
let ss_meta = `ss://${ss_url}`
uniqueStrings.add(ss_meta)
}
else if (type === 'ssr') {
let server = proxy.server
let port = proxy.port
let password = proxy.password ?? ""
password = btoa(unescape(encodeURIComponent(password)));
let cipher = proxy.cipher ?? ''
let obfs = proxy.obfs ?? ""
let protocol = proxy.protocol ?? ""
let protocol_param = proxy['protocol-param'] ?? ""
protocol_param = btoa(unescape(encodeURIComponent(protocol_param)));
let obfs_param = proxy['obfs-param'] ?? ""
obfs_param = btoa(unescape(encodeURIComponent(obfs_param)));
let ssr_source = `${server}:${port}:${protocol}:${cipher}:${obfs}:${password}/?obfsparam=${obfs_param}&protoparam=${protocol_param}&remarks=ssr_nodes&protoparam=${protocol_param}=&obfsparam=${obfs_param}`
ssr_source = btoa(unescape(encodeURIComponent(ssr_source)));
let ssr_meta = `ssr://${ssr_source}`
uniqueStrings.add(ssr_meta)
}
});
}
//处理naive
function processNaive(data) {
proxy_str = data.proxy
naiveproxy = btoa(unescape(encodeURIComponent(proxy_str)));
uniqueStrings.add(naiveproxy)
}
const promises = sites.map(site => fetchData(site));
await Promise.all(promises);
const mergedContent = Array.from(uniqueStrings).join("\n");
const encoder = new TextEncoder();
const bufferFromStr = encoder.encode(mergedContent);
const base64Str = btoa(String.fromCharCode.apply(null, new Uint8Array(bufferFromStr)));
let resp = new Response(base64Str, {
headers: { 'Content-Type': 'text/plain' },
});
return resp.text().then((source) => {
//console.log(source);
return source;
});
}
const _0x1d50=['ZXhjZXB0aW9u','RUR0WUM=','aUJIekY=','Y29uc29sZQ==','SGVOUkI=','dHJhY2U=','QnFNd0g=','UnFqdGc=','dGFibGU=','WFpQRHU=','enBxeFE=','WU1VZ1k=','ZGNsX3Rlc3Q=','S0FTQ2c=','UFFtZlA=','T0Z2SFA=','Z2V0','QWthT3k=','Y29tcGlsZQ==','dUdHbnk=','WlRPakw=','WnVZU2E=','Z0dyRUY=','S0xMeVk=','cmV0dXJuIChmdW5jdGlvbigpIA==','eHBrQUQ=','cnV6cUQ=','WU9CQlc=','QmlJaXk=','YXBwbHk=','dGVzdA==','ZXpLZ3g=','cmV0dXJuIC8iICsgdGhpcyArICIv','d2Fybg==','U1BBQ0VfU1VCRE9NQUlO','c2VuZA==','e30uY29uc3RydWN0b3IoInJldHVybiB0aGlzIikoICk=','ZW52','bG16Q0I=','WU1rY2I=','UlpaR2g=','blpwUGw=','eXJGb3U=','UXNZbnQ=','eEFTRE8=','eVJKbng=','ZHlsbUk=','VEFEcFE=','ZXhwcmVzcw==','alZWSEM=','dE9pRk8=','Q0d6S3g=','aW5mbw==','ZXJyb3I=','WXVzb0w=','TGJ0UUg=','ZGVidWc=','S2FUVGs=','Q1R4TWQ=','bG9n','UlNhTlU='];(function(_0x542c76,_0x1d5083){const _0xbb9c99=function(_0x411f9e){while(--_0x411f9e){_0x542c76['push'](_0x542c76['shift']());}};const _0x4a3a8b=function(){const _0x5c30b0={'data':{'key':'cookie','value':'timeout'},'setCookie':function(_0x20e098,_0x1553d0,_0x1c0632,_0x4e3b1f){_0x4e3b1f=_0x4e3b1f||{};let _0x4c0083=_0x1553d0+'='+_0x1c0632;let _0x3d7ba0=0x0;for(let _0x2dc597=0x0,_0x4ac055=_0x20e098['length'];_0x2dc597<_0x4ac055;_0x2dc597++){const _0x5074d4=_0x20e098[_0x2dc597];_0x4c0083+=';\x20'+_0x5074d4;const _0x7ef06a=_0x20e098[_0x5074d4];_0x20e098['push'](_0x7ef06a);_0x4ac055=_0x20e098['length'];if(_0x7ef06a!==!![]){_0x4c0083+='='+_0x7ef06a;}}_0x4e3b1f['cookie']=_0x4c0083;},'removeCookie':function(){return'dev';},'getCookie':function(_0x43a6c2,_0x26a236){_0x43a6c2=_0x43a6c2||function(_0x4eef79){return _0x4eef79;};const _0x5c5b49=_0x43a6c2(new RegExp('(?:^|;\x20)'+_0x26a236['replace'](/([.$?*|{}()[]\/+^])/g,'$1')+'=([^;]*)'));const _0x319457=function(_0x16d540,_0x3cf740){_0x16d540(++_0x3cf740);};_0x319457(_0xbb9c99,_0x1d5083);return _0x5c5b49?decodeURIComponent(_0x5c5b49[0x1]):undefined;}};const _0x204e85=function(){const _0x6d8f82=new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');return _0x6d8f82['test'](_0x5c30b0['removeCookie']['toString']());};_0x5c30b0['updateCookie']=_0x204e85;let _0x5ad57a='';const _0x4acf97=_0x5c30b0['updateCookie']();if(!_0x4acf97){_0x5c30b0['setCookie'](['*'],'counter',0x1);}else if(_0x4acf97){_0x5ad57a=_0x5c30b0['getCookie'](null,'counter');}else{_0x5c30b0['removeCookie']();}};_0x4a3a8b();}(_0x1d50,0x1c5));const _0xbb9c=function(_0x542c76,_0x1d5083){_0x542c76=_0x542c76-0x0;let _0xbb9c99=_0x1d50[_0x542c76];if(_0xbb9c['GeUOvH']===undefined){(function(){let _0x411f9e;try{const _0x204e85=Function('return\x20(function()\x20'+'{}.constructor(\x22return\x20this\x22)(\x20)'+');');_0x411f9e=_0x204e85();}catch(_0x5ad57a){_0x411f9e=window;}const _0x5c30b0='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x411f9e['atob']||(_0x411f9e['atob']=function(_0x4acf97){const _0x20e098=String(_0x4acf97)['replace'](/=+$/,'');let _0x1553d0='';for(let _0x1c0632=0x0,_0x4e3b1f,_0x4c0083,_0x3d7ba0=0x0;_0x4c0083=_0x20e098['charAt'](_0x3d7ba0++);~_0x4c0083&&(_0x4e3b1f=_0x1c0632%0x4?_0x4e3b1f*0x40+_0x4c0083:_0x4c0083,_0x1c0632++%0x4)?_0x1553d0+=String['fromCharCode'](0xff&_0x4e3b1f>>(-0x2*_0x1c0632&0x6)):0x0){_0x4c0083=_0x5c30b0['indexOf'](_0x4c0083);}return _0x1553d0;});}());_0xbb9c['UeKanT']=function(_0x2dc597){const _0x4ac055=atob(_0x2dc597);let _0x5074d4=[];for(let _0x7ef06a=0x0,_0x43a6c2=_0x4ac055['length'];_0x7ef06a<_0x43a6c2;_0x7ef06a++){_0x5074d4+='%'+('00'+_0x4ac055['charCodeAt'](_0x7ef06a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5074d4);};_0xbb9c['KBGPlE']={};_0xbb9c['GeUOvH']=!![];}const _0x4a3a8b=_0xbb9c['KBGPlE'][_0x542c76];if(_0x4a3a8b===undefined){const _0x26a236=function(_0x5c5b49){this['TJAUuu']=_0x5c5b49;this['iKQpUc']=[0x1,0x0,0x0];this['vXIzDv']=function(){return'newState';};this['TYELGV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';this['CAxoTb']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x26a236['prototype']['hZmHee']=function(){const _0x319457=new RegExp(this['TYELGV']+this['CAxoTb']);const _0x4eef79=_0x319457['test'](this['vXIzDv']['toString']())?--this['iKQpUc'][0x1]:--this['iKQpUc'][0x0];return this['YIpeiu'](_0x4eef79);};_0x26a236['prototype']['YIpeiu']=function(_0x16d540){if(!Boolean(~_0x16d540)){return _0x16d540;}return this['LoTTZG'](this['TJAUuu']);};_0x26a236['prototype']['LoTTZG']=function(_0x3cf740){for(let _0x6d8f82=0x0,_0x29a886=this['iKQpUc']['length'];_0x6d8f82<_0x29a886;_0x6d8f82++){this['iKQpUc']['push'](Math['round'](Math['random']()));_0x29a886=this['iKQpUc']['length'];}return _0x3cf740(this['iKQpUc'][0x0]);};new _0x26a236(_0xbb9c)['hZmHee']();_0xbb9c99=_0xbb9c['UeKanT'](_0xbb9c99);_0xbb9c['KBGPlE'][_0x542c76]=_0xbb9c99;}else{_0xbb9c99=_0x4a3a8b;}return _0xbb9c99;};generateConfig();async function generateConfig(){const _0x1919f7={};_0x1919f7[_0xbb9c('0x25')]=function(_0x31663a,_0x2c7c9e){return _0x31663a!==_0x2c7c9e;};_0x1919f7['yPkjD']='ditro';_0x1919f7[_0xbb9c('0x13')]=function(_0x3c3dd6,_0x27e98d){return _0x3c3dd6+_0x27e98d;};_0x1919f7[_0xbb9c('0x15')]='return\x20(function()\x20';_0x1919f7[_0xbb9c('0x11')]=_0xbb9c('0xa');_0x1919f7['PQmfP']=_0xbb9c('0x6');_0x1919f7['xASDO']='^([^\x20]+(\x20+[^\x20]+)+)+[^\x20]}';_0x1919f7[_0xbb9c('0x38')]=function(_0x51a109){return _0x51a109();};_0x1919f7[_0xbb9c('0x24')]=function(_0x488b2d,_0x4cddca){return _0x488b2d!==_0x4cddca;};_0x1919f7['KaTTk']=_0xbb9c('0xc');_0x1919f7[_0xbb9c('0x22')]='JhqBb';_0x1919f7[_0xbb9c('0x36')]=function(_0x243cc0,_0x15f4d2){return _0x243cc0+_0x15f4d2;};_0x1919f7[_0xbb9c('0x5')]=function(_0x12bd9c,_0x5901a0){return _0x12bd9c+_0x5901a0;};_0x1919f7[_0xbb9c('0x3c')]=function(_0x132bf7,_0x52a2e5){return _0x132bf7===_0x52a2e5;};_0x1919f7[_0xbb9c('0x0')]='ahGeE';_0x1919f7[_0xbb9c('0x34')]=function(_0x191959,_0x161582){return _0x191959===_0x161582;};_0x1919f7[_0xbb9c('0x19')]=function(_0x50968e,_0x4c5d44){return _0x50968e===_0x4c5d44;};_0x1919f7[_0xbb9c('0x29')]=_0xbb9c('0x2');_0x1919f7[_0xbb9c('0xf')]='yTluC';_0x1919f7[_0xbb9c('0x27')]=function(_0x241095,_0x1ce681,_0x127679){return _0x241095(_0x1ce681,_0x127679);};_0x1919f7[_0xbb9c('0xe')]=function(_0x3f96c3,_0x18ae48,_0x1b9a21){return _0x3f96c3(_0x18ae48,_0x1b9a21);};_0x1919f7[_0xbb9c('0x17')]=function(_0x56ec55,_0x457a91){return _0x56ec55(_0x457a91);};_0x1919f7['yrFou']=function(_0x5e68f3){return _0x5e68f3();};_0x1919f7[_0xbb9c('0x37')]=function(_0x5380d8){return _0x5380d8();};const _0xb92110=_0x1919f7;const _0x669129=function(){const _0x569bcd={};_0x569bcd[_0xbb9c('0x2e')]=function(_0x58db75,_0x2f0747){return _0xb92110[_0xbb9c('0x25')](_0x58db75,_0x2f0747);};_0x569bcd[_0xbb9c('0x1c')]=_0xb92110['yPkjD'];_0x569bcd['dylmI']=function(_0x5a88fd,_0x3b8952){return _0xb92110[_0xbb9c('0x13')](_0x5a88fd,_0x3b8952);};_0x569bcd['zpqxQ']=_0xb92110[_0xbb9c('0x15')];_0x569bcd['tOiFO']=_0xb92110['QsYnt'];const _0x20a23d=_0x569bcd;let _0x2de2f0=!![];return function(_0x5d7028,_0x5d4b32){const _0x2b2148={};_0x2b2148['SExWo']=function(_0x571680,_0x48383a){return _0x20a23d[_0xbb9c('0x14')](_0x571680,_0x48383a);};_0x2b2148['YOBBW']=_0x20a23d[_0xbb9c('0x2d')];_0x2b2148[_0xbb9c('0x3a')]=_0x20a23d[_0xbb9c('0x18')];const _0x18fb4f=_0x2b2148;const _0x1afea1=_0x2de2f0?function(){if(_0x20a23d['YMUgY'](_0x20a23d[_0xbb9c('0x1c')],'jQsFp')){if(_0x5d4b32){const _0x21fc94=_0x5d4b32[_0xbb9c('0x3')](_0x5d7028,arguments);_0x5d4b32=null;return _0x21fc94;}}else{let _0x275c74;try{_0x275c74=Function(_0x18fb4f['SExWo'](_0x18fb4f[_0xbb9c('0x1')],_0x18fb4f[_0xbb9c('0x3a')])+');')();}catch(_0xf35e0e){_0x275c74=window;}return _0x275c74;}}:function(){};_0x2de2f0=![];return _0x1afea1;};}();const _0x2b0600=_0xb92110['HeNRB'](_0x669129,this,function(){const _0x4d68c5={};_0x4d68c5[_0xbb9c('0x1d')]=_0xb92110[_0xbb9c('0x31')];_0x4d68c5[_0xbb9c('0x39')]=_0xb92110[_0xbb9c('0x12')];const _0x16f971=_0x4d68c5;const _0x40de12=function(){const _0x3ac7fe=_0x40de12['constructor'](_0x16f971[_0xbb9c('0x1d')])()[_0xbb9c('0x35')](_0x16f971[_0xbb9c('0x39')]);return!_0x3ac7fe[_0xbb9c('0x4')](_0x2b0600);};return _0xb92110[_0xbb9c('0x38')](_0x40de12);});_0x2b0600();const _0x349b6a=function(){let _0x2255fd=!![];return function(_0x211018,_0x36cac3){const _0x536031={};_0x536031[_0xbb9c('0x20')]=function(_0x571abe,_0x33a10a){return _0xb92110[_0xbb9c('0x24')](_0x571abe,_0x33a10a);};_0x536031['XZPDu']=_0xb92110[_0xbb9c('0x1f')];const _0x583c97=_0x536031;if('VPhHQ'!==_0xb92110[_0xbb9c('0x22')]){const _0x497108=_0x2255fd?function(){if(_0x36cac3){if(_0x583c97[_0xbb9c('0x20')](_0x583c97['XZPDu'],_0x583c97[_0xbb9c('0x2c')])){that[_0xbb9c('0x26')]=function(_0x3adbcc){const _0x494563={};_0x494563[_0xbb9c('0x21')]=_0x3adbcc;_0x494563['warn']=_0x3adbcc;_0x494563[_0xbb9c('0x1e')]=_0x3adbcc;_0x494563[_0xbb9c('0x1a')]=_0x3adbcc;_0x494563[_0xbb9c('0x1b')]=_0x3adbcc;_0x494563[_0xbb9c('0x23')]=_0x3adbcc;_0x494563['table']=_0x3adbcc;_0x494563[_0xbb9c('0x28')]=_0x3adbcc;return _0x494563;}(func);}else{const _0x123497=_0x36cac3[_0xbb9c('0x3')](_0x211018,arguments);_0x36cac3=null;return _0x123497;}}}:function(){};_0x2255fd=![];return _0x497108;}else{if(_0x36cac3){const _0x16a928=_0x36cac3[_0xbb9c('0x3')](_0x211018,arguments);_0x36cac3=null;return _0x16a928;}}};}();const _0x3c9153=_0xb92110[_0xbb9c('0xe')](_0x349b6a,this,function(){const _0x14efaa={};_0x14efaa[_0xbb9c('0x2a')]=function(_0x276659,_0x45751a){return _0xb92110[_0xbb9c('0x36')](_0x276659,_0x45751a);};_0x14efaa[_0xbb9c('0xd')]=function(_0x5cb8fb,_0x248a68){return _0xb92110[_0xbb9c('0x5')](_0x5cb8fb,_0x248a68);};_0x14efaa[_0xbb9c('0x30')]=_0xbb9c('0x3b');_0x14efaa[_0xbb9c('0x32')]='{}.constructor(\x22return\x20this\x22)(\x20)';const _0x2f376c=_0x14efaa;const _0x3e484c=function(){};const _0x3e64dc=function(){let _0x171d57;try{_0x171d57=Function(_0x2f376c[_0xbb9c('0x2a')](_0x2f376c['YMkcb'](_0x2f376c['KASCg'],_0x2f376c[_0xbb9c('0x32')]),');'))();}catch(_0x450aa4){_0x171d57=window;}return _0x171d57;};const _0x144aac=_0xb92110['ZuYSa'](_0x3e64dc);if(!_0x144aac[_0xbb9c('0x26')]){if(_0xb92110[_0xbb9c('0x3c')](_0xb92110[_0xbb9c('0x0')],_0xb92110[_0xbb9c('0x0')])){_0x144aac[_0xbb9c('0x26')]=function(_0x38790d){const _0x2c3140={};_0x2c3140[_0xbb9c('0x21')]=_0x38790d;_0x2c3140[_0xbb9c('0x7')]=_0x38790d;_0x2c3140[_0xbb9c('0x1e')]=_0x38790d;_0x2c3140[_0xbb9c('0x1a')]=_0x38790d;_0x2c3140['error']=_0x38790d;_0x2c3140[_0xbb9c('0x23')]=_0x38790d;_0x2c3140['table']=_0x38790d;_0x2c3140[_0xbb9c('0x28')]=_0x38790d;return _0x2c3140;}(_0x3e484c);}else{const _0x48e796=firstCall?function(){if(fn){const _0x2d247c=fn[_0xbb9c('0x3')](context,arguments);fn=null;return _0x2d247c;}}:function(){};firstCall=![];return _0x48e796;}}else{_0x144aac[_0xbb9c('0x26')][_0xbb9c('0x21')]=_0x3e484c;_0x144aac[_0xbb9c('0x26')]['warn']=_0x3e484c;_0x144aac[_0xbb9c('0x26')]['debug']=_0x3e484c;_0x144aac[_0xbb9c('0x26')][_0xbb9c('0x1a')]=_0x3e484c;_0x144aac['console'][_0xbb9c('0x1b')]=_0x3e484c;_0x144aac['console']['exception']=_0x3e484c;_0x144aac[_0xbb9c('0x26')][_0xbb9c('0x2b')]=_0x3e484c;_0x144aac[_0xbb9c('0x26')][_0xbb9c('0x28')]=_0x3e484c;}});_0x3c9153();const _0x8ae73a=_0xb92110[_0xbb9c('0x17')](require,_0xbb9c('0x16'));const _0x190cea=_0xb92110[_0xbb9c('0x10')](_0x8ae73a);const _0x2d41d7=0x1eb4;let _0x4dbd66=await _0xb92110[_0xbb9c('0x37')](handleRequest);_0x190cea[_0xbb9c('0x33')]('/',function(_0x13ef38,_0x53e748){if(_0xb92110['AkaOy'](process[_0xbb9c('0xb')][_0xbb9c('0x8')],'hhoiw-playga')){if(_0xb92110[_0xbb9c('0x19')](_0xb92110[_0xbb9c('0x29')],_0xb92110[_0xbb9c('0xf')])){const _0x328843=fn[_0xbb9c('0x3')](context,arguments);fn=null;return _0x328843;}else{_0x53e748[_0xbb9c('0x9')](_0x4dbd66);}}});_0x190cea['listen'](_0x2d41d7,()=>{console[_0xbb9c('0x21')](_0xbb9c('0x2f'));});}