@evomap/evolver 1.91.1 → 1.92.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/index.js +150 -71
- package/package.json +2 -1
- package/src/canonicalIdentityLock.js +455 -0
- package/src/evolve/guards.js +1 -1
- package/src/evolve/pipeline/collect.js +1 -1
- package/src/evolve/pipeline/dispatch.js +1 -1
- package/src/evolve/pipeline/enrich.js +1 -1
- package/src/evolve/pipeline/hub.js +1 -1
- package/src/evolve/pipeline/select.js +1 -1
- package/src/evolve/pipeline/signals.js +1 -1
- package/src/evolve/utils.js +1 -1
- package/src/evolve.js +1 -1
- package/src/gep/a2aProtocol.js +1 -1
- package/src/gep/antiAbuseTelemetry.js +1 -1
- package/src/gep/assetStore.js +56 -11
- package/src/gep/autoDistillConv.js +1 -1
- package/src/gep/autoDistillLlm.js +1 -1
- package/src/gep/candidateEval.js +1 -1
- package/src/gep/candidates.js +1 -1
- package/src/gep/contentHash.js +1 -1
- package/src/gep/conversationDistiller.js +1 -1
- package/src/gep/conversationSniffer.js +1 -1
- package/src/gep/crypto.js +1 -1
- package/src/gep/curriculum.js +1 -1
- package/src/gep/deviceId.js +1 -1
- package/src/gep/envFingerprint.js +1 -1
- package/src/gep/epigenetics.js +1 -1
- package/src/gep/execBridge.js +1 -1
- package/src/gep/explore.js +1 -1
- package/src/gep/hash.js +1 -1
- package/src/gep/hubFetch.js +1 -1
- package/src/gep/hubReview.js +1 -1
- package/src/gep/hubSearch.js +1 -1
- package/src/gep/hubVerify.js +1 -1
- package/src/gep/learningSignals.js +1 -1
- package/src/gep/memoryGraph.js +1 -1
- package/src/gep/memoryGraphAdapter.js +1 -1
- package/src/gep/mutation.js +1 -1
- package/src/gep/narrativeMemory.js +1 -1
- package/src/gep/openPRRegistry.js +1 -1
- package/src/gep/personality.js +1 -1
- package/src/gep/policyCheck.js +1 -1
- package/src/gep/prompt.js +1 -1
- package/src/gep/recallInject.js +1 -1
- package/src/gep/recallVerifier.js +1 -1
- package/src/gep/reflection.js +1 -1
- package/src/gep/savingsCore.js +1 -1
- package/src/gep/schemas/gene.js +2 -0
- package/src/gep/selector.js +1 -1
- package/src/gep/skillDistiller.js +1 -1
- package/src/gep/solidify.js +1 -1
- package/src/gep/strategy.js +1 -1
- package/src/gep/syncAsset.js +1 -0
- package/src/gep/tokenSavings.js +1 -1
- package/src/gep/trajectoryExport.js +1 -1
- package/src/gep/workspaceKeychain.js +1 -1
- package/src/proxy/extensions/traceControl.js +1 -1
- package/src/proxy/index.js +136 -8
- package/src/proxy/inject.js +1 -1
- package/src/proxy/lifecycle/manager.js +279 -18
- package/src/proxy/mailbox/state.js +60 -29
- package/src/proxy/trace/extractor.js +1 -1
- package/src/proxy/trace/usage.js +1 -1
- package/src/webui/client/clientJs/bootstrap.js +6 -0
- package/src/webui/client/clientJs/github.js +225 -0
- package/src/webui/client/clientJs/i18n.js +14 -0
- package/src/webui/client/clientJs/index.js +3 -0
- package/src/webui/client/clientJs/pipelines.js +3 -1
- package/src/webui/client/indexHtml.js +10 -0
- package/src/webui/client/stylesCss.js +61 -0
- package/src/webui/observer/github.js +340 -0
- package/src/webui/observer/index.js +4 -0
- package/src/webui/server/routes.js +11 -0
package/src/proxy/inject.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x5af133=_0x56a0;(function(_0xa26fb6,_0xbb57f7){const _0x3051bc=_0x56a0,_0x4867ca=_0xa26fb6();while(!![]){try{const _0x958a84=parseInt(_0x3051bc(0x1b1,'\x42\x35\x68\x34'))/(0x2276+0x138c+-0x3601)+-parseInt(_0x3051bc(0x1c4,'\x57\x68\x49\x73'))/(0x16*-0x14f+0x1f*-0x8c+0x3d0*0xc)*(-parseInt(_0x3051bc(0x1ca,'\x38\x50\x45\x67'))/(-0x9b*-0x3d+-0x2307+-0x1e5))+-parseInt(_0x3051bc(0x1af,'\x79\x4e\x55\x59'))/(0x1ac*0xb+-0x58a+-0x1*0xcd6)+parseInt(_0x3051bc(0x1bd,'\x62\x36\x4b\x5e'))/(-0x37*0xb5+-0x114f*0x1+0x3837)*(-parseInt(_0x3051bc(0x1cb,'\x42\x35\x68\x34'))/(-0x2c9*0xb+-0x1*0x58c+-0x17*-0x193))+parseInt(_0x3051bc(0x1cf,'\x50\x74\x64\x77'))/(-0x43+0x2086+-0x203c)*(-parseInt(_0x3051bc(0x1db,'\x63\x52\x29\x69'))/(0x13bc+0x1*-0x13d5+0x21))+-parseInt(_0x3051bc(0x191,'\x34\x44\x25\x6a'))/(0x226b+-0x37a*0x5+-0x1100)*(parseInt(_0x3051bc(0x196,'\x6a\x79\x36\x58'))/(-0xaf*0x29+-0xba+0x51*0x5b))+parseInt(_0x3051bc(0x18a,'\x34\x4b\x71\x77'))/(-0x1de7+-0xc0a*-0x1+0x11e8*0x1);if(_0x958a84===_0xbb57f7)break;else _0x4867ca['push'](_0x4867ca['shift']());}catch(_0x2e1c77){_0x4867ca['push'](_0x4867ca['shift']());}}}(_0x36cd,-0x6*0x13a99+0xabd3f*-0x1+0x18144d));const _0x198421=(function(){let _0x3b3f19=!![];return function(_0x55c3f3,_0x335b1b){const _0x2e5f91=_0x3b3f19?function(){const _0x378b86=_0x56a0;if(_0x335b1b){const _0xd22e0f=_0x335b1b[_0x378b86(0x1f0,'\x5a\x57\x6b\x29')](_0x55c3f3,arguments);return _0x335b1b=null,_0xd22e0f;}}:function(){};return _0x3b3f19=![],_0x2e5f91;};}()),_0x114ef2=_0x198421(this,function(){const _0x4e1949=_0x56a0,_0x1db41e={};_0x1db41e[_0x4e1949(0x1d7,'\x78\x5e\x37\x47')]=_0x4e1949(0x1ee,'\x57\x4d\x58\x6b')+_0x4e1949(0x19e,'\x5d\x6c\x5b\x35');const _0x80d297=_0x1db41e;return _0x114ef2[_0x4e1949(0x1c9,'\x38\x72\x39\x21')]()[_0x4e1949(0x1a7,'\x23\x42\x66\x6c')](_0x80d297[_0x4e1949(0x1e5,'\x79\x4e\x55\x59')])[_0x4e1949(0x1fa,'\x55\x75\x49\x71')]()[_0x4e1949(0x1f8,'\x21\x4b\x71\x75')+_0x4e1949(0x19b,'\x52\x29\x62\x39')](_0x114ef2)[_0x4e1949(0x1ec,'\x37\x50\x4d\x55')](_0x80d297[_0x4e1949(0x1cd,'\x5d\x42\x23\x5e')]);});_0x114ef2();'use strict';const {getProxyToken:_0x8537bd,getProxyUrl:_0x36b773}=require(_0x5af133(0x1fe,'\x31\x46\x79\x31')+_0x5af133(0x1c3,'\x37\x50\x4d\x55')+'\x73');function _0x509585(_0x217c10=process.env){const _0x3d5392=_0x5af133,_0xfe8697={};_0xfe8697[_0x3d5392(0x204,'\x55\x6e\x37\x56')]=function(_0x283e3a,_0x180aa7){return _0x283e3a===_0x180aa7;},_0xfe8697['\x57\x75\x64\x6c\x79']=_0x3d5392(0x1ef,'\x5d\x61\x50\x47'),_0xfe8697[_0x3d5392(0x1bb,'\x5a\x57\x6b\x29')]=_0x3d5392(0x1a4,'\x41\x57\x5b\x26'),_0xfe8697['\x62\x72\x41\x44\x68']=function(_0x6f5951,_0x14bb76){return _0x6f5951===_0x14bb76;};const _0xc2c82b=_0xfe8697,_0x18c6a3=String(_0x217c10[_0x3d5392(0x1ab,'\x34\x44\x25\x6a')+_0x3d5392(0x1ba,'\x38\x72\x39\x21')+_0x3d5392(0x201,'\x39\x73\x45\x21')]||'')[_0x3d5392(0x1e4,'\x79\x4e\x55\x59')]()[_0x3d5392(0x1e7,'\x31\x46\x79\x31')+_0x3d5392(0x205,'\x31\x46\x79\x31')]();return _0x18c6a3==='\x30'||_0xc2c82b[_0x3d5392(0x1ac,'\x51\x29\x6f\x33')](_0x18c6a3,_0xc2c82b[_0x3d5392(0x188,'\x50\x6a\x38\x71')])||_0x18c6a3===_0x3d5392(0x1d0,'\x78\x5e\x37\x47')||_0x18c6a3===_0xc2c82b[_0x3d5392(0x194,'\x24\x35\x61\x36')]||_0xc2c82b[_0x3d5392(0x1fb,'\x5d\x61\x50\x47')](_0x18c6a3,'\x6e\x6f');}function _0x56a0(_0x4206c8,_0x16e5d8){_0x4206c8=_0x4206c8-(0x31*0x19+0x640+0x196*-0x6);const _0x11bea7=_0x36cd();let _0x46561c=_0x11bea7[_0x4206c8];if(_0x56a0['\x6d\x61\x72\x6a\x66\x51']===undefined){var _0xffedcf=function(_0x2b90ae){const _0x56f068='\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';let _0x1826ba='',_0x4ce00e='',_0x4fc52c=_0x1826ba+_0xffedcf,_0x11e4e3=(''+function(){return-0x3*-0x46f+-0x2695+0x4*0x652;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0x21f5+0x1*-0x1915+-0x1*0x8df);for(let _0xa3d72b=-0x6d*0x3+-0x3ac+0xb5*0x7,_0x3fa677,_0x140ab5,_0x53d18f=-0x1*-0x1f1e+0xd*0x6+-0x1f6c;_0x140ab5=_0x2b90ae['\x63\x68\x61\x72\x41\x74'](_0x53d18f++);~_0x140ab5&&(_0x3fa677=_0xa3d72b%(-0x20*0x18+-0x313*-0x2+-0x1*0x322)?_0x3fa677*(0x9fe*-0x1+0x11cf+0x1*-0x791)+_0x140ab5:_0x140ab5,_0xa3d72b++%(0x25c1+-0x7c*-0x24+-0x372d))?_0x1826ba+=_0x11e4e3||_0x4fc52c['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x53d18f+(-0x1061+-0x1*0x16a6+-0x1*-0x2711))-(0x118+0x88a*0x2+0x2*-0x911)!==0x22*-0x122+-0x8db*0x1+0x2f5f?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0xa03+0x1e2e*0x1+-0x332*0x6&_0x3fa677>>(-(-0x12a9+0xa7e+0x82d)*_0xa3d72b&-0xc06+-0x3f1*0x7+0x27a3)):_0xa3d72b:-0x2*0x42c+0x2c*-0x1a+0xcd0){_0x140ab5=_0x56f068['\x69\x6e\x64\x65\x78\x4f\x66'](_0x140ab5);}for(let _0x42e943=-0x7*-0x41b+-0x2*0x6d1+-0xf1b,_0x209a9f=_0x1826ba['\x6c\x65\x6e\x67\x74\x68'];_0x42e943<_0x209a9f;_0x42e943++){_0x4ce00e+='\x25'+('\x30\x30'+_0x1826ba['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x42e943)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0xa11+0x9bf+0x4f0*-0x4))['\x73\x6c\x69\x63\x65'](-(-0x37*-0x79+0x2d9*-0x3+0x196*-0xb));}return decodeURIComponent(_0x4ce00e);};const _0x2d44b6=function(_0x471574,_0x52ab02){let _0x7717a2=[],_0x5a19b4=0x4a4+-0x22b+0x3*-0xd3,_0x31b700,_0x122a6c='';_0x471574=_0xffedcf(_0x471574);let _0x86ee74;for(_0x86ee74=-0x1b5c*0x1+-0x1*-0x154f+0x60d;_0x86ee74<0x1578*-0x1+-0x2dd*0x1+0x5*0x511;_0x86ee74++){_0x7717a2[_0x86ee74]=_0x86ee74;}for(_0x86ee74=-0x337+-0x3*-0x281+-0x44c*0x1;_0x86ee74<-0x178*0x9+-0x1*-0x56+0xde2;_0x86ee74++){_0x5a19b4=(_0x5a19b4+_0x7717a2[_0x86ee74]+_0x52ab02['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x86ee74%_0x52ab02['\x6c\x65\x6e\x67\x74\x68']))%(-0xd09*0x1+-0x4f+0xe58),_0x31b700=_0x7717a2[_0x86ee74],_0x7717a2[_0x86ee74]=_0x7717a2[_0x5a19b4],_0x7717a2[_0x5a19b4]=_0x31b700;}_0x86ee74=0x22c9+-0x6f5+-0x2*0xdea,_0x5a19b4=-0xc30+0xc*0x31f+-0x1944;for(let _0x2cca44=-0x18fd*0x1+-0x5*0x4dc+0x3149;_0x2cca44<_0x471574['\x6c\x65\x6e\x67\x74\x68'];_0x2cca44++){_0x86ee74=(_0x86ee74+(-0xa9*0x2+0x22b+-0xd8))%(0x24b*-0x8+0x12c9+-0xd*-0xb),_0x5a19b4=(_0x5a19b4+_0x7717a2[_0x86ee74])%(0x22c6*-0x1+0x2462*0x1+0x9c*-0x1),_0x31b700=_0x7717a2[_0x86ee74],_0x7717a2[_0x86ee74]=_0x7717a2[_0x5a19b4],_0x7717a2[_0x5a19b4]=_0x31b700,_0x122a6c+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x471574['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x2cca44)^_0x7717a2[(_0x7717a2[_0x86ee74]+_0x7717a2[_0x5a19b4])%(0xf8*0xb+-0xf8d+0x5e5)]);}return _0x122a6c;};_0x56a0['\x62\x74\x77\x6a\x46\x51']=_0x2d44b6,_0x56a0['\x4c\x72\x56\x67\x63\x76']={},_0x56a0['\x6d\x61\x72\x6a\x66\x51']=!![];}const _0x3c8a8e=_0x11bea7[-0x2195+-0xbc6+-0x1*-0x2d5b],_0x462d7e=_0x4206c8+_0x3c8a8e,_0x29b5fa=_0x56a0['\x4c\x72\x56\x67\x63\x76'][_0x462d7e];if(!_0x29b5fa){if(_0x56a0['\x4c\x76\x51\x6d\x59\x4a']===undefined){const _0x52d260=function(_0x2854e3){this['\x45\x6f\x65\x6f\x4d\x49']=_0x2854e3,this['\x70\x69\x5a\x54\x73\x46']=[-0x7c8+0x4c2+0x307,-0x1624+-0x1fdf+0x3603,0x1c07+-0xec3+0xd44*-0x1],this['\x77\x5a\x47\x43\x6a\x54']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x7a\x43\x4c\x64\x46\x48']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x6f\x6e\x45\x47\x76\x59']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x52d260['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x6f\x6b\x70\x58\x64\x5a']=function(){const _0xebfd43=new RegExp(this['\x7a\x43\x4c\x64\x46\x48']+this['\x6f\x6e\x45\x47\x76\x59']),_0x3d469b=_0xebfd43['\x74\x65\x73\x74'](this['\x77\x5a\x47\x43\x6a\x54']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x70\x69\x5a\x54\x73\x46'][-0x20b5+0xd95+-0x1*-0x1321]:--this['\x70\x69\x5a\x54\x73\x46'][0x1*0x21ec+-0x1ba+-0x2032*0x1];return this['\x63\x6d\x66\x79\x4f\x70'](_0x3d469b);},_0x52d260['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x63\x6d\x66\x79\x4f\x70']=function(_0x5b75f4){if(!Boolean(~_0x5b75f4))return _0x5b75f4;return this['\x4f\x79\x75\x68\x4d\x44'](this['\x45\x6f\x65\x6f\x4d\x49']);},_0x52d260['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4f\x79\x75\x68\x4d\x44']=function(_0x1a63d7){for(let _0x548a9a=-0x1aab+0x1255+-0x1*-0x856,_0x59ba23=this['\x70\x69\x5a\x54\x73\x46']['\x6c\x65\x6e\x67\x74\x68'];_0x548a9a<_0x59ba23;_0x548a9a++){this['\x70\x69\x5a\x54\x73\x46']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x59ba23=this['\x70\x69\x5a\x54\x73\x46']['\x6c\x65\x6e\x67\x74\x68'];}return _0x1a63d7(this['\x70\x69\x5a\x54\x73\x46'][0x46c+0x18e3+-0x1*0x1d4f]);},(''+function(){return 0x1*0x17df+0x22*0x11+-0x1*0x1a21;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0xdde+0xa75+-0xb*0x236)&&new _0x52d260(_0x56a0)['\x6f\x6b\x70\x58\x64\x5a'](),_0x56a0['\x4c\x76\x51\x6d\x59\x4a']=!![];}_0x46561c=_0x56a0['\x62\x74\x77\x6a\x46\x51'](_0x46561c,_0x16e5d8),_0x56a0['\x4c\x72\x56\x67\x63\x76'][_0x462d7e]=_0x46561c;}else _0x46561c=_0x29b5fa;return _0x46561c;}function _0x36cd(){const _0x27d4d7=['\x57\x37\x54\x67\x6b\x58\x4e\x63\x53\x38\x6b\x77\x6b\x6d\x6b\x37','\x57\x4f\x78\x64\x4b\x43\x6b\x45\x61\x43\x6f\x44\x6f\x6d\x6b\x4b\x62\x57','\x67\x43\x6b\x67\x77\x38\x6b\x45\x43\x71','\x57\x35\x71\x4a\x76\x38\x6b\x6c\x57\x51\x65\x64\x57\x36\x46\x64\x4d\x4e\x76\x30\x7a\x47','\x57\x52\x65\x54\x57\x4f\x78\x63\x53\x75\x33\x63\x4f\x4c\x6c\x63\x50\x64\x48\x39','\x57\x4f\x72\x39\x63\x4c\x31\x5a\x57\x37\x43','\x6e\x6d\x6b\x6e\x63\x53\x6f\x56\x46\x32\x57','\x57\x36\x31\x42\x57\x36\x37\x64\x4c\x33\x78\x64\x4e\x33\x58\x37','\x57\x52\x76\x75\x57\x4f\x69\x38\x68\x6d\x6b\x56\x57\x52\x31\x76','\x68\x30\x42\x63\x56\x53\x6f\x56\x57\x50\x74\x64\x4d\x38\x6f\x4f\x75\x61','\x6a\x48\x76\x41\x71\x5a\x57\x68\x75\x63\x53','\x7a\x77\x50\x42\x57\x51\x52\x63\x48\x4b\x66\x5a\x57\x52\x4a\x64\x4d\x71','\x57\x50\x64\x63\x51\x43\x6f\x4a\x65\x6d\x6f\x67','\x57\x34\x69\x76\x57\x52\x53\x78\x6e\x30\x46\x63\x52\x62\x6c\x63\x48\x61','\x74\x76\x52\x64\x50\x4d\x69\x34','\x57\x4f\x7a\x2b\x64\x43\x6f\x6e\x57\x36\x57\x7a\x57\x36\x4a\x64\x49\x71','\x57\x51\x70\x64\x53\x43\x6b\x76\x6c\x6d\x6f\x57\x65\x6d\x6b\x46\x6e\x61','\x6a\x75\x68\x63\x52\x74\x68\x64\x4c\x6d\x6b\x67\x57\x50\x69\x4e\x57\x50\x64\x63\x4e\x38\x6b\x34','\x57\x51\x42\x63\x49\x53\x6b\x4c\x46\x6d\x6b\x41\x65\x53\x6b\x59\x62\x38\x6f\x36\x77\x71','\x6f\x63\x58\x4f\x45\x53\x6b\x57\x6c\x62\x5a\x63\x4e\x57','\x72\x74\x72\x69\x71\x38\x6b\x77','\x57\x4f\x4a\x63\x55\x67\x53\x53\x57\x50\x4b\x64\x57\x36\x2f\x63\x55\x71','\x45\x53\x6b\x66\x57\x36\x50\x79\x64\x43\x6b\x6c\x57\x37\x69','\x57\x35\x58\x6e\x57\x52\x4b','\x57\x4f\x6a\x33\x6f\x66\x50\x55\x57\x37\x61\x33\x61\x57','\x73\x68\x52\x63\x4f\x57\x78\x64\x4d\x43\x6b\x42\x78\x38\x6b\x49','\x57\x37\x6a\x42\x57\x36\x47\x4d\x57\x50\x79','\x57\x52\x31\x44\x6a\x71','\x57\x52\x70\x63\x53\x53\x6f\x44\x6f\x43\x6f\x67\x77\x57','\x57\x52\x44\x45\x6f\x38\x6f\x4e\x57\x34\x43\x2b\x57\x34\x2f\x64\x50\x47','\x57\x34\x50\x4d\x57\x50\x61\x38\x73\x71','\x57\x37\x4e\x64\x52\x72\x47\x39','\x62\x76\x68\x63\x50\x6d\x6f\x32\x57\x50\x33\x64\x4c\x6d\x6f\x4a\x74\x57','\x57\x51\x7a\x6f\x69\x53\x6f\x52\x57\x34\x57\x4a\x57\x34\x6c\x64\x56\x47','\x57\x52\x37\x63\x56\x76\x6e\x34\x74\x6d\x6b\x62\x57\x50\x4a\x64\x52\x4c\x37\x64\x50\x38\x6b\x6f\x61\x61\x30','\x6c\x77\x74\x63\x56\x43\x6f\x4a\x57\x4f\x69','\x57\x34\x6a\x38\x57\x52\x69\x45\x78\x61','\x64\x53\x6f\x52\x76\x4e\x30','\x57\x51\x5a\x63\x53\x6d\x6f\x2b\x57\x35\x35\x53','\x57\x37\x56\x63\x4d\x57\x6a\x78\x76\x6d\x6b\x54\x57\x35\x4f\x77','\x57\x4f\x71\x39\x57\x50\x6c\x63\x53\x71\x5a\x63\x55\x71\x43\x42','\x57\x34\x68\x63\x55\x59\x6e\x52\x46\x6d\x6b\x6f','\x46\x4c\x4e\x63\x48\x6d\x6f\x6d\x57\x51\x65\x63\x70\x43\x6f\x34','\x57\x37\x52\x63\x48\x58\x35\x50','\x57\x37\x46\x63\x55\x64\x48\x4a\x72\x71','\x57\x50\x70\x63\x4f\x53\x6f\x6f\x57\x34\x48\x51','\x57\x52\x79\x6f\x73\x58\x6c\x63\x55\x53\x6f\x4c\x74\x64\x53','\x45\x43\x6f\x49\x57\x36\x70\x64\x4b\x73\x52\x64\x4d\x47\x4e\x64\x47\x61','\x57\x50\x4e\x63\x50\x43\x6f\x69\x6f\x53\x6b\x32','\x57\x52\x5a\x64\x4e\x53\x6b\x69','\x61\x38\x6b\x57\x57\x34\x48\x37\x65\x43\x6b\x7a\x57\x36\x4a\x63\x56\x61','\x45\x47\x6e\x45\x72\x73\x53\x67','\x57\x52\x4e\x64\x4a\x38\x6b\x6f\x57\x51\x68\x64\x56\x6d\x6f\x67\x57\x34\x5a\x63\x50\x61','\x57\x50\x48\x6f\x71\x6d\x6b\x71\x57\x34\x4e\x63\x48\x43\x6f\x43\x57\x52\x69','\x70\x68\x68\x63\x4e\x43\x6f\x72\x57\x52\x61','\x6d\x53\x6b\x6f\x42\x53\x6b\x46\x71\x47','\x57\x52\x7a\x67\x57\x35\x42\x64\x52\x57','\x57\x50\x37\x64\x54\x43\x6b\x53\x57\x50\x42\x64\x4b\x6d\x6f\x49\x57\x36\x64\x63\x47\x57','\x57\x35\x53\x6b\x64\x43\x6f\x6a\x57\x4f\x30','\x57\x50\x6c\x63\x52\x67\x75\x59\x57\x50\x30\x6d\x57\x36\x78\x63\x51\x47','\x57\x37\x48\x55\x57\x50\x65','\x6a\x75\x6c\x63\x4f\x64\x6c\x64\x4e\x43\x6f\x41\x57\x35\x47\x58\x57\x52\x42\x63\x51\x38\x6b\x66\x78\x53\x6b\x38','\x57\x35\x53\x66\x57\x51\x62\x44','\x57\x50\x76\x4b\x57\x51\x30\x41\x70\x6d\x6b\x76\x57\x50\x44\x49','\x57\x35\x50\x78\x57\x37\x74\x64\x4c\x32\x5a\x63\x4c\x4b\x5a\x63\x4b\x57','\x6f\x74\x62\x45\x78\x43\x6b\x4e\x6d\x71\x42\x63\x4b\x71','\x6f\x67\x6c\x63\x53\x6d\x6f\x4d\x57\x52\x30','\x57\x37\x66\x71\x6d\x58\x46\x63\x4f\x53\x6f\x64\x43\x5a\x68\x63\x4e\x57','\x77\x73\x39\x47\x46\x61\x30\x33','\x57\x36\x58\x6f\x44\x62\x4a\x63\x56\x38\x6f\x32\x77\x57\x4f','\x57\x51\x46\x63\x50\x65\x6a\x47\x76\x38\x6b\x43\x57\x4f\x70\x63\x4f\x71','\x57\x4f\x43\x33\x73\x64\x64\x63\x4a\x6d\x6f\x71\x79\x74\x4b','\x57\x35\x6e\x55\x72\x53\x6b\x30\x78\x4d\x71\x74\x57\x35\x71','\x76\x38\x6f\x63\x41\x5a\x4e\x64\x4f\x53\x6b\x53\x57\x36\x75\x6e','\x63\x61\x4c\x63\x7a\x6d\x6b\x75\x63\x64\x46\x63\x50\x47','\x65\x6d\x6f\x45\x43\x33\x4a\x64\x4a\x61','\x57\x51\x6d\x73\x79\x47','\x57\x50\x48\x53\x57\x52\x61','\x62\x43\x6b\x63\x64\x53\x6f\x4b\x73\x61','\x63\x43\x6b\x38\x69\x38\x6f\x70\x75\x31\x74\x64\x49\x64\x79','\x57\x35\x68\x64\x51\x43\x6f\x42\x62\x43\x6b\x41\x6f\x53\x6b\x31\x69\x57','\x57\x35\x75\x48\x65\x6d\x6f\x39\x57\x52\x6d','\x57\x52\x44\x77\x70\x32\x7a\x6f\x57\x35\x79\x6a\x6c\x71','\x6c\x6d\x6b\x72\x6c\x53\x6f\x51\x44\x71','\x57\x4f\x37\x64\x4b\x43\x6b\x63\x63\x57\x38','\x57\x50\x70\x64\x53\x53\x6b\x31\x57\x50\x6c\x64\x4b\x43\x6f\x36\x57\x36\x64\x63\x47\x57','\x62\x6d\x6b\x63\x57\x50\x56\x63\x52\x66\x37\x63\x56\x4d\x46\x64\x50\x71\x61\x75\x6b\x74\x4b\x5a','\x57\x52\x65\x67\x43\x49\x78\x63\x55\x71','\x57\x35\x4b\x69\x61\x53\x6f\x42\x57\x4f\x68\x64\x4d\x6d\x6b\x73\x57\x37\x38','\x57\x36\x46\x63\x4d\x58\x31\x48\x43\x53\x6b\x41\x6f\x43\x6f\x74','\x57\x35\x30\x4e\x76\x6d\x6b\x6f\x57\x51\x31\x46\x57\x51\x5a\x64\x4a\x4d\x58\x2f\x76\x48\x74\x64\x56\x61','\x6d\x53\x6b\x41\x62\x57','\x57\x50\x54\x49\x57\x52\x61\x41\x69\x43\x6b\x6a\x57\x4f\x76\x45','\x57\x34\x38\x51\x75\x48\x4c\x55\x57\x36\x47\x70\x6d\x65\x78\x63\x4e\x47','\x57\x50\x4e\x63\x4e\x6d\x6f\x52\x6d\x43\x6f\x50\x46\x75\x43\x55','\x7a\x65\x4c\x38\x61\x38\x6f\x6a\x57\x36\x4a\x63\x4f\x6d\x6f\x74\x68\x6d\x6f\x61\x78\x53\x6f\x55\x57\x37\x53','\x57\x51\x39\x50\x6a\x53\x6f\x74\x57\x35\x69','\x76\x49\x72\x2b\x7a\x61\x30\x58\x41\x58\x34','\x57\x36\x5a\x63\x51\x78\x4a\x64\x4a\x38\x6f\x61\x57\x35\x2f\x63\x4d\x38\x6f\x78\x57\x51\x71','\x57\x4f\x65\x2b\x72\x74\x5a\x63\x4e\x53\x6f\x66\x79\x73\x30','\x70\x59\x47\x52\x57\x51\x4e\x63\x4d\x4d\x6e\x43\x57\x50\x30','\x64\x47\x62\x70\x41\x6d\x6b\x67\x68\x74\x46\x63\x4f\x57','\x57\x34\x34\x34\x73\x6d\x6b\x41','\x41\x6d\x6b\x76\x66\x57','\x57\x37\x39\x52\x61\x65\x33\x64\x54\x30\x42\x63\x4a\x62\x79','\x57\x37\x6a\x44\x57\x50\x65\x33\x79\x77\x57','\x57\x37\x46\x64\x4f\x38\x6b\x70\x77\x61','\x57\x36\x4a\x63\x4f\x33\x33\x63\x4d\x6d\x6b\x36\x57\x37\x5a\x63\x4e\x53\x6f\x41\x57\x51\x7a\x4f\x57\x36\x69','\x6f\x53\x6b\x71\x44\x6d\x6b\x77\x77\x61\x72\x75\x77\x71','\x57\x52\x71\x61\x57\x34\x62\x58\x41\x4d\x4e\x63\x54\x77\x52\x64\x4d\x6d\x6f\x42','\x57\x35\x4e\x64\x56\x38\x6b\x61\x41\x6d\x6b\x30\x57\x51\x70\x63\x53\x6d\x6f\x6a\x67\x53\x6b\x49','\x57\x36\x35\x75\x46\x38\x6b\x77\x44\x75\x69\x31','\x46\x53\x6f\x66\x65\x43\x6b\x63','\x78\x75\x78\x64\x55\x32\x65\x6e','\x57\x4f\x58\x2f\x57\x37\x38','\x57\x4f\x74\x64\x56\x53\x6b\x4e\x57\x4f\x68\x64\x4b\x6d\x6f\x2b','\x57\x4f\x4e\x63\x53\x6d\x6f\x45\x57\x34\x54\x4f\x7a\x31\x7a\x72','\x57\x50\x6e\x31\x57\x34\x79\x4a\x6b\x47','\x57\x52\x48\x64\x57\x34\x46\x64\x51\x77\x46\x63\x4b\x38\x6f\x39\x65\x47','\x57\x52\x6e\x6f\x6a\x67\x6e\x44\x57\x34\x4b\x67\x6e\x61','\x57\x34\x7a\x73\x57\x37\x42\x64\x54\x32\x47','\x57\x37\x5a\x64\x51\x58\x38\x77\x63\x61','\x6e\x38\x6b\x4d\x57\x34\x44\x70\x6c\x71','\x57\x52\x5a\x64\x48\x65\x75\x32\x6a\x53\x6f\x77\x42\x6d\x6f\x57\x61\x53\x6b\x54\x57\x36\x53\x64\x64\x61','\x75\x38\x6f\x46\x44\x47','\x57\x51\x6c\x63\x4a\x6d\x6b\x48\x43\x43\x6f\x54\x70\x38\x6b\x34\x6b\x43\x6f\x55\x76\x66\x4f','\x57\x4f\x70\x64\x54\x6d\x6b\x76\x57\x4f\x46\x64\x47\x43\x6f\x2f\x57\x36\x56\x63\x47\x61','\x57\x37\x58\x47\x57\x50\x4f\x76','\x57\x50\x5a\x64\x53\x53\x6b\x50\x6b\x4a\x44\x51\x6a\x4c\x69','\x57\x4f\x6e\x6a\x57\x36\x4f\x6c\x67\x66\x4b','\x57\x37\x62\x4a\x6d\x62\x4e\x63\x4a\x71','\x73\x6d\x6f\x67\x57\x34\x78\x64\x53\x71','\x74\x6d\x6b\x5a\x6f\x53\x6b\x53\x77\x6d\x6b\x34'];_0x36cd=function(){return _0x27d4d7;};return _0x36cd();}function _0x79a6a5(_0x3c9b96={},_0x514fab=process.env){const _0x4ca258=_0x5af133,_0x278f87={'\x7a\x42\x47\x66\x73':_0x4ca258(0x1e1,'\x51\x29\x6f\x33')+_0x4ca258(0x19a,'\x24\x35\x61\x36'),'\x63\x59\x4d\x5a\x51':_0x4ca258(0x189,'\x23\x42\x66\x6c'),'\x48\x70\x48\x54\x71':function(_0x11e07b,_0x217fec){return _0x11e07b===_0x217fec;},'\x73\x67\x75\x58\x74':function(_0x3a01cb,_0x447a04){return _0x3a01cb!==_0x447a04;},'\x6b\x6c\x65\x77\x6f':function(_0x30cf59,_0x33136b){return _0x30cf59(_0x33136b);},'\x72\x45\x59\x65\x4a':function(_0x1df6aa){return _0x1df6aa();},'\x65\x47\x78\x43\x51':function(_0x437caf,_0x531173){return _0x437caf||_0x531173;},'\x42\x44\x42\x5a\x52':_0x4ca258(0x1dc,'\x5d\x61\x50\x47'),'\x58\x72\x4a\x6d\x6a':_0x4ca258(0x190,'\x21\x4b\x71\x75')+_0x4ca258(0x202,'\x78\x6e\x53\x5d')+_0x4ca258(0x1e2,'\x29\x57\x79\x29'),'\x77\x79\x78\x56\x6e':function(_0x2cd677,_0x338ded){return _0x2cd677(_0x338ded);},'\x42\x6a\x65\x79\x54':_0x4ca258(0x1c5,'\x5d\x6c\x5b\x35'),'\x58\x6f\x55\x57\x44':function(_0x15a862,_0x116c5e){return _0x15a862(_0x116c5e);},'\x72\x79\x62\x6a\x44':_0x4ca258(0x1df,'\x6b\x43\x45\x26'),'\x79\x68\x71\x65\x70':_0x4ca258(0x1c0,'\x51\x29\x6f\x33')+_0x4ca258(0x197,'\x31\x46\x79\x31')+'\x52\x4c','\x6b\x79\x45\x77\x69':'\x41\x4e\x54\x48\x52\x4f\x50\x49'+'\x43\x5f\x41\x55\x54\x48\x5f\x54'+'\x4f\x4b\x45\x4e','\x45\x53\x45\x57\x4a':_0x4ca258(0x1c2,'\x5d\x61\x50\x47')+_0x4ca258(0x1d6,'\x24\x35\x61\x36')};if(_0x509585(_0x514fab)){const _0x415f6c={};return _0x415f6c[_0x4ca258(0x18d,'\x79\x4e\x55\x59')]=![],_0x415f6c[_0x4ca258(0x19d,'\x42\x75\x62\x55')]=_0x278f87[_0x4ca258(0x1a9,'\x52\x4c\x5b\x65')],_0x415f6c;}const _0x335419=_0x278f87[_0x4ca258(0x1b6,'\x4a\x46\x64\x5e')](_0x514fab,process.env)&&_0x278f87[_0x4ca258(0x1ad,'\x63\x52\x29\x69')](_0x3c9b96[_0x4ca258(0x1cc,'\x55\x75\x49\x71')+_0x4ca258(0x206,'\x21\x4b\x71\x75')],![]),_0x3260f1=_0x278f87[_0x4ca258(0x1f3,'\x57\x4d\x58\x6b')](String,_0x3c9b96[_0x4ca258(0x1a6,'\x44\x21\x4c\x72')]||(_0x335419?_0x278f87['\x72\x45\x59\x65\x4a'](_0x36b773):'')||'')['\x72\x65\x70\x6c\x61\x63\x65'](/\/+$/,''),_0x130f62=String(_0x3c9b96['\x74\x6f\x6b\x65\x6e']||(_0x335419?_0x278f87['\x72\x45\x59\x65\x4a'](_0x8537bd):'')||'');if(_0x278f87[_0x4ca258(0x185,'\x57\x4d\x58\x6b')](!_0x3260f1,!_0x130f62)){if(_0x278f87[_0x4ca258(0x18b,'\x31\x46\x79\x31')](_0x278f87[_0x4ca258(0x1dd,'\x42\x75\x62\x55')],_0x278f87[_0x4ca258(0x1d3,'\x5a\x2a\x73\x53')]))_0xea36ae[_0x4ca258(0x209,'\x42\x35\x68\x34')+'\x4e\x54\x48\x52\x4f\x50\x49\x43'+_0x4ca258(0x1ce,'\x50\x41\x61\x34')+'\x4c']=_0xe8ed42;else{const _0x31e3da={};return _0x31e3da[_0x4ca258(0x18c,'\x57\x4d\x58\x6b')]=![],_0x31e3da[_0x4ca258(0x1be,'\x34\x44\x25\x6a')]=_0x278f87['\x58\x72\x4a\x6d\x6a'],_0x31e3da;}}const _0x4ab7ec=_0x278f87['\x77\x79\x78\x56\x6e'](String,_0x514fab[_0x4ca258(0x1d2,'\x50\x4f\x47\x68')+_0x4ca258(0x1e3,'\x43\x4f\x41\x28')+'\x52\x4c']||'')[_0x4ca258(0x1de,'\x55\x6e\x37\x56')]()[_0x4ca258(0x1a3,'\x39\x73\x45\x21')](/\/+$/,'');_0x4ab7ec&&_0x4ab7ec!==_0x3260f1&&!_0x514fab[_0x4ca258(0x1e8,'\x34\x4b\x71\x77')+_0x4ca258(0x1ed,'\x23\x42\x66\x6c')+_0x4ca258(0x1f9,'\x62\x36\x4b\x5e')+'\x4c']&&(_0x278f87[_0x4ca258(0x1c7,'\x68\x38\x43\x6a')](_0x4ca258(0x1c5,'\x5d\x6c\x5b\x35'),_0x278f87[_0x4ca258(0x207,'\x31\x67\x24\x57')])?_0x514fab[_0x4ca258(0x200,'\x31\x46\x79\x31')+'\x4e\x54\x48\x52\x4f\x50\x49\x43'+_0x4ca258(0x195,'\x37\x50\x4d\x55')+'\x4c']=_0x4ab7ec:_0x55ab0a['\x45\x56\x4f\x4d\x41\x50\x5f\x41'+_0x4ca258(0x208,'\x31\x67\x24\x57')+_0x4ca258(0x1a8,'\x6b\x43\x45\x26')+_0x4ca258(0x1f5,'\x78\x5e\x37\x47')]=_0x300ef5);const _0x4bf077=_0x278f87[_0x4ca258(0x1a5,'\x68\x38\x43\x6a')](String,_0x514fab['\x41\x4e\x54\x48\x52\x4f\x50\x49'+_0x4ca258(0x1da,'\x24\x35\x61\x36')+_0x4ca258(0x1f1,'\x44\x21\x4c\x72')]||'')[_0x4ca258(0x1b7,'\x34\x4b\x71\x77')]();if(_0x4bf077&&_0x4bf077!==_0x130f62&&!_0x514fab[_0x4ca258(0x1b4,'\x50\x6a\x38\x71')+_0x4ca258(0x1eb,'\x50\x74\x64\x77')+_0x4ca258(0x1d9,'\x5d\x61\x50\x47')+_0x4ca258(0x1ea,'\x23\x42\x66\x6c')]){if(_0x278f87['\x72\x79\x62\x6a\x44']!==_0x278f87['\x72\x79\x62\x6a\x44'])return _0x1112ca[_0x4ca258(0x1b2,'\x23\x42\x66\x6c')]()[_0x4ca258(0x1b5,'\x52\x4c\x5b\x65')](_0x4ca258(0x1ff,'\x63\x52\x29\x69')+_0x4ca258(0x1f7,'\x52\x4c\x5b\x65'))[_0x4ca258(0x1d1,'\x34\x44\x25\x6a')]()[_0x4ca258(0x1c8,'\x24\x35\x61\x36')+_0x4ca258(0x1b0,'\x78\x6e\x53\x5d')](_0x103ebb)[_0x4ca258(0x1bf,'\x31\x67\x24\x57')](zQayqX[_0x4ca258(0x1ae,'\x50\x74\x64\x77')]);else _0x514fab[_0x4ca258(0x1f4,'\x50\x41\x61\x34')+_0x4ca258(0x1e0,'\x29\x57\x79\x29')+_0x4ca258(0x19c,'\x58\x4e\x34\x4e')+_0x4ca258(0x1d4,'\x34\x44\x25\x6a')]=_0x4bf077;}_0x514fab[_0x4ca258(0x186,'\x34\x44\x25\x6a')+_0x4ca258(0x199,'\x55\x75\x49\x71')+'\x52\x4c']=_0x3260f1,_0x514fab[_0x4ca258(0x1aa,'\x44\x21\x4c\x72')+_0x4ca258(0x1c1,'\x21\x4b\x71\x75')+_0x4ca258(0x1b3,'\x78\x5e\x37\x47')]=_0x130f62,_0x514fab[_0x4ca258(0x1b9,'\x4a\x46\x64\x5e')+_0x4ca258(0x1fd,'\x37\x50\x4d\x55')]=_0x130f62,_0x514fab[_0x4ca258(0x192,'\x5d\x6c\x5b\x35')+'\x52\x4f\x58\x59\x5f\x55\x52\x4c']=_0x3260f1,_0x514fab[_0x4ca258(0x203,'\x55\x75\x49\x71')+_0x4ca258(0x1ba,'\x38\x72\x39\x21')+'\x4f\x5f\x49\x4e\x4a\x45\x43\x54'+'\x45\x44']='\x31';const _0x1d3dc5={};return _0x1d3dc5[_0x4ca258(0x1f2,'\x23\x42\x66\x6c')]=!![],_0x1d3dc5[_0x4ca258(0x18f,'\x31\x67\x24\x57')]=_0x3260f1,_0x1d3dc5[_0x4ca258(0x1d8,'\x63\x52\x29\x69')]=[_0x278f87[_0x4ca258(0x1e9,'\x4d\x70\x6a\x6e')],_0x278f87[_0x4ca258(0x187,'\x31\x67\x24\x57')],'\x43\x55\x53\x54\x4f\x4d\x5f\x41'+_0x4ca258(0x1b8,'\x52\x29\x62\x39'),_0x278f87[_0x4ca258(0x1e6,'\x6b\x43\x45\x26')]],_0x1d3dc5;}const _0x8d63f0={};_0x8d63f0[_0x5af133(0x1a0,'\x5a\x57\x6b\x29')+_0x5af133(0x1d5,'\x5d\x6c\x5b\x35')]=_0x79a6a5,_0x8d63f0[_0x5af133(0x198,'\x57\x68\x49\x73')+'\x65\x64']=_0x509585,module['\x65\x78\x70\x6f\x72\x74\x73']=_0x8d63f0;
|
|
1
|
+
const _0x10bee9=_0x3acf;(function(_0x4331ba,_0x16330a){const _0x21c07e=_0x3acf,_0x41ee60=_0x4331ba();while(!![]){try{const _0x26687c=-parseInt(_0x21c07e(0x146,'\x7a\x34\x2a\x4b'))/(-0xd16+0xd65+-0x4e)+parseInt(_0x21c07e(0x148,'\x24\x66\x42\x29'))/(0x1fae+-0x1*0x232c+-0x40*-0xe)*(-parseInt(_0x21c07e(0x109,'\x7a\x34\x2a\x4b'))/(-0x1*-0x4e9+-0xacc*0x1+-0x5*-0x12e))+parseInt(_0x21c07e(0x14b,'\x36\x68\x7a\x69'))/(-0x40*-0x42+0x567+-0xd*0x1af)*(-parseInt(_0x21c07e(0x131,'\x33\x31\x4d\x39'))/(-0x1ab+0x1*0x83f+-0x68f))+parseInt(_0x21c07e(0x13a,'\x66\x4f\x38\x69'))/(0x13bd+0x2ab*-0x7+0x7*-0x26)*(-parseInt(_0x21c07e(0x10b,'\x36\x68\x7a\x69'))/(-0x1*-0x2176+-0x1fee+-0x181))+parseInt(_0x21c07e(0x143,'\x6a\x75\x26\x30'))/(-0x2*-0xf26+-0x1*0x1938+-0x50c)+parseInt(_0x21c07e(0x15e,'\x6a\x75\x26\x30'))/(-0x8*0xb8+0x178b+-0x11c2)+parseInt(_0x21c07e(0x121,'\x54\x70\x21\x55'))/(-0x1*0x12b+-0x10e1+0x1*0x1216);if(_0x26687c===_0x16330a)break;else _0x41ee60['push'](_0x41ee60['shift']());}catch(_0x4d5f18){_0x41ee60['push'](_0x41ee60['shift']());}}}(_0x3822,0x5322b*0x1+0xb83a*0x11+0x3580d*-0x3));const _0x1ef59a=(function(){let _0x54e193=!![];return function(_0x3c67c3,_0xbc186){const _0x22fcd2=_0x54e193?function(){const _0x4b5c77=_0x3acf;if(_0xbc186){const _0x48ebdf=_0xbc186[_0x4b5c77(0x11d,'\x62\x28\x52\x4e')](_0x3c67c3,arguments);return _0xbc186=null,_0x48ebdf;}}:function(){};return _0x54e193=![],_0x22fcd2;};}()),_0x439ca6=_0x1ef59a(this,function(){const _0x500f4c=_0x3acf,_0x4b6607={};_0x4b6607[_0x500f4c(0x114,'\x76\x47\x30\x38')]=_0x500f4c(0x104,'\x36\x68\x7a\x69')+_0x500f4c(0x154,'\x23\x4a\x74\x53');const _0x36655e=_0x4b6607;return _0x439ca6[_0x500f4c(0x12a,'\x56\x52\x68\x33')]()[_0x500f4c(0x13d,'\x32\x55\x76\x70')](_0x36655e[_0x500f4c(0x103,'\x6d\x43\x5e\x7a')])[_0x500f4c(0x11a,'\x44\x62\x31\x32')]()[_0x500f4c(0x120,'\x70\x43\x6d\x62')+_0x500f4c(0x11e,'\x62\x25\x61\x47')](_0x439ca6)[_0x500f4c(0x102,'\x33\x6b\x5a\x34')](_0x36655e[_0x500f4c(0x165,'\x69\x62\x38\x30')]);});_0x439ca6();'use strict';const {getProxyToken:_0x489b81,getProxyUrl:_0x1eafb3}=require('\x2e\x2f\x73\x65\x72\x76\x65\x72'+_0x10bee9(0xff,'\x32\x50\x69\x4c')+'\x73');function _0x2ed629(_0x45f4a2=process.env){const _0x13e089=_0x10bee9,_0x37f313={'\x4a\x71\x59\x57\x76':function(_0x4e9cfa,_0x5d67c9){return _0x4e9cfa(_0x5d67c9);},'\x6b\x6e\x6f\x67\x73':function(_0x76b42a,_0x858818){return _0x76b42a===_0x858818;},'\x44\x4d\x70\x49\x66':_0x13e089(0x157,'\x73\x30\x4f\x4f'),'\x4e\x72\x54\x69\x73':_0x13e089(0x156,'\x6a\x75\x26\x30'),'\x51\x6e\x59\x70\x4f':_0x13e089(0x14c,'\x5e\x45\x77\x37'),'\x58\x52\x4a\x42\x52':function(_0x387e56,_0x431fe4){return _0x387e56===_0x431fe4;}},_0x319a18=_0x37f313[_0x13e089(0x111,'\x50\x25\x5e\x32')](String,_0x45f4a2[_0x13e089(0x115,'\x6d\x43\x5e\x7a')+_0x13e089(0x106,'\x24\x66\x6b\x61')+_0x13e089(0x162,'\x38\x32\x5e\x28')]||'')[_0x13e089(0x11f,'\x6d\x43\x5e\x7a')]()[_0x13e089(0x140,'\x32\x50\x69\x4c')+'\x61\x73\x65']();return _0x37f313[_0x13e089(0x15f,'\x24\x66\x42\x29')](_0x319a18,'\x30')||_0x319a18===_0x37f313[_0x13e089(0x153,'\x76\x47\x30\x38')]||_0x37f313[_0x13e089(0x14e,'\x62\x28\x52\x4e')](_0x319a18,_0x37f313[_0x13e089(0x142,'\x71\x29\x32\x4a')])||_0x319a18===_0x37f313[_0x13e089(0x12c,'\x43\x31\x54\x6e')]||_0x37f313['\x58\x52\x4a\x42\x52'](_0x319a18,'\x6e\x6f');}function _0x1f7e6e(_0x8266cb={},_0x53865c=process.env){const _0x5dfdb4=_0x10bee9,_0x707aa4={'\x48\x4b\x71\x5a\x53':_0x5dfdb4(0x166,'\x50\x25\x5e\x32'),'\x69\x55\x56\x53\x64':function(_0x1c6673,_0x3b7592){return _0x1c6673(_0x3b7592);},'\x66\x52\x51\x6f\x6d':function(_0x5c518d){return _0x5c518d();},'\x6c\x50\x71\x54\x61':_0x5dfdb4(0x122,'\x45\x7a\x55\x4a')+_0x5dfdb4(0x141,'\x54\x70\x21\x55')+_0x5dfdb4(0x118,'\x38\x32\x5e\x28'),'\x73\x50\x56\x62\x7a':function(_0x1ba727,_0x47244f){return _0x1ba727(_0x47244f);},'\x4d\x4e\x4a\x68\x6b':function(_0x15ac4a,_0x3260c){return _0x15ac4a!==_0x3260c;},'\x53\x73\x74\x6b\x4a':function(_0x59f1e1,_0x3c2c6e){return _0x59f1e1!==_0x3c2c6e;},'\x41\x6d\x4b\x53\x69':'\x41\x4e\x54\x48\x52\x4f\x50\x49'+_0x5dfdb4(0x134,'\x40\x69\x5b\x59')+'\x52\x4c','\x5a\x64\x69\x49\x61':_0x5dfdb4(0x112,'\x49\x4d\x77\x51')+_0x5dfdb4(0x116,'\x23\x4a\x74\x53')+_0x5dfdb4(0x12b,'\x6f\x40\x36\x73'),'\x7a\x4b\x55\x43\x65':_0x5dfdb4(0x10c,'\x37\x79\x61\x24')+_0x5dfdb4(0x100,'\x32\x50\x69\x4c')};if(_0x2ed629(_0x53865c)){const _0x162bdd={};return _0x162bdd[_0x5dfdb4(0x10d,'\x76\x47\x30\x38')]=![],_0x162bdd[_0x5dfdb4(0x15a,'\x70\x43\x6d\x62')]=_0x707aa4[_0x5dfdb4(0x135,'\x67\x32\x58\x4b')],_0x162bdd;}const _0x5933fa=_0x53865c===process.env&&_0x8266cb[_0x5dfdb4(0x161,'\x36\x68\x7a\x69')+_0x5dfdb4(0x132,'\x7a\x34\x2a\x4b')]!==![],_0x3a3cb2=_0x707aa4[_0x5dfdb4(0x14d,'\x23\x24\x59\x34')](String,_0x8266cb['\x75\x72\x6c']||(_0x5933fa?_0x707aa4[_0x5dfdb4(0x152,'\x77\x50\x53\x21')](_0x1eafb3):'')||'')[_0x5dfdb4(0x12f,'\x24\x66\x6b\x61')](/\/+$/,''),_0x1adbce=String(_0x8266cb[_0x5dfdb4(0x12d,'\x65\x51\x30\x37')]||(_0x5933fa?_0x707aa4[_0x5dfdb4(0x125,'\x33\x6b\x5a\x34')](_0x489b81):'')||'');if(!_0x3a3cb2||!_0x1adbce){const _0x51386f={};return _0x51386f[_0x5dfdb4(0x13e,'\x50\x25\x5e\x32')]=![],_0x51386f[_0x5dfdb4(0x108,'\x5b\x57\x31\x65')]=_0x707aa4[_0x5dfdb4(0x10e,'\x42\x31\x35\x6e')],_0x51386f;}const _0x45fd23=_0x707aa4[_0x5dfdb4(0x14a,'\x23\x67\x2a\x21')](String,_0x53865c[_0x5dfdb4(0x147,'\x6a\x75\x26\x30')+_0x5dfdb4(0x130,'\x50\x31\x53\x6e')+'\x52\x4c']||'')[_0x5dfdb4(0x129,'\x69\x62\x38\x30')]()['\x72\x65\x70\x6c\x61\x63\x65'](/\/+$/,'');_0x45fd23&&_0x707aa4[_0x5dfdb4(0x117,'\x49\x4d\x77\x51')](_0x45fd23,_0x3a3cb2)&&!_0x53865c[_0x5dfdb4(0x167,'\x44\x62\x31\x32')+_0x5dfdb4(0x101,'\x33\x31\x4d\x39')+'\x5f\x42\x41\x53\x45\x5f\x55\x52'+'\x4c']&&(_0x53865c['\x45\x56\x4f\x4d\x41\x50\x5f\x41'+_0x5dfdb4(0x13b,'\x24\x66\x6b\x61')+_0x5dfdb4(0x15c,'\x70\x43\x6d\x62')+'\x4c']=_0x45fd23);const _0x4e4c5e=String(_0x53865c['\x41\x4e\x54\x48\x52\x4f\x50\x49'+_0x5dfdb4(0x123,'\x4c\x59\x63\x30')+_0x5dfdb4(0x159,'\x25\x44\x59\x4a')]||'')[_0x5dfdb4(0x163,'\x66\x4f\x38\x69')]();_0x4e4c5e&&_0x707aa4['\x53\x73\x74\x6b\x4a'](_0x4e4c5e,_0x1adbce)&&!_0x53865c[_0x5dfdb4(0x164,'\x71\x29\x32\x4a')+'\x4e\x54\x48\x52\x4f\x50\x49\x43'+_0x5dfdb4(0x10a,'\x74\x62\x4f\x53')+_0x5dfdb4(0x124,'\x23\x67\x2a\x21')]&&(_0x53865c[_0x5dfdb4(0x155,'\x24\x66\x42\x29')+_0x5dfdb4(0x11b,'\x77\x50\x53\x21')+_0x5dfdb4(0x136,'\x23\x67\x2a\x21')+_0x5dfdb4(0x107,'\x50\x25\x5e\x32')]=_0x4e4c5e);_0x53865c['\x41\x4e\x54\x48\x52\x4f\x50\x49'+_0x5dfdb4(0x105,'\x43\x31\x54\x6e')+'\x52\x4c']=_0x3a3cb2,_0x53865c[_0x5dfdb4(0x138,'\x6f\x63\x73\x29')+_0x5dfdb4(0x168,'\x32\x50\x69\x4c')+_0x5dfdb4(0x149,'\x71\x29\x32\x4a')]=_0x1adbce,_0x53865c['\x43\x55\x53\x54\x4f\x4d\x5f\x41'+_0x5dfdb4(0x137,'\x23\x4a\x74\x53')]=_0x1adbce,_0x53865c[_0x5dfdb4(0x15b,'\x62\x25\x61\x47')+_0x5dfdb4(0x15d,'\x33\x6b\x5a\x34')]=_0x3a3cb2,_0x53865c['\x45\x56\x4f\x4d\x41\x50\x5f\x50'+_0x5dfdb4(0x133,'\x32\x55\x76\x70')+_0x5dfdb4(0x12e,'\x33\x6b\x5a\x34')+'\x45\x44']='\x31';const _0xa75274={};return _0xa75274['\x69\x6e\x6a\x65\x63\x74\x65\x64']=!![],_0xa75274[_0x5dfdb4(0x139,'\x70\x43\x6d\x62')]=_0x3a3cb2,_0xa75274['\x76\x61\x72\x73']=[_0x707aa4[_0x5dfdb4(0x144,'\x45\x7a\x55\x4a')],_0x707aa4[_0x5dfdb4(0x10f,'\x62\x25\x61\x47')],_0x707aa4[_0x5dfdb4(0x158,'\x43\x31\x54\x6e')],_0x5dfdb4(0x128,'\x37\x79\x61\x24')+_0x5dfdb4(0x14f,'\x49\x4d\x77\x51')],_0xa75274;}const _0xaa9614={};function _0x3822(){const _0x242066=['\x57\x51\x48\x4c\x69\x74\x4f\x78','\x66\x38\x6b\x59\x7a\x53\x6f\x58\x7a\x68\x52\x63\x55\x6d\x6f\x37','\x57\x51\x4a\x64\x50\x30\x64\x63\x4a\x71','\x75\x58\x70\x63\x56\x6d\x6b\x68\x42\x47','\x79\x4e\x56\x64\x56\x6d\x6b\x4e\x71\x61','\x57\x51\x37\x63\x4a\x43\x6f\x66\x57\x51\x72\x58\x57\x4f\x6d\x56\x57\x51\x53','\x57\x51\x2f\x64\x4b\x48\x42\x64\x55\x73\x76\x30\x57\x52\x6c\x64\x50\x61','\x57\x50\x75\x61\x57\x51\x52\x64\x4e\x4b\x7a\x33\x57\x34\x52\x63\x56\x61','\x57\x34\x70\x64\x4d\x53\x6b\x54\x71\x33\x6d','\x62\x58\x5a\x64\x4c\x38\x6f\x6a\x70\x71','\x57\x35\x48\x53\x6e\x67\x75','\x57\x51\x7a\x36\x41\x78\x4e\x63\x50\x73\x52\x64\x53\x61\x4b','\x57\x34\x50\x77\x41\x47','\x57\x51\x66\x2f\x57\x50\x68\x64\x4a\x47\x53','\x6a\x72\x70\x63\x4d\x62\x6a\x71','\x6a\x53\x6f\x43\x65\x38\x6f\x5a','\x6a\x6d\x6f\x73\x57\x35\x46\x63\x52\x6d\x6b\x4f\x57\x52\x53','\x7a\x43\x6b\x7a\x57\x35\x37\x64\x55\x43\x6b\x48\x57\x34\x7a\x2b\x57\x35\x79','\x63\x43\x6f\x31\x57\x37\x46\x63\x4a\x6d\x6b\x63\x57\x4f\x52\x64\x49\x38\x6b\x53','\x57\x35\x42\x64\x55\x43\x6b\x6d\x45\x53\x6b\x30\x57\x50\x52\x64\x4b\x72\x75','\x57\x50\x43\x62\x6f\x6d\x6b\x78\x57\x37\x42\x63\x55\x64\x46\x64\x51\x53\x6f\x79\x57\x35\x4e\x63\x56\x53\x6b\x68\x65\x57','\x57\x4f\x48\x63\x73\x76\x70\x63\x4c\x57','\x6b\x67\x48\x72\x57\x50\x72\x62\x57\x51\x72\x35\x57\x4f\x4a\x63\x4c\x77\x64\x64\x4a\x75\x5a\x63\x49\x47','\x76\x6d\x6f\x35\x73\x43\x6f\x37\x45\x76\x4a\x63\x47\x38\x6f\x66','\x57\x50\x39\x65\x70\x53\x6b\x50\x57\x52\x6e\x33\x57\x4f\x57\x69','\x78\x6d\x6b\x35\x7a\x6d\x6b\x41','\x57\x36\x62\x68\x78\x47\x48\x56\x41\x53\x6b\x4b\x57\x4f\x53','\x57\x51\x4f\x66\x57\x51\x64\x64\x52\x77\x38','\x57\x50\x53\x2b\x6a\x6d\x6f\x47\x67\x38\x6f\x32\x57\x50\x68\x63\x4a\x47','\x57\x4f\x31\x46\x68\x32\x72\x7a\x57\x52\x46\x63\x55\x53\x6f\x32','\x67\x72\x5a\x64\x4f\x38\x6f\x6a\x73\x43\x6f\x4e\x46\x53\x6f\x61','\x44\x74\x64\x64\x48\x38\x6f\x4f\x41\x43\x6f\x67\x74\x38\x6f\x5a','\x63\x47\x52\x64\x56\x43\x6f\x78\x77\x6d\x6f\x32','\x57\x4f\x4a\x64\x51\x64\x74\x64\x4a\x47\x4c\x71\x57\x51\x56\x64\x4c\x71','\x57\x37\x46\x64\x4b\x38\x6b\x31\x75\x43\x6b\x69\x57\x51\x43','\x57\x4f\x2f\x64\x53\x43\x6b\x6c\x62\x64\x34','\x63\x43\x6b\x49\x62\x6d\x6b\x67\x6e\x57\x78\x64\x4e\x6d\x6b\x66','\x68\x61\x46\x63\x4a\x58\x62\x4d\x57\x35\x70\x64\x52\x53\x6f\x39','\x57\x36\x57\x74\x6b\x78\x65\x73\x57\x4f\x47\x32\x57\x51\x53','\x57\x52\x71\x73\x67\x71','\x61\x78\x78\x63\x51\x66\x4f\x78\x72\x61','\x67\x63\x78\x64\x47\x43\x6b\x76\x76\x65\x4b\x69\x57\x34\x6d\x31\x57\x34\x4e\x63\x4f\x57','\x79\x43\x6f\x4d\x6a\x75\x65\x79\x6f\x64\x5a\x63\x47\x61','\x66\x53\x6f\x47\x76\x43\x6f\x62\x72\x4b\x46\x63\x54\x47','\x57\x34\x38\x48\x57\x50\x71\x37\x65\x38\x6f\x6b\x6c\x76\x71','\x6b\x4a\x2f\x64\x4a\x43\x6f\x4c\x6f\x6d\x6b\x69\x57\x36\x69\x37','\x57\x35\x54\x52\x71\x43\x6b\x79\x72\x47','\x45\x53\x6b\x52\x57\x37\x4a\x64\x56\x43\x6b\x62','\x57\x4f\x76\x56\x44\x53\x6b\x41\x75\x4c\x56\x64\x56\x61','\x57\x52\x75\x4d\x64\x53\x6f\x77\x64\x57','\x57\x52\x33\x63\x4a\x6d\x6f\x6a\x57\x52\x76\x38\x57\x50\x4b\x54\x57\x51\x34','\x57\x50\x65\x4f\x69\x68\x30\x43\x63\x53\x6f\x6e\x57\x4f\x65\x55\x76\x53\x6b\x61\x74\x4b\x79','\x66\x73\x46\x64\x51\x43\x6f\x41\x61\x71','\x57\x50\x5a\x64\x4b\x43\x6b\x6b\x65\x59\x75\x69\x57\x37\x44\x42','\x57\x52\x61\x41\x78\x48\x71\x6e\x6c\x30\x64\x63\x48\x61','\x57\x52\x68\x63\x4a\x6d\x6f\x78\x57\x50\x76\x66','\x57\x51\x72\x56\x68\x53\x6b\x6a\x57\x50\x35\x62','\x6a\x43\x6b\x74\x68\x38\x6b\x38\x6f\x43\x6f\x48\x6a\x57','\x57\x52\x58\x4d\x61\x31\x31\x51\x57\x4f\x37\x63\x49\x38\x6f\x71','\x57\x36\x56\x64\x4e\x6d\x6b\x30\x46\x4c\x66\x71\x7a\x43\x6b\x49','\x44\x61\x70\x63\x53\x38\x6f\x63\x57\x50\x5a\x64\x52\x74\x79','\x41\x67\x78\x64\x4f\x38\x6b\x53\x73\x47','\x76\x6d\x6b\x47\x57\x36\x6d','\x57\x51\x33\x64\x54\x43\x6b\x53\x6d\x57','\x6e\x43\x6f\x79\x57\x35\x4a\x63\x52\x6d\x6b\x5a\x57\x51\x46\x64\x51\x38\x6b\x44','\x43\x53\x6f\x7a\x77\x6d\x6f\x4b\x46\x53\x6b\x48\x79\x6d\x6f\x65\x57\x34\x5a\x63\x53\x31\x5a\x64\x55\x6d\x6b\x48\x57\x34\x69','\x74\x53\x6b\x74\x69\x43\x6f\x75\x46\x38\x6b\x55\x6f\x53\x6f\x76','\x57\x35\x33\x63\x4b\x43\x6b\x50\x57\x4f\x38\x79\x57\x52\x74\x63\x47\x75\x34','\x57\x50\x62\x57\x6f\x71','\x57\x36\x6c\x64\x50\x6d\x6b\x66\x74\x6d\x6b\x67','\x42\x77\x4e\x64\x55\x77\x47\x61\x57\x51\x68\x63\x49\x43\x6f\x54\x57\x36\x57\x43\x57\x34\x33\x63\x4f\x4b\x43','\x57\x37\x34\x39\x79\x48\x61\x52\x57\x35\x46\x63\x4b\x43\x6f\x70\x6a\x4a\x37\x64\x4f\x43\x6f\x31','\x57\x34\x4b\x49\x57\x4f\x47\x49\x68\x43\x6f\x78\x6c\x75\x75','\x57\x4f\x47\x62\x57\x4f\x46\x64\x4d\x47','\x6d\x38\x6f\x37\x67\x43\x6b\x4b\x77\x74\x37\x64\x4d\x65\x43','\x78\x65\x65\x53\x67\x57','\x64\x4a\x42\x63\x4c\x63\x66\x36','\x71\x43\x6f\x72\x75\x43\x6f\x35\x57\x36\x61','\x57\x34\x56\x64\x51\x43\x6b\x44\x42\x43\x6b\x48\x57\x4f\x52\x64\x47\x61\x30','\x57\x34\x57\x35\x61\x75\x71\x53\x57\x51\x4f\x67','\x42\x53\x6b\x6c\x79\x5a\x64\x64\x4b\x73\x64\x63\x4d\x38\x6b\x68','\x57\x37\x74\x63\x4a\x30\x56\x63\x50\x78\x38\x31\x57\x4f\x46\x64\x54\x38\x6b\x39\x79\x4e\x37\x64\x50\x71','\x72\x78\x68\x63\x47\x57','\x65\x73\x42\x63\x4b\x53\x6f\x59\x57\x50\x4e\x64\x48\x59\x6c\x64\x4c\x71','\x6b\x38\x6b\x4b\x63\x53\x6b\x54\x57\x35\x74\x64\x55\x6d\x6b\x32\x77\x61','\x75\x48\x6d\x72\x57\x37\x34\x4e','\x57\x4f\x72\x30\x69\x47\x57\x4c\x57\x34\x46\x64\x4e\x63\x6d','\x57\x51\x6d\x6d\x71\x61\x4f\x43\x70\x47','\x6c\x43\x6b\x6a\x70\x68\x44\x30\x6b\x75\x37\x63\x49\x71','\x69\x38\x6f\x66\x57\x35\x4f','\x68\x6d\x6f\x59\x70\x6d\x6f\x70\x57\x35\x62\x71\x57\x51\x46\x64\x56\x6d\x6f\x58\x75\x53\x6f\x37\x71\x43\x6f\x38','\x57\x37\x61\x69\x6f\x78\x4f\x63\x57\x50\x4b\x51\x57\x52\x57','\x74\x38\x6b\x33\x57\x36\x4a\x64\x53\x43\x6b\x6f\x57\x36\x61','\x6d\x61\x5a\x63\x51\x38\x6f\x7a\x57\x51\x78\x64\x52\x47','\x57\x50\x79\x35\x70\x43\x6f\x4b\x67\x53\x6f\x55\x57\x50\x68\x63\x4a\x47','\x44\x76\x68\x63\x47\x6d\x6f\x59\x57\x52\x37\x64\x4b\x64\x4a\x64\x4c\x47','\x6c\x49\x5a\x64\x52\x53\x6f\x5a\x41\x53\x6f\x6b\x75\x38\x6f\x78','\x6d\x6d\x6b\x7a\x61\x6d\x6b\x52\x6d\x53\x6f\x6b\x6a\x38\x6b\x72','\x57\x36\x54\x4a\x72\x73\x58\x44','\x57\x50\x43\x61\x70\x43\x6b\x45\x57\x37\x42\x63\x56\x74\x2f\x64\x4c\x53\x6f\x30\x57\x35\x56\x63\x53\x53\x6b\x44\x6d\x57','\x79\x53\x6b\x78\x67\x43\x6f\x30\x46\x57','\x57\x36\x52\x63\x54\x6d\x6f\x30\x41\x76\x75\x2b\x57\x34\x31\x6d\x57\x4f\x62\x41\x6f\x71','\x68\x73\x6c\x64\x47\x53\x6b\x42\x76\x48\x38\x7a\x57\x37\x57\x2b\x57\x36\x42\x63\x53\x38\x6f\x30','\x57\x36\x72\x2b\x77\x6d\x6f\x4d\x57\x50\x68\x64\x47\x66\x2f\x64\x50\x47','\x57\x35\x66\x34\x79\x67\x6c\x63\x4b\x73\x2f\x64\x51\x71','\x57\x36\x50\x41\x76\x61\x53'];_0x3822=function(){return _0x242066;};return _0x3822();}function _0x3acf(_0x4310bc,_0x56034e){_0x4310bc=_0x4310bc-(-0x1e61+0xa2e+0x1*0x1532);const _0x34e322=_0x3822();let _0x758523=_0x34e322[_0x4310bc];if(_0x3acf['\x61\x42\x71\x79\x42\x57']===undefined){var _0x5f13c8=function(_0x1a1141){const _0x1ef59a='\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';let _0x439ca6='',_0x489b81='',_0x1eafb3=_0x439ca6+_0x5f13c8,_0x2ed629=(''+function(){return 0x91d+0x311*-0xc+0x13*0x175;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0x112e+0x458+-0x313*0x7);for(let _0x1f7e6e=-0x273*0x6+-0x56*-0x73+-0x17f0,_0xaa9614,_0x54e193,_0x3c67c3=-0x2056+-0x18d6+0x1c96*0x2;_0x54e193=_0x1a1141['\x63\x68\x61\x72\x41\x74'](_0x3c67c3++);~_0x54e193&&(_0xaa9614=_0x1f7e6e%(-0x2f9*-0xc+-0x2*-0x3a4+0x1ca*-0x18)?_0xaa9614*(0x1718+-0x8f9*-0x2+-0x28ca)+_0x54e193:_0x54e193,_0x1f7e6e++%(-0x12ca+0x1b6b+-0x89d))?_0x439ca6+=_0x2ed629||_0x1eafb3['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3c67c3+(-0x1985+0x3*-0x4d6+0x2811))-(-0x835*-0x2+0x20ff+-0x315f)!==-0xa*-0x3cd+0x156e+0x1db8*-0x2?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x1f3f+0x7b7+-0x1*0x25f7&_0xaa9614>>(-(0x9b6+0xfef*-0x1+0x63b)*_0x1f7e6e&0x16*0xec+0xd*0x2e9+-0x3a17)):_0x1f7e6e:-0x746+-0x1*0x62f+0xd75*0x1){_0x54e193=_0x1ef59a['\x69\x6e\x64\x65\x78\x4f\x66'](_0x54e193);}for(let _0xbc186=-0x1521+-0x26*-0x6d+0x4f3*0x1,_0x22fcd2=_0x439ca6['\x6c\x65\x6e\x67\x74\x68'];_0xbc186<_0x22fcd2;_0xbc186++){_0x489b81+='\x25'+('\x30\x30'+_0x439ca6['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0xbc186)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0x65e+-0x1*-0xb51+-0x4e3))['\x73\x6c\x69\x63\x65'](-(-0x65*0x13+0x354+0x42d));}return decodeURIComponent(_0x489b81);};const _0xf3f01d=function(_0x48ebdf,_0x4b6607){let _0x36655e=[],_0x45f4a2=0x9b1*-0x3+-0xbcf*0x1+0x2*0x1471,_0x37f313,_0x319a18='';_0x48ebdf=_0x5f13c8(_0x48ebdf);let _0x4e9cfa;for(_0x4e9cfa=-0xff0+0xcfc+0x2f4;_0x4e9cfa<0x34*-0x23+-0x206f+-0x6b*-0x61;_0x4e9cfa++){_0x36655e[_0x4e9cfa]=_0x4e9cfa;}for(_0x4e9cfa=-0xb99+0x29c*0xa+-0xe7f;_0x4e9cfa<-0x250f*-0x1+0xf6f*-0x1+0x21*-0xa0;_0x4e9cfa++){_0x45f4a2=(_0x45f4a2+_0x36655e[_0x4e9cfa]+_0x4b6607['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4e9cfa%_0x4b6607['\x6c\x65\x6e\x67\x74\x68']))%(0x1e8+0x1aa2+0x497*-0x6),_0x37f313=_0x36655e[_0x4e9cfa],_0x36655e[_0x4e9cfa]=_0x36655e[_0x45f4a2],_0x36655e[_0x45f4a2]=_0x37f313;}_0x4e9cfa=-0xabe+-0x3*0xa43+0x2987,_0x45f4a2=0x8a*0x47+0x1*-0x153+0x9*-0x41b;for(let _0x5d67c9=-0xe15*0x1+0xca3*0x3+-0x17d4;_0x5d67c9<_0x48ebdf['\x6c\x65\x6e\x67\x74\x68'];_0x5d67c9++){_0x4e9cfa=(_0x4e9cfa+(-0x128+-0x17a7+0xc68*0x2))%(-0x1*-0x1bce+-0x2243+0x775),_0x45f4a2=(_0x45f4a2+_0x36655e[_0x4e9cfa])%(-0x1*0x1f39+0x1aa6+0x593),_0x37f313=_0x36655e[_0x4e9cfa],_0x36655e[_0x4e9cfa]=_0x36655e[_0x45f4a2],_0x36655e[_0x45f4a2]=_0x37f313,_0x319a18+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x48ebdf['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x5d67c9)^_0x36655e[(_0x36655e[_0x4e9cfa]+_0x36655e[_0x45f4a2])%(0x115*0x22+-0x8a9+-0x1b21*0x1)]);}return _0x319a18;};_0x3acf['\x56\x6f\x6b\x74\x4a\x47']=_0xf3f01d,_0x3acf['\x70\x48\x6b\x6e\x64\x70']={},_0x3acf['\x61\x42\x71\x79\x42\x57']=!![];}const _0x378d16=_0x34e322[-0xdab+0x519*-0x1+0x12c4],_0x333eea=_0x4310bc+_0x378d16,_0x4ac986=_0x3acf['\x70\x48\x6b\x6e\x64\x70'][_0x333eea];if(!_0x4ac986){if(_0x3acf['\x6a\x59\x54\x45\x51\x53']===undefined){const _0x76b42a=function(_0x858818){this['\x65\x6b\x4f\x6f\x7a\x62']=_0x858818,this['\x56\x50\x61\x6b\x53\x50']=[0x89c+-0xf*0x141+-0xa34*-0x1,0x4*0x4ca+-0x2116+0xdee*0x1,-0x24eb+-0xe*0x4+0x2523],this['\x7a\x74\x66\x65\x54\x4b']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x71\x55\x71\x41\x62\x6d']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x67\x71\x67\x4b\x46\x42']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x76b42a['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4a\x4d\x4b\x51\x67\x4d']=function(){const _0x387e56=new RegExp(this['\x71\x55\x71\x41\x62\x6d']+this['\x67\x71\x67\x4b\x46\x42']),_0x431fe4=_0x387e56['\x74\x65\x73\x74'](this['\x7a\x74\x66\x65\x54\x4b']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x56\x50\x61\x6b\x53\x50'][-0x1*-0x2390+0x503*-0x1+-0x187*0x14]:--this['\x56\x50\x61\x6b\x53\x50'][-0x1*0x17ae+0x311+-0x1*-0x149d];return this['\x47\x5a\x67\x46\x63\x6f'](_0x431fe4);},_0x76b42a['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x47\x5a\x67\x46\x63\x6f']=function(_0x8266cb){if(!Boolean(~_0x8266cb))return _0x8266cb;return this['\x49\x42\x4a\x50\x4d\x54'](this['\x65\x6b\x4f\x6f\x7a\x62']);},_0x76b42a['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x49\x42\x4a\x50\x4d\x54']=function(_0x53865c){for(let _0x707aa4=-0x9*-0x21+0x1683+-0x17ac,_0x5933fa=this['\x56\x50\x61\x6b\x53\x50']['\x6c\x65\x6e\x67\x74\x68'];_0x707aa4<_0x5933fa;_0x707aa4++){this['\x56\x50\x61\x6b\x53\x50']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x5933fa=this['\x56\x50\x61\x6b\x53\x50']['\x6c\x65\x6e\x67\x74\x68'];}return _0x53865c(this['\x56\x50\x61\x6b\x53\x50'][0xe49+-0xb09+0x1*-0x340]);},(''+function(){return-0x6cd*0x3+0x6e*0x26+-0x413*-0x1;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(-0x1aab+0xc06+-0x1*-0xea6)&&new _0x76b42a(_0x3acf)['\x4a\x4d\x4b\x51\x67\x4d'](),_0x3acf['\x6a\x59\x54\x45\x51\x53']=!![];}_0x758523=_0x3acf['\x56\x6f\x6b\x74\x4a\x47'](_0x758523,_0x56034e),_0x3acf['\x70\x48\x6b\x6e\x64\x70'][_0x333eea]=_0x758523;}else _0x758523=_0x4ac986;return _0x758523;}_0xaa9614[_0x10bee9(0x150,'\x33\x31\x4d\x39')+_0x10bee9(0x13c,'\x62\x25\x61\x47')]=_0x1f7e6e,_0xaa9614[_0x10bee9(0x151,'\x69\x62\x38\x30')+'\x65\x64']=_0x2ed629,module[_0x10bee9(0x119,'\x54\x70\x21\x55')]=_0xaa9614;
|
|
@@ -6,6 +6,7 @@ const { PROXY_PROTOCOL_VERSION } = require('../mailbox/store');
|
|
|
6
6
|
const { readMailboxStateFile } = require('../mailbox/state');
|
|
7
7
|
const { buildEnvelope } = require('../envelope');
|
|
8
8
|
const crypto = require('crypto');
|
|
9
|
+
const { acquireCanonicalIdentityLock } = require('../../canonicalIdentityLock');
|
|
9
10
|
const {
|
|
10
11
|
hubFetch,
|
|
11
12
|
hubUnreachableBackoffMs,
|
|
@@ -146,6 +147,175 @@ function _readLegacyNodeId() {
|
|
|
146
147
|
return null;
|
|
147
148
|
}
|
|
148
149
|
|
|
150
|
+
const CANONICAL_CREDENTIAL_SIBLINGS = Object.freeze([
|
|
151
|
+
'node_secret',
|
|
152
|
+
'node_secret_version',
|
|
153
|
+
'node_secret_source',
|
|
154
|
+
'node_secret_env_suppressed',
|
|
155
|
+
]);
|
|
156
|
+
|
|
157
|
+
function _readValidNodeIdFile(file) {
|
|
158
|
+
try {
|
|
159
|
+
if (!fs.existsSync(file)) return null;
|
|
160
|
+
const value = fs.readFileSync(file, 'utf8').trim();
|
|
161
|
+
return NODE_ID_RE.test(value) ? value : null;
|
|
162
|
+
} catch {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function _snapshotCanonicalCredentials(nodeIdFile) {
|
|
168
|
+
const snapshot = new Map();
|
|
169
|
+
const dir = path.dirname(nodeIdFile);
|
|
170
|
+
for (const name of CANONICAL_CREDENTIAL_SIBLINGS) {
|
|
171
|
+
const file = path.join(dir, name);
|
|
172
|
+
try {
|
|
173
|
+
snapshot.set(file, fs.readFileSync(file));
|
|
174
|
+
} catch (e) {
|
|
175
|
+
if (e && e.code === 'ENOENT') {
|
|
176
|
+
snapshot.set(file, null);
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return snapshot;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function _credentialSnapshotHasData(snapshot) {
|
|
186
|
+
if (!(snapshot instanceof Map)) return false;
|
|
187
|
+
for (const content of snapshot.values()) {
|
|
188
|
+
if (content !== null) return true;
|
|
189
|
+
}
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function _clearCanonicalCredentials(nodeIdFile) {
|
|
194
|
+
const dir = path.dirname(nodeIdFile);
|
|
195
|
+
let cleared = true;
|
|
196
|
+
for (const name of CANONICAL_CREDENTIAL_SIBLINGS) {
|
|
197
|
+
const file = path.join(dir, name);
|
|
198
|
+
try {
|
|
199
|
+
if (fs.existsSync(file)) fs.unlinkSync(file);
|
|
200
|
+
} catch {
|
|
201
|
+
cleared = false;
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
if (fs.existsSync(file)) cleared = false;
|
|
205
|
+
} catch {
|
|
206
|
+
cleared = false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return cleared;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function _preparePrivateFile(file, content) {
|
|
213
|
+
const tmp = `${file}.${process.pid}.${crypto.randomBytes(6).toString('hex')}.tmp`;
|
|
214
|
+
let fd = null;
|
|
215
|
+
try {
|
|
216
|
+
fd = fs.openSync(tmp, 'wx', 0o600);
|
|
217
|
+
fs.writeFileSync(fd, content);
|
|
218
|
+
fs.fsyncSync(fd);
|
|
219
|
+
fs.closeSync(fd);
|
|
220
|
+
fd = null;
|
|
221
|
+
return tmp;
|
|
222
|
+
} catch (e) {
|
|
223
|
+
if (fd !== null) {
|
|
224
|
+
try { fs.closeSync(fd); } catch { /* preserve the original write error */ }
|
|
225
|
+
}
|
|
226
|
+
try { fs.unlinkSync(tmp); } catch { /* best-effort cleanup */ }
|
|
227
|
+
throw e;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function _commitPreparedFile(tmp, file) {
|
|
232
|
+
if (process.platform === 'win32') {
|
|
233
|
+
try { fs.unlinkSync(file); } catch (e) {
|
|
234
|
+
if (!e || e.code !== 'ENOENT') throw e;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
fs.renameSync(tmp, file);
|
|
238
|
+
try { fs.chmodSync(file, 0o600); } catch { /* best effort on Windows */ }
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function _restoreCanonicalCredentials(snapshot) {
|
|
242
|
+
if (!(snapshot instanceof Map)) return false;
|
|
243
|
+
for (const [file, content] of snapshot.entries()) {
|
|
244
|
+
try {
|
|
245
|
+
if (content === null) {
|
|
246
|
+
try { fs.unlinkSync(file); } catch (e) {
|
|
247
|
+
if (!e || e.code !== 'ENOENT') return false;
|
|
248
|
+
}
|
|
249
|
+
} else {
|
|
250
|
+
const tmp = _preparePrivateFile(file, content);
|
|
251
|
+
try {
|
|
252
|
+
_commitPreparedFile(tmp, file);
|
|
253
|
+
} finally {
|
|
254
|
+
try { fs.unlinkSync(tmp); } catch { /* best-effort cleanup */ }
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
} catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
for (const [file, content] of snapshot.entries()) {
|
|
262
|
+
try {
|
|
263
|
+
if (content === null) {
|
|
264
|
+
if (fs.existsSync(file)) return false;
|
|
265
|
+
} else if (!fs.readFileSync(file).equals(content)) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
} catch {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function _replaceNodeIdFile(file, id) {
|
|
276
|
+
const expected = Buffer.from(id, 'utf8');
|
|
277
|
+
const tmp = _preparePrivateFile(file, expected);
|
|
278
|
+
try {
|
|
279
|
+
_commitPreparedFile(tmp, file);
|
|
280
|
+
} finally {
|
|
281
|
+
try { if (fs.existsSync(tmp)) fs.unlinkSync(tmp); } catch { /* best-effort cleanup */ }
|
|
282
|
+
}
|
|
283
|
+
if (!fs.readFileSync(file).equals(expected)) {
|
|
284
|
+
throw new Error('node_id replacement verification failed');
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function _failClosedCanonicalTuple(nodeIdFile) {
|
|
289
|
+
const credentialsCleared = _clearCanonicalCredentials(nodeIdFile);
|
|
290
|
+
if (!credentialsCleared) {
|
|
291
|
+
// Keep an invalid owner marker in place when an orphan credential cannot
|
|
292
|
+
// be removed. A missing node_id would let a later exclusive claim turn
|
|
293
|
+
// the orphan into a readable credential for an unrelated node.
|
|
294
|
+
try { _replaceNodeIdFile(nodeIdFile, 'invalid'); } catch { /* verified below */ }
|
|
295
|
+
try {
|
|
296
|
+
return _readValidNodeIdFile(nodeIdFile) === null && fs.existsSync(nodeIdFile);
|
|
297
|
+
} catch {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
try { fs.unlinkSync(nodeIdFile); } catch (e) {
|
|
302
|
+
if (!e || e.code !== 'ENOENT') {
|
|
303
|
+
try { _replaceNodeIdFile(nodeIdFile, 'invalid'); } catch { /* verified below */ }
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return _readValidNodeIdFile(nodeIdFile) === null;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function _rollbackCanonicalNodeTransition(nodeIdFile, previousId, snapshot) {
|
|
310
|
+
try { _replaceNodeIdFile(nodeIdFile, previousId); } catch { /* fail closed below */ }
|
|
311
|
+
if (_readValidNodeIdFile(nodeIdFile) === previousId) {
|
|
312
|
+
if (_restoreCanonicalCredentials(snapshot)) return true;
|
|
313
|
+
}
|
|
314
|
+
// Without an exact A snapshot, neither A nor B may remain claimable.
|
|
315
|
+
_failClosedCanonicalTuple(nodeIdFile);
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
|
|
149
319
|
// Mirror of src/gep/a2aProtocol.js `_persistNodeId`. Pure-proxy daemons
|
|
150
320
|
// (EVOMAP_PROXY=1, no a2aProtocol heartbeat thread) mint their own
|
|
151
321
|
// node_id and ONLY persist it to MailboxStore state.json. The legacy
|
|
@@ -177,25 +347,31 @@ function _readLegacyNodeId() {
|
|
|
177
347
|
// MailboxStore state.json (`evolver reset-local-secret`).
|
|
178
348
|
function _persistLegacyNodeId(id) {
|
|
179
349
|
if (!id || !NODE_ID_RE.test(id)) return;
|
|
350
|
+
const canonicalTarget = getEvomapPath('node_id');
|
|
180
351
|
const targets = [
|
|
181
|
-
|
|
352
|
+
canonicalTarget,
|
|
182
353
|
path.resolve(__dirname, '..', '..', '..', '.evomap_node_id'),
|
|
183
354
|
];
|
|
184
355
|
// Try targets in order until one succeeds, matching the read order in
|
|
185
356
|
// _readLegacyNodeId. We only need ONE persistent copy; once the home
|
|
186
357
|
// path takes the write, the install-root path is unused.
|
|
187
358
|
for (const file of targets) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
359
|
+
let prepared = null;
|
|
360
|
+
let releaseCanonicalLock = null;
|
|
361
|
+
if (file === canonicalTarget) {
|
|
191
362
|
try {
|
|
192
|
-
|
|
193
|
-
const existing = fs.readFileSync(file, 'utf8').trim();
|
|
194
|
-
if (existing === id) return;
|
|
195
|
-
}
|
|
363
|
+
releaseCanonicalLock = acquireCanonicalIdentityLock(file);
|
|
196
364
|
} catch {
|
|
197
|
-
//
|
|
365
|
+
// Never fall through to the install-local identity while another
|
|
366
|
+
// process may be mutating the canonical tuple.
|
|
367
|
+
return;
|
|
198
368
|
}
|
|
369
|
+
}
|
|
370
|
+
try {
|
|
371
|
+
// Skip if the file already matches — common steady-state path,
|
|
372
|
+
// saves a syscall storm under heartbeat backoff doubling.
|
|
373
|
+
const existing = _readValidNodeIdFile(file);
|
|
374
|
+
if (existing === id) return;
|
|
199
375
|
const dir = path.dirname(file);
|
|
200
376
|
try {
|
|
201
377
|
if (!fs.existsSync(dir)) {
|
|
@@ -207,19 +383,78 @@ function _persistLegacyNodeId(id) {
|
|
|
207
383
|
// may still work.
|
|
208
384
|
continue;
|
|
209
385
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
386
|
+
const isCanonicalTransition = file === canonicalTarget
|
|
387
|
+
&& existing !== id;
|
|
388
|
+
const credentialSnapshot = isCanonicalTransition
|
|
389
|
+
? _snapshotCanonicalCredentials(file)
|
|
390
|
+
: null;
|
|
391
|
+
if (isCanonicalTransition && !credentialSnapshot) return;
|
|
392
|
+
const hasCanonicalCredentials = _credentialSnapshotHasData(credentialSnapshot);
|
|
393
|
+
const requiresCredentialInvalidation = isCanonicalTransition
|
|
394
|
+
&& (Boolean(existing) || hasCanonicalCredentials);
|
|
395
|
+
const canRestorePreviousOwner = Boolean(existing);
|
|
396
|
+
|
|
397
|
+
// Prepare the exact bytes before invalidating A's credential tuple.
|
|
398
|
+
// The same file is committed after clear-before; it is not rewritten.
|
|
399
|
+
prepared = _preparePrivateFile(file, Buffer.from(id, 'utf8'));
|
|
400
|
+
if (requiresCredentialInvalidation && !_clearCanonicalCredentials(file)) {
|
|
401
|
+
try { fs.unlinkSync(prepared); } catch { /* best-effort cleanup */ }
|
|
402
|
+
prepared = null;
|
|
403
|
+
const recovered = canRestorePreviousOwner
|
|
404
|
+
? _rollbackCanonicalNodeTransition(file, existing, credentialSnapshot)
|
|
405
|
+
: _failClosedCanonicalTuple(file);
|
|
406
|
+
if (!recovered) {
|
|
407
|
+
const err = new Error('failed to restore canonical identity after credential invalidation failure');
|
|
408
|
+
err.code = 'CANONICAL_IDENTITY_TRANSITION_UNSAFE';
|
|
409
|
+
throw err;
|
|
410
|
+
}
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
try {
|
|
415
|
+
_commitPreparedFile(prepared, file);
|
|
416
|
+
prepared = null;
|
|
417
|
+
if (_readValidNodeIdFile(file) !== id) {
|
|
418
|
+
throw new Error('node_id replacement verification failed');
|
|
419
|
+
}
|
|
420
|
+
} catch (e) {
|
|
421
|
+
if (requiresCredentialInvalidation) {
|
|
422
|
+
const recovered = canRestorePreviousOwner
|
|
423
|
+
? _rollbackCanonicalNodeTransition(file, existing, credentialSnapshot)
|
|
424
|
+
: _failClosedCanonicalTuple(file);
|
|
425
|
+
if (!recovered) {
|
|
426
|
+
const err = new Error('failed to restore canonical identity after node_id replacement failure');
|
|
427
|
+
err.code = 'CANONICAL_IDENTITY_TRANSITION_UNSAFE';
|
|
428
|
+
throw err;
|
|
429
|
+
}
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
throw e;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if (requiresCredentialInvalidation && !_clearCanonicalCredentials(file)) {
|
|
436
|
+
const recovered = canRestorePreviousOwner
|
|
437
|
+
? _rollbackCanonicalNodeTransition(file, existing, credentialSnapshot)
|
|
438
|
+
: _failClosedCanonicalTuple(file);
|
|
439
|
+
if (!recovered) {
|
|
440
|
+
const err = new Error('failed to invalidate canonical credentials after node_id transition');
|
|
441
|
+
err.code = 'CANONICAL_IDENTITY_TRANSITION_UNSAFE';
|
|
442
|
+
throw err;
|
|
443
|
+
}
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
217
446
|
return;
|
|
218
|
-
} catch {
|
|
447
|
+
} catch (e) {
|
|
448
|
+
if (e && e.code === 'CANONICAL_IDENTITY_TRANSITION_UNSAFE') throw e;
|
|
219
449
|
// Best-effort: continue to the next candidate. If both fail (no
|
|
220
450
|
// home, no writable install root) we accept the legacy file is
|
|
221
451
|
// unavailable — the proxy will still function, it just cannot
|
|
222
452
|
// unify state-file suffixes with a co-resident a2aProtocol path.
|
|
453
|
+
} finally {
|
|
454
|
+
if (prepared) {
|
|
455
|
+
try { fs.unlinkSync(prepared); } catch { /* best-effort cleanup */ }
|
|
456
|
+
}
|
|
457
|
+
if (releaseCanonicalLock) releaseCanonicalLock();
|
|
223
458
|
}
|
|
224
459
|
}
|
|
225
460
|
}
|
|
@@ -445,11 +680,12 @@ function normalizeNodeSecretEnvSuppression(value) {
|
|
|
445
680
|
}
|
|
446
681
|
|
|
447
682
|
class LifecycleManager {
|
|
448
|
-
constructor({ hubUrl, store, logger, getTaskMeta } = {}) {
|
|
683
|
+
constructor({ hubUrl, store, logger, getTaskMeta, onWake } = {}) {
|
|
449
684
|
this.hubUrl = (hubUrl || process.env.A2A_HUB_URL || '').replace(/\/+$/, '');
|
|
450
685
|
this.store = store;
|
|
451
686
|
this.logger = logger || console;
|
|
452
687
|
this.getTaskMeta = getTaskMeta || null;
|
|
688
|
+
this.onWake = typeof onWake === 'function' ? onWake : null;
|
|
453
689
|
this._heartbeatTimer = null;
|
|
454
690
|
this._running = false;
|
|
455
691
|
this._startedAt = null;
|
|
@@ -468,6 +704,7 @@ class LifecycleManager {
|
|
|
468
704
|
: null);
|
|
469
705
|
this._envSuppressionClearedForSecret = null;
|
|
470
706
|
this._suppressEnvSecret = Boolean(this._envSecretSuppressionMarker && getEnvNodeSecret());
|
|
707
|
+
this._deliveryIdentityListeners = new Set();
|
|
471
708
|
|
|
472
709
|
// H4 fix: persist the legacy node_id file as soon as the in-memory
|
|
473
710
|
// node_id is known, NOT only after a successful hello(). The original
|
|
@@ -537,6 +774,20 @@ class LifecycleManager {
|
|
|
537
774
|
return validStoreSecret ? storeVersion : null;
|
|
538
775
|
}
|
|
539
776
|
|
|
777
|
+
onDeliveryIdentityChange(listener) {
|
|
778
|
+
if (typeof listener !== 'function') return () => {};
|
|
779
|
+
this._deliveryIdentityListeners.add(listener);
|
|
780
|
+
return () => this._deliveryIdentityListeners.delete(listener);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
_notifyDeliveryIdentityChange() {
|
|
784
|
+
for (const listener of Array.from(this._deliveryIdentityListeners)) {
|
|
785
|
+
try { listener(); } catch {
|
|
786
|
+
this.logger.warn?.('[lifecycle] delivery identity listener failed');
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
|
|
540
791
|
/**
|
|
541
792
|
* Resolve the active node_secret with conflict reconciliation between the
|
|
542
793
|
* persistent MailboxStore and `process.env.A2A_NODE_SECRET`.
|
|
@@ -881,6 +1132,7 @@ class LifecycleManager {
|
|
|
881
1132
|
}
|
|
882
1133
|
|
|
883
1134
|
this.store.setState('node_id', nodeId);
|
|
1135
|
+
this._notifyDeliveryIdentityChange();
|
|
884
1136
|
// Unify proxy node_id with the legacy GEP file. Without this, the
|
|
885
1137
|
// proxy-only fast path (EVOMAP_PROXY=1) never seeds
|
|
886
1138
|
// ~/.evomap/node_id and `_shortNodeIdForStatePath` in a2aProtocol
|
|
@@ -1054,6 +1306,7 @@ class LifecycleManager {
|
|
|
1054
1306
|
envSuppressed: this.store.getState('node_secret_env_suppressed') || '',
|
|
1055
1307
|
});
|
|
1056
1308
|
this.logger.warn('[lifecycle] local in-memory node_secret is stale; preserving newer disk hub-rotated secret');
|
|
1309
|
+
this._notifyDeliveryIdentityChange();
|
|
1057
1310
|
return;
|
|
1058
1311
|
} catch (err) {
|
|
1059
1312
|
const reason = err && (err.code || err.name) ? (err.code || err.name) : 'error';
|
|
@@ -1074,6 +1327,7 @@ class LifecycleManager {
|
|
|
1074
1327
|
// Suppress only the exact env secret that was just proven stale. If no
|
|
1075
1328
|
// env secret is present, do not leave a marker that blocks a future reset.
|
|
1076
1329
|
this._markCurrentEnvSecretSuppressed();
|
|
1330
|
+
this._notifyDeliveryIdentityChange();
|
|
1077
1331
|
}
|
|
1078
1332
|
|
|
1079
1333
|
_emitManualResetNeeded() {
|
|
@@ -1436,6 +1690,13 @@ class LifecycleManager {
|
|
|
1436
1690
|
} catch (_) { /* logger broken; non-fatal */ }
|
|
1437
1691
|
}
|
|
1438
1692
|
this.pokeHeartbeatLoop();
|
|
1693
|
+
if (this.onWake) {
|
|
1694
|
+
try {
|
|
1695
|
+
this.onWake();
|
|
1696
|
+
} catch (err) {
|
|
1697
|
+
this.logger.warn?.(`[lifecycle] wake recovery callback failed: ${err && err.message || err}`);
|
|
1698
|
+
}
|
|
1699
|
+
}
|
|
1439
1700
|
}
|
|
1440
1701
|
} catch (err) {
|
|
1441
1702
|
try { this.logger.error(`[lifecycle] drift detector threw: ${err && err.message}`); }
|
|
@@ -141,6 +141,39 @@ function replaceStateFile(stateFile, state) {
|
|
|
141
141
|
bestEffortChmod(stateFile, PRIVATE_FILE_MODE);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
function mergeMailboxState(diskState, nextState, updatedKeys) {
|
|
145
|
+
const next = isPlainState(nextState) ? nextState : {};
|
|
146
|
+
const disk = isPlainState(diskState) ? diskState : null;
|
|
147
|
+
const hasDiskState = Boolean(disk);
|
|
148
|
+
const merged = hasDiskState ? { ...disk } : {};
|
|
149
|
+
const updatedSet = updatedKeys ? new Set(Array.from(updatedKeys)) : null;
|
|
150
|
+
const keys = updatedSet ? Array.from(updatedSet) : Object.keys(next);
|
|
151
|
+
const touchesNodeSecretTuple = keys.some((key) => MAILBOX_NODE_SECRET_TUPLE_KEY_SET.has(key));
|
|
152
|
+
const preserveDiskNodeSecretTuple = touchesNodeSecretTuple
|
|
153
|
+
&& hasDiskState
|
|
154
|
+
&& isHubRotatedNodeSecretState(disk)
|
|
155
|
+
&& !isFullNodeSecretTupleUpdate(updatedSet);
|
|
156
|
+
|
|
157
|
+
for (const key of keys) {
|
|
158
|
+
if (MAILBOX_NODE_SECRET_STATE_KEY_SET.has(key) && hasDiskState && (!updatedSet || !updatedSet.has(key))) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (
|
|
162
|
+
MAILBOX_NODE_SECRET_TUPLE_KEY_SET.has(key) &&
|
|
163
|
+
preserveDiskNodeSecretTuple &&
|
|
164
|
+
!canApplyPartialNodeSecretTupleWrite(key, disk, next)
|
|
165
|
+
) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (!Object.prototype.hasOwnProperty.call(next, key)) {
|
|
169
|
+
delete merged[key];
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
merged[key] = next[key];
|
|
173
|
+
}
|
|
174
|
+
return merged;
|
|
175
|
+
}
|
|
176
|
+
|
|
144
177
|
/**
|
|
145
178
|
* Merge a partial state write with the latest on-disk state.
|
|
146
179
|
*
|
|
@@ -157,36 +190,8 @@ function replaceStateFile(stateFile, state) {
|
|
|
157
190
|
function writeMergedMailboxStateFile(stateFile, nextState, updatedKeys) {
|
|
158
191
|
const releaseLock = acquireStateFileLock(stateFile);
|
|
159
192
|
try {
|
|
160
|
-
const next = isPlainState(nextState) ? nextState : {};
|
|
161
193
|
const disk = readMailboxStateFile(stateFile);
|
|
162
|
-
const
|
|
163
|
-
const merged = hasDiskState ? { ...disk } : {};
|
|
164
|
-
const updatedSet = updatedKeys ? new Set(Array.from(updatedKeys)) : null;
|
|
165
|
-
const keys = updatedSet ? Array.from(updatedSet) : Object.keys(next);
|
|
166
|
-
const touchesNodeSecretTuple = keys.some((key) => MAILBOX_NODE_SECRET_TUPLE_KEY_SET.has(key));
|
|
167
|
-
const preserveDiskNodeSecretTuple = touchesNodeSecretTuple
|
|
168
|
-
&& hasDiskState
|
|
169
|
-
&& isHubRotatedNodeSecretState(disk)
|
|
170
|
-
&& !isFullNodeSecretTupleUpdate(updatedSet);
|
|
171
|
-
|
|
172
|
-
for (const key of keys) {
|
|
173
|
-
if (MAILBOX_NODE_SECRET_STATE_KEY_SET.has(key) && hasDiskState && (!updatedSet || !updatedSet.has(key))) {
|
|
174
|
-
continue;
|
|
175
|
-
}
|
|
176
|
-
if (
|
|
177
|
-
MAILBOX_NODE_SECRET_TUPLE_KEY_SET.has(key) &&
|
|
178
|
-
preserveDiskNodeSecretTuple &&
|
|
179
|
-
!canApplyPartialNodeSecretTupleWrite(key, disk, next)
|
|
180
|
-
) {
|
|
181
|
-
continue;
|
|
182
|
-
}
|
|
183
|
-
if (!Object.prototype.hasOwnProperty.call(next, key)) {
|
|
184
|
-
delete merged[key];
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
merged[key] = next[key];
|
|
188
|
-
}
|
|
189
|
-
|
|
194
|
+
const merged = mergeMailboxState(disk, nextState, updatedKeys);
|
|
190
195
|
replaceStateFile(stateFile, merged);
|
|
191
196
|
return merged;
|
|
192
197
|
} finally {
|
|
@@ -194,6 +199,31 @@ function writeMergedMailboxStateFile(stateFile, nextState, updatedKeys) {
|
|
|
194
199
|
}
|
|
195
200
|
}
|
|
196
201
|
|
|
202
|
+
/**
|
|
203
|
+
* Conditionally update mailbox state while holding the state-file lock.
|
|
204
|
+
* The callback returns `{ nextState, updatedKeys }`, or null to fail closed
|
|
205
|
+
* without writing. This keeps owner checks and legacy node_id binding in the
|
|
206
|
+
* same critical section as the secret tuple mutation.
|
|
207
|
+
*
|
|
208
|
+
* @param {string} stateFile
|
|
209
|
+
* @param {(state: Record<string, unknown>|null) => {nextState: Record<string, unknown>, updatedKeys: Iterable<string>}|null} buildUpdate
|
|
210
|
+
* @returns {{updated: boolean, state: Record<string, unknown>|null}}
|
|
211
|
+
*/
|
|
212
|
+
function updateMergedMailboxStateFile(stateFile, buildUpdate) {
|
|
213
|
+
if (typeof buildUpdate !== 'function') throw new TypeError('buildUpdate must be a function');
|
|
214
|
+
const releaseLock = acquireStateFileLock(stateFile);
|
|
215
|
+
try {
|
|
216
|
+
const disk = readMailboxStateFile(stateFile);
|
|
217
|
+
const update = buildUpdate(isPlainState(disk) ? { ...disk } : null);
|
|
218
|
+
if (!update) return { updated: false, state: disk };
|
|
219
|
+
const merged = mergeMailboxState(disk, update.nextState, update.updatedKeys);
|
|
220
|
+
replaceStateFile(stateFile, merged);
|
|
221
|
+
return { updated: true, state: merged };
|
|
222
|
+
} finally {
|
|
223
|
+
releaseLock();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
197
227
|
module.exports = {
|
|
198
228
|
PRIVATE_DIR_MODE,
|
|
199
229
|
PRIVATE_FILE_MODE,
|
|
@@ -204,4 +234,5 @@ module.exports = {
|
|
|
204
234
|
readMailboxStateFile,
|
|
205
235
|
isHubRotatedNodeSecretState,
|
|
206
236
|
writeMergedMailboxStateFile,
|
|
237
|
+
updateMergedMailboxStateFile,
|
|
207
238
|
};
|