@evomap/evolver 1.89.20 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -564
- package/bin/evolver-llm-proxy.js +3 -0
- package/bin/evolver-mcp.js +2 -0
- package/bin/evolver-proxy.js +3 -0
- package/bin/evolver.js +4 -0
- package/index.js +1 -3586
- package/package.json +32 -62
- package/CONTRIBUTING.md +0 -19
- package/LICENSE +0 -641
- package/README.ja-JP.md +0 -521
- package/README.ko-KR.md +0 -520
- package/README.zh-CN.md +0 -531
- package/SKILL.md +0 -365
- package/assets/cover.png +0 -0
- package/assets/gep/genes.seed.json +0 -496
- package/conformance/savings-core/constants.json +0 -30
- package/conformance/savings-core/golden-vectors.json +0 -333
- package/scripts/a2a_export.js +0 -63
- package/scripts/a2a_ingest.js +0 -79
- package/scripts/a2a_promote.js +0 -118
- package/scripts/analyze_by_skill.js +0 -121
- package/scripts/build_binaries.js +0 -479
- package/scripts/check-changelog.js +0 -166
- package/scripts/extract_log.js +0 -85
- package/scripts/generate_history.js +0 -75
- package/scripts/gep_append_event.js +0 -96
- package/scripts/gep_personality_report.js +0 -234
- package/scripts/human_report.js +0 -147
- package/scripts/recall-verify-report.js +0 -234
- package/scripts/recover_loop.js +0 -61
- package/scripts/refresh_stars_badge.js +0 -168
- package/scripts/seed-merchants.js +0 -91
- package/scripts/skill2recipes.js +0 -118
- package/scripts/suggest_version.js +0 -89
- package/scripts/validate-modules.js +0 -38
- package/scripts/validate-suite.js +0 -78
- package/skills/_meta/SKILL.md +0 -41
- package/skills/index.json +0 -14
- package/src/adapters/claudeCode.js +0 -194
- package/src/adapters/codex.js +0 -216
- package/src/adapters/cursor.js +0 -91
- package/src/adapters/hookAdapter.js +0 -469
- package/src/adapters/kiro.js +0 -195
- package/src/adapters/opencode.js +0 -326
- package/src/adapters/scripts/_lockPaths.js +0 -74
- package/src/adapters/scripts/_memoryFiltering.js +0 -35
- package/src/adapters/scripts/_runtimePaths.js +0 -440
- package/src/adapters/scripts/evolver-session-end.js +0 -321
- package/src/adapters/scripts/evolver-session-start.js +0 -587
- package/src/adapters/scripts/evolver-signal-detect.js +0 -98
- package/src/adapters/scripts/evolver-task-recall.js +0 -173
- package/src/atp/atpExecute.js +0 -283
- package/src/atp/atpTaskPickup.js +0 -233
- package/src/atp/autoBuyer.js +0 -382
- package/src/atp/autoDeliver.js +0 -215
- package/src/atp/cli.js +0 -354
- package/src/atp/cliAutobuyPrompt.js +0 -154
- package/src/atp/consumerAgent.js +0 -157
- package/src/atp/defaultHandler.js +0 -69
- package/src/atp/heartbeatSignalsHandler.js +0 -254
- package/src/atp/hubClient.js +0 -317
- package/src/atp/index.js +0 -38
- package/src/atp/merchantAgent.js +0 -118
- package/src/atp/protocol.js +0 -41
- package/src/atp/questionComposer.js +0 -133
- package/src/atp/serviceHelper.js +0 -92
- package/src/canary.js +0 -13
- package/src/config.js +0 -351
- package/src/evolve/guards.js +0 -1
- package/src/evolve/pipeline/collect.js +0 -1
- package/src/evolve/pipeline/dispatch.js +0 -1
- package/src/evolve/pipeline/enrich.js +0 -1
- package/src/evolve/pipeline/hub.js +0 -1
- package/src/evolve/pipeline/select.js +0 -1
- package/src/evolve/pipeline/signals.js +0 -1
- package/src/evolve/utils.js +0 -1
- package/src/evolve.js +0 -1
- package/src/experiment/agentRunner.js +0 -229
- package/src/experiment/cli.js +0 -159
- package/src/experiment/comparison.js +0 -233
- package/src/experiment/metrics.js +0 -75
- package/src/forceUpdate.js +0 -991
- package/src/gep/a2a.js +0 -173
- package/src/gep/a2aProtocol.js +0 -1
- package/src/gep/analyzer.js +0 -35
- package/src/gep/antiAbuseTelemetry.js +0 -1
- package/src/gep/assetCallLog.js +0 -197
- package/src/gep/assetStore.js +0 -723
- package/src/gep/assets.js +0 -36
- package/src/gep/autoDistillConv.js +0 -1
- package/src/gep/autoDistillLlm.js +0 -1
- package/src/gep/bridge.js +0 -138
- package/src/gep/candidateEval.js +0 -1
- package/src/gep/candidates.js +0 -1
- package/src/gep/claimNudge.js +0 -121
- package/src/gep/cliContracts.js +0 -1190
- package/src/gep/contentHash.js +0 -1
- package/src/gep/conversationDistiller.js +0 -1
- package/src/gep/conversationSniffer.js +0 -1
- package/src/gep/crypto.js +0 -1
- package/src/gep/curriculum.js +0 -1
- package/src/gep/deviceId.js +0 -1
- package/src/gep/directoryClient.js +0 -115
- package/src/gep/envFingerprint.js +0 -1
- package/src/gep/epigenetics.js +0 -1
- package/src/gep/execBridge.js +0 -1
- package/src/gep/executionTrace.js +0 -291
- package/src/gep/explore.js +0 -1
- package/src/gep/featureFlags.js +0 -121
- package/src/gep/gitOps.js +0 -265
- package/src/gep/hash.js +0 -1
- package/src/gep/hostErrorClassifier.js +0 -34
- package/src/gep/hubFetch.js +0 -1
- package/src/gep/hubReview.js +0 -1
- package/src/gep/hubSearch.js +0 -1
- package/src/gep/hubVerify.js +0 -1
- package/src/gep/idleScheduler.js +0 -400
- package/src/gep/issueReporter.js +0 -416
- package/src/gep/learningSignals.js +0 -1
- package/src/gep/llmReview.js +0 -92
- package/src/gep/localStateAwareness.js +0 -243
- package/src/gep/mailboxTransport.js +0 -119
- package/src/gep/memoryGraph.js +0 -1
- package/src/gep/memoryGraphAdapter.js +0 -1
- package/src/gep/mutation.js +0 -1
- package/src/gep/narrativeMemory.js +0 -1
- package/src/gep/oauthLogin.js +0 -181
- package/src/gep/openPRRegistry.js +0 -1
- package/src/gep/paths.js +0 -522
- package/src/gep/personality.js +0 -1
- package/src/gep/policyCheck.js +0 -1
- package/src/gep/portable.js +0 -103
- package/src/gep/privacyClient.js +0 -235
- package/src/gep/prompt.js +0 -1
- package/src/gep/questionGenerator.js +0 -518
- package/src/gep/recallInject.js +0 -1
- package/src/gep/recallVerifier.js +0 -1
- package/src/gep/reflection.js +0 -1
- package/src/gep/sanitize.js +0 -264
- package/src/gep/savingsCore.js +0 -1
- package/src/gep/schemas/capsule.js +0 -170
- package/src/gep/schemas/gene.js +0 -154
- package/src/gep/schemas/index.js +0 -8
- package/src/gep/schemas/protocol.js +0 -51
- package/src/gep/schemas/task.js +0 -74
- package/src/gep/selector.js +0 -1
- package/src/gep/selfPR.js +0 -469
- package/src/gep/signals.js +0 -776
- package/src/gep/skill2gep.js +0 -1056
- package/src/gep/skill2gepAudit.js +0 -303
- package/src/gep/skill2recipes.js +0 -511
- package/src/gep/skillDistiller.js +0 -1
- package/src/gep/skillPublisher.js +0 -358
- package/src/gep/solidify.js +0 -1
- package/src/gep/strategy.js +0 -1
- package/src/gep/taskReceiver.js +0 -575
- package/src/gep/tokenSavings.js +0 -1
- package/src/gep/trajectoryExport.js +0 -1
- package/src/gep/validationReport.js +0 -55
- package/src/gep/validator/index.js +0 -411
- package/src/gep/validator/reporter.js +0 -210
- package/src/gep/validator/sandboxExecutor.js +0 -480
- package/src/gep/validator/stakeBootstrap.js +0 -357
- package/src/gep/workspaceKeychain.js +0 -1
- package/src/ops/cleanup.js +0 -80
- package/src/ops/commentary.js +0 -60
- package/src/ops/health_check.js +0 -104
- package/src/ops/index.js +0 -11
- package/src/ops/innovation.js +0 -67
- package/src/ops/lifecycle.js +0 -798
- package/src/ops/self_repair.js +0 -76
- package/src/ops/skills_monitor.js +0 -147
- package/src/ops/trigger.js +0 -33
- package/src/proxy/clientSettings.js +0 -405
- package/src/proxy/envelope.js +0 -59
- package/src/proxy/extensions/dmHandler.js +0 -45
- package/src/proxy/extensions/sessionHandler.js +0 -141
- package/src/proxy/extensions/skillUpdater.js +0 -64
- package/src/proxy/extensions/traceControl.js +0 -1
- package/src/proxy/index.js +0 -1395
- package/src/proxy/inject.js +0 -1
- package/src/proxy/lifecycle/manager.js +0 -1568
- package/src/proxy/mailbox/state.js +0 -207
- package/src/proxy/mailbox/store.js +0 -590
- package/src/proxy/router/cache_passthrough.js +0 -26
- package/src/proxy/router/features.js +0 -84
- package/src/proxy/router/gemini_route.js +0 -154
- package/src/proxy/router/messages_route.js +0 -535
- package/src/proxy/router/model_router.js +0 -113
- package/src/proxy/router/models_route.js +0 -52
- package/src/proxy/router/ollama_route.js +0 -103
- package/src/proxy/router/responses_route.js +0 -170
- package/src/proxy/router/vertex_route.js +0 -110
- package/src/proxy/server/http.js +0 -363
- package/src/proxy/server/routes.js +0 -558
- package/src/proxy/server/settings.js +0 -115
- package/src/proxy/sync/engine.js +0 -179
- package/src/proxy/sync/inbound.js +0 -211
- package/src/proxy/sync/outbound.js +0 -320
- package/src/proxy/task/monitor.js +0 -131
- package/src/proxy/trace/extractor.js +0 -1
- package/src/proxy/trace/usage.js +0 -1
- package/src/webui/client/clientJs/assets.js +0 -111
- package/src/webui/client/clientJs/bootstrap.js +0 -92
- package/src/webui/client/clientJs/common.js +0 -77
- package/src/webui/client/clientJs/i18n.js +0 -366
- package/src/webui/client/clientJs/index.js +0 -35
- package/src/webui/client/clientJs/interactions.js +0 -351
- package/src/webui/client/clientJs/overview.js +0 -152
- package/src/webui/client/clientJs/personality.js +0 -285
- package/src/webui/client/clientJs/pipelines.js +0 -330
- package/src/webui/client/indexHtml.js +0 -221
- package/src/webui/client/static.js +0 -23
- package/src/webui/client/stylesCss.js +0 -639
- package/src/webui/client/vendor/README.md +0 -15
- package/src/webui/client/vendor/echarts.min.js +0 -45
- package/src/webui/index.js +0 -14
- package/src/webui/observer/assets.js +0 -146
- package/src/webui/observer/index.js +0 -37
- package/src/webui/observer/interactions.js +0 -127
- package/src/webui/observer/jsonl.js +0 -75
- package/src/webui/observer/paths.js +0 -46
- package/src/webui/observer/personality.js +0 -43
- package/src/webui/observer/pipelineEvents.js +0 -58
- package/src/webui/observer/redact.js +0 -63
- package/src/webui/observer/runs.js +0 -356
- package/src/webui/observer/safety.js +0 -57
- package/src/webui/observer/skills.js +0 -70
- package/src/webui/observer/status.js +0 -71
- package/src/webui/server/http.js +0 -138
- package/src/webui/server/routes.js +0 -41
package/src/proxy/trace/usage.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const _0x58eb33=_0x14eb;(function(_0x396d74,_0x316e95){const _0x52ca02=_0x14eb,_0x3cb9d5=_0x396d74();while(!![]){try{const _0x246a24=-parseInt(_0x52ca02(0xce,'\x52\x26\x4e\x5d'))/(0x15b1+0xb1f+0x25*-0xe3)*(parseInt(_0x52ca02(0x101,'\x5a\x62\x71\x49'))/(-0x2037*0x1+0x271+0x1dc8))+-parseInt(_0x52ca02(0x111,'\x32\x5d\x35\x68'))/(-0x131e+-0x4d5+0x17f6)*(parseInt(_0x52ca02(0xae,'\x28\x50\x74\x70'))/(-0x28*-0x25+-0xd*0x275+0x1a2d*0x1))+parseInt(_0x52ca02(0xc9,'\x5d\x5d\x28\x39'))/(-0x190c+-0x237c*-0x1+0x379*-0x3)*(parseInt(_0x52ca02(0xfb,'\x6e\x53\x5d\x53'))/(0x29*0x35+0xf99+0x181*-0x10))+-parseInt(_0x52ca02(0xf0,'\x65\x35\x4a\x48'))/(-0x32*-0x56+-0x6fa+-0x9cb)+parseInt(_0x52ca02(0xc0,'\x5a\x62\x71\x49'))/(0x2090+-0x247a+0x3f2)+-parseInt(_0x52ca02(0xd9,'\x6e\x53\x5d\x53'))/(0x443*0x1+0x8*-0x202+0xbd6)*(parseInt(_0x52ca02(0x113,'\x73\x62\x68\x5d'))/(-0x1*0x4ef+-0x13f7+0x18f0))+-parseInt(_0x52ca02(0xfa,'\x53\x75\x26\x70'))/(0x1*0x1a8d+-0xfd6*-0x2+0x2*-0x1d17)*(-parseInt(_0x52ca02(0xa4,'\x71\x38\x74\x4b'))/(0x6ee*0x5+0x1e37+0x159b*-0x3));if(_0x246a24===_0x316e95)break;else _0x3cb9d5['push'](_0x3cb9d5['shift']());}catch(_0x136c54){_0x3cb9d5['push'](_0x3cb9d5['shift']());}}}(_0x3c1f,-0x4*-0x5441+0x1708f+0x807e*-0x1));const _0x31fc3a=(function(){const _0x3d385d=_0x14eb,_0x129a25={'\x61\x72\x77\x51\x4d':function(_0x532df6,_0x4b7674){return _0x532df6===_0x4b7674;},'\x6e\x75\x4d\x48\x6a':_0x3d385d(0x10e,'\x28\x50\x74\x70'),'\x73\x79\x61\x77\x50':function(_0x1a6741,_0x34ddea){return _0x1a6741*_0x34ddea;},'\x4f\x62\x4b\x74\x68':function(_0x2aef17,_0x1a120d){return _0x2aef17(_0x1a120d);}};let _0x4d3825=!![];return function(_0x1a4458,_0x3bde21){const _0xc5ee60={'\x44\x67\x77\x78\x41':function(_0x2dc4de,_0x21ed50){const _0x2bd59f=_0x14eb;return _0x129a25[_0x2bd59f(0xbb,'\x5a\x62\x71\x49')](_0x2dc4de,_0x21ed50);},'\x65\x64\x45\x4a\x62':function(_0x3b4996,_0x5327bf){const _0x440906=_0x14eb;return _0x129a25[_0x440906(0xfe,'\x67\x42\x68\x75')](_0x3b4996,_0x5327bf);}},_0x2f3e88=_0x4d3825?function(){const _0x379cb6=_0x14eb;if(_0x3bde21){if(_0x129a25['\x61\x72\x77\x51\x4d'](_0x129a25[_0x379cb6(0xe9,'\x26\x64\x69\x37')],_0x129a25[_0x379cb6(0xc7,'\x6c\x52\x71\x34')])){const _0x349728=_0x3bde21[_0x379cb6(0xb4,'\x73\x62\x68\x5d')](_0x1a4458,arguments);return _0x3bde21=null,_0x349728;}else{const _0xfbd242=_0x4bd276&&(_0x3a5a9c[_0x379cb6(0xac,'\x46\x23\x47\x48')+'\x70']||_0x2b9751[_0x379cb6(0xe8,'\x35\x25\x46\x40')+_0x379cb6(0x117,'\x71\x38\x74\x4b')]);if(_0xfbd242){const _0x174091=_0x162291['\x70\x61\x72\x73\x65'](_0xfbd242);if(_0x5c7cbf[_0x379cb6(0x10c,'\x4e\x26\x45\x56')](_0x174091))return _0x174091;}if(_0x28d492&&_0x553cc7[_0x379cb6(0xef,'\x32\x61\x6a\x4e')](_0x22b87e(_0x4a28aa[_0x379cb6(0xb2,'\x73\x62\x68\x5d')+'\x74'])))return _0xc5ee60[_0x379cb6(0xd3,'\x55\x6b\x53\x29')](_0xc5ee60['\x65\x64\x45\x4a\x62'](_0x32c1f2,_0xfb931c[_0x379cb6(0xaf,'\x6e\x53\x5d\x53')+'\x74']),-0x3d*0x27+0x20b+0xb28);return null;}}}:function(){};return _0x4d3825=![],_0x2f3e88;};}()),_0x36f4b7=_0x31fc3a(this,function(){const _0x4897cd=_0x14eb,_0x40b2e1={};_0x40b2e1[_0x4897cd(0x130,'\x4d\x71\x40\x7a')]=_0x4897cd(0xca,'\x35\x25\x46\x40')+_0x4897cd(0x10f,'\x6c\x52\x71\x34');const _0x574d9c=_0x40b2e1;return _0x36f4b7[_0x4897cd(0xdc,'\x4e\x26\x45\x56')]()[_0x4897cd(0x114,'\x28\x50\x74\x70')](_0x4897cd(0x10a,'\x52\x26\x4e\x5d')+_0x4897cd(0x103,'\x5a\x62\x71\x49'))[_0x4897cd(0xc2,'\x61\x65\x5b\x4e')]()['\x63\x6f\x6e\x73\x74\x72\x75\x63'+_0x4897cd(0xc5,'\x68\x56\x46\x61')](_0x36f4b7)[_0x4897cd(0x12c,'\x32\x61\x6a\x4e')](_0x574d9c[_0x4897cd(0xd8,'\x5d\x5d\x28\x39')]);});_0x36f4b7();'use strict';const _0x138a5c=require('\x66\x73'),{resolveTraceFile:_0xce7c3d,resolveEvomapNodeSecret:_0x26c872,decryptTraceEnvelope:_0x2b9c97}=require(_0x58eb33(0x12d,'\x61\x65\x5b\x4e')+_0x58eb33(0xc1,'\x28\x50\x74\x70')),_0x5679e3={};_0x5679e3[_0x58eb33(0xbc,'\x58\x5e\x41\x26')+'\x6b\x65\x6e\x73']=0x0,_0x5679e3[_0x58eb33(0xa7,'\x5d\x5d\x28\x39')+_0x58eb33(0xbd,'\x34\x52\x66\x4f')]=0x0,_0x5679e3[_0x58eb33(0xbf,'\x47\x6b\x52\x24')+_0x58eb33(0xe3,'\x65\x47\x58\x6e')]=0x0,_0x5679e3[_0x58eb33(0xff,'\x32\x61\x6a\x4e')]=0x0,_0x5679e3[_0x58eb33(0xde,'\x32\x5d\x35\x68')]=![];const _0x3233d4=Object[_0x58eb33(0xf5,'\x78\x71\x29\x35')](_0x5679e3);function _0x3c1f(){const _0x23ef59=['\x57\x51\x52\x63\x52\x47\x4f\x74\x64\x71','\x57\x35\x6e\x6b\x57\x34\x52\x63\x49\x75\x4b','\x76\x31\x56\x64\x55\x43\x6f\x76\x78\x57','\x73\x74\x57\x68\x57\x36\x6d\x45','\x57\x35\x33\x63\x47\x43\x6b\x59\x46\x67\x74\x64\x55\x68\x6c\x64\x4b\x71','\x57\x4f\x39\x6c\x63\x43\x6b\x31\x68\x53\x6b\x49\x64\x78\x4b\x49\x76\x65\x44\x4e','\x67\x63\x4c\x4a\x71\x4b\x30','\x57\x52\x6c\x64\x4c\x74\x70\x64\x4b\x4c\x34','\x57\x51\x2f\x64\x55\x38\x6b\x4f\x57\x36\x39\x68','\x57\x35\x70\x64\x4a\x73\x68\x63\x4d\x38\x6b\x50','\x66\x38\x6f\x6e\x77\x76\x56\x63\x4a\x43\x6b\x6a','\x77\x4d\x74\x64\x4f\x6d\x6f\x51','\x6d\x53\x6f\x2b\x57\x35\x57\x6f\x57\x37\x61','\x6e\x38\x6f\x6a\x57\x36\x79\x73\x57\x36\x78\x64\x4b\x43\x6f\x42\x57\x51\x61','\x57\x51\x79\x4d\x57\x35\x48\x32\x42\x53\x6f\x37\x69\x61\x43','\x57\x4f\x70\x63\x4a\x78\x70\x64\x49\x73\x76\x4b\x57\x51\x58\x73\x57\x4f\x72\x58\x57\x4f\x53\x6d\x57\x36\x71','\x57\x51\x68\x63\x4b\x67\x4a\x64\x4f\x6d\x6f\x70\x79\x73\x7a\x64\x57\x36\x52\x64\x52\x5a\x5a\x63\x48\x71','\x57\x4f\x6a\x66\x57\x37\x5a\x64\x47\x6d\x6f\x4a','\x78\x62\x34\x6a\x57\x37\x71\x6b','\x57\x35\x48\x54\x78\x38\x6f\x55\x57\x34\x71','\x57\x35\x46\x63\x4b\x38\x6b\x79\x45\x78\x4b','\x6a\x72\x4b\x6d\x57\x35\x4f\x51\x57\x4f\x56\x63\x56\x6d\x6f\x4e','\x57\x34\x78\x63\x53\x53\x6f\x66\x77\x58\x76\x6b\x7a\x63\x69','\x57\x4f\x4c\x70\x77\x38\x6f\x4b\x74\x6d\x6f\x62\x65\x76\x57','\x57\x35\x2f\x63\x4f\x38\x6b\x53\x70\x61','\x6f\x53\x6b\x34\x78\x4a\x30\x61','\x57\x50\x66\x33\x41\x30\x30\x72\x57\x52\x75\x43','\x72\x68\x64\x64\x4b\x53\x6f\x62\x75\x47\x56\x64\x53\x77\x4f','\x57\x50\x33\x64\x55\x43\x6f\x62\x43\x73\x58\x76\x73\x74\x75','\x57\x34\x4f\x79\x77\x43\x6f\x4d\x42\x43\x6f\x2f\x6d\x68\x34','\x76\x32\x70\x64\x48\x43\x6f\x74\x71\x57','\x44\x43\x6f\x45\x67\x4e\x54\x42\x6c\x53\x6f\x38\x57\x35\x6d','\x57\x37\x6a\x33\x46\x43\x6f\x50\x57\x35\x47\x66\x6b\x71\x38','\x66\x59\x6e\x68\x72\x65\x54\x32\x6b\x53\x6b\x53','\x79\x31\x42\x64\x51\x43\x6f\x7a\x69\x47','\x57\x36\x43\x4b\x46\x38\x6b\x6a\x57\x36\x38','\x57\x37\x48\x48\x57\x4f\x43\x37','\x6c\x78\x66\x37\x63\x53\x6f\x30','\x57\x52\x70\x64\x52\x48\x70\x63\x55\x65\x47\x32\x41\x61','\x57\x35\x30\x2b\x76\x6d\x6b\x6e\x57\x37\x71','\x57\x37\x6e\x68\x75\x74\x74\x64\x50\x4b\x71\x75\x7a\x71','\x57\x36\x79\x57\x72\x6d\x6b\x55\x57\x35\x54\x5a','\x57\x4f\x53\x7a\x57\x35\x4c\x4f\x43\x61','\x57\x52\x6c\x63\x56\x4a\x53\x75\x6d\x48\x5a\x63\x50\x43\x6b\x77','\x57\x52\x4b\x6a\x70\x59\x47','\x6c\x43\x6b\x32\x68\x48\x61\x59','\x6d\x53\x6f\x31\x57\x34\x65\x79\x57\x36\x57','\x61\x43\x6f\x31\x57\x37\x6c\x64\x55\x53\x6b\x42','\x46\x73\x4f\x4f\x57\x34\x47\x69','\x57\x35\x47\x71\x43\x38\x6b\x4c\x57\x36\x4b','\x57\x4f\x57\x33\x57\x50\x42\x64\x55\x59\x4c\x2b\x57\x51\x2f\x64\x4d\x62\x44\x66\x6f\x6d\x6b\x61','\x57\x4f\x44\x4a\x78\x75\x71','\x57\x51\x6d\x38\x46\x57\x35\x52','\x57\x50\x58\x4e\x71\x75\x72\x70','\x6c\x38\x6f\x55\x77\x38\x6f\x71\x57\x35\x57','\x6e\x59\x79\x77\x57\x37\x43\x65','\x43\x43\x6f\x66\x6f\x72\x69\x57\x57\x4f\x4f\x65\x57\x52\x79','\x57\x34\x6c\x64\x53\x74\x74\x63\x4b\x47','\x57\x35\x66\x61\x7a\x4d\x53\x33','\x57\x52\x65\x63\x73\x49\x4a\x64\x53\x4d\x65\x67\x72\x47','\x61\x43\x6f\x59\x74\x4e\x4a\x63\x48\x71','\x57\x52\x65\x73\x72\x47\x4a\x64\x50\x67\x43','\x6a\x32\x62\x30\x57\x4f\x69','\x79\x33\x2f\x64\x54\x53\x6f\x6e\x6b\x61','\x57\x50\x37\x63\x49\x43\x6f\x32\x71\x38\x6f\x52\x57\x35\x57\x6a\x57\x37\x4b','\x57\x34\x46\x63\x4c\x38\x6b\x76\x7a\x32\x4e\x64\x55\x71','\x42\x6d\x6b\x69\x57\x37\x43\x64\x57\x37\x33\x64\x51\x53\x6f\x6a\x57\x51\x57','\x57\x34\x54\x64\x74\x67\x53\x54\x57\x52\x4b\x58\x57\x4f\x30','\x70\x6d\x6f\x39\x43\x6d\x6f\x70\x57\x34\x4f','\x57\x52\x6c\x63\x48\x73\x4f\x58\x6d\x61','\x45\x4e\x4a\x64\x52\x38\x6f\x37\x62\x62\x34','\x57\x37\x58\x59\x6c\x59\x68\x64\x4d\x75\x52\x63\x4b\x71\x69','\x57\x52\x31\x39\x64\x43\x6f\x59\x57\x50\x6d\x59\x64\x38\x6b\x2b','\x57\x4f\x2f\x63\x4a\x4e\x78\x64\x48\x73\x62\x55\x57\x34\x6a\x51\x57\x51\x44\x61\x57\x4f\x65\x2f','\x69\x71\x71\x4f\x57\x36\x71\x74\x57\x4f\x42\x64\x50\x53\x6f\x75','\x6f\x6d\x6b\x35\x57\x4f\x46\x63\x56\x57','\x57\x52\x34\x50\x69\x49\x74\x64\x4d\x31\x74\x63\x52\x59\x4f','\x63\x75\x44\x52\x67\x53\x6f\x6c\x57\x37\x7a\x70\x57\x4f\x4f','\x6f\x65\x6d\x65\x6d\x58\x69','\x74\x71\x38\x72\x43\x65\x78\x63\x56\x6d\x6b\x76\x76\x57','\x57\x51\x61\x54\x71\x73\x6e\x6b\x57\x50\x61\x61\x66\x61','\x57\x51\x44\x4a\x68\x6d\x6f\x56\x57\x4f\x30\x54\x44\x38\x6f\x58\x42\x53\x6f\x36\x57\x50\x66\x4c','\x57\x37\x70\x64\x4b\x64\x74\x63\x55\x43\x6b\x6b\x6e\x61\x66\x52','\x57\x35\x54\x4f\x72\x4b\x30\x71','\x6e\x38\x6b\x6e\x57\x36\x70\x63\x54\x30\x75\x42\x57\x36\x30\x48','\x57\x51\x65\x66\x71\x48\x56\x64\x53\x32\x4f\x33\x44\x61','\x57\x34\x6c\x64\x4c\x5a\x75','\x57\x51\x6d\x68\x76\x58\x42\x64\x56\x47','\x57\x4f\x52\x63\x4e\x43\x6b\x43\x57\x4f\x39\x4d\x69\x5a\x64\x63\x47\x6d\x6b\x72\x67\x68\x52\x64\x50\x71','\x68\x38\x6b\x48\x71\x49\x71\x61','\x57\x37\x48\x31\x45\x68\x70\x63\x4a\x63\x78\x64\x51\x4a\x46\x63\x55\x4b\x56\x64\x47\x67\x4a\x64\x53\x57','\x64\x31\x7a\x68\x66\x53\x6f\x67\x57\x36\x53','\x6d\x38\x6f\x79\x44\x6d\x6f\x54\x57\x37\x42\x63\x47\x38\x6f\x32\x6a\x71','\x57\x52\x57\x64\x6a\x38\x6f\x6d\x57\x36\x57\x4e\x66\x64\x75\x35\x57\x34\x56\x63\x48\x6d\x6f\x64','\x57\x4f\x46\x64\x53\x38\x6f\x4d\x42\x58\x69','\x57\x52\x70\x64\x4d\x53\x6b\x59\x57\x37\x44\x42\x6c\x47\x78\x64\x4e\x57','\x64\x31\x39\x69\x68\x43\x6f\x77','\x57\x36\x76\x51\x44\x43\x6f\x2b\x57\x36\x4f\x46\x66\x48\x6d','\x75\x32\x33\x64\x47\x38\x6f\x62\x73\x4a\x68\x64\x4f\x75\x71','\x57\x34\x33\x63\x56\x6d\x6b\x31\x69\x68\x75\x6f\x7a\x72\x52\x63\x50\x66\x53\x42\x57\x51\x69','\x57\x36\x65\x36\x76\x57','\x6e\x53\x6f\x69\x57\x34\x65\x70\x57\x37\x56\x64\x53\x43\x6f\x67\x57\x51\x47','\x57\x35\x66\x7a\x7a\x67\x65\x4d\x57\x50\x4b\x32\x57\x4f\x43','\x68\x43\x6f\x6d\x41\x67\x52\x63\x54\x71','\x6a\x6d\x6f\x71\x57\x36\x34','\x57\x34\x57\x73\x41\x38\x6f\x32\x77\x43\x6f\x2f\x6d\x4e\x57','\x57\x52\x30\x39\x57\x36\x66\x78\x41\x61','\x62\x43\x6f\x70\x45\x43\x6f\x38','\x46\x65\x65\x55\x57\x34\x75\x57\x57\x4f\x4a\x64\x52\x38\x6f\x4a','\x57\x51\x75\x7a\x6e\x53\x6f\x41\x57\x37\x79\x2b\x46\x68\x75','\x71\x59\x75\x67\x57\x36\x75\x6c','\x61\x67\x53\x75\x6b\x5a\x79','\x61\x30\x7a\x69\x65\x53\x6f\x72\x57\x37\x50\x46\x57\x51\x34','\x42\x6d\x6f\x70\x61\x77\x58\x61\x46\x38\x6b\x4b\x57\x4f\x52\x63\x50\x38\x6b\x41\x75\x61','\x57\x35\x74\x63\x54\x53\x6f\x31','\x70\x48\x61\x55\x57\x36\x43\x64','\x6b\x43\x6b\x6f\x70\x74\x47\x6a\x57\x50\x75\x50\x57\x51\x65','\x6c\x43\x6b\x78\x71\x63\x79\x76','\x57\x4f\x62\x73\x45\x57\x44\x65','\x57\x4f\x38\x34\x57\x50\x5a\x64\x53\x73\x57\x57\x57\x4f\x2f\x64\x4a\x4a\x7a\x34\x6b\x47','\x57\x36\x78\x64\x51\x74\x4a\x63\x51\x38\x6b\x35','\x57\x35\x52\x64\x54\x67\x64\x64\x56\x6d\x6b\x37','\x57\x37\x66\x72\x57\x50\x69\x56\x57\x37\x47','\x6a\x5a\x4b\x6c\x57\x35\x47\x6b','\x57\x51\x68\x63\x4d\x32\x64\x64\x51\x53\x6f\x69\x41\x76\x58\x49\x57\x37\x52\x64\x48\x71\x70\x63\x54\x77\x30','\x66\x43\x6f\x30\x57\x35\x53\x33\x57\x34\x65','\x57\x34\x38\x55\x57\x36\x43\x6d\x57\x36\x6d\x78\x46\x43\x6f\x57','\x63\x4a\x39\x73\x77\x76\x44\x32\x6d\x6d\x6b\x55','\x75\x75\x68\x64\x47\x43\x6f\x56\x7a\x57','\x57\x36\x33\x64\x4a\x62\x70\x63\x48\x67\x38\x48\x76\x6d\x6b\x43','\x57\x51\x6d\x54\x57\x36\x76\x4c\x76\x57','\x68\x43\x6b\x41\x57\x52\x46\x64\x4c\x43\x6b\x68','\x6f\x43\x6f\x56\x75\x4b\x33\x63\x50\x71','\x57\x34\x68\x63\x4f\x38\x6f\x35\x57\x4f\x43','\x57\x35\x54\x67\x6a\x43\x6f\x42','\x57\x4f\x6e\x54\x76\x4c\x4c\x7a','\x6f\x57\x75\x36\x57\x51\x57','\x6d\x67\x6e\x37\x69\x43\x6f\x32','\x78\x6d\x6b\x4a\x61\x4d\x46\x63\x48\x61','\x57\x36\x35\x64\x45\x38\x6b\x76\x57\x51\x4c\x59\x6d\x58\x30','\x57\x34\x74\x64\x4f\x66\x2f\x64\x48\x38\x6b\x30','\x57\x52\x74\x63\x55\x61\x4b\x6e\x6b\x71\x68\x63\x4a\x53\x6b\x68'];_0x3c1f=function(){return _0x23ef59;};return _0x3c1f();}function _0x34cc50(_0x30700e){const _0x1ee3e5=_0x58eb33,_0x80ce55={'\x6c\x73\x54\x54\x42':function(_0x1f48f5,_0x458e6a){return _0x1f48f5*_0x458e6a;},'\x48\x6b\x71\x51\x4c':function(_0x20f109,_0x4d4c24){return _0x20f109(_0x4d4c24);}},_0x19c36a=_0x30700e&&(_0x30700e['\x74\x69\x6d\x65\x73\x74\x61\x6d'+'\x70']||_0x30700e[_0x1ee3e5(0xb2,'\x73\x62\x68\x5d')+_0x1ee3e5(0x124,'\x53\x75\x26\x70')]);if(_0x19c36a){const _0x3b3e67=Date[_0x1ee3e5(0xd2,'\x52\x26\x4e\x5d')](_0x19c36a);if(Number[_0x1ee3e5(0x116,'\x4d\x71\x40\x7a')](_0x3b3e67))return _0x3b3e67;}if(_0x30700e&&Number[_0x1ee3e5(0x107,'\x5a\x62\x71\x49')](Number(_0x30700e[_0x1ee3e5(0xcd,'\x34\x52\x66\x4f')+'\x74'])))return _0x80ce55[_0x1ee3e5(0xc4,'\x78\x71\x29\x35')](_0x80ce55[_0x1ee3e5(0x112,'\x28\x50\x74\x70')](Number,_0x30700e[_0x1ee3e5(0x106,'\x47\x6b\x52\x24')+'\x74']),0x7*-0x17b+0x3*0x201+-0x421*-0x2);return null;}function _0x14eb(_0x4a73b1,_0x1e6687){_0x4a73b1=_0x4a73b1-(0x7cb+-0x6b*-0x47+-0x935*0x4);const _0x420ca3=_0x3c1f();let _0x233a7b=_0x420ca3[_0x4a73b1];if(_0x14eb['\x65\x79\x6e\x63\x73\x59']===undefined){var _0xda8f49=function(_0x4edc0a){const _0x59ee8e='\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 _0x171e3f='',_0x54c6bf='',_0x3d7094=_0x171e3f+_0xda8f49,_0x562738=(''+function(){return 0x1ed5+-0x26ed+-0x4*-0x206;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0xdb*0x11+-0xbfe+0x1a8a);for(let _0x277cb0=0xa5f+0x765+-0x6*0x2f6,_0x3b5d26,_0x39fb6f,_0x396da8=-0xb04+-0x2005*-0x1+-0x1501;_0x39fb6f=_0x4edc0a['\x63\x68\x61\x72\x41\x74'](_0x396da8++);~_0x39fb6f&&(_0x3b5d26=_0x277cb0%(0x1b01+-0x1789*-0x1+0x1*-0x3286)?_0x3b5d26*(-0x8bb*0x3+-0x14f0+0x2f61)+_0x39fb6f:_0x39fb6f,_0x277cb0++%(-0x1b0f*0x1+-0x8*-0x125+-0x1*-0x11eb))?_0x171e3f+=_0x562738||_0x3d7094['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x396da8+(-0x1*0x1da7+0x2*0x2d7+0x1803))-(-0x1269*-0x1+-0xed7+0x8*-0x71)!==-0x2203+-0x7a*-0x5+0x1fa1?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x1af7+0x1*-0xfd2+-0x362*0x3&_0x3b5d26>>(-(0xe60+0x1d25+-0x2b83)*_0x277cb0&-0x5*0x4eb+0x8a9+0x7fa*0x2)):_0x277cb0:-0x1*-0x2117+0x24a7+0x9e*-0x71){_0x39fb6f=_0x59ee8e['\x69\x6e\x64\x65\x78\x4f\x66'](_0x39fb6f);}for(let _0x27e626=-0x2*-0x12df+-0x153f+0x29*-0x67,_0x594b9a=_0x171e3f['\x6c\x65\x6e\x67\x74\x68'];_0x27e626<_0x594b9a;_0x27e626++){_0x54c6bf+='\x25'+('\x30\x30'+_0x171e3f['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x27e626)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x3*-0xc64+-0x16df+0x3c1b))['\x73\x6c\x69\x63\x65'](-(-0x1*-0x445+0x2148+0x1*-0x258b));}return decodeURIComponent(_0x54c6bf);};const _0x283441=function(_0x2b706e,_0x2110dd){let _0xef6179=[],_0x3db645=0x2340+0x1845+-0x3b85,_0x58d708,_0x450838='';_0x2b706e=_0xda8f49(_0x2b706e);let _0x14daac;for(_0x14daac=-0xc1f+0x5ab*0x5+-0x1038;_0x14daac<-0x73a*-0x5+-0x3*-0x121+-0x2685;_0x14daac++){_0xef6179[_0x14daac]=_0x14daac;}for(_0x14daac=-0x1f48+-0x1ac+0x20f4;_0x14daac<0x9a2+0xb2d*-0x2+0xdb8;_0x14daac++){_0x3db645=(_0x3db645+_0xef6179[_0x14daac]+_0x2110dd['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x14daac%_0x2110dd['\x6c\x65\x6e\x67\x74\x68']))%(-0xe7*0x17+-0x113c+0x26fd),_0x58d708=_0xef6179[_0x14daac],_0xef6179[_0x14daac]=_0xef6179[_0x3db645],_0xef6179[_0x3db645]=_0x58d708;}_0x14daac=0x591+0x158d+-0x216*0xd,_0x3db645=0x99a*0x2+-0x822+-0xd*0xda;for(let _0xc7526a=-0xad5+0x1e7*-0xb+0x1e*0x10f;_0xc7526a<_0x2b706e['\x6c\x65\x6e\x67\x74\x68'];_0xc7526a++){_0x14daac=(_0x14daac+(0xab2+-0x1*0xf27+-0x1*-0x476))%(-0x13*-0x10d+0x1af*-0x7+-0x72e),_0x3db645=(_0x3db645+_0xef6179[_0x14daac])%(-0x279+0x1bc4+-0x9*0x2b3),_0x58d708=_0xef6179[_0x14daac],_0xef6179[_0x14daac]=_0xef6179[_0x3db645],_0xef6179[_0x3db645]=_0x58d708,_0x450838+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x2b706e['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0xc7526a)^_0xef6179[(_0xef6179[_0x14daac]+_0xef6179[_0x3db645])%(-0x1a*-0x1b+0xbd*0x29+-0x2003)]);}return _0x450838;};_0x14eb['\x6f\x75\x4b\x7a\x6d\x61']=_0x283441,_0x14eb['\x59\x4f\x72\x47\x76\x6e']={},_0x14eb['\x65\x79\x6e\x63\x73\x59']=!![];}const _0x4152ed=_0x420ca3[0x7f9+0x38*-0x28+-0xc7*-0x1],_0x30922e=_0x4a73b1+_0x4152ed,_0x5bfd89=_0x14eb['\x59\x4f\x72\x47\x76\x6e'][_0x30922e];if(!_0x5bfd89){if(_0x14eb['\x70\x42\x50\x69\x59\x49']===undefined){const _0x2243c6=function(_0x4e068f){this['\x71\x6f\x73\x64\x7a\x6e']=_0x4e068f,this['\x6e\x55\x4e\x70\x4c\x74']=[0x4a1+-0x1d39+-0x1899*-0x1,-0x412+0x2*-0xfef+0x23f0,0x76*-0x26+0xb40*0x2+-0x1d*0x2c],this['\x50\x7a\x62\x46\x45\x41']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x4a\x57\x7a\x42\x43\x43']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x67\x4a\x4b\x78\x52\x52']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x2243c6['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x51\x7a\x66\x6b\x73\x41']=function(){const _0x1b4da3=new RegExp(this['\x4a\x57\x7a\x42\x43\x43']+this['\x67\x4a\x4b\x78\x52\x52']),_0x5d12c0=_0x1b4da3['\x74\x65\x73\x74'](this['\x50\x7a\x62\x46\x45\x41']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x6e\x55\x4e\x70\x4c\x74'][0x7*-0x142+-0x1b9b+-0x246a*-0x1]:--this['\x6e\x55\x4e\x70\x4c\x74'][0x36*-0x3a+-0x5f5+0x1231];return this['\x53\x66\x52\x49\x61\x70'](_0x5d12c0);},_0x2243c6['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x53\x66\x52\x49\x61\x70']=function(_0x132015){if(!Boolean(~_0x132015))return _0x132015;return this['\x48\x77\x4d\x77\x41\x4d'](this['\x71\x6f\x73\x64\x7a\x6e']);},_0x2243c6['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x48\x77\x4d\x77\x41\x4d']=function(_0x112408){for(let _0x28f84a=0x35*-0x59+-0x7c6+0x1a33,_0x43d217=this['\x6e\x55\x4e\x70\x4c\x74']['\x6c\x65\x6e\x67\x74\x68'];_0x28f84a<_0x43d217;_0x28f84a++){this['\x6e\x55\x4e\x70\x4c\x74']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x43d217=this['\x6e\x55\x4e\x70\x4c\x74']['\x6c\x65\x6e\x67\x74\x68'];}return _0x112408(this['\x6e\x55\x4e\x70\x4c\x74'][-0x7*0x592+0x1053+0x16ab]);},(''+function(){return 0x247a+0x20e8+-0x4562;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(-0x191+0x1*-0x2613+0x27a5)&&new _0x2243c6(_0x14eb)['\x51\x7a\x66\x6b\x73\x41'](),_0x14eb['\x70\x42\x50\x69\x59\x49']=!![];}_0x233a7b=_0x14eb['\x6f\x75\x4b\x7a\x6d\x61'](_0x233a7b,_0x1e6687),_0x14eb['\x59\x4f\x72\x47\x76\x6e'][_0x30922e]=_0x233a7b;}else _0x233a7b=_0x5bfd89;return _0x233a7b;}function _0x361f49(_0xad2094={}){const _0x382b3d=_0x58eb33,_0xaa9edd={'\x70\x4d\x72\x46\x72':function(_0x268474,_0x477573,_0x5760a4){return _0x268474(_0x477573,_0x5760a4);},'\x42\x64\x43\x64\x43':function(_0x5f422e){return _0x5f422e();},'\x42\x57\x70\x71\x70':_0x382b3d(0xa5,'\x28\x50\x74\x70')+_0x382b3d(0x129,'\x48\x35\x57\x28'),'\x45\x75\x58\x45\x47':function(_0x523b13){return _0x523b13();},'\x76\x43\x76\x4f\x41':_0x382b3d(0xe5,'\x5d\x5d\x28\x39'),'\x70\x52\x53\x63\x65':function(_0x370642,_0x36e85a){return _0x370642===_0x36e85a;},'\x4d\x45\x56\x79\x51':_0x382b3d(0x115,'\x6c\x52\x71\x34'),'\x6d\x4b\x65\x41\x55':_0x382b3d(0xcb,'\x48\x35\x57\x28'),'\x6a\x4b\x67\x50\x45':function(_0x9a1be,_0x6270a2){return _0x9a1be!==_0x6270a2;},'\x53\x6b\x4b\x6c\x6c':function(_0x277a74,_0x4744c7){return _0x277a74!==_0x4744c7;},'\x69\x73\x56\x6f\x52':_0x382b3d(0xf2,'\x46\x35\x36\x7a'),'\x75\x4f\x6a\x6d\x68':_0x382b3d(0x11f,'\x41\x32\x30\x59'),'\x79\x57\x4a\x63\x62':_0x382b3d(0xda,'\x61\x65\x5b\x4e'),'\x55\x4a\x48\x68\x71':_0x382b3d(0xdf,'\x6c\x52\x71\x34'),'\x67\x4e\x6c\x68\x70':function(_0x643c7b,_0x3129e4,_0xdc875d){return _0x643c7b(_0x3129e4,_0xdc875d);},'\x71\x63\x77\x6e\x51':'\x75\x43\x55\x6d\x55','\x51\x4a\x6e\x46\x49':_0x382b3d(0xb8,'\x34\x52\x66\x4f'),'\x50\x57\x56\x52\x53':function(_0x189c5c,_0x1fe3b5){return _0x189c5c(_0x1fe3b5);},'\x6a\x43\x4c\x69\x55':function(_0x534996,_0x320f2c){return _0x534996==_0x320f2c;},'\x75\x4b\x69\x73\x47':function(_0x12821e,_0x90e4f){return _0x12821e<_0x90e4f;},'\x79\x58\x4c\x4f\x53':function(_0x40fecc,_0x2b1fda){return _0x40fecc>_0x2b1fda;},'\x73\x59\x45\x43\x68':function(_0x1c3d09,_0x101278){return _0x1c3d09||_0x101278;},'\x48\x50\x6e\x73\x52':function(_0xaaebb9,_0x27b9bc){return _0xaaebb9+_0x27b9bc;}},_0x31a1dc=_0xad2094&&_0xad2094[_0x382b3d(0xc3,'\x34\x6c\x64\x50')]!=null?Date[_0x382b3d(0xcc,'\x67\x24\x7a\x68')](_0xad2094[_0x382b3d(0xa9,'\x71\x38\x74\x4b')]):NaN,_0x2edb95={..._0x3233d4};if(!Number[_0x382b3d(0xaa,'\x34\x52\x66\x4f')](_0x31a1dc))return _0x2edb95;const _0xb3a7bc=_0xad2094&&_0xad2094[_0x382b3d(0xf9,'\x6c\x52\x71\x34')]!=null&&Number[_0x382b3d(0xd1,'\x36\x65\x4e\x75')](Date[_0x382b3d(0xd0,'\x5d\x5d\x28\x39')](_0xad2094[_0x382b3d(0x12b,'\x51\x41\x47\x5d')]))?Date[_0x382b3d(0x109,'\x47\x6b\x52\x24')](_0xad2094[_0x382b3d(0xf8,'\x61\x65\x5b\x4e')]):Date['\x6e\x6f\x77']();let _0x463e5c;try{if(_0x382b3d(0xab,'\x67\x24\x7a\x68')!==_0x382b3d(0xf4,'\x6e\x53\x5d\x53')){const _0x10ea87=_0xaa9edd[_0x382b3d(0xee,'\x48\x35\x57\x28')](_0xce7c3d),_0x47983e={..._0x3233d4};if(!_0x138a5c['\x65\x78\x69\x73\x74\x73\x53\x79'+'\x6e\x63'](_0x10ea87))return _0x47983e;_0x463e5c=_0x138a5c[_0x382b3d(0xbe,'\x67\x42\x68\x75')+_0x382b3d(0xc8,'\x2a\x69\x6b\x42')](_0x10ea87,_0xaa9edd[_0x382b3d(0xdd,'\x47\x6b\x52\x24')]);}else _0x5099cc=_0x1c6190[_0x382b3d(0xd6,'\x26\x64\x69\x37')](_0xd71e2d);}catch(_0x5afabe){const _0x457ed9={..._0x3233d4};return _0x457ed9;}let _0x5375ad=null;try{if(_0xaa9edd[_0x382b3d(0x119,'\x61\x65\x5b\x4e')](_0xaa9edd[_0x382b3d(0x110,'\x34\x52\x66\x4f')],_0xaa9edd[_0x382b3d(0x11c,'\x28\x50\x74\x70')]))_0x5375ad=_0x26c872();else{const _0x389646={..._0x905da5};return _0x389646;}}catch(_0x2bbf3b){_0xaa9edd[_0x382b3d(0x118,'\x36\x65\x4e\x75')]!==_0xaa9edd[_0x382b3d(0xec,'\x74\x32\x54\x34')]?_0x413bc6=_0xaa9edd[_0x382b3d(0x127,'\x78\x71\x29\x35')](_0x534302,_0x1bc8fd,_0x690f8):_0x5375ad=null;}let _0x5c638d=0x19bf+-0x4a0+-0x151f,_0x392298=0x218d+-0xb62+-0xe3*0x19,_0x1fc063=0x1f06+-0xb*0x386+0x7bc;for(const _0x2b2d3e of _0x463e5c[_0x382b3d(0x125,'\x34\x6c\x64\x50')]('\x0a')){if(_0xaa9edd[_0x382b3d(0xd7,'\x78\x31\x4e\x2a')](_0x382b3d(0xed,'\x47\x6b\x52\x24'),_0x382b3d(0xf7,'\x61\x65\x5b\x4e'))){const _0x37722f=_0xaa9edd['\x42\x64\x43\x64\x43'](_0x2288dc),_0xf3e20={..._0x403c5d};if(!_0x45b42b[_0x382b3d(0x10b,'\x67\x42\x68\x75')+'\x6e\x63'](_0x37722f))return _0xf3e20;_0x14022f=_0x4628c7[_0x382b3d(0x108,'\x65\x35\x4a\x48')+_0x382b3d(0xf6,'\x23\x44\x2a\x31')](_0x37722f,_0x382b3d(0xa8,'\x61\x6b\x33\x25'));}else{const _0x550d5b=_0x2b2d3e[_0x382b3d(0xe2,'\x72\x7a\x78\x6e')]();if(!_0x550d5b)continue;let _0x51e72d;try{_0xaa9edd[_0x382b3d(0xfc,'\x6e\x36\x56\x32')](_0x382b3d(0xf1,'\x4e\x26\x45\x56'),_0xaa9edd['\x69\x73\x56\x6f\x52'])?_0x51e72d=JSON[_0x382b3d(0x120,'\x4e\x34\x64\x56')](_0x550d5b):_0x4485ee=null;}catch(_0x822475){if(_0xaa9edd[_0x382b3d(0x12f,'\x2a\x69\x6b\x42')](_0xaa9edd[_0x382b3d(0xf3,'\x58\x5e\x41\x26')],_0x382b3d(0x12a,'\x23\x44\x2a\x31')))return _0x39649d[_0x382b3d(0xc6,'\x65\x35\x4a\x48')]()[_0x382b3d(0x131,'\x23\x44\x2a\x31')]('\x28\x28\x28\x2e\x2b\x29\x2b\x29'+'\x2b\x29\x2b\x24')['\x74\x6f\x53\x74\x72\x69\x6e\x67']()[_0x382b3d(0xdb,'\x24\x68\x64\x6f')+_0x382b3d(0xb3,'\x53\x75\x26\x70')](_0xf38103)[_0x382b3d(0x128,'\x73\x62\x68\x5d')](vxyeWo[_0x382b3d(0xb6,'\x52\x26\x4e\x5d')]);else continue;}if(_0x51e72d&&_0x51e72d[_0x382b3d(0xb9,'\x2a\x69\x6b\x42')+'\x64']){if(_0xaa9edd[_0x382b3d(0x122,'\x5d\x5d\x28\x39')]!==_0xaa9edd['\x55\x4a\x48\x68\x71']){if(!_0x5375ad)continue;try{_0x51e72d=_0xaa9edd[_0x382b3d(0x104,'\x52\x26\x4e\x5d')](_0x2b9c97,_0x51e72d,_0x5375ad);}catch(_0x4b879f){if(_0xaa9edd[_0x382b3d(0x10d,'\x23\x44\x2a\x31')](_0xaa9edd[_0x382b3d(0x11b,'\x48\x35\x57\x28')],_0xaa9edd[_0x382b3d(0xeb,'\x4d\x71\x40\x7a')]))_0x42aafa=_0xaa9edd[_0x382b3d(0xee,'\x48\x35\x57\x28')](_0x62d440);else continue;}}else{const _0x36b5a4=_0x4044b2['\x70\x61\x72\x73\x65'](_0x502077);if(_0x377551[_0x382b3d(0xb1,'\x45\x45\x51\x30')](_0x36b5a4))return _0x36b5a4;}}if(!_0x51e72d||_0xaa9edd['\x6a\x4b\x67\x50\x45'](typeof _0x51e72d,_0xaa9edd[_0x382b3d(0x11a,'\x68\x56\x46\x61')]))continue;const _0x1b4523=_0xaa9edd[_0x382b3d(0xe6,'\x34\x52\x66\x4f')](_0x34cc50,_0x51e72d);if(_0xaa9edd[_0x382b3d(0xe7,'\x55\x38\x24\x51')](_0x1b4523,null)||_0xaa9edd[_0x382b3d(0xd5,'\x6e\x53\x5d\x53')](_0x1b4523,_0x31a1dc)||_0xaa9edd[_0x382b3d(0x121,'\x2a\x69\x6b\x42')](_0x1b4523,_0xb3a7bc))continue;const _0x860a8f=_0xaa9edd[_0x382b3d(0xfd,'\x48\x35\x57\x28')](Number,_0x51e72d[_0x382b3d(0x100,'\x41\x59\x6a\x5a')+_0x382b3d(0x11e,'\x4e\x34\x64\x56')]),_0x3ff309=_0xaa9edd[_0x382b3d(0xe0,'\x61\x6b\x33\x25')](Number,_0x51e72d[_0x382b3d(0xea,'\x4d\x71\x40\x7a')+_0x382b3d(0xe4,'\x4e\x34\x64\x56')]),_0x108a5b=Number[_0x382b3d(0xad,'\x41\x32\x30\x59')](_0x860a8f)&&_0xaa9edd[_0x382b3d(0xb0,'\x34\x6c\x64\x50')](_0x860a8f,0x1da8+-0x7c+-0xe96*0x2),_0x5ea4f2=Number[_0x382b3d(0x12e,'\x34\x6c\x64\x50')](_0x3ff309)&&_0x3ff309>0x1*0x3e6+-0xf3+-0x2f3;if(_0x108a5b)_0x5c638d+=_0x860a8f;if(_0x5ea4f2)_0x392298+=_0x3ff309;if(_0xaa9edd['\x73\x59\x45\x43\x68'](_0x108a5b,_0x5ea4f2))_0x1fc063+=0x1*0x29e+0x456+-0x6f3;}}const _0x410813={..._0x3233d4};if(_0x1fc063===-0x1*0x14e5+-0x20fc*-0x1+0x26b*-0x5)return _0x410813;return{'\x69\x6e\x70\x75\x74\x5f\x74\x6f\x6b\x65\x6e\x73':_0x5c638d,'\x6f\x75\x74\x70\x75\x74\x5f\x74\x6f\x6b\x65\x6e\x73':_0x392298,'\x74\x6f\x74\x61\x6c\x5f\x74\x6f\x6b\x65\x6e\x73':_0xaa9edd[_0x382b3d(0xe1,'\x78\x71\x29\x35')](_0x5c638d,_0x392298),'\x63\x61\x6c\x6c\x73':_0x1fc063,'\x6d\x65\x61\x73\x75\x72\x65\x64':!![]};}const _0x169c35={};_0x169c35[_0x58eb33(0x126,'\x73\x62\x68\x5d')+_0x58eb33(0xcf,'\x72\x7a\x78\x6e')]=_0x361f49,module['\x65\x78\x70\x6f\x72\x74\x73']=_0x169c35;
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
exports.assetsJs = `
|
|
4
|
-
function renderGenesTable(data) {
|
|
5
|
-
return '<table class="data-table"><thead><tr>' +
|
|
6
|
-
'<th>' + esc(t('assets.col.id')) + '</th>' +
|
|
7
|
-
'<th>' + esc(t('assets.col.category')) + '</th>' +
|
|
8
|
-
'<th>' + esc(t('assets.col.signals')) + '</th>' +
|
|
9
|
-
'<th>' + esc(t('assets.col.strategy')) + '</th>' +
|
|
10
|
-
'<th>' + esc(t('assets.col.validation')) + '</th>' +
|
|
11
|
-
'</tr></thead><tbody>' +
|
|
12
|
-
data.map((g) => '<tr><td><strong>' + esc(g.id) + '</strong></td>' +
|
|
13
|
-
'<td><span class="pill ' + esc(g.category) + '">' + esc(g.category) + '</span></td>' +
|
|
14
|
-
'<td>' + pillList(g.signals_match || [], 'signal') + '</td>' +
|
|
15
|
-
'<td><details><summary>' + (g.strategy?.length || 0) + ' ' + esc(t('assets.steps')) + '</summary><ol class="reason-list">' + (g.strategy || []).map(s => '<li>' + esc(s) + '</li>').join('') + '</ol></details></td>' +
|
|
16
|
-
'<td><details><summary>' + (g.validation?.length || 0) + ' ' + esc(t('assets.cmds')) + '</summary><ul class="reason-list">' + (g.validation || []).map(s => '<li><code>' + esc(s) + '</code></li>').join('') + '</ul></details></td>' +
|
|
17
|
-
'</tr>').join('') +
|
|
18
|
-
'</tbody></table>';
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function renderCapsulesTable(data) {
|
|
22
|
-
if (!data.length) return '<p class="muted">' + esc(t('assets.empty.capsules')) + '</p>';
|
|
23
|
-
return '<table class="data-table"><thead><tr>' +
|
|
24
|
-
'<th>' + esc(t('assets.col.id')) + '</th>' +
|
|
25
|
-
'<th>' + esc(t('assets.col.gene')) + '</th>' +
|
|
26
|
-
'<th>' + esc(t('assets.col.outcome')) + '</th>' +
|
|
27
|
-
'<th>' + esc(t('assets.col.confidence')) + '</th>' +
|
|
28
|
-
'<th>' + esc(t('assets.col.blast')) + '</th>' +
|
|
29
|
-
'</tr></thead><tbody>' +
|
|
30
|
-
data.map((c) => '<tr><td><strong>' + esc(c.id) + '</strong></td><td>' + esc(c.gene || '-') + '</td>' +
|
|
31
|
-
'<td><span class="status-indicator ' + getStatusClass(c.outcome?.status) + '"></span>' + esc(tStatus(c.outcome?.status) || '-') + '</td>' +
|
|
32
|
-
'<td>' + esc(c.confidence ?? '-') + '</td>' +
|
|
33
|
-
'<td>' + esc((c.blast_radius?.files ?? '-') + '/' + (c.blast_radius?.lines ?? '-')) + '</td>' +
|
|
34
|
-
'</tr>').join('') +
|
|
35
|
-
'</tbody></table>';
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function renderEventsList(data) {
|
|
39
|
-
if (!data.length) return '<p class="muted">' + t('assets.empty.events') + '</p>';
|
|
40
|
-
return '<ul class="event-list">' + data.map((e) => '<li>' +
|
|
41
|
-
'<div><strong>' + esc(e.id || '-') + '</strong> <span class="muted small">' + esc(formatTime(e.timestamp || e.created_at)) + '</span></div>' +
|
|
42
|
-
'<div>' + esc(t('assets.events.signals')) + pillList(e.signals || e.signals_matched || [], 'signal') + '</div>' +
|
|
43
|
-
'<div>' + esc(t('assets.events.genes')) + pillList(e.genes_used || [], '') + '</div>' +
|
|
44
|
-
'<div>' + esc(t('assets.events.outcome')) + '<span class="status-indicator ' + getStatusClass(e.outcome?.status) + '"></span>' + esc(tStatus(e.outcome?.status) || '-') + '</div>' +
|
|
45
|
-
'</li>').join('') + '</ul>';
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function renderCandidatesTable(data) {
|
|
49
|
-
if (!data.length) return '<p class="muted">' + esc(t('assets.empty.candidates')) + '</p>';
|
|
50
|
-
return '<table class="data-table"><thead><tr>' +
|
|
51
|
-
'<th>' + esc(t('assets.col.source')) + '</th>' +
|
|
52
|
-
'<th>' + esc(t('assets.col.assetId')) + '</th>' +
|
|
53
|
-
'<th>' + esc(t('assets.col.score')) + '</th>' +
|
|
54
|
-
'<th>' + esc(t('assets.col.time')) + '</th>' +
|
|
55
|
-
'</tr></thead><tbody>' +
|
|
56
|
-
data.map((c) => '<tr><td>' + esc(c.source || c.source_node_id || '-') + '</td>' +
|
|
57
|
-
'<td><code>' + esc(c.asset_id || c.id || '-') + '</code></td>' +
|
|
58
|
-
'<td>' + esc(c.score ?? '-') + '</td>' +
|
|
59
|
-
'<td>' + esc(formatTime(c.timestamp)) + '</td></tr>').join('') +
|
|
60
|
-
'</tbody></table>';
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function renderCallsTable(data) {
|
|
64
|
-
if (!data.length) return '<p class="muted">' + esc(t('assets.empty.calls')) + '</p>';
|
|
65
|
-
return '<table class="data-table"><thead><tr>' +
|
|
66
|
-
'<th>' + esc(t('assets.col.time')) + '</th>' +
|
|
67
|
-
'<th>' + esc(t('assets.col.action')) + '</th>' +
|
|
68
|
-
'<th>' + esc(t('assets.col.asset')) + '</th>' +
|
|
69
|
-
'<th>' + esc(t('assets.col.run')) + '</th>' +
|
|
70
|
-
'<th>' + esc(t('assets.col.score')) + '</th>' +
|
|
71
|
-
'</tr></thead><tbody>' +
|
|
72
|
-
data.map((c) => '<tr><td>' + esc(formatTime(c.timestamp)) + '</td>' +
|
|
73
|
-
'<td><span class="pill ' + esc(c.action) + '">' + esc(tAction(c.action)) + '</span></td>' +
|
|
74
|
-
'<td><code>' + esc(c.asset_id || '-') + '</code></td>' +
|
|
75
|
-
'<td>' + esc(c.run_id || '-') + '</td>' +
|
|
76
|
-
'<td>' + esc(c.score ?? '-') + '</td></tr>').join('') +
|
|
77
|
-
'</tbody></table>';
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const ASSET_RENDERERS = {
|
|
81
|
-
genes: renderGenesTable,
|
|
82
|
-
capsules: renderCapsulesTable,
|
|
83
|
-
events: renderEventsList,
|
|
84
|
-
candidates: renderCandidatesTable,
|
|
85
|
-
calls: renderCallsTable,
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const ASSET_ENDPOINTS = {
|
|
89
|
-
genes: '/webui/assets/genes',
|
|
90
|
-
capsules: '/webui/assets/capsules',
|
|
91
|
-
events: '/webui/assets/events',
|
|
92
|
-
candidates: '/webui/assets/candidates',
|
|
93
|
-
calls: '/webui/assets/calls',
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
async function loadAsset(kind) {
|
|
97
|
-
state.currentAsset = kind;
|
|
98
|
-
$('asset-list').innerHTML = '<p class="muted">' + esc(t('common.loading')) + '</p>';
|
|
99
|
-
document.querySelectorAll('.asset-tab').forEach((b) => b.classList.toggle('active', b.getAttribute('data-asset') === kind));
|
|
100
|
-
try {
|
|
101
|
-
const result = await api(ASSET_ENDPOINTS[kind] + '?limit=200');
|
|
102
|
-
const renderer = ASSET_RENDERERS[kind];
|
|
103
|
-
const total = result.pagination?.totalItems ?? (result.data || []).length;
|
|
104
|
-
$('asset-list').innerHTML =
|
|
105
|
-
'<div class="muted small" style="margin-bottom:12px">' + total + ' ' + esc(t('assets.records')) + '</div>' +
|
|
106
|
-
renderer(result.data || []);
|
|
107
|
-
} catch (err) {
|
|
108
|
-
$('asset-list').innerHTML = '<p class="status-failed">' + esc(t('common.failedPrefix')) + esc(err.message) + '</p>';
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
`;
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
exports.bootstrapJs = `
|
|
4
|
-
const TAB_TITLE_KEYS = {
|
|
5
|
-
overview: 'nav.overview',
|
|
6
|
-
pipelines: 'nav.pipelines',
|
|
7
|
-
assets: 'nav.assets',
|
|
8
|
-
interactions: 'nav.interactions',
|
|
9
|
-
personality: 'nav.personality',
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
function activateTab(tab) {
|
|
13
|
-
state.currentTab = tab;
|
|
14
|
-
document.querySelectorAll('.tab').forEach((b) => b.classList.toggle('active', b.getAttribute('data-tab') === tab));
|
|
15
|
-
document.querySelectorAll('.view').forEach((v) => v.classList.toggle('active', v.getAttribute('data-view') === tab));
|
|
16
|
-
const title = document.getElementById('topbar-title');
|
|
17
|
-
if (title && TAB_TITLE_KEYS[tab]) {
|
|
18
|
-
title.setAttribute('data-i18n', TAB_TITLE_KEYS[tab]);
|
|
19
|
-
title.textContent = t(TAB_TITLE_KEYS[tab]);
|
|
20
|
-
}
|
|
21
|
-
setTimeout(() => Object.values(state.charts).forEach((c) => c.resize && c.resize()), 50);
|
|
22
|
-
// Reload current tab so it works after toggleTheme/toggleLocale has
|
|
23
|
-
// disposed all chart instances (otherwise switching back to Overview
|
|
24
|
-
// would show empty chart slots).
|
|
25
|
-
if (tab === 'overview') loadOverview();
|
|
26
|
-
if (tab === 'pipelines') loadPipelines();
|
|
27
|
-
if (tab === 'assets') loadAsset(state.currentAsset);
|
|
28
|
-
if (tab === 'interactions') loadInteractions();
|
|
29
|
-
if (tab === 'personality') loadPersonality();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async function refresh() {
|
|
33
|
-
if (state.currentTab === 'overview') return loadOverview();
|
|
34
|
-
if (state.currentTab === 'pipelines') return loadPipelines();
|
|
35
|
-
if (state.currentTab === 'assets') return loadAsset(state.currentAsset);
|
|
36
|
-
if (state.currentTab === 'interactions') return loadInteractions();
|
|
37
|
-
if (state.currentTab === 'personality') return loadPersonality();
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function disposeAllCharts() {
|
|
41
|
-
for (const id of Object.keys(state.charts)) {
|
|
42
|
-
state.charts[id].dispose && state.charts[id].dispose();
|
|
43
|
-
delete state.charts[id];
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function toggleTheme() {
|
|
48
|
-
const root = document.documentElement;
|
|
49
|
-
const next = root.classList.contains('dark') ? 'light' : 'dark';
|
|
50
|
-
root.classList.toggle('dark', next === 'dark');
|
|
51
|
-
try { localStorage.setItem('evolver-theme', next); } catch (_) {}
|
|
52
|
-
// ECharts colors are baked at init time, so dispose + re-render the
|
|
53
|
-
// active tab so chart text/axes pick up the new palette.
|
|
54
|
-
disposeAllCharts();
|
|
55
|
-
refresh();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function syncLocaleGlyph() {
|
|
59
|
-
const glyph = document.querySelector('#locale-toggle .locale-glyph');
|
|
60
|
-
if (!glyph) return;
|
|
61
|
-
// Glyph shows the *target* locale (what you'll switch to), matching
|
|
62
|
-
// common bilingual UI conventions (e.g. evox-desktop).
|
|
63
|
-
glyph.textContent = getLocale() === 'zh' ? 'EN' : '中';
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function toggleLocale() {
|
|
67
|
-
const next = getLocale() === 'zh' ? 'en' : 'zh';
|
|
68
|
-
setLocale(next);
|
|
69
|
-
applyI18nDom();
|
|
70
|
-
syncLocaleGlyph();
|
|
71
|
-
// Charts contain locale-baked labels (axis names, legends, tooltips
|
|
72
|
-
// built from t() calls), so dispose + re-render to pick up the new
|
|
73
|
-
// strings. Same pattern as toggleTheme.
|
|
74
|
-
disposeAllCharts();
|
|
75
|
-
refresh();
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Initial paint — set glyph + apply translations to the static markup.
|
|
79
|
-
syncLocaleGlyph();
|
|
80
|
-
applyI18nDom();
|
|
81
|
-
|
|
82
|
-
document.querySelectorAll('.tab').forEach((b) => b.addEventListener('click', () => activateTab(b.getAttribute('data-tab'))));
|
|
83
|
-
document.querySelectorAll('.asset-tab').forEach((b) => b.addEventListener('click', () => loadAsset(b.getAttribute('data-asset'))));
|
|
84
|
-
$('refresh').addEventListener('click', refresh);
|
|
85
|
-
const themeBtn = $('theme-toggle');
|
|
86
|
-
if (themeBtn) themeBtn.addEventListener('click', toggleTheme);
|
|
87
|
-
const localeBtn = $('locale-toggle');
|
|
88
|
-
if (localeBtn) localeBtn.addEventListener('click', toggleLocale);
|
|
89
|
-
window.addEventListener('resize', () => Object.values(state.charts).forEach((c) => c.resize && c.resize()));
|
|
90
|
-
window.loadRun = loadRun;
|
|
91
|
-
loadOverview();
|
|
92
|
-
`;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
exports.commonJs = `
|
|
4
|
-
const state = { selectedRunId: null, charts: {}, currentTab: 'overview', currentAsset: 'genes' };
|
|
5
|
-
const $ = (id) => document.getElementById(id);
|
|
6
|
-
|
|
7
|
-
async function api(path) {
|
|
8
|
-
const res = await fetch(path);
|
|
9
|
-
const body = await res.json();
|
|
10
|
-
if (!res.ok) throw new Error(body.error?.message || 'Request failed');
|
|
11
|
-
return body;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function isDarkMode() {
|
|
15
|
-
// .dark on <html> is the single source of truth. THEME_INIT_SCRIPT
|
|
16
|
-
// runs synchronously in <head> before any client JS executes and
|
|
17
|
-
// already resolves the explicit (localStorage 'evolver-theme'
|
|
18
|
-
// light/dark) vs implicit (system: matchMedia) cases into the class.
|
|
19
|
-
// Falling back to matchMedia here would re-introduce the OS
|
|
20
|
-
// preference *after* the user explicitly toggled to light on a
|
|
21
|
-
// dark-OS system, so chartTextColor() would return light text on a
|
|
22
|
-
// light background and ECharts axis labels would be near-invisible.
|
|
23
|
-
return document.documentElement.classList.contains('dark');
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function chartTextColor() {
|
|
27
|
-
return isDarkMode() ? '#c7d0d9' : '#5c6975';
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function ensureChart(id) {
|
|
31
|
-
const el = document.getElementById(id);
|
|
32
|
-
if (!el) return null;
|
|
33
|
-
if (!state.charts[id]) state.charts[id] = echarts.init(el);
|
|
34
|
-
return state.charts[id];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function getStatusClass(status) {
|
|
38
|
-
if (status === 'success' || status === 'completed') return 'status-success';
|
|
39
|
-
if (status === 'running' || status === 'pending') return 'status-running';
|
|
40
|
-
if (status === 'failed') return 'status-failed';
|
|
41
|
-
if (status === 'blocked' || status === 'review_pending') return 'status-blocked';
|
|
42
|
-
if (status === 'abandoned') return 'status-abandoned';
|
|
43
|
-
if (status === 'selected') return 'status-running';
|
|
44
|
-
return 'status-skipped';
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function kv(rows) {
|
|
48
|
-
return '<dl>' + rows.map(([k, v]) => '<dt>' + esc(k) + '</dt><dd>' + esc(format(v)) + '</dd>').join('') + '</dl>';
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function esc(value) {
|
|
52
|
-
return String(value ?? '').replace(/[&<>"']/g, (ch) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[ch]));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function format(value) {
|
|
56
|
-
if (value === null || value === undefined || value === '') return '-';
|
|
57
|
-
if (typeof value === 'object') return JSON.stringify(value);
|
|
58
|
-
// Round non-integer numbers to 4 decimals to drop float noise like
|
|
59
|
-
// 0.7499999999999999 -> 0.75 without losing meaningful precision.
|
|
60
|
-
if (typeof value === 'number' && Number.isFinite(value) && !Number.isInteger(value)) {
|
|
61
|
-
return Number(value.toFixed(4));
|
|
62
|
-
}
|
|
63
|
-
return value;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function formatTime(value) {
|
|
67
|
-
if (!value) return '-';
|
|
68
|
-
const t = new Date(value);
|
|
69
|
-
if (isNaN(t.getTime()) || t.getTime() === 0) return '-';
|
|
70
|
-
return t.toLocaleString();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function pillList(items, kind) {
|
|
74
|
-
if (!items || !items.length) return '<span class="muted">none</span>';
|
|
75
|
-
return items.map((item) => '<span class="pill ' + (kind || '') + '">' + esc(item) + '</span>').join(' ');
|
|
76
|
-
}
|
|
77
|
-
`;
|