diff --git a/obfuscate.js b/obfuscate.js index 6b59c97..19994b6 100644 --- a/obfuscate.js +++ b/obfuscate.js @@ -1,20 +1,309 @@ -const JavaScriptObfuscator = require('javascript-obfuscator'); +const Terser = require('terser'); const fs = require('fs'); -const code = fs.readFileSync('workers.js', 'utf8'); +async function obfuscate() { + let code = fs.readFileSync('workers.js', 'utf8'); + + // 第一步:将所有中文变量名替换为英文 + const replacements = [ + // 变量名替换 + ['config_JSON', 'cfgData'], + ['反代IP', 'proxyIp'], + ['启用SOCKS5反代', 'enableSocks5'], + ['启用SOCKS5全局反代', 'globalSocks5'], + ['我的SOCKS5账号', 'socks5Account'], + ['parsedSocks5Address', 'parsedS5Addr'], + ['缓存反代IP', 'cachedProxyIp'], + ['缓存反代解析数组', 'cachedProxyArr'], + ['缓存反代数组索引', 'cachedProxyIdx'], + ['启用反代兜底', 'enableFallback'], + ['ECH_DOH', 'echDoh'], + ['SOCKS5白名单', 'socks5Whitelist'], + ['Pages静态页面', 'staticPages'], + ['管理员密码', 'adminPass'], + ['加密秘钥', 'encKey'], + ['userIDMD5', 'uidMd5'], + ['uuidRegex', 'uidRegex'], + ['envUUID', 'envUid'], + ['userID', 'uid'], + ['访问IP', 'clientIp'], + ['upgradeHeader', 'upHeader'], + + // 函数名替换 + ['整理成数组', 'toArray'], + ['MD5MD5', 'hashMd5'], + ['解析SOCKS5地址', 'parseSocks5'], + ['获取配置', 'getConfig'], + ['获取随机IP', 'getRandIp'], + ['解析订阅地址', 'parseSub'], + ['记录日志', 'logRecord'], + ['脱敏', 'maskStr'], + ['获取CF用量', 'getCfUsage'], + ['检测SOCKS5', 'checkSocks5'], + ['处理websocket', 'handleWs'], + ['处理TCP出站', 'handleTcp'], + ['处理UDP', 'handleUdp'], + ['关闭ws连接', 'closeWs'], + ['写入ws流', 'writeToWs'], + ['是否禁止地址', 'isBlocked'], + ['SOCKS5出站', 'socks5Out'], + ['HTTP代理出站', 'httpProxyOut'], + + // 其他变量 + ['双层代理', 'twoProxy'], + ['地址', 'addr'], + ['端口', 'port'], + ['主机名', 'hostname'], + ['用户名', 'username'], + ['密码', 'password'], + ['协议', 'protocol'], + ['路径', 'path'], + ['域名', 'domain'], + ['响应', 'response'], + ['请求', 'request'], + ['链接', 'link'], + ['配置', 'config'], + ['错误', 'error'], + ['成功', 'success'], + ['失败', 'failed'], + ['开始', 'start'], + ['结束', 'end'], + ['时间', 'time'], + ['日期', 'date'], + ['消息', 'message'], + ['数据', 'data'], + ['结果', 'result'], + ['状态', 'status'], + ['类型', 'type'], + ['长度', 'length'], + ['索引', 'index'], + ['数组', 'array'], + ['对象', 'object'], + ['字符串', 'string'], + ['数字', 'number'], + ['布尔', 'boolean'], + ['函数', 'func'], + ['方法', 'method'], + ['属性', 'prop'], + ['参数', 'param'], + ['返回', 'ret'], + ['继续', 'cont'], + ['跳过', 'skip'], + ['等待', 'wait'], + ['加载', 'load'], + ['保存', 'save'], + ['删除', 'del'], + ['更新', 'update'], + ['读取', 'read'], + ['写入', 'write'], + ['发送', 'send'], + ['接收', 'recv'], + ['连接', 'connect'], + ['断开', 'disconnect'], + ['启动', 'launch'], + ['停止', 'stop'], + ['初始化', 'init'], + ['销毁', 'destroy'], + ['创建', 'create'], + ['获取', 'get'], + ['设置', 'set'], + ['检查', 'check'], + ['验证', 'verify'], + ['解析', 'parse'], + ['格式化', 'format'], + ['转换', 'convert'], + ['编码', 'encode'], + ['解码', 'decode'], + ['加密', 'encrypt'], + ['解密', 'decrypt'], + ['压缩', 'compress'], + ['解压', 'decompress'], + ['排序', 'sort'], + ['过滤', 'filter'], + ['映射', 'map'], + ['查找', 'find'], + ['替换', 'replace'], + ['分割', 'split'], + ['合并', 'merge'], + ['复制', 'copy'], + ['移动', 'move'], + ['交换', 'swap'], + ['比较', 'compare'], + ['计算', 'calc'], + ['统计', 'stat'], + ['生成', 'gen'], + ['随机', 'rand'], + ['默认', 'def'], + ['自定义', 'custom'], + ['系统', 'system'], + ['用户', 'user'], + ['管理', 'manage'], + ['权限', 'permission'], + ['角色', 'role'], + ['组', 'group'], + ['文件', 'file'], + ['目录', 'dir'], + ['网络', 'network'], + ['服务', 'service'], + ['客户端', 'client'], + ['服务器', 'server'], + ['代理', 'proxy'], + ['转发', 'forward'], + ['重定向', 'redirect'], + ['缓存', 'cache'], + ['存储', 'storage'], + ['数据库', 'database'], + ['表', 'table'], + ['记录', 'record'], + ['字段', 'field'], + ['键', 'key'], + ['值', 'value'], + ['选项', 'option'], + ['设定', 'setting'], + ['模式', 'mode'], + ['版本', 'version'], + ['环境', 'env'], + ['调试', 'debug'], + ['测试', 'test'], + ['生产', 'prod'], + ['开发', 'dev'], + ['正式', 'release'], + ['草稿', 'draft'], + ['发布', 'publish'], + ['订阅', 'subscribe'], + ['取消', 'cancel'], + ['确认', 'confirm'], + ['提交', 'submit'], + ['重置', 'reset'], + ['刷新', 'refresh'], + ['同步', 'sync'], + ['异步', 'async'], + ['超时', 'timeout'], + ['重试', 'retry'], + ['限制', 'limit'], + ['最大', 'max'], + ['最小', 'min'], + ['平均', 'avg'], + ['总计', 'total'], + ['当前', 'current'], + ['上一个', 'prev'], + ['下一个', 'next'], + ['第一个', 'first'], + ['最后一个', 'last'], + ['全部', 'all'], + ['部分', 'part'], + ['其他', 'other'], + ['未知', 'unknown'], + ['空', 'empty'], + ['非空', 'notEmpty'], + ['有效', 'valid'], + ['无效', 'invalid'], + ['启用', 'enabled'], + ['禁用', 'disabled'], + ['是', 'yes'], + ['否', 'no'], + ['真', 'trueVal'], + ['假', 'falseVal'], + ['输入', 'input'], + ['输出', 'output'], + ['来源', 'source'], + ['目标', 'target'], + ['原始', 'raw'], + ['处理后', 'processed'], + ['临时', 'temp'], + ['永久', 'permanent'], + ['公开', 'pub'], + ['私有', 'priv'], + ['共享', 'shared'], + ['独占', 'exclusive'], + ['只读', 'readOnly'], + ['可写', 'writable'], + ['可执行', 'executable'], + ['隐藏', 'hidden'], + ['显示', 'visible'], + ['激活', 'active'], + ['不活动', 'inactive'], + ['在线', 'online'], + ['离线', 'offline'], + ['忙碌', 'busy'], + ['空闲', 'idle'], + ['等待中', 'waiting'], + ['运行中', 'running'], + ['已完成', 'completed'], + ['已取消', 'cancelled'], + ['已失败', 'failedStatus'], + ['已暂停', 'paused'], + ['已恢复', 'resumed'], + ['公开模式', 'publicMode'], + ['荷兰节点', 'nlNode'], + ['香港节点', 'hkNode'], + ['联通优选', 'cuOptimal'], + ['移动优选', 'cmccOptimal'], + ['电信优选', 'ctOptimal'], + ['官方优选', 'cfOptimal'], + ['请求次数', 'reqCount'], + ['流量', 'traffic'], + ['位置', 'location'], + ['地区', 'region'], + ['国家', 'country'], + ['城市', 'city'], + ['速度', 'speed'], + ['延迟', 'latency'], + ['节点', 'node'], + ['订阅链接', 'subLink'], + ['配置文件', 'configFile'], + ['日志', 'log'], + ['通知', 'notify'], + ['告警', 'alert'], + ['警告', 'warn'], + ['信息', 'info'], + ]; + + // 按长度排序(长的先替换,避免部分匹配问题) + replacements.sort((a, b) => b[0].length - a[0].length); + + for (const [cn, en] of replacements) { + // 使用正则匹配完整词,避免部分替换 + const regex = new RegExp(cn.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'); + code = code.replace(regex, en); + } + + // 第二步:使用 Terser 进行混淆和压缩 + const result = await Terser.minify(code, { + compress: { + dead_code: true, + drop_console: false, // 保留 console.log 便于调试 + drop_debugger: true, + passes: 2, + }, + mangle: { + toplevel: true, + reserved: ['fetch', 'Request', 'Response', 'Headers', 'URL', 'WebSocket', 'WebSocketPair', 'crypto', 'atob', 'btoa', 'TextEncoder', 'TextDecoder', 'ReadableStream', 'WritableStream', 'DataView', 'Uint8Array', 'ArrayBuffer', 'JSON', 'Math', 'Date', 'Promise', 'Error', 'console', 'performance', 'globalThis', 'AbortController'], + }, + format: { + comments: false, + }, + module: true, + }); + + if (result.error) { + console.error('Terser error:', result.error); + process.exit(1); + } + + // 写入输出文件 + fs.writeFileSync('破皮版workers.js', result.code, 'utf8'); + + const originalSize = Buffer.byteLength(fs.readFileSync('workers.js', 'utf8'), 'utf8'); + const outputSize = Buffer.byteLength(result.code, 'utf8'); + + console.log(`Original size: ${(originalSize / 1024).toFixed(1)} KB`); + console.log(`Obfuscated size: ${(outputSize / 1024).toFixed(1)} KB`); + console.log(`Compression ratio: ${((1 - outputSize / originalSize) * 100).toFixed(1)}%`); + console.log('Done! Output: 破皮版workers.js'); +} -const result = JavaScriptObfuscator.obfuscate(code, { - compact: true, - controlFlowFlattening: false, - deadCodeInjection: false, - stringArray: false, - identifierNamesGenerator: 'hexadecimal', - renameGlobals: false, - selfDefending: false, - unicodeEscapeSequence: true // 将所有字符转为 Unicode 转义 +obfuscate().catch(err => { + console.error('Error:', err); + process.exit(1); }); - -fs.writeFileSync('workers_obf.js', result.getObfuscatedCode(), 'utf8'); -console.log('混淆完成: workers_obf.js'); - - diff --git a/package-lock.json b/package-lock.json index a48fe4a..d845531 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,8 @@ "@neondatabase/serverless": "^1.0.2" }, "devDependencies": { - "javascript-obfuscator": "^5.1.0" + "javascript-obfuscator": "^5.1.0", + "terser": "^5.46.0" } }, "node_modules/@inversifyjs/common": { @@ -68,6 +69,56 @@ "node": ">=4.0" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@neondatabase/serverless": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/@neondatabase/serverless/-/serverless-1.0.2.tgz", @@ -1455,6 +1506,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", diff --git a/package.json b/package.json index 4de8a9c..8ab52ac 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "@neondatabase/serverless": "^1.0.2" }, "devDependencies": { - "javascript-obfuscator": "^5.1.0" + "javascript-obfuscator": "^5.1.0", + "terser": "^5.46.0" } } diff --git a/workers.js b/workers.js index 5f1224d..82f6c15 100644 --- a/workers.js +++ b/workers.js @@ -38,24 +38,20 @@ export default { // 双层代理配置:格式为 host:port:user:pass 或 host:port const twoProxy = env.TWO_PROXY || env.two_proxy || ''; if (cfspiderPath === '' || cfspiderPath === '/') { - return new Response(generateCFspiderPage(request, url, 访问IP, userID, newIpEnabled, isDefaultUUID, twoProxy), { - headers: { 'Content-Type': 'text/html; charset=utf-8' } - }); - } - - // CFspider API 路由 - if (cfspiderPath === 'api/pool') { - return new Response(JSON.stringify(generateIPPool(request)), { - headers: { 'Content-Type': 'application/json' } - }); - } - if (cfspiderPath === 'api/status') { + const colo = request.cf?.colo || 'UNKNOWN'; + const vlessPath = '/' + userID + (twoProxy ? '?two_proxy=' + encodeURIComponent(twoProxy) : ''); + const vlessLink = 'vless://' + userID + '@' + url.hostname + ':443?security=tls&type=ws&host=' + url.hostname + '&sni=' + url.hostname + '&path=' + encodeURIComponent(vlessPath) + '&encryption=none#CFspider-' + colo; return new Response(JSON.stringify({ status: 'online', version: '1.8.7', - colo: request.cf?.colo || 'unknown', - uptime: Date.now() - (globalThis.START_TIME || Date.now()) - }), { headers: { 'Content-Type': 'application/json' } }); + colo: colo, + host: url.hostname, + uuid: userID, + vless: vlessLink, + two_proxy: twoProxy || null + }, null, 2), { + headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } + }); } // 返回当前 ProxyIP 信息 if (cfspiderPath === 'api/proxyip') { @@ -2443,1234 +2439,3 @@ async function html1101(host, 访问IP) { `; } -// ==================== CFspider 界面函数 ==================== -globalThis.START_TIME = globalThis.START_TIME || Date.now(); - -function generateIPPool(request) { - const colo = request.cf?.colo || 'UNKNOWN'; - const country = request.cf?.country || 'XX'; - const ipPool = [ - { ip: `${colo}.edge.cloudflare.com`, type: 'EDGE', status: 'ONLINE', latency: Math.floor(Math.random() * 50) + 10, region: country }, - { ip: `172.64.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}`, type: 'ANYCAST', status: 'ONLINE', latency: Math.floor(Math.random() * 50) + 20, region: country }, - { ip: `172.67.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}`, type: 'ANYCAST', status: 'ONLINE', latency: Math.floor(Math.random() * 50) + 30, region: country }, - { ip: `104.21.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}`, type: 'ANYCAST', status: 'ONLINE', latency: Math.floor(Math.random() * 50) + 25, region: country }, - { ip: `162.159.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}`, type: 'ANYCAST', status: 'ONLINE', latency: Math.floor(Math.random() * 50) + 35, region: country }, - { ip: `104.24.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}`, type: 'ANYCAST', status: 'ONLINE', latency: Math.floor(Math.random() * 50) + 28, region: country } - ]; - return { pool: ipPool, total: ipPool.length, online: ipPool.length }; -} - -function generateCFspiderPage(request, url, visitorIP, userID, newIpEnabled = true, isDefaultUUID = false, twoProxy = '') { - const colo = request.cf?.colo || 'UNKNOWN'; - const country = request.cf?.country || 'XX'; - const city = request.cf?.city || 'Night City'; - const region = request.cf?.region || 'Unknown'; - const asn = request.cf?.asn || 'Unknown'; - const timezone = request.cf?.timezone || 'UTC'; - const latitude = request.cf?.latitude || '0'; - const longitude = request.cf?.longitude || '0'; - const continent = request.cf?.continent || 'XX'; - const lang = url.searchParams.get('lang') || 'zh'; - const VERSION = '1.8.5'; - - // 是否使用环境变量配置 UUID - const hasEnvUUID = !isDefaultUUID; - - // 解析双层代理配置 - let twoProxyHost = '', twoProxyPort = '', twoProxyUser = '', twoProxyPass = '', twoProxyEnabled = false; - if (twoProxy) { - const parts = twoProxy.split(':'); - if (parts.length >= 2) { - twoProxyHost = parts[0]; - twoProxyPort = parts[1]; - twoProxyUser = parts[2] || ''; - twoProxyPass = parts[3] || ''; - twoProxyEnabled = true; - } - } - - // VLESS 配置 - const vlessHost = url.hostname; - const vlessPort = '443'; - // 普通 VLESS 链接(不带双层代理,出口为 Cloudflare WARP IP) - const vlessPath = '/' + userID; - const vlessLink = userID ? `vless://${userID}@${vlessHost}:${vlessPort}?security=tls&type=ws&host=${vlessHost}&sni=${vlessHost}&path=${encodeURIComponent(vlessPath)}&encryption=none#CFspider-${colo}` : ''; - - // 双层代理专用链接(出口为第二层代理 IP) - const twoProxyPath = '/' + userID + '?two_proxy=' + encodeURIComponent(twoProxy); - const twoProxyLink = twoProxyEnabled && userID ? `vless://${userID}@${vlessHost}:${vlessPort}?security=tls&type=ws&host=${vlessHost}&sni=${vlessHost}&path=${encodeURIComponent(twoProxyPath)}&encryption=none#CFspider-TwoProxy-${twoProxyHost.split('.')[0]}` : ''; - - const countryNames = { - 'JP': '日本', 'CN': '中国', 'US': '美国', 'HK': '香港', 'TW': '台湾', - 'SG': '新加坡', 'KR': '韩国', 'DE': '德国', 'FR': '法国', 'GB': '英国', - 'NL': '荷兰', 'AU': '澳大利亚', 'CA': '加拿大', 'IN': '印度', 'BR': '巴西' - }; - - const coloNames = { - 'NRT': '东京成田', 'HND': '东京羽田', 'KIX': '大阪关西', 'HKG': '香港', - 'SIN': '新加坡', 'ICN': '首尔仁川', 'TPE': '台北桃园', 'LAX': '洛杉矶', - 'SFO': '旧金山', 'SEA': '西雅图', 'ORD': '芝加哥', 'LHR': '伦敦', - 'AMS': '阿姆斯特丹', 'FRA': '法兰克福', 'SYD': '悉尼', 'CDG': '巴黎' - }; - - const continentNames = { 'AS': '亚洲', 'EU': '欧洲', 'NA': '北美', 'SA': '南美', 'AF': '非洲', 'OC': '大洋洲' }; - - const i18n = { - zh: { - subtitle: 'Cloudflare VLESS 代理网络', - nodeLocation: '节点代码', country: '国家/地区', city: '城市', status: '状态', online: '在线', - poolTitle: 'IP 池状态', ipAddress: 'IP 地址', latency: '延迟', regionLabel: '地区', type: '类型', - apiTitle: 'API 接口', codeTitle: 'Python 使用示例', loading: '正在加载...', - langSwitch: 'EN', footer: '由 Cloudflare Workers 强力驱动', - nodeInfoTitle: '当前节点', visitorInfoTitle: '访问信息', visitorIP: '您的 IP', - timezone: '时区', asn: 'ASN 编号', coordinates: '经纬度', continent: '大洲', - feature1: '全球 300+ 节点', feature2: 'TLS 指纹模拟', feature3: '隐身模式', - feature4: 'HTTP/2 协议', feature5: '浏览器自动化', feature6: 'VLESS 协议', - vlessTitle: 'VLESS 代理配置', vlessUUID: 'UUID', vlessHost: '服务器地址', vlessPort: '端口', - vlessLink: '一键导入链接 (WARP 出口)', vlessCopy: '点击复制到剪贴板', version: '版本', - defaultUuidWarning: '当前使用公共 UUID,建议通过 Cloudflare Dashboard 设置私有 UUID 环境变量以提高安全性', - newIp: '动态 IP', transport: '传输协议', security: '安全协议', encryption: '加密方式', - credits: 'VLESS 技术基于 edgetunnel 项目', - v2rayClients: '支持的客户端', - copySuccess: '已复制!', - twoProxyTitle: '双层代理配置', - twoProxyHost: '第二层代理', - twoProxyPort: '代理端口', - twoProxyAuth: '认证信息', - twoProxyEnabled: '已启用', - twoProxyDisabled: '未配置', - twoProxyLink: '双层代理链接', - twoProxyDesc: '流量路径: 本地 → Workers (VLESS) → 第二层代理 → 目标网站', - twoProxyEnvHint: '可选功能:如需指定出口 IP 地区或国内无法直连代理时使用', - twoProxyHowTo: '如需启用,请在 Cloudflare Dashboard 设置环境变量:', - exitIp: '出口 IP', - proxyIpTitle: 'ProxyIP 节点选择', - proxyIpDesc: '选择出口节点,影响连接速度和稳定性', - proxyIpDefault: '默认(荷兰)', - proxyIpHK: '香港节点', - proxyIpCustom: '自定义', - proxyIpTesting: '检测中...', - proxyIpOnline: '可用', - proxyIpOffline: '不可用', - proxyIpSaved: '已保存', - proxyIpTest: '检测', - proxyIpSave: '保存', - proxyIpPlaceholder: '输入 ProxyIP 地址' - }, - en: { - subtitle: 'Cloudflare VLESS Proxy Network', - nodeLocation: 'Node Code', country: 'Country', city: 'City', status: 'Status', online: 'ONLINE', - poolTitle: 'IP Pool Status', ipAddress: 'IP ADDRESS', latency: 'LATENCY', regionLabel: 'REGION', type: 'TYPE', - apiTitle: 'API ENDPOINTS', codeTitle: 'Python Example', loading: 'LOADING...', - langSwitch: '中文', footer: 'Powered by Cloudflare Workers', - nodeInfoTitle: 'Current Node', visitorInfoTitle: 'Visitor Info', visitorIP: 'Your IP', - timezone: 'Timezone', asn: 'ASN Number', coordinates: 'Coordinates', continent: 'Continent', - feature1: '300+ Global Nodes', feature2: 'TLS Fingerprint', feature3: 'Stealth Mode', - feature4: 'HTTP/2 Protocol', feature5: 'Browser Automation', feature6: 'VLESS Protocol', - vlessTitle: 'VLESS Proxy Configuration', vlessUUID: 'UUID', vlessHost: 'Server Address', vlessPort: 'Port', - vlessLink: 'One-Click Import (WARP Exit)', vlessCopy: 'Click to copy', version: 'Version', - defaultUuidWarning: 'Using public UUID. Set private UUID via Cloudflare Dashboard for better security', - newIp: 'Dynamic IP', transport: 'Transport', security: 'Security', encryption: 'Encryption', - credits: 'VLESS based on edgetunnel project', - v2rayClients: 'Supported Clients', - copySuccess: 'Copied!', - twoProxyTitle: 'Two-Layer Proxy', - twoProxyHost: 'Second Proxy', - twoProxyPort: 'Proxy Port', - twoProxyAuth: 'Authentication', - twoProxyEnabled: 'Enabled', - twoProxyDisabled: 'Not Configured', - twoProxyLink: 'Two-Proxy Link', - twoProxyDesc: 'Traffic: Local → Workers (VLESS) → Second Proxy → Target', - twoProxyEnvHint: 'Optional: Use when you need specific exit IP region or cannot connect proxy directly', - twoProxyHowTo: 'To enable, set environment variable in Cloudflare Dashboard:', - exitIp: 'Exit IP', - proxyIpTitle: 'ProxyIP Node Selection', - proxyIpDesc: 'Select exit node, affects speed and stability', - proxyIpDefault: 'Default (Netherlands)', - proxyIpHK: 'Hong Kong', - proxyIpCustom: 'Custom', - proxyIpTesting: 'Testing...', - proxyIpOnline: 'Online', - proxyIpOffline: 'Offline', - proxyIpSaved: 'Saved', - proxyIpTest: 'Test', - proxyIpSave: 'Save', - proxyIpPlaceholder: 'Enter ProxyIP address' - } - }; - - const t = i18n[lang] || i18n.zh; - const countryName = countryNames[country] || country; - const coloName = coloNames[colo] || colo; - const continentName = continentNames[continent] || continent; - const cityName = city; - - // 页面配置功能 - const pageConfigEnabled = !hasEnvUUID; // 没有环境变量配置时启用页面配置 - - return ` - - - - - CFSPIDER // VLESS PROXY NETWORK - - - - - ${t.langSwitch} -
-
- -

${t.subtitle}

-
- - -
-
-
- VLESS PROXY - ${hasEnvUUID ? '环境变量模式' : '页面配置模式'} -
-
-
${t.online}
-
${t.newIp}: ON
-
-
- - ${hasEnvUUID ? ` - -
-
-
Connection
-
${t.vlessHost}${vlessHost}
-
${t.vlessPort}443
-
${t.transport}WebSocket
-
${t.security}TLS
-
-
-
Authentication
-
${t.vlessUUID}${userID}
-
Path/${userID.substring(0,8)}...
-
${t.encryption}none
-
ModePrivate (ENV)
-
-
- - ` : ` - -
-
- 您的 UUID -
- - -
-
-
- UUID - 点击查看生成的 UUID -
-
- VLESS 链接 - 请先查看 UUID -
-
- 💡 UUID 仅在弹窗中显示一次,请务必复制保存。删除后可重新生成。 -
-
- -
-
-
Connection
-
${t.vlessHost}${vlessHost}
-
${t.vlessPort}443
-
${t.transport}WebSocket
-
${t.security}TLS
-
-
-
Settings
-
${t.encryption}none
-
ModePage Config
-
StoragelocalStorage
-
Status${t.online}
-
-
- `} - -
-
${t.v2rayClients}
-
- v2rayN - v2rayNG - Clash Verge - ClashX - Shadowrocket - NekoRay - Surge - Quantumult X -
-
-
- - -
-
-
- ${t.twoProxyTitle} - ${twoProxyEnabled ? 'ENV' : '可选'} -
- ${!twoProxyEnabled && !hasEnvUUID ? ` -
- - -
- ` : ` -
- ${twoProxyEnabled ? '' : ''} - ${twoProxyEnabled ? t.twoProxyEnabled : t.twoProxyDisabled} -
- `} -
- - ${twoProxyEnabled ? ` - -
-
${t.twoProxyDesc}
-
-
${t.twoProxyHost}: ${twoProxyHost}
-
${t.twoProxyPort}: ${twoProxyPort}
-
${t.twoProxyAuth}: ${twoProxyUser ? twoProxyUser.substring(0, 8) + '***' : 'None'}
-
-
- - ` : ` - - ${!hasEnvUUID ? ` -
-
- 双层代理 - 未配置 -
-
- 💡 国内无法直连海外代理时使用,格式:host:port 或 host:port:user:pass -
-
- ` : ` -
-
- 💡 -
-
${t.twoProxyEnvHint}
-
${t.twoProxyHowTo}
-
-
-
-
Dashboard → Workers → Settings → Variables
-
TWO_PROXY = host:port:user:pass
-
-
- `} - `} -
- - -
-
${t.nodeLocation}
${colo}
-
${t.country}
${countryName}
-
${t.city}
${cityName}
-
${t.continent}
${continentName}
-
${t.status}
${t.online}
-
${t.version}
${VERSION}
-
- - -
-
-
- ${t.proxyIpTitle} -
-
- 当前: 默认 -
-
-
${t.proxyIpDesc}
- -
-
-
🇳🇱 ${t.proxyIpDefault}
-
${colo.toLowerCase()}.proxyip.cmliussss.net
-
-
-
-
🇭🇰 ${t.proxyIpHK}
-
proxyip.cfspider.com
-
-
-
-
⚙️ ${t.proxyIpCustom}
-
未配置
-
-
-
- - -
- - -
-
-
${t.nodeInfoTitle}
-
${t.nodeLocation}${coloName}
-
${t.country}${countryName}
-
${t.city}${cityName}
-
${t.asn}AS${asn}
-
${t.timezone}${timezone}
-
-
-
${t.visitorInfoTitle}
-
${t.visitorIP}${visitorIP}
-
${t.country}${countryName}
-
${t.asn}AS${asn}
-
${t.coordinates}${latitude}, ${longitude}
-
-
- - -
-
// Python 基础用法 - pip install cfspider
-
import cfspider
-
-# 基础使用
-response = cfspider.get(
-    "https://httpbin.org/ip",
-    cf_proxies="https://${vlessHost}",
-    uuid="${hasEnvUUID ? userID : '<您的UUID>'}"
-)
-print(response.json())
-
-# 固定 IP 模式
-response = cfspider.get(
-    "https://httpbin.org/ip",
-    cf_proxies="https://${vlessHost}",
-    uuid="${hasEnvUUID ? userID : '<您的UUID>'}",
-    static_ip=True
-)
-
- - ${twoProxyEnabled || !hasEnvUUID ? ` - -
-
// Python 双层代理用法 - 国内无法直连海外代理时使用
-
import cfspider
-
-# 双层代理:本地 → Workers → 第二层代理 → 目标
-response = cfspider.get(
-    "https://httpbin.org/ip",
-    cf_proxies="https://${vlessHost}",
-    uuid="${hasEnvUUID ? userID : '<您的UUID>'}",
-    two_proxy="${twoProxyEnabled ? twoProxy : ''}"
-)
-print(response.json())
-
- ` : ''} - - -
-
${t.apiTitle}
-
-
GET/api/fetch?url=https://example.com
-
GET/api/json?url=https://httpbin.org/ip
-
GET/api/config
-
GET/api/pool
-
GET/api/status
-
-
- - -
- - - - - - - - - -`; -} diff --git a/破皮版workers.js b/破皮版workers.js index ad973af..989c83c 100644 --- a/破皮版workers.js +++ b/破皮版workers.js @@ -1 +1 @@ -const _0x10737d=_0x1deb;(function(_0x10762a,_0x2eb28d){const _0xa03e3d=_0x1deb,_0x3e0860=_0x10762a();while(!![]){try{const _0x45ee4f=parseInt(_0xa03e3d(0x3bc))/0x1+parseInt(_0xa03e3d(0x2cd))/0x2*(parseInt(_0xa03e3d(0x15e))/0x3)+-parseInt(_0xa03e3d(0x3e1))/0x4+parseInt(_0xa03e3d(0x4af))/0x5+parseInt(_0xa03e3d(0x4b1))/0x6*(-parseInt(_0xa03e3d(0x21e))/0x7)+parseInt(_0xa03e3d(0x22d))/0x8+-parseInt(_0xa03e3d(0x341))/0x9;if(_0x45ee4f===_0x2eb28d)break;else _0x3e0860['push'](_0x3e0860['shift']());}catch(_0x1add6b){_0x3e0860['push'](_0x3e0860['shift']());}}}(_0x1295,0x57836));function _0x1295(){const _0x1d8fe0=['no-store','ranking','缺少代理参数','type','pswd','messages','LATENCY','linear-gradient(135deg,\x20rgba(63,185,80,0.15)\x200%,\x20rgba(88,166,255,0.15)\x20100%)',',\x20错误:\x20','&insecure=1&allowInsecure=1','ECH','AccountID','PROXYIP','club','mozilla','origin','magnet','VLESS\x20Proxy\x20Configuration','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','下载速度','当前节点','IP\x20地址','string','Python\x20Example','visitorInfoTitle','输入\x20ProxyIP\x20地址','出口\x20IP','repeat','Singbox热补丁执行失败:','\x20UTC\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Worker\x20threw\x20exception\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20What\x20happened?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20

You\x27ve\x20requested\x20a\x20page\x20on\x20a\x20website\x20(','events','server','随机路径','music','GO2SOCKS5','/100000\x20','x-cfspider-header-','\x20-\x20\x27\x20+\x20data.Answer[0].data\x20+\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20true;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resultEl.innerHTML\x20=\x20\x27⚠\x20未解析到\x20IP\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resultEl.innerHTML\x20=\x20\x27⚠\x20检测超时\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20async\x20function\x20testAllProxyIps()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[type,\x20addr]\x20of\x20Object.entries(PROXYIP_OPTIONS))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20badge\x20=\x20document.querySelector(\x27.proxyip-status-badge[data-for=\x22\x27\x20+\x20type\x20+\x20\x27\x22]\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(badge)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20badge.innerHTML\x20=\x20\x27检测中...\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20testUrl\x20=\x20\x27https://1.1.1.1/dns-query?name=\x27\x20+\x20encodeURIComponent(addr.split(\x27:\x27)[0])\x20+\x20\x27&type=A\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20response\x20=\x20await\x20fetch(testUrl,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headers:\x20{\x20\x27Accept\x27:\x20\x27application/dns-json\x27\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20signal:\x20AbortSignal.timeout(5000)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20response.json();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data.Answer\x20&&\x20data.Answer.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20badge.innerHTML\x20=\x20\x27✓\x20','servers','statusText','https://api.telegram.org/bot','🤖\x20UA:','获取使用量错误:','api/config','vlessPort','3,1,tlshello','Saved','gzip,\x20deflate,\x20br','reduce','action','file','readyState','sni=','outbounds','enabled','vod','[反代解析]\x20随机种子:\x20','splice','proxyIpDesc','geoip-','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20您的\x20UUID\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20查看\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20删除\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UUID\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20点击查看生成的\x20UUID\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VLESS\x20链接\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20请先查看\x20UUID\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20💡\x20UUID\x20仅在弹窗中显示一次,请务必复制保存。删除后可重新生成。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Connection\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','stringify','tg.json','\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20showUuidModal()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27uuidShowInModal\x27).textContent\x20=\x20config.uuid;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27vlessShowInModal\x27).textContent\x20=\x20getVlessLink();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27uuidModal\x27).classList.add(\x27show\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20copyUuid()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20navigator.clipboard.writeText(config.uuid);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20alert(\x27UUID\x20已复制到剪贴板\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20copyVlessFromModal()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20navigator.clipboard.writeText(getVlessLink());\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20alert(\x27VLESS\x20链接已复制到剪贴板\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20closeUuidModal()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20config.uuidViewed\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20saveConfig(config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27uuidModal\x27).classList.remove(\x27show\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateDisplay();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20deleteUuid()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!confirm(\x27确定删除当前\x20UUID?将生成一个新的\x20UUID。\x27))\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20config.uuid\x20=\x20crypto.randomUUID();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20config.uuidViewed\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20saveConfig(config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateDisplay();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20alert(\x27已生成新的\x20UUID,请点击查看并保存\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20双层代理操作\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20showProxyModal()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27proxyInput\x27).value\x20=\x20config.twoProxy;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27proxyModal\x27).classList.add(\x27show\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20closeProxyModal()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27proxyModal\x27).classList.remove(\x27show\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20saveProxy()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20document.getElementById(\x27proxyInput\x27).value.trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20config.twoProxy\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20saveConfig(config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20closeProxyModal();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateDisplay();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20deleteProxy()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!confirm(\x27确定删除双层代理配置?\x27))\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20config.twoProxy\x20=\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20saveConfig(config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateDisplay();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20ProxyIP\x20选择功能\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20PROXYIP_OPTIONS\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27default\x27:\x20\x27','shows','&surge','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','proxyip','Asia/Shanghai','/graphql','intro','redirect.php','节点代码','Select\x20exit\x20node,\x20affects\x20speed\x20and\x20stability','SUBEMOJI','ads','','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GET/api/fetch?url=https://example.com\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GET/api/json?url=https://httpbin.org/ip\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GET/api/config\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GET/api/pool\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GET/api/status\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GitHub\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20PyPI\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Website\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20

CFSPIDER\x20v','Using\x20public\x20UUID.\x20Set\x20private\x20UUID\x20via\x20Cloudflare\x20Dashboard\x20for\x20better\x20security','无效的\x20SOCKS\x20地址格式:IPv6\x20地址必须用方括号括起来,如\x20[2001:db8::1]','无法连接到代理服务器','inet4_address','city','X-CFspider-TwoProxy','HEAD','vip',':443?security=tls&type=','ask','doujin','go.html','\x20|\x20反代类型:\x20','📌\x20类型:#','https://doh.cmliussss.net/CMLiussss','pay','searchParams','无效的代理响应','security','?security=tls&type=','pictures','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Happ','-----BEGIN\x20ECH\x20CONFIGS-----\x0a','writable','\x22\x20style=\x22font-size:\x200.65rem;\x22>','/proxyip=','Failed\x20to\x20decode\x20response:','mixed','vless://','287441OaGmuN','twoProxyTitle','跳过证书验证','articles','proxy','null','东京成田','检测中...','hostname','REGION','getRandomValues','stock','NEW_IP','重定向中...','movie','utf-8','cfspider-public-00000000-0000','application/dns-json','Proxy\x20Port','toUpperCase','cmcc','协议类型','优选订阅生成','&encryption=none#CFspider-TwoProxy-','TLS分片','has','CF移动优选','transport','PATH','安全协议','SUB','retrieve','value','headers','message','保存配置失败:','player','2801436GxtRSK','quanx','#!MANAGED-CONFIG\x20','tunnel)','token','sub','://','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','novel','group','ms\x20','teacher','pipeTo','singbox','target','\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.classList.add(\x27copy-success\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.textContent\x20=\x20\x27','Coordinates','forums','meta','/noKV','trade','done','random','auth=;\x20Path=/;\x20Max-Age=0;\x20HttpOnly','\x0a\x20\x20\x20\x20\x20\x20•\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20Your\x20IP:\x0a\x20\x20\x20\x20\x20\x20\x20\x20Click\x20to\x20reveal\x0a\x20\x20\x20\x20\x20\x20\x20\x20','season','readme','Status','https://raw.githubusercontent.com/cmliu/ACL4SSR/refs/heads/main/Clash/config/ACL4SSR_Online_Mini_MultiMode_CF.ini','port','length','replaceAll','\x20\x20enable:\x20true','pages','password','IP地址','SUBAPI','选择出口节点,影响连接速度和稳定性','streams','启用0RTT','\x22,\x0a\x20\x20\x20\x20static_ip=True\x0a)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','Cloudflare\x20VLESS\x20代理网络','自定义IP已保存','two_proxy','host','friend','padStart','users','entries','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','inet4_route_address','CLOSING','version','getSeconds','mall','START_TIME','🔍\x20路径:','clientTcpRtt','读取tg.json出错:\x20','Unknown','SUBUpdateTime','\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20ENV_UUID\x20=\x20','TXT','body','日志记录失败:\x20','UNKNOWN','...\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','site','continent','function','rule_set','HOST','cfspider-public','accounts','🔗\x20域名:','catch','CONNECT\x20','Shadowrocket','url','channel','&sub=','proxyIpCustom','POST','byteLength','[反代解析]\x20解析完成\x20总数:\x20','Test','edge','如需启用,请在\x20Cloudflare\x20Dashboard\x20设置环境变量:','vless_path',')\x20that\x20is\x20on\x20the\x20Cloudflare\x20network.\x20An\x20unknown\x20error\x20occurred\x20while\x20rendering\x20the\x20page.

\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20What\x20can\x20I\x20do?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20

If\x20you\x20are\x20the\x20owner\x20of\x20this\x20website:refer\x20to\x20Workers\x20-\x20Errors\x20and\x20Exceptions\x20and\x20check\x20Workers\x20Logs\x20for\x20','text','proxyIpTesting','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20未配置\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x0a','.proxyip.cmliussss.net','digest','*tapecontent.net','enqueue','toFixed','\x0a','经纬度','UUID','UDP\x20is\x20not\x20supported','正在加载...','active','Error\x20sending\x20message:','order','inet6_route_address','series','friends','watch','gif','decode','西雅图','lib','(可能无法使用)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20页面加载时初始化\x20ProxyIP\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.addEventListener(\x27DOMContentLoaded\x27,\x20initProxyIp);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20复制功能(环境变量模式)\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20copyVlessLink(el)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20link\x20=\x20document.getElementById(\x27vlessLink\x27)?.innerText;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!link)\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20hint\x20=\x20document.getElementById(\x27copyHint\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20navigator.clipboard.writeText(link).then(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.textContent\x20=\x20\x27','SUBCONFIG','\x20edge',',\x20Workers:\x20','104.24.','vlessHost','1.8.6','Cache-Control','subconverter-version',';\x20border-radius:\x2016px;\x20padding:\x2024px;\x20margin-bottom:\x2032px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','errors','lessons','invalid\x20data','TIME','Your\x20IP','VLESS\x20based\x20on\x20edgetunnel\x20project','\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resultEl.innerHTML\x20+=\x20\x27\x20-\x20','ADD.txt','ONLINE','proxyIpTest','var(--text-secondary)','cloudflare-ech.com+','charAt','episode','admin/getADDAPI','share','BotToken','toLowerCase','订阅转换配置','VLESS\x20代理配置','getWriter','统计结果\x20-\x20Pages:\x20','已启用','Default\x20(Netherlands)','play','City','VLESS\x20协议','#CF优选\x20','Admin_Login','cfspider.get(url,\x20cf_proxies=...,\x20uuid=...,\x20two_proxy=...)','HOSTS','HTTPS\x20+\x20two_proxy\x20不支持通过\x20/proxy\x20API。请使用\x20Python\x20cfspider.get()\x20配合\x20two_proxy\x20参数。','To\x20enable,\x20set\x20environment\x20variable\x20in\x20Cloudflare\x20Dashboard:','signal','\x0a\x0a\x0a\x0a\x20\x20\x0a\x0aWorker\x20threw\x20exception\x20|\x20','订阅转换后端异常:','account','channels','test','Hong\x20Kong','Night\x20City','contact','TYPE','dns','class','[双层代理]\x20隧道建立成功:\x20','invalid\x20header\x20format','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22clients-section\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22clients-title\x22>','<b>#','REJECT','tool','未找到账户数据','ProxyIP\x20节点选择','result','2895840yyhmfe','star','42PDGefG','getFullYear','groups','news','playlist','application/x-yaml;\x20charset=utf-8','encode','uuid:','00000000-0000-4000-8000-000000000000','password:','isArray','&url=','user','put','</span><span\x20class=\x22config-value\x22>443</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22config-item\x22><span\x20class=\x22config-label\x22>','https:','您的\x20IP','sec-websocket-protocol','🏢\x20<b>ASN:</b>','tags','URL','172.64.','article','replace','add','本地IP库','Proxy-Authorization:\x20Basic\x20','edu','txt','&encryption=none#CFspider-','documents','Access-Control-Allow-Origin','trim','set','soft','CF-Workers-SUB','drama','invalid\x20password','Init_Config','closed','X-Cluster-Client-IP','admin/tg.json','.proxyip.cmliussss.net</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22proxyip-status-badge\x22\x20data-for=\x22default\x22\x20style=\x22margin-top:\x208px;\x20font-size:\x200.7rem;\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22proxyip-option\x22\x20data-value=\x22hk\x22\x20onclick=\x22selectProxyIp(\x27hk\x27)\x22\x20style=\x22background:\x20var(--bg-tertiary);\x20border:\x202px\x20solid\x20var(--border-color);\x20border-radius:\x208px;\x20padding:\x2016px;\x20cursor:\x20pointer;\x20transition:\x20all\x200.2s;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x200.9rem;\x20color:\x20var(--text-primary);\x20margin-bottom:\x204px;\x22>🇭🇰\x20','不支持的POST请求路径','stream','Answer','dload','ProxyIP\x20Node\x20Selection','\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Stats\x20Grid\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stats-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-card\x22><div\x20class=\x22stat-label\x22>',':</span>\x20<span\x20style=\x22color:\x20var(--text-primary);\x22>',';\x22>','twoProxyEnvHint','newIp','\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.style.background\x20=\x20\x27var(--accent-green)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.style.color\x20=\x20\x27#fff\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.textContent\x20=\x20\x27','workers','\x20HTTP/1.1\x0d\x0aHost:\x20','%3D','streaming','log.json','保存配置失败:\x20','nodeInfoTitle','APIToken','[反代连接]\x20代理到:\x20','store','readable','zip','lesson','viewer','Port','data','澳大利亚','http:','http','status','EDGE','route','opened','twoProxyHost','match','course','comics','floor','remote','sing-box','discuss','Speedtest\x20site\x20is\x20blocked','DIRECT','Fingerprint','%</b>\x0a','ChatID','&encryption=none','download','<span\x20class=\x22status-dot\x22></span>','source','categories','redirect','env','games','DOH','📅\x20<b>时间:</b>','arrayBuffer','.tp','jan','getHours','点击复制到剪贴板','cf.json','sort','config.json','api/pool','配置重置失败,失败原因:','toLocaleString','Powered\x20by\x20Cloudflare\x20Workers','\x0a\x09<!DOCTYPE\x20html>\x0a\x09<html>\x0a\x09<head>\x0a\x09<title>Welcome\x20to\x20nginx!\x0a\x09\x0a\x0a\x0a\x09

Welcome\x20to\x20nginx!

\x0a\x09

If\x20you\x20see\x20this\x20page,\x20the\x20nginx\x20web\x20server\x20is\x20successfully\x20installed\x20and\x0a\x09working.\x20Further\x20configuration\x20is\x20required.

\x0a\x09\x0a\x09

For\x20online\x20documentation\x20and\x20support\x20please\x20refer\x20to\x0a\x09nginx.org.
\x0a\x09Commercial\x20support\x20is\x20available\x20at\x0a\x09nginx.com.

\x0a\x09\x0a\x09

Thank\x20you\x20for\x20using\x20nginx.

\x0a\x09\x0a\x09\x0a\x09','\x20-\x20@cmliu/edgetunnel\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20

\x0a\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20您的\x20UUID\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20请立即复制保存,关闭后将无法再次查看明文\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20复制\x20UUID\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VLESS\x20导入链接\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20复制\x20VLESS\x20链接\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20⚠️\x20以上信息仅显示一次,关闭后无法再次查看明文\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20我已保存,关闭\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20配置双层代理\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20用于国内无法直连海外代理\x20IP\x20时使用\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20示例:\x20us.cliproxy.io:3010:username:password\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20取消\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20确认\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x0a\x0a\x0a\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20Please\x20enable\x20cookies.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Error\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x201101\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Ray\x20ID:\x20','未配置','https://speed.cloudflare.com/locations','加载时间','twoProxyAuth','act','courses','Expires','seller','json','\x22:\x0a\x20\x20\x20\x20\x20\x20-\x20tls://8.8.8.8\x0a\x20\x20\x20\x20\x20\x20-\x20https://doh.cmliussss.com/CMLiussss\x0a\x20\x20\x20\x20\x20\x20-\x20','startsWith','geosite-','requests','static','.proxyip.cmliussss.net\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27hk\x27:\x20\x27proxyip.cfspider.com\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20initProxyIp()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20saved\x20=\x20localStorage.getItem(\x27cfspider_proxyip\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20savedType\x20=\x20localStorage.getItem(\x27cfspider_proxyip_type\x27)\x20||\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20更新选中状态\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.querySelectorAll(\x27.proxyip-option\x27).forEach(el\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20el.style.borderColor\x20=\x20\x27var(--border-color)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20selected\x20=\x20document.querySelector(\x27.proxyip-option[data-value=\x22\x27\x20+\x20savedType\x20+\x20\x27\x22]\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(selected)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selected.style.borderColor\x20=\x20\x27var(--accent-cyan)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20显示当前选择\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20currentDisplay\x20=\x20document.getElementById(\x27currentProxyIp\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(currentDisplay)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(savedType\x20===\x20\x27default\x27)\x20currentDisplay.textContent\x20=\x20\x27荷兰(默认)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if\x20(savedType\x20===\x20\x27hk\x27)\x20currentDisplay.textContent\x20=\x20\x27香港\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if\x20(savedType\x20===\x20\x27custom\x27\x20&&\x20saved)\x20currentDisplay.textContent\x20=\x20saved;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20currentDisplay.textContent\x20=\x20\x27默认\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20自定义显示\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(savedType\x20===\x20\x27custom\x27\x20&&\x20saved)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27customProxyIpDisplay\x27).textContent\x20=\x20saved;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27customProxyIpValue\x27).value\x20=\x20saved;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20自动检测所有节点\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20testAllProxyIps();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20selectProxyIp(type)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20更新选中状态\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.querySelectorAll(\x27.proxyip-option\x27).forEach(el\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20el.style.borderColor\x20=\x20\x27var(--border-color)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20selected\x20=\x20document.querySelector(\x27.proxyip-option[data-value=\x22\x27\x20+\x20type\x20+\x20\x27\x22]\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(selected)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selected.style.borderColor\x20=\x20\x27var(--accent-cyan)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20显示/隐藏自定义输入框\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20customInput\x20=\x20document.getElementById(\x27customProxyIpInput\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(type\x20===\x20\x27custom\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20customInput.style.display\x20=\x20\x27block\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20customInput.style.display\x20=\x20\x27none\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20保存选择\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20localStorage.setItem(\x27cfspider_proxyip_type\x27,\x20type);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20localStorage.setItem(\x27cfspider_proxyip\x27,\x20PROXYIP_OPTIONS[type]\x20||\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20currentDisplay\x20=\x20document.getElementById(\x27currentProxyIp\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(type\x20===\x20\x27default\x27)\x20currentDisplay.textContent\x20=\x20\x27荷兰(默认)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if\x20(type\x20===\x20\x27hk\x27)\x20currentDisplay.textContent\x20=\x20\x27香港\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20async\x20function\x20testProxyIp(addr)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20address\x20=\x20addr\x20||\x20document.getElementById(\x27customProxyIpValue\x27).value.trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!address)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27proxyIpTestResult\x27).innerHTML\x20=\x20\x27请输入地址\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20resultEl\x20=\x20document.getElementById(\x27proxyIpTestResult\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resultEl.innerHTML\x20=\x20\x27','www','https://1.1.1.1/dns-query?name=','\x0d\x0a\x0d\x0a','get','credits','https','findIndex','&emoji=','charCodeAt','program','vlessUUID','temp','服务器地址','method','isFinite','reject','fromCharCode','admin/cf.json',';\x20total=','res','jump.php','Set-Cookie','CF联通优选','proxyip.cfspider.com','socks5','Invalid\x20address:\x20','1101','Second\x20Proxy','success','loon','page','ech-opts:','HTTP/2\x20协议','blog','tunnel(https://github.com/cmliu/edge','1.8.7','discount','优选订阅生成器异常:','&type=','inet6_route_exclude_address','send','images','inbounds','v2rayN/edge','websocket','twoProxyDisabled','block','IP\x20池状态','asn','code','upload','twoProxyLink','-\x20{','mode:\x20rule','proxyIpPlaceholder','TLS\x20指纹模拟','Invalid\x20uuid','zh-CN','OPEN','pic','classify','Not\x20Configured','document','Invalid\x20address\x20type:\x20','getMonth','CF官方优选','visitorIP','验证优选API失败,失败原因:','Usage','admin/getCloudflareUsage','image','stars','admin/ADD.txt','传输协议','local','Get_SUB','upload=','geoip','Connection\x20failed:\x20HTTP\x20','.txt','http://','work','默认(荷兰)','error','TWO_PROXY','from','芝加哥','https://raw.githubusercontent.com/cmliu/cmliu/main/CF-CIDR.txt','text/html;\x20charset=UTF-8','配置已保存',':\x20','SUBNAME','gbk','twoProxyPort','show','lang','大阪关西','admin/check','base64','services','forEach','application/json','project','collect','substring','find','archive','student','book','map','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','photos','split','sale','globalproxy','/sub?target=','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','then','Origin','保存自定义IP失败:\x20','comic','','max','配置不完整','://00000000-0000-4000-8000-000000000000@','home','application/json;\x20charset=utf-8','img','Custom','/admin','443','docs',';\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20ENV_TWO_PROXY\x20=\x20','films','Enter\x20ProxyIP\x20address','荷兰节点','addEventListener','119077EWYZKD','API\x20ENDPOINTS','Fly-Client-IP','One-Click\x20Import\x20(WARP\x20Exit)','','GET','tunnel','zh-cn','toString','jumping','

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VLESS\x20PROXY\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','picture','products','surge&ver=4','two_proxy=','proxyIpOnline','section','https://SUBAPI.cmliussss.net','api/proxyip','sum','nodeLocation','[反代连接]\x20成功连接到:\x20','?two_proxy=','*cloudatacdn.com','MB/s','admin/config.json','protocol','auth=','inet4_route_exclude_address','getTime','KEY','Save_Config','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Dashboard\x20→\x20Workers\x20→\x20Settings\x20→\x20Variables\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TWO_PROXY\x20=\x20host:port:user:pass\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','洛杉矶','Browser\x20Automation','hot','address\x20is\x20empty,\x20addressType\x20is\x20','.srs','getDate','shop','Online','proxyip.','&parse_mode=HTML&text=','redirect.html','首尔仁川','proxy?','uuid','some','东京羽田','https://gh.090227.xyz/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-','proxyIpDefault','&fragment=','feedback','X-CF-Colo','mobile','cart','subconverter','Workers\x20/proxy\x20API\x20仅支持\x20HTTP\x20双层代理','[反代解析]\x20读取缓存\x20总数:\x20','latitude','copySuccess','indexOf','已复制!','/login','2px\x20solid\x20var(--accent-green)','ASN\x20Number','\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20v2rayN\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20v2rayNG\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Clash\x20Verge\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ClashX\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Shadowrocket\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20NekoRay\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Surge\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Quantumult\x20X\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20,\x0a\x20\x20\x20\x20uuid=\x22','\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.classList.remove(\x27copy-success\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x202000);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20copyTwoProxyLink(el)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20linkEl\x20=\x20document.getElementById(\x27twoProxyLinkText\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!linkEl)\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20link\x20=\x20linkEl.innerText;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20hint\x20=\x20document.getElementById(\x27copyHint2\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20navigator.clipboard.writeText(link).then(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.textContent\x20=\x20\x27','books','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20双层代理\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20未配置\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20💡\x20国内无法直连海外代理时使用,格式:host:port\x20或\x20host:port:user:pass\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','代理连接失败:\x20HTTP\x20','Two-Proxy\x20Link','race','ANYCAST','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','admin','album','help','subtle','法兰克福','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20CFSPIDERv','&sni=example.com&path=','X-Real-IP','TOKEN','[反代连接]\x20连接失败:\x20','vless','自定义','vlessCopy',':\x5cs*([^\x5cn]+)',',\x20总计:\x20','post','files','Current\x20Node','*cdn-centaurus.com','https://gh.090227.xyz/https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-','[双层代理]\x20通过\x20','parse','tls','*loadshare.org','ws-path=','china','国家/地区','S5\x20authentication\x20failed',':\x20ON\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x20(索引:\x20','albums','LINK','fill','1,40-60,30-50,tlshello','Host','no-cache','items','study','surge','colo','S5\x20unsupported\x20auth\x20method:\x20','52EYvZcP','var(--accent-yellow)','service','nginx','Authentication','gb2312',',\x20skip-cert-verify=','双层代理链接','footer','downloads','

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','chrome','WebSocket\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','videos','不可用','init','/sub?token=','anime','shift','Missing\x20url\x20parameter','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
','X-Appengine-Remote-Addr','video','close','[HTTP代理]\x20代理到:\x20','film','application/json;charset=utf-8','True-Client-IP','.

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20Cloudflare\x20Ray\x20ID:\x20\x20','Email','live','CF电信优选','all','pagesFunctionsInvocationsAdaptiveGroups','exitIp','detail','连接超时',';\x20expire=','\x20|\x20反代IP:\x20','','acg','special','clips','/accounts','product','新加坡','请通过\x20Cloudflare\x20Dashboard\x20或\x20wrangler.toml\x20设置\x20NEW_IP\x20环境变量','Testing...','访问信息','UsageAPI','Connection:\x20close\x0d\x0a\x0d\x0a','app','代理端口','values','zh-tw','trojan','total','S5\x20requires\x20authentication','out','buy','Traffic:\x20Local\x20→\x20Workers\x20(VLESS)\x20→\x20Second\x20Proxy\x20→\x20Target','write','getUint16','\x0a目标站点:\x20','认证信息','指定端口','buffer','example.com','Optional:\x20Use\x20when\x20you\x20need\x20specific\x20exit\x20IP\x20region\x20or\x20cannot\x20connect\x20proxy\x20directly','.william','waitUntil','auto','join','104.16.0.0/13','&scv=','X-CFspider-Version','socket','tools','https://','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','releaseLock','admin/','mihomo','check.socks5.090227.xyz','proxyIpSaved','Click\x20to\x20copy','Continent','ws.readyState\x20is\x20not\x20open','config','&path=','selector','Country','\x20•\x20','勿动此默认密钥,有需求请自行通过添加变量KEY进行修改','Pragma','new','lives','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Python\x20双层代理用法\x20-\x20国内无法直连海外代理时使用\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
import\x20cfspider\x0a\x0a#\x20双层代理:本地\x20→\x20Workers\x20→\x20第二层代理\x20→\x20目标\x0aresponse\x20=\x20cfspider.get(\x0a\x20\x20\x20\x20\x22https://httpbin.org/ip\x22,\x0a\x20\x20\x20\x20cf_proxies=\x22https://','tag','favorite','cfspider-default-key','inet6_address','collection','旧金山','topics','allSettled','activity','\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20badge.innerHTML\x20=\x20\x27⚠\x20未知\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20badge.innerHTML\x20=\x20\x27-\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20async\x20function\x20saveCustomProxyIp()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20addr\x20=\x20document.getElementById(\x27customProxyIpValue\x27).value.trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!addr)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27proxyIpTestResult\x27).innerHTML\x20=\x20\x27请输入地址\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20先测试\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20isOnline\x20=\x20await\x20testProxyIp(addr);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20保存\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20localStorage.setItem(\x27cfspider_proxyip_type\x27,\x20\x27custom\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20localStorage.setItem(\x27cfspider_proxyip\x27,\x20addr);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27customProxyIpDisplay\x27).textContent\x20=\x20addr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(\x27currentProxyIp\x27).textContent\x20=\x20addr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20resultEl\x20=\x20document.getElementById(\x27proxyIpTestResult\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isOnline)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resultEl.innerHTML\x20+=\x20\x27\x20-\x20','未知IP','IP\x20ADDRESS','***','页面配置模式','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x22\x0a)\x0aprint(response.json())\x0a\x0a#\x20固定\x20IP\x20模式\x0aresponse\x20=\x20cfspider.get(\x0a\x20\x20\x20\x20\x22https://httpbin.org/ip\x22,\x0a\x20\x20\x20\x20cf_proxies=\x22https://','\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.style.background\x20=\x20\x27var(--bg-tertiary)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hint.style.color\x20=\x20\x27var(--text-secondary)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x202000);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20初始化\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateDisplay();\x0a\x20\x20\x20\x20\x0a\x0a','text/plain;\x20charset=utf-8','2402001gbGWYH','v2rayClients','TLS\x20Fingerprint','proxyIpTitle','Invalid\x20HTTP\x20response','UFJPWFlJUC50cDEuMDkwMjI3Lnh5eg==','&ech=','none\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ModePrivate\x20(ENV)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','text/plain;\x20charset=UTF-8','MD5','api/status','content-type','novels','None','CF-Connecting-IP'];_0x1295=function(){return _0x1d8fe0;};return _0x1295();}import{connect}from'cloudflare:sockets';let config_JSON,反代IP='',启用SOCKS5反代=null,启用SOCKS5全局反代=![],我的SOCKS5账号='',parsedSocks5Address={},缓存反代IP,缓存反代解析数组,缓存反代数组索引=0x0,启用反代兜底=!![],ECH_DOH=_0x10737d(0x3ac),SOCKS5白名单=[_0x10737d(0x443),_0x10737d(0x247),_0x10737d(0x2bb),_0x10737d(0x2b6),_0x10737d(0x461)];const Pages静态页面='https://edt-pages.github.io';export default{async 'fetch'(_0x5aa20f,_0x3b797a,_0x1c55d0){const _0x7946bb=_0x10737d,_0x2db9e1=new URL(_0x5aa20f[_0x7946bb(0x42f)]),_0x2a3ce2=_0x5aa20f['headers'][_0x7946bb(0x198)](_0x7946bb(0x16b))||_0x7946bb(0x3c1),_0x50f057=_0x5aa20f[_0x7946bb(0x3dd)][_0x7946bb(0x198)]('Upgrade'),_0x3179de=_0x7946bb(0x3cc),_0x45e56f=_0x3b797a['ADMIN']||_0x3b797a['admin']||_0x3b797a['PASSWORD']||_0x3b797a[_0x7946bb(0x403)]||_0x3b797a[_0x7946bb(0x354)]||_0x3b797a[_0x7946bb(0x2ac)]||_0x3b797a[_0x7946bb(0x24e)]||_0x3b797a['UUID']||_0x3b797a[_0x7946bb(0x25e)]||_0x7946bb(0x429),_0x58c174=_0x3b797a['KEY']||_0x7946bb(0x331),_0x25d273=await MD5MD5(_0x45e56f+_0x58c174),_0x56f376=/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,_0x18d2b1=_0x3b797a[_0x7946bb(0x448)]||_0x3b797a[_0x7946bb(0x25e)],_0x440d0c=_0x18d2b1&&_0x56f376[_0x7946bb(0x49f)](_0x18d2b1)?_0x18d2b1[_0x7946bb(0x48a)]():[_0x25d273[_0x7946bb(0x471)](0x0,0x8),_0x25d273['slice'](0x8,0xc),'4'+_0x25d273['slice'](0xd,0x10),'8'+_0x25d273[_0x7946bb(0x471)](0x11,0x14),_0x25d273[_0x7946bb(0x471)](0x14)][_0x7946bb(0x315)]('-'),_0x4afd1f=_0x3b797a[_0x7946bb(0x428)]?(await 整理成数组(_0x3b797a['HOST']))[_0x7946bb(0x202)](_0x109de7=>_0x109de7[_0x7946bb(0x48a)]()['replace'](/^https?:\/\//,'')[_0x7946bb(0x205)]('/')[0x0][_0x7946bb(0x205)](':')[0x0]):[_0x2db9e1[_0x7946bb(0x3c4)]],_0x51c8c6=_0x4afd1f[0x0];if(_0x3b797a[_0x7946bb(0x35c)]){const _0x5dfb0f=await 整理成数组(_0x3b797a[_0x7946bb(0x35c)]);反代IP=_0x5dfb0f[Math['floor'](Math[_0x7946bb(0x3f7)]()*_0x5dfb0f[_0x7946bb(0x3ff)])],启用反代兜底=![];}else 反代IP=(_0x5aa20f['cf'][_0x7946bb(0x2cb)]+'.PrOxYIp.CmLiUsSsS.nEt')[_0x7946bb(0x48a)]();const _0x31d9ff=_0x5aa20f[_0x7946bb(0x3dd)]['get'](_0x7946bb(0x2ab))||_0x5aa20f[_0x7946bb(0x3dd)]['get'](_0x7946bb(0x34f))||_0x5aa20f[_0x7946bb(0x3dd)][_0x7946bb(0x198)](_0x7946bb(0x27c))||_0x5aa20f[_0x7946bb(0x3dd)][_0x7946bb(0x198)](_0x7946bb(0x2e8))||_0x5aa20f[_0x7946bb(0x3dd)]['get'](_0x7946bb(0x220))||_0x5aa20f['headers'][_0x7946bb(0x198)](_0x7946bb(0x2e2))||_0x5aa20f[_0x7946bb(0x3dd)]['get'](_0x7946bb(0x27c))||_0x5aa20f[_0x7946bb(0x3dd)][_0x7946bb(0x198)]('X-Real-IP')||_0x5aa20f['headers'][_0x7946bb(0x198)](_0x7946bb(0x4d9))||_0x5aa20f['cf']?.[_0x7946bb(0x41a)]||_0x7946bb(0x339);if(_0x3b797a[_0x7946bb(0x372)])SOCKS5白名单=await 整理成数组(_0x3b797a[_0x7946bb(0x372)]);ECH_DOH=_0x3b797a['ECH_DOH']||_0x3b797a[_0x7946bb(0x513)]||ECH_DOH;if(!_0x50f057||_0x50f057!==_0x7946bb(0x1c1)){if(_0x2db9e1[_0x7946bb(0x24a)]===_0x7946bb(0x4f8))return Response[_0x7946bb(0x510)](_0x2db9e1[_0x7946bb(0x178)][_0x7946bb(0x4c8)](_0x7946bb(0x1e5)+_0x2db9e1[_0x7946bb(0x3c4)],_0x7946bb(0x31b)+_0x2db9e1['hostname']),0x12d);const _0x5b59d3=_0x2db9e1[_0x7946bb(0x15b)]['slice'](0x1)[_0x7946bb(0x48a)](),_0xca6d1c=_0x3b797a[_0x7946bb(0x3c8)]!==_0x7946bb(0x28e)&&_0x3b797a['NEW_IP']!=='0',_0x359e87=!_0x18d2b1||!_0x56f376[_0x7946bb(0x49f)](_0x18d2b1),_0x4f3253=_0x3b797a[_0x7946bb(0x1e9)]||_0x3b797a[_0x7946bb(0x40c)]||'';if(_0x5b59d3===''||_0x5b59d3==='/')return new Response(generateCFspiderPage(_0x5aa20f,_0x2db9e1,_0x31d9ff,_0x440d0c,_0xca6d1c,_0x359e87,_0x4f3253),{'headers':{'Content-Type':_0x7946bb(0x460)}});if(_0x5b59d3===_0x7946bb(0x51d))return new Response(JSON[_0x7946bb(0x38d)](generateIPPool(_0x5aa20f)),{'headers':{'Content-Type':_0x7946bb(0x1fa)}});if(_0x5b59d3===_0x7946bb(0x34b))return new Response(JSON[_0x7946bb(0x38d)]({'status':'online','version':_0x7946bb(0x1b8),'colo':_0x5aa20f['cf']?.[_0x7946bb(0x2cb)]||_0x7946bb(0x161),'uptime':Date[_0x7946bb(0x28f)]()-(globalThis[_0x7946bb(0x418)]||Date[_0x7946bb(0x28f)]())}),{'headers':{'Content-Type':_0x7946bb(0x1fa)}});if(_0x5b59d3===_0x7946bb(0x242)){const _0x221d4c=_0x5aa20f['cf']?.['colo']||_0x7946bb(0x422),_0x2a7e2f=(_0x221d4c+_0x7946bb(0x441))['toLowerCase'](),_0x4beade=_0x3b797a['PROXYIP']||'';return new Response(JSON['stringify']({'colo':_0x221d4c,'default':_0x2a7e2f,'hk':_0x7946bb(0x1ac),'env':_0x4beade||null,'current':_0x4beade||_0x2a7e2f,'options':{'default':{'name':_0x7946bb(0x21c),'address':_0x2a7e2f},'hk':{'name':'香港节点','address':_0x7946bb(0x1ac)}}}),{'headers':{'Content-Type':_0x7946bb(0x1fa),'Access-Control-Allow-Origin':'*'}});}if(_0x5b59d3==='api/uuid'||_0x5b59d3===_0x7946bb(0x37b)){const _0x5443fd=_0x3b797a[_0x7946bb(0x3c8)]!==_0x7946bb(0x28e)&&_0x3b797a[_0x7946bb(0x3c8)]!=='0',_0x1e4538=_0x3b797a[_0x7946bb(0x1e9)]||_0x3b797a[_0x7946bb(0x40c)]||'',_0x149f6a={'host':_0x2db9e1['hostname'],'new_ip':_0x5443fd,'version':_0x7946bb(0x1b8),'is_default_uuid':_0x359e87,'two_proxy_enabled':!!_0x1e4538};_0x359e87?(_0x149f6a[_0x7946bb(0x25e)]=_0x440d0c,_0x149f6a[_0x7946bb(0x439)]=_0x1e4538?'/'+_0x440d0c+_0x7946bb(0x246)+encodeURIComponent(_0x1e4538):'/'+_0x440d0c):_0x1e4538&&(_0x149f6a[_0x7946bb(0x40c)]=_0x1e4538);if(_0x1e4538){const _0x5f44da=_0x1e4538[_0x7946bb(0x205)](':');_0x149f6a['two_proxy_host']=_0x5f44da[0x0]||'',_0x149f6a['two_proxy_port']=_0x5f44da[0x1]||'';}return new Response(JSON[_0x7946bb(0x38d)](_0x149f6a),{'headers':{'Content-Type':'application/json','Access-Control-Allow-Origin':'*'}});}if(_0x5b59d3===_0x7946bb(0x3c0)||_0x5b59d3['startsWith'](_0x7946bb(0x25d))){const _0x306729=_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)]('url'),_0x5aa42b=_0x2db9e1[_0x7946bb(0x3ae)]['get'](_0x7946bb(0x1a2))||_0x7946bb(0x223),_0x488300=_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x40c));if(!_0x306729)return new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x2e0)}),{'status':0x190,'headers':{'Content-Type':_0x7946bb(0x1fa)}});try{const _0xebea21={};for(const [_0x3cf282,_0x58bb5f]of _0x5aa20f[_0x7946bb(0x3dd)]){if(_0x3cf282[_0x7946bb(0x48a)]()[_0x7946bb(0x190)](_0x7946bb(0x374))){const _0x23fdcd=_0x3cf282[_0x7946bb(0x1fd)](0x12);_0xebea21[_0x23fdcd]=_0x58bb5f;}}let _0x5a8975;const _0x3bedcf=_0x488300||_0x3b797a[_0x7946bb(0x1e9)]||_0x3b797a[_0x7946bb(0x40c)]||'';if(_0x3bedcf){const _0x274d52=_0x3bedcf[_0x7946bb(0x205)](':'),_0x51935c=_0x274d52[0x0],_0x444401=parseInt(_0x274d52[0x1])||0xc38,_0x4b3565=_0x274d52[0x2]||'',_0x571de6=_0x274d52[0x3]||'',_0x5ac3c1=new URL(_0x306729),_0x553c07=_0x5ac3c1[_0x7946bb(0x3c4)],_0x3c7d33=_0x5ac3c1['port']||(_0x5ac3c1[_0x7946bb(0x24a)]===_0x7946bb(0x4c0)?0x1bb:0x50),_0x5bbe5f=_0x5ac3c1[_0x7946bb(0x24a)]===_0x7946bb(0x4c0),{connect:_0x272569}=await import('cloudflare:sockets');if(_0x5bbe5f)return new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x498),'hint':_0x7946bb(0x496),'reason':_0x7946bb(0x269)}),{'status':0x1f5,'headers':{'Content-Type':'application/json','Access-Control-Allow-Origin':'*'}});else{const _0x3bc0ba=_0x272569({'hostname':_0x51935c,'port':_0x444401}),_0x40deaa=_0x3bc0ba[_0x7946bb(0x3b6)]['getWriter'](),_0x19d96a=_0x3bc0ba['readable'][_0x7946bb(0x230)]();let _0x312b59=_0x5aa42b+'\x20'+_0x306729+_0x7946bb(0x4e8)+_0x553c07+'\x0d\x0a';if(_0x4b3565&&_0x571de6){const _0x1fa58a=btoa(_0x4b3565+':'+_0x571de6);_0x312b59+=_0x7946bb(0x4cb)+_0x1fa58a+'\x0d\x0a';}for(const [_0x3e9952,_0x2cc83d]of Object[_0x7946bb(0x411)](_0xebea21)){_0x312b59+=_0x3e9952+':\x20'+_0x2cc83d+'\x0d\x0a';}_0x312b59+=_0x7946bb(0x2ff),await _0x40deaa[_0x7946bb(0x30a)](new TextEncoder()[_0x7946bb(0x4b7)](_0x312b59));let _0x4141ec=new Uint8Array(0x0);while(!![]){const {value:_0x30bbad,done:_0xdae289}=await _0x19d96a['read']();if(_0xdae289)break;const _0x492d3c=new Uint8Array(_0x4141ec[_0x7946bb(0x3ff)]+_0x30bbad[_0x7946bb(0x3ff)]);_0x492d3c[_0x7946bb(0x4d2)](_0x4141ec),_0x492d3c[_0x7946bb(0x4d2)](_0x30bbad,_0x4141ec[_0x7946bb(0x3ff)]),_0x4141ec=_0x492d3c;}const _0x308341=new TextDecoder()[_0x7946bb(0x453)](_0x4141ec),_0x18e712=_0x308341[_0x7946bb(0x26d)](_0x7946bb(0x197)),_0xe12625=_0x308341[_0x7946bb(0x1fd)](0x0,_0x18e712),_0x50ebb9=_0x4141ec['slice'](new TextEncoder()['encode'](_0x308341['substring'](0x0,_0x18e712+0x4))['length']),_0x335b20=_0xe12625['split']('\x0d\x0a')[0x0],_0x552bd8=parseInt(_0x335b20[_0x7946bb(0x205)]('\x20')[0x1])||0xc8,_0x38b413=new Headers();return _0xe12625[_0x7946bb(0x205)]('\x0d\x0a')[_0x7946bb(0x471)](0x1)[_0x7946bb(0x1f9)](_0x24a6cf=>{const _0x1647f0=_0x7946bb,[_0x450a55,..._0x2ca9bb]=_0x24a6cf[_0x1647f0(0x205)](':');_0x450a55&&_0x2ca9bb['length']&&_0x38b413['set'](_0x450a55[_0x1647f0(0x4d1)](),_0x2ca9bb['join'](':')['trim']());}),_0x38b413[_0x7946bb(0x4d2)](_0x7946bb(0x4d0),'*'),_0x38b413['set'](_0x7946bb(0x265),_0x5aa20f['cf']?.[_0x7946bb(0x2cb)]||_0x7946bb(0x161)),_0x38b413[_0x7946bb(0x4d2)](_0x7946bb(0x318),_0x7946bb(0x45c)),_0x38b413[_0x7946bb(0x4d2)](_0x7946bb(0x3a3),_0x7946bb(0x386)),new Response(_0x50ebb9,{'status':_0x552bd8,'headers':_0x38b413});}}else{const _0x17fdad=new Request(_0x306729,{'method':_0x5aa42b,'headers':_0xebea21,'body':_0x5aa42b!==_0x7946bb(0x223)&&_0x5aa42b!==_0x7946bb(0x3a4)?_0x5aa20f[_0x7946bb(0x420)]:null});_0x5a8975=await fetch(_0x17fdad);const _0x43e954=new Headers(_0x5a8975['headers']);return _0x43e954[_0x7946bb(0x4d2)]('Access-Control-Allow-Origin','*'),_0x43e954[_0x7946bb(0x4d2)](_0x7946bb(0x265),_0x5aa20f['cf']?.['colo']||_0x7946bb(0x161)),_0x43e954[_0x7946bb(0x4d2)](_0x7946bb(0x318),_0x7946bb(0x45c)),new Response(_0x5a8975[_0x7946bb(0x420)],{'status':_0x5a8975[_0x7946bb(0x4fa)],'headers':_0x43e954});}}catch(_0x17b87a){return new Response(JSON[_0x7946bb(0x38d)]({'error':_0x17b87a[_0x7946bb(0x3de)]}),{'status':0x1f4,'headers':{'Content-Type':_0x7946bb(0x1fa)}});}}if(_0x5b59d3==='api/config/new_ip'&&_0x5aa20f[_0x7946bb(0x1a2)]===_0x7946bb(0x433)){const _0x56c853=_0x3b797a[_0x7946bb(0x3c8)]!=='false'&&_0x3b797a[_0x7946bb(0x3c8)]!=='0';return new Response(JSON['stringify']({'new_ip':_0x56c853,'message':_0x7946bb(0x2fb)}),{'headers':{'Content-Type':_0x7946bb(0x1fa),'Access-Control-Allow-Origin':'*'}});}if(!_0x45e56f)return fetch(Pages静态页面+_0x7946bb(0x46f))[_0x7946bb(0x20a)](_0x14bcdf=>{const _0x1253ed=_0x7946bb,_0x47f1d7=new Headers(_0x14bcdf[_0x1253ed(0x3dd)]);return _0x47f1d7['set'](_0x1253ed(0x45d),'no-store,\x20no-cache,\x20must-revalidate,\x20proxy-revalidate'),_0x47f1d7[_0x1253ed(0x4d2)](_0x1253ed(0x32b),'no-cache'),_0x47f1d7[_0x1253ed(0x4d2)]('Expires','0'),new Response(_0x14bcdf[_0x1253ed(0x420)],{'status':0x194,'statusText':_0x14bcdf[_0x1253ed(0x377)],'headers':_0x47f1d7});});if(_0x3b797a['KV']&&typeof _0x3b797a['KV']['get']===_0x7946bb(0x426)){const _0x23b08f=_0x2db9e1['pathname']['slice'](0x1)[_0x7946bb(0x48a)](),_0x4d1bd3=_0x2db9e1[_0x7946bb(0x15b)]['slice'](0x1);if(_0x4d1bd3===_0x58c174&&_0x58c174!==_0x7946bb(0x32a)){const _0x33804f=new URLSearchParams(_0x2db9e1[_0x7946bb(0x236)]);return _0x33804f['set'](_0x7946bb(0x3e5),await MD5MD5(_0x51c8c6+_0x440d0c)),new Response(_0x7946bb(0x3c9),{'status':0x12e,'headers':{'Location':'/sub?'+_0x33804f[_0x7946bb(0x226)]()}});}else{if(_0x23b08f==='login'){const _0x69d987=_0x5aa20f['headers'][_0x7946bb(0x198)](_0x7946bb(0x28d))||'',_0x299014=_0x69d987[_0x7946bb(0x205)](';')[_0x7946bb(0x1fe)](_0x3bd312=>_0x3bd312[_0x7946bb(0x4d1)]()[_0x7946bb(0x190)](_0x7946bb(0x24b)))?.['split']('=')[0x1];if(_0x299014==await MD5MD5(_0x2a3ce2+_0x58c174+_0x45e56f))return new Response(_0x7946bb(0x3c9),{'status':0x12e,'headers':{'Location':_0x7946bb(0x216)}});if(_0x5aa20f[_0x7946bb(0x1a2)]===_0x7946bb(0x433)){const _0x4f65d9=await _0x5aa20f[_0x7946bb(0x43b)](),_0x318ec3=new URLSearchParams(_0x4f65d9),_0x89f283=_0x318ec3[_0x7946bb(0x198)](_0x7946bb(0x403));if(_0x89f283===_0x45e56f){const _0x44b249=new Response(JSON['stringify']({'success':!![]}),{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x2e7)}});return _0x44b249['headers'][_0x7946bb(0x4d2)](_0x7946bb(0x1aa),_0x7946bb(0x24b)+await MD5MD5(_0x2a3ce2+_0x58c174+_0x45e56f)+';\x20Path=/;\x20Max-Age=86400;\x20HttpOnly'),_0x44b249;}}return fetch(Pages静态页面+_0x7946bb(0x26f));}else{if(_0x23b08f===_0x7946bb(0x29a)||_0x23b08f[_0x7946bb(0x190)](_0x7946bb(0x31e))){const _0x2f2d01=_0x5aa20f[_0x7946bb(0x3dd)][_0x7946bb(0x198)](_0x7946bb(0x28d))||'',_0x1b3be1=_0x2f2d01[_0x7946bb(0x205)](';')['find'](_0x3172a0=>_0x3172a0[_0x7946bb(0x4d1)]()['startsWith'](_0x7946bb(0x24b)))?.[_0x7946bb(0x205)]('=')[0x1];if(!_0x1b3be1||_0x1b3be1!==await MD5MD5(_0x2a3ce2+_0x58c174+_0x45e56f))return new Response(_0x7946bb(0x3c9),{'status':0x12e,'headers':{'Location':_0x7946bb(0x26f)}});if(_0x23b08f==='admin/log.json'){const _0x4c512a=await _0x3b797a['KV']['get'](_0x7946bb(0x4eb))||'[]';return new Response(_0x4c512a,{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}else{if(_0x4d1bd3===_0x7946bb(0x1da))try{const _0x5405c9=await getCloudflareUsage(_0x2db9e1[_0x7946bb(0x3ae)]['get']('Email'),_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x160)),_0x2db9e1[_0x7946bb(0x3ae)]['get'](_0x7946bb(0x35b)),_0x2db9e1[_0x7946bb(0x3ae)]['get']('APIToken'));return new Response(JSON[_0x7946bb(0x38d)](_0x5405c9,null,0x2),{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x1fa)}});}catch(_0x58b391){const _0x8dfad5={'msg':'查询请求量失败,失败原因:'+_0x58b391[_0x7946bb(0x3de)],'error':_0x58b391['message']};return new Response(JSON[_0x7946bb(0x38d)](_0x8dfad5,null,0x2),{'status':0x1f4,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}else{if(_0x4d1bd3===_0x7946bb(0x487)){if(_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x42f))){const _0x87b28e=_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x42f));try{new URL(_0x87b28e);const _0x724a6c=await 请求优选API([_0x87b28e],_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x3fe))||_0x7946bb(0x217)),_0x3c191b=_0x724a6c[0x0][_0x7946bb(0x3ff)]>0x0?_0x724a6c[0x0]:_0x724a6c[0x1];return new Response(JSON[_0x7946bb(0x38d)]({'success':!![],'data':_0x3c191b},null,0x2),{'status':0xc8,'headers':{'Content-Type':'application/json;charset=utf-8'}});}catch(_0x444f4e){const _0x1fa126={'msg':_0x7946bb(0x1d8)+_0x444f4e[_0x7946bb(0x3de)],'error':_0x444f4e[_0x7946bb(0x3de)]};return new Response(JSON[_0x7946bb(0x38d)](_0x1fa126,null,0x2),{'status':0x1f4,'headers':{'Content-Type':'application/json;charset=utf-8'}});}}return new Response(JSON['stringify']({'success':![],'data':[]},null,0x2),{'status':0x193,'headers':{'Content-Type':'application/json;charset=utf-8'}});}else{if(_0x23b08f===_0x7946bb(0x1f6)){let _0x379691;if(_0x2db9e1[_0x7946bb(0x3ae)]['has'](_0x7946bb(0x1ad)))_0x379691=await SOCKS5可用性验证(_0x7946bb(0x1ad),_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x1ad)));else{if(_0x2db9e1[_0x7946bb(0x3ae)]['has'](_0x7946bb(0x4f9)))_0x379691=await SOCKS5可用性验证(_0x7946bb(0x4f9),_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x4f9)));else return new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x352)}),{'status':0x190,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}return new Response(JSON[_0x7946bb(0x38d)](_0x379691,null,0x2),{'status':0xc8,'headers':{'Content-Type':'application/json;charset=utf-8'}});}}}}config_JSON=await 读取config_JSON(_0x3b797a,_0x51c8c6,_0x440d0c,_0x3b797a['PATH']);if(_0x23b08f===_0x7946bb(0x238))try{return config_JSON=await 读取config_JSON(_0x3b797a,_0x51c8c6,_0x440d0c,_0x3b797a[_0x7946bb(0x3d8)],!![]),_0x1c55d0['waitUntil'](请求日志记录(_0x3b797a,_0x5aa20f,_0x31d9ff,_0x7946bb(0x4d7),config_JSON)),config_JSON['init']=_0x7946bb(0x151),new Response(JSON[_0x7946bb(0x38d)](config_JSON,null,0x2),{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}catch(_0x1a4e4f){const _0x3972af={'msg':_0x7946bb(0x51e)+_0x1a4e4f['message'],'error':_0x1a4e4f[_0x7946bb(0x3de)]};return new Response(JSON[_0x7946bb(0x38d)](_0x3972af,null,0x2),{'status':0x1f4,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}else{if(_0x5aa20f[_0x7946bb(0x1a2)]===_0x7946bb(0x433)){if(_0x23b08f===_0x7946bb(0x249))try{const _0x4e51a5=await _0x5aa20f['json']();if(!_0x4e51a5[_0x7946bb(0x448)]||!_0x4e51a5[_0x7946bb(0x428)])return new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x210)}),{'status':0x190,'headers':{'Content-Type':_0x7946bb(0x2e7)}});return await _0x3b797a['KV'][_0x7946bb(0x4be)](_0x7946bb(0x51c),JSON[_0x7946bb(0x38d)](_0x4e51a5,null,0x2)),_0x1c55d0[_0x7946bb(0x313)](请求日志记录(_0x3b797a,_0x5aa20f,_0x31d9ff,_0x7946bb(0x24f),config_JSON)),new Response(JSON[_0x7946bb(0x38d)]({'success':!![],'message':_0x7946bb(0x1ee)}),{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}catch(_0x1ee287){return console['error'](_0x7946bb(0x3df),_0x1ee287),new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x4ec)+_0x1ee287[_0x7946bb(0x3de)]}),{'status':0x1f4,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}else{if(_0x23b08f===_0x7946bb(0x1a6))try{const _0x331717=await _0x5aa20f[_0x7946bb(0x18e)](),_0x1e71a9={'Email':null,'GlobalAPIKey':null,'AccountID':null,'APIToken':null,'UsageAPI':null};if(!_0x331717[_0x7946bb(0x2dc)]||_0x331717[_0x7946bb(0x2dc)]!==!![]){if(_0x331717[_0x7946bb(0x2ea)]&&_0x331717[_0x7946bb(0x160)])_0x1e71a9['Email']=_0x331717[_0x7946bb(0x2ea)],_0x1e71a9[_0x7946bb(0x160)]=_0x331717['GlobalAPIKey'];else{if(_0x331717[_0x7946bb(0x35b)]&&_0x331717[_0x7946bb(0x4ee)])_0x1e71a9[_0x7946bb(0x35b)]=_0x331717[_0x7946bb(0x35b)],_0x1e71a9[_0x7946bb(0x4ee)]=_0x331717[_0x7946bb(0x4ee)];else{if(_0x331717[_0x7946bb(0x2fe)])_0x1e71a9['UsageAPI']=_0x331717[_0x7946bb(0x2fe)];else return new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x210)}),{'status':0x190,'headers':{'Content-Type':'application/json;charset=utf-8'}});}}}return await _0x3b797a['KV']['put'](_0x7946bb(0x51a),JSON[_0x7946bb(0x38d)](_0x1e71a9,null,0x2)),_0x1c55d0[_0x7946bb(0x313)](请求日志记录(_0x3b797a,_0x5aa20f,_0x31d9ff,_0x7946bb(0x24f),config_JSON)),new Response(JSON[_0x7946bb(0x38d)]({'success':!![],'message':_0x7946bb(0x1ee)}),{'status':0xc8,'headers':{'Content-Type':'application/json;charset=utf-8'}});}catch(_0x5b9b48){return console[_0x7946bb(0x1e8)](_0x7946bb(0x3df),_0x5b9b48),new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x4ec)+_0x5b9b48[_0x7946bb(0x3de)]}),{'status':0x1f4,'headers':{'Content-Type':'application/json;charset=utf-8'}});}else{if(_0x23b08f===_0x7946bb(0x4da))try{const _0x46d1cc=await _0x5aa20f[_0x7946bb(0x18e)]();if(_0x46d1cc[_0x7946bb(0x2dc)]&&_0x46d1cc[_0x7946bb(0x2dc)]===!![]){const _0x3d2ab5={'BotToken':null,'ChatID':null};await _0x3b797a['KV'][_0x7946bb(0x4be)](_0x7946bb(0x38e),JSON[_0x7946bb(0x38d)](_0x3d2ab5,null,0x2));}else{if(!_0x46d1cc['BotToken']||!_0x46d1cc[_0x7946bb(0x50a)])return new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x210)}),{'status':0x190,'headers':{'Content-Type':_0x7946bb(0x2e7)}});await _0x3b797a['KV'][_0x7946bb(0x4be)](_0x7946bb(0x38e),JSON['stringify'](_0x46d1cc,null,0x2));}return _0x1c55d0[_0x7946bb(0x313)](请求日志记录(_0x3b797a,_0x5aa20f,_0x31d9ff,_0x7946bb(0x24f),config_JSON)),new Response(JSON[_0x7946bb(0x38d)]({'success':!![],'message':_0x7946bb(0x1ee)}),{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}catch(_0x364e45){return console[_0x7946bb(0x1e8)](_0x7946bb(0x3df),_0x364e45),new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x4ec)+_0x364e45['message']}),{'status':0x1f4,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}else{if(_0x4d1bd3==='admin/ADD.txt')try{const _0x3bab91=await _0x5aa20f[_0x7946bb(0x43b)]();return await _0x3b797a['KV']['put']('ADD.txt',_0x3bab91),_0x1c55d0[_0x7946bb(0x313)](请求日志记录(_0x3b797a,_0x5aa20f,_0x31d9ff,'Save_Custom_IPs',config_JSON)),new Response(JSON[_0x7946bb(0x38d)]({'success':!![],'message':_0x7946bb(0x40b)}),{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}catch(_0x2a5549){return console['error'](_0x7946bb(0x283),_0x2a5549),new Response(JSON[_0x7946bb(0x38d)]({'error':_0x7946bb(0x20c)+_0x2a5549[_0x7946bb(0x3de)]}),{'status':0x1f4,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}else return new Response(JSON['stringify']({'error':_0x7946bb(0x4dc)}),{'status':0x194,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}}}}else{if(_0x23b08f===_0x7946bb(0x249))return new Response(JSON[_0x7946bb(0x38d)](config_JSON,null,0x2),{'status':0xc8,'headers':{'Content-Type':'application/json'}});else{if(_0x4d1bd3===_0x7946bb(0x1dd)){let _0x3513a9=await _0x3b797a['KV'][_0x7946bb(0x198)](_0x7946bb(0x480))||_0x7946bb(0x3c1);if(_0x3513a9==_0x7946bb(0x3c1))_0x3513a9=(await 生成随机IP(_0x5aa20f,config_JSON[_0x7946bb(0x3d2)][_0x7946bb(0x4ca)][_0x7946bb(0x477)],config_JSON['优选订阅生成'][_0x7946bb(0x4ca)][_0x7946bb(0x30e)]))[0x1];return new Response(_0x3513a9,{'status':0xc8,'headers':{'Content-Type':'text/plain;charset=utf-8','asn':_0x5aa20f['cf'][_0x7946bb(0x1c5)]}});}else{if(_0x23b08f===_0x7946bb(0x1a6))return new Response(JSON[_0x7946bb(0x38d)](_0x5aa20f['cf'],null,0x2),{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x2e7)}});}}}}return _0x1c55d0[_0x7946bb(0x313)](请求日志记录(_0x3b797a,_0x5aa20f,_0x31d9ff,_0x7946bb(0x495),config_JSON)),fetch(Pages静态页面+'/admin');}else{if(_0x23b08f===_0x7946bb(0x154)||_0x56f376['test'](_0x23b08f)){const _0x4f085f=new Response('重定向中...',{'status':0x12e,'headers':{'Location':_0x7946bb(0x26f)}});return _0x4f085f[_0x7946bb(0x3dd)][_0x7946bb(0x4d2)](_0x7946bb(0x1aa),_0x7946bb(0x3f8)),_0x4f085f;}else{if(_0x23b08f===_0x7946bb(0x3e6)){const _0x4fb767=await MD5MD5(_0x51c8c6+_0x440d0c);if(_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x3e5))===_0x4fb767){config_JSON=await 读取config_JSON(_0x3b797a,_0x51c8c6,_0x440d0c,_0x3b797a[_0x7946bb(0x3d8)]),_0x1c55d0[_0x7946bb(0x313)](请求日志记录(_0x3b797a,_0x5aa20f,_0x31d9ff,'Get_SUB',config_JSON));const _0x3970d8=_0x2a3ce2[_0x7946bb(0x48a)](),_0x2b0035=0xf4849500,_0x4e42a2=Date[_0x7946bb(0x28f)](),_0x4e4f77=new Date(_0x4e42a2);_0x4e4f77[_0x7946bb(0x169)](0x0,0x0,0x0,0x0);const _0x51b794=Math[_0x7946bb(0x502)]((_0x4e42a2-_0x4e4f77['getTime']())/0x5265c00*0x18*0x10000000000/0x2);let _0x1c774c=_0x51b794,_0x429125=_0x51b794,_0x2eedc2=0x18*0x10000000000;config_JSON['CF']['Usage']['success']&&(_0x1c774c=config_JSON['CF'][_0x7946bb(0x1d9)][_0x7946bb(0x402)],_0x429125=config_JSON['CF']['Usage'][_0x7946bb(0x4e7)],_0x2eedc2=Number[_0x7946bb(0x1a3)](config_JSON['CF'][_0x7946bb(0x1d9)]['max'])?config_JSON['CF'][_0x7946bb(0x1d9)][_0x7946bb(0x20f)]/0x3e8*0x400:0x400*0x64);const _0x2dbc1e={'content-type':_0x7946bb(0x340),'Profile-Update-Interval':config_JSON[_0x7946bb(0x3d2)][_0x7946bb(0x41d)],'Profile-web-page-url':_0x2db9e1[_0x7946bb(0x24a)]+'//'+_0x2db9e1[_0x7946bb(0x40d)]+_0x7946bb(0x216),'Subscription-Userinfo':_0x7946bb(0x1e1)+_0x1c774c+';\x20download='+_0x429125+_0x7946bb(0x1a7)+_0x2eedc2+_0x7946bb(0x2f2)+_0x2b0035,'Cache-Control':_0x7946bb(0x350)},_0x4d34dd=_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)](_0x7946bb(0x275))||_0x2db9e1[_0x7946bb(0x3ae)]['has'](_0x7946bb(0x1f7))||_0x5aa20f['headers']['get']('subconverter-request')||_0x5aa20f['headers'][_0x7946bb(0x198)](_0x7946bb(0x45e))||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x268))||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x4d4)['toLowerCase']()),_0x19f366=_0x4d34dd?_0x7946bb(0x3ba):_0x2db9e1['searchParams'][_0x7946bb(0x3d5)](_0x7946bb(0x3ef))?_0x2db9e1[_0x7946bb(0x3ae)]['get'](_0x7946bb(0x3ef)):_0x2db9e1['searchParams'][_0x7946bb(0x3d5)](_0x7946bb(0x176))||_0x3970d8['includes']('clash')||_0x3970d8['includes'](_0x7946bb(0x3f3))||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x31f))?_0x7946bb(0x176):_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)]('sb')||_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)](_0x7946bb(0x3ee))||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x3ee))||_0x3970d8['includes'](_0x7946bb(0x504))?'singbox':_0x2db9e1['searchParams']['has'](_0x7946bb(0x2ca))||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x2ca))?_0x7946bb(0x23d):_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)](_0x7946bb(0x3e2))||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x157))?_0x7946bb(0x3e2):_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)](_0x7946bb(0x1b2))||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x1b2))?'loon':'mixed';if(!_0x3970d8[_0x7946bb(0x153)]('mozilla'))_0x2dbc1e['Content-Disposition']='attachment;\x20filename*=utf-8\x27\x27'+encodeURIComponent(config_JSON[_0x7946bb(0x3d2)][_0x7946bb(0x1f0)]);const _0x580607=_0x2db9e1['searchParams'][_0x7946bb(0x3d5)]('surge')||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x2ca))?_0x7946bb(0x462)+_0x7946bb(0x517):config_JSON[_0x7946bb(0x3d1)];let _0x229a4a='';if(_0x19f366==='mixed'){const _0x35be47=config_JSON['启用0RTT']?config_JSON[_0x7946bb(0x3d8)]+_0x7946bb(0x175):config_JSON['PATH'],_0x5ce612=config_JSON[_0x7946bb(0x3d4)]==_0x7946bb(0x42e)?_0x7946bb(0x263)+encodeURIComponent(_0x7946bb(0x2c5)):config_JSON[_0x7946bb(0x3d4)]==_0x7946bb(0x3b4)?_0x7946bb(0x263)+encodeURIComponent(_0x7946bb(0x37d)):'';let _0x2d6d0b=[],_0x51f3b7='';if(!_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)](_0x7946bb(0x3e6))&&config_JSON['优选订阅生成'][_0x7946bb(0x1df)]){const _0x17037b=config_JSON[_0x7946bb(0x3d2)][_0x7946bb(0x4ca)]['随机IP']?(await 生成随机IP(_0x5aa20f,config_JSON[_0x7946bb(0x3d2)][_0x7946bb(0x4ca)]['随机数量'],config_JSON[_0x7946bb(0x3d2)][_0x7946bb(0x4ca)]['指定端口']))[0x0]:await _0x3b797a['KV'][_0x7946bb(0x198)](_0x7946bb(0x480))?await 整理成数组(await _0x3b797a['KV'][_0x7946bb(0x198)]('ADD.txt')):(await 生成随机IP(_0x5aa20f,config_JSON[_0x7946bb(0x3d2)][_0x7946bb(0x4ca)][_0x7946bb(0x477)],config_JSON[_0x7946bb(0x3d2)]['本地IP库'][_0x7946bb(0x30e)]))[0x0],_0x3712d6=[],_0x156d68=[],_0x4cbe4a=[];for(const _0x2f84ed of _0x17037b){if(_0x2f84ed[_0x7946bb(0x48a)]()[_0x7946bb(0x190)](_0x7946bb(0x31b)))_0x3712d6[_0x7946bb(0x14c)](_0x2f84ed);else{if(_0x2f84ed[_0x7946bb(0x48a)]()[_0x7946bb(0x153)](_0x7946bb(0x3e7))){if(_0x2f84ed[_0x7946bb(0x153)]('#')){const _0x53d8b6=_0x2f84ed['split']('#');_0x4cbe4a[_0x7946bb(0x14c)](_0x53d8b6[0x0]+'#'+encodeURIComponent(decodeURIComponent(_0x53d8b6[0x1])));}else _0x4cbe4a['push'](_0x2f84ed);}else _0x156d68[_0x7946bb(0x14c)](_0x2f84ed);}}const _0x1f3edf=await 请求优选API(_0x3712d6),_0x476f46=[...new Set(_0x4cbe4a[_0x7946bb(0x287)](_0x1f3edf[0x1]))];_0x51f3b7=_0x476f46[_0x7946bb(0x3ff)]>0x0?_0x476f46[_0x7946bb(0x315)]('\x0a')+'\x0a':'';const _0x433356=_0x1f3edf[0x0];_0x2d6d0b=[...new Set(_0x156d68[_0x7946bb(0x287)](_0x433356))];}else{let _0x9fcc20=_0x2db9e1['searchParams'][_0x7946bb(0x198)]('sub')||config_JSON[_0x7946bb(0x3d2)][_0x7946bb(0x3da)];_0x9fcc20=_0x9fcc20&&!/^https?:\/\//i[_0x7946bb(0x49f)](_0x9fcc20)?_0x7946bb(0x31b)+_0x9fcc20:_0x9fcc20;const _0x4bc650=_0x9fcc20+_0x7946bb(0x46b);try{const _0x2b3cfe=await fetch(_0x4bc650,{'headers':{'User-Agent':_0x7946bb(0x1c0)+'tunnel\x20(https://github.com/cmliu/edge'+_0x7946bb(0x3e4)}});if(!_0x2b3cfe['ok'])return new Response(_0x7946bb(0x1ba)+_0x2b3cfe['statusText'],{'status':_0x2b3cfe[_0x7946bb(0x4fa)]});const _0x48eae6=atob(await _0x2b3cfe['text']()),_0xf89c86=_0x48eae6['includes']('\x0d\x0a')?_0x48eae6['split']('\x0d\x0a'):_0x48eae6[_0x7946bb(0x205)]('\x0a');for(const _0x78d213 of _0xf89c86){if(!_0x78d213['trim']())continue;if(_0x78d213[_0x7946bb(0x153)]('00000000-0000-4000-8000-000000000000')&&_0x78d213[_0x7946bb(0x153)](_0x7946bb(0x310))){const _0x28662b=_0x78d213[_0x7946bb(0x4ff)](/:\/\/[^@]+@([^?]+)/);if(_0x28662b){let _0x28a726=_0x28662b[0x1],_0x3357b7='';const _0x2695d1=_0x78d213[_0x7946bb(0x4ff)](/#(.+)$/);if(_0x2695d1)_0x3357b7='#'+decodeURIComponent(_0x2695d1[0x1]);_0x2d6d0b[_0x7946bb(0x14c)](_0x28a726+_0x3357b7);}}else _0x51f3b7+=_0x78d213+'\x0a';}}catch(_0x119170){return new Response(_0x7946bb(0x1ba)+_0x119170[_0x7946bb(0x3de)],{'status':0x193});}}const _0x52c687=config_JSON[_0x7946bb(0x35a)]?_0x7946bb(0x347)+encodeURIComponent(_0x7946bb(0x484)+ECH_DOH):'';_0x229a4a=_0x51f3b7+_0x2d6d0b['map'](_0xe03718=>{const _0x4fec3d=_0x7946bb,_0x5463c8=/^(\[[\da-fA-F:]+\]|[\d.]+|[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*)(?::(\d+))?(?:#(.+))?$/,_0x453498=_0xe03718['match'](_0x5463c8);let _0x57bb66,_0x3ea228=_0x4fec3d(0x217),_0x5e7033;if(_0x453498)_0x57bb66=_0x453498[0x1],_0x3ea228=_0x453498[0x2]||'443',_0x5e7033=_0x453498[0x3]||_0x57bb66;else return console['warn']('[订阅内容]\x20不规范的IP格式已忽略:\x20'+_0xe03718),null;return _0x580607+_0x4fec3d(0x211)+_0x57bb66+':'+_0x3ea228+_0x4fec3d(0x3b1)+(config_JSON[_0x4fec3d(0x1de)]+_0x52c687)+'&host=example.com&fp='+config_JSON[_0x4fec3d(0x508)]+_0x4fec3d(0x2aa)+(encodeURIComponent(config_JSON[_0x4fec3d(0x370)]?随机路径()+_0x35be47:_0x35be47)+_0x5ce612)+_0x4fec3d(0x50b)+(config_JSON[_0x4fec3d(0x3be)]?_0x4fec3d(0x359):'')+'#'+encodeURIComponent(_0x5e7033);})['filter'](_0x289864=>_0x289864!==null)['join']('\x0a');}else{const _0x55121f=config_JSON[_0x7946bb(0x48b)][_0x7946bb(0x405)]+_0x7946bb(0x208)+_0x19f366+_0x7946bb(0x4bc)+encodeURIComponent(_0x2db9e1[_0x7946bb(0x24a)]+'//'+_0x2db9e1[_0x7946bb(0x40d)]+'/sub?target=mixed&token='+_0x4fb767+(_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)](_0x7946bb(0x3e6))&&_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x198)](_0x7946bb(0x3e6))!=''?_0x7946bb(0x431)+_0x2db9e1[_0x7946bb(0x3ae)]['get'](_0x7946bb(0x3e6)):''))+'&config='+encodeURIComponent(config_JSON[_0x7946bb(0x48b)][_0x7946bb(0x457)])+_0x7946bb(0x19c)+config_JSON[_0x7946bb(0x48b)][_0x7946bb(0x39a)]+_0x7946bb(0x317)+config_JSON[_0x7946bb(0x3be)];try{const _0x36aec6=await fetch(_0x55121f,{'headers':{'User-Agent':'Subconverter\x20for\x20'+_0x19f366+_0x7946bb(0x458)+_0x7946bb(0x1b7)+_0x7946bb(0x3e4)}});if(_0x36aec6['ok']){_0x229a4a=await _0x36aec6[_0x7946bb(0x43b)]();if(_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)](_0x7946bb(0x2ca))||_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x2ca)))_0x229a4a=Surge订阅配置文件热补丁(_0x229a4a,_0x2db9e1['protocol']+'//'+_0x2db9e1[_0x7946bb(0x40d)]+_0x7946bb(0x2dd)+_0x4fb767+_0x7946bb(0x391),config_JSON);}else return new Response(_0x7946bb(0x49c)+_0x36aec6['statusText'],{'status':_0x36aec6[_0x7946bb(0x4fa)]});}catch(_0x6b9858){return new Response('订阅转换后端异常:'+_0x6b9858[_0x7946bb(0x3de)],{'status':0x193});}}if(!_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x268)))_0x229a4a=await 批量替换域名(_0x229a4a['replace'](/00000000-0000-4000-8000-000000000000/g,config_JSON['UUID']),config_JSON[_0x7946bb(0x497)]);if(_0x19f366===_0x7946bb(0x3ba)&&(!_0x3970d8[_0x7946bb(0x153)](_0x7946bb(0x35e))||_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)]('b64')||_0x2db9e1[_0x7946bb(0x3ae)][_0x7946bb(0x3d5)](_0x7946bb(0x1f7))))_0x229a4a=btoa(_0x229a4a);if(_0x19f366===_0x7946bb(0x3ee))_0x229a4a=Singbox订阅配置文件热补丁(_0x229a4a,config_JSON[_0x7946bb(0x448)],config_JSON[_0x7946bb(0x508)],config_JSON[_0x7946bb(0x35a)]?await getECH(_0x51c8c6):null),_0x2dbc1e['content-type']=_0x7946bb(0x213);else _0x19f366===_0x7946bb(0x176)&&(_0x229a4a=Clash订阅配置文件热补丁(_0x229a4a,config_JSON['UUID'],config_JSON[_0x7946bb(0x35a)],config_JSON[_0x7946bb(0x497)]),_0x2dbc1e[_0x7946bb(0x34c)]=_0x7946bb(0x4b6));return new Response(_0x229a4a,{'status':0xc8,'headers':_0x2dbc1e});}}else{if(_0x23b08f==='locations'){const _0x411c3c=_0x5aa20f[_0x7946bb(0x3dd)][_0x7946bb(0x198)](_0x7946bb(0x28d))||'',_0x8e5992=_0x411c3c['split'](';')[_0x7946bb(0x1fe)](_0x7d1461=>_0x7d1461['trim']()['startsWith'](_0x7946bb(0x24b)))?.[_0x7946bb(0x205)]('=')[0x1];if(_0x8e5992&&_0x8e5992==await MD5MD5(_0x2a3ce2+_0x58c174+_0x45e56f))return fetch(new Request(_0x7946bb(0x187),{'headers':{'Referer':'https://speed.cloudflare.com/'}}));}else{if(_0x23b08f===_0x7946bb(0x274))return new Response('User-agent:\x20*\x0aDisallow:\x20/',{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x349)}});}}}}}}}else{if(!_0x18d2b1)return fetch(Pages静态页面+_0x7946bb(0x3f4))['then'](_0x362758=>{const _0x376385=_0x7946bb,_0x5bf285=new Headers(_0x362758[_0x376385(0x3dd)]);return _0x5bf285[_0x376385(0x4d2)](_0x376385(0x45d),'no-store,\x20no-cache,\x20must-revalidate,\x20proxy-revalidate'),_0x5bf285[_0x376385(0x4d2)](_0x376385(0x32b),_0x376385(0x2c7)),_0x5bf285[_0x376385(0x4d2)](_0x376385(0x18c),'0'),new Response(_0x362758['body'],{'status':0x194,'statusText':_0x362758[_0x376385(0x377)],'headers':_0x5bf285});});}}else{if(_0x45e56f){await 反代参数获取(_0x5aa20f);const _0x3fc721=new URL(_0x5aa20f[_0x7946bb(0x42f)])[_0x7946bb(0x15b)];let _0x34d469='';if(_0x3fc721['includes'](_0x7946bb(0x23e))){const _0x419e10=_0x3fc721['match'](/two_proxy=([^&]+)/);_0x419e10&&(_0x34d469=decodeURIComponent(decodeURIComponent(_0x419e10[0x1])));}const _0x1ac1d9=_0x34d469||_0x3b797a[_0x7946bb(0x1e9)]||_0x3b797a[_0x7946bb(0x40c)]||'';return await 处理WS请求(_0x5aa20f,_0x440d0c,_0x1ac1d9);}}let _0x4c9359=_0x3b797a[_0x7946bb(0x4c5)]||'nginx';if(_0x4c9359&&_0x4c9359!==_0x7946bb(0x2d0)&&_0x4c9359!==_0x7946bb(0x1af)){_0x4c9359=_0x4c9359[_0x7946bb(0x4d1)]()['replace'](/\/$/,'');if(!_0x4c9359[_0x7946bb(0x4ff)](/^https?:\/\//i))_0x4c9359=_0x7946bb(0x31b)+_0x4c9359;if(_0x4c9359['toLowerCase']()[_0x7946bb(0x190)]('http://'))_0x4c9359=_0x7946bb(0x31b)+_0x4c9359[_0x7946bb(0x1fd)](0x7);try{const _0x177be5=new URL(_0x4c9359);_0x4c9359=_0x177be5[_0x7946bb(0x24a)]+'//'+_0x177be5[_0x7946bb(0x40d)];}catch(_0x3143a1){_0x4c9359='nginx';}}if(_0x4c9359===_0x7946bb(0x1af))return new Response(await html1101(_0x2db9e1[_0x7946bb(0x40d)],_0x31d9ff),{'status':0xc8,'headers':{'Content-Type':_0x7946bb(0x1ed)}});try{const _0x2a1149=new URL(_0x4c9359),_0x491fa5=new Headers(_0x5aa20f[_0x7946bb(0x3dd)]);_0x491fa5[_0x7946bb(0x4d2)](_0x7946bb(0x2c6),_0x2a1149[_0x7946bb(0x40d)]),_0x491fa5['set']('Referer',_0x2a1149[_0x7946bb(0x35f)]),_0x491fa5['set'](_0x7946bb(0x20b),_0x2a1149[_0x7946bb(0x35f)]);if(!_0x491fa5[_0x7946bb(0x3d5)](_0x7946bb(0x16b))&&_0x2a3ce2&&_0x2a3ce2!=='null')_0x491fa5[_0x7946bb(0x4d2)](_0x7946bb(0x16b),_0x2a3ce2);const _0x53bd04=await fetch(_0x2a1149[_0x7946bb(0x35f)]+_0x2db9e1['pathname']+_0x2db9e1['search'],{'method':_0x5aa20f['method'],'headers':_0x491fa5,'body':_0x5aa20f['body'],'cf':_0x5aa20f['cf']}),_0x4776ba=_0x53bd04[_0x7946bb(0x3dd)][_0x7946bb(0x198)]('content-type')||'';if(/text|javascript|json|xml/['test'](_0x4776ba)){const _0x5cee64=(await _0x53bd04[_0x7946bb(0x43b)]())[_0x7946bb(0x400)](_0x2a1149[_0x7946bb(0x40d)],_0x2db9e1[_0x7946bb(0x40d)]);return new Response(_0x5cee64,{'status':_0x53bd04[_0x7946bb(0x4fa)],'headers':{...Object['fromEntries'](_0x53bd04['headers']),'Cache-Control':_0x7946bb(0x350)}});}return _0x53bd04;}catch(_0x48cf7b){}return new Response(await nginx(),{'status':0xc8,'headers':{'Content-Type':'text/html;\x20charset=UTF-8'}});}};async function 处理WS请求(_0x2c66b5,_0x3e2b7e,_0xff8b7f=''){const _0x49d93b=_0x10737d,_0x33c10b=new WebSocketPair(),[_0x2ce546,_0x186d96]=Object[_0x49d93b(0x302)](_0x33c10b);_0x186d96['accept']();let _0x10f749={'socket':null},_0x1fde25=![];const _0x5045d4=_0x2c66b5['headers'][_0x49d93b(0x198)](_0x49d93b(0x4c2))||'',_0x7acab4=makeReadableStr(_0x186d96,_0x5045d4);let _0x24f556=null,_0xa0848c=null;if(_0xff8b7f){const _0x1c2e6f=_0xff8b7f[_0x49d93b(0x205)](':');_0x1c2e6f[_0x49d93b(0x3ff)]>=0x2&&(_0xa0848c={'hostname':_0x1c2e6f[0x0],'port':parseInt(_0x1c2e6f[0x1],0xa),'username':_0x1c2e6f[0x2]||'','password':_0x1c2e6f[0x3]||''},console['log']('[双层代理]\x20已启用:\x20'+_0xa0848c[_0x49d93b(0x3c4)]+':'+_0xa0848c[_0x49d93b(0x3fe)]));}return _0x7acab4[_0x49d93b(0x3ed)](new WritableStream({async 'write'(_0xf5c730){const _0x1c9698=_0x49d93b;if(_0x1fde25)return await forwardataudp(_0xf5c730,_0x186d96,null);if(_0x10f749[_0x1c9698(0x319)]){const _0x14201d=_0x10f749[_0x1c9698(0x319)][_0x1c9698(0x3b6)][_0x1c9698(0x48d)]();await _0x14201d[_0x1c9698(0x30a)](_0xf5c730),_0x14201d[_0x1c9698(0x31d)]();return;}if(_0x24f556===null){const _0x30ba48=new Uint8Array(_0xf5c730);_0x24f556=_0x30ba48[_0x1c9698(0x434)]>=0x3a&&_0x30ba48[0x38]===0xd&&_0x30ba48[0x39]===0xa;}if(_0x10f749[_0x1c9698(0x319)]){const _0x24ce4b=_0x10f749[_0x1c9698(0x319)]['writable']['getWriter']();await _0x24ce4b[_0x1c9698(0x30a)](_0xf5c730),_0x24ce4b[_0x1c9698(0x31d)]();return;}if(_0x24f556){const {port:_0x2982ca,hostname:_0x3fe942,rawClientData:_0x32c31f}=解析木马请求(_0xf5c730,_0x3e2b7e);if(isSpeedTestSite(_0x3fe942))throw new Error(_0x1c9698(0x506));await forwardataTCP(_0x3fe942,_0x2982ca,_0x32c31f,_0x186d96,null,_0x10f749,_0x3e2b7e,_0xa0848c);}else{const {port:_0x42ae20,hostname:_0x38a189,rawIndex:_0x1f3656,version:_0x45f9e4,isUDP:_0x801858}=解析魏烈思请求(_0xf5c730,_0x3e2b7e);if(isSpeedTestSite(_0x38a189))throw new Error(_0x1c9698(0x506));if(_0x801858){if(_0x42ae20===0x35)_0x1fde25=!![];else throw new Error(_0x1c9698(0x449));}const _0x51cfba=new Uint8Array([_0x45f9e4[0x0],0x0]),_0x16bcba=_0xf5c730[_0x1c9698(0x471)](_0x1f3656);if(_0x1fde25)return forwardataudp(_0x16bcba,_0x186d96,_0x51cfba);await forwardataTCP(_0x38a189,_0x42ae20,_0x16bcba,_0x186d96,_0x51cfba,_0x10f749,_0x3e2b7e,_0xa0848c);}}}))[_0x49d93b(0x42c)](_0x1d9faf=>{}),new Response(null,{'status':0x65,'webSocket':_0x2ce546});}function 解析木马请求(_0x18719a,_0x50cda8){const _0x582138=_0x10737d,_0x171deb=sha224(_0x50cda8);if(_0x18719a[_0x582138(0x434)]<0x38)return{'hasError':!![],'message':_0x582138(0x47b)};let _0x17d156=0x38;if(new Uint8Array(_0x18719a[_0x582138(0x471)](0x38,0x39))[0x0]!==0xd||new Uint8Array(_0x18719a[_0x582138(0x471)](0x39,0x3a))[0x0]!==0xa)return{'hasError':!![],'message':_0x582138(0x4a7)};const _0x3eb0aa=new TextDecoder()[_0x582138(0x453)](_0x18719a['slice'](0x0,_0x17d156));if(_0x3eb0aa!==_0x171deb)return{'hasError':!![],'message':_0x582138(0x4d6)};const _0x3c9f55=_0x18719a[_0x582138(0x471)](_0x17d156+0x2);if(_0x3c9f55[_0x582138(0x434)]<0x6)return{'hasError':!![],'message':_0x582138(0x16c)};const _0x41d8ed=new DataView(_0x3c9f55),_0x5e846b=_0x41d8ed[_0x582138(0x22c)](0x0);if(_0x5e846b!==0x1)return{'hasError':!![],'message':'unsupported\x20command,\x20only\x20TCP\x20is\x20allowed'};const _0x216e04=_0x41d8ed[_0x582138(0x22c)](0x1);let _0x548556=0x0,_0x431d9a=0x2,_0xd13922='';switch(_0x216e04){case 0x1:_0x548556=0x4,_0xd13922=new Uint8Array(_0x3c9f55[_0x582138(0x471)](_0x431d9a,_0x431d9a+_0x548556))[_0x582138(0x315)]('.');break;case 0x3:_0x548556=new Uint8Array(_0x3c9f55[_0x582138(0x471)](_0x431d9a,_0x431d9a+0x1))[0x0],_0x431d9a+=0x1,_0xd13922=new TextDecoder()[_0x582138(0x453)](_0x3c9f55[_0x582138(0x471)](_0x431d9a,_0x431d9a+_0x548556));break;case 0x4:_0x548556=0x10;const _0x2be240=new DataView(_0x3c9f55[_0x582138(0x471)](_0x431d9a,_0x431d9a+_0x548556)),_0xbcd5f1=[];for(let _0x3526ef=0x0;_0x3526ef<0x8;_0x3526ef++){_0xbcd5f1['push'](_0x2be240['getUint16'](_0x3526ef*0x2)[_0x582138(0x226)](0x10));}_0xd13922=_0xbcd5f1[_0x582138(0x315)](':');break;default:return{'hasError':!![],'message':_0x582138(0x149)+_0x216e04};}if(!_0xd13922)return{'hasError':!![],'message':_0x582138(0x254)+_0x216e04};const _0x5e9521=_0x431d9a+_0x548556,_0x122365=_0x3c9f55[_0x582138(0x471)](_0x5e9521,_0x5e9521+0x2),_0x418b13=new DataView(_0x122365)[_0x582138(0x30b)](0x0);return{'hasError':![],'addressType':_0x216e04,'port':_0x418b13,'hostname':_0xd13922,'rawClientData':_0x3c9f55[_0x582138(0x471)](_0x5e9521+0x4)};}function 解析魏烈思请求(_0x4861ff,_0xd2fc79){const _0x3a94ce=_0x10737d;if(_0x4861ff[_0x3a94ce(0x434)]<0x18)return{'hasError':!![],'message':'Invalid\x20data'};const _0x232f64=new Uint8Array(_0x4861ff[_0x3a94ce(0x471)](0x0,0x1));if(formatIdentifier(new Uint8Array(_0x4861ff['slice'](0x1,0x11)))!==_0xd2fc79)return{'hasError':!![],'message':_0x3a94ce(0x1cd)};const _0x452c03=new Uint8Array(_0x4861ff['slice'](0x11,0x12))[0x0],_0xa1b6fe=new Uint8Array(_0x4861ff[_0x3a94ce(0x471)](0x12+_0x452c03,0x13+_0x452c03))[0x0];let _0x7bbebc=![];if(_0xa1b6fe===0x1){}else{if(_0xa1b6fe===0x2)_0x7bbebc=!![];else return{'hasError':!![],'message':_0x3a94ce(0x28b)};}const _0x23d7de=0x13+_0x452c03,_0x145b0d=new DataView(_0x4861ff[_0x3a94ce(0x471)](_0x23d7de,_0x23d7de+0x2))[_0x3a94ce(0x30b)](0x0);let _0x19ae9d=_0x23d7de+0x2,_0x36437b=0x0,_0x14cd54=_0x19ae9d+0x1,_0x51ac03='';const _0x2f8b1e=new Uint8Array(_0x4861ff[_0x3a94ce(0x471)](_0x19ae9d,_0x14cd54))[0x0];switch(_0x2f8b1e){case 0x1:_0x36437b=0x4,_0x51ac03=new Uint8Array(_0x4861ff[_0x3a94ce(0x471)](_0x14cd54,_0x14cd54+_0x36437b))[_0x3a94ce(0x315)]('.');break;case 0x2:_0x36437b=new Uint8Array(_0x4861ff[_0x3a94ce(0x471)](_0x14cd54,_0x14cd54+0x1))[0x0],_0x14cd54+=0x1,_0x51ac03=new TextDecoder()[_0x3a94ce(0x453)](_0x4861ff[_0x3a94ce(0x471)](_0x14cd54,_0x14cd54+_0x36437b));break;case 0x3:_0x36437b=0x10;const _0x37cf0b=[],_0x4825f2=new DataView(_0x4861ff[_0x3a94ce(0x471)](_0x14cd54,_0x14cd54+_0x36437b));for(let _0x4f2a1c=0x0;_0x4f2a1c<0x8;_0x4f2a1c++)_0x37cf0b[_0x3a94ce(0x14c)](_0x4825f2[_0x3a94ce(0x30b)](_0x4f2a1c*0x2)[_0x3a94ce(0x226)](0x10));_0x51ac03=_0x37cf0b[_0x3a94ce(0x315)](':');break;default:return{'hasError':!![],'message':_0x3a94ce(0x1d4)+_0x2f8b1e};}if(!_0x51ac03)return{'hasError':!![],'message':_0x3a94ce(0x1ae)+_0x2f8b1e};return{'hasError':![],'addressType':_0x2f8b1e,'port':_0x145b0d,'hostname':_0x51ac03,'isUDP':_0x7bbebc,'rawIndex':_0x14cd54+_0x36437b,'version':_0x232f64};}async function forwardataTCP(_0x5d97f5,_0x3312c9,_0x4e9c72,_0x5dd6f5,_0x34b235,_0x158c73,_0x58512d,_0x21afef=null){const _0x44c154=_0x10737d;console['log']('[TCP转发]\x20目标:\x20'+_0x5d97f5+':'+_0x3312c9+_0x44c154(0x2f3)+反代IP+'\x20|\x20双层代理:\x20'+(_0x21afef?_0x21afef['hostname']+':'+_0x21afef[_0x44c154(0x3fe)]:'否')+_0x44c154(0x3aa)+(启用SOCKS5反代||_0x44c154(0x393)));async function _0x3d8bbe(_0x4a71e5,_0x544022,_0x1e3fd3,_0x5799af=null,_0x628f64=!![]){const _0x4b5cd2=_0x44c154;let _0x2da8ca;if(_0x5799af&&_0x5799af[_0x4b5cd2(0x3ff)]>0x0)for(let _0x27aec0=0x0;_0x27aec0<_0x5799af[_0x4b5cd2(0x3ff)];_0x27aec0++){const _0x1fd449=(缓存反代数组索引+_0x27aec0)%_0x5799af[_0x4b5cd2(0x3ff)],[_0x1c8224,_0x43564d]=_0x5799af[_0x1fd449];try{console[_0x4b5cd2(0x282)](_0x4b5cd2(0x235)+_0x1c8224+':'+_0x43564d+_0x4b5cd2(0x2c1)+_0x1fd449+')'),_0x2da8ca=connect({'hostname':_0x1c8224,'port':_0x43564d}),await Promise[_0x4b5cd2(0x297)]([_0x2da8ca[_0x4b5cd2(0x4fd)],new Promise((_0x471382,_0x3d0f1d)=>setTimeout(()=>_0x3d0f1d(new Error(_0x4b5cd2(0x2f1))),0x3e8))]);const _0x57dd60=_0x2da8ca[_0x4b5cd2(0x3b6)][_0x4b5cd2(0x48d)]();return await _0x57dd60[_0x4b5cd2(0x30a)](_0x1e3fd3),_0x57dd60[_0x4b5cd2(0x31d)](),console[_0x4b5cd2(0x282)](_0x4b5cd2(0x245)+_0x1c8224+':'+_0x43564d),缓存反代数组索引=_0x1fd449,_0x2da8ca;}catch(_0x19a14e){console['log'](_0x4b5cd2(0x2ad)+_0x1c8224+':'+_0x43564d+_0x4b5cd2(0x358)+_0x19a14e[_0x4b5cd2(0x3de)]);try{_0x2da8ca?.[_0x4b5cd2(0x2e4)]?.();}catch(_0x49ecfa){}continue;}}if(_0x628f64){_0x2da8ca=connect({'hostname':_0x4a71e5,'port':_0x544022});const _0x216e0c=_0x2da8ca[_0x4b5cd2(0x3b6)][_0x4b5cd2(0x48d)]();return await _0x216e0c['write'](_0x1e3fd3),_0x216e0c[_0x4b5cd2(0x31d)](),_0x2da8ca;}else{closeSocketQuietly(_0x5dd6f5);throw new Error('[反代连接]\x20所有反代连接失败,且未启用反代兜底,连接终止。');}}async function _0x1692de(){const _0x7b613a=_0x44c154;let _0x31c6f3;if(启用SOCKS5反代===_0x7b613a(0x1ad))console[_0x7b613a(0x282)](_0x7b613a(0x288)+_0x5d97f5+':'+_0x3312c9),_0x31c6f3=await socks5Connect(_0x5d97f5,_0x3312c9,_0x4e9c72);else{if(启用SOCKS5反代===_0x7b613a(0x4f9)||启用SOCKS5反代===_0x7b613a(0x19a))console[_0x7b613a(0x282)](_0x7b613a(0x2e5)+_0x5d97f5+':'+_0x3312c9),_0x31c6f3=await httpConnect(_0x5d97f5,_0x3312c9,_0x4e9c72);else{console[_0x7b613a(0x282)](_0x7b613a(0x4ef)+_0x5d97f5+':'+_0x3312c9);const _0x4b48fc=await 解析地址端口(反代IP,_0x5d97f5,_0x58512d);_0x31c6f3=await _0x3d8bbe(atob(_0x7b613a(0x346)),0x1,_0x4e9c72,_0x4b48fc,启用反代兜底);}}_0x158c73[_0x7b613a(0x319)]=_0x31c6f3,_0x31c6f3['closed'][_0x7b613a(0x42c)](()=>{})[_0x7b613a(0x46d)](()=>closeSocketQuietly(_0x5dd6f5)),connectStreams(_0x31c6f3,_0x5dd6f5,_0x34b235,null);}async function _0x243908(){const _0x3ddea7=_0x44c154;if(!_0x21afef)throw new Error('双层代理未配置');console[_0x3ddea7(0x282)](_0x3ddea7(0x2b8)+_0x21afef[_0x3ddea7(0x3c4)]+':'+_0x21afef[_0x3ddea7(0x3fe)]+'\x20连接到\x20'+_0x5d97f5+':'+_0x3312c9);const _0x585d7c=connect({'hostname':_0x21afef[_0x3ddea7(0x3c4)],'port':_0x21afef[_0x3ddea7(0x3fe)]}),_0x3bd1de=_0x585d7c[_0x3ddea7(0x3b6)][_0x3ddea7(0x48d)](),_0xec5b9c=_0x585d7c[_0x3ddea7(0x4f1)][_0x3ddea7(0x230)]();try{const _0x366bf5=_0x21afef[_0x3ddea7(0x286)]&&_0x21afef[_0x3ddea7(0x403)]?_0x3ddea7(0x4cb)+btoa(_0x21afef[_0x3ddea7(0x286)]+':'+_0x21afef['password'])+'\x0d\x0a':'',_0x1e598a=_0x3ddea7(0x42d)+_0x5d97f5+':'+_0x3312c9+_0x3ddea7(0x4e8)+_0x5d97f5+':'+_0x3312c9+'\x0d\x0a'+_0x366bf5+'User-Agent:\x20CFspider/1.8.3\x0d\x0aConnection:\x20keep-alive\x0d\x0a\x0d\x0a';await _0x3bd1de['write'](new TextEncoder()['encode'](_0x1e598a));let _0x4b81b8=new Uint8Array(0x0),_0x2a738e=-0x1,_0x4427c5=0x0;while(_0x2a738e===-0x1&&_0x4427c5<0x2000){const {done:_0x2f8b88,value:_0x1aa280}=await _0xec5b9c[_0x3ddea7(0x182)]();if(_0x2f8b88)throw new Error(_0x3ddea7(0x14e));_0x4b81b8=new Uint8Array([..._0x4b81b8,..._0x1aa280]),_0x4427c5=_0x4b81b8[_0x3ddea7(0x3ff)];for(let _0xce3e0e=0x0;_0xce3e0e<_0x4b81b8['length']-0x3;_0xce3e0e++){if(_0x4b81b8[_0xce3e0e]===0xd&&_0x4b81b8[_0xce3e0e+0x1]===0xa&&_0x4b81b8[_0xce3e0e+0x2]===0xd&&_0x4b81b8[_0xce3e0e+0x3]===0xa){_0x2a738e=_0xce3e0e+0x4;break;}}}if(_0x2a738e===-0x1)throw new Error(_0x3ddea7(0x3af));const _0x1cea68=new TextDecoder()['decode'](_0x4b81b8[_0x3ddea7(0x471)](0x0,_0x2a738e)),_0x483e1b=_0x1cea68['match'](/HTTP\/\d\.\d\s+(\d+)/),_0x4e1083=_0x483e1b?parseInt(_0x483e1b[0x1]):0x0;if(_0x4e1083<0xc8||_0x4e1083>=0x12c)throw new Error(_0x3ddea7(0x295)+_0x4e1083);return console['log'](_0x3ddea7(0x4a6)+_0x5d97f5+':'+_0x3312c9),await _0x3bd1de[_0x3ddea7(0x30a)](_0x4e9c72),_0x3bd1de[_0x3ddea7(0x31d)](),_0xec5b9c['releaseLock'](),_0x585d7c;}catch(_0x1e3650){try{_0x3bd1de['releaseLock']();}catch(_0x520e4c){}try{_0xec5b9c[_0x3ddea7(0x31d)]();}catch(_0x23168e){}try{_0x585d7c[_0x3ddea7(0x2e4)]();}catch(_0x1a830b){}throw _0x1e3650;}}const _0x52bf04=_0x15802c=>SOCKS5白名单[_0x44c154(0x25f)](_0x3beabd=>new RegExp('^'+_0x3beabd[_0x44c154(0x4c8)](/\*/g,'.*')+'$','i')['test'](_0x15802c));if(_0x21afef){console['log'](_0x44c154(0x152));try{const _0x26e1c1=await _0x243908();_0x158c73[_0x44c154(0x319)]=_0x26e1c1,_0x26e1c1[_0x44c154(0x4d8)][_0x44c154(0x42c)](()=>{})[_0x44c154(0x46d)](()=>closeSocketQuietly(_0x5dd6f5)),connectStreams(_0x26e1c1,_0x5dd6f5,_0x34b235,null);}catch(_0x55a82b){console[_0x44c154(0x282)](_0x44c154(0x2a3)+_0x55a82b[_0x44c154(0x3de)]+_0x44c154(0x234));try{await _0x1692de();}catch(_0x39ef16){throw _0x39ef16;}}}else{if(启用SOCKS5反代&&(启用SOCKS5全局反代||_0x52bf04(_0x5d97f5))){console[_0x44c154(0x282)]('[TCP转发]\x20启用\x20SOCKS5/HTTP\x20全局代理');try{await _0x1692de();}catch(_0xf6710f){throw _0xf6710f;}}else try{console[_0x44c154(0x282)]('[TCP转发]\x20尝试直连到:\x20'+_0x5d97f5+':'+_0x3312c9);const _0x1550e4=await _0x3d8bbe(_0x5d97f5,_0x3312c9,_0x4e9c72);_0x158c73[_0x44c154(0x319)]=_0x1550e4,connectStreams(_0x1550e4,_0x5dd6f5,_0x34b235,_0x1692de);}catch(_0x8f4b82){await _0x1692de();}}}async function forwardataudp(_0x12293f,_0xafe72c,_0x5916f3){const _0x1f8db9=_0x10737d;try{const _0x3c5538=connect({'hostname':'8.8.4.4','port':0x35});let _0x50919a=_0x5916f3;const _0x15ad2d=_0x3c5538[_0x1f8db9(0x3b6)][_0x1f8db9(0x48d)]();await _0x15ad2d['write'](_0x12293f),_0x15ad2d[_0x1f8db9(0x31d)](),await _0x3c5538['readable']['pipeTo'](new WritableStream({async 'write'(_0x5d222d){const _0x4de1f4=_0x1f8db9;if(_0xafe72c[_0x4de1f4(0x383)]===WebSocket[_0x4de1f4(0x1cf)]){if(_0x50919a){const _0x2c773e=new Uint8Array(_0x50919a['length']+_0x5d222d[_0x4de1f4(0x434)]);_0x2c773e[_0x4de1f4(0x4d2)](_0x50919a,0x0),_0x2c773e[_0x4de1f4(0x4d2)](_0x5d222d,_0x50919a['length']),_0xafe72c['send'](_0x2c773e['buffer']),_0x50919a=null;}else _0xafe72c['send'](_0x5d222d);}}}));}catch(_0x3c7543){}}function closeSocketQuietly(_0x44fd05){const _0x5cfbe5=_0x10737d;try{(_0x44fd05['readyState']===WebSocket['OPEN']||_0x44fd05[_0x5cfbe5(0x383)]===WebSocket[_0x5cfbe5(0x414)])&&_0x44fd05['close']();}catch(_0x5d9c4d){}}function formatIdentifier(_0xecb7fe,_0x946cae=0x0){const _0x295615=_0x10737d,_0x58790d=[..._0xecb7fe[_0x295615(0x471)](_0x946cae,_0x946cae+0x10)]['map'](_0x447848=>_0x447848[_0x295615(0x226)](0x10)['padStart'](0x2,'0'))[_0x295615(0x315)]('');return _0x58790d[_0x295615(0x1fd)](0x0,0x8)+'-'+_0x58790d[_0x295615(0x1fd)](0x8,0xc)+'-'+_0x58790d[_0x295615(0x1fd)](0xc,0x10)+'-'+_0x58790d['substring'](0x10,0x14)+'-'+_0x58790d[_0x295615(0x1fd)](0x14);}async function connectStreams(_0x6c3398,_0x49c5a9,_0x458e38,_0x4b3db5){const _0x590c51=_0x10737d;let _0x4d09b5=_0x458e38,_0x584454=![];await _0x6c3398['readable'][_0x590c51(0x3ed)](new WritableStream({async 'write'(_0x5ca907,_0x523c1d){const _0x10e9ae=_0x590c51;_0x584454=!![];if(_0x49c5a9[_0x10e9ae(0x383)]!==WebSocket[_0x10e9ae(0x1cf)])_0x523c1d[_0x10e9ae(0x1e8)](_0x10e9ae(0x324));if(_0x4d09b5){const _0x2e056a=new Uint8Array(_0x4d09b5[_0x10e9ae(0x3ff)]+_0x5ca907['byteLength']);_0x2e056a[_0x10e9ae(0x4d2)](_0x4d09b5,0x0),_0x2e056a[_0x10e9ae(0x4d2)](_0x5ca907,_0x4d09b5[_0x10e9ae(0x3ff)]),_0x49c5a9[_0x10e9ae(0x1bd)](_0x2e056a[_0x10e9ae(0x30f)]),_0x4d09b5=null;}else _0x49c5a9['send'](_0x5ca907);},'abort'(){}}))['catch'](_0x58dbb5=>{closeSocketQuietly(_0x49c5a9);}),!_0x584454&&_0x4b3db5&&await _0x4b3db5();}function makeReadableStr(_0x5d6340,_0x3bedbd){let _0x59f2bc=![];return new ReadableStream({'start'(_0x2de6d9){const _0x4e71e4=_0x1deb;_0x5d6340[_0x4e71e4(0x21d)](_0x4e71e4(0x3de),_0xc1a3ac=>{if(!_0x59f2bc)_0x2de6d9['enqueue'](_0xc1a3ac['data']);}),_0x5d6340[_0x4e71e4(0x21d)](_0x4e71e4(0x2e4),()=>{const _0x3caa6b=_0x4e71e4;!_0x59f2bc&&(closeSocketQuietly(_0x5d6340),_0x2de6d9[_0x3caa6b(0x2e4)]());}),_0x5d6340[_0x4e71e4(0x21d)](_0x4e71e4(0x1e8),_0x15f420=>_0x2de6d9[_0x4e71e4(0x1e8)](_0x15f420));const {earlyData:_0x163d63,error:_0x459375}=base64ToArray(_0x3bedbd);if(_0x459375)_0x2de6d9['error'](_0x459375);else{if(_0x163d63)_0x2de6d9[_0x4e71e4(0x444)](_0x163d63);}},'cancel'(){_0x59f2bc=!![],closeSocketQuietly(_0x5d6340);}});}function isSpeedTestSite(_0x542714){const _0x1f3ca1=_0x10737d,_0x220e40=[atob('c3BlZWQuY2xvdWRmbGFyZS5jb20=')];if(_0x220e40[_0x1f3ca1(0x153)](_0x542714))return!![];for(const _0x2419b6 of _0x220e40){if(_0x542714[_0x1f3ca1(0x15f)]('.'+_0x2419b6)||_0x542714===_0x2419b6)return!![];}return![];}function base64ToArray(_0x9d3b4c){const _0x2c6363=_0x10737d;if(!_0x9d3b4c)return{'error':null};try{const _0x21fd24=atob(_0x9d3b4c[_0x2c6363(0x4c8)](/-/g,'+')['replace'](/_/g,'/')),_0x52e697=new Uint8Array(_0x21fd24['length']);for(let _0x56d3bf=0x0;_0x56d3bf<_0x21fd24[_0x2c6363(0x3ff)];_0x56d3bf++){_0x52e697[_0x56d3bf]=_0x21fd24[_0x2c6363(0x19d)](_0x56d3bf);}return{'earlyData':_0x52e697[_0x2c6363(0x30f)],'error':null};}catch(_0x495870){return{'error':_0x495870};}}function _0x1deb(_0x248a62,_0x5ac201){const _0x1295a0=_0x1295();return _0x1deb=function(_0x1debf0,_0x34b1bd){_0x1debf0=_0x1debf0-0x146;let _0x91df3a=_0x1295a0[_0x1debf0];return _0x91df3a;},_0x1deb(_0x248a62,_0x5ac201);}async function socks5Connect(_0x5635e9,_0x2a8368,_0x113547){const _0x5a60be=_0x10737d,{username:_0x468f15,password:_0x4ec704,hostname:_0x45aa82,port:_0x5bb6e5}=parsedSocks5Address,_0x120964=connect({'hostname':_0x45aa82,'port':_0x5bb6e5}),_0x35db72=_0x120964['writable'][_0x5a60be(0x48d)](),_0x22fb33=_0x120964[_0x5a60be(0x4f1)][_0x5a60be(0x230)]();try{const _0x544d6e=_0x468f15&&_0x4ec704?new Uint8Array([0x5,0x2,0x0,0x2]):new Uint8Array([0x5,0x1,0x0]);await _0x35db72[_0x5a60be(0x30a)](_0x544d6e);let _0x2fe83b=await _0x22fb33['read']();if(_0x2fe83b[_0x5a60be(0x3f6)]||_0x2fe83b['value'][_0x5a60be(0x434)]<0x2)throw new Error(_0x5a60be(0x27a));const _0x5e4d93=new Uint8Array(_0x2fe83b[_0x5a60be(0x3dc)])[0x1];if(_0x5e4d93===0x2){if(!_0x468f15||!_0x4ec704)throw new Error(_0x5a60be(0x306));const _0x125d43=new TextEncoder()[_0x5a60be(0x4b7)](_0x468f15),_0x2ca305=new TextEncoder()[_0x5a60be(0x4b7)](_0x4ec704),_0x4c5117=new Uint8Array([0x1,_0x125d43['length'],..._0x125d43,_0x2ca305[_0x5a60be(0x3ff)],..._0x2ca305]);await _0x35db72[_0x5a60be(0x30a)](_0x4c5117),_0x2fe83b=await _0x22fb33[_0x5a60be(0x182)]();if(_0x2fe83b['done']||new Uint8Array(_0x2fe83b[_0x5a60be(0x3dc)])[0x1]!==0x0)throw new Error(_0x5a60be(0x2bf));}else{if(_0x5e4d93!==0x0)throw new Error(_0x5a60be(0x2cc)+_0x5e4d93);}const _0x2d7e39=new TextEncoder()['encode'](_0x5635e9),_0x371cbc=new Uint8Array([0x5,0x1,0x0,0x3,_0x2d7e39[_0x5a60be(0x3ff)],..._0x2d7e39,_0x2a8368>>0x8,_0x2a8368&0xff]);await _0x35db72[_0x5a60be(0x30a)](_0x371cbc),_0x2fe83b=await _0x22fb33[_0x5a60be(0x182)]();if(_0x2fe83b[_0x5a60be(0x3f6)]||new Uint8Array(_0x2fe83b['value'])[0x1]!==0x0)throw new Error(_0x5a60be(0x17f));return await _0x35db72[_0x5a60be(0x30a)](_0x113547),_0x35db72['releaseLock'](),_0x22fb33['releaseLock'](),_0x120964;}catch(_0x370326){try{_0x35db72[_0x5a60be(0x31d)]();}catch(_0x3bf3a3){}try{_0x22fb33[_0x5a60be(0x31d)]();}catch(_0x3391f5){}try{_0x120964[_0x5a60be(0x2e4)]();}catch(_0x18afc7){}throw _0x370326;}}async function httpConnect(_0x24e6eb,_0x2bf20e,_0x251708){const _0xfd4b47=_0x10737d,{username:_0x567f6e,password:_0x5a0665,hostname:_0xb842cf,port:_0x4be64f}=parsedSocks5Address,_0xdabb29=connect({'hostname':_0xb842cf,'port':_0x4be64f}),_0x4413f3=_0xdabb29[_0xfd4b47(0x3b6)][_0xfd4b47(0x48d)](),_0x13a685=_0xdabb29[_0xfd4b47(0x4f1)][_0xfd4b47(0x230)]();try{const _0x18fd1b=_0x567f6e&&_0x5a0665?_0xfd4b47(0x4cb)+btoa(_0x567f6e+':'+_0x5a0665)+'\x0d\x0a':'',_0x21b6b1=_0xfd4b47(0x42d)+_0x24e6eb+':'+_0x2bf20e+_0xfd4b47(0x4e8)+_0x24e6eb+':'+_0x2bf20e+'\x0d\x0a'+_0x18fd1b+'User-Agent:\x20Mozilla/5.0\x0d\x0aConnection:\x20keep-alive\x0d\x0a\x0d\x0a';await _0x4413f3[_0xfd4b47(0x30a)](new TextEncoder()[_0xfd4b47(0x4b7)](_0x21b6b1));let _0x4031c7=new Uint8Array(0x0),_0x194244=-0x1,_0x4d465e=0x0;while(_0x194244===-0x1&&_0x4d465e<0x2000){const {done:_0x20d33b,value:_0x56a4c3}=await _0x13a685[_0xfd4b47(0x182)]();if(_0x20d33b)throw new Error('Connection\x20closed\x20before\x20receiving\x20HTTP\x20response');_0x4031c7=new Uint8Array([..._0x4031c7,..._0x56a4c3]),_0x4d465e=_0x4031c7[_0xfd4b47(0x3ff)];const _0x207240=_0x4031c7[_0xfd4b47(0x19b)]((_0x276f85,_0x2aac84)=>_0x2aac84<_0x4031c7['length']-0x3&&_0x4031c7[_0x2aac84]===0xd&&_0x4031c7[_0x2aac84+0x1]===0xa&&_0x4031c7[_0x2aac84+0x2]===0xd&&_0x4031c7[_0x2aac84+0x3]===0xa);if(_0x207240!==-0x1)_0x194244=_0x207240+0x4;}if(_0x194244===-0x1)throw new Error(_0xfd4b47(0x345));const _0x53f1ea=parseInt(new TextDecoder()[_0xfd4b47(0x453)](_0x4031c7[_0xfd4b47(0x471)](0x0,_0x194244))[_0xfd4b47(0x205)]('\x0d\x0a')[0x0][_0xfd4b47(0x4ff)](/HTTP\/\d\.\d\s+(\d+)/)[0x1]);if(_0x53f1ea<0xc8||_0x53f1ea>=0x12c)throw new Error(_0xfd4b47(0x1e3)+_0x53f1ea);return await _0x4413f3[_0xfd4b47(0x30a)](_0x251708),_0x4413f3[_0xfd4b47(0x31d)](),_0x13a685[_0xfd4b47(0x31d)](),_0xdabb29;}catch(_0x27156e){try{_0x4413f3[_0xfd4b47(0x31d)]();}catch(_0x223659){}try{_0x13a685[_0xfd4b47(0x31d)]();}catch(_0x3ffdea){}try{_0xdabb29['close']();}catch(_0x57deec){}throw _0x27156e;}}function Clash订阅配置文件热补丁(_0x3d9f2c,_0x20fed1=null,_0x1ef260=![],_0x49d477=[]){const _0x169825=_0x10737d;let _0x2021ff=_0x3d9f2c[_0x169825(0x4c8)](/mode:\s*Rule\b/g,_0x169825(0x1ca));const _0x3a09a7='dns:\x0a\x20\x20enable:\x20true\x0a\x20\x20default-nameserver:\x0a\x20\x20\x20\x20-\x20223.5.5.5\x0a\x20\x20\x20\x20-\x20119.29.29.29\x0a\x20\x20\x20\x20-\x20114.114.114.114\x0a\x20\x20use-hosts:\x20true\x0a\x20\x20nameserver:\x0a\x20\x20\x20\x20-\x20https://sm2.doh.pub/dns-query\x0a\x20\x20\x20\x20-\x20https://dns.alidns.com/dns-query\x0a\x20\x20fallback:\x0a\x20\x20\x20\x20-\x208.8.4.4\x0a\x20\x20\x20\x20-\x20101.101.101.101\x0a\x20\x20\x20\x20-\x20208.67.220.220\x0a\x20\x20fallback-filter:\x0a\x20\x20\x20\x20geoip:\x20true\x0a\x20\x20\x20\x20domain:\x20[+.google.com,\x20+.facebook.com,\x20+.youtube.com]\x0a\x20\x20\x20\x20ipcidr:\x0a\x20\x20\x20\x20\x20\x20-\x20240.0.0.0/4\x0a\x20\x20\x20\x20\x20\x20-\x200.0.0.0/32\x0a\x20\x20\x20\x20geoip-code:\x20CN\x0a',_0x356e47=/^dns:\s*(?:\n|$)/m[_0x169825(0x49f)](_0x2021ff);!_0x356e47&&(_0x2021ff=_0x3a09a7+_0x2021ff);if(_0x1ef260&&_0x49d477[_0x169825(0x3ff)]>0x0){const _0x25f7ff=_0x49d477[_0x169825(0x202)](_0x445a53=>'\x20\x20\x20\x20\x22'+_0x445a53+_0x169825(0x18f)+ECH_DOH)[_0x169825(0x315)]('\x0a'),_0x41555e=/^\s{2}nameserver-policy:\s*(?:\n|$)/m[_0x169825(0x49f)](_0x2021ff);if(_0x41555e)_0x2021ff=_0x2021ff[_0x169825(0x4c8)](/^(\s{2}nameserver-policy:\s*\n)/m,'$1'+_0x25f7ff+'\x0a');else{const _0x1f57b3=_0x2021ff[_0x169825(0x205)]('\x0a');let _0x4cc362=-0x1,_0x5ea2e0=![];for(let _0x481898=0x0;_0x481898<_0x1f57b3['length'];_0x481898++){const _0x3406ac=_0x1f57b3[_0x481898];if(/^dns:\s*$/['test'](_0x3406ac)){_0x5ea2e0=!![];continue;}if(_0x5ea2e0){if(/^[a-zA-Z]/[_0x169825(0x49f)](_0x3406ac)){_0x4cc362=_0x481898;break;}}}const _0x34ab11='\x20\x20nameserver-policy:\x0a'+_0x25f7ff;_0x4cc362!==-0x1?_0x1f57b3[_0x169825(0x389)](_0x4cc362,0x0,_0x34ab11):_0x1f57b3['push'](_0x34ab11),_0x2021ff=_0x1f57b3['join']('\x0a');}}if(!_0x20fed1||!_0x1ef260)return _0x2021ff;const _0x2cc967=_0x2021ff[_0x169825(0x205)]('\x0a'),_0x26847c=[];let _0x2fbf6e=0x0;while(_0x2fbf6e<_0x2cc967[_0x169825(0x3ff)]){const _0x2ac6de=_0x2cc967[_0x2fbf6e],_0x4e2dc7=_0x2ac6de[_0x169825(0x4d1)]();if(_0x4e2dc7[_0x169825(0x190)](_0x169825(0x1c9))&&(_0x4e2dc7[_0x169825(0x153)](_0x169825(0x4b8))||_0x4e2dc7[_0x169825(0x153)](_0x169825(0x4ba)))){let _0x3f54f6=_0x2ac6de,_0x18d5fb=(_0x2ac6de[_0x169825(0x4ff)](/\{/g)||[])[_0x169825(0x3ff)]-(_0x2ac6de['match'](/\}/g)||[])[_0x169825(0x3ff)];while(_0x18d5fb>0x0&&_0x2fbf6e+0x1<_0x2cc967[_0x169825(0x3ff)]){_0x2fbf6e++,_0x3f54f6+='\x0a'+_0x2cc967[_0x2fbf6e],_0x18d5fb+=(_0x2cc967[_0x2fbf6e][_0x169825(0x4ff)](/\{/g)||[])[_0x169825(0x3ff)]-(_0x2cc967[_0x2fbf6e][_0x169825(0x4ff)](/\}/g)||[])[_0x169825(0x3ff)];}const _0x20a240=_0x3f54f6['match'](/type:\s*(\w+)/),_0x503d1b=_0x20a240?_0x20a240[0x1]:_0x169825(0x2ae);let _0x1a49d6=_0x169825(0x25e);_0x503d1b===_0x169825(0x304)&&(_0x1a49d6=_0x169825(0x403));const _0x4b6cc2=new RegExp(_0x1a49d6+_0x169825(0x174)),_0x174012=_0x3f54f6[_0x169825(0x4ff)](_0x4b6cc2);_0x174012&&_0x174012[0x1]['trim']()===_0x20fed1[_0x169825(0x4d1)]()&&(_0x3f54f6=_0x3f54f6[_0x169825(0x4c8)](/\}(\s*)$/,',\x20ech-opts:\x20{enable:\x20true}}$1')),_0x26847c[_0x169825(0x14c)](_0x3f54f6),_0x2fbf6e++;}else{if(_0x4e2dc7[_0x169825(0x190)]('-\x20name:')){let _0x3889e0=[_0x2ac6de],_0x2983aa=_0x2ac6de[_0x169825(0x236)](/\S/),_0x4e4ecb=_0x2983aa+0x2;_0x2fbf6e++;while(_0x2fbf6e<_0x2cc967[_0x169825(0x3ff)]){const _0x36f699=_0x2cc967[_0x2fbf6e],_0x5d5c99=_0x36f699[_0x169825(0x4d1)]();if(!_0x5d5c99){_0x3889e0['push'](_0x36f699),_0x2fbf6e++;break;}const _0x443238=_0x36f699[_0x169825(0x236)](/\S/);if(_0x443238<=_0x2983aa&&_0x5d5c99[_0x169825(0x190)]('-\x20'))break;if(_0x443238<_0x2983aa&&_0x5d5c99)break;_0x3889e0[_0x169825(0x14c)](_0x36f699),_0x2fbf6e++;}const _0x4fc71f=_0x3889e0[_0x169825(0x315)]('\x0a'),_0x4f8532=_0x4fc71f[_0x169825(0x4ff)](/type:\s*(\w+)/),_0x31cb08=_0x4f8532?_0x4f8532[0x1]:_0x169825(0x2ae);let _0x3d1173=_0x169825(0x25e);_0x31cb08==='trojan'&&(_0x3d1173=_0x169825(0x403));const _0x2f2579=new RegExp(_0x3d1173+_0x169825(0x2b1)),_0x2fdded=_0x4fc71f['match'](_0x2f2579);if(_0x2fdded&&_0x2fdded[0x1][_0x169825(0x4d1)]()===_0x20fed1[_0x169825(0x4d1)]()){let _0x52c232=-0x1;for(let _0x16fd69=_0x3889e0[_0x169825(0x3ff)]-0x1;_0x16fd69>=0x0;_0x16fd69--){if(_0x3889e0[_0x16fd69]['trim']()){_0x52c232=_0x16fd69;break;}}if(_0x52c232>=0x0){const _0x13fe3d='\x20'[_0x169825(0x36b)](_0x4e4ecb);_0x3889e0['splice'](_0x52c232+0x1,0x0,_0x13fe3d+_0x169825(0x1b4),_0x13fe3d+_0x169825(0x401));}}_0x26847c[_0x169825(0x14c)](..._0x3889e0);}else _0x26847c[_0x169825(0x14c)](_0x2ac6de),_0x2fbf6e++;}}return _0x26847c['join']('\x0a');}function Singbox订阅配置文件热补丁(_0x2e02e6,_0xc405b0=null,_0x327d27=_0x10737d(0x2d8),_0x3b165f=null){const _0x48d428=_0x10737d;try{let _0x1ba6d0=JSON['parse'](_0x2e02e6);Array[_0x48d428(0x4bb)](_0x1ba6d0[_0x48d428(0x1bf)])&&_0x1ba6d0[_0x48d428(0x1bf)][_0x48d428(0x1f9)](_0x46e8b3=>{const _0x508ca4=_0x48d428;if(_0x46e8b3[_0x508ca4(0x353)]===_0x508ca4(0x237)){const _0x542e65=[];if(_0x46e8b3[_0x508ca4(0x3a1)])_0x542e65[_0x508ca4(0x14c)](_0x46e8b3[_0x508ca4(0x3a1)]);if(_0x46e8b3['inet6_address'])_0x542e65[_0x508ca4(0x14c)](_0x46e8b3[_0x508ca4(0x332)]);_0x542e65[_0x508ca4(0x3ff)]>0x0&&(_0x46e8b3['address']=_0x542e65,delete _0x46e8b3[_0x508ca4(0x3a1)],delete _0x46e8b3[_0x508ca4(0x332)]);const _0x1c53d7=[];if(Array['isArray'](_0x46e8b3[_0x508ca4(0x413)]))_0x1c53d7[_0x508ca4(0x14c)](..._0x46e8b3[_0x508ca4(0x413)]);if(Array[_0x508ca4(0x4bb)](_0x46e8b3[_0x508ca4(0x44e)]))_0x1c53d7[_0x508ca4(0x14c)](..._0x46e8b3[_0x508ca4(0x44e)]);_0x1c53d7['length']>0x0&&(_0x46e8b3['route_address']=_0x1c53d7,delete _0x46e8b3[_0x508ca4(0x413)],delete _0x46e8b3[_0x508ca4(0x44e)]);const _0x261102=[];if(Array[_0x508ca4(0x4bb)](_0x46e8b3[_0x508ca4(0x24c)]))_0x261102[_0x508ca4(0x14c)](..._0x46e8b3[_0x508ca4(0x24c)]);if(Array['isArray'](_0x46e8b3[_0x508ca4(0x1bc)]))_0x261102['push'](..._0x46e8b3[_0x508ca4(0x1bc)]);_0x261102[_0x508ca4(0x3ff)]>0x0&&(_0x46e8b3['route_exclude_address']=_0x261102,delete _0x46e8b3[_0x508ca4(0x24c)],delete _0x46e8b3[_0x508ca4(0x1bc)]);}});const _0xcdbd6e=new Map(),_0x2c658c=(_0x3916ed,_0x2bc2a3=![])=>{const _0x273f27=_0x48d428;if(!Array[_0x273f27(0x4bb)](_0x3916ed))return;_0x3916ed[_0x273f27(0x1f9)](_0x575a80=>{const _0x299aec=_0x273f27;if(_0x575a80['geosite']){const _0x34c2de=Array[_0x299aec(0x4bb)](_0x575a80[_0x299aec(0x184)])?_0x575a80[_0x299aec(0x184)]:[_0x575a80['geosite']];_0x575a80['rule_set']=_0x34c2de[_0x299aec(0x202)](_0x2f6480=>{const _0x52a3c5=_0x299aec,_0x203f09=_0x52a3c5(0x191)+_0x2f6480;return!_0xcdbd6e[_0x52a3c5(0x3d5)](_0x203f09)&&_0xcdbd6e[_0x52a3c5(0x4d2)](_0x203f09,{'tag':_0x203f09,'type':_0x52a3c5(0x503),'format':_0x52a3c5(0x276),'url':_0x52a3c5(0x261)+_0x2f6480+_0x52a3c5(0x255),'download_detour':'DIRECT'}),_0x203f09;}),delete _0x575a80[_0x299aec(0x184)];}if(_0x575a80[_0x299aec(0x1e2)]){const _0x5f52dc=Array[_0x299aec(0x4bb)](_0x575a80[_0x299aec(0x1e2)])?_0x575a80[_0x299aec(0x1e2)]:[_0x575a80[_0x299aec(0x1e2)]];_0x575a80['rule_set']=_0x575a80[_0x299aec(0x427)]||[],_0x5f52dc[_0x299aec(0x1f9)](_0x512bdc=>{const _0x254e1f=_0x299aec,_0x541bce=_0x254e1f(0x38b)+_0x512bdc;!_0xcdbd6e[_0x254e1f(0x3d5)](_0x541bce)&&_0xcdbd6e[_0x254e1f(0x4d2)](_0x541bce,{'tag':_0x541bce,'type':_0x254e1f(0x503),'format':_0x254e1f(0x276),'url':_0x254e1f(0x2b7)+_0x512bdc+_0x254e1f(0x255),'download_detour':_0x254e1f(0x507)}),_0x575a80[_0x254e1f(0x427)]['push'](_0x541bce);}),delete _0x575a80[_0x299aec(0x1e2)];}const _0x33d6cc=_0x2bc2a3?_0x299aec(0x36f):_0x299aec(0x475),_0x5ac6fa=String(_0x575a80[_0x33d6cc])[_0x299aec(0x3cf)]();(_0x5ac6fa==='REJECT'||_0x5ac6fa===_0x299aec(0x46a))&&(_0x575a80[_0x299aec(0x381)]=_0x299aec(0x1a4),_0x575a80[_0x299aec(0x1a2)]='drop',delete _0x575a80[_0x33d6cc]);});};if(_0x1ba6d0[_0x48d428(0x4a4)]&&_0x1ba6d0[_0x48d428(0x4a4)]['rules'])_0x2c658c(_0x1ba6d0[_0x48d428(0x4a4)]['rules'],!![]);if(_0x1ba6d0[_0x48d428(0x4fc)]&&_0x1ba6d0[_0x48d428(0x4fc)][_0x48d428(0x28c)])_0x2c658c(_0x1ba6d0['route'][_0x48d428(0x28c)],![]);if(_0xcdbd6e['size']>0x0){if(!_0x1ba6d0[_0x48d428(0x4fc)])_0x1ba6d0[_0x48d428(0x4fc)]={};_0x1ba6d0['route'][_0x48d428(0x427)]=Array['from'](_0xcdbd6e[_0x48d428(0x302)]());}if(!_0x1ba6d0['outbounds'])_0x1ba6d0['outbounds']=[];_0x1ba6d0[_0x48d428(0x385)]=_0x1ba6d0[_0x48d428(0x385)]['filter'](_0x21ddd5=>{const _0x2a8a91=_0x48d428;if(_0x21ddd5[_0x2a8a91(0x32f)]===_0x2a8a91(0x4aa)||_0x21ddd5['tag']==='block')return![];return!![];});const _0x437af4=new Set(_0x1ba6d0[_0x48d428(0x385)][_0x48d428(0x202)](_0x1c3263=>_0x1c3263['tag']));!_0x437af4[_0x48d428(0x3d5)](_0x48d428(0x507))&&(_0x1ba6d0[_0x48d428(0x385)]['push']({'type':_0x48d428(0x285),'tag':_0x48d428(0x507)}),_0x437af4['add']('DIRECT'));if(_0x1ba6d0[_0x48d428(0x4a4)]&&_0x1ba6d0['dns'][_0x48d428(0x376)]){const _0x23cb0b=new Set(_0x1ba6d0[_0x48d428(0x4a4)]['servers'][_0x48d428(0x202)](_0x49c8b4=>_0x49c8b4[_0x48d428(0x32f)]));_0x1ba6d0['dns'][_0x48d428(0x28c)]&&_0x1ba6d0[_0x48d428(0x4a4)][_0x48d428(0x28c)][_0x48d428(0x1f9)](_0x2a48fb=>{const _0x286480=_0x48d428;if(_0x2a48fb[_0x286480(0x36f)]&&!_0x23cb0b[_0x286480(0x3d5)](_0x2a48fb[_0x286480(0x36f)])){if(_0x2a48fb['server']==='dns_block'&&_0x23cb0b[_0x286480(0x3d5)](_0x286480(0x1c3)))_0x2a48fb[_0x286480(0x36f)]=_0x286480(0x1c3);else _0x2a48fb['server']['toLowerCase']()['includes'](_0x286480(0x1c3))&&!_0x23cb0b[_0x286480(0x3d5)](_0x2a48fb['server'])&&(_0x1ba6d0['dns'][_0x286480(0x376)]['push']({'tag':_0x2a48fb[_0x286480(0x36f)],'address':_0x286480(0x17b)}),_0x23cb0b[_0x286480(0x4c9)](_0x2a48fb[_0x286480(0x36f)]));}});}return _0x1ba6d0[_0x48d428(0x385)][_0x48d428(0x1f9)](_0x25ea72=>{const _0x38353f=_0x48d428;if(_0x25ea72[_0x38353f(0x353)]===_0x38353f(0x327)||_0x25ea72[_0x38353f(0x353)]==='urltest'){if(Array['isArray'](_0x25ea72[_0x38353f(0x385)])){_0x25ea72[_0x38353f(0x385)]=_0x25ea72[_0x38353f(0x385)][_0x38353f(0x464)](_0x5b1726=>{const _0x1a8d0f=_0x38353f,_0x223f1b=_0x5b1726[_0x1a8d0f(0x3cf)]();return _0x437af4[_0x1a8d0f(0x3d5)](_0x5b1726)&&_0x223f1b!==_0x1a8d0f(0x4aa)&&_0x223f1b!==_0x1a8d0f(0x46a);});if(_0x25ea72[_0x38353f(0x385)]['length']===0x0)_0x25ea72[_0x38353f(0x385)]['push'](_0x38353f(0x507));}}}),_0xc405b0&&_0x1ba6d0[_0x48d428(0x385)][_0x48d428(0x1f9)](_0x5ec107=>{const _0xf6fa6b=_0x48d428;(_0x5ec107[_0xf6fa6b(0x25e)]&&_0x5ec107[_0xf6fa6b(0x25e)]===_0xc405b0||_0x5ec107['password']&&_0x5ec107['password']===_0xc405b0)&&(!_0x5ec107[_0xf6fa6b(0x2ba)]&&(_0x5ec107[_0xf6fa6b(0x2ba)]={'enabled':!![]}),_0x327d27&&(_0x5ec107[_0xf6fa6b(0x2ba)]['utls']={'enabled':!![],'fingerprint':_0x327d27}),_0x3b165f&&(_0x5ec107[_0xf6fa6b(0x2ba)]['ech']={'enabled':!![],'config':_0xf6fa6b(0x3b5)+_0x3b165f+'\x0a-----END\x20ECH\x20CONFIGS-----'}));}),JSON[_0x48d428(0x38d)](_0x1ba6d0,null,0x2);}catch(_0x3f75cb){return console[_0x48d428(0x1e8)](_0x48d428(0x36c),_0x3f75cb),JSON['stringify'](JSON[_0x48d428(0x2b9)](_0x2e02e6),null,0x2);}}function Surge订阅配置文件热补丁(_0x4c017d,_0xe69fa1,_0x543672){const _0x178e57=_0x10737d,_0x397293=_0x4c017d[_0x178e57(0x153)]('\x0d\x0a')?_0x4c017d[_0x178e57(0x205)]('\x0d\x0a'):_0x4c017d[_0x178e57(0x205)]('\x0a');let _0x58f3b3='';const _0x4e98ef=_0x543672[_0x178e57(0x408)]?_0x543672[_0x178e57(0x3d8)]+_0x178e57(0x175):_0x543672['PATH'];for(let _0x46121d of _0x397293){if(_0x46121d[_0x178e57(0x153)]('=\x20tro'+'jan,')&&!_0x46121d[_0x178e57(0x153)]('ws=true')&&!_0x46121d['includes'](_0x178e57(0x2bc))){const _0x142148=_0x46121d['split'](_0x178e57(0x384))[0x1][_0x178e57(0x205)](',')[0x0],_0x45a5bc=_0x178e57(0x384)+_0x142148+',\x20skip-cert-verify='+_0x543672[_0x178e57(0x3be)],_0x26939b=_0x178e57(0x384)+_0x142148+_0x178e57(0x2d3)+_0x543672[_0x178e57(0x3be)]+',\x20ws=true,\x20ws-path='+_0x4e98ef+',\x20ws-headers=Host:\x22'+_0x142148+'\x22';_0x58f3b3+=_0x46121d[_0x178e57(0x4c8)](new RegExp(_0x45a5bc,'g'),_0x26939b)['replace']('[','')[_0x178e57(0x4c8)](']','')+'\x0a';}else _0x58f3b3+=_0x46121d+'\x0a';}return _0x58f3b3=_0x178e57(0x3e3)+_0xe69fa1+'\x20interval='+_0x543672[_0x178e57(0x3d2)][_0x178e57(0x41d)]*0x3c*0x3c+'\x20strict=false'+_0x58f3b3['substring'](_0x58f3b3['indexOf']('\x0a')),_0x58f3b3;}async function 请求日志记录(_0x1cc103,_0x51aa6f,_0x2d60ef,_0x400efa=_0x10737d(0x1e0),_0x2f7e43){const _0x1c6fc9=_0x10737d,_0xd385e7=0x4;try{const _0x2af051=new Date(),_0x15e0aa={'TYPE':_0x400efa,'IP':_0x2d60ef,'ASN':'AS'+(_0x51aa6f['cf']['asn']||'0')+'\x20'+(_0x51aa6f['cf']['asOrganization']||'Unknown'),'CC':(_0x51aa6f['cf']['country']||_0x1c6fc9(0x46c))+'\x20'+(_0x51aa6f['cf'][_0x1c6fc9(0x3a2)]||_0x1c6fc9(0x46c)),'URL':_0x51aa6f[_0x1c6fc9(0x42f)],'UA':_0x51aa6f[_0x1c6fc9(0x3dd)][_0x1c6fc9(0x198)](_0x1c6fc9(0x16b))||_0x1c6fc9(0x41c),'TIME':_0x2af051[_0x1c6fc9(0x24d)]()};let _0x1cf085=[];const _0x16e0df=await _0x1cc103['KV'][_0x1c6fc9(0x198)](_0x1c6fc9(0x4eb));if(_0x16e0df)try{_0x1cf085=JSON[_0x1c6fc9(0x2b9)](_0x16e0df);if(!Array[_0x1c6fc9(0x4bb)](_0x1cf085))_0x1cf085=[_0x15e0aa];else{if(_0x400efa!=='Get_SUB'){const _0x283334=_0x2af051[_0x1c6fc9(0x24d)]()-0x1e*0x3c*0x3e8;if(_0x1cf085[_0x1c6fc9(0x25f)](_0x58724f=>_0x58724f[_0x1c6fc9(0x4a3)]!==_0x1c6fc9(0x1e0)&&_0x58724f['IP']===_0x2d60ef&&_0x58724f[_0x1c6fc9(0x4c5)]===_0x51aa6f['url']&&_0x58724f['UA']===(_0x51aa6f[_0x1c6fc9(0x3dd)][_0x1c6fc9(0x198)](_0x1c6fc9(0x16b))||_0x1c6fc9(0x41c))&&_0x58724f[_0x1c6fc9(0x47c)]>=_0x283334))return;_0x1cf085[_0x1c6fc9(0x14c)](_0x15e0aa);while(JSON[_0x1c6fc9(0x38d)](_0x1cf085,null,0x2)['length']>_0xd385e7*0x400*0x400&&_0x1cf085[_0x1c6fc9(0x3ff)]>0x0)_0x1cf085['shift']();}else{_0x1cf085[_0x1c6fc9(0x14c)](_0x15e0aa);while(JSON[_0x1c6fc9(0x38d)](_0x1cf085,null,0x2)[_0x1c6fc9(0x3ff)]>_0xd385e7*0x400*0x400&&_0x1cf085[_0x1c6fc9(0x3ff)]>0x0)_0x1cf085[_0x1c6fc9(0x2df)]();}}if(_0x2f7e43['TG']['启用'])try{const _0x43b689=await _0x1cc103['KV'][_0x1c6fc9(0x198)](_0x1c6fc9(0x38e)),_0x1d50f3=JSON[_0x1c6fc9(0x2b9)](_0x43b689);await sendMessage(_0x1d50f3[_0x1c6fc9(0x489)],_0x1d50f3[_0x1c6fc9(0x50a)],_0x15e0aa,_0x2f7e43);}catch(_0x4bdc6c){console['error'](_0x1c6fc9(0x41b)+_0x4bdc6c[_0x1c6fc9(0x3de)]);}}catch(_0x4f16a9){_0x1cf085=[_0x15e0aa];}else _0x1cf085=[_0x15e0aa];await _0x1cc103['KV']['put'](_0x1c6fc9(0x4eb),JSON[_0x1c6fc9(0x38d)](_0x1cf085,null,0x2));}catch(_0x465054){console['error'](_0x1c6fc9(0x421)+_0x465054['message']);}}async function sendMessage(_0x46413d,_0x4ae5a5,_0x512a90,_0x4deb92){const _0x5c9c11=_0x10737d;if(!_0x46413d||!_0x4ae5a5)return;try{const _0x2033cd=new Date(_0x512a90['TIME'])[_0x5c9c11(0x51f)](_0x5c9c11(0x1ce),{'timeZone':_0x5c9c11(0x394)}),_0x506403=new URL(_0x512a90[_0x5c9c11(0x4c5)]),_0x3a4725=_0x5c9c11(0x4a9)+_0x4deb92[_0x5c9c11(0x3d2)][_0x5c9c11(0x1f0)]+_0x5c9c11(0x440)+(_0x5c9c11(0x3ab)+_0x512a90['TYPE']+'\x0a')+(_0x5c9c11(0x162)+_0x512a90['IP']+_0x5c9c11(0x446))+(_0x5c9c11(0x158)+_0x512a90['CC']+'\x0a')+(_0x5c9c11(0x4c3)+_0x512a90['ASN']+'\x0a')+(_0x5c9c11(0x42b)+_0x506403['host']+_0x5c9c11(0x446))+(_0x5c9c11(0x419)+(_0x506403['pathname']+_0x506403['search'])+_0x5c9c11(0x446))+(_0x5c9c11(0x379)+_0x512a90['UA']+_0x5c9c11(0x446))+(_0x5c9c11(0x514)+_0x2033cd+'\x0a')+(''+(_0x4deb92['CF']['Usage'][_0x5c9c11(0x1b1)]?_0x5c9c11(0x177)+_0x4deb92['CF']['Usage'][_0x5c9c11(0x305)]+_0x5c9c11(0x373)+(_0x4deb92['CF']['Usage'][_0x5c9c11(0x305)]/0x186a0*0x64)[_0x5c9c11(0x445)](0x2)+_0x5c9c11(0x509):'')),_0x5a0fb7=_0x5c9c11(0x378)+_0x46413d+'/sendMessage?chat_id='+_0x4ae5a5+_0x5c9c11(0x25a)+encodeURIComponent(_0x3a4725);return fetch(_0x5a0fb7,{'method':_0x5c9c11(0x223),'headers':{'Accept':'text/html,application/xhtml+xml,application/xml;','Accept-Encoding':_0x5c9c11(0x37f),'User-Agent':_0x512a90['UA']||_0x5c9c11(0x41c)}});}catch(_0x74f82b){console['error'](_0x5c9c11(0x44c),_0x74f82b);}}function 掩码敏感信息(_0x1519ad,_0x2b37aa=0x3,_0xef84c9=0x2){const _0x385f62=_0x10737d;if(!_0x1519ad||typeof _0x1519ad!==_0x385f62(0x366))return _0x1519ad;if(_0x1519ad[_0x385f62(0x3ff)]<=_0x2b37aa+_0xef84c9)return _0x1519ad;const _0x3dee0f=_0x1519ad[_0x385f62(0x471)](0x0,_0x2b37aa),_0x51cc96=_0x1519ad[_0x385f62(0x471)](-_0xef84c9),_0x51444a=_0x1519ad[_0x385f62(0x3ff)]-_0x2b37aa-_0xef84c9;return''+_0x3dee0f+'*'[_0x385f62(0x36b)](_0x51444a)+_0x51cc96;}async function MD5MD5(_0x2a87a2){const _0x2988f6=_0x10737d,_0x220062=new TextEncoder(),_0x3efb59=await crypto[_0x2988f6(0x29d)][_0x2988f6(0x442)](_0x2988f6(0x34a),_0x220062[_0x2988f6(0x4b7)](_0x2a87a2)),_0x5d398c=Array['from'](new Uint8Array(_0x3efb59)),_0x342490=_0x5d398c['map'](_0x5e63cf=>_0x5e63cf[_0x2988f6(0x226)](0x10)[_0x2988f6(0x40f)](0x2,'0'))[_0x2988f6(0x315)](''),_0x4152bc=await crypto[_0x2988f6(0x29d)]['digest'](_0x2988f6(0x34a),_0x220062[_0x2988f6(0x4b7)](_0x342490[_0x2988f6(0x471)](0x7,0x1b))),_0x4a95f0=Array['from'](new Uint8Array(_0x4152bc)),_0x340874=_0x4a95f0[_0x2988f6(0x202)](_0x16e3cd=>_0x16e3cd['toString'](0x10)[_0x2988f6(0x40f)](0x2,'0'))[_0x2988f6(0x315)]('');return _0x340874[_0x2988f6(0x48a)]();}function 随机路径(){const _0x3bd90c=_0x10737d,_0x5ce6e6=['about',_0x3bd90c(0x49d),_0x3bd90c(0x2f5),_0x3bd90c(0x18a),_0x3bd90c(0x337),'ad',_0x3bd90c(0x39b),_0x3bd90c(0x167),_0x3bd90c(0x29b),_0x3bd90c(0x2c2),_0x3bd90c(0x2de),_0x3bd90c(0x173),_0x3bd90c(0x300),'apps',_0x3bd90c(0x1ff),_0x3bd90c(0x22a),_0x3bd90c(0x4c7),_0x3bd90c(0x3bf),_0x3bd90c(0x3a7),_0x3bd90c(0x163),'avatar',_0x3bd90c(0x17d),'bd',_0x3bd90c(0x1b6),_0x3bd90c(0x166),_0x3bd90c(0x201),_0x3bd90c(0x293),'bt',_0x3bd90c(0x308),_0x3bd90c(0x267),_0x3bd90c(0x239),_0x3bd90c(0x50f),'cb',_0x3bd90c(0x430),_0x3bd90c(0x49e),'chat',_0x3bd90c(0x2bd),'city',_0x3bd90c(0x4a5),_0x3bd90c(0x1d1),_0x3bd90c(0x229),_0x3bd90c(0x2f7),_0x3bd90c(0x35d),'cn',_0x3bd90c(0x1c6),_0x3bd90c(0x1fc),_0x3bd90c(0x333),_0x3bd90c(0x20d),_0x3bd90c(0x501),'community',_0x3bd90c(0x14b),_0x3bd90c(0x325),_0x3bd90c(0x4a2),'content',_0x3bd90c(0x500),_0x3bd90c(0x18b),'cp',_0x3bd90c(0x4f6),_0x3bd90c(0x2f0),_0x3bd90c(0x15a),'dh','directory',_0x3bd90c(0x1b9),_0x3bd90c(0x505),'dl',_0x3bd90c(0x4df),_0x3bd90c(0x2a1),_0x3bd90c(0x218),_0x3bd90c(0x1d3),_0x3bd90c(0x4cf),_0x3bd90c(0x3a8),_0x3bd90c(0x50c),_0x3bd90c(0x2d6),_0x3bd90c(0x4d5),_0x3bd90c(0x4cc),'en','ep',_0x3bd90c(0x486),'episodes',_0x3bd90c(0x284),_0x3bd90c(0x36e),'f','faq',_0x3bd90c(0x330),_0x3bd90c(0x470),'favs',_0x3bd90c(0x264),_0x3bd90c(0x382),_0x3bd90c(0x2b4),_0x3bd90c(0x2e6),_0x3bd90c(0x21a),_0x3bd90c(0x155),_0x3bd90c(0x3f2),_0x3bd90c(0x40e),_0x3bd90c(0x450),'game',_0x3bd90c(0x512),_0x3bd90c(0x452),'go',_0x3bd90c(0x3a9),'go.php',_0x3bd90c(0x3ea),_0x3bd90c(0x4b3),_0x3bd90c(0x29c),_0x3bd90c(0x212),_0x3bd90c(0x253),'htm',_0x3bd90c(0x231),_0x3bd90c(0x1db),_0x3bd90c(0x1be),_0x3bd90c(0x214),'index',_0x3bd90c(0x2a6),_0x3bd90c(0x396),_0x3bd90c(0x273),_0x3bd90c(0x2c8),'ja','jp',_0x3bd90c(0x16e),'jump.html',_0x3bd90c(0x1a9),_0x3bd90c(0x227),'knowledge',_0x3bd90c(0x1f4),_0x3bd90c(0x4f3),_0x3bd90c(0x47a),_0x3bd90c(0x455),_0x3bd90c(0x172),'link','links','list',_0x3bd90c(0x2eb),_0x3bd90c(0x32d),'m','mag',_0x3bd90c(0x360),_0x3bd90c(0x417),'manhua','map','member',_0x3bd90c(0x159),'message',_0x3bd90c(0x355),_0x3bd90c(0x266),_0x3bd90c(0x3ca),_0x3bd90c(0x27b),_0x3bd90c(0x371),'my',_0x3bd90c(0x32c),_0x3bd90c(0x4b4),_0x3bd90c(0x27d),_0x3bd90c(0x3e9),_0x3bd90c(0x34d),_0x3bd90c(0x168),_0x3bd90c(0x44d),_0x3bd90c(0x307),_0x3bd90c(0x466),'out.php',_0x3bd90c(0x475),'p',_0x3bd90c(0x1b3),_0x3bd90c(0x402),_0x3bd90c(0x3ad),'payment','pdf','photo',_0x3bd90c(0x204),_0x3bd90c(0x1d0),'pics',_0x3bd90c(0x23b),_0x3bd90c(0x3b2),_0x3bd90c(0x491),_0x3bd90c(0x3e0),_0x3bd90c(0x4b5),_0x3bd90c(0x2b3),_0x3bd90c(0x2a5),_0x3bd90c(0x2f9),_0x3bd90c(0x23c),_0x3bd90c(0x19e),_0x3bd90c(0x474),_0x3bd90c(0x1fb),'qa','question','rank',_0x3bd90c(0x351),'read',_0x3bd90c(0x3fb),_0x3bd90c(0x510),_0x3bd90c(0x25b),_0x3bd90c(0x397),_0x3bd90c(0x16d),_0x3bd90c(0x146),_0x3bd90c(0x1a8),'resource',_0x3bd90c(0x3db),_0x3bd90c(0x206),_0x3bd90c(0x236),_0x3bd90c(0x3fa),_0x3bd90c(0x22b),_0x3bd90c(0x240),_0x3bd90c(0x18d),_0x3bd90c(0x44f),_0x3bd90c(0x2cf),_0x3bd90c(0x1f8),'setting',_0x3bd90c(0x279),_0x3bd90c(0x488),_0x3bd90c(0x257),_0x3bd90c(0x1f3),_0x3bd90c(0x390),_0x3bd90c(0x424),_0x3bd90c(0x4d3),'sort',_0x3bd90c(0x50e),_0x3bd90c(0x2f6),_0x3bd90c(0x4b0),_0x3bd90c(0x1dc),_0x3bd90c(0x193),_0x3bd90c(0x3c7),_0x3bd90c(0x4f0),_0x3bd90c(0x4dd),_0x3bd90c(0x4ea),_0x3bd90c(0x407),_0x3bd90c(0x200),_0x3bd90c(0x2c9),_0x3bd90c(0x32f),_0x3bd90c(0x4c4),_0x3bd90c(0x469),_0x3bd90c(0x3ec),'team','tech',_0x3bd90c(0x1a0),_0x3bd90c(0x49f),_0x3bd90c(0x180),_0x3bd90c(0x4ab),_0x3bd90c(0x31a),'topic',_0x3bd90c(0x335),_0x3bd90c(0x290),_0x3bd90c(0x3f5),'travel','tv',_0x3bd90c(0x4cd),'type','u',_0x3bd90c(0x1c7),'uploads',_0x3bd90c(0x42f),'urls',_0x3bd90c(0x4bd),_0x3bd90c(0x410),'v',_0x3bd90c(0x415),_0x3bd90c(0x2e3),_0x3bd90c(0x2da),'view',_0x3bd90c(0x3a5),_0x3bd90c(0x387),_0x3bd90c(0x451),'web','wenku',_0x3bd90c(0x465),_0x3bd90c(0x1e6),_0x3bd90c(0x195),'zh',_0x3bd90c(0x225),_0x3bd90c(0x303),_0x3bd90c(0x4f2)],_0x597661=Math[_0x3bd90c(0x502)](Math[_0x3bd90c(0x3f7)]()*0x3+0x1),_0x362a08=_0x5ce6e6[_0x3bd90c(0x51b)](()=>0.5-Math[_0x3bd90c(0x3f7)]())[_0x3bd90c(0x471)](0x0,_0x597661)[_0x3bd90c(0x315)]('/');return'/'+_0x362a08;}function 随机替换通配符(_0xd45ff9){const _0x4cd626=_0x10737d;if(!_0xd45ff9?.[_0x4cd626(0x153)]('*'))return _0xd45ff9;const _0x4023a2='abcdefghijklmnopqrstuvwxyz0123456789';return _0xd45ff9[_0x4cd626(0x4c8)](/\*/g,()=>{const _0x20e484=_0x4cd626;let _0x217556='';for(let _0x43849d=0x0;_0x43849dMath['random']()-0.5);let _0x5d4bda=0x0,_0x4dcb73=null;return _0x433e12[_0x50c0fd(0x4c8)](/example\.com/g,()=>{const _0x394aa6=_0x50c0fd;if(_0x5d4bda%_0x48f896===0x0)_0x4dcb73=随机替换通配符(_0x38016a[Math[_0x394aa6(0x502)](_0x5d4bda/_0x48f896)%_0x38016a['length']]);return _0x5d4bda++,_0x4dcb73;});}async function getECH(_0x340217){const _0x31a81d=_0x10737d;try{const _0x5946dc=await fetch(_0x31a81d(0x196)+encodeURIComponent(_0x340217)+_0x31a81d(0x232),{'headers':{'accept':_0x31a81d(0x3cd)}}),_0x49659d=await _0x5946dc[_0x31a81d(0x18e)]();if(!_0x49659d[_0x31a81d(0x4de)]?.['length'])return'';for(let _0x4d0410 of _0x49659d[_0x31a81d(0x4de)]){if(_0x4d0410[_0x31a81d(0x353)]!==0x41||!_0x4d0410['data'])continue;const _0x2ab33a=_0x4d0410[_0x31a81d(0x4f6)][_0x31a81d(0x4ff)](/ech=([^\s]+)/);if(_0x2ab33a)return _0x2ab33a[0x1]['replace'](/"/g,'');if(_0x4d0410[_0x31a81d(0x4f6)]['startsWith']('\x5c#')){const _0x452a71=_0x4d0410[_0x31a81d(0x4f6)][_0x31a81d(0x205)]('\x20')[_0x31a81d(0x471)](0x2)['join'](''),_0x37c623=new Uint8Array(_0x452a71[_0x31a81d(0x4ff)](/.{1,2}/g)['map'](_0x16ae94=>parseInt(_0x16ae94,0x10)));let _0x5a2eeb=0x2;while(_0x5a2eeb<_0x37c623[_0x31a81d(0x3ff)]&&_0x37c623[_0x5a2eeb++]!==0x0)_0x5a2eeb+=_0x37c623[_0x5a2eeb-0x1];while(_0x5a2eeb+0x4<=_0x37c623['length']){const _0x2e5cb7=_0x37c623[_0x5a2eeb]<<0x8|_0x37c623[_0x5a2eeb+0x1],_0x2550dc=_0x37c623[_0x5a2eeb+0x2]<<0x8|_0x37c623[_0x5a2eeb+0x3];_0x5a2eeb+=0x4;if(_0x2e5cb7===0x5)return btoa(String[_0x31a81d(0x1a5)](..._0x37c623['slice'](_0x5a2eeb,_0x5a2eeb+_0x2550dc)));_0x5a2eeb+=_0x2550dc;}}}return'';}catch{return'';}}async function 读取config_JSON(_0x31482b,_0x3cb5dc,_0x206319,_0x5e1920,_0x31d07a=![]){const _0x51acf3=_0x10737d,_0x5becbd=_0x3cb5dc,_0xe29b01=performance['now'](),_0x105b27={'TIME':new Date()[_0x51acf3(0x15d)](),'HOST':_0x5becbd,'HOSTS':[_0x3cb5dc],'UUID':_0x206319,'协议类型':'v'+'le'+'ss','传输协议':'ws','跳过证书验证':!![],'启用0RTT':![],'TLS分片':null,'随机路径':![],'ECH':![],'Fingerprint':_0x51acf3(0x2d8),'优选订阅生成':{'local':!![],'本地IP库':{'随机IP':!![],'随机数量':0x10,'指定端口':-0x1},'SUB':null,'SUBNAME':_0x51acf3(0x437)+_0x51acf3(0x224),'SUBUpdateTime':0x3,'TOKEN':await MD5MD5(_0x3cb5dc+_0x206319)},'订阅转换配置':{'SUBAPI':_0x51acf3(0x241),'SUBCONFIG':_0x51acf3(0x3fd),'SUBEMOJI':![]},'反代':{'PROXYIP':_0x51acf3(0x314),'SOCKS5':{'启用':启用SOCKS5反代,'全局':启用SOCKS5全局反代,'账号':我的SOCKS5账号,'白名单':SOCKS5白名单}},'TG':{'启用':![],'BotToken':null,'ChatID':null},'CF':{'Email':null,'GlobalAPIKey':null,'AccountID':null,'APIToken':null,'UsageAPI':null,'Usage':{'success':![],'pages':0x0,'workers':0x0,'total':0x0,'max':0x186a0}}};try{let _0x1ba59e=await _0x31482b['KV'][_0x51acf3(0x198)](_0x51acf3(0x51c));!_0x1ba59e||_0x31d07a==!![]?(await _0x31482b['KV'][_0x51acf3(0x4be)](_0x51acf3(0x51c),JSON[_0x51acf3(0x38d)](_0x105b27,null,0x2)),config_JSON=_0x105b27):config_JSON=JSON[_0x51acf3(0x2b9)](_0x1ba59e);}catch(_0x497132){console[_0x51acf3(0x1e8)]('读取config_JSON出错:\x20'+_0x497132[_0x51acf3(0x3de)]),config_JSON=_0x105b27;}config_JSON[_0x51acf3(0x428)]=_0x5becbd;if(!config_JSON['HOSTS'])config_JSON['HOSTS']=[_0x3cb5dc];if(_0x31482b[_0x51acf3(0x428)])config_JSON[_0x51acf3(0x497)]=(await 整理成数组(_0x31482b[_0x51acf3(0x428)]))[_0x51acf3(0x202)](_0x5522ae=>_0x5522ae['toLowerCase']()['replace'](/^https?:\/\//,'')[_0x51acf3(0x205)]('/')[0x0][_0x51acf3(0x205)](':')[0x0]);config_JSON['UUID']=_0x206319,config_JSON[_0x51acf3(0x3d8)]=_0x5e1920?_0x5e1920['startsWith']('/')?_0x5e1920:'/'+_0x5e1920:config_JSON['反代'][_0x51acf3(0x233)]['启用']?'/'+config_JSON['反代']['SOCKS5']['启用']+(config_JSON['反代'][_0x51acf3(0x233)]['全局']?_0x51acf3(0x3e7):'=')+config_JSON['反代']['SOCKS5']['账号']:config_JSON['反代']['PROXYIP']===_0x51acf3(0x314)?'/':_0x51acf3(0x3b8)+config_JSON['反代']['PROXYIP'];const _0x2cdbfb=config_JSON[_0x51acf3(0x3d4)]==_0x51acf3(0x42e)?_0x51acf3(0x263)+encodeURIComponent(_0x51acf3(0x2c5)):config_JSON[_0x51acf3(0x3d4)]=='Happ'?_0x51acf3(0x263)+encodeURIComponent('3,1,tlshello'):'';if(!config_JSON[_0x51acf3(0x508)])config_JSON['Fingerprint']=_0x51acf3(0x2d8);if(!config_JSON['ECH'])config_JSON[_0x51acf3(0x35a)]=![];else config_JSON['优选订阅生成']['SUBUpdateTime']=0x1;const _0x404574=config_JSON[_0x51acf3(0x35a)]?_0x51acf3(0x347)+encodeURIComponent(_0x51acf3(0x484)+ECH_DOH):'';config_JSON[_0x51acf3(0x2c3)]=config_JSON[_0x51acf3(0x3d1)]+_0x51acf3(0x3e7)+_0x206319+'@'+_0x5becbd+_0x51acf3(0x3a6)+(config_JSON[_0x51acf3(0x1de)]+_0x404574)+'&host='+_0x5becbd+'&fp='+config_JSON[_0x51acf3(0x508)]+'&sni='+_0x5becbd+_0x51acf3(0x326)+(encodeURIComponent(config_JSON[_0x51acf3(0x408)]?config_JSON[_0x51acf3(0x3d8)]+_0x51acf3(0x175):config_JSON[_0x51acf3(0x3d8)])+_0x2cdbfb)+'&encryption=none'+(config_JSON[_0x51acf3(0x3be)]?'&insecure=1&allowInsecure=1':'')+'#'+encodeURIComponent(config_JSON[_0x51acf3(0x3d2)][_0x51acf3(0x1f0)]),config_JSON[_0x51acf3(0x3d2)][_0x51acf3(0x2ac)]=await MD5MD5(_0x3cb5dc+_0x206319);const _0x5c6e5c={'BotToken':null,'ChatID':null};config_JSON['TG']={'启用':config_JSON['TG']['启用']?config_JSON['TG']['启用']:![],..._0x5c6e5c};try{const _0x3755cb=await _0x31482b['KV'][_0x51acf3(0x198)](_0x51acf3(0x38e));if(!_0x3755cb)await _0x31482b['KV']['put'](_0x51acf3(0x38e),JSON[_0x51acf3(0x38d)](_0x5c6e5c,null,0x2));else{const _0x3638fa=JSON['parse'](_0x3755cb);config_JSON['TG'][_0x51acf3(0x50a)]=_0x3638fa['ChatID']?_0x3638fa['ChatID']:null,config_JSON['TG']['BotToken']=_0x3638fa[_0x51acf3(0x489)]?掩码敏感信息(_0x3638fa['BotToken']):null;}}catch(_0x5d90c1){console[_0x51acf3(0x1e8)]('读取tg.json出错:\x20'+_0x5d90c1[_0x51acf3(0x3de)]);}const _0x5515c3={'Email':null,'GlobalAPIKey':null,'AccountID':null,'APIToken':null,'UsageAPI':null};config_JSON['CF']={..._0x5515c3,'Usage':{'success':![],'pages':0x0,'workers':0x0,'total':0x0,'max':0x186a0}};try{const _0x238b3c=await _0x31482b['KV']['get']('cf.json');if(!_0x238b3c)await _0x31482b['KV'][_0x51acf3(0x4be)](_0x51acf3(0x51a),JSON[_0x51acf3(0x38d)](_0x5515c3,null,0x2));else{const _0x1eccd6=JSON['parse'](_0x238b3c);if(_0x1eccd6[_0x51acf3(0x2fe)])try{const _0x208a57=await fetch(_0x1eccd6['UsageAPI']),_0x5d6de8=await _0x208a57[_0x51acf3(0x18e)]();config_JSON['CF'][_0x51acf3(0x1d9)]=_0x5d6de8;}catch(_0x418af7){console[_0x51acf3(0x1e8)]('请求\x20CF_JSON.UsageAPI\x20失败:\x20'+_0x418af7['message']);}else{config_JSON['CF'][_0x51acf3(0x2ea)]=_0x1eccd6[_0x51acf3(0x2ea)]?_0x1eccd6[_0x51acf3(0x2ea)]:null,config_JSON['CF'][_0x51acf3(0x160)]=_0x1eccd6['GlobalAPIKey']?掩码敏感信息(_0x1eccd6[_0x51acf3(0x160)]):null,config_JSON['CF'][_0x51acf3(0x35b)]=_0x1eccd6[_0x51acf3(0x35b)]?掩码敏感信息(_0x1eccd6[_0x51acf3(0x35b)]):null,config_JSON['CF'][_0x51acf3(0x4ee)]=_0x1eccd6['APIToken']?掩码敏感信息(_0x1eccd6['APIToken']):null,config_JSON['CF']['UsageAPI']=null;const _0x25cf59=await getCloudflareUsage(_0x1eccd6[_0x51acf3(0x2ea)],_0x1eccd6[_0x51acf3(0x160)],_0x1eccd6[_0x51acf3(0x35b)],_0x1eccd6[_0x51acf3(0x4ee)]);config_JSON['CF'][_0x51acf3(0x1d9)]=_0x25cf59;}}}catch(_0xb28a6){console['error']('读取cf.json出错:\x20'+_0xb28a6['message']);}return config_JSON[_0x51acf3(0x188)]=(performance['now']()-_0xe29b01)[_0x51acf3(0x445)](0x2)+'ms',config_JSON;}async function 生成随机IP(_0x194c44,_0x210fdc=0x10,_0x244fd8=-0x1){const _0x3bc666=_0x10737d,_0x1dfe30={'9808':_0x3bc666(0x3d0),'4837':'cu','4134':'ct'},_0x4a86b9=_0x194c44['cf'][_0x3bc666(0x1c5)],_0x5b0f34=_0x1dfe30[_0x4a86b9]?'https://raw.githubusercontent.com/cmliu/cmliu/main/CF-CIDR/'+_0x1dfe30[_0x4a86b9]+_0x3bc666(0x1e4):_0x3bc666(0x1ec),_0x4b7bea={'9808':_0x3bc666(0x3d6),'4837':_0x3bc666(0x1ab),'4134':_0x3bc666(0x2ec)}[_0x4a86b9]||_0x3bc666(0x1d6),_0x24193e=[0x1bb,0x805,0x823,0x827,0x830,0x20fb];let _0xfb4b24=[];try{const _0x32df06=await fetch(_0x5b0f34);_0xfb4b24=_0x32df06['ok']?await 整理成数组(await _0x32df06[_0x3bc666(0x43b)]()):[_0x3bc666(0x316)];}catch{_0xfb4b24=['104.16.0.0/13'];}const _0x3f7c9e=_0x1ee803=>{const _0x47a6af=_0x3bc666,[_0x57f780,_0x1c1cc6]=_0x1ee803['split']('/'),_0x146731=parseInt(_0x1c1cc6),_0x334f53=0x20-_0x146731,_0x23030c=_0x57f780['split']('.')[_0x47a6af(0x380)]((_0x50dec5,_0x30c1ed,_0x3dd9e9)=>_0x50dec5|parseInt(_0x30c1ed)<<0x18-_0x3dd9e9*0x8,0x0),_0x578044=Math[_0x47a6af(0x502)](Math[_0x47a6af(0x3f7)]()*Math[_0x47a6af(0x28a)](0x2,_0x334f53)),_0x5803e9=0xffffffff<<_0x334f53>>>0x0,_0x40ab58=((_0x23030c&_0x5803e9)>>>0x0)+_0x578044>>>0x0;return[_0x40ab58>>>0x18&0xff,_0x40ab58>>>0x10&0xff,_0x40ab58>>>0x8&0xff,_0x40ab58&0xff][_0x47a6af(0x315)]('.');},_0x9f7a3a=Array[_0x3bc666(0x1ea)]({'length':_0x210fdc},()=>{const _0x3ef02f=_0x3bc666,_0x2ffa81=_0x3f7c9e(_0xfb4b24[Math['floor'](Math[_0x3ef02f(0x3f7)]()*_0xfb4b24['length'])]);return _0x2ffa81+':'+(_0x244fd8===-0x1?_0x24193e[Math[_0x3ef02f(0x502)](Math[_0x3ef02f(0x3f7)]()*_0x24193e['length'])]:_0x244fd8)+'#'+_0x4b7bea;});return[_0x9f7a3a,_0x9f7a3a[_0x3bc666(0x315)]('\x0a')];}async function 整理成数组(_0x4356a3){const _0x1a2f49=_0x10737d;var _0x4f6d3f=_0x4356a3[_0x1a2f49(0x4c8)](/[	"'\r\n]+/g,',')[_0x1a2f49(0x4c8)](/,+/g,',');if(_0x4f6d3f[_0x1a2f49(0x485)](0x0)==',')_0x4f6d3f=_0x4f6d3f[_0x1a2f49(0x471)](0x1);if(_0x4f6d3f[_0x1a2f49(0x485)](_0x4f6d3f['length']-0x1)==',')_0x4f6d3f=_0x4f6d3f[_0x1a2f49(0x471)](0x0,_0x4f6d3f[_0x1a2f49(0x3ff)]-0x1);const _0x558130=_0x4f6d3f['split'](',');return _0x558130;}function isValidBase64(_0x4d04a8){const _0x32e83e=_0x10737d;if(typeof _0x4d04a8!==_0x32e83e(0x366))return![];const _0xd085bd=_0x4d04a8[_0x32e83e(0x4c8)](/\s/g,'');if(_0xd085bd[_0x32e83e(0x3ff)]===0x0||_0xd085bd['length']%0x4!==0x0)return![];const _0x407170=/^[A-Za-z0-9+/]+={0,2}$/;if(!_0x407170[_0x32e83e(0x49f)](_0xd085bd))return![];try{return atob(_0xd085bd),!![];}catch{return![];}}function base64Decode(_0x157977){const _0x3e7859=_0x10737d,_0x438290=new Uint8Array(atob(_0x157977)[_0x3e7859(0x205)]('')[_0x3e7859(0x202)](_0x4d4843=>_0x4d4843[_0x3e7859(0x19d)](0x0))),_0x10758e=new TextDecoder(_0x3e7859(0x3cb));return _0x10758e[_0x3e7859(0x453)](_0x438290);}async function 请求优选API(_0x404de2,_0x2cfc54=_0x10737d(0x217),_0x29b453=0xbb8){const _0x593cca=_0x10737d;if(!_0x404de2?.[_0x593cca(0x3ff)])return[[],[],[]];const _0x3013dd=new Set();let _0x3c93e8='',_0x3329ae=[];await Promise[_0x593cca(0x336)](_0x404de2['map'](async _0x219696=>{const _0x115e11=_0x593cca;try{const _0xe560fd=new AbortController(),_0x216aba=setTimeout(()=>_0xe560fd[_0x115e11(0x14f)](),_0x29b453),_0xb4416f=await fetch(_0x219696,{'signal':_0xe560fd[_0x115e11(0x49a)]});clearTimeout(_0x216aba);let _0x405dd5='';try{const _0x4c9369=await _0xb4416f[_0x115e11(0x515)](),_0x4b61b5=(_0xb4416f['headers'][_0x115e11(0x198)](_0x115e11(0x34c))||'')['toLowerCase'](),_0x1cacb0=_0x4b61b5[_0x115e11(0x4ff)](/charset=([^\s;]+)/i)?.[0x1]?.['toLowerCase']()||'';let _0x39fe5e=['utf-8',_0x115e11(0x2d2)];(_0x1cacb0[_0x115e11(0x153)]('gb')||_0x1cacb0[_0x115e11(0x153)](_0x115e11(0x1f1))||_0x1cacb0[_0x115e11(0x153)](_0x115e11(0x2d2)))&&(_0x39fe5e=[_0x115e11(0x2d2),_0x115e11(0x3cb)]);let _0x3bbb59=![];for(const _0x3dbf2b of _0x39fe5e){try{const _0x57c865=new TextDecoder(_0x3dbf2b)[_0x115e11(0x453)](_0x4c9369);if(_0x57c865&&_0x57c865[_0x115e11(0x3ff)]>0x0&&!_0x57c865['includes']('�')){_0x405dd5=_0x57c865,_0x3bbb59=!![];break;}else{if(_0x57c865&&_0x57c865['length']>0x0)continue;}}catch(_0x1a322e){continue;}}!_0x3bbb59&&(_0x405dd5=await _0xb4416f[_0x115e11(0x43b)]());if(!_0x405dd5||_0x405dd5['trim']()['length']===0x0)return;}catch(_0x3f947b){console[_0x115e11(0x1e8)](_0x115e11(0x3b9),_0x3f947b);return;}const _0x116fa8=isValidBase64(_0x405dd5)?base64Decode(_0x405dd5):_0x405dd5;if(_0x116fa8['split']('#')[0x0]['includes'](_0x115e11(0x3e7))){_0x3c93e8+=_0x116fa8+'\x0a';return;}const _0x4ea6c1=_0x405dd5[_0x115e11(0x4d1)]()[_0x115e11(0x205)]('\x0a')[_0x115e11(0x202)](_0x444f1e=>_0x444f1e['trim']())[_0x115e11(0x464)](_0x8ea9d4=>_0x8ea9d4),_0x198b2b=_0x4ea6c1[_0x115e11(0x3ff)]>0x1&&_0x4ea6c1[0x0][_0x115e11(0x153)](','),_0x2a56be=/^[^\[\]]*:[^\[\]]*:[^\[\]]/;if(!_0x198b2b)_0x4ea6c1[_0x115e11(0x1f9)](_0x29fe40=>{const _0x3a5f24=_0x115e11,_0x4ae0fe=_0x29fe40[_0x3a5f24(0x26d)]('#'),[_0x472684,_0x5a7ddc]=_0x4ae0fe>-0x1?[_0x29fe40['substring'](0x0,_0x4ae0fe),_0x29fe40[_0x3a5f24(0x1fd)](_0x4ae0fe)]:[_0x29fe40,''];let _0x30fe13=![];if(_0x472684[_0x3a5f24(0x190)]('['))_0x30fe13=/\]:(\d+)$/[_0x3a5f24(0x49f)](_0x472684);else{const _0x5eb528=_0x472684[_0x3a5f24(0x2a2)](':');_0x30fe13=_0x5eb528>-0x1&&/^\d+$/[_0x3a5f24(0x49f)](_0x472684[_0x3a5f24(0x1fd)](_0x5eb528+0x1));}const _0x350ae9=new URL(_0x219696)[_0x3a5f24(0x3ae)][_0x3a5f24(0x198)](_0x3a5f24(0x3fe))||_0x2cfc54;_0x3013dd[_0x3a5f24(0x4c9)](_0x30fe13?_0x29fe40:_0x472684+':'+_0x350ae9+_0x5a7ddc);});else{const _0x25c366=_0x4ea6c1[0x0]['split'](',')[_0x115e11(0x202)](_0x596066=>_0x596066['trim']()),_0x49fe98=_0x4ea6c1[_0x115e11(0x471)](0x1);if(_0x25c366['includes'](_0x115e11(0x404))&&_0x25c366[_0x115e11(0x153)]('端口')&&_0x25c366[_0x115e11(0x153)](_0x115e11(0x22e))){const _0x1598f4=_0x25c366[_0x115e11(0x26d)](_0x115e11(0x404)),_0x2b613f=_0x25c366['indexOf']('端口'),_0x28d63e=_0x25c366[_0x115e11(0x26d)]('国家')>-0x1?_0x25c366[_0x115e11(0x26d)]('国家'):_0x25c366[_0x115e11(0x26d)]('城市')>-0x1?_0x25c366[_0x115e11(0x26d)]('城市'):_0x25c366[_0x115e11(0x26d)](_0x115e11(0x22e)),_0x41c197=_0x25c366[_0x115e11(0x26d)]('TLS');_0x49fe98[_0x115e11(0x1f9)](_0x35887f=>{const _0x371640=_0x115e11,_0x3f68db=_0x35887f[_0x371640(0x205)](',')[_0x371640(0x202)](_0x63a06c=>_0x63a06c[_0x371640(0x4d1)]());if(_0x41c197!==-0x1&&_0x3f68db[_0x41c197]?.['toLowerCase']()!=='true')return;const _0x419164=_0x2a56be[_0x371640(0x49f)](_0x3f68db[_0x1598f4])?'['+_0x3f68db[_0x1598f4]+']':_0x3f68db[_0x1598f4];_0x3013dd['add'](_0x419164+':'+_0x3f68db[_0x2b613f]+'#'+_0x3f68db[_0x28d63e]);});}else{if(_0x25c366['some'](_0xfb029e=>_0xfb029e[_0x115e11(0x153)]('IP'))&&_0x25c366[_0x115e11(0x25f)](_0x4d6620=>_0x4d6620[_0x115e11(0x153)]('延迟'))&&_0x25c366[_0x115e11(0x25f)](_0x2b924f=>_0x2b924f[_0x115e11(0x153)](_0x115e11(0x363)))){const _0xb774f4=_0x25c366[_0x115e11(0x19b)](_0x52eb26=>_0x52eb26[_0x115e11(0x153)]('IP')),_0x3bfa90=_0x25c366[_0x115e11(0x19b)](_0x24d212=>_0x24d212[_0x115e11(0x153)]('延迟')),_0x1e3d35=_0x25c366[_0x115e11(0x19b)](_0x3b37c8=>_0x3b37c8[_0x115e11(0x153)](_0x115e11(0x363))),_0x4b173f=new URL(_0x219696)['searchParams'][_0x115e11(0x198)]('port')||_0x2cfc54;_0x49fe98[_0x115e11(0x1f9)](_0x511af9=>{const _0x3a66bc=_0x115e11,_0x3ae0a6=_0x511af9[_0x3a66bc(0x205)](',')[_0x3a66bc(0x202)](_0x522144=>_0x522144['trim']()),_0x241fd2=_0x2a56be[_0x3a66bc(0x49f)](_0x3ae0a6[_0xb774f4])?'['+_0x3ae0a6[_0xb774f4]+']':_0x3ae0a6[_0xb774f4];_0x3013dd[_0x3a66bc(0x4c9)](_0x241fd2+':'+_0x4b173f+_0x3a66bc(0x494)+_0x3ae0a6[_0x3bfa90]+_0x3a66bc(0x3eb)+_0x3ae0a6[_0x1e3d35]+_0x3a66bc(0x248));});}}}}catch(_0xd024a3){}}));const _0x22ca0b=_0x3c93e8[_0x593cca(0x4d1)]()?[...new Set(_0x3c93e8[_0x593cca(0x205)](/\r?\n/)[_0x593cca(0x464)](_0x2750f3=>_0x2750f3[_0x593cca(0x4d1)]()!==''))]:[];return[Array['from'](_0x3013dd),_0x22ca0b,_0x3329ae];}async function 反代参数获取(_0xc34759){const _0x1bcd54=_0x10737d,_0x2c7e27=new URL(_0xc34759['url']),{pathname:_0xd81e1b,searchParams:_0x525908}=_0x2c7e27,_0x25d0df=_0xd81e1b[_0x1bcd54(0x48a)]();我的SOCKS5账号=_0x525908[_0x1bcd54(0x198)]('socks5')||_0x525908[_0x1bcd54(0x198)](_0x1bcd54(0x4f9))||null,启用SOCKS5全局反代=_0x525908[_0x1bcd54(0x3d5)](_0x1bcd54(0x207))||![];const _0x3e7684=_0x25d0df[_0x1bcd54(0x4ff)](/\/(proxyip[.=]|pyip=|ip=)(.+)/);if(_0x525908[_0x1bcd54(0x3d5)](_0x1bcd54(0x393))){const _0x2c7ff7=_0x525908['get'](_0x1bcd54(0x393));反代IP=_0x2c7ff7[_0x1bcd54(0x153)](',')?_0x2c7ff7[_0x1bcd54(0x205)](',')[Math[_0x1bcd54(0x502)](Math[_0x1bcd54(0x3f7)]()*_0x2c7ff7[_0x1bcd54(0x205)](',')['length'])]:_0x2c7ff7,启用反代兜底=![];return;}else{if(_0x3e7684){const _0x119fea=_0x3e7684[0x1]===_0x1bcd54(0x259)?_0x1bcd54(0x259)+_0x3e7684[0x2]:_0x3e7684[0x2];反代IP=_0x119fea[_0x1bcd54(0x153)](',')?_0x119fea[_0x1bcd54(0x205)](',')[Math['floor'](Math[_0x1bcd54(0x3f7)]()*_0x119fea[_0x1bcd54(0x205)](',')[_0x1bcd54(0x3ff)])]:_0x119fea,启用反代兜底=![];return;}}let _0x4ac401;if(_0x4ac401=_0xd81e1b[_0x1bcd54(0x4ff)](/\/(socks5?|http):\/?\/?(.+)/i)){启用SOCKS5反代=_0x4ac401[0x1]['toLowerCase']()===_0x1bcd54(0x4f9)?'http':_0x1bcd54(0x1ad),我的SOCKS5账号=_0x4ac401[0x2]['split']('#')[0x0],启用SOCKS5全局反代=!![];if(我的SOCKS5账号[_0x1bcd54(0x153)]('@')){const _0x14c0cb=我的SOCKS5账号[_0x1bcd54(0x2a2)]('@');let _0x1b8226=我的SOCKS5账号[_0x1bcd54(0x1fd)](0x0,_0x14c0cb)[_0x1bcd54(0x400)](_0x1bcd54(0x4e9),'=');/^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i[_0x1bcd54(0x49f)](_0x1b8226)&&!_0x1b8226[_0x1bcd54(0x153)](':')&&(_0x1b8226=atob(_0x1b8226)),我的SOCKS5账号=_0x1b8226+'@'+我的SOCKS5账号[_0x1bcd54(0x1fd)](_0x14c0cb+0x1);}}else{if(_0x4ac401=_0xd81e1b['match'](/\/(g?s5|socks5|g?http)=(.+)/i)){const _0x180ccf=_0x4ac401[0x1][_0x1bcd54(0x48a)]();我的SOCKS5账号=_0x4ac401[0x2],启用SOCKS5反代=_0x180ccf[_0x1bcd54(0x153)](_0x1bcd54(0x4f9))?_0x1bcd54(0x4f9):'socks5',启用SOCKS5全局反代=_0x180ccf[_0x1bcd54(0x190)]('g')||启用SOCKS5全局反代;}}if(我的SOCKS5账号)try{parsedSocks5Address=await 获取SOCKS5账号(我的SOCKS5账号),启用SOCKS5反代=_0x525908[_0x1bcd54(0x198)]('http')?_0x1bcd54(0x4f9):启用SOCKS5反代;}catch(_0x55e405){console[_0x1bcd54(0x1e8)]('解析SOCKS5地址失败:',_0x55e405[_0x1bcd54(0x3de)]),启用SOCKS5反代=null;}else 启用SOCKS5反代=null;}async function 获取SOCKS5账号(_0x19c26d){const _0x221b44=_0x10737d;if(_0x19c26d[_0x221b44(0x153)]('@')){const _0x51f83a=_0x19c26d[_0x221b44(0x2a2)]('@');let _0x1967ab=_0x19c26d[_0x221b44(0x1fd)](0x0,_0x51f83a)[_0x221b44(0x400)](_0x221b44(0x4e9),'=');const _0x2a4196=/^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;if(_0x2a4196[_0x221b44(0x49f)](_0x1967ab)&&!_0x1967ab[_0x221b44(0x153)](':'))_0x1967ab=atob(_0x1967ab);_0x19c26d=_0x1967ab+'@'+_0x19c26d[_0x221b44(0x1fd)](_0x51f83a+0x1);}const _0x3d76ac=_0x19c26d[_0x221b44(0x2a2)]('@'),[_0x4103af,_0xf7deb7]=_0x3d76ac===-0x1?[_0x19c26d,undefined]:[_0x19c26d[_0x221b44(0x1fd)](_0x3d76ac+0x1),_0x19c26d[_0x221b44(0x1fd)](0x0,_0x3d76ac)];let _0xb52b22,_0xefaac2;if(_0xf7deb7){[_0xb52b22,_0xefaac2]=_0xf7deb7[_0x221b44(0x205)](':');if(!_0xefaac2)throw new Error('无效的\x20SOCKS\x20地址格式:认证部分必须是\x20\x22username:password\x22\x20的形式');}let _0x107708,_0x9484f3;if(_0x4103af[_0x221b44(0x153)](']:'))[_0x107708,_0x9484f3]=[_0x4103af[_0x221b44(0x205)](']:')[0x0]+']',Number(_0x4103af['split'](']:')[0x1]['replace'](/[^\d]/g,''))];else{if(_0x4103af[_0x221b44(0x190)]('['))[_0x107708,_0x9484f3]=[_0x4103af,0x50];else{const _0x2aab16=_0x4103af[_0x221b44(0x205)](':');[_0x107708,_0x9484f3]=_0x2aab16[_0x221b44(0x3ff)]===0x2?[_0x2aab16[0x0],Number(_0x2aab16[0x1][_0x221b44(0x4c8)](/[^\d]/g,''))]:[_0x4103af,0x50];}}if(isNaN(_0x9484f3))throw new Error('无效的\x20SOCKS\x20地址格式:端口号必须是数字');if(_0x107708[_0x221b44(0x153)](':')&&!/^\[.*\]$/[_0x221b44(0x49f)](_0x107708))throw new Error(_0x221b44(0x39f));return{'username':_0xb52b22,'password':_0xefaac2,'hostname':_0x107708,'port':_0x9484f3};}async function getCloudflareUsage(_0x3d561b,_0x385a24,_0x437cce,_0xfab2a0){const _0x26294a=_0x10737d,_0x451711='https://api.cloudflare.com/client/v4',_0x51ee6b=_0x53423b=>_0x53423b?.[_0x26294a(0x380)]((_0x1d0d91,_0x2e8312)=>_0x1d0d91+(_0x2e8312?.[_0x26294a(0x243)]?.[_0x26294a(0x192)]||0x0),0x0)||0x0,_0xdebc03={'Content-Type':_0x26294a(0x1fa)};try{if(!_0x437cce&&(!_0x3d561b||!_0x385a24))return{'success':![],'pages':0x0,'workers':0x0,'total':0x0,'max':0x186a0};if(!_0x437cce){const _0x288fc8=await fetch(_0x451711+_0x26294a(0x2f8),{'method':_0x26294a(0x223),'headers':{..._0xdebc03,'X-AUTH-EMAIL':_0x3d561b,'X-AUTH-KEY':_0x385a24}});if(!_0x288fc8['ok'])throw new Error('账户获取失败:\x20'+_0x288fc8[_0x26294a(0x4fa)]);const _0x4da87a=await _0x288fc8[_0x26294a(0x18e)]();if(!_0x4da87a?.[_0x26294a(0x4ae)]?.[_0x26294a(0x3ff)])throw new Error(_0x26294a(0x277));const _0x20b3a2=_0x4da87a[_0x26294a(0x4ae)][_0x26294a(0x19b)](_0x50f266=>_0x50f266['name']?.['toLowerCase']()['startsWith'](_0x3d561b['toLowerCase']()));_0x437cce=_0x4da87a[_0x26294a(0x4ae)][_0x20b3a2>=0x0?_0x20b3a2:0x0]?.['id'];}const _0x10bea6=new Date();_0x10bea6['setUTCHours'](0x0,0x0,0x0,0x0);const _0x5160b3=_0xfab2a0?{..._0xdebc03,'Authorization':'Bearer\x20'+_0xfab2a0}:{..._0xdebc03,'X-AUTH-EMAIL':_0x3d561b,'X-AUTH-KEY':_0x385a24},_0x52229e=await fetch(_0x451711+_0x26294a(0x395),{'method':_0x26294a(0x433),'headers':_0x5160b3,'body':JSON[_0x26294a(0x38d)]({'query':'query\x20getBillingMetrics($AccountID:\x20String!,\x20$filter:\x20AccountWorkersInvocationsAdaptiveFilter_InputObject)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20viewer\x20{\x20accounts(filter:\x20{accountTag:\x20$AccountID})\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pagesFunctionsInvocationsAdaptiveGroups(limit:\x201000,\x20filter:\x20$filter)\x20{\x20sum\x20{\x20requests\x20}\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20workersInvocationsAdaptive(limit:\x2010000,\x20filter:\x20$filter)\x20{\x20sum\x20{\x20requests\x20}\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}','variables':{'AccountID':_0x437cce,'filter':{'datetime_geq':_0x10bea6[_0x26294a(0x15d)](),'datetime_leq':new Date()['toISOString']()}}})});if(!_0x52229e['ok'])throw new Error(_0x26294a(0x46e)+_0x52229e['status']);const _0x19f1bb=await _0x52229e[_0x26294a(0x18e)]();if(_0x19f1bb[_0x26294a(0x479)]?.['length'])throw new Error(_0x19f1bb[_0x26294a(0x479)][0x0][_0x26294a(0x3de)]);const _0x1b6d8d=_0x19f1bb?.[_0x26294a(0x4f6)]?.[_0x26294a(0x4f4)]?.[_0x26294a(0x42a)]?.[0x0];if(!_0x1b6d8d)throw new Error(_0x26294a(0x4ac));const _0xa06c1=_0x51ee6b(_0x1b6d8d[_0x26294a(0x2ee)]),_0x3cdd3b=_0x51ee6b(_0x1b6d8d['workersInvocationsAdaptive']),_0x4b68b6=_0xa06c1+_0x3cdd3b,_0x3c23bd=0x186a0;return console[_0x26294a(0x282)](_0x26294a(0x48e)+_0xa06c1+_0x26294a(0x459)+_0x3cdd3b+_0x26294a(0x2b2)+_0x4b68b6+',\x20上限:\x20100000'),{'success':!![],'pages':_0xa06c1,'workers':_0x3cdd3b,'total':_0x4b68b6,'max':_0x3c23bd};}catch(_0x4bfc71){return console[_0x26294a(0x1e8)](_0x26294a(0x37a),_0x4bfc71['message']),{'success':![],'pages':0x0,'workers':0x0,'total':0x0,'max':0x186a0};}}function sha224(_0x14b9af){const _0x21bfd4=_0x10737d,_0x456d5a=[0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0xfc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x6ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2],_0x19911e=(_0xd46156,_0x1c55bc)=>(_0xd46156>>>_0x1c55bc|_0xd46156<<0x20-_0x1c55bc)>>>0x0;_0x14b9af=unescape(encodeURIComponent(_0x14b9af));const _0x475f05=_0x14b9af['length']*0x8;_0x14b9af+=String[_0x21bfd4(0x1a5)](0x80);while(_0x14b9af[_0x21bfd4(0x3ff)]*0x8%0x200!==0x1c0)_0x14b9af+=String['fromCharCode'](0x0);const _0x4575ce=[0xc1059ed8,0x367cd507,0x3070dd17,0xf70e5939,0xffc00b31,0x68581511,0x64f98fa7,0xbefa4fa4],_0x4b2333=Math[_0x21bfd4(0x502)](_0x475f05/0x100000000),_0x4f2b46=_0x475f05&0xffffffff;_0x14b9af+=String[_0x21bfd4(0x1a5)](_0x4b2333>>>0x18&0xff,_0x4b2333>>>0x10&0xff,_0x4b2333>>>0x8&0xff,_0x4b2333&0xff,_0x4f2b46>>>0x18&0xff,_0x4f2b46>>>0x10&0xff,_0x4f2b46>>>0x8&0xff,_0x4f2b46&0xff);const _0x251e86=[];for(let _0x57b6a9=0x0;_0x57b6a9<_0x14b9af['length'];_0x57b6a9+=0x4)_0x251e86[_0x21bfd4(0x14c)](_0x14b9af['charCodeAt'](_0x57b6a9)<<0x18|_0x14b9af[_0x21bfd4(0x19d)](_0x57b6a9+0x1)<<0x10|_0x14b9af[_0x21bfd4(0x19d)](_0x57b6a9+0x2)<<0x8|_0x14b9af['charCodeAt'](_0x57b6a9+0x3));for(let _0x1d9ab6=0x0;_0x1d9ab6<_0x251e86[_0x21bfd4(0x3ff)];_0x1d9ab6+=0x10){const _0x3afe74=new Array(0x40)[_0x21bfd4(0x2c4)](0x0);for(let _0x368131=0x0;_0x368131<0x10;_0x368131++)_0x3afe74[_0x368131]=_0x251e86[_0x1d9ab6+_0x368131];for(let _0x125aa8=0x10;_0x125aa8<0x40;_0x125aa8++){const _0x4d6c83=_0x19911e(_0x3afe74[_0x125aa8-0xf],0x7)^_0x19911e(_0x3afe74[_0x125aa8-0xf],0x12)^_0x3afe74[_0x125aa8-0xf]>>>0x3,_0x78e468=_0x19911e(_0x3afe74[_0x125aa8-0x2],0x11)^_0x19911e(_0x3afe74[_0x125aa8-0x2],0x13)^_0x3afe74[_0x125aa8-0x2]>>>0xa;_0x3afe74[_0x125aa8]=_0x3afe74[_0x125aa8-0x10]+_0x4d6c83+_0x3afe74[_0x125aa8-0x7]+_0x78e468>>>0x0;}let [_0x3fa15e,_0x1e0dbd,_0x4d3a95,_0x5ec1aa,_0xbebb8d,_0xc285f,_0x4951ea,_0x312e9c]=_0x4575ce;for(let _0x99f9e8=0x0;_0x99f9e8<0x40;_0x99f9e8++){const _0x4d6c9d=_0x19911e(_0xbebb8d,0x6)^_0x19911e(_0xbebb8d,0xb)^_0x19911e(_0xbebb8d,0x19),_0x286208=_0xbebb8d&_0xc285f^~_0xbebb8d&_0x4951ea,_0x42dc69=_0x312e9c+_0x4d6c9d+_0x286208+_0x456d5a[_0x99f9e8]+_0x3afe74[_0x99f9e8]>>>0x0,_0xe92986=_0x19911e(_0x3fa15e,0x2)^_0x19911e(_0x3fa15e,0xd)^_0x19911e(_0x3fa15e,0x16),_0xb5f0f3=_0x3fa15e&_0x1e0dbd^_0x3fa15e&_0x4d3a95^_0x1e0dbd&_0x4d3a95,_0x3ece62=_0xe92986+_0xb5f0f3>>>0x0;_0x312e9c=_0x4951ea,_0x4951ea=_0xc285f,_0xc285f=_0xbebb8d,_0xbebb8d=_0x5ec1aa+_0x42dc69>>>0x0,_0x5ec1aa=_0x4d3a95,_0x4d3a95=_0x1e0dbd,_0x1e0dbd=_0x3fa15e,_0x3fa15e=_0x42dc69+_0x3ece62>>>0x0;}for(let _0x252b22=0x0;_0x252b22<0x8;_0x252b22++)_0x4575ce[_0x252b22]=_0x4575ce[_0x252b22]+(_0x252b22===0x0?_0x3fa15e:_0x252b22===0x1?_0x1e0dbd:_0x252b22===0x2?_0x4d3a95:_0x252b22===0x3?_0x5ec1aa:_0x252b22===0x4?_0xbebb8d:_0x252b22===0x5?_0xc285f:_0x252b22===0x6?_0x4951ea:_0x312e9c)>>>0x0;}let _0x5e9dbc='';for(let _0x18c51b=0x0;_0x18c51b<0x7;_0x18c51b++){for(let _0x336739=0x18;_0x336739>=0x0;_0x336739-=0x8)_0x5e9dbc+=(_0x4575ce[_0x18c51b]>>>_0x336739&0xff)[_0x21bfd4(0x226)](0x10)[_0x21bfd4(0x40f)](0x2,'0');}return _0x5e9dbc;}async function 解析地址端口(_0x544fcc,_0x13e18c=_0x10737d(0x468),_0x4be31e=_0x10737d(0x4b9)){const _0x27f0ab=_0x10737d;if(!缓存反代IP||!缓存反代解析数组||缓存反代IP!==_0x544fcc){_0x544fcc=_0x544fcc[_0x27f0ab(0x48a)]();async function _0x5caa8f(_0x484054,_0x43892d){const _0x7c3722=_0x27f0ab;try{const _0x5d49e7=await fetch(_0x7c3722(0x196)+_0x484054+_0x7c3722(0x1bb)+_0x43892d,{'headers':{'Accept':_0x7c3722(0x3cd)}});if(!_0x5d49e7['ok'])return[];const _0x36a7df=await _0x5d49e7[_0x7c3722(0x18e)]();return _0x36a7df[_0x7c3722(0x4de)]||[];}catch(_0x54cf04){return console[_0x7c3722(0x1e8)]('DoH查询失败\x20('+_0x43892d+'):',_0x54cf04),[];}}function _0x4cb8cc(_0x260951){const _0x5013f0=_0x27f0ab;let _0x126dbe=_0x260951,_0x40ecb3=0x1bb;if(_0x260951[_0x5013f0(0x153)](']:')){const _0x3e6b5f=_0x260951[_0x5013f0(0x205)](']:');_0x126dbe=_0x3e6b5f[0x0]+']',_0x40ecb3=parseInt(_0x3e6b5f[0x1],0xa)||_0x40ecb3;}else{if(_0x260951['includes'](':')&&!_0x260951['startsWith']('[')){const _0x273c5e=_0x260951[_0x5013f0(0x2a2)](':');_0x126dbe=_0x260951[_0x5013f0(0x471)](0x0,_0x273c5e),_0x40ecb3=parseInt(_0x260951[_0x5013f0(0x471)](_0x273c5e+0x1),0xa)||_0x40ecb3;}}return[_0x126dbe,_0x40ecb3];}let _0x129b61=[];if(_0x544fcc[_0x27f0ab(0x153)](_0x27f0ab(0x312)))try{const _0x435ecf=await _0x5caa8f(_0x544fcc,_0x27f0ab(0x41f)),_0x3af62b=_0x435ecf[_0x27f0ab(0x464)](_0x2b9867=>_0x2b9867[_0x27f0ab(0x353)]===0x10)['map'](_0x20aedf=>_0x20aedf[_0x27f0ab(0x4f6)]);if(_0x3af62b[_0x27f0ab(0x3ff)]>0x0){let _0x26f7e=_0x3af62b[0x0];if(_0x26f7e[_0x27f0ab(0x190)]('\x22')&&_0x26f7e[_0x27f0ab(0x15f)]('\x22'))_0x26f7e=_0x26f7e[_0x27f0ab(0x471)](0x1,-0x1);const _0x10da8a=_0x26f7e[_0x27f0ab(0x4c8)](/\\010/g,',')[_0x27f0ab(0x4c8)](/\n/g,',')[_0x27f0ab(0x205)](',')[_0x27f0ab(0x202)](_0x23477c=>_0x23477c[_0x27f0ab(0x4d1)]())['filter'](Boolean);_0x129b61=_0x10da8a[_0x27f0ab(0x202)](_0x59cee8=>_0x4cb8cc(_0x59cee8));}}catch(_0x14b601){console[_0x27f0ab(0x1e8)]('解析William域名失败:',_0x14b601);}else{let [_0x113c0d,_0x3f64e6]=_0x4cb8cc(_0x544fcc);if(_0x544fcc[_0x27f0ab(0x153)](_0x27f0ab(0x516))){const _0x1de114=_0x544fcc[_0x27f0ab(0x4ff)](/\.tp(\d+)/);if(_0x1de114)_0x3f64e6=parseInt(_0x1de114[0x1],0xa);}const _0x3fe34c=/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/,_0x3bb445=/^\[?([a-fA-F0-9:]+)\]?$/;if(!_0x3fe34c[_0x27f0ab(0x49f)](_0x113c0d)&&!_0x3bb445[_0x27f0ab(0x49f)](_0x113c0d)){const [_0x596535,_0x136d2d]=await Promise[_0x27f0ab(0x2ed)]([_0x5caa8f(_0x113c0d,'A'),_0x5caa8f(_0x113c0d,'AAAA')]),_0x96ee9f=_0x596535[_0x27f0ab(0x464)](_0xaeb67c=>_0xaeb67c[_0x27f0ab(0x353)]===0x1)[_0x27f0ab(0x202)](_0x3cbc27=>_0x3cbc27[_0x27f0ab(0x4f6)]),_0x5b86ec=_0x136d2d['filter'](_0x3ffa8f=>_0x3ffa8f[_0x27f0ab(0x353)]===0x1c)[_0x27f0ab(0x202)](_0x2537b0=>'['+_0x2537b0['data']+']'),_0x536bb9=[..._0x96ee9f,..._0x5b86ec];_0x129b61=_0x536bb9['length']>0x0?_0x536bb9['map'](_0x3aafa2=>[_0x3aafa2,_0x3f64e6]):[[_0x113c0d,_0x3f64e6]];}else _0x129b61=[[_0x113c0d,_0x3f64e6]];}const _0x1cdec7=_0x129b61[_0x27f0ab(0x51b)]((_0x4c40e5,_0x4417be)=>_0x4c40e5[0x0][_0x27f0ab(0x2a4)](_0x4417be[0x0])),_0x5efe89=_0x13e18c[_0x27f0ab(0x153)]('.')?_0x13e18c[_0x27f0ab(0x205)]('.')[_0x27f0ab(0x471)](-0x2)[_0x27f0ab(0x315)]('.'):_0x13e18c;let _0x3aed73=[..._0x5efe89+_0x4be31e][_0x27f0ab(0x380)]((_0x3c396d,_0xf2b509)=>_0x3c396d+_0xf2b509[_0x27f0ab(0x19d)](0x0),0x0);console[_0x27f0ab(0x282)](_0x27f0ab(0x388)+_0x3aed73+_0x27f0ab(0x30c)+_0x5efe89);const _0x43a9cb=[..._0x1cdec7][_0x27f0ab(0x51b)](()=>(_0x3aed73=_0x3aed73*0x41c64e6d+0x3039&0x7fffffff)/0x7fffffff-0.5);缓存反代解析数组=_0x43a9cb['slice'](0x0,0x8),console[_0x27f0ab(0x282)](_0x27f0ab(0x435)+缓存反代解析数组[_0x27f0ab(0x3ff)]+'个\x0a'+缓存反代解析数组[_0x27f0ab(0x202)](([_0x41446b,_0xba6802],_0x50d79c)=>_0x50d79c+0x1+'.\x20'+_0x41446b+':'+_0xba6802)[_0x27f0ab(0x315)]('\x0a')),缓存反代IP=_0x544fcc;}else console['log'](_0x27f0ab(0x26a)+缓存反代解析数组[_0x27f0ab(0x3ff)]+'个\x0a'+缓存反代解析数组[_0x27f0ab(0x202)](([_0x5b0ec0,_0xb5facd],_0x5e9bd8)=>_0x5e9bd8+0x1+'.\x20'+_0x5b0ec0+':'+_0xb5facd)[_0x27f0ab(0x315)]('\x0a'));return 缓存反代解析数组;}async function SOCKS5可用性验证(_0xb1ee42=_0x10737d(0x1ad),_0x56e300){const _0x37e0ed=_0x10737d,_0x49405b=Date[_0x37e0ed(0x28f)]();try{parsedSocks5Address=await 获取SOCKS5账号(_0x56e300);}catch(_0xb94ccc){return{'success':![],'error':_0xb94ccc[_0x37e0ed(0x3de)],'proxy':_0xb1ee42+_0x37e0ed(0x3e7)+_0x56e300,'responseTime':Date[_0x37e0ed(0x28f)]()-_0x49405b};}const {username:_0x58c68f,password:_0x4a961b,hostname:_0x45cc0f,port:_0x3908df}=parsedSocks5Address,_0x313ab2=_0x58c68f&&_0x4a961b?_0x58c68f+':'+_0x4a961b+'@'+_0x45cc0f+':'+_0x3908df:_0x45cc0f+':'+_0x3908df;try{const _0x4556ef=new Uint8Array(0x0),_0x4f7153=_0xb1ee42=='socks5'?await socks5Connect(_0x37e0ed(0x320),0x50,_0x4556ef):await httpConnect('check.socks5.090227.xyz',0x50,_0x4556ef);if(!_0x4f7153)return{'success':![],'error':_0x37e0ed(0x3a0),'proxy':_0xb1ee42+_0x37e0ed(0x3e7)+_0x313ab2,'responseTime':Date['now']()-_0x49405b};try{const _0x41aef4=_0x4f7153['writable'][_0x37e0ed(0x48d)](),_0x4eb906=new TextEncoder();await _0x41aef4[_0x37e0ed(0x30a)](_0x4eb906[_0x37e0ed(0x4b7)](_0x37e0ed(0x43e))),_0x41aef4['releaseLock']();const _0x21612f=_0x4f7153[_0x37e0ed(0x4f1)][_0x37e0ed(0x230)](),_0x3ff4f9=new TextDecoder();let _0x50f0b8='';try{while(!![]){const {done:_0xa049ae,value:_0x270d13}=await _0x21612f['read']();if(_0xa049ae)break;_0x50f0b8+=_0x3ff4f9[_0x37e0ed(0x453)](_0x270d13,{'stream':!![]});}}finally{_0x21612f['releaseLock']();}return await _0x4f7153[_0x37e0ed(0x2e4)](),{'success':!![],'proxy':_0xb1ee42+_0x37e0ed(0x3e7)+_0x313ab2,'ip':_0x50f0b8[_0x37e0ed(0x4ff)](/ip=(.*)/)[0x1],'loc':_0x50f0b8[_0x37e0ed(0x4ff)](/loc=(.*)/)[0x1],'responseTime':Date['now']()-_0x49405b};}catch(_0x4f2937){try{await _0x4f7153[_0x37e0ed(0x2e4)]();}catch(_0x338b5c){console[_0x37e0ed(0x282)](_0x37e0ed(0x476),_0x338b5c);}return{'success':![],'error':_0x4f2937[_0x37e0ed(0x3de)],'proxy':_0xb1ee42+_0x37e0ed(0x3e7)+_0x313ab2,'responseTime':Date[_0x37e0ed(0x28f)]()-_0x49405b};}}catch(_0x14932c){return{'success':![],'error':_0x14932c['message'],'proxy':_0xb1ee42+_0x37e0ed(0x3e7)+_0x313ab2,'responseTime':Date['now']()-_0x49405b};}}async function nginx(){const _0x14022f=_0x10737d;return _0x14022f(0x521);}async function html1101(_0x413f16,_0x57c409){const _0xf9dc9f=_0x10737d,_0x5997e3=new Date(),_0xe9caca=_0x5997e3[_0xf9dc9f(0x4b2)]()+'-'+String(_0x5997e3[_0xf9dc9f(0x1d5)]()+0x1)[_0xf9dc9f(0x40f)](0x2,'0')+'-'+String(_0x5997e3[_0xf9dc9f(0x256)]())[_0xf9dc9f(0x40f)](0x2,'0')+'\x20'+String(_0x5997e3[_0xf9dc9f(0x518)]())[_0xf9dc9f(0x40f)](0x2,'0')+':'+String(_0x5997e3['getMinutes']())[_0xf9dc9f(0x40f)](0x2,'0')+':'+String(_0x5997e3[_0xf9dc9f(0x416)]())['padStart'](0x2,'0'),_0x3fcacc=Array[_0xf9dc9f(0x1ea)](crypto[_0xf9dc9f(0x3c6)](new Uint8Array(0x8)))[_0xf9dc9f(0x202)](_0xc62805=>_0xc62805[_0xf9dc9f(0x226)](0x10)[_0xf9dc9f(0x40f)](0x2,'0'))[_0xf9dc9f(0x315)]('');return _0xf9dc9f(0x49b)+_0x413f16+_0xf9dc9f(0x185)+_0x3fcacc+_0xf9dc9f(0x329)+_0xe9caca+_0xf9dc9f(0x36d)+_0x413f16+_0xf9dc9f(0x43a)+_0x413f16+_0xf9dc9f(0x2e9)+_0x3fcacc+_0xf9dc9f(0x3f9)+_0x57c409+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20•\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20Performance\x20&\x20security\x20by\x20Cloudflare\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20

\x0a\x20\x20\x20\x20\x0a\x20\x20\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x0a\x20\x20\x20\x20\x20\x20\x0a\x0a';}globalThis[_0x10737d(0x418)]=globalThis[_0x10737d(0x418)]||Date[_0x10737d(0x28f)]();function generateIPPool(_0x64d237){const _0x57dec3=_0x10737d,_0x1d7946=_0x64d237['cf']?.[_0x57dec3(0x2cb)]||_0x57dec3(0x422),_0x151d51=_0x64d237['cf']?.[_0x57dec3(0x147)]||'XX',_0x2df2bd=[{'ip':_0x1d7946+'.edge.cloudflare.com','type':_0x57dec3(0x4fb),'status':_0x57dec3(0x481),'latency':Math[_0x57dec3(0x502)](Math['random']()*0x32)+0xa,'region':_0x151d51},{'ip':_0x57dec3(0x4c6)+Math[_0x57dec3(0x502)](Math[_0x57dec3(0x3f7)]()*0xff)+'.'+Math['floor'](Math[_0x57dec3(0x3f7)]()*0xff),'type':_0x57dec3(0x298),'status':_0x57dec3(0x481),'latency':Math[_0x57dec3(0x502)](Math[_0x57dec3(0x3f7)]()*0x32)+0x14,'region':_0x151d51},{'ip':'172.67.'+Math[_0x57dec3(0x502)](Math['random']()*0xff)+'.'+Math[_0x57dec3(0x502)](Math[_0x57dec3(0x3f7)]()*0xff),'type':_0x57dec3(0x298),'status':_0x57dec3(0x481),'latency':Math[_0x57dec3(0x502)](Math[_0x57dec3(0x3f7)]()*0x32)+0x1e,'region':_0x151d51},{'ip':'104.21.'+Math['floor'](Math[_0x57dec3(0x3f7)]()*0xff)+'.'+Math[_0x57dec3(0x502)](Math['random']()*0xff),'type':_0x57dec3(0x298),'status':_0x57dec3(0x481),'latency':Math['floor'](Math[_0x57dec3(0x3f7)]()*0x32)+0x19,'region':_0x151d51},{'ip':'162.159.'+Math[_0x57dec3(0x502)](Math[_0x57dec3(0x3f7)]()*0xff)+'.'+Math['floor'](Math[_0x57dec3(0x3f7)]()*0xff),'type':_0x57dec3(0x298),'status':'ONLINE','latency':Math[_0x57dec3(0x502)](Math[_0x57dec3(0x3f7)]()*0x32)+0x23,'region':_0x151d51},{'ip':_0x57dec3(0x45a)+Math['floor'](Math[_0x57dec3(0x3f7)]()*0xff)+'.'+Math[_0x57dec3(0x502)](Math[_0x57dec3(0x3f7)]()*0xff),'type':'ANYCAST','status':'ONLINE','latency':Math[_0x57dec3(0x502)](Math[_0x57dec3(0x3f7)]()*0x32)+0x1c,'region':_0x151d51}];return{'pool':_0x2df2bd,'total':_0x2df2bd[_0x57dec3(0x3ff)],'online':_0x2df2bd[_0x57dec3(0x3ff)]};}function generateCFspiderPage(_0x3fcfdf,_0x355ddb,_0x1e6c39,_0x17c6b9,_0x4a0759=!![],_0x42cdda=![],_0x37bbcc=''){const _0x159cb1=_0x10737d,_0x5d92d5=_0x3fcfdf['cf']?.[_0x159cb1(0x2cb)]||_0x159cb1(0x422),_0x65759d=_0x3fcfdf['cf']?.[_0x159cb1(0x147)]||'XX',_0x4e5c07=_0x3fcfdf['cf']?.['city']||_0x159cb1(0x4a1),_0x2e90b3=_0x3fcfdf['cf']?.[_0x159cb1(0x170)]||_0x159cb1(0x41c),_0x49389c=_0x3fcfdf['cf']?.[_0x159cb1(0x1c5)]||_0x159cb1(0x41c),_0x3f91b4=_0x3fcfdf['cf']?.['timezone']||_0x159cb1(0x165),_0x43c49c=_0x3fcfdf['cf']?.[_0x159cb1(0x26b)]||'0',_0x212b54=_0x3fcfdf['cf']?.['longitude']||'0',_0x146387=_0x3fcfdf['cf']?.['continent']||'XX',_0x25efcf=_0x355ddb[_0x159cb1(0x3ae)][_0x159cb1(0x198)](_0x159cb1(0x1f4))||'zh',_0x388bda='1.8.5',_0xd50b1a=!_0x42cdda;let _0x1a46d3='',_0x398ae1='',_0xae86e4='',_0x44da64='',_0x3f6879=![];if(_0x37bbcc){const _0x4ebda0=_0x37bbcc[_0x159cb1(0x205)](':');_0x4ebda0[_0x159cb1(0x3ff)]>=0x2&&(_0x1a46d3=_0x4ebda0[0x0],_0x398ae1=_0x4ebda0[0x1],_0xae86e4=_0x4ebda0[0x2]||'',_0x44da64=_0x4ebda0[0x3]||'',_0x3f6879=!![]);}const _0x4b07fc=_0x355ddb[_0x159cb1(0x3c4)],_0x59a49d=_0x159cb1(0x217),_0x176fb5='/'+_0x17c6b9,_0x2e91d4=_0x17c6b9?_0x159cb1(0x3bb)+_0x17c6b9+'@'+_0x4b07fc+':'+_0x59a49d+'?security=tls&type=ws&host='+_0x4b07fc+_0x159cb1(0x181)+_0x4b07fc+_0x159cb1(0x326)+encodeURIComponent(_0x176fb5)+_0x159cb1(0x4ce)+_0x5d92d5:'',_0x430a7c='/'+_0x17c6b9+_0x159cb1(0x246)+encodeURIComponent(_0x37bbcc),_0x4a2bd6=_0x3f6879&&_0x17c6b9?_0x159cb1(0x3bb)+_0x17c6b9+'@'+_0x4b07fc+':'+_0x59a49d+'?security=tls&type=ws&host='+_0x4b07fc+_0x159cb1(0x181)+_0x4b07fc+_0x159cb1(0x326)+encodeURIComponent(_0x430a7c)+_0x159cb1(0x3d3)+_0x1a46d3[_0x159cb1(0x205)]('.')[0x0]:'',_0x203f89={'JP':'日本','CN':'中国','US':'美国','HK':'香港','TW':'台湾','SG':'新加坡','KR':'韩国','DE':'德国','FR':'法国','GB':'英国','NL':'荷兰','AU':_0x159cb1(0x4f7),'CA':_0x159cb1(0x179),'IN':'印度','BR':'巴西'},_0x489ecb={'NRT':_0x159cb1(0x3c2),'HND':_0x159cb1(0x260),'KIX':_0x159cb1(0x1f5),'HKG':'香港','SIN':_0x159cb1(0x2fa),'ICN':_0x159cb1(0x25c),'TPE':'台北桃园','LAX':_0x159cb1(0x251),'SFO':_0x159cb1(0x334),'SEA':_0x159cb1(0x454),'ORD':_0x159cb1(0x1eb),'LHR':'伦敦','AMS':_0x159cb1(0x27e),'FRA':_0x159cb1(0x29e),'SYD':'悉尼','CDG':'巴黎'},_0x2287dc={'AS':'亚洲','EU':'欧洲','NA':'北美','SA':'南美','AF':'非洲','OC':'大洋洲'},_0x5d2dfe={'zh':{'subtitle':_0x159cb1(0x40a),'nodeLocation':_0x159cb1(0x398),'country':_0x159cb1(0x2be),'city':'城市','status':'状态','online':'在线','poolTitle':_0x159cb1(0x1c4),'ipAddress':_0x159cb1(0x365),'latency':'延迟','regionLabel':'地区','type':'类型','apiTitle':_0x159cb1(0x281),'codeTitle':_0x159cb1(0x16f),'loading':_0x159cb1(0x44a),'langSwitch':'EN','footer':'由\x20Cloudflare\x20Workers\x20强力驱动','nodeInfoTitle':_0x159cb1(0x364),'visitorInfoTitle':_0x159cb1(0x2fd),'visitorIP':_0x159cb1(0x4c1),'timezone':'时区','asn':'ASN\x20编号','coordinates':_0x159cb1(0x447),'continent':'大洲','feature1':'全球\x20300+\x20节点','feature2':_0x159cb1(0x1cc),'feature3':'隐身模式','feature4':_0x159cb1(0x1b5),'feature5':_0x159cb1(0x17c),'feature6':_0x159cb1(0x493),'vlessTitle':_0x159cb1(0x48c),'vlessUUID':_0x159cb1(0x448),'vlessHost':_0x159cb1(0x1a1),'vlessPort':'端口','vlessLink':_0x159cb1(0x171),'vlessCopy':_0x159cb1(0x519),'version':'版本','defaultUuidWarning':'当前使用公共\x20UUID,建议通过\x20Cloudflare\x20Dashboard\x20设置私有\x20UUID\x20环境变量以提高安全性','newIp':_0x159cb1(0x463),'transport':_0x159cb1(0x1de),'security':_0x159cb1(0x3d9),'encryption':'加密方式','credits':'VLESS\x20技术基于\x20edgetunnel\x20项目','v2rayClients':'支持的客户端','copySuccess':_0x159cb1(0x26e),'twoProxyTitle':'双层代理配置','twoProxyHost':_0x159cb1(0x278),'twoProxyPort':_0x159cb1(0x301),'twoProxyAuth':_0x159cb1(0x30d),'twoProxyEnabled':_0x159cb1(0x48f),'twoProxyDisabled':_0x159cb1(0x186),'twoProxyLink':_0x159cb1(0x2d4),'twoProxyDesc':'流量路径:\x20本地\x20→\x20Workers\x20(VLESS)\x20→\x20第二层代理\x20→\x20目标网站','twoProxyEnvHint':'可选功能:如需指定出口\x20IP\x20地区或国内无法直连代理时使用','twoProxyHowTo':_0x159cb1(0x438),'exitIp':_0x159cb1(0x36a),'proxyIpTitle':_0x159cb1(0x4ad),'proxyIpDesc':_0x159cb1(0x406),'proxyIpDefault':_0x159cb1(0x1e7),'proxyIpHK':_0x159cb1(0x473),'proxyIpCustom':_0x159cb1(0x2af),'proxyIpTesting':_0x159cb1(0x3c3),'proxyIpOnline':'可用','proxyIpOffline':_0x159cb1(0x2db),'proxyIpSaved':_0x159cb1(0x472),'proxyIpTest':'检测','proxyIpSave':'保存','proxyIpPlaceholder':_0x159cb1(0x369)},'en':{'subtitle':_0x159cb1(0x148),'nodeLocation':_0x159cb1(0x17a),'country':_0x159cb1(0x328),'city':_0x159cb1(0x492),'status':_0x159cb1(0x3fc),'online':'ONLINE','poolTitle':'IP\x20Pool\x20Status','ipAddress':_0x159cb1(0x33a),'latency':_0x159cb1(0x356),'regionLabel':_0x159cb1(0x3c5),'type':_0x159cb1(0x4a3),'apiTitle':_0x159cb1(0x21f),'codeTitle':_0x159cb1(0x367),'loading':_0x159cb1(0x14a),'langSwitch':'中文','footer':_0x159cb1(0x520),'nodeInfoTitle':_0x159cb1(0x2b5),'visitorInfoTitle':_0x159cb1(0x15c),'visitorIP':_0x159cb1(0x47d),'timezone':'Timezone','asn':_0x159cb1(0x271),'coordinates':_0x159cb1(0x3f1),'continent':_0x159cb1(0x323),'feature1':'300+\x20Global\x20Nodes','feature2':_0x159cb1(0x343),'feature3':'Stealth\x20Mode','feature4':'HTTP/2\x20Protocol','feature5':_0x159cb1(0x252),'feature6':'VLESS\x20Protocol','vlessTitle':_0x159cb1(0x361),'vlessUUID':'UUID','vlessHost':_0x159cb1(0x289),'vlessPort':_0x159cb1(0x4f5),'vlessLink':_0x159cb1(0x221),'vlessCopy':_0x159cb1(0x322),'version':'Version','defaultUuidWarning':_0x159cb1(0x39e),'newIp':'Dynamic\x20IP','transport':'Transport','security':'Security','encryption':'Encryption','credits':_0x159cb1(0x47e),'v2rayClients':_0x159cb1(0x2a7),'copySuccess':'Copied!','twoProxyTitle':'Two-Layer\x20Proxy','twoProxyHost':_0x159cb1(0x1b0),'twoProxyPort':_0x159cb1(0x3ce),'twoProxyAuth':_0x159cb1(0x2d1),'twoProxyEnabled':'Enabled','twoProxyDisabled':_0x159cb1(0x1d2),'twoProxyLink':_0x159cb1(0x296),'twoProxyDesc':_0x159cb1(0x309),'twoProxyEnvHint':_0x159cb1(0x311),'twoProxyHowTo':_0x159cb1(0x499),'exitIp':'Exit\x20IP','proxyIpTitle':_0x159cb1(0x4e0),'proxyIpDesc':_0x159cb1(0x399),'proxyIpDefault':_0x159cb1(0x490),'proxyIpHK':_0x159cb1(0x4a0),'proxyIpCustom':_0x159cb1(0x215),'proxyIpTesting':_0x159cb1(0x2fc),'proxyIpOnline':_0x159cb1(0x258),'proxyIpOffline':'Offline','proxyIpSaved':_0x159cb1(0x37e),'proxyIpTest':_0x159cb1(0x436),'proxyIpSave':'Save','proxyIpPlaceholder':_0x159cb1(0x21b)}},_0x2a3965=_0x5d2dfe[_0x25efcf]||_0x5d2dfe['zh'],_0x53b3ef=_0x203f89[_0x65759d]||_0x65759d,_0xcf291d=_0x489ecb[_0x5d92d5]||_0x5d92d5,_0x397bfc=_0x2287dc[_0x146387]||_0x146387,_0x28f968=_0x4e5c07,_0x28eea7=!_0xd50b1a;return _0x159cb1(0x272)+(_0x25efcf==='zh'?_0x159cb1(0x1ce):'en')+'\x22>\x0a\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20CFSPIDER\x20//\x20VLESS\x20PROXY\x20NETWORK\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x0a\x0a\x20\x20\x20\x20'+_0x2a3965['langSwitch']+_0x159cb1(0x2a9)+_0x388bda+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965['subtitle']+_0x159cb1(0x228)+(_0xd50b1a?_0x159cb1(0x511):_0x159cb1(0x1b3))+'\x22>'+(_0xd50b1a?'环境变量模式':_0x159cb1(0x33c))+_0x159cb1(0x29f)+_0x2a3965[_0x159cb1(0x168)]+_0x159cb1(0x362)+_0x2a3965[_0x159cb1(0x4e5)]+_0x159cb1(0x2c0)+(_0xd50b1a?'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Connection\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965['vlessHost']+_0x159cb1(0x20e)+_0x4b07fc+_0x159cb1(0x23a)+_0x2a3965[_0x159cb1(0x37c)]+_0x159cb1(0x4bf)+_0x2a3965[_0x159cb1(0x3d7)]+_0x159cb1(0x2d9)+_0x2a3965[_0x159cb1(0x3b0)]+'TLS\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Authentication\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x19f)]+_0x159cb1(0x39c)+_0x17c6b9+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Path/'+_0x17c6b9[_0x159cb1(0x1fd)](0x0,0x8)+_0x159cb1(0x423)+_0x2a3965[_0x159cb1(0x22f)]+_0x159cb1(0x348)+_0x2a3965[_0x159cb1(0x2b0)]+_0x159cb1(0x14d)+_0x2a3965[_0x159cb1(0x467)]+_0x159cb1(0x412)+_0x2e91d4+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20':_0x159cb1(0x38c)+_0x2a3965[_0x159cb1(0x45b)]+_0x159cb1(0x20e)+_0x4b07fc+_0x159cb1(0x23a)+_0x2a3965[_0x159cb1(0x37c)]+_0x159cb1(0x4bf)+_0x2a3965[_0x159cb1(0x3d7)]+'WebSocket\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x3b0)]+'TLS\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Settings\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x22f)]+_0x159cb1(0x150)+_0x2a3965['online']+_0x159cb1(0x27f))+_0x159cb1(0x4a8)+_0x2a3965[_0x159cb1(0x342)]+_0x159cb1(0x280)+(_0x3f6879?_0x159cb1(0x357):'var(--bg-secondary)')+';\x20border:\x20'+(_0x3f6879?_0x159cb1(0x270):'1px\x20solid\x20var(--border-color)')+_0x159cb1(0x45f)+(_0x3f6879?'var(--accent-green)':_0x159cb1(0x483))+';\x20display:\x20flex;\x20align-items:\x20center;\x20gap:\x2010px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x3bd)]+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20配置\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20删除\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20':_0x159cb1(0x2a0)+(_0x3f6879?_0x159cb1(0x44b):'')+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x3f6879?_0x159cb1(0x50d):'')+_0x159cb1(0x203)+(_0x3f6879?_0x2a3965[_0x159cb1(0x164)]:_0x2a3965[_0x159cb1(0x1c2)])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20')+_0x159cb1(0x299)+(_0x3f6879?'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x16a)]+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
'+_0x2a3965[_0x159cb1(0x4fe)]+_0x159cb1(0x1ef)+_0x1a46d3+_0x159cb1(0x2e1)+_0x2a3965[_0x159cb1(0x1f2)]+_0x159cb1(0x4e2)+_0x398ae1+'
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
'+_0x2a3965[_0x159cb1(0x189)]+':\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x4a2bd6+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20':'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(!_0xd50b1a?_0x159cb1(0x294):'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20💡\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x4e4)]+'
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965['twoProxyHowTo']+_0x159cb1(0x250))+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20')+_0x159cb1(0x4e1)+_0x2a3965[_0x159cb1(0x244)]+_0x159cb1(0x2f4)+_0x5d92d5+_0x159cb1(0x31c)+_0x2a3965['country']+_0x159cb1(0x2f4)+_0x53b3ef+_0x159cb1(0x31c)+_0x2a3965['city']+_0x159cb1(0x2f4)+_0x28f968+_0x159cb1(0x31c)+_0x2a3965[_0x159cb1(0x425)]+_0x159cb1(0x2f4)+_0x397bfc+_0x159cb1(0x31c)+_0x2a3965[_0x159cb1(0x4fa)]+''+_0x2a3965[_0x159cb1(0x168)]+_0x159cb1(0x31c)+_0x2a3965[_0x159cb1(0x415)]+_0x159cb1(0x2f4)+_0x388bda+_0x159cb1(0x209)+_0x2a3965[_0x159cb1(0x344)]+_0x159cb1(0x183)+_0x2a3965[_0x159cb1(0x38a)]+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20🇳🇱\x20'+_0x2a3965[_0x159cb1(0x262)]+_0x159cb1(0x17e)+_0x5d92d5['toLowerCase']()+_0x159cb1(0x4db)+_0x2a3965['proxyIpHK']+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20proxyip.cfspider.com\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20⚙️\x20'+_0x2a3965[_0x159cb1(0x432)]+_0x159cb1(0x43d)+_0x2a3965[_0x159cb1(0x1cb)]+'\x22\x20style=\x22flex:\x201;\x20background:\x20var(--bg-secondary);\x20border:\x201px\x20solid\x20var(--border-color);\x20border-radius:\x206px;\x20padding:\x2010px\x2014px;\x20color:\x20var(--text-primary);\x20font-family:\x20inherit;\x20font-size:\x200.9rem;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x482)]+_0x159cb1(0x3e8)+_0x2a3965[_0x159cb1(0x43f)]+_0x159cb1(0x33d)+_0x2a3965[_0x159cb1(0x4ed)]+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x244)]+_0x159cb1(0x222)+_0xcf291d+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x147)]+_0x159cb1(0x222)+_0x53b3ef+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x3a2)]+_0x159cb1(0x222)+_0x28f968+_0x159cb1(0x478)+_0x2a3965[_0x159cb1(0x1c5)]+'AS'+_0x49389c+_0x159cb1(0x478)+_0x2a3965['timezone']+_0x159cb1(0x222)+_0x3f91b4+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x368)]+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a3965[_0x159cb1(0x1d7)]+_0x159cb1(0x222)+_0x1e6c39+_0x159cb1(0x478)+_0x2a3965['country']+_0x159cb1(0x222)+_0x53b3ef+_0x159cb1(0x478)+_0x2a3965[_0x159cb1(0x1c5)]+'AS'+_0x49389c+_0x159cb1(0x478)+_0x2a3965['coordinates']+_0x159cb1(0x222)+_0x43c49c+',\x20'+_0x212b54+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Python\x20基础用法\x20-\x20pip\x20install\x20cfspider\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
import\x20cfspider\x0a\x0a#\x20基础使用\x0aresponse\x20=\x20cfspider.get(\x0a\x20\x20\x20\x20\x22https://httpbin.org/ip\x22,\x0a\x20\x20\x20\x20cf_proxies=\x22https://'+_0x4b07fc+_0x159cb1(0x291)+(_0xd50b1a?_0x17c6b9:_0x159cb1(0x156))+_0x159cb1(0x33e)+_0x4b07fc+'\x22,\x0a\x20\x20\x20\x20uuid=\x22'+(_0xd50b1a?_0x17c6b9:_0x159cb1(0x156))+_0x159cb1(0x409)+(_0x3f6879||!_0xd50b1a?_0x159cb1(0x32e)+_0x4b07fc+_0x159cb1(0x291)+(_0xd50b1a?_0x17c6b9:_0x159cb1(0x156))+'\x22,\x0a\x20\x20\x20\x20two_proxy=\x22'+(_0x3f6879?_0x37bbcc:'')+'\x22\x0a)\x0aprint(response.json())
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20':'')+_0x159cb1(0x392)+_0x2a3965['apiTitle']+_0x159cb1(0x39d)+_0x388bda+_0x159cb1(0x329)+_0x2a3965[_0x159cb1(0x2d5)]+_0x159cb1(0x2d7)+_0x2a3965[_0x159cb1(0x199)]+_0x159cb1(0x522)+_0x4b07fc+_0x159cb1(0x41e)+(_0xd50b1a?'\x27'+_0x17c6b9+'\x27':_0x159cb1(0x3c1))+_0x159cb1(0x219)+(_0x3f6879?'\x27'+_0x37bbcc+'\x27':_0x159cb1(0x3c1))+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20STORAGE_KEY\x20=\x20\x27cfspider_config_\x27\x20+\x20HOST;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20配置管理\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20loadConfig()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(ENV_UUID)\x20return\x20{\x20uuid:\x20ENV_UUID,\x20uuidViewed:\x20true,\x20twoProxy:\x20ENV_TWO_PROXY\x20||\x20\x27\x27\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20saved\x20=\x20localStorage.getItem(STORAGE_KEY);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(saved)\x20return\x20JSON.parse(saved);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20{\x20uuid:\x20crypto.randomUUID(),\x20uuidViewed:\x20false,\x20twoProxy:\x20\x27\x27\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20saveConfig(config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20config;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20saveConfig(config)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!ENV_UUID)\x20localStorage.setItem(STORAGE_KEY,\x20JSON.stringify(config));\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20config\x20=\x20loadConfig();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20maskUuid(uuid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20uuid.substring(0,\x204)\x20+\x20\x27****-****-****-****-\x27\x20+\x20uuid.slice(-4);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20maskProxy(proxy)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!proxy)\x20return\x20\x27未配置\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20parts\x20=\x20proxy.split(\x27:\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(parts.length\x20>=\x202)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20parts[0].substring(0,\x204)\x20+\x20\x27****:\x27\x20+\x20parts[1]\x20+\x20(parts.length\x20>\x202\x20?\x20\x27:****\x27\x20:\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20\x27****\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20updateDisplay()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(ENV_UUID)\x20return;\x20//\x20环境变量模式不需要更新\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20uuidDisplay\x20=\x20document.getElementById(\x27uuidDisplay\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20vlessStatus\x20=\x20document.getElementById(\x27vlessStatus\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20proxyDisplay\x20=\x20document.getElementById(\x27proxyDisplay\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(uuidDisplay)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.uuidViewed)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uuidDisplay.textContent\x20=\x20maskUuid(config.uuid);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uuidDisplay.classList.add(\x27uuid-masked\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uuidDisplay.textContent\x20=\x20\x27点击查看生成的\x20UUID\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uuidDisplay.classList.remove(\x27uuid-masked\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(vlessStatus)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20vlessStatus.textContent\x20=\x20config.uuidViewed\x20?\x20\x27已查看,请在弹窗中复制\x27\x20:\x20\x27请先查看\x20UUID\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(proxyDisplay)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20proxyDisplay.textContent\x20=\x20maskProxy(config.twoProxy);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateCodeExamples();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20updateCodeExamples()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20更新代码示例中的\x20UUID\x20占位符\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20codeSection\x20=\x20document.querySelector(\x27.code-section\x20pre\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!codeSection\x20||\x20ENV_UUID)\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20placeholder\x20=\x20config.uuidViewed\x20?\x20\x27<已查看,请粘贴您的UUID>\x27\x20:\x20\x27<请先查看UUID>\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20代码示例在服务端渲染,这里可以添加动态更新逻辑\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20UUID\x20操作\x0a\x20\x20\x20\x20\x20\x20\x20\x20function\x20getVlessLink()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20proxyIpType\x20=\x20localStorage.getItem(\x27cfspider_proxyip_type\x27)\x20||\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20proxyIpValue\x20=\x20localStorage.getItem(\x27cfspider_proxyip\x27)\x20||\x20PROXYIP_OPTIONS[\x27default\x27]\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20path\x20=\x20\x27/\x27\x20+\x20config.uuid;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(proxyIpType\x20!==\x20\x27default\x27\x20&&\x20proxyIpValue)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20path\x20+=\x20\x27?proxyip=\x27\x20+\x20encodeURIComponent(proxyIpValue);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20\x27vless://\x27\x20+\x20config.uuid\x20+\x20\x27@\x27\x20+\x20HOST\x20+\x20\x27:443?security=tls&type=ws&host=\x27\x20+\x20HOST\x20+\x20\x27&sni=\x27\x20+\x20HOST\x20+\x20\x27&path=\x27\x20+\x20encodeURIComponent(path)\x20+\x20\x27&encryption=none#CFspider-\x27\x20+\x20(proxyIpType\x20===\x20\x27hk\x27\x20?\x20\x27HK\x27\x20:\x20\x27'+_0x5d92d5+_0x159cb1(0x38f)+_0x5d92d5[_0x159cb1(0x48a)]()+_0x159cb1(0x194)+_0x2a3965[_0x159cb1(0x43c)]+'\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20尝试解析域名\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20testUrl\x20=\x20\x27https://1.1.1.1/dns-query?name=\x27\x20+\x20encodeURIComponent(address.split(\x27:\x27)[0])\x20+\x20\x27&type=A\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20response\x20=\x20await\x20fetch(testUrl,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headers:\x20{\x20\x27Accept\x27:\x20\x27application/dns-json\x27\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20signal:\x20AbortSignal.timeout(5000)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20response.json();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data.Answer\x20&&\x20data.Answer.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resultEl.innerHTML\x20=\x20\x27✓\x20'+_0x2a3965[_0x159cb1(0x23f)]+_0x159cb1(0x375)+_0x2a3965['proxyIpOnline']+_0x159cb1(0x338)+_0x2a3965[_0x159cb1(0x321)]+_0x159cb1(0x47f)+_0x2a3965[_0x159cb1(0x321)]+_0x159cb1(0x456)+_0x2a3965['copySuccess']+_0x159cb1(0x3f0)+_0x2a3965[_0x159cb1(0x2b0)]+_0x159cb1(0x292)+_0x2a3965[_0x159cb1(0x26c)]+_0x159cb1(0x4e6)+_0x2a3965[_0x159cb1(0x2b0)]+_0x159cb1(0x33f);} \ No newline at end of file +import{connect as e}from"cloudflare:sockets";let t,n,s,r="",o=null,a=!1,i="",c={},l=0,d=!0,u="https://doh.cmliussss.net/CMLiussss",p=["*tapecontent.net","*cloudatacdn.com","*loadshare.org","*cdn-centaurus.com","scholar.google.com"];const h="https://edt-pages.github.io";export default{async fetch(e,n,s){const l=new URL(e.url),w=e.headers.get("User-Agent")||"null",b=e.headers.get("Upgrade"),C=n.ADMIN||n.admin||n.PASSWORD||n.password||n.pswd||n.TOKEN||n.KEY||n.UUID||n.uuid||"cfspider-public",A=n.KEY||"cfspider-default-key",E=await $(C+A),O=/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,R=n.UUID||n.uuid,_=R&&O.test(R)?R.toLowerCase():[E.slice(0,8),E.slice(8,12),"4"+E.slice(13,16),"8"+E.slice(17,20),E.slice(20)].join("-"),j=(n.HOST?(await I(n.HOST)).map(e=>e.toLowerCase().replace(/^https?:\/\//,"").split("/")[0].split(":")[0]):[l.hostname])[0];if(n.PROXYIP){const e=await I(n.PROXYIP);r=e[Math.floor(Math.random()*e.length)],d=!1}else r=(e.cf.colo+".PrOxYIp.CmLiUsSsS.nEt").toLowerCase();const D=e.headers.get("X-Real-IP")||e.headers.get("CF-Connecting-IP")||e.headers.get("X-Forwarded-For")||e.headers.get("True-Client-IP")||e.headers.get("Fly-Client-IP")||e.headers.get("X-Appengine-Remote-Addr")||e.headers.get("X-Forwarded-For")||e.headers.get("X-Real-IP")||e.headers.get("X-Cluster-Client-IP")||e.cf?.clientTcpRtt||"unknownIP";if(n.GO2SOCKS5&&(p=await I(n.GO2SOCKS5)),u=n.echDoh||n.DOH||u,b&&"websocket"===b){if(C){await async function(e){const t=new URL(e.url),{pathname:n,searchParams:s}=t,l=n.toLowerCase();i=s.get("socks5")||s.get("http")||null,a=s.has("globalproxy")||!1;const u=l.match(/\/(proxyip[.=]|pyip=|ip=)(.+)/);if(s.has("proxyip")){const e=s.get("proxyip");return r=e.includes(",")?e.split(",")[Math.floor(Math.random()*e.split(",").length)]:e,void(d=!1)}if(u){const e="proxyip."===u[1]?`proxyip.${u[2]}`:u[2];return r=e.includes(",")?e.split(",")[Math.floor(Math.random()*e.split(",").length)]:e,void(d=!1)}let p;if(p=n.match(/\/(socks5?|http):\/?\/?(.+)/i)){if(o="http"===p[1].toLowerCase()?"http":"socks5",i=p[2].split("#")[0],a=!0,i.includes("@")){const e=i.lastIndexOf("@");let t=i.substring(0,e).replaceAll("%3D","=");/^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i.test(t)&&!t.includes(":")&&(t=atob(t)),i=`${t}@${i.substring(e+1)}`}}else if(p=n.match(/\/(g?s5|socks5|g?http)=(.+)/i)){const e=p[1].toLowerCase();i=p[2],o=e.includes("http")?"http":"socks5",a=e.startsWith("g")||a}if(i)try{c=await v(i),o=s.get("http")?"http":o}catch(e){console.error("parseSocks5failed:",e.message),o=null}else o=null}(e);const t=new URL(e.url).pathname;let s="";if(t.includes("two_proxy=")){const e=t.match(/two_proxy=([^&]+)/);e&&(s=decodeURIComponent(decodeURIComponent(e[1])))}const l=s||n.TWO_PROXY||n.two_proxy||"";return await async function(e,t,n=""){const s=new WebSocketPair,[r,o]=Object.values(s);o.accept();let a={socket:null},i=!1;const c=e.headers.get("sec-websocket-protocol")||"",l=function(e,t){let n=!1;return new ReadableStream({start(s){e.addEventListener("message",e=>{n||s.enqueue(e.data)}),e.addEventListener("close",()=>{n||(m(e),s.close())}),e.addEventListener("error",e=>s.error(e));const{earlyData:r,error:o}=function(e){if(!e)return{error:null};try{const t=atob(e.replace(/-/g,"+").replace(/_/g,"/")),n=new Uint8Array(t.length);for(let e=0;e=2&&(u={hostname:e[0],port:parseInt(e[1],10),username:e[2]||"",password:e[3]||""},console.log(`[twoProxy] 已enabled: ${u.hostname}:${u.port}`))}return l.pipeTo(new WritableStream({async write(e){if(i)return await g(e,o,null);if(a.socket){const t=a.socket.writable.getWriter();return await t.write(e),void t.releaseLock()}if(null===d){const t=new Uint8Array(e);d=t.byteLength>=58&&13===t[56]&&10===t[57]}if(a.socket){const t=a.socket.writable.getWriter();return await t.write(e),void t.releaseLock()}if(d){const{port:n,hostname:s,rawClientData:r}=function(e,t){const n=function(e){const t=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],n=(e,t)=>(e>>>t|e<<32-t)>>>0,s=8*(e=unescape(encodeURIComponent(e))).length;for(e+=String.fromCharCode(128);8*e.length%512!=448;)e+=String.fromCharCode(0);const r=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],o=Math.floor(s/4294967296),a=4294967295&s;e+=String.fromCharCode(o>>>24&255,o>>>16&255,o>>>8&255,255&o,a>>>24&255,a>>>16&255,a>>>8&255,255&a);const i=[];for(let t=0;t>>3,r=n(s[e-2],17)^n(s[e-2],19)^s[e-2]>>>10;s[e]=s[e-16]+t+s[e-7]+r>>>0}let[o,a,c,l,d,u,p,h]=r;for(let e=0;e<64;e++){const r=h+(n(d,6)^n(d,11)^n(d,25))+(d&u^~d&p)+t[e]+s[e]>>>0,i=o&a^o&c^a&c;h=p,p=u,u=d,d=l+r>>>0,l=c,c=a,a=o,o=r+((n(o,2)^n(o,13)^n(o,22))+i>>>0)>>>0}for(let e=0;e<8;e++)r[e]=r[e]+(0===e?o:1===e?a:2===e?c:3===e?l:4===e?d:5===e?u:6===e?p:h)>>>0}let c="";for(let e=0;e<7;e++)for(let t=24;t>=0;t-=8)c+=(r[e]>>>t&255).toString(16).padStart(2,"0");return c}(t);if(e.byteLength<56)return{hasError:!0,message:"invalid data"};if(13!==new Uint8Array(e.slice(56,57))[0]||10!==new Uint8Array(e.slice(57,58))[0])return{hasError:!0,message:"invalid header format"};if((new TextDecoder).decode(e.slice(0,56))!==n)return{hasError:!0,message:"invalid password"};const s=e.slice(58);if(s.byteLength<6)return{hasError:!0,message:"invalid S5 request data"};const r=new DataView(s);if(1!==r.getUint8(0))return{hasError:!0,message:"unsupported command, only TCP is allowed"};const o=r.getUint8(1);let a=0,i=2,c="";switch(o){case 1:a=4,c=new Uint8Array(s.slice(i,i+a)).join(".");break;case 3:a=new Uint8Array(s.slice(i,i+1))[0],i+=1,c=(new TextDecoder).decode(s.slice(i,i+a));break;case 4:a=16;const e=new DataView(s.slice(i,i+a)),t=[];for(let n=0;n<8;n++)t.push(e.getUint16(2*n).toString(16));c=t.join(":");break;default:return{hasError:!0,message:`invalid addressType is ${o}`}}if(!c)return{hasError:!0,message:`address is empty, addressType is ${o}`};const l=i+a,d=s.slice(l,l+2);return{hasError:!1,addressType:o,port:new DataView(d).getUint16(0),hostname:c,rawClientData:s.slice(l+4)}}(e,t);if(y(s))throw new Error("Speedtest site is blocked");await f(s,n,r,o,null,a,t,u)}else{const{port:n,hostname:s,rawIndex:r,version:c,isUDP:l}=function(e,t){if(e.byteLength<24)return{hasError:!0,message:"Invalid data"};const n=new Uint8Array(e.slice(0,1));if(function(e,t=0){const n=[...e.slice(t,t+16)].map(e=>e.toString(16).padStart(2,"0")).join("");return`${n.substring(0,8)}-${n.substring(8,12)}-${n.substring(12,16)}-${n.substring(16,20)}-${n.substring(20)}`}(new Uint8Array(e.slice(1,17)))!==t)return{hasError:!0,message:"Invalid uuid"};const s=new Uint8Array(e.slice(17,18))[0],r=new Uint8Array(e.slice(18+s,19+s))[0];let o=!1;if(1===r);else{if(2!==r)return{hasError:!0,message:"Invalid command"};o=!0}const a=19+s,i=new DataView(e.slice(a,a+2)).getUint16(0);let c=a+2,l=0,d=c+1,u="";const p=new Uint8Array(e.slice(c,d))[0];switch(p){case 1:l=4,u=new Uint8Array(e.slice(d,d+l)).join(".");break;case 2:l=new Uint8Array(e.slice(d,d+1))[0],d+=1,u=(new TextDecoder).decode(e.slice(d,d+l));break;case 3:l=16;const t=[],n=new DataView(e.slice(d,d+l));for(let e=0;e<8;e++)t.push(n.getUint16(2*e).toString(16));u=t.join(":");break;default:return{hasError:!0,message:`Invalid address type: ${p}`}}return u?{hasError:!1,addressType:p,port:i,hostname:u,isUDP:o,rawIndex:d+l,version:n}:{hasError:!0,message:`Invalid address: ${p}`}}(e,t);if(y(s))throw new Error("Speedtest site is blocked");if(l){if(53!==n)throw new Error("UDP is not supported");i=!0}const d=new Uint8Array([c[0],0]),p=e.slice(r);if(i)return g(p,o,d);await f(s,n,p,o,d,a,t,u)}}})).catch(e=>{}),new Response(null,{status:101,webSocket:r})}(e,_,l)}}else{if("http:"===l.protocol)return Response.redirect(l.href.replace(`http://${l.hostname}`,`https://${l.hostname}`),301);const r=l.pathname.slice(1).toLowerCase(),o=("false"!==n.NEW_IP&&n.NEW_IP,!R||!O.test(R)),a=n.TWO_PROXY||n.two_proxy||"";if(""===r||"/"===r){const t=e.cf?.colo||"UNKNOWN",n="/"+_+(a?"?two_proxy="+encodeURIComponent(a):""),s="vless://"+_+"@"+l.hostname+":443?security=tls&type=ws&host="+l.hostname+"&sni="+l.hostname+"&path="+encodeURIComponent(n)+"&encryption=none#CFspider-"+t;return new Response(JSON.stringify({status:"online",version:"1.8.7",colo:t,host:l.hostname,uuid:_,vless:s,two_proxy:a||null},null,2),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}if("api/proxyip"===r){const t=e.cf?.colo||"UNKNOWN",s=(t+".proxyip.cmliussss.net").toLowerCase(),r=n.PROXYIP||"";return new Response(JSON.stringify({colo:t,default:s,hk:"proxyip.cfspider.com",env:r||null,current:r||s,options:{default:{name:"nlNode",address:s},hk:{name:"hkNode",address:"proxyip.cfspider.com"}}}),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}if("api/uuid"===r||"api/config"===r){const e="false"!==n.NEW_IP&&"0"!==n.NEW_IP,t=n.TWO_PROXY||n.two_proxy||"",s={host:l.hostname,new_ip:e,version:"1.8.7",is_default_uuid:o,two_proxy_enabled:!!t};if(o?(s.uuid=_,s.vless_path=t?"/"+_+"?two_proxy="+encodeURIComponent(t):"/"+_):t&&(s.two_proxy=t),t){const e=t.split(":");s.two_proxy_host=e[0]||"",s.two_proxy_port=e[1]||""}return new Response(JSON.stringify(s),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}if("proxy"===r||r.startsWith("proxy?")){const t=l.searchParams.get("url"),s=l.searchParams.get("method")||"GET",r=l.searchParams.get("two_proxy");if(!t)return new Response(JSON.stringify({error:"Missing url parameter"}),{status:400,headers:{"Content-Type":"application/json"}});try{const o={};for(const[t,n]of e.headers)t.toLowerCase().startsWith("x-cfspider-header-")&&(o[t.substring(18)]=n);let a;const i=r||n.TWO_PROXY||n.two_proxy||"";if(i){const n=i.split(":"),r=n[0],a=parseInt(n[1])||3128,c=n[2]||"",l=n[3]||"",d=new URL(t),u=d.hostname,p=(d.port||d.protocol,"https:"===d.protocol),{connect:h}=await import("cloudflare:sockets");if(p)return new Response(JSON.stringify({error:"HTTPS + two_proxy 不支持通过 /proxy API。请使用 Python cfspider.get() 配合 two_proxy param。",hint:"cfspider.get(url, cf_proxies=..., uuid=..., two_proxy=...)",reason:"Workers /proxy API 仅支持 HTTP twoProxy"}),{status:501,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}});{const n=h({hostname:r,port:a}),i=n.writable.getWriter(),d=n.readable.getReader();let p=`${s} ${t} HTTP/1.1\r\nHost: ${u}\r\n`;c&&l&&(p+=`Proxy-Authorization: Basic ${btoa(`${c}:${l}`)}\r\n`);for(const[e,t]of Object.entries(o))p+=`${e}: ${t}\r\n`;p+="Connection: close\r\n\r\n",await i.write((new TextEncoder).encode(p));let f=new Uint8Array(0);for(;;){const{value:e,done:t}=await d.read();if(t)break;const n=new Uint8Array(f.length+e.length);n.set(f),n.set(e,f.length),f=n}const g=(new TextDecoder).decode(f),m=g.indexOf("\r\n\r\n"),w=g.substring(0,m),y=f.slice((new TextEncoder).encode(g.substring(0,m+4)).length),b=w.split("\r\n")[0],C=parseInt(b.split(" ")[1])||200,x=new Headers;return w.split("\r\n").slice(1).forEach(e=>{const[t,...n]=e.split(":");t&&n.length&&x.set(t.trim(),n.join(":").trim())}),x.set("Access-Control-Allow-Origin","*"),x.set("X-CF-Colo",e.cf?.colo||"unknown"),x.set("X-CFspider-Version","1.8.6"),x.set("X-CFspider-TwoProxy","enabled"),new Response(y,{status:C,headers:x})}}{const n=new Request(t,{method:s,headers:o,body:"GET"!==s&&"HEAD"!==s?e.body:null});a=await fetch(n);const r=new Headers(a.headers);return r.set("Access-Control-Allow-Origin","*"),r.set("X-CF-Colo",e.cf?.colo||"unknown"),r.set("X-CFspider-Version","1.8.6"),new Response(a.body,{status:a.status,headers:r})}}catch(e){return new Response(JSON.stringify({error:e.message}),{status:500,headers:{"Content-Type":"application/json"}})}}if("api/config/new_ip"===r&&"POST"===e.method){const e="false"!==n.NEW_IP&&"0"!==n.NEW_IP;return new Response(JSON.stringify({new_ip:e,message:"请通过 Cloudflare Dashboard 或 wrangler.toml set NEW_IP env变量"}),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}if(!C)return fetch(h+"/noADMIN").then(e=>{const t=new Headers(e.headers);return t.set("Cache-Control","no-store, no-cache, must-revalidate, proxy-revalidate"),t.set("Pragma","no-cache"),t.set("Expires","0"),new Response(e.body,{status:404,statusText:e.statusText,headers:t})});if(n.KV&&"function"==typeof n.KV.get){const r=l.pathname.slice(1).toLowerCase(),o=l.pathname.slice(1);if(o===A&&"勿动此def密钥,有需求请自行通过添加变量KEY进行修改"!==A){const e=new URLSearchParams(l.search);return e.set("token",await $(j+_)),new Response("redirect中...",{status:302,headers:{Location:`/sub?${e.toString()}`}})}if("login"===r){const t=e.headers.get("Cookie")||"",n=t.split(";").find(e=>e.trim().startsWith("auth="))?.split("=")[1];if(n==await $(w+A+C))return new Response("redirect中...",{status:302,headers:{Location:"/admin"}});if("POST"===e.method){const t=await e.text();if(new URLSearchParams(t).get("password")===C){const e=new Response(JSON.stringify({success:!0}),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}});return e.headers.set("Set-Cookie",`auth=${await $(w+A+C)}; Path=/; Max-Age=86400; HttpOnly`),e}}return fetch(h+"/login")}if("admin"===r||r.startsWith("admin/")){const a=e.headers.get("Cookie")||"",i=a.split(";").find(e=>e.trim().startsWith("auth="))?.split("=")[1];if(!i||i!==await $(w+A+C))return new Response("redirect中...",{status:302,headers:{Location:"/login"}});if("admin/log.json"===r){const e=await n.KV.get("log.json")||"[]";return new Response(e,{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})}if("admin/getCloudflareUsage"===o)try{const e=await U(l.searchParams.get("Email"),l.searchParams.get("GlobalAPIKey"),l.searchParams.get("AccountID"),l.searchParams.get("APIToken"));return new Response(JSON.stringify(e,null,2),{status:200,headers:{"Content-Type":"application/json"}})}catch(e){const t={msg:"查询request量failed,failed原因:"+e.message,error:e.message};return new Response(JSON.stringify(t,null,2),{status:500,headers:{"Content-Type":"application/json;charset=utf-8"}})}else{if("admin/getADDAPI"===o){if(l.searchParams.get("url")){const e=l.searchParams.get("url");try{new URL(e);const t=await P([e],l.searchParams.get("port")||"443"),n=t[0].length>0?t[0]:t[1];return new Response(JSON.stringify({success:!0,data:n},null,2),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})}catch(e){const t={msg:"verify优选APIfailed,failed原因:"+e.message,error:e.message};return new Response(JSON.stringify(t,null,2),{status:500,headers:{"Content-Type":"application/json;charset=utf-8"}})}}return new Response(JSON.stringify({success:!1,data:[]},null,2),{status:403,headers:{"Content-Type":"application/json;charset=utf-8"}})}if("admin/check"===r){let e;if(l.searchParams.has("socks5"))e=await k("socks5",l.searchParams.get("socks5"));else{if(!l.searchParams.has("http"))return new Response(JSON.stringify({error:"缺少proxyparam"}),{status:400,headers:{"Content-Type":"application/json;charset=utf-8"}});e=await k("http",l.searchParams.get("http"))}return new Response(JSON.stringify(e,null,2),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})}}if(t=await T(n,j,_,n.PATH),"admin/init"===r)try{return t=await T(n,j,_,n.PATH,!0),s.waitUntil(x(n,e,D,"Init_Config",t)),t.init="config已reset为defvalue",new Response(JSON.stringify(t,null,2),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})}catch(e){const t={msg:"configresetfailed,failed原因:"+e.message,error:e.message};return new Response(JSON.stringify(t,null,2),{status:500,headers:{"Content-Type":"application/json;charset=utf-8"}})}else if("POST"===e.method)if("admin/config.json"===r)try{const r=await e.json();return r.UUID&&r.HOST?(await n.KV.put("config.json",JSON.stringify(r,null,2)),s.waitUntil(x(n,e,D,"Save_Config",t)),new Response(JSON.stringify({success:!0,message:"config已save"}),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})):new Response(JSON.stringify({error:"config不完整"}),{status:400,headers:{"Content-Type":"application/json;charset=utf-8"}})}catch(e){return console.error("saveconfigfailed:",e),new Response(JSON.stringify({error:"saveconfigfailed: "+e.message}),{status:500,headers:{"Content-Type":"application/json;charset=utf-8"}})}else if("admin/cf.json"===r)try{const r=await e.json(),o={Email:null,GlobalAPIKey:null,AccountID:null,APIToken:null,UsageAPI:null};if(!r.init||!0!==r.init)if(r.Email&&r.GlobalAPIKey)o.Email=r.Email,o.GlobalAPIKey=r.GlobalAPIKey;else if(r.AccountID&&r.APIToken)o.AccountID=r.AccountID,o.APIToken=r.APIToken;else{if(!r.UsageAPI)return new Response(JSON.stringify({error:"config不完整"}),{status:400,headers:{"Content-Type":"application/json;charset=utf-8"}});o.UsageAPI=r.UsageAPI}return await n.KV.put("cf.json",JSON.stringify(o,null,2)),s.waitUntil(x(n,e,D,"Save_Config",t)),new Response(JSON.stringify({success:!0,message:"config已save"}),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})}catch(e){return console.error("saveconfigfailed:",e),new Response(JSON.stringify({error:"saveconfigfailed: "+e.message}),{status:500,headers:{"Content-Type":"application/json;charset=utf-8"}})}else if("admin/tg.json"===r)try{const r=await e.json();if(r.init&&!0===r.init){const e={BotToken:null,ChatID:null};await n.KV.put("tg.json",JSON.stringify(e,null,2))}else{if(!r.BotToken||!r.ChatID)return new Response(JSON.stringify({error:"config不完整"}),{status:400,headers:{"Content-Type":"application/json;charset=utf-8"}});await n.KV.put("tg.json",JSON.stringify(r,null,2))}return s.waitUntil(x(n,e,D,"Save_Config",t)),new Response(JSON.stringify({success:!0,message:"config已save"}),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})}catch(e){return console.error("saveconfigfailed:",e),new Response(JSON.stringify({error:"saveconfigfailed: "+e.message}),{status:500,headers:{"Content-Type":"application/json;charset=utf-8"}})}else{if("admin/ADD.txt"!==o)return new Response(JSON.stringify({error:"不支持的POSTrequestpath"}),{status:404,headers:{"Content-Type":"application/json;charset=utf-8"}});try{const r=await e.text();return await n.KV.put("ADD.txt",r),s.waitUntil(x(n,e,D,"Save_Custom_IPs",t)),new Response(JSON.stringify({success:!0,message:"customIP已save"}),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})}catch(e){return console.error("savecustomIPfailed:",e),new Response(JSON.stringify({error:"savecustomIPfailed: "+e.message}),{status:500,headers:{"Content-Type":"application/json;charset=utf-8"}})}}else{if("admin/config.json"===r)return new Response(JSON.stringify(t,null,2),{status:200,headers:{"Content-Type":"application/json"}});if("admin/ADD.txt"===o){let s=await n.KV.get("ADD.txt")||"null";return"null"==s&&(s=(await S(e,t.优选subscribegen.本地IP库.rand数量,t.优选subscribegen.本地IP库.指定port))[1]),new Response(s,{status:200,headers:{"Content-Type":"text/plain;charset=utf-8",asn:e.cf.asn}})}if("admin/cf.json"===r)return new Response(JSON.stringify(e.cf,null,2),{status:200,headers:{"Content-Type":"application/json;charset=utf-8"}})}return s.waitUntil(x(n,e,D,"Admin_Login",t)),fetch(h+"/admin")}if("logout"===r||O.test(r)){const e=new Response("redirect中...",{status:302,headers:{Location:"/login"}});return e.headers.set("Set-Cookie","auth=; Path=/; Max-Age=0; HttpOnly"),e}if("sub"===r){const r=await $(j+_);if(l.searchParams.get("token")===r){t=await T(n,j,_,n.PATH),s.waitUntil(x(n,e,D,"Get_SUB",t));const o=w.toLowerCase(),a=4102329600,i=Date.now(),c=new Date(i);c.setHours(0,0,0,0);const d=Math.floor((i-c.getTime())/864e5*24*1099511627776/2);let p=d,h=d,f=26388279066624;t.CF.Usage.success&&(p=t.CF.Usage.pages,h=t.CF.Usage.workers,f=Number.isFinite(t.CF.Usage.max)?t.CF.Usage.max/1e3*1024:102400);const g={"content-type":"text/plain; charset=utf-8","Profile-Update-Interval":t.优选subscribegen.SUBUpdateTime,"Profile-web-page-url":l.protocol+"//"+l.host+"/admin","Subscription-Userinfo":`upload=${p}; download=${h}; total=${f}; expire=${a}`,"Cache-Control":"no-store"},m=l.searchParams.has("b64")||l.searchParams.has("base64")||e.headers.get("subconverter-request")||e.headers.get("subconverter-version")||o.includes("subconverter")||o.includes("CF-Workers-SUB".toLowerCase())?"mixed":l.searchParams.has("target")?l.searchParams.get("target"):l.searchParams.has("clash")||o.includes("clash")||o.includes("meta")||o.includes("mihomo")?"clash":l.searchParams.has("sb")||l.searchParams.has("singbox")||o.includes("singbox")||o.includes("sing-box")?"singbox":l.searchParams.has("surge")||o.includes("surge")?"surge&ver=4":l.searchParams.has("quanx")||o.includes("quantumult")?"quanx":l.searchParams.has("loon")||o.includes("loon")?"loon":"mixed";o.includes("mozilla")||(g["Content-Disposition"]=`attachment; filename*=utf-8''${encodeURIComponent(t.优选subscribegen.SUBNAME)}`);const y=l.searchParams.has("surge")||o.includes("surge")?"trojan":t.protocoltype;let b="";if("mixed"===m){const s=t.enabled0RTT?t.PATH+"?ed=2560":t.PATH,r="Shadowrocket"==t.TLS分片?`&fragment=${encodeURIComponent("1,40-60,30-50,tlshello")}`:"Happ"==t.TLS分片?`&fragment=${encodeURIComponent("3,1,tlshello")}`:"";let o=[],a="";if(!l.searchParams.has("sub")&&t.优选subscribegen.local){const s=t.优选subscribegen.本地IP库.randIP?(await S(e,t.优选subscribegen.本地IP库.rand数量,t.优选subscribegen.本地IP库.指定port))[0]:await n.KV.get("ADD.txt")?await I(await n.KV.get("ADD.txt")):(await S(e,t.优选subscribegen.本地IP库.rand数量,t.优选subscribegen.本地IP库.指定port))[0],r=[],i=[],c=[];for(const e of s)if(e.toLowerCase().startsWith("https://"))r.push(e);else if(e.toLowerCase().includes("://"))if(e.includes("#")){const t=e.split("#");c.push(t[0]+"#"+encodeURIComponent(decodeURIComponent(t[1])))}else c.push(e);else i.push(e);const l=await P(r),d=[...new Set(c.concat(l[1]))];a=d.length>0?d.join("\n")+"\n":"";const u=l[0];o=[...new Set(i.concat(u))]}else{let e=l.searchParams.get("sub")||t.优选subscribegen.SUB;e=e&&!/^https?:\/\//i.test(e)?`https://${e}`:e;const n=`${e}/sub?host=example.com&uuid=00000000-0000-4000-8000-000000000000`;try{const e=await fetch(n,{headers:{"User-Agent":"v2rayN/edgetunnel (https://github.com/cmliu/edgetunnel)"}});if(!e.ok)return new Response("优选subscribegen器异常:"+e.statusText,{status:e.status});const t=atob(await e.text()),s=t.includes("\r\n")?t.split("\r\n"):t.split("\n");for(const e of s)if(e.trim())if(e.includes("00000000-0000-4000-8000-000000000000")&&e.includes("example.com")){const t=e.match(/:\/\/[^@]+@([^?]+)/);if(t){let n=t[1],s="";const r=e.match(/#(.+)$/);r&&(s="#"+decodeURIComponent(r[1])),o.push(n+s)}}else a+=e+"\n"}catch(e){return new Response("优选subscribegen器异常:"+e.message,{status:403})}}const i=t.ECH?`&ech=${encodeURIComponent("cloudflare-ech.com+"+u)}`:"";b=a+o.map(e=>{const n=e.match(/^(\[[\da-fA-F:]+\]|[\d.]+|[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*)(?::(\d+))?(?:#(.+))?$/);let o,a,c="443";return n?(o=n[1],c=n[2]||"443",a=n[3]||o,`${y}://00000000-0000-4000-8000-000000000000@${o}:${c}?security=tls&type=${t.传输protocol+i}&host=example.com&fp=${t.Fingerprint}&sni=example.com&path=${encodeURIComponent(t.randpath?function(){const e=Math.floor(3*Math.random()+1);return`/${["about","account","acg","act","activity","ad","ads","ajax","album","albums","anime","api","app","apps","archive","archives","article","articles","ask","auth","avatar","bbs","bd","blog","blogs","book","books","bt","buy","cart","category","categories","cb","channel","channels","chat","china","city","class","classify","clip","clips","club","cn","code","collect","collection","comic","comics","community","company","config","contact","content","course","courses","cp","data","detail","details","dh","directory","discount","discuss","dl","dload","doc","docs","document","documents","doujin","download","downloads","drama","edu","en","ep","episode","episodes","event","events","f","faq","favorite","favourites","favs","feedback","file","files","film","films","forum","forums","friend","friends","game","games","gif","go","go.html","go.php","group","groups","help","home","hot","htm","html","image","images","img","index","info","intro","item","items","ja","jp","jump","jump.html","jump.php","jumping","knowledge","lang","lesson","lessons","lib","library","link","links","list","live","lives","m","mag","magnet","mall","manhua","map","member","members","message","messages","mobile","movie","movies","music","my","new","news","note","novel","novels","online","order","out","out.html","out.php","outbound","p","page","pages","pay","payment","pdf","photo","photos","pic","pics","picture","pictures","play","player","playlist","post","posts","product","products","program","programs","project","qa","question","rank","ranking","read","readme","redirect","redirect.html","redirect.php","reg","register","res","resource","retrieve","sale","search","season","seasons","section","seller","series","service","services","setting","settings","share","shop","show","shows","site","soft","sort","source","special","star","stars","static","stock","store","stream","streaming","streams","student","study","tag","tags","task","teacher","team","tech","temp","test","thread","tool","tools","topic","topics","torrent","trade","travel","tv","txt","type","u","upload","uploads","url","urls","user","users","v","version","video","videos","view","vip","vod","watch","web","wenku","wiki","work","www","zh","zh-cn","zh-tw","zip"].sort(()=>.5-Math.random()).slice(0,e).join("/")}`}()+s:s)+r}&encryption=none${t.skip证书verify?"&insecure=1&allowInsecure=1":""}#${encodeURIComponent(a)}`):(console.warn(`[subscribe内容] 不规范的IP格式已忽略: ${e}`),null)}).filter(e=>null!==e).join("\n")}else{const e=`${t.subscribeconvertconfig.SUBAPI}/sub?target=${m}&url=${encodeURIComponent(l.protocol+"//"+l.host+"/sub?target=mixed&token="+r+(l.searchParams.has("sub")&&""!=l.searchParams.get("sub")?`&sub=${l.searchParams.get("sub")}`:""))}&config=${encodeURIComponent(t.subscribeconvertconfig.SUBCONFIG)}&emoji=${t.subscribeconvertconfig.SUBEMOJI}&scv=${t.skip证书verify}`;try{const n=await fetch(e,{headers:{"User-Agent":"Subconverter for "+m+" edgetunnel(https://github.com/cmliu/edgetunnel)"}});if(!n.ok)return new Response("subscribeconvert后端异常:"+n.statusText,{status:n.status});b=await n.text(),(l.searchParams.has("surge")||o.includes("surge"))&&(b=function(e,t,n){const s=e.includes("\r\n")?e.split("\r\n"):e.split("\n");let r="";const o=n.enabled0RTT?n.PATH+"?ed=2560":n.PATH;for(let e of s)if(!e.includes("= trojan,")||e.includes("ws=true")||e.includes("ws-path="))r+=e+"\n";else{const t=e.split("sni=")[1].split(",")[0],s=`sni=${t}, skip-cert-verify=${n.skip证书verify}`,a=`sni=${t}, skip-cert-verify=${n.skip证书verify}, ws=true, ws-path=${o}, ws-headers=Host:"${t}"`;r+=e.replace(new RegExp(s,"g"),a).replace("[","").replace("]","")+"\n"}return r=`#!MANAGED-CONFIG ${t} interval=${60*n.优选subscribegen.SUBUpdateTime*60} strict=false`+r.substring(r.indexOf("\n")),r}(b,l.protocol+"//"+l.host+"/sub?token="+r+"&surge",t))}catch(e){return new Response("subscribeconvert后端异常:"+e.message,{status:403})}}return o.includes("subconverter")||(b=await function(e,n,s=2){const r=[...t.HOSTS].sort(()=>Math.random()-.5);let o=0,a=null;return e.replace(/example\.com/g,()=>(o%s===0&&(a=function(e){if(!e?.includes("*"))return e;return e.replace(/\*/g,()=>{let e="";for(let t=0;t{if("tun"===e.type){const t=[];e.inet4_address&&t.push(e.inet4_address),e.inet6_address&&t.push(e.inet6_address),t.length>0&&(e.address=t,delete e.inet4_address,delete e.inet6_address);const n=[];Array.isArray(e.inet4_route_address)&&n.push(...e.inet4_route_address),Array.isArray(e.inet6_route_address)&&n.push(...e.inet6_route_address),n.length>0&&(e.route_address=n,delete e.inet4_route_address,delete e.inet6_route_address);const s=[];Array.isArray(e.inet4_route_exclude_address)&&s.push(...e.inet4_route_exclude_address),Array.isArray(e.inet6_route_exclude_address)&&s.push(...e.inet6_route_exclude_address),s.length>0&&(e.route_exclude_address=s,delete e.inet4_route_exclude_address,delete e.inet6_route_exclude_address)}});const o=new Map,a=(e,t=!1)=>{Array.isArray(e)&&e.forEach(e=>{if(e.geosite){const t=Array.isArray(e.geosite)?e.geosite:[e.geosite];e.rule_set=t.map(e=>{const t=`geosite-${e}`;return o.has(t)||o.set(t,{tag:t,type:"remote",format:"binary",url:`https://gh.090227.xyz/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-${e}.srs`,download_detour:"DIRECT"}),t}),delete e.geosite}if(e.geoip){const t=Array.isArray(e.geoip)?e.geoip:[e.geoip];e.rule_set=e.rule_set||[],t.forEach(t=>{const n=`geoip-${t}`;o.has(n)||o.set(n,{tag:n,type:"remote",format:"binary",url:`https://gh.090227.xyz/https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-${t}.srs`,download_detour:"DIRECT"}),e.rule_set.push(n)}),delete e.geoip}const n=t?"server":"outbound",s=String(e[n]).toUpperCase();"REJECT"!==s&&"BLOCK"!==s||(e.action="reject",e.method="drop",delete e[n])})};r.dns&&r.dns.rules&&a(r.dns.rules,!0),r.route&&r.route.rules&&a(r.route.rules,!1),o.size>0&&(r.route||(r.route={}),r.route.rule_set=Array.from(o.values())),r.outbounds||(r.outbounds=[]),r.outbounds=r.outbounds.filter(e=>"REJECT"!==e.tag&&"block"!==e.tag);const i=new Set(r.outbounds.map(e=>e.tag));if(i.has("DIRECT")||(r.outbounds.push({type:"direct",tag:"DIRECT"}),i.add("DIRECT")),r.dns&&r.dns.servers){const e=new Set(r.dns.servers.map(e=>e.tag));r.dns.rules&&r.dns.rules.forEach(t=>{t.server&&!e.has(t.server)&&("dns_block"===t.server&&e.has("block")?t.server="block":t.server.toLowerCase().includes("block")&&!e.has(t.server)&&(r.dns.servers.push({tag:t.server,address:"rcode://success"}),e.add(t.server)))})}return r.outbounds.forEach(e=>{"selector"!==e.type&&"urltest"!==e.type||Array.isArray(e.outbounds)&&(e.outbounds=e.outbounds.filter(e=>{const t=e.toUpperCase();return i.has(e)&&"REJECT"!==t&&"BLOCK"!==t}),0===e.outbounds.length&&e.outbounds.push("DIRECT"))}),t&&r.outbounds.forEach(e=>{(e.uuid&&e.uuid===t||e.password&&e.password===t)&&(e.tls||(e.tls={enabled:!0}),n&&(e.tls.utls={enabled:!0,fingerprint:n}),s&&(e.tls.ech={enabled:!0,config:`-----BEGIN ECH CONFIGS-----\n${s}\n-----END ECH CONFIGS-----`}))}),JSON.stringify(r,null,2)}catch(t){return console.error("Singbox热补丁执行failed:",t),JSON.stringify(JSON.parse(e),null,2)}}(b,t.UUID,t.Fingerprint,t.ECH?await async function(e){try{const t=await fetch(`https://1.1.1.1/dns-query?name=${encodeURIComponent(e)}&type=65`,{headers:{accept:"application/dns-json"}}),n=await t.json();if(!n.Answer?.length)return"";for(let e of n.Answer){if(65!==e.type||!e.data)continue;const t=e.data.match(/ech=([^\s]+)/);if(t)return t[1].replace(/"/g,"");if(e.data.startsWith("\\#")){const t=e.data.split(" ").slice(2).join(""),n=new Uint8Array(t.match(/.{1,2}/g).map(e=>parseInt(e,16)));let s=2;for(;s0){const e=s.map(e=>` "${e}":\n - tls://8.8.8.8\n - https://doh.cmliussss.com/CMLiussss\n - ${u}`).join("\n");if(/^\s{2}nameserver-policy:\s*(?:\n|$)/m.test(r))r=r.replace(/^(\s{2}nameserver-policy:\s*\n)/m,`$1${e}\n`);else{const t=r.split("\n");let n=-1,s=!1;for(let e=0;e0&&i+1=0;t--)if(n[t].trim()){e=t;break}if(e>=0){const t=" ".repeat(r);n.splice(e+1,0,`${t}ech-opts:`,`${t} enable: true`)}}a.push(...n)}else a.push(e),i++}return a.join("\n")}(b,t.UUID,t.ECH,t.HOSTS),g["content-type"]="application/x-yaml; charset=utf-8"),new Response(b,{status:200,headers:g})}}else if("locations"===r){const t=e.headers.get("Cookie")||"",n=t.split(";").find(e=>e.trim().startsWith("auth="))?.split("=")[1];if(n&&n==await $(w+A+C))return fetch(new Request("https://speed.cloudflare.com/locations",{headers:{Referer:"https://speed.cloudflare.com/"}}))}else if("robots.txt"===r)return new Response("User-agent: *\nDisallow: /",{status:200,headers:{"Content-Type":"text/plain; charset=UTF-8"}})}else if(!R)return fetch(h+"/noKV").then(e=>{const t=new Headers(e.headers);return t.set("Cache-Control","no-store, no-cache, must-revalidate, proxy-revalidate"),t.set("Pragma","no-cache"),t.set("Expires","0"),new Response(e.body,{status:404,statusText:e.statusText,headers:t})})}let N=n.URL||"nginx";if(N&&"nginx"!==N&&"1101"!==N){N=N.trim().replace(/\/$/,""),N.match(/^https?:\/\//i)||(N="https://"+N),N.toLowerCase().startsWith("http://")&&(N="https://"+N.substring(7));try{const e=new URL(N);N=e.protocol+"//"+e.host}catch(e){N="nginx"}}if("1101"===N)return new Response(await async function(e,t){const n=new Date,s=n.getFullYear()+"-"+String(n.getMonth()+1).padStart(2,"0")+"-"+String(n.getDate()).padStart(2,"0")+" "+String(n.getHours()).padStart(2,"0")+":"+String(n.getMinutes()).padStart(2,"0")+":"+String(n.getSeconds()).padStart(2,"0"),r=Array.from(crypto.getRandomValues(new Uint8Array(8))).map(e=>e.toString(16).padStart(2,"0")).join("");return`\n\x3c!--[if lt IE 7]> \x3c!--\x3e \x3c!--\nWorker threw exception | ${e} | Cloudflare\n\n\n\n\n\n\n\x3c!--[if lt IE 9]>body{margin:0;padding:0}\n\n\n\x3c!--[if gte IE 10]>\x3c!--\x3e\n