@evomap/evolver 1.90.0 → 2.0.0-beta.1

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 (231) hide show
  1. package/README.md +27 -564
  2. package/bin/evolver-llm-proxy.js +3 -0
  3. package/bin/evolver-mcp.js +2 -0
  4. package/bin/evolver-proxy.js +3 -0
  5. package/bin/evolver.js +4 -0
  6. package/index.js +1 -3670
  7. package/package.json +32 -62
  8. package/CONTRIBUTING.md +0 -19
  9. package/LICENSE +0 -641
  10. package/README.ja-JP.md +0 -521
  11. package/README.ko-KR.md +0 -520
  12. package/README.zh-CN.md +0 -531
  13. package/SKILL.md +0 -365
  14. package/assets/cover.png +0 -0
  15. package/assets/gep/genes.seed.json +0 -496
  16. package/conformance/savings-core/constants.json +0 -30
  17. package/conformance/savings-core/golden-vectors.json +0 -333
  18. package/scripts/a2a_export.js +0 -63
  19. package/scripts/a2a_ingest.js +0 -79
  20. package/scripts/a2a_promote.js +0 -118
  21. package/scripts/analyze_by_skill.js +0 -121
  22. package/scripts/build_binaries.js +0 -479
  23. package/scripts/check-changelog.js +0 -166
  24. package/scripts/extract_log.js +0 -85
  25. package/scripts/generate_history.js +0 -75
  26. package/scripts/gep_append_event.js +0 -96
  27. package/scripts/gep_personality_report.js +0 -234
  28. package/scripts/human_report.js +0 -147
  29. package/scripts/recall-verify-report.js +0 -234
  30. package/scripts/recover_loop.js +0 -61
  31. package/scripts/refresh_stars_badge.js +0 -168
  32. package/scripts/seed-merchants.js +0 -91
  33. package/scripts/skill2recipes.js +0 -118
  34. package/scripts/suggest_version.js +0 -89
  35. package/scripts/validate-modules.js +0 -38
  36. package/scripts/validate-suite.js +0 -78
  37. package/src/adapters/claudeCode.js +0 -194
  38. package/src/adapters/codex.js +0 -216
  39. package/src/adapters/cursor.js +0 -91
  40. package/src/adapters/hookAdapter.js +0 -469
  41. package/src/adapters/kiro.js +0 -195
  42. package/src/adapters/opencode.js +0 -326
  43. package/src/adapters/scripts/_lockPaths.js +0 -74
  44. package/src/adapters/scripts/_memoryFiltering.js +0 -35
  45. package/src/adapters/scripts/_runtimePaths.js +0 -440
  46. package/src/adapters/scripts/evolver-session-end.js +0 -321
  47. package/src/adapters/scripts/evolver-session-start.js +0 -587
  48. package/src/adapters/scripts/evolver-signal-detect.js +0 -98
  49. package/src/adapters/scripts/evolver-task-recall.js +0 -173
  50. package/src/atp/atpExecute.js +0 -283
  51. package/src/atp/atpTaskPickup.js +0 -233
  52. package/src/atp/autoBuyer.js +0 -382
  53. package/src/atp/autoDeliver.js +0 -215
  54. package/src/atp/cli.js +0 -354
  55. package/src/atp/cliAutobuyPrompt.js +0 -154
  56. package/src/atp/consumerAgent.js +0 -157
  57. package/src/atp/defaultHandler.js +0 -69
  58. package/src/atp/heartbeatSignalsHandler.js +0 -254
  59. package/src/atp/hubClient.js +0 -317
  60. package/src/atp/index.js +0 -38
  61. package/src/atp/merchantAgent.js +0 -118
  62. package/src/atp/protocol.js +0 -41
  63. package/src/atp/questionComposer.js +0 -133
  64. package/src/atp/serviceHelper.js +0 -92
  65. package/src/canary.js +0 -13
  66. package/src/config.js +0 -351
  67. package/src/evolve/guards.js +0 -1
  68. package/src/evolve/pipeline/collect.js +0 -1
  69. package/src/evolve/pipeline/dispatch.js +0 -1
  70. package/src/evolve/pipeline/enrich.js +0 -1
  71. package/src/evolve/pipeline/hub.js +0 -1
  72. package/src/evolve/pipeline/select.js +0 -1
  73. package/src/evolve/pipeline/signals.js +0 -1
  74. package/src/evolve/utils.js +0 -1
  75. package/src/evolve.js +0 -1
  76. package/src/experiment/agentRunner.js +0 -229
  77. package/src/experiment/cli.js +0 -159
  78. package/src/experiment/comparison.js +0 -233
  79. package/src/experiment/metrics.js +0 -75
  80. package/src/forceUpdate.js +0 -991
  81. package/src/gep/a2a.js +0 -173
  82. package/src/gep/a2aProtocol.js +0 -1
  83. package/src/gep/analyzer.js +0 -35
  84. package/src/gep/antiAbuseTelemetry.js +0 -1
  85. package/src/gep/assetCallLog.js +0 -197
  86. package/src/gep/assetStore.js +0 -723
  87. package/src/gep/assets.js +0 -36
  88. package/src/gep/autoDistillConv.js +0 -1
  89. package/src/gep/autoDistillLlm.js +0 -1
  90. package/src/gep/bridge.js +0 -138
  91. package/src/gep/candidateEval.js +0 -1
  92. package/src/gep/candidates.js +0 -1
  93. package/src/gep/claimNudge.js +0 -121
  94. package/src/gep/cliContracts.js +0 -1190
  95. package/src/gep/contentHash.js +0 -1
  96. package/src/gep/conversationDistiller.js +0 -1
  97. package/src/gep/conversationSniffer.js +0 -1
  98. package/src/gep/crypto.js +0 -1
  99. package/src/gep/curriculum.js +0 -1
  100. package/src/gep/deviceId.js +0 -1
  101. package/src/gep/directoryClient.js +0 -115
  102. package/src/gep/envFingerprint.js +0 -1
  103. package/src/gep/epigenetics.js +0 -1
  104. package/src/gep/execBridge.js +0 -1
  105. package/src/gep/executionTrace.js +0 -291
  106. package/src/gep/explore.js +0 -1
  107. package/src/gep/featureFlags.js +0 -121
  108. package/src/gep/gitOps.js +0 -265
  109. package/src/gep/hash.js +0 -1
  110. package/src/gep/hostErrorClassifier.js +0 -34
  111. package/src/gep/hubFetch.js +0 -1
  112. package/src/gep/hubReview.js +0 -1
  113. package/src/gep/hubSearch.js +0 -1
  114. package/src/gep/hubVerify.js +0 -1
  115. package/src/gep/idleScheduler.js +0 -400
  116. package/src/gep/issueReporter.js +0 -416
  117. package/src/gep/learningSignals.js +0 -1
  118. package/src/gep/llmReview.js +0 -92
  119. package/src/gep/localStateAwareness.js +0 -243
  120. package/src/gep/mailboxTransport.js +0 -119
  121. package/src/gep/memoryGraph.js +0 -1
  122. package/src/gep/memoryGraphAdapter.js +0 -1
  123. package/src/gep/mutation.js +0 -1
  124. package/src/gep/narrativeMemory.js +0 -1
  125. package/src/gep/oauthLogin.js +0 -181
  126. package/src/gep/openPRRegistry.js +0 -1
  127. package/src/gep/paths.js +0 -522
  128. package/src/gep/personality.js +0 -1
  129. package/src/gep/policyCheck.js +0 -1
  130. package/src/gep/portable.js +0 -103
  131. package/src/gep/privacyClient.js +0 -235
  132. package/src/gep/prompt.js +0 -1
  133. package/src/gep/questionGenerator.js +0 -518
  134. package/src/gep/recallInject.js +0 -1
  135. package/src/gep/recallVerifier.js +0 -1
  136. package/src/gep/reflection.js +0 -1
  137. package/src/gep/sanitize.js +0 -264
  138. package/src/gep/savingsCore.js +0 -1
  139. package/src/gep/schemas/capsule.js +0 -170
  140. package/src/gep/schemas/gene.js +0 -154
  141. package/src/gep/schemas/index.js +0 -8
  142. package/src/gep/schemas/protocol.js +0 -51
  143. package/src/gep/schemas/task.js +0 -74
  144. package/src/gep/selector.js +0 -1
  145. package/src/gep/selfPR.js +0 -469
  146. package/src/gep/signals.js +0 -776
  147. package/src/gep/skill2gep.js +0 -1056
  148. package/src/gep/skill2gepAudit.js +0 -303
  149. package/src/gep/skill2recipes.js +0 -511
  150. package/src/gep/skillDistiller.js +0 -1
  151. package/src/gep/skillPublisher.js +0 -358
  152. package/src/gep/solidify.js +0 -1
  153. package/src/gep/strategy.js +0 -1
  154. package/src/gep/taskReceiver.js +0 -575
  155. package/src/gep/tokenSavings.js +0 -1
  156. package/src/gep/trajectoryExport.js +0 -1
  157. package/src/gep/validationReport.js +0 -55
  158. package/src/gep/validator/index.js +0 -411
  159. package/src/gep/validator/reporter.js +0 -210
  160. package/src/gep/validator/sandboxExecutor.js +0 -480
  161. package/src/gep/validator/stakeBootstrap.js +0 -357
  162. package/src/gep/workspaceKeychain.js +0 -1
  163. package/src/ops/cleanup.js +0 -80
  164. package/src/ops/commentary.js +0 -60
  165. package/src/ops/health_check.js +0 -104
  166. package/src/ops/index.js +0 -11
  167. package/src/ops/innovation.js +0 -67
  168. package/src/ops/lifecycle.js +0 -798
  169. package/src/ops/self_repair.js +0 -76
  170. package/src/ops/skills_monitor.js +0 -147
  171. package/src/ops/trigger.js +0 -33
  172. package/src/proxy/clientSettings.js +0 -405
  173. package/src/proxy/envelope.js +0 -59
  174. package/src/proxy/extensions/dmHandler.js +0 -45
  175. package/src/proxy/extensions/sessionHandler.js +0 -141
  176. package/src/proxy/extensions/skillUpdater.js +0 -64
  177. package/src/proxy/extensions/traceControl.js +0 -1
  178. package/src/proxy/index.js +0 -1395
  179. package/src/proxy/inject.js +0 -1
  180. package/src/proxy/lifecycle/manager.js +0 -1568
  181. package/src/proxy/mailbox/state.js +0 -207
  182. package/src/proxy/mailbox/store.js +0 -602
  183. package/src/proxy/router/cache_passthrough.js +0 -26
  184. package/src/proxy/router/features.js +0 -84
  185. package/src/proxy/router/gemini_route.js +0 -154
  186. package/src/proxy/router/messages_route.js +0 -535
  187. package/src/proxy/router/model_router.js +0 -113
  188. package/src/proxy/router/models_route.js +0 -52
  189. package/src/proxy/router/ollama_route.js +0 -103
  190. package/src/proxy/router/responses_route.js +0 -170
  191. package/src/proxy/router/vertex_route.js +0 -110
  192. package/src/proxy/server/http.js +0 -363
  193. package/src/proxy/server/routes.js +0 -558
  194. package/src/proxy/server/settings.js +0 -115
  195. package/src/proxy/sync/engine.js +0 -179
  196. package/src/proxy/sync/inbound.js +0 -211
  197. package/src/proxy/sync/outbound.js +0 -361
  198. package/src/proxy/task/monitor.js +0 -131
  199. package/src/proxy/trace/extractor.js +0 -1
  200. package/src/proxy/trace/usage.js +0 -1
  201. package/src/solo/breaker.js +0 -25
  202. package/src/solo/gitGuard.js +0 -65
  203. package/src/webui/client/clientJs/assets.js +0 -111
  204. package/src/webui/client/clientJs/bootstrap.js +0 -92
  205. package/src/webui/client/clientJs/common.js +0 -77
  206. package/src/webui/client/clientJs/i18n.js +0 -366
  207. package/src/webui/client/clientJs/index.js +0 -35
  208. package/src/webui/client/clientJs/interactions.js +0 -351
  209. package/src/webui/client/clientJs/overview.js +0 -152
  210. package/src/webui/client/clientJs/personality.js +0 -285
  211. package/src/webui/client/clientJs/pipelines.js +0 -330
  212. package/src/webui/client/indexHtml.js +0 -221
  213. package/src/webui/client/static.js +0 -23
  214. package/src/webui/client/stylesCss.js +0 -639
  215. package/src/webui/client/vendor/README.md +0 -15
  216. package/src/webui/client/vendor/echarts.min.js +0 -45
  217. package/src/webui/index.js +0 -14
  218. package/src/webui/observer/assets.js +0 -146
  219. package/src/webui/observer/index.js +0 -37
  220. package/src/webui/observer/interactions.js +0 -127
  221. package/src/webui/observer/jsonl.js +0 -75
  222. package/src/webui/observer/paths.js +0 -46
  223. package/src/webui/observer/personality.js +0 -43
  224. package/src/webui/observer/pipelineEvents.js +0 -58
  225. package/src/webui/observer/redact.js +0 -63
  226. package/src/webui/observer/runs.js +0 -356
  227. package/src/webui/observer/safety.js +0 -57
  228. package/src/webui/observer/skills.js +0 -70
  229. package/src/webui/observer/status.js +0 -71
  230. package/src/webui/server/http.js +0 -138
  231. package/src/webui/server/routes.js +0 -41
