@evomap/evolver 1.88.4 → 1.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/BUGBOT.md +182 -0
- package/.env.example +68 -0
- package/.git-commit-guard-token +1 -0
- package/.github/CODEOWNERS +63 -0
- package/.github/ISSUE_TEMPLATE/good_first_issue.md +23 -0
- package/.github/pull_request_template.md +45 -0
- package/.github/workflows/test.yml +75 -0
- package/CHANGELOG.md +1123 -0
- package/README.md +86 -553
- package/README.public.md +594 -0
- package/SECURITY.md +108 -0
- package/assets/gep/events.jsonl +3 -0
- package/examples/atp-consumer-quickstart.md +100 -0
- package/examples/hello-world.md +38 -0
- package/index.js +30 -1
- package/package.json +6 -17
- package/proxy-package.json +39 -0
- package/public.manifest.json +141 -0
- package/src/evolve/guards.js +721 -1
- package/src/evolve/pipeline/collect.js +1283 -1
- package/src/evolve/pipeline/dispatch.js +421 -1
- package/src/evolve/pipeline/enrich.js +434 -1
- package/src/evolve/pipeline/hub.js +319 -1
- package/src/evolve/pipeline/select.js +274 -1
- package/src/evolve/pipeline/signals.js +206 -1
- package/src/evolve/utils.js +264 -1
- package/src/evolve.js +350 -1
- package/src/gep/a2aProtocol.js +4395 -1
- package/src/gep/autoDistillConv.js +205 -1
- package/src/gep/autoDistillLlm.js +315 -1
- package/src/gep/candidateEval.js +92 -1
- package/src/gep/candidates.js +198 -1
- package/src/gep/contentHash.js +30 -1
- package/src/gep/conversationSniffer.js +266 -1
- package/src/gep/crypto.js +89 -1
- package/src/gep/curriculum.js +163 -1
- package/src/gep/deviceId.js +218 -1
- package/src/gep/envFingerprint.js +118 -1
- package/src/gep/epigenetics.js +31 -1
- package/src/gep/execBridge.js +711 -1
- package/src/gep/explore.js +289 -1
- package/src/gep/hash.js +15 -1
- package/src/gep/hubFetch.js +359 -1
- package/src/gep/hubReview.js +207 -1
- package/src/gep/hubSearch.js +526 -1
- package/src/gep/hubVerify.js +306 -1
- package/src/gep/learningSignals.js +89 -1
- package/src/gep/memoryGraph.js +1374 -1
- package/src/gep/memoryGraphAdapter.js +203 -1
- package/src/gep/mutation.js +203 -1
- package/src/gep/narrativeMemory.js +108 -1
- package/src/gep/oauthLogin.js +143 -0
- package/src/gep/openPRRegistry.js +205 -1
- package/src/gep/personality.js +423 -1
- package/src/gep/policyCheck.js +599 -1
- package/src/gep/prompt.js +836 -1
- package/src/gep/recallInject.js +409 -1
- package/src/gep/recallVerifier.js +318 -1
- package/src/gep/reflection.js +177 -1
- package/src/gep/selector.js +602 -1
- package/src/gep/skillDistiller.js +1294 -1
- package/src/gep/solidify.js +1699 -1
- package/src/gep/strategy.js +136 -1
- package/src/gep/tokenSavings.js +88 -1
- package/src/gep/workspaceKeychain.js +174 -1
- package/src/proxy/extensions/traceControl.js +99 -1
- package/src/proxy/inject.js +52 -1
- package/src/proxy/trace/extractor.js +534 -1
- package/src/proxy/trace/usage.js +105 -1
- package/CONTRIBUTING.md +0 -19
- package/assets/cover.png +0 -0
- package/scripts/a2a_export.js +0 -63
- package/scripts/a2a_ingest.js +0 -79
- package/scripts/a2a_promote.js +0 -118
- package/scripts/analyze_by_skill.js +0 -121
- package/scripts/build_binaries.js +0 -479
- package/scripts/check-changelog.js +0 -166
- package/scripts/extract_log.js +0 -85
- package/scripts/generate_history.js +0 -75
- package/scripts/gep_append_event.js +0 -96
- package/scripts/gep_personality_report.js +0 -234
- package/scripts/human_report.js +0 -147
- package/scripts/recall-verify-report.js +0 -234
- package/scripts/recover_loop.js +0 -61
- package/scripts/seed-merchants.js +0 -91
- package/scripts/suggest_version.js +0 -89
- package/scripts/validate-modules.js +0 -38
- package/scripts/validate-suite.js +0 -78
- package/skills/index.json +0 -14
- /package/assets/gep/{genes.seed.json → genes.json} +0 -0
- /package/{skills → bundled-skills}/_meta/SKILL.md +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// OAuth device-flow login (RFC 8628) for the published `evolver` CLI.
|
|
3
|
+
//
|
|
4
|
+
// `evolver login` runs the device authorization grant against the hub
|
|
5
|
+
// (gh-auth-login style): print a user code + verification URL, poll until the
|
|
6
|
+
// user approves in the browser, then store the token at ~/.evomap/oauth_token.json.
|
|
7
|
+
//
|
|
8
|
+
// The resulting access token carries the `a2a` scope, so it is the converged
|
|
9
|
+
// replacement for node_secret on the hub's agent surface (hub Phase 2). It is
|
|
10
|
+
// consumed by a2aProtocol.buildHubHeaders(), which prefers a valid OAuth token
|
|
11
|
+
// over node_secret. Existing node_secret flows are untouched when no token file
|
|
12
|
+
// is present.
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
'use strict';
|
|
15
|
+
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
const path = require('path');
|
|
18
|
+
const { getEvomapDir } = require('./paths');
|
|
19
|
+
|
|
20
|
+
const CLIENT_ID = 'evolver-cli';
|
|
21
|
+
const DEVICE_GRANT = 'urn:ietf:params:oauth:grant-type:device_code';
|
|
22
|
+
const DEFAULT_SCOPES = 'a2a recipe:read recipe:write recipe:publish gene:read reuse:query';
|
|
23
|
+
const DEFAULT_HUB_URL = 'https://evomap.ai';
|
|
24
|
+
// Refresh slightly early so a token in active use does not expire mid-request.
|
|
25
|
+
const EXPIRY_SKEW_MS = 60 * 1000;
|
|
26
|
+
|
|
27
|
+
function tokenFile() { return path.join(getEvomapDir(), 'oauth_token.json'); }
|
|
28
|
+
|
|
29
|
+
/** @returns {{access_token:string, refresh_token?:string, expires_at:number, scope?:string}|null} */
|
|
30
|
+
function loadOAuthToken() {
|
|
31
|
+
try {
|
|
32
|
+
const raw = fs.readFileSync(tokenFile(), 'utf8');
|
|
33
|
+
const t = JSON.parse(raw);
|
|
34
|
+
if (t && typeof t.access_token === 'string' && t.access_token) return t;
|
|
35
|
+
} catch {}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Sync: the current access token if present and not (nearly) expired, else null. */
|
|
40
|
+
function loadValidAccessToken() {
|
|
41
|
+
const t = loadOAuthToken();
|
|
42
|
+
if (!t) return null;
|
|
43
|
+
if (typeof t.expires_at === 'number' && t.expires_at - EXPIRY_SKEW_MS <= Date.now()) return null;
|
|
44
|
+
return t.access_token;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function saveOAuthToken(tok) {
|
|
48
|
+
const dir = getEvomapDir();
|
|
49
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
50
|
+
fs.writeFileSync(tokenFile(), JSON.stringify(tok, null, 2), { encoding: 'utf8', mode: 0o600 });
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function clearOAuthToken() {
|
|
54
|
+
try { fs.unlinkSync(tokenFile()); return true; } catch { return false; }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function resolveHubUrl(explicit) {
|
|
58
|
+
const u = (explicit || process.env.A2A_HUB_URL || process.env.EVOMAP_HUB_URL || DEFAULT_HUB_URL).replace(/\/+$/, '');
|
|
59
|
+
return u;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function postJson(url, body) {
|
|
63
|
+
const res = await fetch(url, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
headers: { 'Content-Type': 'application/json' },
|
|
66
|
+
body: JSON.stringify(body),
|
|
67
|
+
});
|
|
68
|
+
let json = {};
|
|
69
|
+
try { json = await res.json(); } catch {}
|
|
70
|
+
return { status: res.status, json };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function toStored(json, prev) {
|
|
74
|
+
return {
|
|
75
|
+
access_token: json.access_token,
|
|
76
|
+
refresh_token: json.refresh_token || (prev && prev.refresh_token) || undefined,
|
|
77
|
+
expires_at: Date.now() + (Number(json.expires_in) > 0 ? json.expires_in * 1000 : 3600 * 1000),
|
|
78
|
+
scope: json.scope,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Run the full device flow and persist the token. `onCode` is invoked once with
|
|
84
|
+
* { userCode, verificationUri } so the caller can show the user where to go.
|
|
85
|
+
* @returns {Promise<{access_token:string, expires_at:number, scope?:string}>}
|
|
86
|
+
*/
|
|
87
|
+
async function deviceLogin(opts = {}) {
|
|
88
|
+
const hubUrl = resolveHubUrl(opts.hubUrl);
|
|
89
|
+
const scope = opts.scope || DEFAULT_SCOPES;
|
|
90
|
+
const onCode = opts.onCode || (() => {});
|
|
91
|
+
const sleep = opts.sleep || ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
92
|
+
const now = opts.now || (() => Date.now());
|
|
93
|
+
|
|
94
|
+
const start = await postJson(`${hubUrl}/oauth/device_authorization`, { client_id: CLIENT_ID, scope });
|
|
95
|
+
const s = start.json || {};
|
|
96
|
+
if (start.status >= 400 || !s.device_code || !s.user_code) {
|
|
97
|
+
throw new Error(`device_authorization failed (HTTP ${start.status}): ${s.error || 'no device_code'}`);
|
|
98
|
+
}
|
|
99
|
+
onCode({ userCode: s.user_code, verificationUri: s.verification_uri_complete || s.verification_uri || `${hubUrl}/device` });
|
|
100
|
+
|
|
101
|
+
const deadline = now() + (opts.maxWaitMs || 15 * 60 * 1000);
|
|
102
|
+
let intervalMs = (Number(s.interval) > 0 ? s.interval : 5) * 1000;
|
|
103
|
+
for (;;) {
|
|
104
|
+
await sleep(intervalMs);
|
|
105
|
+
const poll = await postJson(`${hubUrl}/oauth/token`, { grant_type: DEVICE_GRANT, device_code: s.device_code, client_id: CLIENT_ID });
|
|
106
|
+
const p = poll.json || {};
|
|
107
|
+
if (p.access_token) {
|
|
108
|
+
const tok = toStored(p, null);
|
|
109
|
+
saveOAuthToken(tok);
|
|
110
|
+
return tok;
|
|
111
|
+
}
|
|
112
|
+
if (p.error === 'authorization_pending') { /* keep waiting */ }
|
|
113
|
+
else if (p.error === 'slow_down') { intervalMs += 5000; }
|
|
114
|
+
else throw new Error(`device login failed (HTTP ${poll.status}): ${p.error || 'unknown'}`);
|
|
115
|
+
if (now() >= deadline) throw new Error('device_flow_timeout');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Refresh the stored token via the refresh_token grant. Returns the new access token, or null if not possible. */
|
|
120
|
+
async function refreshOAuthToken(opts = {}) {
|
|
121
|
+
const t = loadOAuthToken();
|
|
122
|
+
if (!t || !t.refresh_token) return null;
|
|
123
|
+
const hubUrl = resolveHubUrl(opts.hubUrl);
|
|
124
|
+
const res = await postJson(`${hubUrl}/oauth/token`, { grant_type: 'refresh_token', refresh_token: t.refresh_token, client_id: CLIENT_ID });
|
|
125
|
+
const p = res.json || {};
|
|
126
|
+
if (!p.access_token) return null;
|
|
127
|
+
const tok = toStored(p, t);
|
|
128
|
+
saveOAuthToken(tok);
|
|
129
|
+
return tok.access_token;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
module.exports = {
|
|
133
|
+
tokenFile,
|
|
134
|
+
loadOAuthToken,
|
|
135
|
+
loadValidAccessToken,
|
|
136
|
+
saveOAuthToken,
|
|
137
|
+
clearOAuthToken,
|
|
138
|
+
resolveHubUrl,
|
|
139
|
+
deviceLogin,
|
|
140
|
+
refreshOAuthToken,
|
|
141
|
+
CLIENT_ID,
|
|
142
|
+
DEFAULT_SCOPES,
|
|
143
|
+
};
|
|
@@ -1 +1,205 @@
|
|
|
1
|
-
var _0x16cc23=_0x3b0a;function _0x3b0a(_0x13934f,_0x462072){_0x13934f=_0x13934f-(-0x22c4+0x121d+-0x1c9*-0xa);var _0x27928c=_0x13c9();var _0x585a6f=_0x27928c[_0x13934f];if(_0x3b0a['\x59\x4c\x63\x4b\x73\x44']===undefined){var _0x569e07=function(_0x2a076a){var _0x139ecf='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';var _0x34ea40='',_0xc69cef='',_0x233e06=_0x34ea40+_0x569e07,_0x421b0d=(''+function(){return 0x94e+0x6*0x3c9+-0x556*0x6;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0x7d5+-0x3*-0x8cf+-0x2241);for(var _0x5edbd3=0x1b0c+0x753+0x3*-0xb75,_0x2f759b,_0x5209b9,_0x1a856f=-0x1c*0x55+0xde9+-0x49d;_0x5209b9=_0x2a076a['\x63\x68\x61\x72\x41\x74'](_0x1a856f++);~_0x5209b9&&(_0x2f759b=_0x5edbd3%(-0x1*0x2fd+-0x10*0x2a+0x5a1)?_0x2f759b*(0x1b04+0x247*-0xb+-0x1*0x1b7)+_0x5209b9:_0x5209b9,_0x5edbd3++%(-0x89*-0x39+0xfb*-0xc+-0x1*0x12b9))?_0x34ea40+=_0x421b0d||_0x233e06['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x1a856f+(0x17bb+-0x7*0x206+0x9*-0x10f))-(-0x70*-0x40+0x2496+0x36*-0x132)!==0xa73+0x109d+-0x1b10?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x2fe*-0x2+0x1*-0x61f+0xd1a&_0x2f759b>>(-(-0x1c7e+0x1aef+0x191)*_0x5edbd3&0x1*0x202a+-0x17*-0x116+0x1c8f*-0x2)):_0x5edbd3:0x2561*0x1+-0x151*0x5+0xc*-0x291){_0x5209b9=_0x139ecf['\x69\x6e\x64\x65\x78\x4f\x66'](_0x5209b9);}for(var _0x6c391e=0x1281+0x1677+-0x18*0x1b5,_0x29ca40=_0x34ea40['\x6c\x65\x6e\x67\x74\x68'];_0x6c391e<_0x29ca40;_0x6c391e++){_0xc69cef+='\x25'+('\x30\x30'+_0x34ea40['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x6c391e)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0xd*0x1+-0xad*-0x5+-0x1a2*0x2))['\x73\x6c\x69\x63\x65'](-(0x1689+0x87c+-0x1d3*0x11));}return decodeURIComponent(_0xc69cef);};var _0xa62f66=function(_0x4efd6d,_0x9337db){var _0x51ef7f=[],_0x1d0ff7=0x1*-0x192+0x11ef+-0x105d*0x1,_0x1656fc,_0x8a9a7c='';_0x4efd6d=_0x569e07(_0x4efd6d);var _0x19a965;for(_0x19a965=-0xdb+0x2*0xdf1+-0x1b07;_0x19a965<0x1f93+0x57*-0x2d+-0x6*0x28c;_0x19a965++){_0x51ef7f[_0x19a965]=_0x19a965;}for(_0x19a965=0x97*0x35+-0x125a+-0xce9;_0x19a965<-0x95*0x38+0x2620+-0x488;_0x19a965++){_0x1d0ff7=(_0x1d0ff7+_0x51ef7f[_0x19a965]+_0x9337db['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x19a965%_0x9337db['\x6c\x65\x6e\x67\x74\x68']))%(-0x1*0x12d4+-0x1832+-0x1ea*-0x17),_0x1656fc=_0x51ef7f[_0x19a965],_0x51ef7f[_0x19a965]=_0x51ef7f[_0x1d0ff7],_0x51ef7f[_0x1d0ff7]=_0x1656fc;}_0x19a965=0x11*-0x21+0x2680+-0x34d*0xb,_0x1d0ff7=-0x12d*0xe+-0x42*0x22+0x193a;for(var _0x5c7ceb=0x6*-0x92+0x1f34+-0x1bc8;_0x5c7ceb<_0x4efd6d['\x6c\x65\x6e\x67\x74\x68'];_0x5c7ceb++){_0x19a965=(_0x19a965+(0x1*-0x166b+0xbfd+0xa6f))%(-0x7f7+0x262b+0x9bc*-0x3),_0x1d0ff7=(_0x1d0ff7+_0x51ef7f[_0x19a965])%(0x21c2+0x1c35+-0x3cf7*0x1),_0x1656fc=_0x51ef7f[_0x19a965],_0x51ef7f[_0x19a965]=_0x51ef7f[_0x1d0ff7],_0x51ef7f[_0x1d0ff7]=_0x1656fc,_0x8a9a7c+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x4efd6d['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x5c7ceb)^_0x51ef7f[(_0x51ef7f[_0x19a965]+_0x51ef7f[_0x1d0ff7])%(0x1f29+0x2a*-0x19+-0x1a0f)]);}return _0x8a9a7c;};_0x3b0a['\x63\x66\x63\x54\x45\x50']=_0xa62f66,_0x3b0a['\x6b\x4f\x4b\x7a\x6d\x6f']={},_0x3b0a['\x59\x4c\x63\x4b\x73\x44']=!![];}var _0x1e6e4c=_0x27928c[0x13fd*0x1+-0x9d*-0x26+-0x2b4b*0x1],_0x3b5bf4=_0x13934f+_0x1e6e4c,_0x483a9c=_0x3b0a['\x6b\x4f\x4b\x7a\x6d\x6f'][_0x3b5bf4];if(!_0x483a9c){if(_0x3b0a['\x4e\x77\x71\x44\x55\x61']===undefined){var _0x20ae94=function(_0x400a19){this['\x79\x49\x6f\x4e\x6b\x43']=_0x400a19,this['\x5a\x69\x57\x7a\x72\x6b']=[0x21ba+0x34*0x86+-0x3cf1,-0x6e3*0x4+-0x943*0x3+0x3755,0x97*-0x9+0x3d*0xc+0x1*0x273],this['\x79\x66\x52\x68\x47\x71']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x78\x7a\x6f\x4a\x71\x65']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x55\x6c\x6b\x6a\x6e\x6e']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x20ae94['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x59\x63\x76\x53\x6d\x57']=function(){var _0x393882=new RegExp(this['\x78\x7a\x6f\x4a\x71\x65']+this['\x55\x6c\x6b\x6a\x6e\x6e']),_0x36da4e=_0x393882['\x74\x65\x73\x74'](this['\x79\x66\x52\x68\x47\x71']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x5a\x69\x57\x7a\x72\x6b'][-0xe2*-0x1+0x5*-0x759+0x23dc]:--this['\x5a\x69\x57\x7a\x72\x6b'][-0x940*0x3+-0x706+0x1163*0x2];return this['\x6d\x4c\x74\x51\x42\x45'](_0x36da4e);},_0x20ae94['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x6d\x4c\x74\x51\x42\x45']=function(_0x1ac11a){if(!Boolean(~_0x1ac11a))return _0x1ac11a;return this['\x67\x4b\x79\x46\x4e\x57'](this['\x79\x49\x6f\x4e\x6b\x43']);},_0x20ae94['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x67\x4b\x79\x46\x4e\x57']=function(_0x985ac2){for(var _0xd19020=0x7b5+0x1*-0x11b2+0x1*0x9fd,_0x36b69a=this['\x5a\x69\x57\x7a\x72\x6b']['\x6c\x65\x6e\x67\x74\x68'];_0xd19020<_0x36b69a;_0xd19020++){this['\x5a\x69\x57\x7a\x72\x6b']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x36b69a=this['\x5a\x69\x57\x7a\x72\x6b']['\x6c\x65\x6e\x67\x74\x68'];}return _0x985ac2(this['\x5a\x69\x57\x7a\x72\x6b'][-0x1*0x1423+0x3b3*0x1+0x1070]);},(''+function(){return 0x337+0x30f*0x1+-0x646;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(-0x2*-0x6b9+-0x1f*0x1+-0x3e*0x37)&&new _0x20ae94(_0x3b0a)['\x59\x63\x76\x53\x6d\x57'](),_0x3b0a['\x4e\x77\x71\x44\x55\x61']=!![];}_0x585a6f=_0x3b0a['\x63\x66\x63\x54\x45\x50'](_0x585a6f,_0x462072),_0x3b0a['\x6b\x4f\x4b\x7a\x6d\x6f'][_0x3b5bf4]=_0x585a6f;}else _0x585a6f=_0x483a9c;return _0x585a6f;}(function(_0x19d5eb,_0x3c029a){var _0x12903e=_0x3b0a,_0x158569=_0x19d5eb();while(!![]){try{var _0x2166a0=parseInt(_0x12903e(0x1d9,'\x47\x21\x6a\x74'))/(-0xd44+0x1e05*-0x1+0x2b4a)+parseInt(_0x12903e(0x166,'\x71\x4d\x74\x51'))/(0x876*-0x1+-0x737+-0x323*-0x5)+-parseInt(_0x12903e(0x1fc,'\x30\x4f\x4a\x65'))/(0x1*0x11db+-0x2492+0x11a*0x11)+-parseInt(_0x12903e(0x21a,'\x75\x63\x5d\x23'))/(0xf13+0x168+0x3*-0x57d)*(parseInt(_0x12903e(0x1ec,'\x26\x5b\x45\x74'))/(0xa1b+-0xd2a+0xc5*0x4))+-parseInt(_0x12903e(0x147,'\x47\x21\x6a\x74'))/(-0x1*0x1d77+0x24c9+-0x74c)+-parseInt(_0x12903e(0x248,'\x2a\x65\x72\x37'))/(0x1d41*-0x1+-0x1*-0x1cf0+-0x2c*-0x2)*(-parseInt(_0x12903e(0x1ba,'\x41\x5e\x43\x71'))/(0x105a+0x3*0x1f+-0x10af))+parseInt(_0x12903e(0x1e8,'\x4a\x4a\x4f\x44'))/(0x6af*0x2+0x1*0x121+-0x4d2*0x3)*(-parseInt(_0x12903e(0x1dd,'\x7a\x69\x50\x71'))/(0x953+-0xfb3*0x2+0x14d*0x11));if(_0x2166a0===_0x3c029a)break;else _0x158569['push'](_0x158569['shift']());}catch(_0x191390){_0x158569['push'](_0x158569['shift']());}}}(_0x13c9,0x2612*-0xa+0x2b46d+0x594db));var _0x1aa05c=(function(){var _0xc0295c=_0x3b0a,_0x367f20={'\x75\x56\x6d\x5a\x57':function(_0x53e4b2,_0xe7f8ea){return _0x53e4b2(_0xe7f8ea);},'\x49\x56\x78\x73\x51':_0xc0295c(0x14a,'\x4b\x4a\x35\x31'),'\x6f\x54\x47\x53\x6e':_0xc0295c(0x1c9,'\x44\x5b\x21\x35'),'\x4a\x52\x78\x65\x4e':function(_0x5ebf34,_0x106421){return _0x5ebf34===_0x106421;},'\x46\x4c\x53\x63\x44':'\x52\x74\x5a\x67\x55','\x69\x6b\x56\x67\x46':function(_0xb188f8,_0x438c4c){return _0xb188f8(_0x438c4c);}},_0x24d7c6=!![];return function(_0x464cd3,_0x389155){var _0x576a5a={'\x74\x47\x73\x41\x79':function(_0x42a4fe,_0x7f5c7d){var _0x3efce6=_0x3b0a;return _0x367f20[_0x3efce6(0x1d8,'\x5e\x34\x39\x61')](_0x42a4fe,_0x7f5c7d);}},_0x70f65e=_0x24d7c6?function(){var _0x392c52=_0x3b0a,_0x40e718={'\x4b\x61\x64\x57\x6a':function(_0x29973d,_0x1bb1de){var _0x3a72ba=_0x3b0a;return _0x367f20[_0x3a72ba(0x13b,'\x46\x73\x37\x55')](_0x29973d,_0x1bb1de);}};if(_0x367f20[_0x392c52(0x1ff,'\x53\x75\x76\x55')]===_0x367f20['\x6f\x54\x47\x53\x6e'])return{'\x6e\x75\x6d\x62\x65\x72':_0x4af06a[_0x392c52(0x150,'\x51\x29\x49\x62')],'\x74\x69\x74\x6c\x65':_0x576a5a[_0x392c52(0x1c1,'\x52\x33\x4f\x36')](_0x41e4b1,_0x3c7104[_0x392c52(0x16e,'\x44\x5b\x21\x35')]||''),'\x68\x65\x61\x64\x52\x65\x66\x4e\x61\x6d\x65':_0x43f797(_0x1abf16[_0x392c52(0x142,'\x4b\x67\x51\x36')+_0x392c52(0x1d6,'\x57\x40\x64\x72')]||''),'\x66\x69\x6c\x65\x73':_0x90ba95[_0x392c52(0x19b,'\x31\x75\x40\x5d')](_0xb0ad31[_0x392c52(0x1b1,'\x45\x63\x76\x56')])?_0x2862f1[_0x392c52(0x1bd,'\x63\x30\x6b\x32')][_0x392c52(0x13c,'\x4b\x4a\x35\x31')](function(_0x15befc){var _0x4be97a=_0x392c52;return _0x40e718[_0x4be97a(0x193,'\x45\x63\x76\x56')](_0x507ccf,_0x15befc[_0x4be97a(0x1f2,'\x74\x6a\x46\x41')]||'');})[_0x392c52(0x1c7,'\x7a\x4d\x21\x48')](_0x5c592b):[]};else{if(_0x389155){if(_0x367f20[_0x392c52(0x1e4,'\x35\x5d\x30\x44')](_0x392c52(0x1eb,'\x4b\x67\x51\x36'),_0x367f20[_0x392c52(0x185,'\x38\x71\x53\x41')])){if(_0x1453cc['\x68\x61\x73'](_0x3e5265))_0x46b25c[_0x392c52(0x1f0,'\x53\x75\x76\x55')](_0x35b914);}else{var _0x8b87e1=_0x389155[_0x392c52(0x206,'\x38\x71\x53\x41')](_0x464cd3,arguments);return _0x389155=null,_0x8b87e1;}}}}:function(){};return _0x24d7c6=![],_0x70f65e;};}()),_0x30ea54=_0x1aa05c(this,function(){var _0x4ad3b6=_0x3b0a,_0x5dd9cd={};_0x5dd9cd[_0x4ad3b6(0x252,'\x63\x30\x6b\x32')]=_0x4ad3b6(0x148,'\x4f\x36\x5a\x76')+'\x2b\x29\x2b\x24';var _0x1a414d=_0x5dd9cd;return _0x30ea54[_0x4ad3b6(0x144,'\x4f\x36\x5a\x76')]()[_0x4ad3b6(0x1fd,'\x4b\x4a\x35\x31')](_0x1a414d[_0x4ad3b6(0x1a9,'\x63\x70\x21\x29')])[_0x4ad3b6(0x186,'\x33\x77\x68\x25')]()[_0x4ad3b6(0x1f1,'\x77\x46\x67\x69')+_0x4ad3b6(0x237,'\x77\x46\x67\x69')](_0x30ea54)[_0x4ad3b6(0x21e,'\x44\x5b\x21\x35')]('\x28\x28\x28\x2e\x2b\x29\x2b\x29'+_0x4ad3b6(0x1de,'\x73\x73\x78\x44'));});_0x30ea54();'use strict';const {envInt:_0x48ab5a}=require(_0x16cc23(0x1c8,'\x55\x30\x55\x4c')+'\x67'),_0x4cde52=(0x1704+-0xec*-0x17+0xd*-0x366)*(0xa47*-0x3+0x1*-0x3f2+0x26c7)*(0x19+-0x1807+-0x5*-0x596),_0x18a75b=0x1a7b+0x1158+-0x3*0x819;let _0x20ec44=null,_0x25cdcf=-0x1*0x1bc+-0xd*0x183+0x1563,_0x4a340d=null,_0x18e68f=![];function _0x337567(){var _0x5a85e1=_0x16cc23;return Date[_0x5a85e1(0x254,'\x4c\x66\x39\x42')]();}function _0x13c9(){var _0xc00c86=['\x57\x36\x4e\x63\x54\x43\x6b\x5a\x57\x4f\x61\x31','\x72\x6d\x6f\x6f\x57\x51\x71','\x66\x38\x6f\x48\x75\x61','\x70\x73\x56\x64\x48\x4a\x37\x63\x4f\x53\x6f\x50\x57\x51\x57\x6e','\x63\x62\x52\x63\x4c\x38\x6b\x74\x6d\x74\x47\x31\x57\x36\x52\x63\x4c\x38\x6f\x67\x75\x53\x6b\x31','\x7a\x77\x58\x56\x45\x6d\x6f\x75','\x72\x74\x62\x45\x61\x38\x6b\x70','\x6f\x57\x52\x64\x51\x43\x6b\x64\x57\x35\x30','\x57\x34\x46\x63\x4c\x38\x6b\x33','\x57\x51\x39\x6e\x77\x53\x6b\x4a\x6e\x61','\x44\x4d\x48\x44\x76\x6d\x6f\x38','\x78\x77\x54\x71','\x57\x36\x54\x79\x57\x4f\x37\x64\x4f\x61\x48\x76\x79\x6d\x6b\x4e','\x57\x35\x64\x64\x54\x6d\x6f\x7a\x77\x6d\x6f\x53','\x57\x36\x78\x63\x4d\x61\x46\x63\x52\x6d\x6f\x55','\x65\x38\x6b\x41\x57\x37\x79\x58\x57\x36\x57\x70\x57\x51\x46\x63\x48\x43\x6b\x74\x42\x61','\x57\x4f\x56\x63\x53\x53\x6b\x54\x57\x51\x4c\x68\x43\x43\x6f\x6c\x42\x71','\x43\x67\x58\x45\x68\x53\x6b\x37\x57\x37\x47\x77\x67\x57','\x62\x43\x6b\x43\x73\x30\x57\x71\x77\x62\x68\x64\x53\x47','\x79\x74\x31\x51\x70\x38\x6b\x42\x57\x51\x47','\x57\x37\x76\x78\x76\x57\x52\x63\x48\x61','\x57\x34\x74\x64\x51\x4a\x38\x77\x62\x61','\x57\x35\x6c\x63\x4f\x4b\x70\x64\x4b\x53\x6f\x38','\x71\x6d\x6f\x75\x71\x66\x53\x54\x75\x31\x46\x64\x4b\x47','\x57\x35\x33\x64\x50\x78\x39\x72','\x57\x51\x48\x4d\x77\x53\x6b\x6f\x69\x76\x47','\x68\x6d\x6f\x6c\x63\x58\x6d\x77\x57\x37\x37\x63\x52\x66\x34','\x61\x62\x6c\x63\x4a\x43\x6f\x74\x57\x50\x53','\x73\x4e\x33\x64\x47\x38\x6f\x37\x75\x47','\x70\x5a\x5a\x64\x4b\x57','\x65\x53\x6f\x53\x66\x71','\x6b\x62\x6e\x51\x69\x38\x6b\x44\x57\x51\x5a\x64\x50\x47\x43','\x57\x52\x44\x4d\x76\x38\x6b\x44\x70\x66\x2f\x63\x4d\x57','\x78\x6d\x6f\x79\x76\x76\x6d\x41','\x62\x43\x6b\x2b\x6a\x6d\x6b\x76\x57\x50\x7a\x54\x46\x43\x6b\x50','\x66\x38\x6b\x4d\x6a\x63\x64\x63\x48\x43\x6f\x69\x42\x78\x65','\x69\x77\x38\x67','\x66\x6d\x6b\x50\x65\x53\x6b\x63\x57\x52\x44\x39\x46\x43\x6b\x54','\x57\x36\x4c\x6e\x57\x4f\x76\x38\x57\x52\x79','\x57\x35\x7a\x7a\x57\x52\x76\x54\x57\x51\x4b','\x57\x4f\x6c\x63\x50\x6d\x6b\x72\x61\x74\x38\x31\x73\x53\x6f\x48\x66\x59\x57\x4b\x64\x57','\x73\x6d\x6f\x55\x41\x43\x6f\x79\x57\x36\x34\x39\x6f\x6d\x6f\x4a','\x41\x53\x6b\x58\x75\x67\x50\x4a\x57\x36\x54\x77\x45\x61','\x62\x71\x56\x64\x4b\x47\x56\x63\x47\x61','\x68\x38\x6f\x55\x71\x30\x6a\x43','\x6f\x53\x6b\x76\x63\x47\x4a\x63\x47\x43\x6f\x4f\x76\x68\x61','\x6f\x6d\x6b\x66\x6b\x43\x6f\x73\x57\x37\x52\x63\x4c\x75\x58\x47','\x57\x51\x30\x58\x57\x34\x74\x63\x4f\x68\x61','\x69\x77\x34\x52\x42\x4b\x43\x35\x57\x4f\x47','\x57\x36\x37\x64\x49\x71\x65\x48\x6e\x76\x75','\x57\x35\x4a\x64\x55\x77\x66\x59\x73\x57','\x42\x68\x54\x2b\x64\x6d\x6b\x49\x57\x37\x69','\x6a\x4d\x53\x70\x79\x4c\x4f','\x57\x36\x4a\x64\x4b\x58\x46\x64\x50\x47','\x41\x5a\x52\x63\x4e\x4c\x61','\x57\x34\x4a\x64\x50\x77\x4c\x61\x79\x6d\x6f\x4d','\x45\x63\x48\x33','\x6e\x67\x53\x78\x41\x30\x57','\x57\x36\x56\x64\x4b\x38\x6f\x63\x44\x47','\x6f\x38\x6f\x73\x6b\x53\x6f\x66\x57\x37\x56\x64\x4d\x53\x6b\x56\x78\x47','\x62\x53\x6b\x50\x6d\x38\x6b\x5a\x57\x51\x72\x33\x45\x57','\x41\x74\x35\x47','\x76\x53\x6b\x6a\x6e\x38\x6b\x48\x57\x37\x6d','\x74\x43\x6f\x76\x46\x4c\x4b\x77\x77\x4c\x74\x64\x52\x57','\x45\x53\x6b\x38\x72\x4e\x50\x47\x57\x51\x6e\x44\x46\x71','\x57\x34\x61\x43\x57\x52\x6d\x32\x57\x34\x4b','\x57\x35\x34\x30\x43\x47','\x64\x6d\x6b\x52\x6a\x64\x42\x63\x53\x53\x6f\x6a\x74\x76\x79','\x57\x36\x4c\x32\x57\x4f\x72\x39\x57\x51\x34','\x42\x4d\x35\x75\x6f\x38\x6b\x57','\x7a\x64\x39\x51\x6e\x38\x6b\x44\x57\x51\x75','\x44\x5a\x6e\x41\x6e\x72\x31\x2f\x57\x51\x47\x58\x6b\x43\x6f\x6f\x7a\x4e\x4f','\x57\x34\x7a\x52\x44\x67\x78\x63\x4c\x71','\x6d\x73\x47\x4e\x77\x38\x6b\x72\x57\x36\x4f\x4e\x61\x43\x6b\x4d\x57\x37\x57','\x66\x43\x6f\x50\x6d\x6d\x6f\x42\x57\x34\x4f','\x57\x34\x6c\x64\x49\x67\x66\x77\x71\x47','\x68\x6d\x6b\x52\x6c\x63\x4a\x63\x53\x38\x6f\x59\x45\x30\x30','\x6c\x33\x71\x67\x44\x75\x75\x53\x57\x4f\x53','\x77\x75\x6c\x64\x47\x53\x6f\x65\x44\x47','\x64\x53\x6f\x50\x76\x65\x53\x78','\x57\x4f\x71\x6e\x41\x31\x37\x64\x47\x72\x35\x4b\x57\x35\x61','\x57\x35\x42\x63\x49\x6d\x6b\x43\x57\x50\x47\x6e\x57\x52\x54\x34\x70\x47','\x57\x37\x46\x63\x4d\x62\x2f\x63\x50\x43\x6f\x34','\x57\x34\x6d\x74\x57\x34\x57\x49\x57\x4f\x43','\x57\x34\x61\x71\x57\x37\x57\x78','\x57\x50\x54\x2b\x57\x50\x34\x76\x57\x4f\x78\x64\x56\x57','\x57\x35\x53\x62\x76\x49\x56\x64\x4a\x47','\x57\x34\x43\x46\x57\x52\x65\x57\x57\x34\x6a\x39\x65\x48\x75','\x46\x4a\x37\x64\x4e\x31\x64\x63\x54\x43\x6b\x45\x57\x35\x43\x4e','\x71\x43\x6f\x63\x7a\x31\x79\x72\x78\x30\x78\x64\x55\x71','\x57\x4f\x76\x32\x57\x50\x52\x63\x4a\x32\x61\x47\x57\x36\x31\x34','\x57\x36\x6d\x48\x77\x71\x46\x64\x4c\x68\x46\x63\x48\x6d\x6b\x66','\x44\x53\x6b\x78\x6c\x6d\x6b\x71\x57\x35\x5a\x63\x51\x57','\x64\x53\x6f\x50\x74\x33\x43\x45','\x57\x36\x5a\x64\x4d\x71\x69\x4b\x6a\x65\x38','\x65\x6d\x6b\x30\x6d\x47','\x6d\x43\x6b\x42\x57\x51\x46\x64\x53\x68\x34','\x57\x51\x4f\x32\x57\x34\x33\x63\x4a\x32\x47','\x57\x34\x4e\x63\x4f\x76\x4a\x64\x4f\x47','\x57\x34\x7a\x57\x57\x50\x43','\x6d\x6d\x6b\x73\x57\x52\x37\x64\x56\x33\x52\x63\x4e\x53\x6b\x67','\x57\x34\x56\x64\x47\x71\x37\x64\x4a\x5a\x4f','\x67\x64\x68\x64\x55\x6d\x6b\x49\x57\x34\x53','\x78\x6d\x6f\x45\x43\x4b\x53\x6e\x78\x31\x2f\x64\x55\x57','\x57\x4f\x33\x63\x4c\x43\x6b\x2b\x57\x37\x6c\x64\x51\x53\x6b\x33\x57\x52\x61','\x57\x37\x66\x44\x57\x51\x33\x64\x4f\x4b\x6d','\x6b\x6d\x6f\x64\x73\x76\x30\x2b','\x57\x34\x46\x64\x4a\x48\x30\x6d\x6b\x61','\x57\x4f\x72\x48\x57\x51\x69\x73\x57\x52\x75','\x64\x53\x6f\x56\x42\x65\x47\x66\x46\x53\x6b\x35\x57\x35\x79','\x57\x50\x58\x34\x57\x52\x69\x66\x57\x50\x6c\x64\x52\x65\x4f','\x57\x34\x34\x37\x57\x37\x6a\x4a\x57\x37\x65\x51\x78\x4a\x65','\x71\x48\x4e\x63\x4a\x30\x78\x63\x51\x43\x6f\x55\x57\x36\x4b\x74','\x69\x53\x6b\x43\x57\x50\x4e\x63\x51\x71','\x57\x50\x68\x63\x54\x6d\x6b\x67\x57\x51\x50\x73','\x73\x53\x6f\x41\x57\x51\x76\x51\x57\x52\x43\x76\x57\x51\x78\x64\x52\x61','\x75\x4a\x46\x63\x4d\x33\x46\x63\x52\x71','\x57\x36\x6e\x56\x41\x4b\x68\x63\x4f\x47','\x71\x43\x6f\x63\x79\x65\x30\x6e\x76\x30\x47','\x57\x52\x4f\x73\x57\x52\x56\x64\x4e\x58\x58\x61\x72\x57','\x57\x34\x64\x63\x4b\x38\x6b\x38\x57\x4f\x4b\x56\x57\x51\x39\x34\x70\x47','\x6f\x6d\x6b\x4c\x57\x50\x2f\x64\x49\x32\x34','\x57\x50\x76\x6d\x46\x43\x6b\x2f\x62\x57','\x63\x6d\x6b\x4e\x6d\x47','\x76\x53\x6b\x51\x68\x6d\x6b\x30\x57\x35\x47\x47\x57\x37\x61','\x57\x50\x68\x64\x49\x43\x6f\x48\x57\x35\x58\x76\x57\x36\x54\x52\x62\x73\x68\x63\x48\x68\x53\x4d','\x57\x34\x61\x6e\x42\x74\x30','\x57\x34\x72\x31\x78\x4b\x6c\x63\x47\x57','\x6b\x59\x56\x63\x56\x6d\x6f\x65\x57\x50\x38','\x57\x51\x6a\x51\x77\x6d\x6b\x44\x6d\x65\x69','\x57\x50\x65\x4a\x66\x38\x6f\x4b\x57\x34\x5a\x63\x50\x71','\x57\x36\x52\x64\x49\x47\x78\x64\x56\x47','\x57\x36\x52\x64\x4d\x4c\x7a\x48\x75\x71','\x6d\x63\x4e\x63\x4e\x6d\x6f\x68\x57\x50\x56\x63\x48\x59\x4b','\x57\x4f\x52\x63\x51\x38\x6b\x78\x57\x52\x72\x42\x44\x43\x6f\x76\x79\x61','\x65\x6d\x6f\x34\x63\x6d\x6f\x33\x57\x35\x56\x64\x50\x47','\x57\x50\x53\x50\x63\x38\x6f\x67\x57\x35\x4e\x63\x52\x53\x6b\x50','\x57\x37\x56\x63\x4b\x53\x6b\x70\x57\x36\x66\x6c','\x57\x34\x78\x64\x47\x4d\x54\x2b\x7a\x61','\x57\x52\x47\x36\x57\x50\x5a\x63\x48\x77\x56\x63\x4f\x77\x54\x78','\x57\x35\x5a\x63\x51\x75\x34','\x57\x36\x37\x64\x4b\x5a\x6d\x51\x70\x4c\x6d\x79\x57\x34\x30','\x57\x35\x2f\x64\x50\x4c\x72\x72\x75\x61','\x57\x36\x46\x64\x55\x43\x6f\x34\x75\x67\x43','\x57\x37\x4e\x64\x47\x47\x61','\x6a\x6d\x6f\x39\x69\x38\x6f\x6e\x57\x36\x79','\x46\x5a\x2f\x63\x4b\x30\x78\x63\x54\x61','\x72\x67\x76\x76\x79\x47','\x78\x6d\x6f\x45\x73\x4c\x4f\x72\x45\x75\x46\x64\x55\x71','\x57\x50\x72\x56\x57\x50\x43','\x78\x38\x6b\x6c\x76\x75\x6a\x63\x57\x37\x52\x63\x4a\x72\x44\x51\x57\x50\x46\x63\x48\x57','\x57\x34\x43\x69\x46\x73\x37\x64\x51\x57','\x57\x37\x7a\x65\x57\x52\x4e\x64\x56\x33\x34','\x57\x34\x70\x64\x4f\x6d\x6f\x68\x64\x57','\x57\x37\x70\x64\x4b\x43\x6f\x31\x46\x53\x6f\x46','\x57\x50\x50\x51\x57\x52\x43\x43\x57\x52\x6a\x39\x71\x72\x54\x76\x74\x38\x6f\x49\x57\x52\x57','\x45\x6d\x6f\x63\x42\x66\x79\x51','\x57\x52\x72\x51\x72\x6d\x6b\x6d','\x57\x51\x6a\x51\x77\x6d\x6b\x6d\x6a\x47','\x57\x36\x64\x64\x48\x30\x6a\x65\x71\x71','\x46\x38\x6f\x69\x57\x34\x4c\x59\x57\x37\x6d','\x6c\x49\x68\x63\x49\x57','\x57\x50\x68\x63\x4d\x53\x6b\x62\x57\x4f\x44\x6f','\x44\x53\x6b\x6a\x6c\x43\x6b\x47\x57\x37\x53','\x75\x4d\x62\x64','\x57\x52\x4b\x64\x57\x51\x46\x64\x4c\x72\x30','\x72\x32\x58\x76\x41\x43\x6f\x54\x73\x6d\x6b\x48\x57\x37\x47','\x46\x38\x6f\x6e\x57\x35\x47\x59\x57\x37\x34\x55\x6d\x75\x43','\x64\x4b\x6d\x64\x57\x52\x74\x63\x47\x32\x30','\x57\x35\x70\x64\x49\x43\x6f\x66\x57\x37\x4a\x64\x53\x43\x6b\x31\x57\x52\x6e\x6f','\x68\x6d\x6f\x33\x73\x32\x71\x76','\x67\x38\x6f\x36\x6a\x38\x6f\x78\x57\x36\x57','\x57\x35\x4f\x64\x57\x50\x53\x4e\x57\x35\x35\x74\x68\x71','\x57\x35\x42\x63\x4c\x38\x6b\x33\x57\x4f\x6d\x35','\x43\x63\x78\x63\x56\x4c\x6c\x63\x54\x43\x6f\x46\x57\x34\x69','\x57\x34\x70\x63\x4e\x53\x6f\x59\x57\x34\x75\x6f\x57\x52\x7a\x5a\x79\x71','\x57\x35\x30\x47\x42\x5a\x70\x64\x4c\x76\x53','\x67\x6d\x6f\x53\x65\x43\x6f\x30\x57\x35\x6c\x63\x56\x43\x6f\x6b\x6c\x47','\x57\x37\x74\x64\x47\x57\x52\x64\x51\x74\x72\x78','\x79\x73\x4c\x66\x69\x53\x6b\x42\x57\x51\x5a\x64\x53\x57','\x46\x38\x6f\x6f\x57\x35\x7a\x37\x57\x37\x47\x65\x6a\x4b\x79','\x77\x53\x6f\x4e\x73\x61\x43\x44\x41\x43\x6f\x52\x57\x36\x79','\x57\x36\x56\x64\x49\x47\x33\x64\x52\x73\x75','\x57\x35\x69\x44\x57\x52\x38','\x57\x34\x48\x30\x57\x4f\x68\x64\x4e\x68\x65\x31\x57\x51\x47','\x57\x37\x4a\x63\x49\x6d\x6b\x57\x57\x35\x6e\x2b','\x57\x4f\x68\x63\x50\x38\x6b\x73\x62\x4a\x4b\x2f\x76\x38\x6f\x6a\x61\x49\x6d\x7a\x62\x57','\x77\x6d\x6f\x64\x44\x76\x79\x6c\x77\x4c\x71','\x57\x34\x6c\x64\x4f\x6d\x6f\x6e\x45\x4e\x38','\x57\x37\x4e\x64\x4b\x47\x33\x64\x4f\x71','\x57\x34\x71\x39\x57\x34\x72\x68\x57\x51\x46\x64\x56\x77\x43\x4e\x57\x36\x4b\x39','\x57\x50\x48\x38\x6b\x78\x75','\x6c\x62\x68\x64\x49\x53\x6b\x58','\x45\x38\x6f\x75\x57\x34\x35\x32','\x63\x65\x57\x68\x46\x4b\x69','\x57\x35\x65\x7a\x74\x58\x64\x64\x4d\x61','\x68\x6d\x6f\x45\x64\x73\x6d\x42','\x57\x36\x31\x70\x57\x4f\x50\x6c\x57\x51\x4f','\x57\x34\x6e\x4a\x76\x73\x46\x63\x4f\x53\x6b\x62','\x43\x53\x6b\x38\x75\x71','\x6d\x5a\x64\x64\x48\x47','\x57\x4f\x43\x46\x6c\x47\x70\x64\x4b\x62\x50\x46\x57\x35\x56\x63\x54\x71\x56\x63\x51\x61','\x64\x53\x6f\x30\x74\x67\x4f\x62','\x57\x51\x57\x45\x57\x36\x56\x63\x4e\x75\x6e\x68\x71\x6d\x6b\x77','\x6d\x38\x6b\x7a\x6e\x61\x33\x63\x52\x71','\x70\x43\x6b\x72\x57\x4f\x53\x52\x57\x36\x61\x62\x61\x67\x52\x63\x53\x6d\x6b\x77','\x74\x53\x6f\x45\x75\x33\x4f\x45\x76\x76\x4b','\x57\x34\x37\x64\x4b\x38\x6f\x42\x57\x51\x56\x63\x52\x43\x6f\x50\x57\x51\x72\x44\x71\x53\x6f\x55\x72\x59\x61','\x57\x52\x44\x52\x6a\x30\x64\x63\x4a\x75\x78\x49\x47\x50\x30\x6f','\x57\x34\x6d\x72\x7a\x64\x61','\x69\x43\x6b\x79\x57\x51\x64\x64\x4f\x67\x2f\x63\x4a\x38\x6b\x77\x73\x47','\x42\x53\x6b\x34\x76\x4d\x43','\x57\x37\x30\x70\x79\x71\x56\x64\x4a\x47','\x64\x43\x6b\x56\x6a\x64\x71','\x6d\x32\x4f\x63\x44\x75\x57\x50\x57\x52\x30\x78','\x68\x53\x6b\x4e\x69\x71','\x66\x38\x6b\x4d\x62\x64\x46\x63\x4e\x71','\x79\x77\x66\x62\x71\x53\x6f\x2f\x74\x43\x6b\x52\x57\x52\x47','\x57\x36\x79\x32\x57\x36\x4c\x4c\x57\x37\x65','\x69\x38\x6b\x41\x57\x51\x53','\x43\x76\x50\x78\x6b\x6d\x6b\x42','\x45\x43\x6f\x63\x57\x34\x4e\x64\x52\x38\x6f\x5a\x57\x51\x42\x63\x51\x53\x6b\x6d\x57\x4f\x52\x64\x53\x43\x6b\x36\x45\x57','\x69\x74\x4a\x64\x47\x4a\x37\x63\x52\x43\x6f\x47','\x57\x34\x64\x63\x4b\x38\x6b\x2b\x57\x4f\x47\x74','\x57\x37\x4f\x59\x42\x59\x56\x64\x4c\x71','\x57\x34\x38\x33\x57\x36\x50\x6a\x57\x37\x69','\x68\x75\x43\x6e\x57\x51\x78\x63\x4c\x64\x70\x63\x4f\x59\x61','\x72\x43\x6f\x73\x72\x32\x4b\x55','\x57\x35\x6c\x63\x4b\x38\x6b\x4d\x57\x4f\x65\x66','\x57\x34\x52\x63\x4e\x38\x6b\x38\x57\x4f\x4f\x75\x57\x52\x65','\x57\x35\x46\x64\x50\x38\x6f\x65','\x70\x57\x33\x64\x4d\x38\x6b\x54\x57\x37\x79','\x66\x38\x6f\x2b\x6a\x6d\x6f\x4e\x57\x34\x5a\x64\x54\x43\x6b\x6a','\x57\x4f\x66\x4e\x6e\x32\x74\x63\x49\x62\x5a\x63\x54\x53\x6f\x48\x57\x34\x78\x64\x56\x71\x66\x31','\x6f\x6d\x6b\x41\x57\x51\x64\x64\x55\x30\x65','\x57\x34\x48\x78\x78\x57\x68\x63\x4c\x61','\x57\x35\x34\x57\x43\x73\x6c\x64\x4b\x75\x37\x63\x54\x71','\x75\x58\x76\x30\x6e\x43\x6b\x68\x57\x50\x33\x64\x4d\x64\x79','\x44\x53\x6b\x38\x71\x32\x54\x63\x57\x36\x7a\x46\x77\x47','\x57\x35\x43\x69\x57\x52\x30\x49\x57\x4f\x76\x68\x77\x38\x6b\x68','\x57\x34\x37\x63\x4e\x38\x6b\x5a\x57\x4f\x4b\x59\x57\x52\x58\x37\x61\x47','\x57\x50\x72\x4f\x6b\x77\x78\x63\x4a\x71','\x69\x74\x74\x64\x4d\x73\x4b','\x57\x34\x65\x76\x57\x37\x4f\x6a\x57\x52\x6a\x4b\x7a\x61','\x43\x4a\x6c\x63\x51\x4d\x37\x63\x53\x57','\x71\x32\x76\x76\x46\x38\x6f\x37','\x57\x36\x2f\x64\x4e\x57\x4b\x57\x69\x57','\x57\x51\x4e\x63\x4d\x43\x6f\x7a\x57\x37\x53\x78','\x75\x38\x6b\x57\x6d\x6d\x6b\x56\x57\x35\x35\x48\x57\x52\x57\x73','\x57\x37\x65\x33\x61\x6d\x6b\x49\x69\x77\x78\x63\x50\x43\x6b\x59\x43\x61','\x57\x50\x78\x63\x47\x53\x6b\x6c\x57\x37\x2f\x64\x4a\x6d\x6b\x2b\x57\x52\x6e\x50','\x57\x36\x34\x2b\x43\x77\x46\x63\x4e\x64\x64\x64\x4d\x76\x47\x4c','\x57\x50\x4c\x55\x57\x4f\x61','\x64\x43\x6f\x49\x66\x38\x6f\x48','\x62\x32\x53\x55\x57\x50\x64\x63\x4b\x61','\x63\x43\x6f\x4c\x71\x76\x75\x72\x43\x57','\x74\x43\x6f\x6c\x57\x52\x6d','\x65\x6d\x6f\x49\x65\x43\x6b\x31\x57\x35\x2f\x64\x4f\x53\x6b\x72\x7a\x57','\x57\x35\x52\x64\x4f\x67\x39\x63\x41\x47','\x57\x35\x6d\x69\x57\x37\x71\x69','\x57\x37\x57\x71\x57\x35\x53\x4d\x57\x51\x71','\x41\x68\x54\x58\x64\x38\x6b\x65\x57\x37\x38\x76\x6a\x57','\x57\x4f\x50\x72\x75\x53\x6b\x79\x6e\x61','\x65\x38\x6b\x4d\x6b\x59\x70\x63\x4f\x38\x6f\x66','\x77\x75\x74\x64\x4e\x6d\x6f\x4b\x7a\x67\x4b\x6f','\x46\x47\x46\x63\x4d\x32\x68\x63\x48\x71','\x57\x35\x38\x76\x57\x52\x71\x59\x57\x35\x48\x41','\x57\x34\x2f\x63\x51\x65\x52\x64\x50\x47','\x69\x49\x2f\x64\x4b\x61','\x57\x52\x57\x54\x57\x35\x69','\x64\x4b\x75\x44\x57\x4f\x78\x63\x48\x33\x5a\x63\x56\x57','\x57\x35\x79\x76\x57\x36\x34\x67\x57\x52\x66\x4b\x43\x53\x6b\x31','\x64\x58\x56\x64\x4b\x53\x6b\x6d\x57\x35\x57','\x57\x36\x37\x63\x4f\x30\x68\x64\x4c\x38\x6f\x52','\x57\x37\x79\x69\x42\x71\x64\x64\x50\x47','\x57\x36\x52\x64\x4f\x61\x2f\x64\x4d\x4a\x71','\x57\x34\x39\x34\x57\x50\x6e\x6b\x57\x52\x7a\x55\x69\x67\x57','\x64\x53\x6f\x34\x66\x53\x6f\x39','\x63\x76\x34\x67\x57\x51\x38','\x57\x52\x2f\x63\x4b\x43\x6f\x62\x57\x37\x79','\x6e\x53\x6b\x79\x57\x52\x57','\x57\x50\x57\x52\x68\x61','\x57\x34\x35\x55\x57\x52\x72\x68\x57\x4f\x50\x49\x6d\x4b\x43','\x57\x35\x4f\x64\x57\x51\x35\x31\x57\x34\x50\x74\x64\x72\x57','\x7a\x4a\x76\x42\x6d\x38\x6b\x62\x57\x51\x5a\x64\x50\x61\x57','\x57\x37\x46\x64\x4e\x72\x34\x54','\x6a\x6d\x6b\x67\x57\x50\x4e\x63\x51\x6d\x6b\x4e\x57\x37\x6c\x63\x56\x61','\x57\x52\x50\x4e\x69\x61','\x57\x51\x69\x51\x57\x34\x5a\x63\x49\x68\x37\x63\x54\x47','\x65\x6d\x6b\x4c\x6c\x71\x64\x63\x55\x47','\x68\x38\x6f\x47\x61\x61','\x57\x37\x37\x64\x47\x57\x78\x64\x55\x4a\x76\x6e\x57\x34\x76\x79','\x6e\x64\x74\x64\x4a\x59\x4e\x63\x56\x71','\x57\x35\x61\x79\x57\x52\x53\x37\x57\x34\x54\x78\x61\x64\x79','\x57\x52\x30\x45\x57\x37\x4a\x63\x55\x65\x47','\x57\x34\x7a\x35\x57\x50\x70\x64\x47\x78\x43\x33\x57\x51\x4c\x73','\x57\x35\x64\x63\x50\x30\x33\x64\x47\x6d\x6f\x61','\x65\x43\x6b\x79\x57\x4f\x76\x75\x57\x37\x57\x4b\x57\x51\x70\x63\x4e\x61'];_0x13c9=function(){return _0xc00c86;};return _0x13c9();}function _0x4ebfe1(){var _0x450673=_0x16cc23,_0x3352ad={};_0x3352ad[_0x450673(0x1ad,'\x63\x70\x21\x29')]=function(_0x3ab532,_0xe32c29){return _0x3ab532!==_0xe32c29;};var _0x9efc90=_0x3352ad;return _0x9efc90[_0x450673(0x18b,'\x7a\x69\x50\x71')](String(process.env.EVOLVE_OPEN_PR_DEDUP||'\x31'),'\x30');}function _0x415559(){var _0x1426ad=_0x16cc23,_0x56bb9e={};_0x56bb9e[_0x1426ad(0x253,'\x4c\x66\x39\x42')]=_0x1426ad(0x14c,'\x4b\x67\x51\x36')+_0x1426ad(0x17a,'\x53\x75\x76\x55')+_0x1426ad(0x188,'\x25\x72\x6d\x32');var _0x18998c=_0x56bb9e;return _0x48ab5a(_0x18998c[_0x1426ad(0x231,'\x53\x75\x76\x55')],0x99e7+0xa48e+-0x5415);}function _0x530ec2(){var _0x48ff37=_0x16cc23,_0x2da90d={'\x53\x55\x4b\x50\x6e':function(_0x1a0043,_0x4ba5cd){return _0x1a0043!==_0x4ba5cd;},'\x48\x4e\x64\x79\x6b':_0x48ff37(0x1cc,'\x66\x69\x6e\x61'),'\x72\x46\x6b\x54\x74':function(_0x284b81,_0x127ee4){return _0x284b81(_0x127ee4);},'\x76\x75\x64\x46\x4e':function(_0x38e5a8,_0x27a066){return _0x38e5a8>=_0x27a066;},'\x6d\x6c\x66\x57\x56':function(_0x1a74b0,_0x5488ae){return _0x1a74b0===_0x5488ae;},'\x4b\x4e\x6b\x4b\x56':_0x48ff37(0x240,'\x4b\x67\x51\x36'),'\x5a\x70\x46\x58\x58':function(_0x4c5a57,_0x4ee6bf){return _0x4c5a57(_0x4ee6bf);},'\x51\x6d\x59\x67\x6b':function(_0x11fd21,_0x4a0f81){return _0x11fd21(_0x4a0f81);},'\x68\x65\x41\x73\x4a':function(_0x5b5787){return _0x5b5787();},'\x51\x4f\x49\x56\x52':_0x48ff37(0x16b,'\x4b\x67\x51\x36')+_0x48ff37(0x215,'\x51\x29\x49\x62'),'\x57\x42\x75\x70\x43':_0x48ff37(0x177,'\x45\x63\x76\x56')+_0x48ff37(0x1ea,'\x35\x5a\x73\x23')+_0x48ff37(0x1aa,'\x69\x30\x77\x6d')+_0x48ff37(0x25b,'\x33\x77\x68\x25')+_0x48ff37(0x201,'\x7a\x4d\x21\x48')+_0x48ff37(0x1c6,'\x26\x5b\x45\x74')+_0x48ff37(0x1f8,'\x4c\x66\x39\x42')+'\x66\x69\x6c\x65\x73\x20\x2d\x2d'+_0x48ff37(0x217,'\x31\x75\x40\x5d'),'\x6f\x41\x41\x50\x76':_0x48ff37(0x1b8,'\x47\x21\x6a\x74'),'\x49\x50\x70\x66\x51':_0x48ff37(0x1bc,'\x63\x30\x6b\x32'),'\x6a\x71\x69\x55\x73':function(_0xc5292b,_0x5d5d80){return _0xc5292b!==_0x5d5d80;},'\x50\x73\x4d\x69\x55':_0x48ff37(0x22f,'\x38\x71\x53\x41'),'\x6e\x70\x44\x50\x66':_0x48ff37(0x17c,'\x44\x5b\x21\x35'),'\x7a\x52\x51\x58\x75':_0x48ff37(0x247,'\x43\x40\x48\x37')};try{const _0x1cd449=_0x2da90d[_0x48ff37(0x167,'\x4a\x4a\x4f\x44')](require,_0x2da90d[_0x48ff37(0x199,'\x63\x30\x6b\x32')])[_0x48ff37(0x141,'\x4f\x36\x5a\x76')](_0x2da90d[_0x48ff37(0x194,'\x4a\x4a\x4f\x44')],{'\x65\x6e\x63\x6f\x64\x69\x6e\x67':_0x2da90d[_0x48ff37(0x21d,'\x7a\x4d\x21\x48')],'\x74\x69\x6d\x65\x6f\x75\x74':_0x18a75b,'\x73\x74\x64\x69\x6f':[_0x48ff37(0x25c,'\x36\x42\x6d\x39'),_0x2da90d[_0x48ff37(0x1c2,'\x31\x75\x40\x5d')],_0x48ff37(0x159,'\x78\x51\x56\x71')],'\x6d\x61\x78\x42\x75\x66\x66\x65\x72':_0x4cde52}),_0x2e951a=JSON[_0x48ff37(0x214,'\x4c\x66\x39\x42')](_0x1cd449||'\x5b\x5d');if(!Array[_0x48ff37(0x195,'\x33\x77\x68\x25')](_0x2e951a))return[];return _0x2e951a[_0x48ff37(0x1c0,'\x4f\x69\x6c\x5e')](function(_0xd744ad){var _0x51948a=_0x48ff37;return _0x2da90d['\x6d\x6c\x66\x57\x56'](_0x51948a(0x135,'\x43\x40\x48\x37'),_0x2da90d[_0x51948a(0x256,'\x78\x51\x56\x71')])?{'\x6e\x75\x6d\x62\x65\x72':_0xd744ad[_0x51948a(0x1cf,'\x73\x73\x78\x44')],'\x74\x69\x74\x6c\x65':_0x2da90d[_0x51948a(0x1b0,'\x49\x6e\x67\x77')](String,_0xd744ad[_0x51948a(0x1bf,'\x26\x5b\x45\x74')]||''),'\x68\x65\x61\x64\x52\x65\x66\x4e\x61\x6d\x65':_0x2da90d[_0x51948a(0x1ae,'\x47\x21\x6a\x74')](String,_0xd744ad[_0x51948a(0x233,'\x35\x5d\x30\x44')+_0x51948a(0x251,'\x66\x69\x6e\x61')]||''),'\x66\x69\x6c\x65\x73':Array[_0x51948a(0x19b,'\x31\x75\x40\x5d')](_0xd744ad[_0x51948a(0x180,'\x69\x30\x77\x6d')])?_0xd744ad[_0x51948a(0x16d,'\x46\x73\x37\x55')][_0x51948a(0x161,'\x73\x73\x78\x44')](function(_0x3b0535){var _0x5ec659=_0x51948a;if(_0x2da90d[_0x5ec659(0x1b7,'\x25\x72\x6d\x32')](_0x2da90d['\x48\x4e\x64\x79\x6b'],_0x2da90d[_0x5ec659(0x1e1,'\x71\x4d\x74\x51')]))_0xf3e989[_0x5ec659(0x15c,'\x36\x42\x6d\x39')](_0x272945);else return _0x2da90d[_0x5ec659(0x232,'\x5a\x30\x32\x38')](String,_0x3b0535[_0x5ec659(0x236,'\x50\x6b\x43\x54')]||'');})[_0x51948a(0x1a0,'\x63\x30\x6b\x32')](Boolean):[]}:_0x2da90d[_0x51948a(0x151,'\x63\x70\x21\x29')](_0x49be91[_0x51948a(0x1d1,'\x5a\x30\x32\x38')],0x10*-0xde+0x142c+0x1*-0x649);});}catch(_0x2b6b5a){var _0x5ec0e8=_0x2b6b5a&&_0x2b6b5a[_0x48ff37(0x20b,'\x73\x73\x78\x44')]?String(_0x2b6b5a[_0x48ff37(0x1d7,'\x25\x72\x6d\x32')]):'';if(/not found|ENOENT|command not found/i[_0x48ff37(0x181,'\x43\x40\x48\x37')](_0x5ec0e8)){if(!_0x18e68f){if(_0x2da90d[_0x48ff37(0x1a8,'\x5e\x34\x39\x61')](_0x2da90d[_0x48ff37(0x1bb,'\x33\x77\x68\x25')],_0x2da90d[_0x48ff37(0x164,'\x56\x26\x28\x6e')]))_0x18e68f=!![],console[_0x48ff37(0x1b2,'\x4c\x66\x39\x42')](_0x48ff37(0x18f,'\x45\x63\x76\x56')+_0x48ff37(0x14d,'\x21\x43\x68\x70')+_0x48ff37(0x220,'\x49\x6e\x67\x77')+_0x48ff37(0x1ef,'\x75\x63\x5d\x23')+_0x48ff37(0x192,'\x2a\x65\x72\x37')+_0x48ff37(0x15f,'\x74\x6a\x46\x41')+'\x73\x61\x62\x6c\x65\x64\x20\x66'+'\x6f\x72\x20\x74\x68\x69\x73\x20'+_0x48ff37(0x139,'\x79\x50\x5a\x33')+_0x48ff37(0x13e,'\x36\x42\x6d\x39')+_0x48ff37(0x1d4,'\x44\x5b\x21\x35')+_0x48ff37(0x20e,'\x74\x4d\x5e\x53')+_0x48ff37(0x15a,'\x49\x6e\x67\x77')+'\x52\x5f\x44\x45\x44\x55\x50\x3d'+_0x48ff37(0x16f,'\x4a\x4a\x4f\x44')+_0x48ff37(0x14b,'\x44\x5b\x21\x35'));else{var _0x6a73ad=_0x2da90d[_0x48ff37(0x1f7,'\x4b\x67\x51\x36')](_0x4a759d);return _0xddb248=_0x6a73ad,_0x5a8910=_0x2da90d[_0x48ff37(0x175,'\x53\x75\x76\x55')](_0x156427),_0x6a73ad;}}}else{if(_0x2da90d['\x6d\x6c\x66\x57\x56'](_0x48ff37(0x202,'\x33\x77\x68\x25'),_0x2da90d[_0x48ff37(0x198,'\x77\x46\x67\x69')]))console[_0x48ff37(0x23c,'\x51\x29\x49\x62')](_0x48ff37(0x20c,'\x36\x42\x6d\x39')+_0x48ff37(0x179,'\x25\x72\x6d\x32')+_0x48ff37(0x23a,'\x57\x40\x64\x72')+_0x48ff37(0x1ce,'\x66\x69\x6e\x61')+_0x48ff37(0x1d0,'\x49\x6e\x67\x77')+_0x5ec0e8[_0x48ff37(0x160,'\x57\x40\x64\x72')](-0x1*0x26c3+-0x2513*-0x1+0x1b0,0x2a3*-0x8+0x1bf1+0x611*-0x1));else{var _0x148cae=_0x29c885[_0x48ff37(0x1cd,'\x45\x63\x76\x56')](_0xdd1896[_0x48ff37(0x1c4,'\x35\x5a\x73\x23')])?_0x271d7f[_0x48ff37(0x153,'\x71\x4d\x74\x51')][_0x48ff37(0x1d5,'\x5a\x30\x32\x38')](-0xd3*-0x12+-0x18b6+0x9e0,0x1cde+0x19c6+0x3b*-0xed):[],_0xb6b5f1={};_0xb6b5f1[_0x48ff37(0x174,'\x7a\x69\x50\x71')]=_0x430310[_0x48ff37(0x23f,'\x69\x30\x77\x6d')],_0xb6b5f1[_0x48ff37(0x158,'\x71\x4d\x74\x51')]=_0x2a27e9[_0x48ff37(0x203,'\x66\x69\x6e\x61')],_0xb6b5f1[_0x48ff37(0x136,'\x33\x77\x68\x25')+_0x48ff37(0x1ab,'\x43\x40\x48\x37')]=_0x499da8['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x48ff37(0x143,'\x71\x4d\x74\x51')],_0xb6b5f1[_0x48ff37(0x1fe,'\x66\x69\x6e\x61')]=_0x148cae,_0xb6b5f1['\x74\x6f\x6b\x65\x6e\x4f\x76\x65'+_0x48ff37(0x1df,'\x38\x71\x53\x41')]=_0x51a444,_0x4bde7f[_0x48ff37(0x1e0,'\x26\x5b\x45\x74')](_0xb6b5f1);}}return[];}}function _0x4fe0f2(_0x1c87cc){var _0x7b07ea=_0x16cc23,_0x60a94b={'\x62\x4c\x4d\x41\x68':function(_0x1ec1f9){return _0x1ec1f9();},'\x7a\x6d\x6e\x68\x5a':function(_0x1cb3c0,_0x5d44ad){return _0x1cb3c0-_0x5d44ad;},'\x65\x77\x42\x42\x52':function(_0x53228a){return _0x53228a();}};if(!_0x4ebfe1())return[];var _0x336fc4=_0x1c87cc&&Number[_0x7b07ea(0x239,'\x35\x5d\x30\x44')](_0x1c87cc[_0x7b07ea(0x1db,'\x47\x21\x6a\x74')])?_0x1c87cc[_0x7b07ea(0x1e9,'\x44\x5b\x21\x35')]:_0x60a94b[_0x7b07ea(0x1e2,'\x73\x73\x78\x44')](_0x415559),_0x5b514b=_0x60a94b[_0x7b07ea(0x209,'\x77\x46\x67\x69')](_0x337567(),_0x25cdcf);if(_0x20ec44&&_0x5b514b<_0x336fc4)return _0x20ec44;if(_0x4a340d)return _0x20ec44||[];_0x4a340d=!![];try{var _0x4b8c35=_0x60a94b[_0x7b07ea(0x1ca,'\x49\x6e\x67\x77')](_0x530ec2);return _0x20ec44=_0x4b8c35,_0x25cdcf=_0x60a94b[_0x7b07ea(0x250,'\x38\x71\x53\x41')](_0x337567),_0x4b8c35;}finally{_0x4a340d=![];}}function _0x3d7db8(_0x4116f1){var _0x1cedce=_0x16cc23,_0x29ea05={'\x4d\x6a\x5a\x53\x66':function(_0x36b6c2){return _0x36b6c2();},'\x68\x50\x56\x63\x64':_0x1cedce(0x242,'\x5a\x30\x32\x38')+_0x1cedce(0x22e,'\x74\x4d\x5e\x53'),'\x4e\x6b\x76\x53\x4a':function(_0x504073,_0x5838e4){return _0x504073===_0x5838e4;},'\x4e\x4b\x47\x70\x44':_0x1cedce(0x23b,'\x36\x42\x6d\x39')+_0x1cedce(0x15e,'\x33\x77\x68\x25'),'\x70\x58\x41\x73\x62':_0x1cedce(0x259,'\x52\x33\x4f\x36')+_0x1cedce(0x17e,'\x4f\x36\x5a\x76'),'\x4f\x4f\x61\x6d\x55':function(_0x3cdb5e,_0x5e37d0){return _0x3cdb5e/_0x5e37d0;},'\x65\x54\x4a\x46\x45':function(_0x1b3802,_0x3d8112){return _0x1b3802>_0x3d8112;},'\x71\x6f\x51\x45\x54':function(_0x27a05d,_0x42ed59){return _0x27a05d||_0x42ed59;},'\x42\x65\x4d\x47\x56':_0x1cedce(0x1ac,'\x51\x29\x49\x62')+_0x1cedce(0x13f,'\x63\x30\x6b\x32')};if(!_0x29ea05[_0x1cedce(0x24f,'\x36\x42\x6d\x39')](_0x4ebfe1))return{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x29ea05['\x68\x50\x56\x63\x64']};var _0x4952f0=_0x4116f1&&Array[_0x1cedce(0x1d2,'\x36\x42\x6d\x39')](_0x4116f1[_0x1cedce(0x246,'\x25\x72\x6d\x32')+'\x69\x6c\x65\x73'])?_0x4116f1[_0x1cedce(0x244,'\x57\x40\x64\x72')+_0x1cedce(0x190,'\x30\x4f\x4a\x65')]:[];if(_0x29ea05[_0x1cedce(0x1f3,'\x53\x75\x76\x55')](_0x4952f0[_0x1cedce(0x226,'\x4b\x67\x51\x36')],0x2183+-0xbf4+-0x1*0x158f))return{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x29ea05[_0x1cedce(0x1be,'\x63\x70\x21\x29')]};var _0x316fd9=_0x4116f1&&Array[_0x1cedce(0x1cb,'\x57\x40\x64\x72')](_0x4116f1['\x70\x72\x73'])?_0x4116f1[_0x1cedce(0x157,'\x36\x42\x6d\x39')]:_0x29ea05['\x4d\x6a\x5a\x53\x66'](_0x4fe0f2);if(_0x29ea05[_0x1cedce(0x163,'\x35\x5d\x30\x44')](_0x316fd9[_0x1cedce(0x1a1,'\x37\x37\x66\x31')],0x82c+-0xe71*0x1+0x217*0x3))return{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x29ea05[_0x1cedce(0x19e,'\x4a\x4a\x4f\x44')]};var _0x2df4f7=new Set(_0x4952f0[_0x1cedce(0x24b,'\x44\x5b\x21\x35')](String)),_0x409f3a=null;for(var _0x3f4734=0x1377+-0x12*-0x182+-0xf89*0x3;_0x3f4734<_0x316fd9[_0x1cedce(0x152,'\x56\x26\x28\x6e')];_0x3f4734++){var _0x304b61=_0x316fd9[_0x3f4734];if(!_0x304b61||!Array['\x69\x73\x41\x72\x72\x61\x79'](_0x304b61[_0x1cedce(0x171,'\x76\x5b\x54\x24')])||_0x29ea05[_0x1cedce(0x15d,'\x21\x43\x68\x70')](_0x304b61[_0x1cedce(0x243,'\x4b\x4a\x35\x31')][_0x1cedce(0x165,'\x36\x42\x6d\x39')],-0x2ad+0x33*-0x59+0x1468))continue;var _0x4bd536=new Set(_0x304b61[_0x1cedce(0x1b1,'\x45\x63\x76\x56')][_0x1cedce(0x161,'\x73\x73\x78\x44')](String)),_0x525dfa=[];_0x2df4f7[_0x1cedce(0x227,'\x46\x73\x37\x55')](function(_0x558eda){var _0x267e75=_0x1cedce;if(_0x4bd536[_0x267e75(0x19a,'\x4f\x36\x5a\x76')](_0x558eda))_0x525dfa[_0x267e75(0x234,'\x49\x6e\x67\x77')](_0x558eda);});if(_0x29ea05['\x4e\x6b\x76\x53\x4a'](_0x525dfa[_0x1cedce(0x204,'\x66\x69\x6e\x61')],0x73*0x8+0x1*-0xd+0x1*-0x38b))continue;var _0x8b2f48=_0x29ea05[_0x1cedce(0x249,'\x66\x69\x6e\x61')](_0x525dfa[_0x1cedce(0x226,'\x4b\x67\x51\x36')],_0x4952f0[_0x1cedce(0x138,'\x63\x30\x6b\x32')]);if(!_0x409f3a||_0x29ea05['\x65\x54\x4a\x46\x45'](_0x8b2f48,_0x409f3a['\x6f\x76\x65\x72\x6c\x61\x70\x52'+_0x1cedce(0x1dc,'\x5a\x30\x32\x38')])){var _0x46a686={};_0x46a686[_0x1cedce(0x23d,'\x30\x4f\x4a\x65')]=!![],_0x46a686[_0x1cedce(0x25a,'\x56\x26\x28\x6e')]=_0x304b61[_0x1cedce(0x1a6,'\x49\x6e\x67\x77')],_0x46a686[_0x1cedce(0x187,'\x55\x30\x55\x4c')]=_0x304b61['\x74\x69\x74\x6c\x65'],_0x46a686[_0x1cedce(0x20d,'\x74\x6a\x46\x41')+_0x1cedce(0x23e,'\x75\x63\x5d\x23')]=_0x304b61[_0x1cedce(0x219,'\x55\x30\x55\x4c')+_0x1cedce(0x1e7,'\x4b\x4a\x35\x31')],_0x46a686[_0x1cedce(0x1a5,'\x52\x33\x4f\x36')+_0x1cedce(0x235,'\x7a\x4d\x21\x48')]=_0x8b2f48,_0x46a686[_0x1cedce(0x1f5,'\x71\x4d\x74\x51')+_0x1cedce(0x21b,'\x7a\x69\x50\x71')]=_0x525dfa,_0x409f3a=_0x46a686;}}return _0x29ea05[_0x1cedce(0x172,'\x74\x4d\x5e\x53')](_0x409f3a,{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x29ea05['\x42\x65\x4d\x47\x56']});}function _0x2ea623(_0x322fe8){var _0x43b6b7=_0x16cc23,_0x3150f3={'\x6e\x53\x56\x6c\x79':_0x43b6b7(0x24e,'\x4c\x66\x39\x42'),'\x6c\x44\x64\x62\x47':function(_0x9c3f3c,_0x25f413){return _0x9c3f3c||_0x25f413;},'\x6b\x64\x55\x4e\x74':function(_0x1a96b8,_0x39ec5e){return _0x1a96b8===_0x39ec5e;},'\x5a\x51\x6c\x4a\x52':_0x43b6b7(0x14e,'\x69\x30\x77\x6d'),'\x43\x52\x76\x7a\x61':function(_0xf64549,_0xc81f7f){return _0xf64549===_0xc81f7f;},'\x46\x77\x52\x4c\x6a':_0x43b6b7(0x1b9,'\x78\x51\x56\x71'),'\x4e\x52\x66\x71\x61':function(_0x109356,_0x4d7c15){return _0x109356-_0x4d7c15;},'\x74\x6c\x6a\x76\x6f':function(_0x31d55b){return _0x31d55b();},'\x4f\x68\x6f\x49\x70':function(_0xfbaa6c,_0xaf06c5){return _0xfbaa6c===_0xaf06c5;},'\x63\x77\x51\x4d\x4d':function(_0x9b6fa7,_0x5204d0){return _0x9b6fa7===_0x5204d0;},'\x44\x56\x53\x55\x54':function(_0x1ca8cf,_0x5b6531){return _0x1ca8cf<_0x5b6531;},'\x4e\x6c\x46\x41\x77':_0x43b6b7(0x189,'\x44\x5b\x21\x35'),'\x4e\x50\x77\x52\x52':function(_0x1efef6,_0xa5c62a){return _0x1efef6(_0xa5c62a);},'\x70\x67\x69\x53\x68':function(_0x5c9eb3,_0x5f0805){return _0x5c9eb3(_0x5f0805);},'\x4f\x62\x6c\x49\x65':function(_0x30df23,_0x47a119){return _0x30df23/_0x47a119;}};if(!_0x3150f3[_0x43b6b7(0x221,'\x63\x70\x21\x29')](_0x4ebfe1))return[];var _0x11aca3=_0x322fe8&&Array[_0x43b6b7(0x1cd,'\x45\x63\x76\x56')](_0x322fe8[_0x43b6b7(0x212,'\x74\x4d\x5e\x53')])?_0x322fe8[_0x43b6b7(0x1a4,'\x4f\x69\x6c\x5e')]:[];if(_0x3150f3[_0x43b6b7(0x1f9,'\x41\x5e\x43\x71')](_0x11aca3[_0x43b6b7(0x17d,'\x51\x29\x49\x62')],0x1672+0x14b3+-0x2b25))return[];var _0x1c971e=_0x322fe8&&Array[_0x43b6b7(0x18d,'\x7a\x69\x50\x71')](_0x322fe8[_0x43b6b7(0x22c,'\x69\x30\x77\x6d')])?_0x322fe8[_0x43b6b7(0x22b,'\x4b\x4a\x35\x31')]:_0x3150f3[_0x43b6b7(0x1b6,'\x53\x75\x76\x55')](_0x4fe0f2);if(_0x3150f3['\x63\x77\x51\x4d\x4d'](_0x1c971e[_0x43b6b7(0x204,'\x66\x69\x6e\x61')],0x13c7+0x2397+0x2ea*-0x13))return[];var _0x7e7d3f=_0x322fe8&&Number[_0x43b6b7(0x178,'\x33\x77\x68\x25')](_0x322fe8[_0x43b6b7(0x1c5,'\x4c\x66\x39\x42')+'\x64'])?_0x322fe8[_0x43b6b7(0x149,'\x74\x6a\x46\x41')+'\x64']:0x1*0xf2d+0x1*0x206b+-0xbe6*0x4+0.5;function _0x4541e0(_0x59a020){var _0x1a0dda=_0x43b6b7,_0x21a6fe={};_0x21a6fe[_0x1a0dda(0x1fb,'\x56\x26\x28\x6e')]=_0x3150f3['\x6e\x53\x56\x6c\x79'],_0x21a6fe[_0x1a0dda(0x20a,'\x64\x6f\x75\x6d')]=function(_0x40d4c7,_0x33fc77){return _0x40d4c7>=_0x33fc77;};var _0x577eef=_0x21a6fe;return String(_0x3150f3[_0x1a0dda(0x16a,'\x63\x70\x21\x29')](_0x59a020,''))[_0x1a0dda(0x18c,'\x44\x5b\x21\x35')+_0x1a0dda(0x205,'\x47\x21\x6a\x74')]()[_0x1a0dda(0x183,'\x77\x46\x67\x69')](/[^a-z0-9]+/g,'\x20')['\x73\x70\x6c\x69\x74'](/\s+/)[_0x1a0dda(0x156,'\x63\x70\x21\x29')](function(_0x23421a){var _0x4121ea=_0x1a0dda;if(_0x577eef[_0x4121ea(0x146,'\x35\x5d\x30\x44')]!==_0x4121ea(0x245,'\x69\x30\x77\x6d'))return _0x577eef[_0x4121ea(0x228,'\x45\x63\x76\x56')](_0x23421a[_0x4121ea(0x229,'\x57\x40\x64\x72')],-0x13c7+-0x1*-0x2655+-0x128b);else{var _0x3e9258={};_0x3e9258[_0x4121ea(0x16c,'\x71\x4d\x74\x51')]=!![],_0x3e9258[_0x4121ea(0x170,'\x66\x69\x6e\x61')]=_0x5ab122[_0x4121ea(0x1cf,'\x73\x73\x78\x44')],_0x3e9258[_0x4121ea(0x1da,'\x33\x77\x68\x25')]=_0x58e431['\x74\x69\x74\x6c\x65'],_0x3e9258[_0x4121ea(0x224,'\x56\x26\x28\x6e')+'\x61\x6d\x65']=_0x521dc6['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x4121ea(0x238,'\x37\x37\x66\x31')],_0x3e9258[_0x4121ea(0x24c,'\x4b\x4a\x35\x31')+_0x4121ea(0x222,'\x74\x4d\x5e\x53')]=_0x883f8d,_0x3e9258[_0x4121ea(0x162,'\x4b\x67\x51\x36')+_0x4121ea(0x1e6,'\x74\x6a\x46\x41')]=_0x260332,_0x3a1751=_0x3e9258;}});}var _0x311f03=new Set();for(var _0x187801=0x20aa+-0x2c5*0x1+-0x1de5*0x1;_0x3150f3[_0x43b6b7(0x134,'\x51\x29\x49\x62')](_0x187801,_0x11aca3[_0x43b6b7(0x1e5,'\x64\x6f\x75\x6d')]);_0x187801++){_0x3150f3['\x6b\x64\x55\x4e\x74'](_0x3150f3[_0x43b6b7(0x223,'\x74\x4d\x5e\x53')],_0x3150f3['\x4e\x6c\x46\x41\x77'])?_0x4541e0(_0x11aca3[_0x187801])[_0x43b6b7(0x15b,'\x4f\x36\x5a\x76')](function(_0x58a8fb){var _0x31c5d2=_0x43b6b7;_0x311f03[_0x31c5d2(0x1af,'\x5a\x30\x32\x38')](_0x58a8fb);}):_0x2ff818[_0x43b6b7(0x1b4,'\x7a\x69\x50\x71')](_0x4238e3);}if(_0x3150f3['\x4f\x68\x6f\x49\x70'](_0x311f03[_0x43b6b7(0x137,'\x63\x70\x21\x29')],-0x242*-0x7+0xf1*0x2+-0x1*0x11b0))return[];var _0x3f1b44=[];for(var _0x12e903=0x1*0x281+-0x1711*0x1+-0x7*-0x2f0;_0x3150f3[_0x43b6b7(0x1a3,'\x63\x70\x21\x29')](_0x12e903,_0x1c971e[_0x43b6b7(0x152,'\x56\x26\x28\x6e')]);_0x12e903++){var _0x22f374=_0x1c971e[_0x12e903];if(!_0x22f374)continue;var _0x21a4ef=new Set();_0x3150f3[_0x43b6b7(0x145,'\x35\x5d\x30\x44')](_0x4541e0,_0x22f374[_0x43b6b7(0x257,'\x76\x5b\x54\x24')])[_0x43b6b7(0x1ed,'\x33\x77\x68\x25')](function(_0x205f7d){var _0x17f5db=_0x43b6b7;_0x21a4ef[_0x17f5db(0x1f6,'\x4b\x67\x51\x36')](_0x205f7d);}),_0x3150f3[_0x43b6b7(0x1e3,'\x79\x50\x5a\x33')](_0x4541e0,_0x22f374[_0x43b6b7(0x20f,'\x66\x69\x6e\x61')+_0x43b6b7(0x182,'\x35\x5d\x30\x44')])[_0x43b6b7(0x22d,'\x7a\x4d\x21\x48')](function(_0x3691c1){var _0x303c4c=_0x43b6b7;_0x21a4ef[_0x303c4c(0x1c3,'\x4c\x66\x39\x42')](_0x3691c1);});if(_0x3150f3[_0x43b6b7(0x213,'\x45\x63\x76\x56')](_0x21a4ef[_0x43b6b7(0x211,'\x4b\x4a\x35\x31')],-0x144b+-0x1*-0xfe0+0xd*0x57))continue;var _0x276ebc=-0x4*-0x977+0x13df+-0x1*0x39bb;_0x311f03[_0x43b6b7(0x1a7,'\x37\x37\x66\x31')](function(_0x9ecdf3){var _0x54488e=_0x43b6b7,_0x124181={};_0x124181[_0x54488e(0x230,'\x43\x40\x48\x37')]=function(_0x465c8d,_0x5d5de2){return _0x465c8d-_0x5d5de2;};var _0x20f62f=_0x124181;if(_0x3150f3[_0x54488e(0x169,'\x49\x6e\x67\x77')](_0x54488e(0x18a,'\x51\x29\x49\x62'),_0x3150f3[_0x54488e(0x133,'\x64\x6f\x75\x6d')]))return _0x20f62f[_0x54488e(0x184,'\x5a\x30\x32\x38')](_0x41b058[_0x54488e(0x1b3,'\x33\x77\x68\x25')+_0x54488e(0x155,'\x45\x63\x76\x56')],_0x2fc115[_0x54488e(0x1d3,'\x26\x5b\x45\x74')+_0x54488e(0x1f4,'\x4b\x67\x51\x36')]);else{if(_0x21a4ef[_0x54488e(0x21f,'\x2a\x65\x72\x37')](_0x9ecdf3))_0x276ebc++;}});var _0x55b6f4=_0x3150f3[_0x43b6b7(0x210,'\x75\x63\x5d\x23')](_0x276ebc,_0x311f03[_0x43b6b7(0x19d,'\x53\x75\x76\x55')]);if(_0x55b6f4>=_0x7e7d3f){var _0xbf3258=Array[_0x43b6b7(0x207,'\x49\x6e\x67\x77')](_0x22f374[_0x43b6b7(0x1c4,'\x35\x5a\x73\x23')])?_0x22f374[_0x43b6b7(0x200,'\x41\x5e\x43\x71')]['\x73\x6c\x69\x63\x65'](-0x22c0+0x1372+-0x3*-0x51a,-0x4e0+0xe75+-0x990):[],_0x13feef={};_0x13feef['\x6e\x75\x6d\x62\x65\x72']=_0x22f374[_0x43b6b7(0x17b,'\x21\x43\x68\x70')],_0x13feef[_0x43b6b7(0x191,'\x52\x33\x4f\x36')]=_0x22f374[_0x43b6b7(0x140,'\x33\x77\x68\x25')],_0x13feef['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x43b6b7(0x1fa,'\x77\x46\x67\x69')]=_0x22f374[_0x43b6b7(0x233,'\x35\x5d\x30\x44')+_0x43b6b7(0x241,'\x49\x6e\x67\x77')],_0x13feef[_0x43b6b7(0x216,'\x50\x6b\x43\x54')]=_0xbf3258,_0x13feef['\x74\x6f\x6b\x65\x6e\x4f\x76\x65'+_0x43b6b7(0x173,'\x74\x4d\x5e\x53')]=_0x55b6f4,_0x3f1b44[_0x43b6b7(0x154,'\x5a\x30\x32\x38')](_0x13feef);}}return _0x3f1b44[_0x43b6b7(0x21c,'\x49\x6e\x67\x77')](function(_0xd2cdb8,_0x34bdc1){var _0x1c8980=_0x43b6b7;if(_0x3150f3[_0x1c8980(0x13a,'\x4f\x69\x6c\x5e')](_0x3150f3['\x46\x77\x52\x4c\x6a'],_0x1c8980(0x19f,'\x4f\x69\x6c\x5e')))return _0x3150f3[_0x1c8980(0x225,'\x63\x30\x6b\x32')](_0x34bdc1[_0x1c8980(0x176,'\x57\x40\x64\x72')+_0x1c8980(0x22a,'\x43\x40\x48\x37')],_0xd2cdb8['\x74\x6f\x6b\x65\x6e\x4f\x76\x65'+_0x1c8980(0x1a2,'\x5a\x30\x32\x38')]);else _0xdc7018[_0x1c8980(0x24a,'\x2a\x65\x72\x37')](_0x59712b);}),_0x3f1b44[_0x43b6b7(0x17f,'\x77\x46\x67\x69')](0x1b1c+0x2*0xa1a+-0x2f50,-0x9c+0x8*0x277+-0x1319);}function _0x26b52c(){_0x20ec44=null,_0x25cdcf=-0x384+0x4*-0x6c5+-0x164*-0x16,_0x4a340d=null,_0x18e68f=![];}var _0x54ce50={};_0x54ce50[_0x16cc23(0x18e,'\x41\x5e\x43\x71')+'\x52\x73']=_0x4fe0f2,_0x54ce50[_0x16cc23(0x197,'\x66\x69\x6e\x61')+_0x16cc23(0x13d,'\x49\x6e\x67\x77')]=_0x3d7db8,_0x54ce50['\x66\x69\x6e\x64\x53\x69\x67\x6e'+_0x16cc23(0x14f,'\x71\x4d\x74\x51')]=_0x2ea623,_0x54ce50['\x5f\x72\x65\x73\x65\x74\x46\x6f'+'\x72\x54\x65\x73\x74\x69\x6e\x67']=_0x26b52c,module[_0x16cc23(0x196,'\x35\x5a\x73\x23')]=_0x54ce50;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// openPRRegistry — fetch and cache the current repo's open PR list, and decide
|
|
5
|
+
// whether a daemon-driven cycle's planned changes overlap with any of them.
|
|
6
|
+
//
|
|
7
|
+
// Why this exists: evolver --loop has been observed to independently
|
|
8
|
+
// re-implement work that's already in flight on an open PR (PR #38's a2a
|
|
9
|
+
// integrity check, PR #43's rollback safety, both rebuilt from scratch by
|
|
10
|
+
// the daemon). This dirties the working tree and triggers downstream
|
|
11
|
+
// rollback risk (see feedback_evolver_solidify_rollback). The fix: at
|
|
12
|
+
// solidify time, before the cycle commits, check whether the changed files
|
|
13
|
+
// substantially overlap with an open PR — if yes, rollback this cycle.
|
|
14
|
+
//
|
|
15
|
+
// The module is graceful: if `gh` is missing, unauthenticated, or the API
|
|
16
|
+
// errors, getOpenPRs returns [] and findOverlap returns { overlap: false }.
|
|
17
|
+
// EVOLVE_OPEN_PR_DEDUP=0 short-circuits the whole feature.
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
|
|
20
|
+
// Note: do not destructure execSync at module load — tests stub
|
|
21
|
+
// child_process.execSync at call time via the live module reference.
|
|
22
|
+
const { envInt } = require('../config');
|
|
23
|
+
|
|
24
|
+
const MAX_EXEC_BUFFER = 10 * 1024 * 1024;
|
|
25
|
+
const GH_TIMEOUT_MS = 5000;
|
|
26
|
+
|
|
27
|
+
let _cache = null;
|
|
28
|
+
let _cacheAt = 0;
|
|
29
|
+
let _inflight = null;
|
|
30
|
+
let _ghMissingWarned = false;
|
|
31
|
+
|
|
32
|
+
function _now() { return Date.now(); }
|
|
33
|
+
|
|
34
|
+
function _isFeatureEnabled() {
|
|
35
|
+
return String(process.env.EVOLVE_OPEN_PR_DEDUP || '1') !== '0';
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function _getTtlMs() {
|
|
39
|
+
return envInt('EVOLVE_OPEN_PR_TTL_MS', 60000);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Run `gh pr list ...` and parse JSON. Returns [] on any failure.
|
|
43
|
+
function _fetchOpenPRsSync() {
|
|
44
|
+
try {
|
|
45
|
+
const raw = require('child_process').execSync('gh pr list --state=open --json number,title,headRefName,files --limit 50', {
|
|
46
|
+
encoding: 'utf8',
|
|
47
|
+
timeout: GH_TIMEOUT_MS,
|
|
48
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
49
|
+
maxBuffer: MAX_EXEC_BUFFER,
|
|
50
|
+
});
|
|
51
|
+
const arr = JSON.parse(raw || '[]');
|
|
52
|
+
if (!Array.isArray(arr)) return [];
|
|
53
|
+
return arr.map(function (pr) {
|
|
54
|
+
return {
|
|
55
|
+
number: pr.number,
|
|
56
|
+
title: String(pr.title || ''),
|
|
57
|
+
headRefName: String(pr.headRefName || ''),
|
|
58
|
+
files: Array.isArray(pr.files) ? pr.files.map(function (f) { return String(f.path || ''); }).filter(Boolean) : [],
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
} catch (e) {
|
|
62
|
+
var msg = e && e.message ? String(e.message) : '';
|
|
63
|
+
if (/not found|ENOENT|command not found/i.test(msg)) {
|
|
64
|
+
if (!_ghMissingWarned) {
|
|
65
|
+
_ghMissingWarned = true;
|
|
66
|
+
console.warn('[OpenPR] gh CLI not available — open-PR dedup disabled for this process. Install gh or set EVOLVE_OPEN_PR_DEDUP=0 to silence.');
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
console.warn('[OpenPR] gh pr list failed (non-fatal): ' + msg.slice(0, 200));
|
|
70
|
+
}
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Public: get the current open-PR list, cached for EVOLVE_OPEN_PR_TTL_MS.
|
|
76
|
+
// Concurrent callers within the same TTL window share the same fetch.
|
|
77
|
+
function getOpenPRs(opts) {
|
|
78
|
+
if (!_isFeatureEnabled()) return [];
|
|
79
|
+
var ttlMs = (opts && Number.isFinite(opts.ttlMs)) ? opts.ttlMs : _getTtlMs();
|
|
80
|
+
var age = _now() - _cacheAt;
|
|
81
|
+
if (_cache && age < ttlMs) return _cache;
|
|
82
|
+
// Single-flight: if a fetch is already in progress, return the prior cache
|
|
83
|
+
// (or []) rather than spawning a second gh call.
|
|
84
|
+
if (_inflight) return _cache || [];
|
|
85
|
+
_inflight = true;
|
|
86
|
+
try {
|
|
87
|
+
var fresh = _fetchOpenPRsSync();
|
|
88
|
+
_cache = fresh;
|
|
89
|
+
_cacheAt = _now();
|
|
90
|
+
return fresh;
|
|
91
|
+
} finally {
|
|
92
|
+
_inflight = false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Compute overlap between this cycle's changed files and each open PR's files.
|
|
97
|
+
// Returns the strongest overlap by ratio. Ratio = |intersection| / |changedFiles|.
|
|
98
|
+
//
|
|
99
|
+
// Why we use changedFiles as the denominator (not the PR's files): we're asking
|
|
100
|
+
// "is this cycle re-doing work that the PR is already doing?" — the right
|
|
101
|
+
// question is "what fraction of MY changes are also in their PR?". If the daemon
|
|
102
|
+
// changes 4 files and 3 are also in PR #38's 11-file diff, that's 0.75 overlap
|
|
103
|
+
// from the daemon's POV (re-doing most of its own work) even though it's only
|
|
104
|
+
// 0.27 from the PR's POV.
|
|
105
|
+
function findOverlap(opts) {
|
|
106
|
+
if (!_isFeatureEnabled()) return { overlap: false, reason: 'feature_disabled' };
|
|
107
|
+
var changedFiles = (opts && Array.isArray(opts.changedFiles)) ? opts.changedFiles : [];
|
|
108
|
+
if (changedFiles.length === 0) return { overlap: false, reason: 'no_changed_files' };
|
|
109
|
+
var prs = (opts && Array.isArray(opts.prs)) ? opts.prs : getOpenPRs();
|
|
110
|
+
if (prs.length === 0) return { overlap: false, reason: 'no_open_prs' };
|
|
111
|
+
|
|
112
|
+
var changedSet = new Set(changedFiles.map(String));
|
|
113
|
+
var best = null;
|
|
114
|
+
for (var i = 0; i < prs.length; i++) {
|
|
115
|
+
var pr = prs[i];
|
|
116
|
+
if (!pr || !Array.isArray(pr.files) || pr.files.length === 0) continue;
|
|
117
|
+
var prSet = new Set(pr.files.map(String));
|
|
118
|
+
var shared = [];
|
|
119
|
+
changedSet.forEach(function (f) { if (prSet.has(f)) shared.push(f); });
|
|
120
|
+
if (shared.length === 0) continue;
|
|
121
|
+
var ratio = shared.length / changedFiles.length;
|
|
122
|
+
if (!best || ratio > best.overlapRatio) {
|
|
123
|
+
best = {
|
|
124
|
+
overlap: true,
|
|
125
|
+
prNumber: pr.number,
|
|
126
|
+
prTitle: pr.title,
|
|
127
|
+
headRefName: pr.headRefName,
|
|
128
|
+
overlapRatio: ratio,
|
|
129
|
+
sharedFiles: shared,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return best || { overlap: false, reason: 'no_intersection' };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Token-overlap version for the select-stage hint (no file paths available).
|
|
137
|
+
// Compares a Gene's signals_match against a PR's title + headRefName tokens.
|
|
138
|
+
// Returns the top-N matches with ratio >= threshold (default 0.5).
|
|
139
|
+
function findSignalHints(opts) {
|
|
140
|
+
if (!_isFeatureEnabled()) return [];
|
|
141
|
+
var signals = (opts && Array.isArray(opts.signals)) ? opts.signals : [];
|
|
142
|
+
if (signals.length === 0) return [];
|
|
143
|
+
var prs = (opts && Array.isArray(opts.prs)) ? opts.prs : getOpenPRs();
|
|
144
|
+
if (prs.length === 0) return [];
|
|
145
|
+
var threshold = (opts && Number.isFinite(opts.threshold)) ? opts.threshold : 0.5;
|
|
146
|
+
|
|
147
|
+
function tokenize(s) {
|
|
148
|
+
return String(s || '')
|
|
149
|
+
.toLowerCase()
|
|
150
|
+
.replace(/[^a-z0-9]+/g, ' ')
|
|
151
|
+
.split(/\s+/)
|
|
152
|
+
.filter(function (t) { return t.length >= 3; });
|
|
153
|
+
}
|
|
154
|
+
var sigTokens = new Set();
|
|
155
|
+
for (var i = 0; i < signals.length; i++) {
|
|
156
|
+
tokenize(signals[i]).forEach(function (t) { sigTokens.add(t); });
|
|
157
|
+
}
|
|
158
|
+
if (sigTokens.size === 0) return [];
|
|
159
|
+
|
|
160
|
+
var hits = [];
|
|
161
|
+
for (var j = 0; j < prs.length; j++) {
|
|
162
|
+
var pr = prs[j];
|
|
163
|
+
if (!pr) continue;
|
|
164
|
+
var prTokens = new Set();
|
|
165
|
+
tokenize(pr.title).forEach(function (t) { prTokens.add(t); });
|
|
166
|
+
tokenize(pr.headRefName).forEach(function (t) { prTokens.add(t); });
|
|
167
|
+
if (prTokens.size === 0) continue;
|
|
168
|
+
var common = 0;
|
|
169
|
+
sigTokens.forEach(function (t) { if (prTokens.has(t)) common++; });
|
|
170
|
+
var ratio = common / sigTokens.size;
|
|
171
|
+
if (ratio >= threshold) {
|
|
172
|
+
// Guard against pr.files being missing/null — getOpenPRs always
|
|
173
|
+
// populates it, but tests and external callers may pass partial
|
|
174
|
+
// PR objects. Without this guard pr.files.slice would throw a
|
|
175
|
+
// TypeError, the try/catch in select.js would swallow it, and we
|
|
176
|
+
// would silently lose ALL hits for that invocation rather than
|
|
177
|
+
// just the malformed PR. (Bugbot review on PR #50.)
|
|
178
|
+
var fileSample = Array.isArray(pr.files) ? pr.files.slice(0, 5) : [];
|
|
179
|
+
hits.push({
|
|
180
|
+
number: pr.number,
|
|
181
|
+
title: pr.title,
|
|
182
|
+
headRefName: pr.headRefName,
|
|
183
|
+
files: fileSample,
|
|
184
|
+
tokenOverlap: ratio,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
hits.sort(function (a, b) { return b.tokenOverlap - a.tokenOverlap; });
|
|
189
|
+
return hits.slice(0, 3);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Internal: reset cache for tests.
|
|
193
|
+
function _resetForTesting() {
|
|
194
|
+
_cache = null;
|
|
195
|
+
_cacheAt = 0;
|
|
196
|
+
_inflight = null;
|
|
197
|
+
_ghMissingWarned = false;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
module.exports = {
|
|
201
|
+
getOpenPRs,
|
|
202
|
+
findOverlap,
|
|
203
|
+
findSignalHints,
|
|
204
|
+
_resetForTesting,
|
|
205
|
+
};
|