@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.
Files changed (73) hide show
  1. package/index.js +150 -71
  2. package/package.json +2 -1
  3. package/src/canonicalIdentityLock.js +455 -0
  4. package/src/evolve/guards.js +1 -1
  5. package/src/evolve/pipeline/collect.js +1 -1
  6. package/src/evolve/pipeline/dispatch.js +1 -1
  7. package/src/evolve/pipeline/enrich.js +1 -1
  8. package/src/evolve/pipeline/hub.js +1 -1
  9. package/src/evolve/pipeline/select.js +1 -1
  10. package/src/evolve/pipeline/signals.js +1 -1
  11. package/src/evolve/utils.js +1 -1
  12. package/src/evolve.js +1 -1
  13. package/src/gep/a2aProtocol.js +1 -1
  14. package/src/gep/antiAbuseTelemetry.js +1 -1
  15. package/src/gep/assetStore.js +56 -11
  16. package/src/gep/autoDistillConv.js +1 -1
  17. package/src/gep/autoDistillLlm.js +1 -1
  18. package/src/gep/candidateEval.js +1 -1
  19. package/src/gep/candidates.js +1 -1
  20. package/src/gep/contentHash.js +1 -1
  21. package/src/gep/conversationDistiller.js +1 -1
  22. package/src/gep/conversationSniffer.js +1 -1
  23. package/src/gep/crypto.js +1 -1
  24. package/src/gep/curriculum.js +1 -1
  25. package/src/gep/deviceId.js +1 -1
  26. package/src/gep/envFingerprint.js +1 -1
  27. package/src/gep/epigenetics.js +1 -1
  28. package/src/gep/execBridge.js +1 -1
  29. package/src/gep/explore.js +1 -1
  30. package/src/gep/hash.js +1 -1
  31. package/src/gep/hubFetch.js +1 -1
  32. package/src/gep/hubReview.js +1 -1
  33. package/src/gep/hubSearch.js +1 -1
  34. package/src/gep/hubVerify.js +1 -1
  35. package/src/gep/learningSignals.js +1 -1
  36. package/src/gep/memoryGraph.js +1 -1
  37. package/src/gep/memoryGraphAdapter.js +1 -1
  38. package/src/gep/mutation.js +1 -1
  39. package/src/gep/narrativeMemory.js +1 -1
  40. package/src/gep/openPRRegistry.js +1 -1
  41. package/src/gep/personality.js +1 -1
  42. package/src/gep/policyCheck.js +1 -1
  43. package/src/gep/prompt.js +1 -1
  44. package/src/gep/recallInject.js +1 -1
  45. package/src/gep/recallVerifier.js +1 -1
  46. package/src/gep/reflection.js +1 -1
  47. package/src/gep/savingsCore.js +1 -1
  48. package/src/gep/schemas/gene.js +2 -0
  49. package/src/gep/selector.js +1 -1
  50. package/src/gep/skillDistiller.js +1 -1
  51. package/src/gep/solidify.js +1 -1
  52. package/src/gep/strategy.js +1 -1
  53. package/src/gep/syncAsset.js +1 -0
  54. package/src/gep/tokenSavings.js +1 -1
  55. package/src/gep/trajectoryExport.js +1 -1
  56. package/src/gep/workspaceKeychain.js +1 -1
  57. package/src/proxy/extensions/traceControl.js +1 -1
  58. package/src/proxy/index.js +136 -8
  59. package/src/proxy/inject.js +1 -1
  60. package/src/proxy/lifecycle/manager.js +279 -18
  61. package/src/proxy/mailbox/state.js +60 -29
  62. package/src/proxy/trace/extractor.js +1 -1
  63. package/src/proxy/trace/usage.js +1 -1
  64. package/src/webui/client/clientJs/bootstrap.js +6 -0
  65. package/src/webui/client/clientJs/github.js +225 -0
  66. package/src/webui/client/clientJs/i18n.js +14 -0
  67. package/src/webui/client/clientJs/index.js +3 -0
  68. package/src/webui/client/clientJs/pipelines.js +3 -1
  69. package/src/webui/client/indexHtml.js +10 -0
  70. package/src/webui/client/stylesCss.js +61 -0
  71. package/src/webui/observer/github.js +340 -0
  72. package/src/webui/observer/index.js +4 -0
  73. package/src/webui/server/routes.js +11 -0