@@ -1 +0,0 @@
1
- var _0x232e96=_0x3b2a;function _0x3b2a(_0x430669,_0x4cb88f){_0x430669=_0x430669-(-0x1568+-0x54*0x1+0x1*0x16e1);var _0x3002ec=_0x328b();var _0x1dc506=_0x3002ec[_0x430669];if(_0x3b2a['\x7a\x7a\x76\x74\x51\x6d']===undefined){var _0x3b8a4e=function(_0x1f9493){var _0x535ca5='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';var _0x163cc2='',_0x11b9bd='',_0x3a5994=_0x163cc2+_0x3b8a4e,_0xc0a5f1=(''+function(){return-0x233+-0x165f+-0xaa*-0x25;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0x1401+0x1adf+0x39b*-0xd);for(var _0x482c10=-0x9b*-0x6+0xcae+-0x1050,_0x23843a,_0x1c80a1,_0x3113da=0xddc+0x3*0x99e+0xb*-0x3e2;_0x1c80a1=_0x1f9493['\x63\x68\x61\x72\x41\x74'](_0x3113da++);~_0x1c80a1&&(_0x23843a=_0x482c10%(0x21af*-0x1+0x1*0x1c76+-0x53d*-0x1)?_0x23843a*(-0x29a+0x1*-0xfea+0x12c4)+_0x1c80a1:_0x1c80a1,_0x482c10++%(-0x11b1+0x1*0x1a13+-0x85e))?_0x163cc2+=_0xc0a5f1||_0x3a5994['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3113da+(-0x237b+0x1f68+0x41d))-(-0x35*-0x23+-0x6*-0x493+-0x3*0xb8d)!==0x2ee+-0x1a79+0x178b?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x1cd9+0xf8*0x14+0x86*0x14&_0x23843a>>(-(0xa76+0x7*-0x55d+0x1b17)*_0x482c10&-0xc80*-0x2+-0xb*-0x95+-0x1f61)):_0x482c10:-0x3*-0xc01+0xfe4+-0x33e7){_0x1c80a1=_0x535ca5['\x69\x6e\x64\x65\x78\x4f\x66'](_0x1c80a1);}for(var _0x29ae5c=0x13ee+-0x1583+0x5*0x51,_0x577ddf=_0x163cc2['\x6c\x65\x6e\x67\x74\x68'];_0x29ae5c<_0x577ddf;_0x29ae5c++){_0x11b9bd+='\x25'+('\x30\x30'+_0x163cc2['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x29ae5c)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x195d+0x1e0e+-0x375b))['\x73\x6c\x69\x63\x65'](-(0x75+-0x20a7+-0x55e*-0x6));}return decodeURIComponent(_0x11b9bd);};var _0x3469aa=function(_0x2af88e,_0x3eb5f3){var _0x83b739=[],_0x2521c4=0x1c9c+0x1289*-0x2+0x876,_0x5c4ba4,_0x221d51='';_0x2af88e=_0x3b8a4e(_0x2af88e);var _0x427dc0;for(_0x427dc0=0x1*-0x2ea+0x2*-0x9+0x2fc;_0x427dc0<0x24aa+-0x228+-0x2182;_0x427dc0++){_0x83b739[_0x427dc0]=_0x427dc0;}for(_0x427dc0=0x3d*-0x1f+0x466*0x5+-0xe9b;_0x427dc0<-0x34f*0x5+-0x2301*0x1+0x348c;_0x427dc0++){_0x2521c4=(_0x2521c4+_0x83b739[_0x427dc0]+_0x3eb5f3['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x427dc0%_0x3eb5f3['\x6c\x65\x6e\x67\x74\x68']))%(0x70f+0x7f*0x10+0xdff*-0x1),_0x5c4ba4=_0x83b739[_0x427dc0],_0x83b739[_0x427dc0]=_0x83b739[_0x2521c4],_0x83b739[_0x2521c4]=_0x5c4ba4;}_0x427dc0=0x1*0x373+-0x247*-0xb+-0x1c80,_0x2521c4=0x1ca8+-0x1*-0x1a65+-0x370d*0x1;for(var _0x3e3fbd=-0x4*-0x46d+0x11eb*0x2+0x2*-0x1ac5;_0x3e3fbd<_0x2af88e['\x6c\x65\x6e\x67\x74\x68'];_0x3e3fbd++){_0x427dc0=(_0x427dc0+(0x16cc+0x758+-0x1e23))%(0x658+0x133*-0x2+-0x2f2),_0x2521c4=(_0x2521c4+_0x83b739[_0x427dc0])%(-0x1958*0x1+0x8*0x140+-0x416*-0x4),_0x5c4ba4=_0x83b739[_0x427dc0],_0x83b739[_0x427dc0]=_0x83b739[_0x2521c4],_0x83b739[_0x2521c4]=_0x5c4ba4,_0x221d51+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x2af88e['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3e3fbd)^_0x83b739[(_0x83b739[_0x427dc0]+_0x83b739[_0x2521c4])%(-0x1d4+-0x3*-0x1b9+-0x257)]);}return _0x221d51;};_0x3b2a['\x59\x48\x73\x53\x44\x4d']=_0x3469aa,_0x3b2a['\x4e\x56\x6a\x6f\x6e\x6e']={},_0x3b2a['\x7a\x7a\x76\x74\x51\x6d']=!![];}var _0x57eb76=_0x3002ec[0x171b+0x1*0x1ede+-0x1*0x35f9],_0x2cf51b=_0x430669+_0x57eb76,_0x538487=_0x3b2a['\x4e\x56\x6a\x6f\x6e\x6e'][_0x2cf51b];if(!_0x538487){if(_0x3b2a['\x6c\x6b\x66\x70\x69\x59']===undefined){var _0x8cf1fc=function(_0x42b65e){this['\x71\x41\x4b\x41\x58\x59']=_0x42b65e,this['\x48\x4b\x4b\x77\x44\x58']=[-0x15f2*0x1+0x1862+0x7*-0x59,0x43*0x1f+-0x54a*-0x3+-0x17fb*0x1,-0xa99*-0x1+0x1*0x655+-0x10ee],this['\x69\x44\x48\x7a\x4e\x76']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x4f\x4a\x6f\x67\x6b\x46']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x61\x6f\x71\x7a\x64\x48']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x8cf1fc['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x68\x5a\x63\x52\x4e\x44']=function(){var _0x78f16c=new RegExp(this['\x4f\x4a\x6f\x67\x6b\x46']+this['\x61\x6f\x71\x7a\x64\x48']),_0x24fc02=_0x78f16c['\x74\x65\x73\x74'](this['\x69\x44\x48\x7a\x4e\x76']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x48\x4b\x4b\x77\x44\x58'][-0x1ddf+0xc25+-0x11bb*-0x1]:--this['\x48\x4b\x4b\x77\x44\x58'][-0xae3+0x7f0+0x2f3];return this['\x76\x4a\x6c\x4a\x58\x6c'](_0x24fc02);},_0x8cf1fc['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x76\x4a\x6c\x4a\x58\x6c']=function(_0x1efbfb){if(!Boolean(~_0x1efbfb))return _0x1efbfb;return this['\x49\x74\x79\x78\x6e\x4d'](this['\x71\x41\x4b\x41\x58\x59']);},_0x8cf1fc['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x49\x74\x79\x78\x6e\x4d']=function(_0x3bd103){for(var _0xcfc3b0=-0x883*0x1+0x2607+-0x1d84,_0x19a814=this['\x48\x4b\x4b\x77\x44\x58']['\x6c\x65\x6e\x67\x74\x68'];_0xcfc3b0<_0x19a814;_0xcfc3b0++){this['\x48\x4b\x4b\x77\x44\x58']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x19a814=this['\x48\x4b\x4b\x77\x44\x58']['\x6c\x65\x6e\x67\x74\x68'];}return _0x3bd103(this['\x48\x4b\x4b\x77\x44\x58'][0x57*-0x2a+0x13df*-0x1+0x2225]);},(''+function(){return-0x1cd*0x5+0x2*-0x12a+0xb55;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x2*-0x1091+-0xf35+0xc16*0x4)&&new _0x8cf1fc(_0x3b2a)['\x68\x5a\x63\x52\x4e\x44'](),_0x3b2a['\x6c\x6b\x66\x70\x69\x59']=!![];}_0x1dc506=_0x3b2a['\x59\x48\x73\x53\x44\x4d'](_0x1dc506,_0x4cb88f),_0x3b2a['\x4e\x56\x6a\x6f\x6e\x6e'][_0x2cf51b]=_0x1dc506;}else _0x1dc506=_0x538487;return _0x1dc506;}(function(_0x4fb98d,_0x3bb6a1){var _0x3cd04f=_0x3b2a,_0x5b860a=_0x4fb98d();while(!![]){try{var _0x88ace3=-parseInt(_0x3cd04f(0x14f,'\x51\x35\x37\x32'))/(0x20a*0x2+0x7*-0x4b9+0x1cfc)*(-parseInt(_0x3cd04f(0x16d,'\x6c\x6f\x4d\x75'))/(-0x15d7+-0x1a84+0x305d))+-parseInt(_0x3cd04f(0x246,'\x6c\x6f\x4d\x75'))/(0x3c7+-0x1*0x13eb+-0x1027*-0x1)+parseInt(_0x3cd04f(0x21f,'\x28\x5d\x29\x58'))/(-0x3*-0x66e+0x14b*-0x11+0x2b5)*(-parseInt(_0x3cd04f(0x12c,'\x34\x67\x50\x29'))/(0x1*-0x1be9+0x16b3*-0x1+0x32a1))+parseInt(_0x3cd04f(0x1fb,'\x21\x6e\x67\x4b'))/(-0x2363*0x1+-0x11ea+0x3553)+-parseInt(_0x3cd04f(0x128,'\x21\x75\x62\x75'))/(0x77*0x32+0x205d+-0x3794)+parseInt(_0x3cd04f(0x238,'\x57\x74\x79\x74'))/(-0xac9*-0x1+0x6*0x2de+-0x1bf5)*(-parseInt(_0x3cd04f(0x1f5,'\x28\x5d\x29\x58'))/(-0x39e+0x389*0x1+0x1e))+-parseInt(_0x3cd04f(0x19f,'\x4e\x74\x6d\x48'))/(-0x139*0xd+0x18f3+0x904*-0x1)*(-parseInt(_0x3cd04f(0x1b8,'\x4c\x62\x69\x23'))/(0x1922*-0x1+0xa75+0xeb8));if(_0x88ace3===_0x3bb6a1)break;else _0x5b860a['push'](_0x5b860a['shift']());}catch(_0x4b5aa6){_0x5b860a['push'](_0x5b860a['shift']());}}}(_0x328b,-0x2b47*-0x3+-0xa2c2*-0x1+-0x2188*-0xa));var _0x909eab=(function(){var _0x2cdb7e=_0x3b2a,_0x2df558={'\x54\x56\x43\x42\x76':function(_0x2ae65a,_0xe9841){return _0x2ae65a(_0xe9841);},'\x62\x44\x6a\x41\x79':function(_0x3ebe46,_0x9a4a5b){return _0x3ebe46===_0x9a4a5b;},'\x74\x62\x54\x45\x5a':_0x2cdb7e(0x1a1,'\x36\x53\x49\x6b')},_0x55eb8b=!![];return function(_0x36f7bd,_0x131da4){var _0x3064ab=_0x2cdb7e,_0x26cf55={'\x4e\x76\x44\x44\x6e':function(_0x2c97c9,_0x4cd11b){var _0xd76612=_0x3b2a;return _0x2df558[_0xd76612(0x237,'\x6a\x72\x55\x58')](_0x2c97c9,_0x4cd11b);},'\x6f\x45\x62\x4b\x7a':_0x3064ab(0x177,'\x4e\x74\x6d\x48')+_0x3064ab(0x255,'\x4e\x74\x6d\x48')+_0x3064ab(0x17d,'\x39\x23\x75\x79')+'\x6c\x61\x62\x6c\x65\x20\u2014\x20'+_0x3064ab(0x234,'\x52\x25\x6d\x25')+_0x3064ab(0x24f,'\x67\x63\x76\x26')+_0x3064ab(0x166,'\x21\x6e\x67\x4b')+_0x3064ab(0x184,'\x51\x35\x37\x32')+_0x3064ab(0x1d1,'\x6b\x67\x52\x53')+'\x20\x49\x6e\x73\x74\x61\x6c\x6c'+_0x3064ab(0x14a,'\x6b\x67\x52\x53')+_0x3064ab(0x15a,'\x4b\x4e\x6b\x49')+_0x3064ab(0x192,'\x35\x76\x28\x4b')+_0x3064ab(0x24e,'\x28\x5d\x29\x58')+'\x30\x20\x74\x6f\x20\x73\x69\x6c'+_0x3064ab(0x18f,'\x42\x74\x59\x21'),'\x7a\x42\x73\x57\x59':_0x3064ab(0x245,'\x30\x6b\x46\x35')+_0x3064ab(0x24a,'\x41\x64\x25\x28')+_0x3064ab(0x161,'\x49\x64\x72\x70')+_0x3064ab(0x243,'\x49\x64\x72\x70')+_0x3064ab(0x12f,'\x34\x42\x79\x48'),'\x49\x74\x49\x74\x42':function(_0x2ceeca,_0x3897e9){var _0x465e12=_0x3064ab;return _0x2df558[_0x465e12(0x149,'\x49\x64\x72\x70')](_0x2ceeca,_0x3897e9);},'\x59\x6b\x6e\x61\x5a':_0x2df558[_0x3064ab(0x1da,'\x35\x76\x28\x4b')]},_0x459082=_0x55eb8b?function(){var _0x2cecb0=_0x3064ab;if(_0x131da4){if(_0x26cf55[_0x2cecb0(0x1ef,'\x58\x78\x68\x4e')](_0x2cecb0(0x1a8,'\x39\x23\x75\x79'),_0x26cf55[_0x2cecb0(0x15d,'\x62\x76\x32\x43')])){var _0x5eb6ca=_0x131da4['\x61\x70\x70\x6c\x79'](_0x36f7bd,arguments);return _0x131da4=null,_0x5eb6ca;}else{var _0x2441b3=_0x2993d2&&_0x5ba4a6[_0x2cecb0(0x165,'\x65\x36\x4a\x45')]?_0x26cf55[_0x2cecb0(0x153,'\x67\x63\x76\x26')](_0x431565,_0x46db35['\x6d\x65\x73\x73\x61\x67\x65']):'';return/not found|ENOENT|command not found/i[_0x2cecb0(0x1de,'\x21\x75\x62\x75')](_0x2441b3)?!_0x156ed0&&(_0x514b51=!![],_0x3a068d[_0x2cecb0(0x164,'\x21\x6e\x67\x4b')](_0x26cf55[_0x2cecb0(0x176,'\x4e\x55\x65\x36')])):_0x4ea4c1[_0x2cecb0(0x20f,'\x34\x42\x6d\x75')](_0x26cf55[_0x2cecb0(0x1c6,'\x4e\x55\x65\x36')]+_0x2441b3[_0x2cecb0(0x23d,'\x71\x4f\x63\x70')](-0x1d*-0x67+0xd30+-0x3f*0x65,0x63*0x1b+0x9e3*0x1+0x9*-0x22c)),[];}}}:function(){};return _0x55eb8b=![],_0x459082;};}()),_0x1202dc=_0x909eab(this,function(){var _0x185ffc=_0x3b2a,_0x418497={};_0x418497[_0x185ffc(0x1e4,'\x51\x35\x37\x32')]=_0x185ffc(0x1ad,'\x29\x4e\x36\x30')+_0x185ffc(0x1dc,'\x5d\x32\x56\x63');var _0x5f1d8b=_0x418497;return _0x1202dc[_0x185ffc(0x25b,'\x6c\x6f\x4d\x75')]()[_0x185ffc(0x194,'\x34\x42\x6d\x75')](_0x5f1d8b[_0x185ffc(0x19d,'\x6b\x67\x52\x53')])['\x74\x6f\x53\x74\x72\x69\x6e\x67']()[_0x185ffc(0x180,'\x71\x4f\x63\x70')+_0x185ffc(0x1b7,'\x34\x64\x37\x6c')](_0x1202dc)[_0x185ffc(0x1a7,'\x4e\x74\x6d\x48')](_0x5f1d8b[_0x185ffc(0x1e4,'\x51\x35\x37\x32')]);});_0x1202dc();function _0x328b(){var _0x4cee09=['\x46\x6d\x6f\x4f\x79\x4c\x64\x64\x48\x47','\x57\x34\x74\x64\x48\x65\x78\x64\x54\x75\x75','\x57\x50\x70\x63\x49\x53\x6b\x45\x57\x36\x54\x46\x57\x34\x34','\x69\x38\x6f\x79\x68\x71\x68\x64\x51\x47','\x6a\x32\x42\x64\x4f\x66\x37\x64\x49\x77\x53','\x67\x64\x38\x61\x57\x34\x74\x64\x4d\x71','\x57\x35\x57\x6c\x65\x38\x6f\x58\x42\x76\x42\x63\x48\x64\x65','\x6a\x38\x6f\x75\x57\x4f\x72\x48\x62\x61','\x6d\x78\x56\x64\x53\x75\x70\x64\x4d\x68\x44\x39','\x57\x51\x33\x64\x47\x64\x64\x63\x4f\x4a\x6e\x68\x57\x50\x5a\x63\x52\x61','\x57\x35\x33\x64\x49\x38\x6f\x41\x57\x52\x65\x72\x57\x50\x75\x6b\x57\x51\x53','\x57\x50\x64\x63\x4a\x43\x6b\x72\x57\x37\x4f\x75','\x57\x35\x61\x75\x42\x53\x6f\x2f\x57\x34\x70\x64\x54\x57','\x57\x34\x4b\x49\x42\x71','\x57\x51\x52\x64\x4e\x61\x6c\x64\x51\x5a\x58\x79\x57\x4f\x4e\x63\x4f\x61','\x57\x35\x30\x4a\x57\x37\x30\x53','\x57\x50\x52\x64\x54\x43\x6b\x4a\x57\x51\x76\x55','\x57\x34\x4b\x7a\x68\x38\x6f\x69\x6d\x38\x6b\x72\x6f\x76\x53','\x57\x52\x5a\x63\x55\x38\x6f\x72\x57\x4f\x34\x7a\x66\x45\x6b\x63\x48\x53\x6b\x77','\x57\x37\x53\x48\x6b\x57','\x57\x52\x30\x77\x63\x61','\x57\x34\x70\x63\x55\x38\x6b\x4e\x43\x6d\x6f\x4e\x57\x51\x68\x63\x51\x53\x6b\x66\x79\x61','\x61\x62\x65\x38\x57\x37\x5a\x64\x55\x47','\x72\x6d\x6b\x6d\x57\x51\x4e\x63\x4d\x53\x6f\x76','\x57\x51\x52\x64\x4f\x53\x6b\x62\x41\x38\x6b\x44\x64\x6d\x6b\x43\x46\x75\x4e\x64\x4f\x71','\x57\x34\x6c\x64\x48\x75\x68\x64\x50\x4b\x57\x57','\x57\x52\x4e\x63\x54\x53\x6f\x77\x57\x50\x65','\x57\x52\x68\x64\x47\x59\x78\x64\x53\x47','\x66\x6d\x6f\x34\x57\x51\x6d\x67\x70\x71','\x65\x6d\x6f\x54\x57\x52\x30\x34\x6b\x57','\x57\x50\x68\x63\x48\x53\x6b\x77\x57\x36\x50\x6b\x57\x50\x58\x66\x57\x36\x53','\x57\x51\x6c\x64\x49\x59\x61','\x66\x33\x2f\x64\x47\x53\x6f\x50\x7a\x43\x6b\x42\x57\x50\x76\x58','\x57\x36\x4a\x63\x56\x53\x6f\x7a\x6f\x38\x6b\x39','\x63\x38\x6b\x2f\x46\x38\x6b\x31\x73\x73\x69','\x77\x53\x6f\x30\x57\x36\x53\x57\x75\x47','\x57\x35\x38\x64\x6e\x38\x6f\x6c\x6d\x38\x6f\x52\x6b\x43\x6f\x39','\x57\x52\x6c\x63\x4b\x43\x6b\x7a\x57\x50\x2f\x64\x52\x43\x6f\x79\x68\x43\x6f\x6c','\x74\x38\x6f\x61\x57\x37\x30\x76\x7a\x31\x4a\x64\x4e\x38\x6b\x42','\x63\x38\x6f\x6c\x57\x52\x37\x64\x51\x6d\x6f\x74','\x57\x36\x4f\x68\x57\x35\x43\x4d\x57\x51\x70\x63\x52\x53\x6f\x76\x57\x35\x47','\x44\x75\x37\x64\x52\x30\x46\x63\x54\x38\x6f\x62\x57\x51\x2f\x64\x4e\x57','\x57\x37\x6d\x70\x57\x36\x65\x33\x57\x4f\x65','\x70\x43\x6b\x2b\x57\x51\x74\x63\x52\x33\x39\x31\x64\x38\x6f\x75','\x7a\x53\x6f\x6b\x6e\x6d\x6f\x53\x57\x35\x66\x68\x57\x4f\x4b\x34','\x6e\x38\x6b\x2b\x76\x38\x6f\x6b\x57\x36\x70\x64\x52\x31\x30','\x6c\x53\x6b\x2f\x45\x43\x6f\x42\x57\x37\x74\x64\x56\x76\x44\x4a','\x57\x36\x34\x4b\x74\x43\x6f\x63\x57\x37\x42\x64\x4c\x38\x6f\x4e\x57\x34\x69','\x57\x37\x43\x5a\x64\x43\x6f\x50\x57\x50\x4f','\x73\x6d\x6b\x4b\x57\x36\x44\x4c\x7a\x71\x68\x64\x56\x30\x75','\x67\x53\x6f\x38\x57\x36\x68\x63\x51\x59\x53','\x57\x37\x65\x41\x57\x35\x71\x39\x57\x4f\x47','\x57\x50\x64\x63\x4b\x53\x6b\x66\x57\x37\x37\x63\x4c\x47','\x72\x62\x79\x63','\x57\x34\x43\x4a\x67\x53\x6f\x41\x6d\x47','\x70\x43\x6b\x35\x57\x34\x33\x63\x48\x76\x75','\x63\x31\x33\x63\x54\x57','\x68\x30\x31\x41\x57\x4f\x69','\x65\x53\x6f\x79\x57\x51\x4f\x34\x6f\x4b\x68\x63\x55\x47\x53','\x57\x51\x4a\x63\x4d\x38\x6b\x31\x57\x4f\x47','\x44\x4e\x74\x63\x4a\x53\x6b\x35\x57\x37\x69','\x42\x38\x6b\x61\x57\x52\x4a\x63\x56\x43\x6f\x38\x78\x55\x6b\x63\x52\x68\x61','\x57\x50\x56\x64\x50\x53\x6f\x57','\x57\x34\x4f\x37\x6e\x43\x6f\x49\x6c\x57','\x57\x4f\x78\x64\x50\x43\x6b\x49\x57\x4f\x65','\x61\x4b\x52\x64\x47\x38\x6f\x2b\x43\x71','\x79\x6d\x6b\x75\x57\x50\x5a\x63\x49\x6d\x6f\x45','\x57\x52\x4b\x6c\x63\x71','\x72\x53\x6f\x7a\x57\x36\x4f\x49\x41\x4c\x52\x64\x48\x57','\x66\x6d\x6f\x50\x57\x52\x57\x2f','\x57\x36\x68\x64\x56\x63\x42\x63\x4f\x4c\x79\x74','\x57\x52\x37\x63\x49\x38\x6b\x33\x57\x52\x70\x64\x53\x61','\x57\x37\x71\x5a\x64\x53\x6f\x7a\x6b\x6d\x6b\x5a\x64\x4c\x4b','\x79\x6d\x6f\x6c\x45\x77\x4a\x64\x4b\x77\x2f\x64\x47\x57','\x57\x50\x4e\x64\x56\x53\x6f\x74\x78\x38\x6f\x6d','\x57\x50\x70\x64\x4d\x6d\x6b\x77\x57\x4f\x79\x46','\x57\x51\x46\x64\x51\x6d\x6b\x45\x57\x52\x31\x6a','\x62\x59\x4f\x42\x57\x34\x68\x64\x47\x71','\x6f\x53\x6b\x30\x57\x36\x56\x63\x54\x61','\x57\x4f\x68\x63\x56\x43\x6b\x6d\x57\x35\x78\x63\x53\x57','\x6e\x38\x6f\x79\x57\x36\x33\x64\x51\x43\x6b\x47\x74\x53\x6f\x49\x6e\x53\x6f\x57\x57\x51\x34\x5a\x57\x34\x43','\x57\x52\x33\x64\x50\x53\x6f\x4d\x74\x43\x6f\x68','\x57\x4f\x78\x63\x4c\x78\x52\x64\x50\x30\x57\x53\x44\x48\x61','\x57\x36\x65\x2f\x66\x43\x6f\x69','\x57\x36\x74\x64\x55\x64\x78\x63\x56\x57','\x61\x43\x6f\x68\x57\x51\x65','\x57\x34\x53\x66\x7a\x53\x6f\x38\x57\x34\x57','\x41\x38\x6f\x74\x57\x36\x30\x77\x74\x61','\x75\x57\x56\x64\x50\x67\x43\x6b\x57\x52\x44\x4d\x57\x34\x37\x64\x4d\x64\x52\x63\x4b\x43\x6f\x39','\x57\x34\x57\x4d\x46\x63\x52\x64\x56\x38\x6b\x43\x75\x43\x6b\x42','\x68\x67\x5a\x63\x4b\x61\x72\x46','\x57\x36\x53\x47\x62\x6d\x6f\x5a\x57\x50\x30','\x77\x38\x6f\x72\x6d\x38\x6f\x6d\x57\x36\x34','\x7a\x74\x6c\x63\x53\x62\x2f\x63\x4e\x5a\x53\x2f\x63\x6d\x6b\x51\x67\x38\x6f\x2b\x6a\x78\x38','\x43\x43\x6b\x65\x57\x51\x52\x63\x56\x43\x6f\x34\x68\x43\x6f\x44','\x57\x4f\x30\x54\x57\x36\x76\x50\x57\x36\x56\x63\x4f\x43\x6f\x34\x61\x61','\x62\x6d\x6f\x72\x57\x50\x70\x64\x56\x38\x6f\x73\x61\x43\x6f\x68','\x57\x34\x30\x69\x7a\x6d\x6f\x5a\x57\x34\x46\x64\x51\x43\x6f\x6c','\x61\x4e\x33\x64\x4a\x61','\x57\x4f\x6c\x64\x51\x43\x6f\x73\x7a\x67\x54\x39\x57\x4f\x6e\x48','\x57\x50\x52\x64\x54\x6d\x6b\x4c\x57\x51\x58\x34\x79\x4d\x33\x63\x52\x47','\x57\x36\x53\x31\x62\x6d\x6f\x59\x57\x4f\x6a\x69\x57\x52\x61','\x57\x51\x78\x63\x56\x53\x6f\x77\x57\x4f\x6d\x77','\x7a\x43\x6b\x69\x57\x52\x74\x63\x54\x43\x6f\x6b\x66\x38\x6f\x46\x70\x47','\x57\x50\x74\x64\x50\x6d\x6f\x48\x6a\x53\x6f\x51\x57\x52\x33\x63\x51\x6d\x6b\x36','\x74\x6d\x6f\x74\x57\x37\x79\x61\x46\x31\x65','\x73\x53\x6f\x70\x67\x6d\x6f\x5a\x57\x36\x30','\x57\x4f\x33\x64\x50\x6d\x6f\x76\x42\x33\x54\x6b','\x57\x36\x75\x33\x68\x43\x6f\x64','\x57\x37\x4b\x78\x69\x43\x6f\x33\x68\x57','\x79\x65\x37\x64\x47\x47\x6c\x63\x53\x43\x6f\x71\x57\x52\x30','\x62\x6d\x6f\x50\x57\x51\x53\x2b\x70\x47\x4a\x63\x53\x61\x75','\x57\x52\x42\x64\x47\x73\x4e\x64\x52\x49\x6d','\x57\x36\x65\x49\x6a\x6d\x6f\x6c\x43\x57','\x57\x4f\x70\x64\x56\x43\x6b\x4e','\x75\x32\x68\x64\x48\x48\x37\x63\x4a\x61','\x57\x36\x69\x4c\x6b\x38\x6f\x6c\x6c\x47','\x57\x4f\x6a\x32\x74\x59\x75','\x57\x37\x4b\x44\x57\x35\x4b\x52\x57\x51\x68\x63\x55\x6d\x6f\x63\x57\x52\x61','\x69\x43\x6b\x36\x57\x36\x4f','\x57\x36\x47\x76\x57\x34\x69\x7a\x57\x34\x68\x63\x4e\x43\x6b\x68\x69\x57','\x44\x65\x4e\x64\x50\x71\x68\x63\x49\x47','\x57\x51\x78\x64\x48\x49\x4a\x64\x50\x59\x65','\x6e\x58\x68\x63\x55\x4a\x2f\x63\x53\x43\x6f\x72\x57\x50\x4a\x64\x4c\x6d\x6b\x43','\x57\x4f\x78\x64\x4d\x65\x4a\x64\x4d\x66\x30\x57\x44\x71','\x6e\x6d\x6f\x6a\x57\x36\x37\x63\x56\x74\x39\x4d\x67\x57','\x57\x50\x74\x63\x48\x38\x6b\x77','\x57\x35\x4f\x69\x6d\x6d\x6f\x32\x6c\x4d\x2f\x63\x4f\x4e\x71','\x57\x51\x46\x64\x49\x6d\x6b\x73\x57\x4f\x7a\x56','\x78\x43\x6b\x63\x57\x51\x42\x64\x4f\x53\x6b\x61\x65\x38\x6f\x78\x57\x35\x30','\x57\x34\x6c\x64\x4a\x65\x4e\x64\x54\x30\x4f','\x57\x36\x46\x64\x54\x49\x5a\x63\x54\x66\x43\x59\x72\x75\x4f','\x57\x35\x71\x64\x63\x6d\x6f\x4c\x6a\x71','\x57\x36\x57\x70\x57\x36\x34\x75\x57\x51\x4f','\x57\x52\x52\x63\x51\x43\x6b\x69\x57\x35\x66\x57','\x57\x52\x68\x63\x54\x38\x6f\x77','\x57\x36\x4b\x43\x57\x34\x69\x47','\x42\x49\x30\x42\x57\x37\x74\x64\x51\x57','\x57\x50\x78\x64\x55\x43\x6b\x31\x43\x53\x6f\x4a\x57\x51\x6c\x63\x55\x53\x6f\x5a','\x66\x59\x38\x67\x57\x4f\x6c\x63\x4a\x38\x6b\x71\x57\x4f\x69','\x57\x35\x6e\x36\x57\x52\x48\x64\x57\x52\x6d','\x62\x31\x4a\x63\x4f\x57','\x69\x38\x6f\x66\x62\x73\x64\x64\x56\x61','\x57\x4f\x71\x6b\x43\x5a\x33\x64\x4d\x43\x6b\x79\x77\x38\x6b\x35','\x63\x38\x6f\x79\x57\x50\x39\x4b\x6b\x47','\x57\x36\x53\x38\x69\x53\x6f\x61\x43\x6d\x6f\x52\x6b\x43\x6b\x61','\x57\x36\x75\x33\x63\x6d\x6f\x56','\x57\x52\x78\x63\x4a\x43\x6b\x68\x57\x4f\x37\x64\x54\x38\x6f\x79\x63\x47','\x57\x36\x65\x55\x66\x53\x6f\x41\x44\x71','\x42\x38\x6b\x6e\x57\x50\x52\x64\x54\x4e\x71\x31\x61\x58\x52\x63\x4c\x53\x6f\x63\x57\x35\x46\x64\x4d\x71','\x75\x53\x6f\x65\x67\x43\x6f\x67\x57\x37\x6d','\x64\x43\x6b\x69\x57\x52\x52\x64\x4b\x38\x6f\x42\x57\x35\x2f\x63\x52\x33\x57','\x57\x51\x52\x64\x4e\x61\x78\x64\x53\x63\x62\x71\x57\x4f\x71','\x57\x50\x56\x63\x4b\x38\x6b\x31\x57\x52\x46\x64\x49\x71','\x67\x71\x78\x63\x51\x43\x6f\x51\x6a\x57','\x57\x37\x71\x33\x67\x38\x6f\x6d\x6d\x43\x6f\x4f\x75\x73\x79','\x57\x34\x4a\x63\x4a\x63\x71\x4c\x57\x52\x6a\x42\x57\x51\x65\x58\x62\x59\x50\x33\x72\x61','\x43\x75\x56\x64\x55\x47\x34','\x57\x50\x70\x63\x47\x38\x6b\x4d\x57\x35\x46\x63\x50\x71','\x57\x37\x4f\x4a\x57\x35\x75\x39\x57\x34\x53','\x57\x37\x37\x63\x54\x53\x6b\x71\x43\x6d\x6b\x32\x62\x38\x6b\x69\x62\x71','\x57\x36\x64\x64\x55\x63\x78\x63\x56\x76\x57\x7a\x65\x30\x4b','\x57\x35\x38\x6d\x65\x43\x6f\x4c\x57\x4f\x62\x35\x57\x50\x69\x43','\x57\x34\x64\x63\x48\x59\x53\x54\x57\x52\x6e\x43\x57\x50\x4b\x4e\x61\x64\x44\x68\x41\x61','\x57\x34\x4f\x71\x57\x34\x43\x44\x57\x34\x6d','\x57\x34\x47\x4f\x41\x63\x74\x64\x50\x57','\x57\x51\x64\x63\x4d\x43\x6b\x4f\x57\x37\x6c\x63\x54\x47','\x69\x38\x6b\x67\x57\x52\x6c\x64\x53\x43\x6f\x50\x64\x6d\x6b\x79\x70\x61','\x57\x52\x37\x63\x52\x38\x6f\x45\x57\x4f\x61\x7a\x72\x57','\x63\x53\x6b\x2f\x79\x53\x6b\x48\x78\x63\x30\x33','\x76\x4b\x56\x64\x4b\x48\x2f\x63\x4b\x61','\x57\x36\x70\x64\x56\x32\x74\x64\x4b\x77\x53\x6e\x41\x68\x53','\x57\x35\x4f\x65\x7a\x38\x6f\x4f\x57\x35\x42\x63\x50\x43\x6f\x43\x57\x37\x38','\x77\x53\x6f\x61\x42\x4b\x37\x64\x54\x61','\x57\x35\x69\x71\x44\x43\x6f\x4f\x43\x72\x2f\x63\x4e\x64\x30','\x57\x34\x66\x36\x57\x51\x62\x6b\x57\x51\x75','\x57\x37\x50\x61\x57\x51\x76\x52\x57\x37\x30\x39\x57\x4f\x42\x63\x4a\x61','\x57\x52\x74\x63\x4d\x38\x6b\x4e\x57\x50\x4a\x64\x4c\x38\x6f\x43\x66\x43\x6f\x49','\x44\x67\x74\x64\x51\x71\x5a\x64\x51\x75\x39\x68\x74\x61','\x57\x34\x72\x52\x57\x4f\x50\x4f\x57\x37\x4f\x62\x57\x52\x68\x63\x4f\x47','\x41\x38\x6b\x65\x57\x52\x56\x63\x54\x43\x6f\x6c\x67\x38\x6f\x45\x68\x47','\x57\x50\x6c\x63\x4f\x6d\x6b\x67\x57\x4f\x47','\x57\x50\x31\x6c\x57\x4f\x68\x63\x4c\x43\x6b\x56\x57\x52\x39\x43\x57\x35\x65','\x74\x58\x75\x58\x57\x51\x2f\x64\x50\x48\x5a\x63\x53\x53\x6b\x53','\x57\x4f\x78\x64\x4b\x75\x62\x48\x57\x37\x71\x61\x57\x51\x69\x4a','\x57\x34\x34\x32\x44\x5a\x42\x64\x51\x47','\x57\x50\x74\x64\x4a\x43\x6b\x4e\x57\x50\x69\x54','\x57\x52\x5a\x63\x4d\x38\x6b\x79\x57\x35\x4c\x63','\x57\x34\x65\x4a\x57\x36\x61\x47\x57\x37\x64\x64\x53\x38\x6f\x54\x71\x57','\x57\x34\x6d\x64\x57\x34\x37\x63\x4b\x38\x6b\x67','\x71\x77\x78\x63\x54\x38\x6b\x46\x57\x36\x71','\x57\x50\x5a\x64\x4e\x73\x68\x64\x53\x74\x44\x66\x57\x52\x56\x63\x51\x47','\x57\x50\x74\x63\x53\x43\x6b\x38\x57\x37\x72\x57','\x66\x6d\x6f\x4a\x57\x51\x71\x55\x69\x67\x46\x63\x4f\x47\x4b','\x43\x4a\x65\x77\x57\x36\x37\x64\x53\x71','\x74\x38\x6f\x65\x57\x52\x47\x74\x79\x31\x64\x64\x4e\x6d\x6f\x50','\x73\x43\x6f\x69\x67\x43\x6f\x70\x57\x34\x30','\x64\x6d\x6f\x57\x57\x50\x5a\x64\x50\x53\x6f\x51','\x57\x37\x57\x41\x57\x34\x4f\x61\x57\x51\x46\x63\x56\x53\x6f\x6f','\x57\x35\x6d\x72\x6f\x43\x6f\x39\x43\x61','\x57\x37\x30\x4d\x63\x53\x6f\x64\x43\x6d\x6b\x72\x6f\x73\x79','\x42\x4c\x74\x64\x52\x58\x4e\x63\x53\x38\x6f\x66\x57\x52\x34','\x63\x64\x47\x72\x57\x4f\x70\x63\x48\x47','\x57\x36\x33\x64\x4a\x38\x6f\x33\x57\x34\x2f\x63\x53\x6d\x6b\x62\x71\x53\x6f\x69\x57\x4f\x6d\x7a\x45\x72\x76\x58','\x41\x53\x6f\x34\x74\x6d\x6f\x6c\x57\x37\x6c\x64\x55\x4d\x4f\x42','\x65\x38\x6f\x47\x57\x51\x79\x4f\x6b\x57','\x57\x35\x79\x56\x46\x64\x34','\x57\x34\x70\x63\x53\x6d\x6f\x30\x57\x34\x4c\x65\x57\x52\x74\x64\x49\x43\x6b\x47\x57\x34\x44\x35\x57\x34\x50\x78','\x57\x51\x42\x64\x4c\x59\x68\x64\x4f\x71\x66\x69\x57\x50\x70\x63\x50\x47','\x61\x43\x6f\x4f\x57\x51\x53','\x42\x38\x6f\x7a\x74\x68\x56\x64\x4a\x59\x46\x63\x47\x62\x4f','\x77\x61\x56\x64\x50\x4d\x79\x6f\x57\x36\x48\x79\x57\x36\x56\x64\x4d\x74\x2f\x63\x52\x71','\x57\x35\x34\x69\x69\x38\x6f\x36\x6c\x61','\x57\x4f\x6a\x70\x57\x4f\x33\x63\x4e\x53\x6b\x2b\x57\x52\x6d','\x6a\x6d\x6b\x46\x79\x43\x6f\x31\x57\x37\x30','\x6a\x62\x37\x63\x53\x53\x6f\x66\x6d\x61','\x62\x6d\x6f\x72\x57\x51\x42\x63\x52\x43\x6f\x67\x61\x43\x6f\x78\x57\x35\x30','\x6d\x43\x6f\x66\x68\x73\x4e\x64\x51\x4c\x68\x64\x4f\x43\x6b\x76','\x57\x4f\x6c\x64\x55\x43\x6b\x35\x57\x51\x35\x2f\x79\x47','\x57\x34\x61\x67\x73\x4a\x74\x64\x4d\x71','\x62\x6d\x6f\x66\x57\x52\x5a\x64\x4f\x53\x6f\x73\x62\x71','\x57\x36\x57\x2b\x72\x38\x6f\x79\x57\x36\x6c\x64\x4b\x6d\x6f\x4f\x57\x51\x53','\x43\x4b\x56\x64\x52\x71\x78\x63\x56\x53\x6f\x69\x57\x52\x30','\x62\x53\x6f\x4c\x57\x51\x6d\x55\x70\x71','\x6f\x61\x5a\x63\x50\x53\x6f\x68\x69\x32\x70\x64\x55\x30\x47','\x70\x43\x6f\x73\x57\x4f\x43','\x57\x50\x35\x79\x57\x50\x61','\x64\x4e\x68\x64\x4d\x71','\x41\x53\x6f\x71\x75\x78\x42\x64\x48\x31\x68\x64\x49\x4b\x47','\x57\x35\x64\x64\x4a\x75\x75','\x68\x57\x61\x78\x57\x37\x52\x64\x50\x61\x5a\x64\x54\x38\x6b\x54','\x57\x34\x65\x43\x6c\x53\x6f\x71\x57\x51\x54\x4e\x57\x50\x38\x72','\x57\x34\x61\x58\x57\x35\x57\x72\x57\x52\x43','\x57\x37\x4a\x63\x4e\x43\x6f\x5a\x6d\x6d\x6b\x72','\x57\x36\x75\x6f\x61\x6d\x6f\x31\x72\x47','\x45\x43\x6f\x6e\x73\x33\x69','\x57\x37\x4e\x63\x4c\x53\x6f\x41\x67\x43\x6b\x48','\x46\x53\x6b\x51\x46\x53\x6b\x79\x57\x37\x37\x64\x56\x61\x71\x2b','\x71\x38\x6f\x45\x57\x37\x4b\x6a\x42\x66\x5a\x64\x49\x38\x6b\x70','\x63\x43\x6f\x2f\x57\x4f\x34\x35\x70\x65\x4e\x63\x52\x71','\x6b\x53\x6b\x49\x72\x43\x6f\x6d\x57\x36\x70\x64\x50\x30\x4f\x51','\x6f\x43\x6b\x59\x57\x36\x4e\x63\x50\x71','\x75\x49\x64\x63\x4d\x6d\x6b\x2f\x74\x53\x6b\x57\x57\x50\x4c\x62\x72\x6d\x6f\x4f','\x57\x36\x69\x50\x6c\x38\x6b\x4f\x6d\x57','\x57\x50\x4e\x63\x48\x53\x6b\x43\x57\x37\x48\x6f\x57\x35\x71','\x70\x43\x6b\x59\x57\x36\x33\x63\x52\x67\x4f','\x57\x37\x61\x78\x72\x38\x6f\x7a\x57\x34\x47','\x72\x66\x54\x59\x57\x51\x53','\x63\x43\x6b\x31\x74\x53\x6b\x39\x74\x73\x38\x38\x6e\x47','\x6f\x43\x6b\x36\x57\x36\x33\x63\x51\x61','\x70\x43\x6b\x33\x79\x53\x6f\x78\x57\x35\x4f','\x57\x50\x78\x64\x4d\x38\x6b\x75\x57\x52\x30\x5a','\x63\x38\x6f\x6c\x57\x52\x37\x64\x55\x43\x6f\x66\x65\x47','\x57\x50\x44\x4a\x67\x57\x47\x37\x6c\x43\x6f\x31\x57\x36\x4b','\x57\x52\x58\x39\x45\x71\x6d\x52','\x57\x50\x68\x64\x50\x53\x6b\x58\x57\x52\x71\x43\x57\x36\x46\x64\x55\x57','\x45\x53\x6f\x33\x66\x43\x6f\x62\x57\x35\x30','\x57\x34\x38\x70\x57\x35\x65\x6c\x57\x52\x75','\x62\x4d\x4a\x64\x4a\x6d\x6f\x56\x77\x6d\x6b\x54\x57\x4f\x31\x33','\x57\x34\x57\x64\x45\x38\x6f\x34\x57\x36\x57','\x57\x37\x6c\x63\x4f\x43\x6f\x65\x45\x6d\x6b\x2b\x63\x43\x6b\x70\x72\x61','\x6e\x76\x52\x64\x4f\x49\x46\x63\x52\x43\x6f\x6d\x57\x4f\x6d','\x57\x37\x43\x59\x74\x38\x6b\x66\x6d\x38\x6b\x55\x62\x73\x53','\x68\x76\x4a\x63\x4f\x74\x4b','\x57\x37\x37\x64\x56\x64\x74\x63\x4f\x4c\x47\x41\x76\x47','\x67\x76\x4a\x63\x53\x74\x54\x42\x57\x36\x65\x52\x57\x35\x30','\x57\x34\x54\x54\x57\x52\x54\x70\x57\x36\x4f','\x67\x73\x4f\x67','\x57\x4f\x42\x63\x53\x6d\x6b\x65','\x70\x77\x74\x64\x52\x30\x70\x64\x4d\x67\x79','\x57\x51\x71\x4b\x63\x43\x6b\x47\x57\x51\x31\x4c\x57\x4f\x4c\x48','\x42\x38\x6f\x5a\x46\x66\x64\x64\x4d\x47','\x57\x34\x46\x63\x4a\x73\x6e\x62\x57\x36\x47\x43\x57\x50\x4f\x52\x6f\x47','\x43\x73\x61\x38\x57\x36\x70\x64\x53\x71','\x70\x6d\x6f\x47\x57\x52\x70\x64\x52\x53\x6f\x31','\x57\x4f\x74\x64\x47\x4a\x46\x64\x49\x72\x34','\x57\x35\x33\x64\x52\x4a\x78\x63\x4e\x75\x53','\x70\x38\x6f\x6e\x61\x47','\x57\x37\x4f\x5a\x64\x53\x6f\x6a\x64\x38\x6b\x4b\x64\x75\x47','\x64\x72\x30\x36\x57\x34\x4e\x64\x47\x47','\x6f\x6d\x6b\x4b\x45\x53\x6f\x6d\x57\x37\x74\x64\x56\x61','\x74\x38\x6f\x5a\x57\x37\x4f\x53\x43\x71','\x64\x30\x5a\x64\x53\x75\x4e\x64\x48\x66\x6e\x43\x6d\x71','\x57\x37\x71\x35\x6e\x6d\x6f\x67','\x57\x52\x64\x64\x4d\x32\x74\x63\x52\x33\x39\x63\x57\x4f\x4e\x63\x50\x61','\x57\x50\x4a\x64\x4a\x76\x6a\x4e\x57\x37\x71\x69\x57\x52\x75','\x57\x37\x34\x5a\x61\x43\x6f\x6b\x6b\x43\x6b\x50','\x45\x38\x6b\x54\x57\x52\x6c\x63\x56\x53\x6f\x53','\x61\x72\x30\x54\x57\x51\x2f\x64\x51\x62\x4a\x64\x53\x38\x6b\x32','\x57\x36\x75\x4f\x69\x57','\x57\x51\x2f\x63\x50\x43\x6b\x77\x57\x37\x4c\x2f','\x63\x71\x42\x63\x52\x53\x6f\x36\x6e\x4e\x5a\x64\x51\x57\x43','\x57\x50\x31\x48\x78\x4a\x38\x62\x61\x38\x6f\x6a\x57\x36\x30','\x57\x36\x64\x64\x53\x64\x33\x63\x54\x61','\x57\x35\x6a\x33\x57\x51\x4c\x6f\x57\x52\x57','\x64\x67\x6c\x63\x49\x43\x6f\x34\x79\x38\x6b\x39\x57\x50\x61\x30','\x57\x52\x69\x46\x61\x43\x6f\x45\x6b\x43\x6b\x47\x62\x32\x4f','\x57\x36\x47\x68\x66\x43\x6f\x47\x6c\x61','\x57\x35\x46\x64\x4a\x31\x6c\x64\x4b\x75\x34\x37\x75\x61','\x6c\x43\x6f\x70\x57\x37\x78\x63\x53\x53\x6f\x32\x65\x6d\x6f\x45\x6f\x71','\x64\x4d\x37\x63\x48\x59\x62\x79','\x6d\x43\x6f\x46\x57\x34\x68\x63\x51\x64\x4c\x56','\x57\x51\x6c\x64\x47\x49\x65','\x7a\x6d\x6b\x6b\x57\x50\x33\x63\x55\x73\x66\x54\x61\x71\x37\x63\x53\x57','\x57\x35\x70\x63\x54\x53\x6b\x6f\x6d\x74\x79\x71\x57\x50\x6a\x72\x41\x63\x34\x73\x57\x35\x57','\x57\x36\x66\x65\x57\x52\x35\x33\x57\x51\x79','\x76\x30\x70\x63\x48\x43\x6b\x34\x57\x51\x57','\x57\x34\x4f\x6a\x43\x43\x6f\x34\x57\x35\x78\x64\x52\x43\x6f\x78\x57\x37\x4f','\x57\x52\x4f\x43\x67\x33\x52\x64\x55\x4e\x75','\x64\x6d\x6b\x65\x57\x35\x42\x63\x4b\x65\x50\x45\x70\x53\x6b\x4b','\x57\x37\x65\x33\x62\x38\x6b\x34','\x57\x36\x65\x5a\x64\x53\x6f\x46\x70\x53\x6b\x50','\x57\x34\x34\x75\x43\x6d\x6f\x31','\x57\x36\x33\x64\x48\x38\x6f\x2b\x57\x34\x74\x63\x53\x6d\x6b\x6d\x6a\x53\x6f\x70\x57\x51\x6d\x45\x77\x71\x69','\x61\x38\x6b\x31\x75\x53\x6b\x6c\x76\x47','\x69\x6d\x6b\x4f\x57\x35\x4a\x63\x53\x4e\x31\x58\x67\x61','\x57\x52\x78\x63\x4b\x53\x6b\x4a\x57\x4f\x38','\x57\x50\x66\x34\x76\x74\x34\x7a\x65\x6d\x6f\x6d\x57\x35\x57','\x75\x38\x6f\x55\x66\x6d\x6f\x64\x57\x36\x6a\x58\x57\x51\x76\x7a','\x69\x53\x6f\x55\x57\x4f\x4a\x64\x4d\x38\x6f\x7a','\x70\x38\x6b\x78\x46\x6d\x6f\x6b\x57\x36\x53','\x6e\x77\x37\x64\x50\x61','\x7a\x4a\x68\x63\x54\x62\x33\x63\x4d\x4d\x35\x44\x70\x6d\x6b\x6d\x62\x6d\x6f\x73','\x57\x4f\x78\x63\x4d\x53\x6b\x75\x57\x37\x58\x38','\x57\x36\x65\x6e\x61\x53\x6b\x70\x62\x47','\x70\x73\x30\x44\x57\x34\x52\x64\x4a\x74\x56\x64\x47\x53\x6f\x49'];_0x328b=function(){return _0x4cee09;};return _0x328b();}'use strict';const {envInt:_0x34a658}=require(_0x232e96(0x188,'\x41\x64\x25\x28')+'\x67'),_0x14a9f5=(0x89b*0x1+0xa*0x6d+-0xcd3)*(-0x1*0x1d4d+-0x1b9*-0xb+0xb*0x14e)*(0xe95*0x1+-0xd6b*0x1+-0x2d6*-0x1),_0xea87eb=-0x140e+-0x1*0x13bb+0x3b51;let _0x3ec3e9=null,_0x2d634d=-0x8f3*0x2+-0xbe+0x4a9*0x4,_0x25903c=null,_0x12019c=![];function _0xc20882(){var _0x166e11=_0x232e96;return Date[_0x166e11(0x13e,'\x25\x5b\x74\x47')]();}function _0x59e36d(){var _0x330211=_0x232e96,_0x1a3caf={'\x55\x75\x75\x77\x6f':function(_0xa16c46,_0x57bb3f){return _0xa16c46!==_0x57bb3f;},'\x62\x52\x57\x4c\x4e':function(_0xa8389e,_0x3a43ec){return _0xa8389e(_0x3a43ec);}};return _0x1a3caf[_0x330211(0x1d9,'\x34\x42\x6d\x75')](_0x1a3caf[_0x330211(0x158,'\x34\x67\x50\x29')](String,process.env.EVOLVE_OPEN_PR_DEDUP||'\x31'),'\x30');}function _0x134dee(){var _0x209d5c=_0x232e96,_0x427e12={'\x49\x78\x6a\x46\x78':function(_0x175b10,_0x5dfa53,_0x1a9362){return _0x175b10(_0x5dfa53,_0x1a9362);},'\x46\x52\x71\x68\x43':_0x209d5c(0x1cf,'\x62\x76\x32\x43')+_0x209d5c(0x1d2,'\x67\x63\x76\x26')+'\x54\x4c\x5f\x4d\x53'};return _0x427e12[_0x209d5c(0x25e,'\x29\x4e\x36\x30')](_0x34a658,_0x427e12['\x46\x52\x71\x68\x43'],-0x6387+-0x276d*-0xb+-0x7c*0xce);}function _0x3d44b0(){var _0x282780=_0x232e96,_0x1a6abe={'\x47\x6d\x73\x4b\x4c':function(_0x3ec3a9,_0x1576be){return _0x3ec3a9(_0x1576be);},'\x5a\x44\x64\x54\x71':_0x282780(0x251,'\x6a\x72\x55\x58')+_0x282780(0x179,'\x33\x5e\x53\x5e')+_0x282780(0x1ce,'\x35\x76\x28\x4b')+'\x2d\x2d\x6a\x73\x6f\x6e\x20\x6e'+'\x75\x6d\x62\x65\x72\x2c\x74\x69'+_0x282780(0x1cc,'\x56\x2a\x46\x42')+_0x282780(0x13d,'\x71\x4f\x63\x70')+_0x282780(0x136,'\x75\x6e\x43\x4e')+_0x282780(0x25f,'\x44\x4f\x21\x6a'),'\x61\x52\x4e\x6b\x4a':_0x282780(0x1b2,'\x44\x4f\x21\x6a'),'\x5a\x46\x64\x66\x45':function(_0x53a429,_0x269280){return _0x53a429||_0x269280;},'\x76\x7a\x56\x51\x6c':function(_0x24c74f,_0x2ef312){return _0x24c74f===_0x2ef312;},'\x4e\x6a\x42\x4e\x46':_0x282780(0x260,'\x65\x4f\x45\x23'),'\x78\x4e\x45\x65\x54':'\x56\x78\x49\x65\x75','\x67\x5a\x4a\x54\x47':_0x282780(0x258,'\x53\x6d\x58\x33'),'\x49\x78\x42\x42\x76':function(_0x3798e7,_0x464c72){return _0x3798e7||_0x464c72;},'\x4f\x4c\x5a\x56\x79':function(_0x5e970c,_0xb6589b){return _0x5e970c===_0xb6589b;},'\x73\x48\x51\x42\x66':_0x282780(0x1fa,'\x4e\x55\x65\x36'),'\x6d\x77\x6b\x6f\x76':function(_0x5934be,_0x122a5f){return _0x5934be+_0x122a5f;},'\x47\x46\x4e\x64\x66':_0x282780(0x1c7,'\x52\x25\x6d\x25')+'\x20\x67\x68\x20\x70\x72\x20\x6c'+_0x282780(0x135,'\x42\x5e\x66\x69')+_0x282780(0x163,'\x34\x42\x6d\x75')+_0x282780(0x23e,'\x34\x42\x6d\x75')};try{const _0x8d7b22=_0x1a6abe[_0x282780(0x23c,'\x21\x75\x62\x75')](require,_0x282780(0x206,'\x29\x59\x79\x6f')+_0x282780(0x1b9,'\x39\x23\x75\x79'))[_0x282780(0x12d,'\x33\x5e\x53\x5e')](_0x1a6abe[_0x282780(0x145,'\x70\x55\x42\x6c')],{'\x65\x6e\x63\x6f\x64\x69\x6e\x67':_0x1a6abe[_0x282780(0x247,'\x44\x4f\x21\x6a')],'\x74\x69\x6d\x65\x6f\x75\x74':_0xea87eb,'\x73\x74\x64\x69\x6f':[_0x282780(0x139,'\x42\x5e\x66\x69'),_0x282780(0x14e,'\x35\x76\x28\x4b'),_0x1a6abe[_0x282780(0x263,'\x29\x4e\x36\x30')]],'\x6d\x61\x78\x42\x75\x66\x66\x65\x72':_0x14a9f5}),_0x5a8536=JSON[_0x282780(0x1c0,'\x6a\x49\x57\x6a')](_0x1a6abe['\x49\x78\x42\x42\x76'](_0x8d7b22,'\x5b\x5d'));if(!Array[_0x282780(0x17a,'\x6c\x6f\x4d\x75')](_0x5a8536))return[];return _0x5a8536[_0x282780(0x140,'\x51\x35\x37\x32')](function(_0x37fd0b){var _0x5477fa=_0x282780,_0x4791e5={'\x4e\x77\x72\x4c\x72':function(_0x4a1548,_0x569ce1){var _0x5ba25a=_0x3b2a;return _0x1a6abe[_0x5ba25a(0x1f4,'\x4c\x62\x69\x23')](_0x4a1548,_0x569ce1);},'\x48\x76\x46\x79\x53':_0x1a6abe[_0x5477fa(0x131,'\x52\x25\x6d\x25')],'\x53\x78\x56\x54\x57':_0x5477fa(0x193,'\x30\x6b\x46\x35'),'\x64\x4b\x77\x50\x47':_0x5477fa(0x16a,'\x4e\x74\x6d\x48'),'\x46\x57\x72\x58\x70':_0x1a6abe[_0x5477fa(0x268,'\x42\x5e\x66\x69')],'\x6a\x54\x62\x6f\x4a':function(_0x3f1776,_0x21c292){var _0x5cad99=_0x5477fa;return _0x1a6abe[_0x5cad99(0x17f,'\x29\x4e\x36\x30')](_0x3f1776,_0x21c292);}};if(_0x1a6abe[_0x5477fa(0x228,'\x70\x55\x42\x6c')](_0x1a6abe[_0x5477fa(0x15b,'\x4b\x4e\x6b\x49')],_0x1a6abe['\x78\x4e\x45\x65\x54'])){var _0x1fa585={'\x4a\x45\x69\x62\x59':function(_0x337838,_0x33132e){return bwBbLh['\x4e\x77\x72\x4c\x72'](_0x337838,_0x33132e);}};const _0x9d50e5=_0x5d0fc2(_0x5477fa(0x141,'\x34\x42\x79\x48')+_0x5477fa(0x1fe,'\x30\x6b\x46\x35'))[_0x5477fa(0x15f,'\x51\x35\x37\x32')](bwBbLh['\x48\x76\x46\x79\x53'],{'\x65\x6e\x63\x6f\x64\x69\x6e\x67':bwBbLh[_0x5477fa(0x250,'\x34\x42\x79\x48')],'\x74\x69\x6d\x65\x6f\x75\x74':_0x539550,'\x73\x74\x64\x69\x6f':[bwBbLh['\x64\x4b\x77\x50\x47'],bwBbLh[_0x5477fa(0x18e,'\x63\x4c\x76\x67')],_0x5477fa(0x240,'\x56\x2a\x46\x42')],'\x6d\x61\x78\x42\x75\x66\x66\x65\x72':_0x392f73}),_0x46e9fb=_0x435a40[_0x5477fa(0x127,'\x4d\x43\x56\x64')](bwBbLh[_0x5477fa(0x267,'\x62\x76\x32\x43')](_0x9d50e5,'\x5b\x5d'));if(!_0x64bab6[_0x5477fa(0x1d0,'\x6b\x67\x52\x53')](_0x46e9fb))return[];return _0x46e9fb[_0x5477fa(0x230,'\x21\x6e\x67\x4b')](function(_0x547f66){var _0xc1f2f8=_0x5477fa;return{'\x6e\x75\x6d\x62\x65\x72':_0x547f66[_0xc1f2f8(0x24b,'\x4b\x5d\x69\x6b')],'\x74\x69\x74\x6c\x65':_0x4791e5[_0xc1f2f8(0x1e2,'\x52\x25\x6d\x25')](_0x2e9ee9,_0x547f66[_0xc1f2f8(0x1b3,'\x58\x78\x68\x4e')]||''),'\x68\x65\x61\x64\x52\x65\x66\x4e\x61\x6d\x65':_0x4791e5[_0xc1f2f8(0x134,'\x71\x4f\x63\x70')](_0x1a18e3,_0x547f66[_0xc1f2f8(0x173,'\x34\x42\x6d\x75')+_0xc1f2f8(0x22a,'\x4b\x5d\x69\x6b')]||''),'\x66\x69\x6c\x65\x73':_0x4f830b[_0xc1f2f8(0x236,'\x21\x75\x62\x75')](_0x547f66['\x66\x69\x6c\x65\x73'])?_0x547f66[_0xc1f2f8(0x1f2,'\x53\x6d\x58\x33')][_0xc1f2f8(0x1b6,'\x36\x53\x49\x6b')](function(_0x54fc45){var _0x3039b1=_0xc1f2f8;return _0x1fa585['\x4a\x45\x69\x62\x59'](_0x2ff000,_0x54fc45[_0x3039b1(0x218,'\x4b\x4e\x6b\x49')]||'');})[_0xc1f2f8(0x1a5,'\x29\x4e\x36\x30')](_0x428bd2):[]};});}else return{'\x6e\x75\x6d\x62\x65\x72':_0x37fd0b['\x6e\x75\x6d\x62\x65\x72'],'\x74\x69\x74\x6c\x65':_0x1a6abe[_0x5477fa(0x1ba,'\x41\x64\x25\x28')](String,_0x37fd0b[_0x5477fa(0x152,'\x35\x76\x28\x4b')]||''),'\x68\x65\x61\x64\x52\x65\x66\x4e\x61\x6d\x65':_0x1a6abe[_0x5477fa(0x170,'\x33\x5e\x53\x5e')](String,_0x37fd0b['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x5477fa(0x1e1,'\x4c\x62\x69\x23')]||''),'\x66\x69\x6c\x65\x73':Array[_0x5477fa(0x14c,'\x6a\x49\x57\x6a')](_0x37fd0b[_0x5477fa(0x1ca,'\x42\x5e\x66\x69')])?_0x37fd0b[_0x5477fa(0x217,'\x52\x25\x6d\x25')]['\x6d\x61\x70'](function(_0x108d71){var _0x34db3c=_0x5477fa;return _0x4791e5[_0x34db3c(0x171,'\x65\x36\x4a\x45')](String,_0x108d71[_0x34db3c(0x156,'\x35\x76\x28\x4b')]||'');})[_0x5477fa(0x175,'\x6b\x67\x52\x53')](Boolean):[]};});}catch(_0x32743f){var _0x5a0c19=_0x32743f&&_0x32743f[_0x282780(0x24c,'\x5d\x67\x50\x49')]?String(_0x32743f['\x6d\x65\x73\x73\x61\x67\x65']):'';return/not found|ENOENT|command not found/i[_0x282780(0x1e8,'\x6a\x49\x57\x6a')](_0x5a0c19)?!_0x12019c&&(_0x1a6abe[_0x282780(0x19c,'\x42\x5e\x66\x69')](_0x1a6abe[_0x282780(0x261,'\x42\x74\x59\x21')],'\x68\x6e\x43\x72\x70')?_0x14e6f7(_0x4d7350[_0x520f3d])[_0x282780(0x187,'\x28\x5d\x29\x58')](function(_0x21f44f){var _0x191f0f=_0x282780;_0x983bac[_0x191f0f(0x221,'\x29\x4e\x36\x30')](_0x21f44f);}):(_0x12019c=!![],console[_0x282780(0x20f,'\x34\x42\x6d\x75')](_0x282780(0x1b4,'\x34\x42\x6d\x75')+_0x282780(0x16b,'\x30\x6b\x46\x35')+_0x282780(0x1ac,'\x33\x5e\x53\x5e')+_0x282780(0x1e0,'\x41\x64\x25\x28')+_0x282780(0x125,'\x34\x42\x6d\x75')+_0x282780(0x212,'\x6a\x49\x57\x6a')+_0x282780(0x244,'\x65\x36\x4a\x45')+_0x282780(0x266,'\x4e\x55\x65\x36')+_0x282780(0x19b,'\x62\x76\x32\x43')+_0x282780(0x185,'\x34\x42\x6d\x75')+_0x282780(0x202,'\x44\x4f\x21\x6a')+_0x282780(0x15a,'\x4b\x4e\x6b\x49')+_0x282780(0x144,'\x30\x6b\x46\x35')+_0x282780(0x1a2,'\x39\x23\x75\x79')+_0x282780(0x224,'\x42\x5e\x66\x69')+_0x282780(0x1ae,'\x29\x4e\x36\x30')))):console['\x77\x61\x72\x6e'](_0x1a6abe['\x6d\x77\x6b\x6f\x76'](_0x1a6abe[_0x282780(0x1d5,'\x57\x74\x79\x74')],_0x5a0c19[_0x282780(0x1c4,'\x49\x64\x72\x70')](-0x1*-0x103f+-0x12ee+0xe5*0x3,0x18db+0x5*0x1fd+0x137*-0x1c))),[];}}function _0x596eb3(_0x1a89f7){var _0x5ecf83=_0x232e96,_0x3ac98e={'\x63\x44\x64\x63\x50':function(_0xf383bd){return _0xf383bd();},'\x78\x4d\x48\x6c\x69':_0x5ecf83(0x1d4,'\x6a\x49\x57\x6a')+_0x5ecf83(0x154,'\x39\x23\x75\x79'),'\x57\x69\x58\x74\x4f':function(_0x34f878){return _0x34f878();},'\x52\x43\x4c\x75\x53':function(_0x1185ad){return _0x1185ad();},'\x63\x4f\x43\x68\x49':function(_0x4fed1b,_0x36e144){return _0x4fed1b<_0x36e144;},'\x63\x75\x46\x59\x47':function(_0x2f6978,_0x3bf17d){return _0x2f6978!==_0x3bf17d;},'\x55\x7a\x69\x4e\x73':_0x5ecf83(0x138,'\x33\x55\x5a\x45'),'\x78\x4c\x68\x6f\x75':_0x5ecf83(0x1df,'\x42\x74\x59\x21'),'\x6a\x75\x6a\x78\x47':_0x5ecf83(0x1a0,'\x29\x4e\x36\x30')};if(!_0x3ac98e[_0x5ecf83(0x24d,'\x56\x2a\x46\x42')](_0x59e36d))return[];var _0x3fa702=_0x1a89f7&&Number[_0x5ecf83(0x1b1,'\x33\x5e\x53\x5e')](_0x1a89f7[_0x5ecf83(0x1a6,'\x75\x6e\x43\x4e')])?_0x1a89f7[_0x5ecf83(0x1bf,'\x6a\x49\x57\x6a')]:_0x3ac98e['\x57\x69\x58\x74\x4f'](_0x134dee),_0x4bac74=_0x3ac98e[_0x5ecf83(0x216,'\x56\x2a\x46\x42')](_0xc20882)-_0x2d634d;if(_0x3ec3e9&&_0x3ac98e[_0x5ecf83(0x146,'\x49\x64\x72\x70')](_0x4bac74,_0x3fa702))return _0x3ec3e9;if(_0x25903c)return _0x3ec3e9||[];_0x25903c=!![];try{if(_0x3ac98e[_0x5ecf83(0x1e5,'\x41\x64\x25\x28')](_0x3ac98e[_0x5ecf83(0x15e,'\x70\x55\x42\x6c')],_0x3ac98e[_0x5ecf83(0x17c,'\x41\x64\x25\x28')])){var _0x3af62d=_0x3ac98e['\x52\x43\x4c\x75\x53'](_0x3d44b0);return _0x3ec3e9=_0x3af62d,_0x2d634d=_0x3ac98e[_0x5ecf83(0x242,'\x44\x4f\x21\x6a')](_0xc20882),_0x3af62d;}else{var _0x395f2f=_0x3ac98e[_0x5ecf83(0x25d,'\x34\x67\x50\x29')](_0x4c3c63);return _0x251a6b=_0x395f2f,_0x45f249=_0x5a4a44(),_0x395f2f;}}finally{if(_0x3ac98e[_0x5ecf83(0x1ed,'\x4c\x62\x69\x23')](_0x5ecf83(0x233,'\x25\x5b\x74\x47'),_0x3ac98e[_0x5ecf83(0x25c,'\x33\x55\x5a\x45')]))_0x25903c=![];else return _0x156274[_0x5ecf83(0x14d,'\x6b\x67\x52\x53')]()[_0x5ecf83(0x191,'\x34\x64\x37\x6c')](RMtNjp['\x78\x4d\x48\x6c\x69'])['\x74\x6f\x53\x74\x72\x69\x6e\x67']()[_0x5ecf83(0x19a,'\x4b\x4e\x6b\x49')+'\x74\x6f\x72'](_0x148202)[_0x5ecf83(0x1bc,'\x28\x5d\x29\x58')](RMtNjp[_0x5ecf83(0x1ff,'\x62\x76\x32\x43')]);}}function _0x1b271a(_0x1dd432){var _0x5b7636=_0x232e96,_0x3df0a2={'\x74\x57\x46\x67\x65':function(_0x1f50d1){return _0x1f50d1();},'\x6a\x62\x6e\x41\x79':_0x5b7636(0x1eb,'\x34\x42\x6d\x75')+'\x64\x69\x73\x61\x62\x6c\x65\x64','\x66\x4b\x44\x4a\x79':_0x5b7636(0x1c8,'\x21\x75\x62\x75')+_0x5b7636(0x256,'\x63\x57\x74\x6d'),'\x69\x53\x63\x53\x6a':function(_0x4f8842){return _0x4f8842();},'\x46\x55\x67\x48\x78':function(_0x348a30,_0x1a9156){return _0x348a30===_0x1a9156;},'\x62\x75\x71\x4f\x75':function(_0x226e3d,_0x6c0448){return _0x226e3d<_0x6c0448;},'\x71\x58\x62\x66\x74':function(_0xbf09e2,_0x3833ce){return _0xbf09e2===_0x3833ce;},'\x51\x42\x61\x63\x55':_0x5b7636(0x248,'\x33\x55\x5a\x45'),'\x77\x46\x65\x4e\x56':_0x5b7636(0x1d6,'\x70\x55\x42\x6c'),'\x5a\x49\x6a\x52\x62':function(_0x5c5672,_0x331aa3){return _0x5c5672/_0x331aa3;},'\x6f\x61\x73\x6d\x4b':function(_0x32badb,_0x304fe3){return _0x32badb||_0x304fe3;},'\x68\x58\x42\x4e\x48':'\x6e\x6f\x5f\x69\x6e\x74\x65\x72'+'\x73\x65\x63\x74\x69\x6f\x6e'};if(!_0x3df0a2[_0x5b7636(0x241,'\x53\x6d\x58\x33')](_0x59e36d))return{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x3df0a2[_0x5b7636(0x167,'\x63\x57\x74\x6d')]};var _0x52c2e8=_0x1dd432&&Array['\x69\x73\x41\x72\x72\x61\x79'](_0x1dd432[_0x5b7636(0x14b,'\x4e\x55\x65\x36')+_0x5b7636(0x199,'\x21\x75\x62\x75')])?_0x1dd432[_0x5b7636(0x219,'\x70\x55\x42\x6c')+_0x5b7636(0x1bd,'\x4b\x5d\x69\x6b')]:[],_0x5b3624={};_0x5b3624[_0x5b7636(0x126,'\x56\x2a\x46\x42')]=![],_0x5b3624['\x72\x65\x61\x73\x6f\x6e']=_0x3df0a2[_0x5b7636(0x16c,'\x34\x42\x79\x48')];if(_0x52c2e8[_0x5b7636(0x20e,'\x29\x59\x79\x6f')]===-0x383*-0x1+0x4*0x419+-0x13e7)return _0x5b3624;var _0x18a77b=_0x1dd432&&Array[_0x5b7636(0x1ec,'\x34\x42\x79\x48')](_0x1dd432[_0x5b7636(0x13f,'\x54\x32\x5b\x74')])?_0x1dd432[_0x5b7636(0x1d8,'\x5d\x32\x56\x63')]:_0x3df0a2[_0x5b7636(0x20d,'\x62\x76\x32\x43')](_0x596eb3),_0xdfc6db={};_0xdfc6db[_0x5b7636(0x22e,'\x4d\x43\x56\x64')]=![],_0xdfc6db[_0x5b7636(0x1e9,'\x65\x36\x4a\x45')]=_0x5b7636(0x155,'\x5d\x67\x50\x49')+_0x5b7636(0x1e6,'\x34\x64\x37\x6c');if(_0x3df0a2['\x46\x55\x67\x48\x78'](_0x18a77b[_0x5b7636(0x132,'\x54\x32\x5b\x74')],-0xb6*-0x2c+0xcac*-0x2+-0x5f0))return _0xdfc6db;var _0x31f41e=new Set(_0x52c2e8[_0x5b7636(0x1b0,'\x33\x55\x5a\x45')](String)),_0x38e07e=null;for(var _0x419898=-0x1460+0x1*-0x16d9+-0x8a5*-0x5;_0x3df0a2[_0x5b7636(0x1ea,'\x21\x75\x62\x75')](_0x419898,_0x18a77b[_0x5b7636(0x20e,'\x29\x59\x79\x6f')]);_0x419898++){if(_0x3df0a2[_0x5b7636(0x239,'\x62\x76\x32\x43')](_0x3df0a2[_0x5b7636(0x16f,'\x42\x5e\x66\x69')],_0x3df0a2[_0x5b7636(0x1d7,'\x53\x6d\x58\x33')])){if(_0x376ddd['\x68\x61\x73'](_0x2cc248))_0x2743c4[_0x5b7636(0x178,'\x52\x25\x6d\x25')](_0x579c1a);}else{var _0x2511f5=_0x18a77b[_0x419898];if(!_0x2511f5||!Array[_0x5b7636(0x203,'\x42\x5e\x66\x69')](_0x2511f5[_0x5b7636(0x21d,'\x33\x5e\x53\x5e')])||_0x3df0a2[_0x5b7636(0x265,'\x5d\x32\x56\x63')](_0x2511f5[_0x5b7636(0x13c,'\x6a\x49\x57\x6a')][_0x5b7636(0x18a,'\x57\x74\x79\x74')],0xa62+-0x38*0xc+0x3*-0x296))continue;var _0x156ab1=new Set(_0x2511f5[_0x5b7636(0x252,'\x63\x4c\x76\x67')][_0x5b7636(0x215,'\x58\x78\x68\x4e')](String)),_0x5e9edb=[];_0x31f41e[_0x5b7636(0x15c,'\x34\x67\x50\x29')](function(_0x4d96df){var _0x443d65=_0x5b7636;if(_0x156ab1[_0x443d65(0x172,'\x75\x6e\x43\x4e')](_0x4d96df))_0x5e9edb[_0x443d65(0x148,'\x34\x42\x79\x48')](_0x4d96df);});if(_0x3df0a2[_0x5b7636(0x227,'\x34\x42\x6d\x75')](_0x5e9edb['\x6c\x65\x6e\x67\x74\x68'],-0x850+-0x3ad*0x8+-0x11c*-0x22))continue;var _0x57a60d=_0x3df0a2[_0x5b7636(0x22c,'\x5d\x32\x56\x63')](_0x5e9edb[_0x5b7636(0x137,'\x58\x78\x68\x4e')],_0x52c2e8[_0x5b7636(0x151,'\x29\x4e\x36\x30')]);if(!_0x38e07e||_0x57a60d>_0x38e07e[_0x5b7636(0x181,'\x4b\x4e\x6b\x49')+'\x61\x74\x69\x6f']){var _0x2f16cf={};_0x2f16cf[_0x5b7636(0x208,'\x30\x6b\x46\x35')]=!![],_0x2f16cf[_0x5b7636(0x143,'\x39\x23\x75\x79')]=_0x2511f5['\x6e\x75\x6d\x62\x65\x72'],_0x2f16cf['\x70\x72\x54\x69\x74\x6c\x65']=_0x2511f5[_0x5b7636(0x1aa,'\x25\x5b\x74\x47')],_0x2f16cf['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x5b7636(0x205,'\x51\x35\x37\x32')]=_0x2511f5[_0x5b7636(0x254,'\x21\x75\x62\x75')+_0x5b7636(0x22a,'\x4b\x5d\x69\x6b')],_0x2f16cf[_0x5b7636(0x1c9,'\x4e\x55\x65\x36')+_0x5b7636(0x235,'\x30\x6b\x46\x35')]=_0x57a60d,_0x2f16cf[_0x5b7636(0x23a,'\x4a\x36\x4d\x44')+_0x5b7636(0x1f8,'\x42\x5e\x66\x69')]=_0x5e9edb,_0x38e07e=_0x2f16cf;}}}return _0x3df0a2['\x6f\x61\x73\x6d\x4b'](_0x38e07e,{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x3df0a2[_0x5b7636(0x1f0,'\x39\x23\x75\x79')]});}function _0x575d57(_0x38b333){var _0x38b621=_0x232e96,_0x170be9={'\x6c\x4b\x52\x4e\x71':function(_0x3b824e,_0x386650){return _0x3b824e!==_0x386650;},'\x69\x7a\x59\x72\x47':_0x38b621(0x1fd,'\x21\x6e\x67\x4b'),'\x6b\x41\x4e\x5a\x42':function(_0x151d9f,_0x288b09){return _0x151d9f>=_0x288b09;},'\x64\x57\x54\x77\x66':function(_0x159b27,_0x190ce9){return _0x159b27===_0x190ce9;},'\x64\x51\x55\x77\x62':_0x38b621(0x147,'\x6a\x72\x55\x58'),'\x75\x64\x65\x61\x6a':function(_0x59a99f,_0x19d755){return _0x59a99f(_0x19d755);},'\x4c\x54\x78\x51\x61':function(_0x1b307e,_0x16e04b){return _0x1b307e||_0x16e04b;},'\x72\x62\x78\x65\x4a':_0x38b621(0x223,'\x58\x78\x68\x4e'),'\x7a\x52\x77\x4d\x6c':_0x38b621(0x249,'\x53\x6d\x58\x33'),'\x75\x6b\x6f\x6a\x55':function(_0xee7c85,_0xc49c7c){return _0xee7c85-_0xc49c7c;},'\x64\x6f\x43\x59\x6b':function(_0x2b7078){return _0x2b7078();},'\x45\x44\x4d\x45\x78':function(_0x28c34e){return _0x28c34e();},'\x75\x50\x5a\x4a\x65':function(_0x4e4ea0,_0x49ed63){return _0x4e4ea0===_0x49ed63;},'\x75\x6e\x6d\x6c\x71':function(_0x56e412,_0x571b2f){return _0x56e412<_0x571b2f;},'\x62\x6f\x63\x46\x4b':function(_0x12fb85,_0x476c63){return _0x12fb85<_0x476c63;},'\x46\x7a\x73\x4e\x79':function(_0x5c84a3,_0x2d9ec1){return _0x5c84a3===_0x2d9ec1;},'\x63\x7a\x74\x6f\x4b':function(_0x15fdab,_0x10508c){return _0x15fdab/_0x10508c;},'\x4f\x4a\x7a\x4e\x4a':function(_0x1cf7d7,_0x4763a3){return _0x1cf7d7>=_0x4763a3;}};if(!_0x170be9[_0x38b621(0x197,'\x5d\x67\x50\x49')](_0x59e36d))return[];var _0x381b82=_0x38b333&&Array[_0x38b621(0x198,'\x35\x76\x28\x4b')](_0x38b333[_0x38b621(0x204,'\x67\x63\x76\x26')])?_0x38b333[_0x38b621(0x13b,'\x56\x2a\x46\x42')]:[];if(_0x170be9[_0x38b621(0x189,'\x21\x6e\x67\x4b')](_0x381b82['\x6c\x65\x6e\x67\x74\x68'],0x1d2c+0x167d+-0x33a9))return[];var _0x32073f=_0x38b333&&Array[_0x38b621(0x220,'\x57\x74\x79\x74')](_0x38b333[_0x38b621(0x13f,'\x54\x32\x5b\x74')])?_0x38b333[_0x38b621(0x1e6,'\x34\x64\x37\x6c')]:_0x170be9[_0x38b621(0x16e,'\x5d\x32\x56\x63')](_0x596eb3);if(_0x170be9[_0x38b621(0x1a3,'\x34\x42\x79\x48')](_0x32073f[_0x38b621(0x132,'\x54\x32\x5b\x74')],0x3f3+0x16b7+0x2*-0xd55))return[];var _0x212c03=_0x38b333&&Number[_0x38b621(0x1a9,'\x6a\x72\x55\x58')](_0x38b333[_0x38b621(0x207,'\x58\x78\x68\x4e')+'\x64'])?_0x38b333[_0x38b621(0x190,'\x67\x63\x76\x26')+'\x64']:-0x8*-0x419+0x2*0xa57+0x1*-0x3576+0.5;function _0x3a4266(_0x21b2c7){var _0x5798ce=_0x38b621;if(_0x170be9['\x64\x57\x54\x77\x66'](_0x170be9[_0x5798ce(0x1ee,'\x34\x67\x50\x29')],_0x170be9['\x64\x51\x55\x77\x62']))return _0x170be9[_0x5798ce(0x209,'\x4b\x5d\x69\x6b')](String,_0x170be9['\x4c\x54\x78\x51\x61'](_0x21b2c7,''))['\x74\x6f\x4c\x6f\x77\x65\x72\x43'+_0x5798ce(0x168,'\x4d\x43\x56\x64')]()[_0x5798ce(0x201,'\x41\x64\x25\x28')](/[^a-z0-9]+/g,'\x20')[_0x5798ce(0x1d3,'\x30\x6b\x46\x35')](/\s+/)[_0x5798ce(0x159,'\x42\x5e\x66\x69')](function(_0x57f8f2){var _0x354c9e=_0x5798ce;if(_0x170be9[_0x354c9e(0x186,'\x52\x25\x6d\x25')]('\x55\x71\x78\x56\x68',_0x170be9[_0x354c9e(0x1cd,'\x70\x55\x42\x6c')]))return _0x170be9[_0x354c9e(0x210,'\x34\x42\x6d\x75')](_0x57f8f2[_0x354c9e(0x1c5,'\x5d\x67\x50\x49')],-0x1488+-0xb45+0x3fa*0x8);else _0x376ab0[_0x354c9e(0x17e,'\x52\x25\x6d\x25')](_0x5944f4);});else _0xd86b89[_0x5798ce(0x169,'\x53\x6d\x58\x33')](_0x4b929c);}var _0x1d44fd=new Set();for(var _0x4a43f9=0x156f+0x58f*-0x5+-0x197*-0x4;_0x170be9[_0x38b621(0x213,'\x33\x5e\x53\x5e')](_0x4a43f9,_0x381b82[_0x38b621(0x17b,'\x34\x42\x6d\x75')]);_0x4a43f9++){_0x170be9[_0x38b621(0x183,'\x63\x4c\x76\x67')](_0x3a4266,_0x381b82[_0x4a43f9])[_0x38b621(0x269,'\x70\x55\x42\x6c')](function(_0x61c86c){var _0x30c1f7=_0x38b621;_0x1d44fd[_0x30c1f7(0x1db,'\x21\x6e\x67\x4b')](_0x61c86c);});}if(_0x1d44fd[_0x38b621(0x182,'\x65\x36\x4a\x45')]===-0x11cc+-0xbc4+0x16*0x158)return[];var _0x46f993=[];for(var _0x29580d=0x23ce+-0x11a2+-0x122c;_0x170be9[_0x38b621(0x174,'\x39\x23\x75\x79')](_0x29580d,_0x32073f[_0x38b621(0x20c,'\x4e\x55\x65\x36')]);_0x29580d++){var _0xba7a30=_0x32073f[_0x29580d];if(!_0xba7a30)continue;var _0x467ac4=new Set();_0x170be9[_0x38b621(0x1f9,'\x67\x63\x76\x26')](_0x3a4266,_0xba7a30[_0x38b621(0x22f,'\x63\x4c\x76\x67')])[_0x38b621(0x1e7,'\x4e\x55\x65\x36')](function(_0x4721ff){var _0x14fc71=_0x38b621;_0x467ac4[_0x14fc71(0x12e,'\x6a\x49\x57\x6a')](_0x4721ff);}),_0x170be9[_0x38b621(0x1a4,'\x28\x5d\x29\x58')](_0x3a4266,_0xba7a30['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x38b621(0x142,'\x28\x5d\x29\x58')])[_0x38b621(0x269,'\x70\x55\x42\x6c')](function(_0x3f24e7){var _0x31cb55=_0x38b621;_0x467ac4[_0x31cb55(0x1c2,'\x33\x5e\x53\x5e')](_0x3f24e7);});if(_0x170be9['\x46\x7a\x73\x4e\x79'](_0x467ac4[_0x38b621(0x1f6,'\x34\x42\x6d\x75')],0x509*-0x6+-0x240a+0x4240))continue;var _0x27e39f=-0xd*-0x192+-0x303*-0x9+-0x2f85;_0x1d44fd[_0x38b621(0x1e7,'\x4e\x55\x65\x36')](function(_0x2c0b50){var _0x5a5587=_0x38b621;if(_0x170be9[_0x5a5587(0x160,'\x67\x63\x76\x26')]===_0x170be9[_0x5a5587(0x133,'\x6b\x67\x52\x53')])!_0x303f75&&(_0x14cd33=!![],_0x480306[_0x5a5587(0x1f7,'\x65\x36\x4a\x45')](_0x5a5587(0x253,'\x63\x57\x74\x6d')+'\x20\x67\x68\x20\x43\x4c\x49\x20'+_0x5a5587(0x20b,'\x4c\x62\x69\x23')+_0x5a5587(0x1b5,'\x4b\x5d\x69\x6b')+_0x5a5587(0x222,'\x6a\x72\x55\x58')+_0x5a5587(0x1c1,'\x29\x4e\x36\x30')+_0x5a5587(0x259,'\x54\x32\x5b\x74')+_0x5a5587(0x22d,'\x4c\x62\x69\x23')+_0x5a5587(0x1cb,'\x70\x55\x42\x6c')+_0x5a5587(0x232,'\x33\x55\x5a\x45')+_0x5a5587(0x25a,'\x39\x23\x75\x79')+'\x65\x74\x20\x45\x56\x4f\x4c\x56'+_0x5a5587(0x21b,'\x44\x4f\x21\x6a')+_0x5a5587(0x13a,'\x67\x63\x76\x26')+'\x30\x20\x74\x6f\x20\x73\x69\x6c'+_0x5a5587(0x214,'\x52\x25\x6d\x25')));else{if(_0x467ac4[_0x5a5587(0x21a,'\x35\x76\x28\x4b')](_0x2c0b50))_0x27e39f++;}});var _0x1a010d=_0x170be9[_0x38b621(0x157,'\x6b\x67\x52\x53')](_0x27e39f,_0x1d44fd[_0x38b621(0x22b,'\x70\x55\x42\x6c')]);if(_0x170be9[_0x38b621(0x229,'\x29\x4e\x36\x30')](_0x1a010d,_0x212c03)){var _0x55c3e1=Array[_0x38b621(0x23b,'\x33\x5e\x53\x5e')](_0xba7a30['\x66\x69\x6c\x65\x73'])?_0xba7a30[_0x38b621(0x26a,'\x6a\x72\x55\x58')][_0x38b621(0x225,'\x28\x5d\x29\x58')](-0x1*-0xb5c+-0xa64+-0xf8,0x506*0x4+-0x221c+0xe09):[],_0x5a7a84={};_0x5a7a84[_0x38b621(0x1af,'\x67\x63\x76\x26')]=_0xba7a30['\x6e\x75\x6d\x62\x65\x72'],_0x5a7a84[_0x38b621(0x150,'\x36\x53\x49\x6b')]=_0xba7a30[_0x38b621(0x231,'\x75\x6e\x43\x4e')],_0x5a7a84[_0x38b621(0x257,'\x41\x64\x25\x28')+_0x38b621(0x19e,'\x4e\x74\x6d\x48')]=_0xba7a30[_0x38b621(0x1fc,'\x33\x55\x5a\x45')+_0x38b621(0x18b,'\x33\x5e\x53\x5e')],_0x5a7a84['\x66\x69\x6c\x65\x73']=_0x55c3e1,_0x5a7a84[_0x38b621(0x1c3,'\x51\x35\x37\x32')+_0x38b621(0x1e3,'\x34\x67\x50\x29')]=_0x1a010d,_0x46f993[_0x38b621(0x195,'\x67\x63\x76\x26')](_0x5a7a84);}}return _0x46f993[_0x38b621(0x1f1,'\x35\x76\x28\x4b')](function(_0x1db8a3,_0x1d6ff9){var _0x38bdd6=_0x38b621;return _0x170be9[_0x38bdd6(0x21c,'\x56\x2a\x46\x42')](_0x1d6ff9[_0x38bdd6(0x264,'\x6a\x49\x57\x6a')+_0x38bdd6(0x1be,'\x33\x5e\x53\x5e')],_0x1db8a3[_0x38bdd6(0x226,'\x65\x36\x4a\x45')+_0x38bdd6(0x12b,'\x33\x55\x5a\x45')]);}),_0x46f993[_0x38b621(0x12a,'\x6a\x49\x57\x6a')](0x488+0x154+0xa*-0x96,-0x26bc+-0x5*0x98+0x29b7);}function _0x9d56b3(){_0x3ec3e9=null,_0x2d634d=-0x1*0x24cb+0x1a7c+0xd*0xcb,_0x25903c=null,_0x12019c=![];}var _0x1d6469={};_0x1d6469['\x67\x65\x74\x4f\x70\x65\x6e\x50'+'\x52\x73']=_0x596eb3,_0x1d6469['\x66\x69\x6e\x64\x4f\x76\x65\x72'+'\x6c\x61\x70']=_0x1b271a,_0x1d6469[_0x232e96(0x20a,'\x41\x64\x25\x28')+_0x232e96(0x211,'\x56\x2a\x46\x42')]=_0x575d57,_0x1d6469[_0x232e96(0x262,'\x33\x5e\x53\x5e')+_0x232e96(0x1dd,'\x6a\x49\x57\x6a')]=_0x9d56b3,module[_0x232e96(0x1ab,'\x4e\x74\x6d\x48')]=_0x1d6469;
package/src/gep/paths.js DELETED
@@ -1,522 +0,0 @@
1
- const path = require('path');
2
- const fs = require('fs');
3
- const os = require('os');
4
-
5
- let _cachedRepoRoot = null;
6
-
7
- // Resolve the git repository that evolver should treat as its work area.
8
- //
9
- // Precedence:
10
- // 1. EVOLVER_REPO_ROOT (explicit override, always wins)
11
- // 2. Nearest ancestor of process.cwd() that has a .git
12
- // (user ran evolver from inside their project)
13
- // 3. Nearest ancestor of evolver's own directory that has a .git
14
- // (local npm install: evolver is inside the project's node_modules)
15
- // 4. evolver's own directory if it has a .git (dev mode fallback)
16
- // 5. Fall back to evolver's own directory.
17
- //
18
- // CWD is checked first because the user's intent is almost always to
19
- // evolve the project they're standing in, not evolver itself. evolver
20
- // self-evolution happens naturally when CWD *is* the evolver repo.
21
- //
22
- // To opt out, set EVOLVER_NO_PARENT_GIT=true. The older
23
- // EVOLVER_USE_PARENT_GIT=true flag is still honored for forward
24
- // compatibility but is no longer required.
25
- function getRepoRoot() {
26
- // Always check EVOLVER_REPO_ROOT first, even when a cached value exists.
27
- // .env is loaded during index.js bootstrap AFTER this function has
28
- // already been called at least once (for locating the .env file
29
- // itself). Caching the pre-dotenv result would permanently shadow any
30
- // EVOLVER_REPO_ROOT later populated from .env. See #526.
31
- if (process.env.EVOLVER_REPO_ROOT) {
32
- _cachedRepoRoot = process.env.EVOLVER_REPO_ROOT;
33
- return _cachedRepoRoot;
34
- }
35
-
36
- if (_cachedRepoRoot) return _cachedRepoRoot;
37
-
38
- const ownDir = path.resolve(__dirname, '..', '..');
39
-
40
- const noParent = String(process.env.EVOLVER_NO_PARENT_GIT || '').toLowerCase() === 'true';
41
- // Older flag kept for backward compatibility. Setting it to 'false'
42
- // explicitly is treated as an opt-out, mirroring EVOLVER_NO_PARENT_GIT.
43
- const legacyFlag = process.env.EVOLVER_USE_PARENT_GIT;
44
- const legacyOptOut = typeof legacyFlag === 'string' && legacyFlag.toLowerCase() === 'false';
45
-
46
- // Both upward walks below must stop at the parent of the nearest
47
- // `node_modules` ancestor — never escape into whatever `.git` happens
48
- // to live above it (issue #541). On macOS with Homebrew, the global
49
- // install lives at `/opt/homebrew/lib/node_modules/@evomap/evolver`
50
- // and `/opt/homebrew` is itself a git repo; an unbounded walk
51
- // therefore resolves repoRoot to `/opt/homebrew`, sending
52
- // workspaceRoot / memoryDir / evolutionDir to a directory that
53
- // doesn't belong to the user and silently producing evolution
54
- // proposals for the wrong codebase.
55
- //
56
- // Boundary semantics: returns the parent of the nearest `node_modules`
57
- // ancestor (inclusive — a `.git` at that parent IS still picked up),
58
- // or null if `dir` is not inside any `node_modules` (dev clone /
59
- // user project root). Callers stop AFTER checking the boundary path
60
- // itself.
61
- //
62
- // For a local install (`<project>/node_modules/@evomap/evolver`), the
63
- // parent of node_modules IS the user's project, so the boundary
64
- // includes `<project>` and `<project>/.git` is still picked up
65
- // correctly. For a dev clone, the boundary is null and the walk is
66
- // unbounded as before.
67
- function _nodeModulesBoundary(dir) {
68
- const segments = dir.split(path.sep);
69
- const nmIdx = segments.lastIndexOf('node_modules');
70
- if (nmIdx <= 0) return null;
71
- return segments.slice(0, nmIdx).join(path.sep) || path.sep;
72
- }
73
-
74
- function _walkForGit(start) {
75
- const stopAt = _nodeModulesBoundary(start);
76
- let dir = start;
77
- while (dir !== path.dirname(dir)) {
78
- if (fs.existsSync(path.join(dir, '.git'))) {
79
- if (!process.env.EVOLVER_QUIET_PARENT_GIT) {
80
- // Diagnostic, not data. Goes to stderr so it cannot poison
81
- // a child process's stdout-as-JSON contract — the Stop hook
82
- // emits JSON on stdout, and any caller invoking the hook via
83
- // `execFileSync(...).stdout` + `JSON.parse(...)` would crash
84
- // if this line landed there first. test/sessionEndHook.test.js
85
- // was failing 5/5 locally for exactly this reason.
86
- console.error('[evolver] Using host git repository at:', dir);
87
- }
88
- return dir;
89
- }
90
- if (stopAt !== null && dir === stopAt) break;
91
- dir = path.dirname(dir);
92
- }
93
- return null;
94
- }
95
-
96
- // Walk upward from process.cwd() — the project the user is standing in.
97
- // Bounded the same way as the ownDir walk: a user who `cd`s into the
98
- // global install (e.g. `cd /opt/homebrew/lib/node_modules/@evomap/evolver`
99
- // to debug) would otherwise hit `/opt/homebrew/.git` here BEFORE the
100
- // ownDir walk runs, defeating its boundary. The boundary still
101
- // includes the parent of node_modules, so a user `cd`'d into
102
- // `<their-project>/node_modules/lodash` still has `<their-project>/.git`
103
- // picked correctly.
104
- if (!noParent && !legacyOptOut) {
105
- const hit = _walkForGit(process.cwd());
106
- if (hit) {
107
- _cachedRepoRoot = hit;
108
- return _cachedRepoRoot;
109
- }
110
- }
111
-
112
- // Walk upward from ownDir's parent (local install inside node_modules).
113
- if (!noParent && !legacyOptOut) {
114
- const hit = _walkForGit(path.dirname(ownDir));
115
- if (hit) {
116
- _cachedRepoRoot = hit;
117
- return _cachedRepoRoot;
118
- }
119
- }
120
-
121
- // Fallback: evolver's own directory (dev mode or isolated install).
122
- if (fs.existsSync(path.join(ownDir, '.git'))) {
123
- _cachedRepoRoot = ownDir;
124
- return _cachedRepoRoot;
125
- }
126
-
127
- // Final fallback.
128
- //
129
- // Opt-out (EVOLVER_NO_PARENT_GIT=true / EVOLVER_USE_PARENT_GIT=false) means
130
- // "isolated install, treat my own dir as the root" -> ownDir.
131
- //
132
- // Otherwise: for a dev clone, ownDir IS the package root and is correct. But
133
- // for an npm install, ownDir is `<prefix>/node_modules/@evomap/evolver`,
134
- // the install dir, NOT the user's project. Falling back to it makes the
135
- // daemon FATAL with "Not a git repository (...\node_modules\@evomap\evolver)"
136
- // and tell the user to `git init` inside the global install dir, the wrong
137
- // place (#580 Bug 2). When ownDir is inside a node_modules, prefer
138
- // process.cwd(): it is where the user is standing and where they should
139
- // actually `git init`, so the FATAL message points at the right directory.
140
- // This still satisfies #541's invariant (the cwd/ownDir walks above already
141
- // returned nothing, so we are not escaping to any host .git).
142
- if (!noParent && !legacyOptOut && _nodeModulesBoundary(ownDir) !== null) {
143
- _cachedRepoRoot = process.cwd();
144
- return _cachedRepoRoot;
145
- }
146
-
147
- _cachedRepoRoot = ownDir;
148
- return _cachedRepoRoot;
149
- }
150
-
151
- function getWorkspaceRoot() {
152
- if (process.env.OPENCLAW_WORKSPACE) {
153
- return process.env.OPENCLAW_WORKSPACE;
154
- }
155
-
156
- const repoRoot = getRepoRoot();
157
- const workspaceDir = path.join(repoRoot, 'workspace');
158
- if (fs.existsSync(workspaceDir)) {
159
- return workspaceDir;
160
- }
161
-
162
- return repoRoot;
163
- }
164
-
165
- function getLogsDir() {
166
- return process.env.EVOLVER_LOGS_DIR || path.join(getWorkspaceRoot(), 'logs');
167
- }
168
-
169
- function getEvolverLogPath() {
170
- return path.join(getLogsDir(), 'evolver_loop.log');
171
- }
172
-
173
- function getMemoryDir() {
174
- return process.env.MEMORY_DIR || path.join(getWorkspaceRoot(), 'memory');
175
- }
176
-
177
- function getSessionScope() {
178
- const raw = String(process.env.EVOLVER_SESSION_SCOPE || '').trim();
179
- if (!raw) return null;
180
- const safe = raw.replace(/[^a-zA-Z0-9_\-\.]/g, '_').slice(0, 128);
181
- if (!safe || /^\.{1,2}$/.test(safe) || /\.\./.test(safe)) return null;
182
- return safe;
183
- }
184
-
185
- function getEvolutionDir() {
186
- const baseDir = process.env.EVOLUTION_DIR || path.join(getMemoryDir(), 'evolution');
187
- const scope = getSessionScope();
188
- if (scope) {
189
- return path.join(baseDir, 'scopes', scope);
190
- }
191
- return baseDir;
192
- }
193
-
194
- function getGepAssetsDir() {
195
- const baseDir = process.env.GEP_ASSETS_DIR || path.join(getWorkspaceRoot(), '.evolver', 'gep');
196
- const scope = getSessionScope();
197
- if (scope) {
198
- return path.join(baseDir, 'scopes', scope);
199
- }
200
- return baseDir;
201
- }
202
-
203
- function getBundledGepAssetsDir() {
204
- return path.join(getEvolverInstallRoot(), 'assets', 'gep');
205
- }
206
-
207
- function getSkillsDir() {
208
- return process.env.SKILLS_DIR || path.join(getWorkspaceRoot(), 'skills');
209
- }
210
-
211
- // Resolve the OpenClaw `sessions` directory for the agent that actually
212
- // matches the current EVOLVER_SESSION_SCOPE (fixes #371).
213
- //
214
- // Precedence:
215
- // 1. AGENT_SESSIONS_DIR explicit override
216
- // 2. EVOLVER_SESSION_SCOPE with a `workspace-<agent>` prefix =>
217
- // ~/.openclaw/agents/<agent>/sessions
218
- // 3. AGENT_NAME (defaults to "main") pre-#371 behavior
219
- function getAgentSessionsDir() {
220
- if (process.env.AGENT_SESSIONS_DIR) return process.env.AGENT_SESSIONS_DIR;
221
-
222
- const scope = getSessionScope();
223
- let agentName = null;
224
- if (scope) {
225
- const match = /^workspace-(.+)$/.exec(scope);
226
- if (match) agentName = match[1];
227
- }
228
- if (!agentName) agentName = process.env.AGENT_NAME || 'main';
229
-
230
- // Honor an explicit HOME override (used by tests to redirect to a fake
231
- // home) before falling back to os.homedir(). On POSIX, os.homedir() also
232
- // reads $HOME first, so this is a no-op in practice on macOS/Linux. On
233
- // Windows, os.homedir() reads %USERPROFILE% and ignores HOME -- without
234
- // this fallback, test/paths.test.js cannot inject a fake home and the
235
- // tests fail with C:\Users\... vs the test's \tmp\home\... expectation.
236
- // Same pattern as the reset-local-secret fix in eb423dc.
237
- const home = process.env.HOME || os.homedir();
238
- return path.join(home, '.openclaw', 'agents', agentName, 'sessions');
239
- }
240
-
241
- // Read the first `maxBytes` of a session .jsonl file and extract the `cwd`
242
- // field from its header record (fixes #371, bug 2). The pre-fix matcher
243
- // tailed the file, so it never saw the header. This helper is O(1) on file
244
- // size. Returns null on any read/parse failure.
245
- function readSessionCwdFromHead(sessionFilePath, maxBytes) {
246
- const cap = typeof maxBytes === 'number' && maxBytes > 0 ? maxBytes : 800;
247
- try {
248
- if (!fs.existsSync(sessionFilePath)) return null;
249
- const fd = fs.openSync(sessionFilePath, 'r');
250
- try {
251
- const stat = fs.fstatSync(fd);
252
- const readSize = Math.min(cap, stat.size);
253
- if (readSize <= 0) return null;
254
- const buf = Buffer.alloc(readSize);
255
- fs.readSync(fd, buf, 0, readSize, 0);
256
- const newline = buf.indexOf('\n');
257
- const slice = newline >= 0 ? buf.slice(0, newline) : buf;
258
- const record = JSON.parse(slice.toString('utf8'));
259
- if (record && typeof record.cwd === 'string') return record.cwd;
260
- return null;
261
- } finally {
262
- fs.closeSync(fd);
263
- }
264
- } catch (_err) {
265
- return null;
266
- }
267
- }
268
-
269
- function getNarrativePath() {
270
- return path.join(getEvolutionDir(), 'evolution_narrative.md');
271
- }
272
-
273
- function getEvolutionPrinciplesPath() {
274
- const repoRoot = getRepoRoot();
275
- const custom = path.join(repoRoot, 'EVOLUTION_PRINCIPLES.md');
276
- if (fs.existsSync(custom)) return custom;
277
- return path.join(repoRoot, 'assets', 'gep', 'EVOLUTION_PRINCIPLES.md');
278
- }
279
-
280
- function getReflectionLogPath() {
281
- return path.join(getEvolutionDir(), 'reflection_log.jsonl');
282
- }
283
-
284
- // Resolve the evolver INSTALLATION directory (the package containing this file),
285
- // independent of any host git repo or process.cwd().
286
- //
287
- // Use this — never getRepoRoot() — for any operation that mutates evolver's
288
- // own files (force-update, self-PR, integrity rewrites, etc.). getRepoRoot()
289
- // preferentially returns the user's surrounding project so that evolution
290
- // signals are scoped to *their* code; using it for self-mutation will
291
- // overwrite the user's project with evolver's package contents (issue #51).
292
- //
293
- // path.resolve(__dirname, '..', '..') is stable across all install modes:
294
- // - global npm: /usr/lib/node_modules/@evomap/evolver/src/gep/paths.js
295
- // → /usr/lib/node_modules/@evomap/evolver
296
- // - local install: <project>/node_modules/@evomap/evolver/src/gep/paths.js
297
- // → <project>/node_modules/@evomap/evolver
298
- // - dev clone: /home/user/evolver/src/gep/paths.js → /home/user/evolver
299
- function getEvolverInstallRoot() {
300
- return path.resolve(__dirname, '..', '..');
301
- }
302
-
303
- // Resolve the per-user `~/.evomap` directory, with `EVOLVER_HOME` env var
304
- // override. Lazy (function call, not a module-level `const`) so tests can
305
- // flip `EVOLVER_HOME` per case without monkey-patching `os.homedir`.
306
- //
307
- // Existing call sites used to duplicate `path.join(os.homedir(), '.evomap')`
308
- // across ~9 modules; about two thirds silently ignored `EVOLVER_HOME` (it
309
- // worked for stake bootstrap and claim nudge but not for node-id, device-id,
310
- // feature flags, etc.). #114 consolidates onto this helper so the override
311
- // is uniform and tests don't need to monkey-patch the global homedir
312
- // function (which doesn't compose with `node --test` parallel execution).
313
- function getEvomapDir() {
314
- return process.env.EVOLVER_HOME || path.join(os.homedir(), '.evomap');
315
- }
316
-
317
- // Join sub-segments under `~/.evomap`. Just a convenience wrapper so call
318
- // sites don't have to `path.join(getEvomapDir(), 'mailbox', 'state.json')`
319
- // in two pieces.
320
- function getEvomapPath(...segments) {
321
- return path.join(getEvomapDir(), ...segments);
322
- }
323
-
324
- // Per-workspace random secret used to attest that a memory_graph.jsonl
325
- // entry was written by the same workspace that's now reading it. Stored
326
- // at <workspace>/.evolver/workspace-id with mode 0600 and lazily created
327
- // on first call. Returns null on read/write errors so callers can fall
328
- // back to legacy cwd-tag matching.
329
- //
330
- // Why this exists: when memory_graph.jsonl lives at the user-level path
331
- // (~/.evolver/memory/evolution/memory_graph.jsonl, used by npm-global
332
- // installs), it's shared across every workspace under the same uid. The
333
- // PR #108 cwd-tag layer scopes reads to the current cwd, but `cwd` is a
334
- // plain-text self-report — any process writing the shared file can
335
- // claim a different workspace. workspace-id replaces that self-report
336
- // with a secret that only the legitimate workspace's evolver knows
337
- // (Bugbot PR #108 round-3 Agentic Security Review MEDIUM).
338
- //
339
- // Issue #111 Phase 1: optionally backs the secret with the OS keychain
340
- // (`@napi-rs/keyring` optional dep) to close the same-uid readability
341
- // gap. Mode is controlled by `EVOLVER_WORKSPACE_KEYCHAIN` (auto/force/
342
- // off, default `auto`). FS file is RETAINED on successful keychain
343
- // migration so bun-compiled binaries (which can't `require()` the
344
- // addon yet — Phase 2) still see the same id when handing off to a
345
- // node-CLI session in the same workspace.
346
-
347
- // Read the FS-backed workspace-id at <workspace>/.evolver/workspace-id.
348
- // Returns the id on a clean read, null on any error or missing file.
349
- // Symlink rejection matches the pre-keychain hardening from PR #109.
350
- function _readWorkspaceIdFromFs(file) {
351
- const dir = path.dirname(file);
352
- try {
353
- const dirStat = fs.lstatSync(dir, { throwIfNoEntry: false });
354
- if (dirStat && dirStat.isSymbolicLink()) return null;
355
- const fileStat = fs.lstatSync(file, { throwIfNoEntry: false });
356
- if (!fileStat) return null;
357
- if (fileStat.isSymbolicLink() || !fileStat.isFile()) return null;
358
- const raw = fs.readFileSync(file, 'utf8').trim();
359
- if (raw && /^[a-f0-9]{32,}$/i.test(raw)) return raw;
360
- return null;
361
- } catch {
362
- return null;
363
- }
364
- }
365
-
366
- // Atomically create <workspace>/.evolver/workspace-id with the given id
367
- // (or generate one if `id` is null). Returns the id that ended up on
368
- // disk, or null on any unrecoverable error. EEXIST races re-read.
369
- function _writeWorkspaceIdToFs(file, id) {
370
- const dir = path.dirname(file);
371
- try {
372
- // Refuse to write if `.evolver` is a symlink. mkdirSync({recursive:true})
373
- // happily traverses an existing symlinked directory and the subsequent
374
- // open() lands the secret file in the attacker-controlled target —
375
- // O_NOFOLLOW only guards the FINAL path component, not intermediate
376
- // directories. The pre-refactor monolithic getWorkspaceId() returned
377
- // null on a symlinked dir before reaching the write; preserve that
378
- // here (Bugbot PR #121 round-1 HIGH; original guard PR #109 round-2 HIGH).
379
- const dirStat = fs.lstatSync(dir, { throwIfNoEntry: false });
380
- if (dirStat && dirStat.isSymbolicLink()) return null;
381
- fs.mkdirSync(dir, { recursive: true });
382
- const payload = id || require('crypto').randomBytes(16).toString('hex');
383
- // Atomic create-and-fail-if-exists so we never overwrite an
384
- // attacker-pre-placed file (TOCTOU between lstat and writeFileSync
385
- // could otherwise race a symlink in). O_NOFOLLOW also refuses to
386
- // follow a symlink that appears between the lstat and open. Both
387
- // flags exist on Linux/macOS; on Windows O_NOFOLLOW is silently
388
- // ignored, but Windows has no symlink-by-default risk.
389
- // NOTE(windows): mode 0o600 passed to openSync is silently ignored on
390
- // Windows. The workspace-id file will NOT be restricted to owner-read-only.
391
- // Only Windows user-profile directory ACLs provide isolation. To get
392
- // proper per-user encryption on Windows, install @napi-rs/keyring — the
393
- // keychain path above will store the id in Credential Manager (DPAPI)
394
- // instead of this plaintext file.
395
- const flags = fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL |
396
- (fs.constants.O_NOFOLLOW || 0);
397
- let fd;
398
- try {
399
- fd = fs.openSync(file, flags, 0o600);
400
- } catch (e) {
401
- if (e && e.code === 'EEXIST') {
402
- // Another process beat us — re-read with the same symlink guards.
403
- return _readWorkspaceIdFromFs(file);
404
- }
405
- // ELOOP / EMLINK from O_NOFOLLOW hitting a symlink — refuse.
406
- return null;
407
- }
408
- try {
409
- fs.writeSync(fd, payload + '\n', 0, 'utf8');
410
- } finally {
411
- fs.closeSync(fd);
412
- }
413
- // Best-effort chmod: silently ignored on Windows (no equivalent ACL API).
414
- try { fs.chmodSync(file, 0o600); } catch { /* best-effort; no-op on Windows */ }
415
- return payload;
416
- } catch {
417
- return null;
418
- }
419
- }
420
-
421
- function getWorkspaceId() {
422
- if (process.env.EVOLVER_WORKSPACE_ID) return String(process.env.EVOLVER_WORKSPACE_ID);
423
- const workspaceRoot = getWorkspaceRoot();
424
- const dir = path.join(workspaceRoot, '.evolver');
425
- const file = path.join(dir, 'workspace-id');
426
-
427
- let mode = 'off';
428
- let keychain = null;
429
- try {
430
- keychain = require('./workspaceKeychain');
431
- mode = keychain.getMode();
432
- } catch {
433
- // workspaceKeychain.js missing — degrade silently to FS-only.
434
- mode = 'off';
435
- }
436
-
437
- if (mode !== 'off' && keychain) {
438
- const addonAvailable = keychain.loadAddon() !== null;
439
- if (mode === 'force' && !addonAvailable) {
440
- throw new Error(
441
- 'EVOLVER_WORKSPACE_KEYCHAIN=force but @napi-rs/keyring is not installed. ' +
442
- 'Install it (`npm i @napi-rs/keyring`) or set EVOLVER_WORKSPACE_KEYCHAIN=auto/off.'
443
- );
444
- }
445
- if (addonAvailable) {
446
- const hit = keychain.readFromKeychain(workspaceRoot);
447
- if (hit.available && hit.id) return hit.id;
448
-
449
- // `force` must NEVER fall back to FS read/write — that would
450
- // silently re-introduce same-uid plaintext exposure of the
451
- // workspace secret, which is exactly what `force` exists to
452
- // prevent (Bugbot PR #121 round-2 MEDIUM Agentic Security).
453
- // Generate a fresh id and write it ONLY to the keychain; if
454
- // that write fails, throw rather than mirror to FS.
455
- if (mode === 'force') {
456
- if (hit.available) {
457
- // Keychain reachable but empty — mint and write keychain-only.
458
- const newId = require('crypto').randomBytes(16).toString('hex');
459
- if (!keychain.writeToKeychain(workspaceRoot, newId)) {
460
- throw new Error(
461
- 'EVOLVER_WORKSPACE_KEYCHAIN=force: keychain write failed; ' +
462
- 'refusing to fall back to filesystem secret.'
463
- );
464
- }
465
- return newId;
466
- }
467
- // Addon loaded but read claims unavailable (e.g. locked
468
- // keyring on Linux, no D-Bus session). Refuse rather than
469
- // silently degrade.
470
- throw new Error(
471
- 'EVOLVER_WORKSPACE_KEYCHAIN=force: keychain reports unavailable ' +
472
- '(locked keyring / no session?); refusing to fall back to filesystem.'
473
- );
474
- }
475
-
476
- // mode === 'auto', keychain miss — try to migrate an existing
477
- // FS secret in.
478
- const fsId = _readWorkspaceIdFromFs(file);
479
- if (fsId) {
480
- keychain.writeToKeychain(workspaceRoot, fsId); // best-effort
481
- return fsId;
482
- }
483
-
484
- // No secret anywhere — generate, write FS atomically, then
485
- // mirror to keychain. FS write is the source of truth for the
486
- // value (race-resistant via O_EXCL); keychain is the upgrade.
487
- const newId = _writeWorkspaceIdToFs(file, null);
488
- if (!newId) return null;
489
- keychain.writeToKeychain(workspaceRoot, newId); // best-effort
490
- return newId;
491
- }
492
- // mode === 'auto' && addon unavailable → fall through to FS.
493
- }
494
-
495
- // FS-only path (mode === 'off' or auto-fallback). Identical to the
496
- // pre-#111 implementation in observable behavior.
497
- const existing = _readWorkspaceIdFromFs(file);
498
- if (existing) return existing;
499
- return _writeWorkspaceIdToFs(file, null);
500
- }
501
-
502
- module.exports = {
503
- getRepoRoot,
504
- getEvolverInstallRoot,
505
- getWorkspaceRoot,
506
- getLogsDir,
507
- getEvolverLogPath,
508
- getMemoryDir,
509
- getEvolutionDir,
510
- getGepAssetsDir,
511
- getBundledGepAssetsDir,
512
- getSkillsDir,
513
- getSessionScope,
514
- getAgentSessionsDir,
515
- getWorkspaceId,
516
- readSessionCwdFromHead,
517
- getNarrativePath,
518
- getEvolutionPrinciplesPath,
519
- getReflectionLogPath,
520
- getEvomapDir,
521
- getEvomapPath,
522
- };