@@ -1 +1 @@
1
- const _0x57c22f=_0x48ef;(function(_0x5b309e,_0x168415){const _0x4ce01e=_0x48ef,_0x149327=_0x5b309e();while(!![]){try{const _0x1a34f2=-parseInt(_0x4ce01e(0x186,'\x51\x44\x5e\x6a'))/(0x2*0xd8e+0x1*-0x12da+-0x841)+parseInt(_0x4ce01e(0x15f,'\x39\x66\x66\x4b'))/(0x7*-0x3f9+-0xd86+0x2957)+parseInt(_0x4ce01e(0x17d,'\x39\x66\x66\x4b'))/(0x25b5+-0x2*-0xb41+-0x3c34)+-parseInt(_0x4ce01e(0x13d,'\x69\x63\x5d\x23'))/(-0x1474+-0xe64+0x61*0x5c)+-parseInt(_0x4ce01e(0x150,'\x40\x61\x79\x61'))/(0x74f+-0x1952+-0x8*-0x241)+-parseInt(_0x4ce01e(0x15c,'\x76\x71\x4d\x5e'))/(-0x1f2e+0x1*-0x2309+-0x223*-0x1f)+-parseInt(_0x4ce01e(0x12e,'\x4e\x45\x23\x58'))/(-0x14bc+0x1917+-0x454)*(-parseInt(_0x4ce01e(0x126,'\x66\x59\x74\x42'))/(0x1*0x157+-0x141*0x11+0x1a*0xc5));if(_0x1a34f2===_0x168415)break;else _0x149327['push'](_0x149327['shift']());}catch(_0x44a12e){_0x149327['push'](_0x149327['shift']());}}}(_0x42e5,-0xb5ed4+-0x3*-0x41c31+0x71d25*0x1));const _0x4ece08=(function(){let _0x2e1fd7=!![];return function(_0x2e2a5b,_0x58d2bf){const _0x5b3e38=_0x2e1fd7?function(){const _0xffe348=_0x48ef;if(_0x58d2bf){const _0x3af2f6=_0x58d2bf[_0xffe348(0x168,'\x46\x64\x66\x6a')](_0x2e2a5b,arguments);return _0x58d2bf=null,_0x3af2f6;}}:function(){};return _0x2e1fd7=![],_0x5b3e38;};}()),_0x42bd7c=_0x4ece08(this,function(){const _0x5d286f=_0x48ef,_0x39464f={};_0x39464f[_0x5d286f(0x161,'\x79\x53\x64\x35')]=_0x5d286f(0x16a,'\x37\x38\x7a\x48')+'\x2b\x29\x2b\x24';const _0xc937=_0x39464f;return _0x42bd7c[_0x5d286f(0x163,'\x4b\x33\x32\x62')]()[_0x5d286f(0x149,'\x75\x36\x54\x70')](_0xc937[_0x5d286f(0x13e,'\x77\x73\x34\x51')])[_0x5d286f(0x12f,'\x29\x57\x4b\x5b')]()['\x63\x6f\x6e\x73\x74\x72\x75\x63'+'\x74\x6f\x72'](_0x42bd7c)[_0x5d286f(0x125,'\x6c\x53\x6c\x34')](_0xc937[_0x5d286f(0x16e,'\x6d\x5a\x56\x46')]);});_0x42bd7c();function _0x48ef(_0x3a90a4,_0x25b6d0){_0x3a90a4=_0x3a90a4-(-0x3*0xabd+-0x518*-0x1+0x24*0xc9);const _0x25f744=_0x42e5();let _0x120751=_0x25f744[_0x3a90a4];if(_0x48ef['\x44\x74\x6f\x53\x70\x7a']===undefined){var _0x4e7593=function(_0x18d10f){const _0x4a5d0e='\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 _0x3e693e='',_0xd56d3d='',_0x36b180=_0x3e693e+_0x4e7593,_0x2f089b=(''+function(){return-0x44b+0x23cd+-0x1f82;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x26ae*-0x1+0x3*0xce0+-0x4d4d);for(let _0x4461c1=-0x99c+0xa57*0x2+0xd*-0xda,_0x4f971f,_0x1eed6e,_0x2770af=0x1488+0x17af*-0x1+-0x327*-0x1;_0x1eed6e=_0x18d10f['\x63\x68\x61\x72\x41\x74'](_0x2770af++);~_0x1eed6e&&(_0x4f971f=_0x4461c1%(-0x1*-0x15d3+0x2*0x84f+-0x266d*0x1)?_0x4f971f*(-0xa4+-0x2458+0x253c)+_0x1eed6e:_0x1eed6e,_0x4461c1++%(-0x5*-0x113+0xd15+-0x49c*0x4))?_0x3e693e+=_0x2f089b||_0x36b180['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x2770af+(-0x1bf9+-0x6cf+0x22d2))-(0xbb1+0x1937*-0x1+0xd90)!==0x127a+0x2317+0x11db*-0x3?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0xdcd+-0x4da+-0x5*-0x3ee&_0x4f971f>>(-(0x13d*-0x14+-0x1255+0x1*0x2b1b)*_0x4461c1&0x595*0x3+-0x11*0x85+-0x7e4)):_0x4461c1:0x18*0x6d+0x9be+0x2*-0x9fb){_0x1eed6e=_0x4a5d0e['\x69\x6e\x64\x65\x78\x4f\x66'](_0x1eed6e);}for(let _0x5e949e=-0x1cff+-0x228d+-0x4*-0xfe3,_0x5e9f8f=_0x3e693e['\x6c\x65\x6e\x67\x74\x68'];_0x5e949e<_0x5e9f8f;_0x5e949e++){_0xd56d3d+='\x25'+('\x30\x30'+_0x3e693e['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x5e949e)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0x721*0x5+0x33d*0x1+0x2078))['\x73\x6c\x69\x63\x65'](-(-0x1*-0x1cfb+-0x21f0+-0x1f*-0x29));}return decodeURIComponent(_0xd56d3d);};const _0x162c02=function(_0x4b0fb6,_0x4c1836){let _0x536bfd=[],_0x1d79e0=-0x31*-0x59+-0x1*-0xa63+-0x1b6c,_0x19927f,_0x18064b='';_0x4b0fb6=_0x4e7593(_0x4b0fb6);let _0x34dba9;for(_0x34dba9=-0x2406+-0x33*0x25+0x211*0x15;_0x34dba9<0xf95*0x1+0x7d0+0x1b9*-0xd;_0x34dba9++){_0x536bfd[_0x34dba9]=_0x34dba9;}for(_0x34dba9=0x103+0x1799+0x1a4*-0xf;_0x34dba9<-0x11ef+0x419*0x6+-0x5a7;_0x34dba9++){_0x1d79e0=(_0x1d79e0+_0x536bfd[_0x34dba9]+_0x4c1836['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x34dba9%_0x4c1836['\x6c\x65\x6e\x67\x74\x68']))%(-0x1d3*-0x1+0xec1+-0xf94),_0x19927f=_0x536bfd[_0x34dba9],_0x536bfd[_0x34dba9]=_0x536bfd[_0x1d79e0],_0x536bfd[_0x1d79e0]=_0x19927f;}_0x34dba9=-0x1b2a+0x1*0x672+0x44*0x4e,_0x1d79e0=0x13f4+0x4db+-0x18cf;for(let _0x35756f=0xb54+-0x2*0x8ad+0x6*0x101;_0x35756f<_0x4b0fb6['\x6c\x65\x6e\x67\x74\x68'];_0x35756f++){_0x34dba9=(_0x34dba9+(-0x297*0x1+0x25*0x31+-0x47d))%(0x1*-0x1efe+-0x841*-0x1+-0x3b*-0x67),_0x1d79e0=(_0x1d79e0+_0x536bfd[_0x34dba9])%(-0x469*-0x1+-0x2*-0xb6b+-0x1a3f),_0x19927f=_0x536bfd[_0x34dba9],_0x536bfd[_0x34dba9]=_0x536bfd[_0x1d79e0],_0x536bfd[_0x1d79e0]=_0x19927f,_0x18064b+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x4b0fb6['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x35756f)^_0x536bfd[(_0x536bfd[_0x34dba9]+_0x536bfd[_0x1d79e0])%(0x10b9+-0xdfa*0x1+-0x1bf)]);}return _0x18064b;};_0x48ef['\x62\x72\x49\x78\x4c\x76']=_0x162c02,_0x48ef['\x44\x64\x6d\x47\x6f\x69']={},_0x48ef['\x44\x74\x6f\x53\x70\x7a']=!![];}const _0x4f5dd4=_0x25f744[0x2*-0x709+-0xf47*-0x1+-0x67*0x3],_0x8b271c=_0x3a90a4+_0x4f5dd4,_0x3a4d13=_0x48ef['\x44\x64\x6d\x47\x6f\x69'][_0x8b271c];if(!_0x3a4d13){if(_0x48ef['\x61\x63\x72\x42\x71\x66']===undefined){const _0x3e26e0=function(_0x5639ff){this['\x4f\x75\x44\x4e\x4d\x73']=_0x5639ff,this['\x47\x57\x55\x6a\x61\x63']=[0xd3*-0x4+-0xa9*0x1+0x3f6,0x19c9+-0x68b+-0x133e,0x1485+-0x12e+-0x1357],this['\x52\x6e\x61\x66\x6b\x58']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x45\x57\x6a\x44\x6a\x62']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x77\x70\x41\x6b\x55\x7a']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x3e26e0['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x76\x71\x4b\x6e\x4e\x43']=function(){const _0x411621=new RegExp(this['\x45\x57\x6a\x44\x6a\x62']+this['\x77\x70\x41\x6b\x55\x7a']),_0x338a92=_0x411621['\x74\x65\x73\x74'](this['\x52\x6e\x61\x66\x6b\x58']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x47\x57\x55\x6a\x61\x63'][0x54d+-0xa8d+-0x10d*-0x5]:--this['\x47\x57\x55\x6a\x61\x63'][0x1*0x1607+0x5*-0x2d1+-0x6*0x153];return this['\x4b\x77\x61\x6f\x52\x4b'](_0x338a92);},_0x3e26e0['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4b\x77\x61\x6f\x52\x4b']=function(_0x33c9c5){if(!Boolean(~_0x33c9c5))return _0x33c9c5;return this['\x58\x48\x48\x65\x79\x56'](this['\x4f\x75\x44\x4e\x4d\x73']);},_0x3e26e0['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x58\x48\x48\x65\x79\x56']=function(_0x560b88){for(let _0x48e43e=0x1d31+-0x3*-0xcb5+-0x4350,_0x4e39a0=this['\x47\x57\x55\x6a\x61\x63']['\x6c\x65\x6e\x67\x74\x68'];_0x48e43e<_0x4e39a0;_0x48e43e++){this['\x47\x57\x55\x6a\x61\x63']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x4e39a0=this['\x47\x57\x55\x6a\x61\x63']['\x6c\x65\x6e\x67\x74\x68'];}return _0x560b88(this['\x47\x57\x55\x6a\x61\x63'][-0x239b+0x170d+0xc8e]);},(''+function(){return-0x14d+0x13f*0x1d+-0x4fa*0x7;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x1ddb+0x1c45+-0x3a1f)&&new _0x3e26e0(_0x48ef)['\x76\x71\x4b\x6e\x4e\x43'](),_0x48ef['\x61\x63\x72\x42\x71\x66']=!![];}_0x120751=_0x48ef['\x62\x72\x49\x78\x4c\x76'](_0x120751,_0x25b6d0),_0x48ef['\x44\x64\x6d\x47\x6f\x69'][_0x8b271c]=_0x120751;}else _0x120751=_0x3a4d13;return _0x120751;}'use strict';const _0x4836ba=require('\x66\x73'),{resolveTraceFile:_0x1fb84d,resolveEvomapNodeSecret:_0x5b75d4,decryptTraceEnvelope:_0x3cf80c}=require(_0x57c22f(0x166,'\x78\x38\x48\x34')+_0x57c22f(0x137,'\x4c\x24\x6b\x38')),_0x51f77f={};_0x51f77f[_0x57c22f(0x127,'\x4f\x72\x76\x76')+_0x57c22f(0x144,'\x59\x62\x6f\x42')]=0x0,_0x51f77f[_0x57c22f(0x169,'\x46\x64\x66\x6a')+_0x57c22f(0x12b,'\x69\x70\x49\x7a')]=0x0,_0x51f77f[_0x57c22f(0x160,'\x29\x57\x4b\x5b')+'\x6b\x65\x6e\x73']=0x0,_0x51f77f[_0x57c22f(0x15e,'\x52\x72\x44\x61')]=0x0,_0x51f77f[_0x57c22f(0x17b,'\x53\x7a\x51\x28')]=![];function _0x42e5(){const _0x3dfda2=['\x57\x4f\x2f\x64\x48\x64\x69\x72\x68\x71','\x57\x4f\x39\x61\x57\x4f\x6a\x75\x71\x71','\x66\x6d\x6b\x4b\x57\x50\x33\x64\x48\x43\x6b\x64','\x63\x6d\x6b\x31\x57\x34\x42\x64\x53\x53\x6b\x52','\x57\x50\x74\x64\x50\x66\x62\x66\x57\x4f\x47','\x57\x34\x54\x79\x57\x34\x74\x64\x53\x6d\x6f\x47\x77\x57\x68\x63\x52\x47','\x61\x53\x6f\x31\x42\x6d\x6f\x57\x57\x4f\x2f\x64\x55\x4b\x74\x63\x4b\x57','\x57\x51\x5a\x63\x4f\x4e\x58\x64\x57\x4f\x46\x64\x4b\x65\x2f\x63\x4a\x57','\x6b\x38\x6b\x66\x57\x34\x70\x64\x4a\x53\x6b\x6c\x6e\x53\x6b\x5a\x69\x47','\x6e\x57\x54\x59\x57\x34\x76\x45\x63\x43\x6b\x62\x57\x37\x34\x4a\x6e\x75\x66\x7a','\x77\x48\x72\x79\x57\x35\x74\x63\x4c\x32\x57\x56\x57\x34\x76\x4f\x57\x36\x78\x64\x4e\x43\x6b\x30\x71\x61','\x65\x43\x6b\x6f\x57\x50\x33\x64\x4b\x6d\x6b\x71\x6f\x53\x6f\x57\x44\x71','\x57\x34\x70\x63\x4d\x64\x7a\x68\x45\x71','\x6a\x38\x6b\x6a\x42\x43\x6f\x6e\x46\x4e\x33\x64\x4e\x71\x70\x63\x50\x53\x6b\x65\x57\x35\x62\x73','\x57\x35\x76\x50\x57\x51\x38\x34\x57\x37\x70\x63\x48\x53\x6b\x71\x57\x50\x6d','\x57\x50\x78\x63\x52\x75\x62\x74\x57\x4f\x34','\x57\x51\x78\x63\x54\x77\x33\x64\x52\x59\x47','\x69\x53\x6b\x74\x57\x50\x47\x53\x65\x4b\x52\x64\x56\x53\x6b\x42','\x57\x4f\x4e\x63\x54\x6d\x6f\x49\x61\x53\x6b\x53\x57\x4f\x65','\x57\x4f\x74\x64\x48\x74\x65\x5a\x6d\x38\x6b\x69\x57\x37\x30\x43','\x57\x50\x79\x45\x57\x34\x2f\x64\x51\x38\x6f\x58\x79\x62\x70\x63\x4f\x47','\x57\x51\x48\x62\x57\x51\x39\x4b\x43\x71','\x57\x35\x4a\x63\x48\x4c\x53\x5a\x57\x50\x4f','\x57\x35\x42\x63\x47\x31\x38\x56\x57\x50\x79\x2f\x57\x34\x5a\x64\x51\x61','\x57\x34\x70\x64\x53\x43\x6f\x65\x57\x37\x69\x32\x57\x37\x4a\x63\x47\x38\x6b\x73','\x57\x4f\x4f\x56\x57\x37\x62\x39','\x57\x4f\x6c\x64\x4e\x53\x6f\x67','\x57\x52\x6c\x64\x52\x38\x6f\x43\x57\x37\x42\x63\x4c\x53\x6b\x53\x79\x4c\x58\x64\x57\x50\x6c\x64\x47\x53\x6f\x31','\x6b\x6d\x6b\x68\x57\x50\x2f\x64\x4b\x43\x6b\x79','\x57\x34\x31\x2b\x57\x37\x56\x64\x4e\x38\x6f\x30','\x6f\x67\x6d\x74\x57\x4f\x42\x64\x4a\x57','\x66\x43\x6b\x61\x57\x52\x5a\x64\x4c\x38\x6b\x68','\x57\x35\x4f\x78\x74\x4a\x37\x64\x4f\x57','\x77\x32\x43\x57\x57\x50\x6d','\x77\x38\x6f\x30\x6c\x38\x6b\x78\x6a\x61','\x57\x50\x34\x50\x57\x51\x70\x64\x47\x38\x6f\x6b\x6f\x61','\x45\x38\x6f\x6e\x57\x50\x44\x34\x57\x4f\x54\x61\x66\x63\x4b\x71\x57\x51\x42\x63\x4d\x4e\x46\x64\x52\x47','\x41\x43\x6f\x46\x57\x51\x37\x63\x47\x57','\x57\x36\x69\x5a\x7a\x47','\x57\x37\x35\x7a\x77\x53\x6f\x76\x73\x38\x6f\x61\x6b\x71','\x6a\x53\x6b\x56\x6e\x53\x6b\x34\x57\x36\x61','\x57\x4f\x6c\x63\x4f\x38\x6f\x4d\x66\x6d\x6b\x4a\x57\x50\x42\x64\x55\x6d\x6f\x70','\x57\x37\x6d\x31\x43\x43\x6f\x69\x57\x34\x71','\x6b\x43\x6b\x6a\x42\x6d\x6f\x6d\x44\x4e\x52\x64\x50\x61\x74\x63\x52\x38\x6b\x2b\x57\x34\x31\x76','\x7a\x6d\x6b\x4f\x57\x50\x75','\x57\x34\x75\x51\x73\x6d\x6b\x78\x57\x36\x71','\x79\x77\x30\x79\x57\x50\x4c\x45\x7a\x43\x6b\x44\x71\x47','\x57\x34\x78\x63\x4a\x30\x65\x57\x61\x71','\x57\x52\x46\x63\x4f\x68\x72\x69\x57\x4f\x43','\x6d\x76\x34\x56\x6d\x57','\x57\x51\x4a\x63\x51\x4d\x6e\x76\x57\x50\x65','\x57\x52\x6d\x6a\x61\x53\x6b\x75\x65\x53\x6b\x44\x43\x43\x6f\x73','\x6b\x43\x6f\x32\x57\x35\x78\x64\x55\x73\x4a\x63\x53\x4a\x78\x64\x49\x6d\x6f\x4c\x57\x50\x4b\x66\x57\x37\x47','\x57\x36\x69\x39\x7a\x49\x4a\x64\x4b\x71','\x7a\x32\x53\x51\x57\x4f\x62\x66\x45\x6d\x6b\x32\x75\x57','\x57\x51\x5a\x63\x55\x78\x48\x6c','\x66\x43\x6b\x6f\x63\x53\x6b\x4c\x57\x37\x65','\x57\x34\x70\x63\x4d\x6d\x6f\x71\x77\x66\x56\x64\x54\x47','\x57\x4f\x74\x64\x4d\x71\x50\x57\x76\x78\x71\x43\x57\x36\x74\x64\x50\x5a\x56\x63\x50\x43\x6f\x2f\x68\x53\x6b\x54','\x57\x4f\x58\x39\x57\x50\x66\x4a\x79\x38\x6b\x4d\x57\x4f\x34\x53','\x44\x6d\x6f\x41\x6d\x53\x6b\x6e','\x57\x50\x69\x35\x57\x51\x5a\x64\x48\x38\x6f\x44\x6b\x78\x42\x63\x4f\x71','\x57\x34\x4e\x63\x49\x48\x58\x63\x7a\x6d\x6b\x6b\x57\x36\x61\x33','\x73\x38\x6f\x77\x57\x4f\x6e\x59\x57\x35\x30','\x6d\x68\x4b\x4f\x6e\x43\x6b\x38\x57\x4f\x70\x63\x4c\x68\x30','\x57\x36\x50\x46\x57\x52\x4b\x33\x57\x37\x30','\x74\x5a\x52\x64\x49\x66\x43\x48\x6f\x75\x34','\x57\x35\x76\x50\x57\x4f\x47\x54\x57\x36\x33\x63\x53\x6d\x6b\x6b\x57\x50\x53','\x57\x50\x5a\x63\x54\x53\x6f\x52\x64\x53\x6b\x49','\x57\x36\x57\x46\x7a\x43\x6b\x73\x57\x34\x79','\x57\x35\x64\x63\x48\x77\x30\x32\x57\x4f\x30\x49\x57\x36\x46\x64\x55\x71','\x75\x53\x6f\x7a\x57\x51\x62\x59\x57\x36\x69','\x57\x50\x5a\x63\x4f\x38\x6f\x4d\x66\x43\x6b\x31\x57\x4f\x57','\x57\x4f\x33\x63\x52\x6d\x6f\x63\x63\x53\x6b\x7a','\x57\x4f\x2f\x64\x54\x73\x48\x6c\x75\x38\x6f\x6c\x74\x71\x74\x64\x47\x53\x6b\x37\x6d\x6d\x6f\x68\x74\x71','\x57\x52\x74\x64\x4a\x6d\x6b\x4d','\x57\x37\x61\x58\x79\x53\x6f\x6a\x57\x34\x69\x41','\x57\x36\x71\x32\x71\x58\x68\x64\x48\x71\x33\x64\x53\x6d\x6b\x7a','\x68\x66\x4f\x42\x6c\x38\x6b\x65','\x57\x37\x2f\x63\x47\x78\x71\x48\x69\x71','\x6f\x6d\x6b\x54\x57\x37\x70\x63\x48\x59\x47\x34\x57\x36\x6a\x52','\x43\x6d\x6f\x70\x57\x52\x42\x63\x4e\x53\x6f\x76\x7a\x53\x6f\x31\x66\x67\x70\x64\x50\x38\x6f\x63\x77\x75\x61','\x6f\x4b\x76\x78\x71\x59\x65','\x57\x34\x4a\x63\x4f\x4d\x38\x42\x64\x38\x6b\x37\x64\x64\x47','\x64\x53\x6b\x32\x57\x35\x57\x49\x57\x35\x53','\x57\x51\x4a\x64\x52\x77\x56\x64\x4d\x53\x6b\x33\x6d\x33\x74\x64\x4e\x61','\x78\x53\x6b\x59\x66\x38\x6b\x51\x57\x35\x42\x63\x55\x47\x68\x64\x4e\x71','\x57\x51\x35\x79\x57\x51\x6e\x30\x42\x71','\x57\x51\x33\x63\x4e\x67\x5a\x64\x4c\x61','\x6c\x38\x6f\x78\x45\x6d\x6f\x33\x57\x51\x4b','\x57\x34\x6c\x63\x4b\x58\x39\x67\x72\x71','\x57\x37\x79\x36\x44\x38\x6f\x73\x57\x34\x30\x37\x6e\x53\x6f\x52','\x65\x61\x42\x64\x52\x63\x31\x34','\x62\x43\x6f\x2f\x78\x53\x6f\x32\x57\x50\x37\x64\x55\x57','\x75\x6d\x6b\x6c\x63\x30\x4b\x6f','\x57\x34\x6d\x59\x72\x43\x6b\x31\x57\x37\x65\x47\x57\x37\x7a\x50','\x77\x48\x6e\x7a\x57\x35\x74\x63\x4c\x67\x71\x4f\x57\x51\x31\x6d\x57\x34\x4e\x64\x54\x6d\x6b\x67\x77\x38\x6f\x75','\x57\x50\x47\x34\x57\x4f\x2f\x64\x4a\x38\x6f\x68\x6a\x77\x42\x63\x48\x71','\x6b\x6d\x6f\x52\x65\x53\x6b\x53\x70\x48\x4a\x64\x4b\x47','\x57\x50\x4a\x63\x52\x6d\x6b\x62\x57\x4f\x35\x4f\x57\x52\x2f\x64\x56\x43\x6f\x69','\x79\x38\x6f\x31\x57\x52\x74\x64\x48\x4d\x35\x46\x57\x51\x6e\x43\x6b\x4c\x4f\x56\x41\x43\x6f\x4a','\x57\x37\x57\x61\x76\x48\x4e\x64\x49\x47'];_0x42e5=function(){return _0x3dfda2;};return _0x42e5();}const _0x22a13a=Object[_0x57c22f(0x164,'\x53\x7a\x51\x28')](_0x51f77f);function _0x240f2d(_0x415e5c){const _0xd473ba=_0x57c22f,_0x167a88={'\x4e\x7a\x74\x75\x6b':function(_0x2b3488,_0x525e11){return _0x2b3488===_0x525e11;},'\x62\x6a\x45\x6d\x4f':_0xd473ba(0x13b,'\x72\x35\x4f\x23'),'\x6f\x78\x63\x50\x7a':function(_0x206dab,_0x12c6cd){return _0x206dab(_0x12c6cd);}},_0x1b9135=_0x415e5c&&(_0x415e5c[_0xd473ba(0x159,'\x79\x53\x64\x35')+'\x70']||_0x415e5c['\x63\x72\x65\x61\x74\x65\x64\x41'+_0xd473ba(0x183,'\x77\x64\x67\x25')]);if(_0x1b9135){if(_0x167a88['\x4e\x7a\x74\x75\x6b'](_0x167a88[_0xd473ba(0x146,'\x52\x72\x44\x61')],_0x167a88[_0xd473ba(0x135,'\x53\x7a\x51\x28')])){const _0x185727=Date[_0xd473ba(0x184,'\x79\x53\x64\x35')](_0x1b9135);if(Number[_0xd473ba(0x180,'\x21\x49\x51\x26')](_0x185727))return _0x185727;}else return _0x2fdadd[_0xd473ba(0x158,'\x75\x36\x54\x70')]()[_0xd473ba(0x134,'\x53\x7a\x51\x28')](_0xd473ba(0x185,'\x74\x47\x6a\x53')+_0xd473ba(0x16b,'\x29\x57\x4b\x5b'))[_0xd473ba(0x15d,'\x6d\x5a\x56\x46')]()['\x63\x6f\x6e\x73\x74\x72\x75\x63'+_0xd473ba(0x17e,'\x51\x44\x5e\x6a')](_0x415532)[_0xd473ba(0x138,'\x2a\x58\x45\x48')](_0xd473ba(0x142,'\x75\x36\x54\x70')+_0xd473ba(0x177,'\x69\x63\x5d\x23'));}if(_0x415e5c&&Number[_0xd473ba(0x14d,'\x75\x6d\x55\x32')](Number(_0x415e5c[_0xd473ba(0x165,'\x70\x25\x4e\x30')+'\x74'])))return _0x167a88[_0xd473ba(0x187,'\x31\x29\x24\x35')](Number,_0x415e5c[_0xd473ba(0x129,'\x75\x6d\x55\x32')+'\x74'])*(0x2f5*-0x2+-0x216+0xbe8);return null;}function _0x260ace(_0x2b9ce5={}){const _0x4478b9=_0x57c22f,_0x36a4ff={'\x52\x65\x46\x6d\x6e':function(_0x112396,_0x4813dd,_0x5d58ef){return _0x112396(_0x4813dd,_0x5d58ef);},'\x4a\x43\x43\x55\x4e':function(_0x20d790){return _0x20d790();},'\x59\x4d\x47\x73\x54':function(_0x4ee8d3,_0x2c40e5){return _0x4ee8d3!=_0x2c40e5;},'\x44\x4b\x73\x69\x62':'\x76\x63\x43\x4d\x64','\x50\x6d\x53\x55\x47':'\x75\x74\x66\x38','\x63\x4c\x6f\x48\x56':function(_0x2b3995,_0x3b7dbe){return _0x2b3995!==_0x3b7dbe;},'\x71\x45\x53\x61\x61':_0x4478b9(0x133,'\x69\x70\x49\x7a'),'\x53\x47\x73\x61\x6a':function(_0x49944b,_0x154b26){return _0x49944b===_0x154b26;},'\x68\x73\x66\x43\x5a':_0x4478b9(0x175,'\x75\x6d\x55\x32'),'\x79\x79\x79\x78\x59':function(_0x42f8ac,_0x18a4fe){return _0x42f8ac==_0x18a4fe;},'\x4b\x4b\x42\x62\x7a':function(_0xb0c24d,_0x17ee2e){return _0xb0c24d<_0x17ee2e;},'\x4b\x59\x62\x6e\x62':function(_0x89eb75,_0x1b90b6){return _0x89eb75(_0x1b90b6);},'\x6a\x53\x63\x42\x56':function(_0x4c57b5,_0x296e53){return _0x4c57b5>_0x296e53;},'\x75\x4f\x51\x4c\x71':function(_0x349677,_0x426028){return _0x349677||_0x426028;},'\x4d\x52\x4e\x72\x66':function(_0xf970fc,_0x40eb63){return _0xf970fc+_0x40eb63;}},_0x3d2385=_0x2b9ce5&&_0x36a4ff[_0x4478b9(0x145,'\x75\x36\x54\x70')](_0x2b9ce5['\x73\x69\x6e\x63\x65\x49\x73\x6f'],null)?Date['\x70\x61\x72\x73\x65'](_0x2b9ce5[_0x4478b9(0x157,'\x78\x38\x48\x34')]):NaN,_0x22bfe9={..._0x22a13a};if(!Number[_0x4478b9(0x132,'\x46\x64\x66\x6a')](_0x3d2385))return _0x22bfe9;const _0x4bebba=_0x2b9ce5&&_0x36a4ff[_0x4478b9(0x13a,'\x77\x64\x67\x25')](_0x2b9ce5[_0x4478b9(0x13f,'\x72\x35\x4f\x23')],null)&&Number[_0x4478b9(0x12a,'\x52\x72\x44\x61')](Date[_0x4478b9(0x17c,'\x2a\x58\x45\x48')](_0x2b9ce5[_0x4478b9(0x12c,'\x77\x64\x67\x25')]))?Date[_0x4478b9(0x14a,'\x6b\x5d\x54\x69')](_0x2b9ce5[_0x4478b9(0x147,'\x2a\x58\x45\x48')]):Date[_0x4478b9(0x16c,'\x77\x4b\x45\x6d')]();let _0x3b8f83;try{if(_0x36a4ff[_0x4478b9(0x174,'\x39\x66\x66\x4b')]!==_0x36a4ff[_0x4478b9(0x140,'\x6f\x78\x40\x6e')]){const _0x499761={..._0x539179};return _0x499761;}else{const _0x5db2c3=_0x36a4ff[_0x4478b9(0x131,'\x65\x69\x39\x6d')](_0x1fb84d),_0x4cba76={..._0x22a13a};if(!_0x4836ba['\x65\x78\x69\x73\x74\x73\x53\x79'+'\x6e\x63'](_0x5db2c3))return _0x4cba76;_0x3b8f83=_0x4836ba[_0x4478b9(0x141,'\x75\x2a\x39\x39')+_0x4478b9(0x173,'\x21\x49\x51\x26')](_0x5db2c3,_0x36a4ff[_0x4478b9(0x17a,'\x58\x37\x31\x41')]);}}catch(_0x5a982e){const _0x33d227={..._0x22a13a};return _0x33d227;}let _0x2e78fb=null;try{_0x2e78fb=_0x5b75d4();}catch(_0x51e40d){_0x36a4ff[_0x4478b9(0x18a,'\x58\x37\x31\x41')](_0x36a4ff[_0x4478b9(0x154,'\x6d\x5a\x56\x46')],_0x36a4ff[_0x4478b9(0x151,'\x31\x29\x24\x35')])?_0x3fecc0=_0x36a4ff[_0x4478b9(0x156,'\x57\x39\x69\x33')](_0x48e62a,_0x144a64,_0x31aaf4):_0x2e78fb=null;}let _0x1e1dfc=-0x18ba+-0xab7*-0x1+0xe03,_0x3caa3d=-0xa71+0xf*-0x142+-0x29*-0xb7,_0x3c36b7=-0x185b*0x1+0x1*-0x332+0x1b8d;for(const _0x8505a7 of _0x3b8f83[_0x4478b9(0x130,'\x53\x7a\x51\x28')]('\x0a')){if(_0x36a4ff[_0x4478b9(0x162,'\x59\x62\x6f\x42')]('\x4f\x63\x42\x4a\x43','\x4f\x63\x42\x4a\x43'))_0xc42911=null;else{const _0x3ef9c0=_0x8505a7[_0x4478b9(0x189,'\x79\x53\x64\x35')]();if(!_0x3ef9c0)continue;let _0x510b9b;try{_0x510b9b=JSON[_0x4478b9(0x171,'\x6d\x5a\x56\x46')](_0x3ef9c0);}catch(_0x1769ce){continue;}if(_0x510b9b&&_0x510b9b[_0x4478b9(0x14b,'\x65\x69\x39\x6d')+'\x64']){if(_0x36a4ff[_0x4478b9(0x170,'\x76\x71\x4d\x5e')]('\x50\x6a\x7a\x45\x55',_0x4478b9(0x148,'\x5d\x36\x62\x64'))){if(!_0x2e78fb)continue;try{_0x4478b9(0x17f,'\x65\x69\x39\x6d')!==_0x4478b9(0x172,'\x31\x29\x24\x35')?_0x510b9b=_0x3cf80c(_0x510b9b,_0x2e78fb):_0x29c4cf=_0x2af9cb[_0x4478b9(0x181,'\x66\x59\x74\x42')](_0x1030e0);}catch(_0x4d3349){continue;}}else _0x463ccc=_0x36a4ff[_0x4478b9(0x155,'\x69\x63\x5d\x23')](_0x5a839a);}if(!_0x510b9b||typeof _0x510b9b!==_0x36a4ff[_0x4478b9(0x152,'\x70\x25\x4e\x30')])continue;const _0x26be73=_0x240f2d(_0x510b9b);if(_0x36a4ff['\x79\x79\x79\x78\x59'](_0x26be73,null)||_0x36a4ff[_0x4478b9(0x143,'\x4f\x72\x76\x76')](_0x26be73,_0x3d2385)||_0x26be73>_0x4bebba)continue;const _0x3f455f=_0x36a4ff[_0x4478b9(0x12d,'\x29\x57\x4b\x5b')](Number,_0x510b9b[_0x4478b9(0x13c,'\x40\x61\x79\x61')+_0x4478b9(0x128,'\x39\x66\x66\x4b')]),_0x427ec8=Number(_0x510b9b[_0x4478b9(0x188,'\x21\x49\x51\x26')+_0x4478b9(0x182,'\x79\x53\x64\x35')]),_0x26ce9c=Number[_0x4478b9(0x139,'\x31\x29\x24\x35')](_0x3f455f)&&_0x3f455f>-0x20cc*-0x1+-0x16e2+-0x9ea,_0x1da381=Number[_0x4478b9(0x15a,'\x69\x63\x5d\x23')](_0x427ec8)&&_0x36a4ff[_0x4478b9(0x153,'\x4f\x72\x76\x76')](_0x427ec8,-0xeb5+-0x17c7+0x66a*0x6);if(_0x26ce9c)_0x1e1dfc+=_0x3f455f;if(_0x1da381)_0x3caa3d+=_0x427ec8;if(_0x36a4ff[_0x4478b9(0x16f,'\x78\x38\x48\x34')](_0x26ce9c,_0x1da381))_0x3c36b7+=-0x229a+-0x65b+0x28f6;}}const _0x12367e={..._0x22a13a};if(_0x3c36b7===-0x2567+-0xcc5+0x322c)return _0x12367e;return{'\x69\x6e\x70\x75\x74\x5f\x74\x6f\x6b\x65\x6e\x73':_0x1e1dfc,'\x6f\x75\x74\x70\x75\x74\x5f\x74\x6f\x6b\x65\x6e\x73':_0x3caa3d,'\x74\x6f\x74\x61\x6c\x5f\x74\x6f\x6b\x65\x6e\x73':_0x36a4ff[_0x4478b9(0x167,'\x4f\x72\x76\x76')](_0x1e1dfc,_0x3caa3d),'\x63\x61\x6c\x6c\x73':_0x3c36b7,'\x6d\x65\x61\x73\x75\x72\x65\x64':!![]};}const _0x4fd234={};_0x4fd234[_0x57c22f(0x14f,'\x37\x38\x7a\x48')+_0x57c22f(0x178,'\x2a\x58\x45\x48')]=_0x260ace,module[_0x57c22f(0x179,'\x74\x47\x6a\x53')]=_0x4fd234;
1
+ const _0x38f6fa=_0x307f;(function(_0x5c57e7,_0x1d44a1){const _0x5e5d96=_0x307f,_0x36c03=_0x5c57e7();while(!![]){try{const _0x3eca84=-parseInt(_0x5e5d96(0x1f0,'\x67\x6a\x58\x37'))/(-0x1295+-0xa51+0x7*0x421)*(parseInt(_0x5e5d96(0x221,'\x4e\x23\x73\x65'))/(-0x1374+0x46f+0xf07))+-parseInt(_0x5e5d96(0x1f8,'\x42\x49\x2a\x5e'))/(0x7*0x4cd+-0x65c+-0x1b3c)*(parseInt(_0x5e5d96(0x205,'\x50\x70\x52\x6b'))/(-0x22d7+0x1*0x1b2f+-0x3d6*-0x2))+-parseInt(_0x5e5d96(0x1aa,'\x25\x66\x65\x26'))/(0x1f43*-0x1+0x23d7+0x3*-0x185)+parseInt(_0x5e5d96(0x1d8,'\x25\x66\x65\x26'))/(-0xb*0x4d+-0x3c8+0x71d)*(-parseInt(_0x5e5d96(0x21c,'\x79\x41\x29\x70'))/(-0x9*0xd3+-0x2*0x8e8+0x2*0xca1))+-parseInt(_0x5e5d96(0x1c4,'\x25\x66\x65\x26'))/(0x15bc+0x3*0xf1+-0x1887)*(parseInt(_0x5e5d96(0x1b3,'\x24\x78\x58\x6f'))/(0x3*-0x853+-0x20f6+0x39f8))+parseInt(_0x5e5d96(0x1d0,'\x71\x38\x55\x43'))/(-0x79c*-0x2+0x21e8+-0x3116)+-parseInt(_0x5e5d96(0x21b,'\x42\x49\x2a\x5e'))/(-0x40c+-0x24a6*-0x1+0x5*-0x683)*(-parseInt(_0x5e5d96(0x1d1,'\x71\x38\x55\x43'))/(-0x1*0x1e89+0x65e+-0x1837*-0x1));if(_0x3eca84===_0x1d44a1)break;else _0x36c03['push'](_0x36c03['shift']());}catch(_0x505269){_0x36c03['push'](_0x36c03['shift']());}}}(_0x81d5,0x175*0x211+0xacb4f+-0x310e9));const _0x19baa2=(function(){const _0x483935=_0x307f,_0x48debb={};_0x48debb['\x6a\x53\x46\x57\x56']=function(_0x1075c2,_0x3ec780){return _0x1075c2===_0x3ec780;},_0x48debb[_0x483935(0x201,'\x68\x78\x4d\x79')]=_0x483935(0x224,'\x4e\x23\x73\x65'),_0x48debb[_0x483935(0x1fd,'\x59\x33\x38\x69')]=_0x483935(0x1ed,'\x6d\x28\x40\x74');const _0x515920=_0x48debb;let _0x9df0d=!![];return function(_0x591ef1,_0x477e95){const _0x4bb506=_0x9df0d?function(){const _0x2c32c0=_0x307f;if(_0x515920[_0x2c32c0(0x1ba,'\x62\x78\x56\x65')](_0x515920[_0x2c32c0(0x21e,'\x25\x66\x65\x26')],_0x515920[_0x2c32c0(0x206,'\x48\x2a\x31\x72')])){const _0x481df8={..._0x1dc158};return _0x481df8;}else{if(_0x477e95){const _0x5f1d12=_0x477e95[_0x2c32c0(0x1ae,'\x25\x66\x65\x26')](_0x591ef1,arguments);return _0x477e95=null,_0x5f1d12;}}}:function(){};return _0x9df0d=![],_0x4bb506;};}()),_0x50565c=_0x19baa2(this,function(){const _0x58627f=_0x307f,_0x252de7={};_0x252de7[_0x58627f(0x1b6,'\x29\x73\x53\x64')]='\x28\x28\x28\x2e\x2b\x29\x2b\x29'+_0x58627f(0x1ff,'\x38\x26\x59\x75');const _0x2bd9a6=_0x252de7;return _0x50565c[_0x58627f(0x1c7,'\x71\x35\x25\x38')]()[_0x58627f(0x1b4,'\x4b\x55\x35\x2a')](_0x58627f(0x1b7,'\x71\x38\x55\x43')+_0x58627f(0x216,'\x31\x48\x78\x79'))['\x74\x6f\x53\x74\x72\x69\x6e\x67']()[_0x58627f(0x1e7,'\x5d\x25\x42\x36')+_0x58627f(0x228,'\x31\x48\x78\x79')](_0x50565c)[_0x58627f(0x219,'\x31\x48\x78\x79')](_0x2bd9a6[_0x58627f(0x1cf,'\x38\x26\x59\x75')]);});function _0x81d5(){const _0x298b50=['\x76\x4e\x70\x64\x53\x53\x6b\x71\x7a\x6d\x6f\x30\x6d\x71\x61','\x73\x53\x6b\x73\x57\x52\x68\x64\x48\x77\x75\x7a\x57\x37\x34\x7a\x44\x53\x6f\x63\x6b\x71\x64\x64\x56\x57','\x6d\x6d\x6f\x63\x62\x6d\x6b\x34\x66\x38\x6f\x68\x57\x51\x66\x5a','\x57\x35\x5a\x63\x48\x4a\x78\x64\x4c\x43\x6f\x4c\x57\x50\x68\x63\x54\x66\x4f','\x57\x4f\x78\x63\x54\x53\x6b\x54\x57\x36\x4f','\x6e\x38\x6b\x77\x57\x4f\x66\x51\x44\x61','\x57\x36\x47\x4a\x57\x36\x78\x63\x52\x38\x6b\x39','\x57\x4f\x35\x54\x57\x52\x5a\x64\x54\x77\x34','\x6b\x53\x6b\x4f\x75\x73\x42\x63\x52\x38\x6f\x7a\x57\x4f\x39\x45','\x57\x36\x34\x56\x78\x38\x6b\x71\x70\x6d\x6f\x51\x70\x57','\x57\x37\x38\x5a\x57\x36\x46\x63\x4e\x53\x6b\x35','\x71\x53\x6b\x52\x57\x35\x33\x64\x51\x6d\x6f\x43','\x76\x4d\x37\x64\x55\x43\x6b\x63\x7a\x6d\x6f\x4a\x69\x63\x69','\x57\x37\x4e\x63\x4f\x6d\x6b\x58\x57\x50\x78\x64\x51\x47\x42\x64\x53\x53\x6b\x62','\x57\x51\x7a\x5a\x6f\x67\x39\x45','\x57\x37\x42\x63\x4b\x6d\x6f\x37\x65\x47','\x77\x74\x33\x64\x48\x4b\x53\x6c\x57\x35\x4e\x64\x48\x71','\x42\x65\x46\x64\x55\x58\x2f\x63\x4d\x57\x6c\x63\x54\x57','\x6b\x6d\x6f\x6d\x57\x35\x70\x63\x51\x64\x4b','\x6c\x6d\x6f\x71\x57\x52\x4a\x63\x56\x6d\x6b\x5a','\x57\x35\x76\x79\x57\x50\x72\x74\x57\x36\x53','\x57\x52\x47\x62\x57\x51\x71\x42\x57\x34\x30\x53\x7a\x31\x69','\x57\x36\x5a\x63\x50\x58\x52\x64\x4a\x6d\x6f\x2f','\x7a\x6d\x6b\x4a\x57\x34\x58\x7a\x57\x51\x42\x63\x4b\x38\x6b\x2f\x57\x51\x53','\x69\x6d\x6f\x2f\x57\x50\x6d\x6e','\x57\x34\x56\x63\x4e\x74\x33\x64\x4b\x43\x6f\x49\x57\x4f\x64\x63\x53\x78\x79','\x57\x35\x56\x63\x4d\x38\x6b\x62\x57\x50\x70\x64\x54\x61','\x57\x34\x5a\x63\x4e\x47\x34\x44\x57\x37\x65','\x7a\x38\x6f\x62\x68\x43\x6b\x31\x44\x66\x31\x4a\x71\x57','\x57\x50\x2f\x63\x55\x43\x6b\x75\x57\x35\x6c\x64\x4a\x47','\x57\x34\x48\x43\x64\x61\x68\x64\x51\x38\x6f\x57\x57\x4f\x62\x56\x69\x53\x6f\x58\x57\x4f\x66\x57\x57\x36\x57','\x72\x38\x6b\x2f\x63\x43\x6b\x44\x78\x71','\x78\x38\x6b\x70\x63\x4c\x37\x63\x4b\x57','\x57\x51\x66\x59\x78\x62\x69','\x6c\x43\x6f\x53\x57\x34\x2f\x63\x50\x73\x71','\x44\x62\x56\x63\x4f\x68\x4f','\x6a\x75\x62\x4f\x57\x52\x61\x78\x64\x33\x31\x44','\x57\x51\x65\x74\x57\x50\x61\x62\x57\x34\x79','\x74\x59\x5a\x64\x4d\x65\x43\x43\x57\x36\x74\x64\x48\x43\x6b\x4b','\x6e\x43\x6f\x42\x57\x52\x35\x74\x6a\x38\x6b\x6a\x57\x50\x65\x34','\x57\x50\x48\x6f\x72\x33\x70\x64\x47\x61','\x57\x51\x42\x64\x4e\x68\x74\x64\x4c\x72\x53','\x73\x63\x42\x64\x56\x77\x75\x53','\x76\x43\x6b\x47\x57\x34\x52\x64\x4c\x6d\x6f\x6d','\x57\x37\x44\x73\x57\x51\x66\x74\x57\x34\x46\x64\x4d\x73\x4f\x66','\x57\x51\x57\x63\x79\x53\x6b\x76\x70\x61','\x57\x34\x56\x63\x56\x73\x70\x64\x4d\x57','\x57\x34\x79\x43\x72\x63\x61','\x57\x51\x44\x34\x57\x50\x46\x64\x47\x77\x75','\x57\x4f\x34\x67\x44\x31\x4a\x63\x4b\x61','\x57\x50\x35\x71\x64\x4e\x7a\x52\x57\x51\x71','\x57\x35\x2f\x64\x4f\x53\x6f\x32\x57\x51\x33\x63\x55\x67\x34\x32\x67\x38\x6f\x4b\x6b\x43\x6f\x71','\x42\x61\x6c\x63\x56\x32\x2f\x64\x4f\x47\x4e\x63\x48\x43\x6b\x79\x57\x36\x4c\x47\x57\x35\x4f','\x57\x36\x71\x32\x61\x75\x4a\x63\x53\x6d\x6b\x6b\x6a\x6d\x6b\x45\x57\x51\x68\x64\x4f\x5a\x38\x42\x78\x61','\x62\x53\x6b\x49\x57\x52\x6e\x78\x73\x71','\x6e\x6d\x6f\x35\x57\x36\x42\x63\x47\x6d\x6f\x52','\x57\x50\x2f\x63\x51\x43\x6b\x50\x57\x34\x4e\x64\x50\x71','\x73\x38\x6f\x42\x57\x36\x6c\x64\x52\x67\x43','\x57\x35\x57\x78\x68\x61\x70\x63\x4b\x38\x6b\x72\x57\x50\x72\x69\x63\x76\x52\x64\x53\x5a\x79','\x57\x52\x4b\x4b\x57\x52\x75\x75\x57\x34\x69','\x65\x6d\x6f\x62\x57\x36\x56\x63\x47\x71','\x57\x52\x4c\x30\x43\x76\x74\x64\x4c\x57','\x57\x34\x47\x65\x57\x37\x5a\x63\x55\x53\x6b\x74','\x6b\x6d\x6f\x63\x73\x6d\x6f\x31\x7a\x71','\x68\x6d\x6b\x71\x77\x38\x6f\x34','\x57\x50\x4c\x41\x68\x71','\x7a\x6d\x6f\x4f\x57\x50\x54\x35\x57\x36\x79','\x73\x38\x6b\x68\x57\x50\x70\x64\x47\x53\x6b\x34\x57\x36\x70\x63\x4e\x68\x4f\x57\x57\x37\x68\x63\x48\x38\x6f\x6d\x57\x34\x57','\x69\x31\x54\x58\x57\x4f\x53\x6f\x6b\x66\x54\x62','\x6a\x78\x30\x35\x57\x34\x52\x64\x54\x61','\x57\x37\x38\x43\x46\x6d\x6b\x74\x6e\x53\x6f\x39\x6e\x71\x79\x6d','\x67\x6d\x6f\x68\x57\x35\x6c\x63\x4d\x53\x6f\x35','\x57\x35\x33\x63\x47\x62\x37\x64\x4a\x53\x6f\x43','\x43\x63\x37\x64\x53\x67\x75\x32','\x57\x34\x6d\x30\x57\x37\x74\x63\x4a\x43\x6b\x68\x57\x52\x52\x64\x55\x6d\x6f\x43','\x64\x4e\x6c\x63\x47\x48\x44\x6a\x57\x50\x37\x63\x47\x6d\x6b\x46\x57\x35\x69\x75\x41\x53\x6b\x50\x57\x50\x61','\x67\x4c\x70\x63\x4b\x31\x42\x63\x56\x62\x6c\x64\x50\x30\x4b\x50\x57\x34\x69\x52','\x57\x4f\x31\x50\x57\x51\x2f\x64\x54\x67\x4a\x63\x52\x61','\x45\x64\x70\x64\x4f\x71\x56\x64\x52\x47','\x61\x78\x35\x57\x57\x51\x30\x45','\x57\x37\x52\x64\x4e\x53\x6f\x70\x41\x6d\x6b\x77\x78\x43\x6b\x69\x78\x57','\x57\x34\x42\x63\x4a\x63\x71\x79\x57\x36\x5a\x64\x4c\x64\x47\x7a','\x57\x37\x48\x35\x57\x51\x54\x65\x57\x37\x65','\x6a\x43\x6b\x36\x43\x38\x6f\x6d\x63\x71','\x68\x53\x6f\x6c\x57\x51\x46\x63\x51\x53\x6b\x43','\x57\x37\x42\x63\x49\x53\x6f\x50\x71\x38\x6b\x47\x57\x37\x4b\x75\x57\x50\x69','\x57\x50\x48\x30\x7a\x58\x4a\x64\x49\x57','\x57\x36\x30\x59\x62\x65\x56\x63\x55\x53\x6f\x41\x75\x43\x6b\x44\x57\x51\x6c\x64\x49\x4a\x6d','\x75\x71\x4a\x64\x4a\x61\x68\x64\x51\x4a\x2f\x64\x4c\x4c\x61','\x57\x51\x42\x63\x56\x38\x6b\x75\x6b\x71','\x76\x43\x6f\x76\x57\x36\x43','\x57\x37\x75\x77\x57\x37\x64\x63\x50\x38\x6b\x4b','\x57\x51\x62\x55\x71\x72\x42\x64\x50\x43\x6f\x33\x79\x6d\x6b\x65','\x74\x6d\x6b\x66\x57\x50\x6c\x63\x50\x53\x6f\x51\x57\x4f\x68\x64\x52\x30\x65\x6a','\x57\x36\x42\x63\x54\x6d\x6b\x33\x57\x50\x42\x64\x55\x47','\x57\x51\x52\x64\x47\x47\x46\x63\x49\x43\x6b\x36','\x57\x35\x43\x66\x57\x51\x4f\x37\x57\x35\x6e\x57\x41\x47\x71','\x76\x73\x56\x64\x48\x4c\x65\x6e\x57\x37\x6c\x64\x47\x53\x6b\x4b','\x6e\x53\x6b\x77\x77\x58\x68\x63\x4a\x71','\x69\x6d\x6b\x55\x45\x38\x6f\x33\x6d\x57','\x64\x38\x6f\x6c\x57\x35\x42\x63\x48\x49\x35\x65\x57\x51\x43\x6c','\x69\x57\x2f\x64\x56\x38\x6f\x54\x6b\x6d\x6b\x38\x45\x38\x6f\x38','\x43\x6d\x6f\x4f\x7a\x59\x52\x63\x51\x43\x6f\x63\x57\x4f\x62\x41','\x62\x48\x7a\x62\x57\x34\x52\x63\x4e\x53\x6f\x69\x57\x34\x6d\x63','\x77\x53\x6b\x67\x57\x35\x72\x44\x57\x52\x79','\x57\x36\x46\x64\x48\x53\x6f\x73\x43\x6d\x6b\x6d\x71\x6d\x6b\x74\x67\x6d\x6f\x72\x57\x35\x52\x64\x4e\x4d\x4c\x53','\x57\x36\x70\x64\x48\x38\x6f\x73\x43\x53\x6b\x6a\x68\x38\x6f\x68\x62\x38\x6f\x78\x57\x35\x42\x64\x53\x47','\x57\x4f\x6d\x44\x57\x35\x52\x63\x4e\x38\x6b\x4b\x57\x52\x74\x64\x4b\x57','\x41\x43\x6b\x66\x57\x37\x53\x71\x79\x53\x6f\x49\x57\x35\x75\x35\x57\x36\x33\x63\x4d\x38\x6f\x32\x57\x4f\x50\x6c','\x42\x5a\x6c\x64\x47\x75\x53\x72','\x6b\x72\x70\x64\x4c\x38\x6f\x33\x6d\x53\x6b\x4e\x45\x53\x6f\x36','\x57\x34\x4f\x7a\x57\x52\x38\x4d\x57\x34\x39\x57\x43\x61\x79','\x6e\x43\x6b\x56\x57\x4f\x48\x61\x42\x38\x6f\x75\x7a\x6d\x6f\x4d','\x74\x38\x6f\x46\x57\x34\x64\x63\x4d\x53\x6f\x4d\x57\x4f\x33\x64\x4c\x61','\x6b\x53\x6f\x6d\x74\x6d\x6f\x4f\x79\x31\x37\x63\x4d\x32\x57','\x57\x51\x69\x78\x57\x4f\x6d\x61\x57\x34\x61\x54','\x57\x34\x37\x64\x56\x38\x6b\x56\x77\x53\x6b\x75','\x57\x50\x6d\x79\x46\x4c\x56\x63\x54\x43\x6b\x51\x57\x34\x6a\x45','\x6a\x53\x6b\x41\x43\x38\x6f\x59\x6d\x72\x30\x38\x64\x57','\x68\x6d\x6b\x42\x63\x67\x5a\x63\x55\x53\x6b\x38\x77\x57','\x61\x38\x6f\x57\x57\x36\x68\x63\x4b\x63\x38','\x68\x53\x6b\x47\x42\x6d\x6f\x5a\x63\x57','\x57\x36\x61\x30\x61\x75\x5a\x63\x56\x43\x6b\x69\x72\x53\x6b\x6e\x57\x4f\x37\x64\x48\x4a\x4b\x58','\x57\x37\x6e\x42\x57\x51\x43','\x45\x57\x43\x33\x57\x37\x30','\x57\x37\x78\x63\x50\x38\x6b\x47\x57\x4f\x74\x64\x51\x58\x46\x64\x49\x43\x6b\x30','\x71\x43\x6f\x6b\x57\x50\x54\x6c\x57\x34\x43','\x68\x62\x76\x52\x57\x34\x52\x63\x48\x61'];_0x81d5=function(){return _0x298b50;};return _0x81d5();}_0x50565c();'use strict';const _0x505c90=require('\x66\x73'),{resolveTraceFile:_0x383b91,resolveEvomapNodeSecret:_0x4fb261,decryptTraceEnvelope:_0x5580b9}=require(_0x38f6fa(0x1cd,'\x62\x36\x48\x67')+'\x74\x6f\x72'),_0xecfffc={};_0xecfffc[_0x38f6fa(0x1c8,'\x25\x6a\x52\x6a')+_0x38f6fa(0x1eb,'\x4e\x69\x38\x5b')]=0x0,_0xecfffc[_0x38f6fa(0x1f4,'\x68\x78\x4d\x79')+_0x38f6fa(0x226,'\x74\x45\x29\x55')]=0x0,_0xecfffc['\x74\x6f\x74\x61\x6c\x5f\x74\x6f'+_0x38f6fa(0x223,'\x61\x74\x4c\x23')]=0x0,_0xecfffc[_0x38f6fa(0x202,'\x63\x5b\x40\x23')]=0x0,_0xecfffc[_0x38f6fa(0x1d9,'\x74\x45\x29\x55')]=![];function _0x307f(_0x3d35d6,_0x50b907){_0x3d35d6=_0x3d35d6-(-0x1484*-0x1+-0x1be0+0x906);const _0x3ed066=_0x81d5();let _0x2a2ea9=_0x3ed066[_0x3d35d6];if(_0x307f['\x6c\x69\x46\x52\x45\x55']===undefined){var _0x440774=function(_0x2fd147){const _0x1e1973='\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 _0x214685='',_0x508eb4='',_0x1c294c=_0x214685+_0x440774,_0x2be229=(''+function(){return 0x5*0x22+-0x43*0x91+0x17*0x19f;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0x116c+0x2b*0x92+-0x29f1);for(let _0x5d7c10=0x1a4b*0x1+0x5*0x36+-0x1b59,_0x5795dc,_0x2c0923,_0x172378=-0xc12+0x8a*-0x23+0x8*0x3de;_0x2c0923=_0x2fd147['\x63\x68\x61\x72\x41\x74'](_0x172378++);~_0x2c0923&&(_0x5795dc=_0x5d7c10%(-0x24db+0x63d*0x3+-0x2*-0x914)?_0x5795dc*(0x1*0xe98+-0x39b+-0xabd*0x1)+_0x2c0923:_0x2c0923,_0x5d7c10++%(0x261d+-0xa*-0x40+-0x2899))?_0x214685+=_0x2be229||_0x1c294c['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x172378+(-0x583+0x1*0x1ff8+-0x1a6b))-(-0x553+0x7f0+-0x293*0x1)!==-0x1*0x2505+0x110c+0x13f9?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xd*-0x1db+-0x15cd*0x1+0x2eeb&_0x5795dc>>(-(-0x139*0x10+-0xd*-0x67+0xe57*0x1)*_0x5d7c10&0x9d4*-0x1+0x17ef+-0xe15)):_0x5d7c10:0x2f*-0x2f+-0x4c1*0x7+0x8*0x53d){_0x2c0923=_0x1e1973['\x69\x6e\x64\x65\x78\x4f\x66'](_0x2c0923);}for(let _0x38b372=-0x1ced+-0x3*-0x475+-0xb*-0x16a,_0x41898b=_0x214685['\x6c\x65\x6e\x67\x74\x68'];_0x38b372<_0x41898b;_0x38b372++){_0x508eb4+='\x25'+('\x30\x30'+_0x214685['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x38b372)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0x1f8a+-0x1781+-0x371b*-0x1))['\x73\x6c\x69\x63\x65'](-(0x1542+-0x103*0x1c+-0x714*-0x1));}return decodeURIComponent(_0x508eb4);};const _0x585f7a=function(_0x3a73af,_0x4cbfc8){let _0x2be136=[],_0x2d4139=-0x45*0x42+0x230d+-0x1eb*0x9,_0x50bc1c,_0x53775e='';_0x3a73af=_0x440774(_0x3a73af);let _0x3534cb;for(_0x3534cb=-0x20d4+0x15ff+0xad5;_0x3534cb<0x9*-0x5d+-0x72d+-0xa*-0x125;_0x3534cb++){_0x2be136[_0x3534cb]=_0x3534cb;}for(_0x3534cb=0x1261*-0x2+-0x645+-0x2b07*-0x1;_0x3534cb<0x18b7+0x1978+-0x312f;_0x3534cb++){_0x2d4139=(_0x2d4139+_0x2be136[_0x3534cb]+_0x4cbfc8['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3534cb%_0x4cbfc8['\x6c\x65\x6e\x67\x74\x68']))%(-0x1b80+0x10*-0x19e+0x3660),_0x50bc1c=_0x2be136[_0x3534cb],_0x2be136[_0x3534cb]=_0x2be136[_0x2d4139],_0x2be136[_0x2d4139]=_0x50bc1c;}_0x3534cb=0x2417+-0xd6c*-0x1+-0x3183,_0x2d4139=-0xbf2+0xd0c+0x2f*-0x6;for(let _0x4c6666=0xe1*-0x9+0x1d2*0x7+-0x4d5;_0x4c6666<_0x3a73af['\x6c\x65\x6e\x67\x74\x68'];_0x4c6666++){_0x3534cb=(_0x3534cb+(-0x32*-0x26+-0x1a59+0x12ee))%(0xec7+-0xb35+-0x292),_0x2d4139=(_0x2d4139+_0x2be136[_0x3534cb])%(0xc52*-0x2+-0x1b4c*-0x1+-0x1a8),_0x50bc1c=_0x2be136[_0x3534cb],_0x2be136[_0x3534cb]=_0x2be136[_0x2d4139],_0x2be136[_0x2d4139]=_0x50bc1c,_0x53775e+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x3a73af['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4c6666)^_0x2be136[(_0x2be136[_0x3534cb]+_0x2be136[_0x2d4139])%(-0x2*-0x9c2+0x13fe+-0x2682)]);}return _0x53775e;};_0x307f['\x57\x41\x6a\x75\x45\x4d']=_0x585f7a,_0x307f['\x58\x64\x65\x58\x61\x4f']={},_0x307f['\x6c\x69\x46\x52\x45\x55']=!![];}const _0x41b8f6=_0x3ed066[0x9*0x1a+0x1c36+-0x1d20],_0x44eddc=_0x3d35d6+_0x41b8f6,_0x137f6f=_0x307f['\x58\x64\x65\x58\x61\x4f'][_0x44eddc];if(!_0x137f6f){if(_0x307f['\x64\x72\x54\x49\x4e\x46']===undefined){const _0x39f92f=function(_0x5b3df6){this['\x6f\x48\x44\x58\x5a\x6e']=_0x5b3df6,this['\x55\x6b\x54\x45\x6d\x70']=[-0x226+-0x1f27+0x214e,0x4*-0x5b0+0x1*-0x1583+0x9*0x4eb,0x1ea9+0xb15+-0x19b*0x1a],this['\x47\x42\x41\x66\x6a\x49']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x58\x42\x4e\x77\x46\x6b']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x64\x41\x50\x49\x49\x76']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x39f92f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x68\x4b\x43\x50\x4f\x76']=function(){const _0x3795d5=new RegExp(this['\x58\x42\x4e\x77\x46\x6b']+this['\x64\x41\x50\x49\x49\x76']),_0x1f4260=_0x3795d5['\x74\x65\x73\x74'](this['\x47\x42\x41\x66\x6a\x49']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x55\x6b\x54\x45\x6d\x70'][0x2*0xa51+-0x1919+0x34*0x16]:--this['\x55\x6b\x54\x45\x6d\x70'][-0x1561+-0x9fb+0x29d*0xc];return this['\x68\x6d\x4b\x63\x7a\x6a'](_0x1f4260);},_0x39f92f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x68\x6d\x4b\x63\x7a\x6a']=function(_0x521f1c){if(!Boolean(~_0x521f1c))return _0x521f1c;return this['\x52\x71\x4f\x4a\x48\x64'](this['\x6f\x48\x44\x58\x5a\x6e']);},_0x39f92f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x52\x71\x4f\x4a\x48\x64']=function(_0xe1760d){for(let _0x57808d=-0x27*0xcd+0x1*0x1747+0x1*0x7f4,_0x5db73c=this['\x55\x6b\x54\x45\x6d\x70']['\x6c\x65\x6e\x67\x74\x68'];_0x57808d<_0x5db73c;_0x57808d++){this['\x55\x6b\x54\x45\x6d\x70']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x5db73c=this['\x55\x6b\x54\x45\x6d\x70']['\x6c\x65\x6e\x67\x74\x68'];}return _0xe1760d(this['\x55\x6b\x54\x45\x6d\x70'][-0x41b*0x6+0x8*0x2c8+0xa*0x3d]);},(''+function(){return-0x4*0x4c3+-0x1*0xb51+0x1*0x1e5d;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(-0x1*0x1217+0x1*-0x1a65+-0x65b*-0x7)&&new _0x39f92f(_0x307f)['\x68\x4b\x43\x50\x4f\x76'](),_0x307f['\x64\x72\x54\x49\x4e\x46']=!![];}_0x2a2ea9=_0x307f['\x57\x41\x6a\x75\x45\x4d'](_0x2a2ea9,_0x50b907),_0x307f['\x58\x64\x65\x58\x61\x4f'][_0x44eddc]=_0x2a2ea9;}else _0x2a2ea9=_0x137f6f;return _0x2a2ea9;}const _0x599f5b=Object['\x66\x72\x65\x65\x7a\x65'](_0xecfffc);function _0x5f295a(_0x28776b){const _0x3c334c=_0x38f6fa,_0x135ddd={'\x46\x54\x4a\x6e\x73':function(_0x3da912,_0x2092d6){return _0x3da912(_0x2092d6);},'\x59\x74\x59\x47\x6e':function(_0x551aab,_0x398706){return _0x551aab*_0x398706;},'\x75\x5a\x46\x54\x69':function(_0x2a268e,_0x44be0b){return _0x2a268e(_0x44be0b);}},_0x5bd53e=_0x28776b&&(_0x28776b[_0x3c334c(0x200,'\x59\x33\x38\x69')+'\x70']||_0x28776b[_0x3c334c(0x1f3,'\x5d\x25\x42\x36')+_0x3c334c(0x215,'\x59\x33\x38\x69')]);if(_0x5bd53e){const _0x5848e4=Date[_0x3c334c(0x207,'\x64\x30\x40\x63')](_0x5bd53e);if(Number[_0x3c334c(0x1d6,'\x71\x35\x25\x38')](_0x5848e4))return _0x5848e4;}if(_0x28776b&&Number[_0x3c334c(0x1dc,'\x50\x70\x52\x6b')](_0x135ddd[_0x3c334c(0x1db,'\x4f\x5e\x40\x79')](Number,_0x28776b[_0x3c334c(0x1ea,'\x59\x33\x38\x69')+'\x74'])))return _0x135ddd[_0x3c334c(0x217,'\x4b\x55\x35\x2a')](_0x135ddd[_0x3c334c(0x212,'\x43\x44\x4a\x52')](Number,_0x28776b[_0x3c334c(0x1e4,'\x68\x78\x4d\x79')+'\x74']),-0x1e70+-0x6cc+0x2924);return null;}function _0x18e292(_0x1ddaf0={}){const _0x55788e=_0x38f6fa,_0x5380f1={'\x46\x50\x78\x79\x53':_0x55788e(0x203,'\x62\x78\x56\x65')+_0x55788e(0x1e3,'\x29\x73\x53\x64'),'\x53\x68\x56\x5a\x65':function(_0x451b0f,_0x75b374,_0x543f78){return _0x451b0f(_0x75b374,_0x543f78);},'\x71\x6d\x6f\x43\x67':function(_0x171de1,_0x85f9a9){return _0x171de1(_0x85f9a9);},'\x56\x48\x4a\x57\x78':function(_0x370134,_0x519d26){return _0x370134*_0x519d26;},'\x7a\x70\x54\x7a\x55':function(_0x339156,_0x2e2b48){return _0x339156(_0x2e2b48);},'\x48\x6b\x4b\x6c\x7a':function(_0x3a56a7,_0x528a44){return _0x3a56a7!=_0x528a44;},'\x5a\x52\x43\x69\x61':function(_0x81190b){return _0x81190b();},'\x71\x7a\x6a\x50\x69':_0x55788e(0x1f6,'\x49\x61\x24\x76'),'\x47\x64\x56\x72\x55':function(_0x133bba,_0x57373a){return _0x133bba!==_0x57373a;},'\x74\x6d\x4f\x6a\x4b':_0x55788e(0x210,'\x45\x72\x54\x6b'),'\x62\x74\x4e\x7a\x4d':function(_0x30bbb2,_0x3b4141){return _0x30bbb2===_0x3b4141;},'\x53\x77\x77\x6f\x68':_0x55788e(0x1b9,'\x6d\x44\x68\x73'),'\x6f\x47\x4e\x6c\x6c':'\x79\x76\x74\x78\x76','\x6e\x57\x6a\x75\x74':_0x55788e(0x1c6,'\x43\x37\x47\x32'),'\x74\x63\x4b\x41\x55':_0x55788e(0x1df,'\x61\x74\x4c\x23'),'\x79\x55\x69\x53\x52':_0x55788e(0x1e5,'\x23\x35\x64\x63'),'\x68\x56\x57\x66\x61':_0x55788e(0x1f2,'\x43\x44\x4a\x52'),'\x71\x6a\x57\x4b\x42':function(_0xb595b0,_0x552100){return _0xb595b0!==_0x552100;},'\x4b\x46\x57\x6b\x56':'\x6f\x62\x6a\x65\x63\x74','\x4d\x74\x52\x67\x42':function(_0x326bd9,_0x281609){return _0x326bd9<_0x281609;},'\x68\x51\x59\x43\x50':function(_0x46de2f,_0x371c4e){return _0x46de2f>_0x371c4e;},'\x51\x49\x59\x68\x54':function(_0x96885e,_0x2d4f03){return _0x96885e(_0x2d4f03);},'\x6e\x69\x7a\x6d\x6f':function(_0x3a4edc,_0x1c119f){return _0x3a4edc>_0x1c119f;},'\x4c\x6b\x46\x41\x4f':function(_0x121796,_0x5aa25a){return _0x121796||_0x5aa25a;},'\x61\x4d\x6a\x6b\x4c':function(_0x200f4b,_0x50c304){return _0x200f4b+_0x50c304;}},_0x5f4cc9=_0x1ddaf0&&_0x1ddaf0[_0x55788e(0x20d,'\x25\x6a\x52\x6a')]!=null?Date[_0x55788e(0x1ee,'\x4b\x55\x35\x2a')](_0x1ddaf0[_0x55788e(0x1bf,'\x24\x78\x58\x6f')]):NaN,_0x2a92d6={..._0x599f5b};if(!Number[_0x55788e(0x1ce,'\x5a\x78\x4b\x6b')](_0x5f4cc9))return _0x2a92d6;const _0x50eaa3=_0x1ddaf0&&_0x5380f1[_0x55788e(0x1fa,'\x5b\x24\x59\x53')](_0x1ddaf0[_0x55788e(0x20b,'\x29\x73\x53\x64')],null)&&Number[_0x55788e(0x1b8,'\x63\x5b\x40\x23')](Date[_0x55788e(0x220,'\x48\x43\x6d\x69')](_0x1ddaf0[_0x55788e(0x1bc,'\x49\x61\x24\x76')]))?Date[_0x55788e(0x1c5,'\x68\x78\x4d\x79')](_0x1ddaf0[_0x55788e(0x1c3,'\x79\x41\x29\x70')]):Date[_0x55788e(0x1c1,'\x48\x43\x6d\x69')]();let _0x2ba0d2;try{const _0x19b6c2=_0x5380f1[_0x55788e(0x1b5,'\x24\x78\x58\x6f')](_0x383b91),_0x18bd0f={..._0x599f5b};if(!_0x505c90['\x65\x78\x69\x73\x74\x73\x53\x79'+'\x6e\x63'](_0x19b6c2))return _0x18bd0f;_0x2ba0d2=_0x505c90[_0x55788e(0x1b1,'\x45\x24\x26\x26')+_0x55788e(0x227,'\x62\x78\x56\x65')](_0x19b6c2,_0x5380f1[_0x55788e(0x21f,'\x4e\x69\x38\x5b')]);}catch(_0x2da4c8){const _0x3b1304={..._0x599f5b};return _0x3b1304;}let _0x479360=null;try{_0x479360=_0x4fb261();}catch(_0xc1343c){if(_0x5380f1[_0x55788e(0x21d,'\x57\x41\x4b\x46')](_0x55788e(0x1ec,'\x57\x41\x4b\x46'),_0x5380f1[_0x55788e(0x218,'\x50\x70\x52\x6b')]))_0x479360=null;else return _0x4d9e31[_0x55788e(0x1cb,'\x61\x74\x4c\x23')]()[_0x55788e(0x1da,'\x55\x6f\x33\x55')](WAqbRp['\x46\x50\x78\x79\x53'])[_0x55788e(0x1ef,'\x62\x36\x48\x67')]()[_0x55788e(0x1d5,'\x64\x43\x6a\x4a')+'\x74\x6f\x72'](_0x13bae5)[_0x55788e(0x1da,'\x55\x6f\x33\x55')]('\x28\x28\x28\x2e\x2b\x29\x2b\x29'+_0x55788e(0x20a,'\x42\x49\x2a\x5e'));}let _0x1476c3=0x1a7*-0x12+-0x2d+0x3*0x9f9,_0x511828=-0x1741+0x11f2+-0x3*-0x1c5,_0x1968d2=0xa1d+0x7*-0x17d+-0x1a*-0x3;for(const _0x292875 of _0x2ba0d2[_0x55788e(0x1e6,'\x5a\x78\x4b\x6b')]('\x0a')){const _0x3918b1=_0x292875[_0x55788e(0x208,'\x79\x41\x29\x70')]();if(!_0x3918b1)continue;let _0x4bb40c;try{_0x5380f1[_0x55788e(0x1af,'\x59\x33\x38\x69')](_0x5380f1[_0x55788e(0x1d4,'\x25\x6a\x52\x6a')],_0x5380f1[_0x55788e(0x1ca,'\x62\x78\x56\x65')])?_0x17cfa3=_0x5380f1[_0x55788e(0x229,'\x23\x35\x64\x63')](_0x361226,_0x4450ae,_0x13ad4e):_0x4bb40c=JSON[_0x55788e(0x214,'\x67\x6a\x58\x37')](_0x3918b1);}catch(_0x4d9e88){continue;}if(_0x4bb40c&&_0x4bb40c[_0x55788e(0x213,'\x6d\x44\x68\x73')+'\x64']){if(_0x5380f1[_0x55788e(0x1ac,'\x29\x6b\x69\x73')]!==_0x5380f1[_0x55788e(0x211,'\x25\x6a\x52\x6a')]){if(!_0x479360)continue;try{_0x4bb40c=_0x5380f1[_0x55788e(0x1f9,'\x61\x74\x4c\x23')](_0x5580b9,_0x4bb40c,_0x479360);}catch(_0x6de3e3){if(_0x5380f1[_0x55788e(0x1fb,'\x6d\x44\x68\x73')](_0x5380f1[_0x55788e(0x225,'\x45\x24\x26\x26')],_0x5380f1[_0x55788e(0x222,'\x55\x6f\x33\x55')]))continue;else _0x123f6a=_0x15142a[_0x55788e(0x1c5,'\x68\x78\x4d\x79')](_0x33e051);}}else{const _0x1a7735=_0x18a95b&&(_0x2dadc[_0x55788e(0x1d7,'\x57\x41\x4b\x46')+'\x70']||_0x5d0c6b['\x63\x72\x65\x61\x74\x65\x64\x41'+_0x55788e(0x1c0,'\x71\x38\x55\x43')]);if(_0x1a7735){const _0x2d3b64=_0x46977e[_0x55788e(0x20c,'\x55\x6f\x33\x55')](_0x1a7735);if(_0x2c5af3[_0x55788e(0x1cc,'\x64\x43\x6a\x4a')](_0x2d3b64))return _0x2d3b64;}if(_0x34bdfb&&_0x2b4fd2[_0x55788e(0x1dd,'\x62\x78\x56\x65')](WAqbRp[_0x55788e(0x20f,'\x4e\x23\x73\x65')](_0x468780,_0x100bce[_0x55788e(0x1f3,'\x5d\x25\x42\x36')+'\x74'])))return WAqbRp[_0x55788e(0x209,'\x61\x74\x4c\x23')](WAqbRp[_0x55788e(0x1bb,'\x5b\x24\x59\x53')](_0x49676d,_0x47a112[_0x55788e(0x1ea,'\x59\x33\x38\x69')+'\x74']),0x1d3*-0x1+0x8e*-0x25+0x1a41);return null;}}if(!_0x4bb40c||_0x5380f1[_0x55788e(0x204,'\x4e\x69\x38\x5b')](typeof _0x4bb40c,_0x5380f1[_0x55788e(0x1f5,'\x31\x48\x78\x79')]))continue;const _0x251baa=_0x5f295a(_0x4bb40c);if(_0x251baa==null||_0x5380f1[_0x55788e(0x1bd,'\x79\x41\x29\x70')](_0x251baa,_0x5f4cc9)||_0x5380f1[_0x55788e(0x1c9,'\x62\x36\x48\x67')](_0x251baa,_0x50eaa3))continue;const _0x501f4f=_0x5380f1['\x71\x6d\x6f\x43\x67'](Number,_0x4bb40c[_0x55788e(0x20e,'\x50\x69\x68\x5d')+'\x6b\x65\x6e\x73']),_0x15cf33=_0x5380f1[_0x55788e(0x1e0,'\x62\x78\x56\x65')](Number,_0x4bb40c[_0x55788e(0x1fe,'\x38\x26\x59\x75')+'\x6f\x6b\x65\x6e\x73']),_0x47f41b=Number[_0x55788e(0x1fc,'\x55\x6f\x33\x55')](_0x501f4f)&&_0x5380f1['\x6e\x69\x7a\x6d\x6f'](_0x501f4f,-0x2110+0x1717+0x9f9),_0xd75b08=Number[_0x55788e(0x1e9,'\x59\x68\x61\x24')](_0x15cf33)&&_0x5380f1[_0x55788e(0x1c2,'\x6d\x28\x40\x74')](_0x15cf33,-0x10b6+0x911+-0x67*-0x13);if(_0x47f41b)_0x1476c3+=_0x501f4f;if(_0xd75b08)_0x511828+=_0x15cf33;if(_0x5380f1[_0x55788e(0x1b0,'\x25\x6a\x52\x6a')](_0x47f41b,_0xd75b08))_0x1968d2+=-0x1969+-0x5e*-0x35+0x17d*0x4;}const _0x11de4a={..._0x599f5b};if(_0x5380f1[_0x55788e(0x1f1,'\x6d\x28\x40\x74')](_0x1968d2,-0x17dc+0x1*0x635+0x1*0x11a7))return _0x11de4a;return{'\x69\x6e\x70\x75\x74\x5f\x74\x6f\x6b\x65\x6e\x73':_0x1476c3,'\x6f\x75\x74\x70\x75\x74\x5f\x74\x6f\x6b\x65\x6e\x73':_0x511828,'\x74\x6f\x74\x61\x6c\x5f\x74\x6f\x6b\x65\x6e\x73':_0x5380f1['\x61\x4d\x6a\x6b\x4c'](_0x1476c3,_0x511828),'\x63\x61\x6c\x6c\x73':_0x1968d2,'\x6d\x65\x61\x73\x75\x72\x65\x64':!![]};}const _0x49e4ff={};_0x49e4ff[_0x38f6fa(0x1ab,'\x29\x73\x53\x64')+_0x38f6fa(0x1e2,'\x6d\x44\x68\x73')]=_0x18e292,module[_0x38f6fa(0x1f7,'\x25\x6a\x52\x6a')]=_0x49e4ff;
@@ -7,6 +7,7 @@ const TAB_TITLE_KEYS = {
7
7
  assets: 'nav.assets',
8
8
  interactions: 'nav.interactions',
9
9
  personality: 'nav.personality',
10
+ pullrequests: 'nav.pullRequests',
10
11
  };
11
12
 
12
13
  function activateTab(tab) {
@@ -27,6 +28,7 @@ function activateTab(tab) {
27
28
  if (tab === 'assets') loadAsset(state.currentAsset);
28
29
  if (tab === 'interactions') loadInteractions();
29
30
  if (tab === 'personality') loadPersonality();
31
+ if (tab === 'pullrequests') loadPullRequests();
30
32
  }
31
33
 
32
34
  async function refresh() {
@@ -35,6 +37,7 @@ async function refresh() {
35
37
  if (state.currentTab === 'assets') return loadAsset(state.currentAsset);
36
38
  if (state.currentTab === 'interactions') return loadInteractions();
37
39
  if (state.currentTab === 'personality') return loadPersonality();
40
+ if (state.currentTab === 'pullrequests') return loadPullRequests();
38
41
  }
39
42
 
40
43
  function disposeAllCharts() {
@@ -88,5 +91,8 @@ const localeBtn = $('locale-toggle');
88
91
  if (localeBtn) localeBtn.addEventListener('click', toggleLocale);
89
92
  window.addEventListener('resize', () => Object.values(state.charts).forEach((c) => c.resize && c.resize()));
90
93
  window.loadRun = loadRun;
94
+ // GitHub PR hovercards: install the delegated hover listener + prefetch repo
95
+ // info once, so #N references become live cards on every tab.
96
+ initGithub();
91
97
  loadOverview();
92
98
  `;
@@ -0,0 +1,225 @@
1
+ 'use strict';
2
+
3
+ // ---- GitHub PR hovercard + Pull Requests panel ----
4
+ // Replicates Claude Code's "hover a #123 → floating PR status card" behaviour.
5
+ // linkifyPRRefs() turns escaped #N text into <a class="pr-ref">; a single
6
+ // document-level delegated hover then fetches /webui/github/pr/N and renders a
7
+ // floating card (state badge, title, author, +add/-del, N files, relative
8
+ // time). A dedicated Pull Requests tab lists the repo's open PRs, each row
9
+ // itself hoverable.
10
+ exports.githubJs = `
11
+ // Repo info (prUrlBase) for building hrefs. Prefetched at init; linkify falls
12
+ // back to '#' until it resolves (the hovercard fetch works regardless).
13
+ let GITHUB_REPO_INFO = { prUrlBase: null, slug: null, available: false };
14
+ const PR_CARD_CACHE = {}; // number -> normalized PR data (client-side memo)
15
+
16
+ function prUrlFor(n) {
17
+ return GITHUB_REPO_INFO.prUrlBase ? (GITHUB_REPO_INFO.prUrlBase + '/' + n) : '#';
18
+ }
19
+
20
+ // Turn '#123' references inside ALREADY-ESCAPED text into anchor chips.
21
+ // Input MUST be esc()'d first: we only ever linkify plain text, never raw
22
+ // HTML, so we can't corrupt existing markup or attributes. The prefix class
23
+ // [^\\w\\/&] refuses matches after a word char (abc#1), a slash (URL paths)
24
+ // or an ampersand (numeric entities like &#39;), so only free-standing #N
25
+ // becomes a link. The number is [1-9]\\d* — a real PR number is never 0 or
26
+ // zero-padded, so '#0' / '#007' are left as plain text rather than dead chips.
27
+ function linkifyPRRefs(escapedText) {
28
+ if (escapedText == null) return '';
29
+ const s = String(escapedText);
30
+ if (s.indexOf('#') === -1) return s;
31
+ return s.replace(/(^|[^\\w\\/&])#([1-9]\\d*)\\b/g, function (m, pre, num) {
32
+ return pre + '<a class="pr-ref" data-pr="' + num + '" href="' + prUrlFor(num) +
33
+ '" target="_blank" rel="noopener noreferrer">#' + num + '</a>';
34
+ });
35
+ }
36
+
37
+ // Compact relative time — mirrors the '14m ago' line in the reference card.
38
+ function relativeTime(iso) {
39
+ if (!iso) return '';
40
+ const then = new Date(iso).getTime();
41
+ if (isNaN(then)) return '';
42
+ let secs = Math.floor((Date.now() - then) / 1000);
43
+ const future = secs < 0;
44
+ secs = Math.abs(secs);
45
+ let out;
46
+ if (secs < 45) out = 'just now';
47
+ else if (secs < 5400) { const m = Math.max(1, Math.round(secs / 60)); out = m + 'm'; }
48
+ else if (secs < 86400) { out = Math.round(secs / 3600) + 'h'; }
49
+ else if (secs < 2592000) { out = Math.round(secs / 86400) + 'd'; }
50
+ else if (secs < 31536000) { out = Math.round(secs / 2592000) + 'mo'; }
51
+ else { out = Math.round(secs / 31536000) + 'y'; }
52
+ if (out === 'just now') return out;
53
+ return future ? ('in ' + out) : (out + ' ago');
54
+ }
55
+
56
+ function prStateLabel(state) {
57
+ const key = 'pr.state.' + state;
58
+ const label = t(key);
59
+ return label === key ? state : label;
60
+ }
61
+
62
+ // --- Floating hovercard (single instance) ---
63
+ let _prCardEl = null;
64
+ let _prShowTimer = null;
65
+ let _prHideTimer = null;
66
+ let _prActiveNum = null;
67
+
68
+ function ensurePrCard() {
69
+ if (_prCardEl) return _prCardEl;
70
+ _prCardEl = document.createElement('div');
71
+ _prCardEl.id = 'pr-hovercard';
72
+ _prCardEl.className = 'pr-hovercard';
73
+ _prCardEl.style.display = 'none';
74
+ // Keep the card open while the pointer is on it (enterable), so users can
75
+ // click the GitHub link inside.
76
+ _prCardEl.addEventListener('mouseenter', function () { clearTimeout(_prHideTimer); });
77
+ _prCardEl.addEventListener('mouseleave', hidePrCard);
78
+ document.body.appendChild(_prCardEl);
79
+ return _prCardEl;
80
+ }
81
+
82
+ function prCardLoadingHtml(n) {
83
+ return '<div class="pr-card-head"><span class="pr-badge loading">·</span>' +
84
+ '<span class="pr-card-ref">#' + esc(n) + '</span></div>' +
85
+ '<div class="pr-card-title muted">' + esc(t('pr.loading')) + '</div>';
86
+ }
87
+
88
+ function prCardUnavailableHtml(n, data) {
89
+ const reason = data && data.reason ? data.reason : 'unavailable';
90
+ return '<div class="pr-card-head"><span class="pr-badge unknown">?</span>' +
91
+ '<a class="pr-card-ref" href="' + prUrlFor(n) + '" target="_blank" rel="noopener noreferrer">#' + esc(n) + '</a></div>' +
92
+ '<div class="pr-card-title muted">' + esc(t('pr.unavailable')) + '</div>' +
93
+ '<div class="pr-card-meta muted small">' + esc(reason) + '</div>';
94
+ }
95
+
96
+ function prCardSuccessHtml(d) {
97
+ const state = d.state || 'open';
98
+ const badge = '<span class="pr-badge ' + esc(state) + '">' + esc(prStateLabel(state)) + '</span>';
99
+ const when = d.mergedAt || d.closedAt || d.updatedAt || d.createdAt;
100
+ const rel = relativeTime(when);
101
+ const author = d.author ? ('<span class="pr-card-author">' + esc(d.author) + '</span>') : '';
102
+ const diff = '<span class="pr-diff"><span class="pr-add">+' + esc(d.additions || 0) + '</span> ' +
103
+ '<span class="pr-del">\\u2212' + esc(d.deletions || 0) + '</span></span>';
104
+ const files = '<span class="pr-files">' + esc(d.changedFiles || 0) + ' ' + esc(t('pr.files')) + '</span>';
105
+ return '<div class="pr-card-head">' + badge +
106
+ '<a class="pr-card-ref" href="' + esc(d.url || prUrlFor(d.number)) + '" target="_blank" rel="noopener noreferrer">#' + esc(d.number) + '</a>' +
107
+ (rel ? '<span class="pr-card-time muted">' + esc(rel) + '</span>' : '') +
108
+ '</div>' +
109
+ '<div class="pr-card-title">' + esc(d.title || '') + '</div>' +
110
+ '<div class="pr-card-meta">' + author + diff + files + '</div>';
111
+ }
112
+
113
+ function renderPrCard(n, data) {
114
+ const el = ensurePrCard();
115
+ if (!data) el.innerHTML = prCardLoadingHtml(n);
116
+ else if (!data.available) el.innerHTML = prCardUnavailableHtml(n, data);
117
+ else el.innerHTML = prCardSuccessHtml(data);
118
+ }
119
+
120
+ // Position the card above the anchor (as in the reference), flipping below
121
+ // when it would overflow the top of the viewport. Uses fixed positioning so
122
+ // getBoundingClientRect (viewport-relative) maps directly.
123
+ function positionPrCard(anchor) {
124
+ const el = _prCardEl;
125
+ if (!el || !anchor) return;
126
+ const r = anchor.getBoundingClientRect();
127
+ el.style.display = 'block';
128
+ const cw = el.offsetWidth;
129
+ const ch = el.offsetHeight;
130
+ let left = r.left;
131
+ if (left + cw > window.innerWidth - 8) left = Math.max(8, window.innerWidth - cw - 8);
132
+ let top = r.top - ch - 8;
133
+ if (top < 8) top = r.bottom + 8; // flip below when no room above
134
+ el.style.left = Math.round(left) + 'px';
135
+ el.style.top = Math.round(top) + 'px';
136
+ }
137
+
138
+ async function showPrCard(anchor) {
139
+ const n = anchor.getAttribute('data-pr');
140
+ if (!n) return;
141
+ _prActiveNum = n;
142
+ renderPrCard(n, PR_CARD_CACHE[n] || null); // instant paint: cache or loading
143
+ positionPrCard(anchor);
144
+ if (PR_CARD_CACHE[n]) return;
145
+ try {
146
+ const data = await api('/webui/github/pr/' + encodeURIComponent(n));
147
+ PR_CARD_CACHE[n] = data;
148
+ if (_prActiveNum === n) { renderPrCard(n, data); positionPrCard(anchor); }
149
+ } catch (err) {
150
+ if (_prActiveNum === n) {
151
+ renderPrCard(n, { number: n, available: false, reason: (err && err.message) || 'error' });
152
+ positionPrCard(anchor);
153
+ }
154
+ }
155
+ }
156
+
157
+ function hidePrCard() {
158
+ clearTimeout(_prHideTimer);
159
+ _prHideTimer = setTimeout(function () {
160
+ if (_prCardEl) _prCardEl.style.display = 'none';
161
+ _prActiveNum = null;
162
+ }, 180);
163
+ }
164
+
165
+ function initPrHovercards() {
166
+ ensurePrCard();
167
+ // Event delegation: one pair of listeners covers every current and future
168
+ // .pr-ref, no matter which tab rendered it.
169
+ document.addEventListener('mouseover', function (e) {
170
+ const ref = e.target && e.target.closest ? e.target.closest('.pr-ref') : null;
171
+ if (!ref) return;
172
+ clearTimeout(_prHideTimer);
173
+ clearTimeout(_prShowTimer);
174
+ _prShowTimer = setTimeout(function () { showPrCard(ref); }, 250); // debounce hover
175
+ });
176
+ document.addEventListener('mouseout', function (e) {
177
+ const ref = e.target && e.target.closest ? e.target.closest('.pr-ref') : null;
178
+ if (!ref) return;
179
+ clearTimeout(_prShowTimer);
180
+ hidePrCard();
181
+ });
182
+ }
183
+
184
+ async function initGithub() {
185
+ initPrHovercards();
186
+ try {
187
+ const info = await api('/webui/github/repo');
188
+ if (info) GITHUB_REPO_INFO = info;
189
+ } catch (_) { /* linkify falls back to '#'; hovercard still works */ }
190
+ }
191
+
192
+ // --- Pull Requests panel ---
193
+ async function loadPullRequests() {
194
+ const host = $('pull-requests');
195
+ if (!host) return;
196
+ // Localized placeholder while the (cold gh pr list) fetch resolves — avoids
197
+ // sitting on the static English "Loading..." from the server-rendered shell.
198
+ host.innerHTML = '<p class="muted">' + esc(t('common.loading')) + '</p>';
199
+ let res;
200
+ try {
201
+ res = await api('/webui/github/prs');
202
+ } catch (err) {
203
+ host.innerHTML = '<p class="status-failed">' + esc(t('pr.loadFailed')) + esc(err.message || '') + '</p>';
204
+ return;
205
+ }
206
+ renderPullRequests(res && res.data ? res.data : []);
207
+ }
208
+
209
+ function renderPullRequests(prs) {
210
+ const host = $('pull-requests');
211
+ if (!host) return;
212
+ if (!prs.length) {
213
+ // No open PRs (or gh unavailable): guide the user to hover any #N instead.
214
+ host.innerHTML = '<p class="muted">' + esc(t('pr.empty')) + '</p>';
215
+ return;
216
+ }
217
+ host.innerHTML = '<ul class="pr-list">' + prs.map(function (pr) {
218
+ const ref = '<a class="pr-ref" data-pr="' + esc(pr.number) + '" href="' + prUrlFor(pr.number) +
219
+ '" target="_blank" rel="noopener noreferrer">#' + esc(pr.number) + '</a>';
220
+ const branch = pr.headRefName ? ('<span class="pill">' + esc(pr.headRefName) + '</span>') : '';
221
+ const files = '<span class="muted small">' + esc(pr.fileCount || 0) + ' ' + esc(t('pr.files')) + '</span>';
222
+ return '<li class="pr-row">' + ref + ' <span class="pr-row-title">' + esc(pr.title || '') + '</span> ' + branch + ' ' + files + '</li>';
223
+ }).join('') + '</ul>';
224
+ }
225
+ `;
@@ -36,6 +36,7 @@ const I18N_DICT = {
36
36
  'nav.assets': { en: 'Assets', zh: '资产' },
37
37
  'nav.interactions': { en: 'Interactions', zh: '交互' },
38
38
  'nav.personality': { en: 'Personality', zh: '人格' },
39
+ 'nav.pullRequests': { en: 'Pull Requests', zh: 'PR' },
39
40
 
40
41
  // ---- Common ----
41
42
  'common.loading': { en: 'Loading...', zh: '加载中...' },
@@ -262,6 +263,19 @@ const I18N_DICT = {
262
263
  'personality.cat.mutation': { en: 'Mutation', zh: '变异' },
263
264
  'personality.cat.asset': { en: 'Asset', zh: '资产' },
264
265
  'personality.cat.run': { en: 'Run', zh: '运行' },
266
+
267
+ // ---- Pull Requests (panel + PR hovercard) ----
268
+ 'pr.card.title': { en: 'Pull Requests', zh: 'Pull Requests' },
269
+ 'pr.card.desc': { en: 'Open pull requests on this repository. Hover any #reference — here or anywhere in the dashboard — for its live GitHub status.', zh: '本仓库的开放 PR。悬浮任意 #编号(此处或仪表盘任意位置)即可查看其 GitHub 实时状态。' },
270
+ 'pr.empty': { en: 'No open pull requests (or gh CLI unavailable). Hover a #reference anywhere to fetch its status.', zh: '暂无开放 PR(或 gh CLI 不可用)。悬浮任意位置的 #编号即可拉取其状态。' },
271
+ 'pr.loading': { en: 'Loading PR…', zh: '加载 PR 中…' },
272
+ 'pr.loadFailed': { en: 'Failed to load pull requests: ', zh: '加载 PR 失败:' },
273
+ 'pr.unavailable': { en: 'PR status unavailable', zh: 'PR 状态不可用' },
274
+ 'pr.files': { en: 'files', zh: '文件' },
275
+ 'pr.state.merged': { en: 'Merged', zh: '已合并' },
276
+ 'pr.state.open': { en: 'Open', zh: '开放' },
277
+ 'pr.state.closed': { en: 'Closed', zh: '已关闭' },
278
+ 'pr.state.draft': { en: 'Draft', zh: '草稿' },
265
279
  };
266
280
 
267
281
  // Status / outcome enum tokens — keep raw key as fallback so unknown
@@ -7,6 +7,7 @@ const { pipelinesJs } = require('./pipelines');
7
7
  const { assetsJs } = require('./assets');
8
8
  const { interactionsJs } = require('./interactions');
9
9
  const { personalityJs } = require('./personality');
10
+ const { githubJs } = require('./github');
10
11
  const { bootstrapJs } = require('./bootstrap');
11
12
 
12
13
  const SECTION_HEADERS = {
@@ -16,6 +17,7 @@ const SECTION_HEADERS = {
16
17
  assets: '// ---- Assets ----',
17
18
  interactions: '// ---- Interactions (Hub Activity unified timeline + Agent) ----',
18
19
  personality: '// ---- Personality ----',
20
+ github: '// ---- GitHub (PR hovercard + Pull Requests panel) ----',
19
21
  bootstrap: '// ---- Tabs ----',
20
22
  };
21
23
 
@@ -28,6 +30,7 @@ function getClientJs() {
28
30
  SECTION_HEADERS.assets, assetsJs,
29
31
  SECTION_HEADERS.interactions, interactionsJs,
30
32
  SECTION_HEADERS.personality, personalityJs,
33
+ SECTION_HEADERS.github, githubJs,
31
34
  SECTION_HEADERS.bootstrap, bootstrapJs,
32
35
  ].join('\n');
33
36
  }
@@ -227,7 +227,9 @@ function renderRunDetail(run) {
227
227
  ) + '</div>';
228
228
  }
229
229
  if (detail.initialUserPrompt) {
230
- html += '<div class="detail-block"><h4>' + esc(t('pipelines.detail.initialUserPrompt')) + '</h4><pre class="snippet">' + esc(detail.initialUserPrompt) + '</pre></div>';
230
+ // Linkify PR refs (#123) authors wrote in the prompt — esc() FIRST, then
231
+ // linkify the escaped text, so we never turn raw input into markup.
232
+ html += '<div class="detail-block"><h4>' + esc(t('pipelines.detail.initialUserPrompt')) + '</h4><pre class="snippet">' + linkifyPRRefs(esc(detail.initialUserPrompt)) + '</pre></div>';
231
233
  }
232
234
  html += '</div>';
233
235
  }
@@ -16,6 +16,7 @@ const ICONS = {
16
16
  refresh: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/></svg>',
17
17
  sun: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></svg>',
18
18
  moon: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></svg>',
19
+ gitpr: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M13 6h3a2 2 0 0 1 2 2v7"/><line x1="6" x2="6" y1="9" y2="21"/></svg>',
19
20
  };
20
21
 
21
22
  // Sidebar items reference an i18n key; the live label is rendered by
@@ -26,6 +27,7 @@ const NAV = [
26
27
  { tab: 'assets', icon: 'package', labelKey: 'nav.assets' },
27
28
  { tab: 'interactions', icon: 'activity', labelKey: 'nav.interactions' },
28
29
  { tab: 'personality', icon: 'brain', labelKey: 'nav.personality' },
30
+ { tab: 'pullrequests', icon: 'gitpr', labelKey: 'nav.pullRequests' },
29
31
  ];
30
32
 
31
33
  function navItem({ tab, icon, labelKey }, idx) {
@@ -210,6 +212,14 @@ function getIndexHtml() {
210
212
  <div id="memory-graph-chart" class="chart-container chart-xl"></div>
211
213
  </div>
212
214
  </section>
215
+
216
+ <section data-view="pullrequests" class="view">
217
+ <div class="card">
218
+ <h2 data-i18n="pr.card.title">Pull Requests</h2>
219
+ <p class="muted small card-sub" data-i18n="pr.card.desc">Open pull requests on this repository. Hover any #reference — here or anywhere in the dashboard — for its live GitHub status.</p>
220
+ <div id="pull-requests" data-i18n="common.loading">Loading...</div>
221
+ </div>
222
+ </section>
213
223
  </main>
214
224
  </div>
215
225
  </div>
@@ -633,6 +633,67 @@ tr:last-child td { border-bottom: none; }
633
633
  border-radius: 10px;
634
634
  font-size: 13px;
635
635
  }
636
+
637
+ /* ---- GitHub PR references + hovercard + Pull Requests panel ---- */
638
+ .pr-ref {
639
+ color: hsl(var(--accent));
640
+ text-decoration: none;
641
+ font-weight: 600;
642
+ white-space: nowrap;
643
+ border-bottom: 1px dotted hsl(var(--accent) / 0.5);
644
+ }
645
+ .pr-ref:hover { border-bottom-style: solid; }
646
+
647
+ /* Floating card. Uses the (previously unused) popover surface tokens ported
648
+ from evox-desktop, so it matches light/dark automatically. */
649
+ .pr-hovercard {
650
+ position: fixed;
651
+ z-index: 1000;
652
+ max-width: 340px;
653
+ min-width: 220px;
654
+ padding: 12px 14px;
655
+ background: hsl(var(--popover));
656
+ color: hsl(var(--popover-foreground));
657
+ border: 1px solid hsl(var(--border));
658
+ border-radius: 12px;
659
+ box-shadow: 0 8px 28px rgba(0,0,0,0.22);
660
+ font-size: 13px;
661
+ line-height: 1.45;
662
+ pointer-events: auto;
663
+ }
664
+ .pr-card-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
665
+ .pr-card-ref { color: hsl(var(--muted-foreground)); font-weight: 600; text-decoration: none; }
666
+ .pr-card-ref:hover { color: hsl(var(--accent)); }
667
+ .pr-card-time { margin-left: auto; font-size: 12px; }
668
+ .pr-card-title { font-weight: 600; margin: 2px 0 8px 0; word-break: break-word; }
669
+ .pr-card-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; font-size: 12px; }
670
+ .pr-card-author { color: hsl(var(--muted-foreground)); }
671
+ .pr-diff { font-variant-numeric: tabular-nums; }
672
+ .pr-add { color: hsl(var(--success)); font-weight: 600; }
673
+ .pr-del { color: hsl(var(--destructive)); font-weight: 600; }
674
+ .pr-files { color: hsl(var(--muted-foreground)); }
675
+
676
+ /* Status badge — colour keyed to normalized state. */
677
+ .pr-badge {
678
+ display: inline-flex;
679
+ align-items: center;
680
+ padding: 1px 9px;
681
+ border-radius: 999px;
682
+ font-size: 11px;
683
+ font-weight: 700;
684
+ text-transform: none;
685
+ white-space: nowrap;
686
+ }
687
+ .pr-badge.merged { background: hsl(271 60% 55% / 0.16); color: hsl(271 60% 60%); }
688
+ .pr-badge.open { background: hsl(var(--success) / 0.16); color: hsl(var(--success)); }
689
+ .pr-badge.closed { background: hsl(var(--destructive) / 0.16); color: hsl(var(--destructive)); }
690
+ .pr-badge.draft { background: hsl(var(--muted-foreground) / 0.16); color: hsl(var(--muted-foreground)); }
691
+ .pr-badge.unknown,
692
+ .pr-badge.loading { background: hsl(var(--muted-foreground) / 0.14); color: hsl(var(--muted-foreground)); }
693
+
694
+ .pr-list { list-style: none; margin: 4px 0 0 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
695
+ .pr-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding: 8px 10px; border: 1px solid hsl(var(--border) / 0.5); border-radius: 10px; }
696
+ .pr-row-title { flex: 1 1 auto; min-width: 0; word-break: break-word; }
636
697
  `;
637
698
  }
638
699