@jinn-network/client 0.1.1 → 0.1.2-canary.d6e72dfd
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/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +123 -0
- package/README.md +210 -37
- package/deployments/deployment-claim-registry-baseSepolia.json +13 -0
- package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +15 -0
- package/dist/adapters/claim-registry/abi.d.ts +127 -0
- package/dist/adapters/claim-registry/abi.js +93 -0
- package/dist/adapters/claim-registry/abi.js.map +1 -0
- package/dist/adapters/claim-registry/client.d.ts +89 -0
- package/dist/adapters/claim-registry/client.js +205 -0
- package/dist/adapters/claim-registry/client.js.map +1 -0
- package/dist/adapters/mech/adapter.d.ts +1 -0
- package/dist/adapters/mech/adapter.js +75 -41
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +2 -0
- package/dist/adapters/mech/contracts.js +57 -7
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/ipfs.d.ts +8 -0
- package/dist/adapters/mech/ipfs.js +12 -0
- package/dist/adapters/mech/ipfs.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +20 -46
- package/dist/adapters/mech/types.js +16 -35
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/api/gather-status.d.ts +1 -0
- package/dist/api/gather-status.js +33 -1
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +81 -0
- package/dist/api/portfolio-v0-build.js +141 -0
- package/dist/api/portfolio-v0-build.js.map +1 -0
- package/dist/api/portfolio-v0-doctor.d.ts +37 -0
- package/dist/api/portfolio-v0-doctor.js +123 -0
- package/dist/api/portfolio-v0-doctor.js.map +1 -0
- package/dist/api/rewards-build.js +1 -1
- package/dist/api/rewards-build.js.map +1 -1
- package/dist/api/status-build.d.ts +7 -0
- package/dist/api/status-build.js +1 -0
- package/dist/api/status-build.js.map +1 -1
- package/dist/bin/jinn-mcp.d.ts +0 -12
- package/dist/bin/jinn-mcp.js +5 -14
- package/dist/bin/jinn-mcp.js.map +1 -1
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/auth.js +115 -25
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/bootstrap.js +1 -0
- package/dist/cli/commands/bootstrap.js.map +1 -1
- package/dist/cli/commands/doctor.js +130 -14
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/fleet-scale.js +1 -0
- package/dist/cli/commands/fleet-scale.js.map +1 -1
- package/dist/cli/commands/fund-requirements.js +2 -0
- package/dist/cli/commands/fund-requirements.js.map +1 -1
- package/dist/cli/commands/intents.d.ts +17 -0
- package/dist/cli/commands/intents.js +489 -0
- package/dist/cli/commands/intents.js.map +1 -0
- package/dist/cli/commands/keys-backup.js +13 -11
- package/dist/cli/commands/keys-backup.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.js +19 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/plugin-install.js +8 -4
- package/dist/cli/commands/plugin-install.js.map +1 -1
- package/dist/cli/commands/quickstart.js +60 -4
- package/dist/cli/commands/quickstart.js.map +1 -1
- package/dist/cli/commands/rewards.js +27 -1
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/submit-intent.js +108 -5
- package/dist/cli/commands/submit-intent.js.map +1 -1
- package/dist/cli/commands/version.js +1 -0
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/deployment-digest.js +5 -0
- package/dist/cli/deployment-digest.js.map +1 -1
- package/dist/cli/execution-context.js +1 -0
- package/dist/cli/execution-context.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/intent-registry-access.d.ts +64 -0
- package/dist/cli/intent-registry-access.js +187 -0
- package/dist/cli/intent-registry-access.js.map +1 -0
- package/dist/cli/introspection-context.js +1 -0
- package/dist/cli/introspection-context.js.map +1 -1
- package/dist/cli/password.d.ts +21 -9
- package/dist/cli/password.js +45 -24
- package/dist/cli/password.js.map +1 -1
- package/dist/config.d.ts +110 -8
- package/dist/config.js +41 -12
- package/dist/config.js.map +1 -1
- package/dist/daemon/creator.d.ts +7 -1
- package/dist/daemon/creator.js +38 -3
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +43 -0
- package/dist/daemon/daemon.js +87 -2
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +2 -1
- package/dist/earning/bootstrap.js +72 -4
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +10 -0
- package/dist/earning/contracts.js +24 -0
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/jinn-rewards.d.ts +9 -0
- package/dist/earning/jinn-rewards.js +7 -0
- package/dist/earning/jinn-rewards.js.map +1 -1
- package/dist/intents/prediction-apy-v0-auto.d.ts +11 -0
- package/dist/intents/prediction-apy-v0-auto.js +46 -0
- package/dist/intents/prediction-apy-v0-auto.js.map +1 -0
- package/dist/intents/prediction-apy-v0-template.d.ts +8 -0
- package/dist/intents/prediction-apy-v0-template.js +22 -0
- package/dist/intents/prediction-apy-v0-template.js.map +1 -0
- package/dist/intents/prediction-v0-auto.d.ts +53 -0
- package/dist/intents/prediction-v0-auto.js +84 -0
- package/dist/intents/prediction-v0-auto.js.map +1 -0
- package/dist/intents/prediction-v0-template.d.ts +65 -0
- package/dist/intents/prediction-v0-template.js +125 -0
- package/dist/intents/prediction-v0-template.js.map +1 -0
- package/dist/main.js +149 -1
- package/dist/main.js.map +1 -1
- package/dist/mcp/operator-server.d.ts +1 -1
- package/dist/mcp/operator-server.js +1 -1
- package/dist/preflight/claude-auth.d.ts +12 -1
- package/dist/preflight/claude-auth.js +21 -3
- package/dist/preflight/claude-auth.js.map +1 -1
- package/dist/restorer/engine/canonical-json.d.ts +18 -0
- package/dist/restorer/engine/canonical-json.js +59 -0
- package/dist/restorer/engine/canonical-json.js.map +1 -0
- package/dist/restorer/engine/claim.d.ts +69 -0
- package/dist/restorer/engine/claim.js +104 -0
- package/dist/restorer/engine/claim.js.map +1 -0
- package/dist/restorer/engine/delivery.d.ts +52 -0
- package/dist/restorer/engine/delivery.js +63 -0
- package/dist/restorer/engine/delivery.js.map +1 -0
- package/dist/restorer/engine/engine.d.ts +203 -0
- package/dist/restorer/engine/engine.js +753 -0
- package/dist/restorer/engine/engine.js.map +1 -0
- package/dist/restorer/engine/manifest-assembly.d.ts +67 -0
- package/dist/restorer/engine/manifest-assembly.js +79 -0
- package/dist/restorer/engine/manifest-assembly.js.map +1 -0
- package/dist/restorer/engine/packaging.d.ts +87 -0
- package/dist/restorer/engine/packaging.js +350 -0
- package/dist/restorer/engine/packaging.js.map +1 -0
- package/dist/restorer/engine/persistence.d.ts +170 -0
- package/dist/restorer/engine/persistence.js +381 -0
- package/dist/restorer/engine/persistence.js.map +1 -0
- package/dist/restorer/engine/recovery.d.ts +22 -0
- package/dist/restorer/engine/recovery.js +24 -0
- package/dist/restorer/engine/recovery.js.map +1 -0
- package/dist/restorer/engine/registry.d.ts +62 -0
- package/dist/restorer/engine/registry.js +73 -0
- package/dist/restorer/engine/registry.js.map +1 -0
- package/dist/restorer/engine/signing.d.ts +30 -0
- package/dist/restorer/engine/signing.js +39 -0
- package/dist/restorer/engine/signing.js.map +1 -0
- package/dist/restorer/engine/state.d.ts +42 -0
- package/dist/restorer/engine/state.js +87 -0
- package/dist/restorer/engine/state.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.d.ts +64 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js +96 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.d.ts +101 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.js +710 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +137 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js +865 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.d.ts +74 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js +74 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.d.ts +97 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js +226 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/index.d.ts +43 -0
- package/dist/restorer/impls/claude-mcp-prediction/index.js +230 -0
- package/dist/restorer/impls/claude-mcp-prediction/index.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.d.ts +38 -0
- package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js +135 -0
- package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/prompt.d.ts +8 -0
- package/dist/restorer/impls/claude-mcp-prediction/prompt.js +54 -0
- package/dist/restorer/impls/claude-mcp-prediction/prompt.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.d.ts +36 -0
- package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js +137 -0
- package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/types.d.ts +82 -0
- package/dist/restorer/impls/claude-mcp-prediction/types.js +6 -0
- package/dist/restorer/impls/claude-mcp-prediction/types.js.map +1 -0
- package/dist/restorer/impls/legacy-claude/index.d.ts +45 -0
- package/dist/restorer/impls/legacy-claude/index.js +71 -0
- package/dist/restorer/impls/legacy-claude/index.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.d.ts +68 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js +117 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.d.ts +49 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js +91 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.d.ts +78 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js +274 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.d.ts +23 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js +49 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.d.ts +25 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js +44 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.d.ts +17 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js +43 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.d.ts +43 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.js +431 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.d.ts +21 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.js +32 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.d.ts +32 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.js +8 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/index.d.ts +39 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/index.js +98 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/index.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.d.ts +2 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js +7 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/types.d.ts +4 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/types.js +2 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/types.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.d.ts +2 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js +7 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/index.d.ts +39 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js +186 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/score.d.ts +9 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js +20 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/types.d.ts +7 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js +2 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.d.ts +29 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.js +94 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.d.ts +8 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.js +41 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.d.ts +7 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.js +2 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.d.ts +20 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js +66 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.d.ts +9 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js +23 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.d.ts +3 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js +13 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.d.ts +7 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js +93 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.d.ts +5 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js +20 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.d.ts +33 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.js +208 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.d.ts +8 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.js +15 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.d.ts +7 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.js +2 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.js.map +1 -0
- package/dist/restorer/types.d.ts +177 -0
- package/dist/restorer/types.js +7 -0
- package/dist/restorer/types.js.map +1 -0
- package/dist/store/store.d.ts +3 -1
- package/dist/store/store.js +3 -0
- package/dist/store/store.js.map +1 -1
- package/dist/types/desired-state.d.ts +53 -0
- package/dist/types/desired-state.js +20 -0
- package/dist/types/desired-state.js.map +1 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/portfolio.d.ts +1000 -0
- package/dist/types/portfolio.js +168 -0
- package/dist/types/portfolio.js.map +1 -0
- package/dist/types/prediction-apy.d.ts +919 -0
- package/dist/types/prediction-apy.js +121 -0
- package/dist/types/prediction-apy.js.map +1 -0
- package/dist/types/prediction.d.ts +925 -0
- package/dist/types/prediction.js +140 -0
- package/dist/types/prediction.js.map +1 -0
- package/dist/venues/aave-v3/addresses.d.ts +6 -0
- package/dist/venues/aave-v3/addresses.js +19 -0
- package/dist/venues/aave-v3/addresses.js.map +1 -0
- package/dist/venues/aave-v3/client.d.ts +81 -0
- package/dist/venues/aave-v3/client.js +97 -0
- package/dist/venues/aave-v3/client.js.map +1 -0
- package/dist/venues/chainlink/client.d.ts +99 -0
- package/dist/venues/chainlink/client.js +130 -0
- package/dist/venues/chainlink/client.js.map +1 -0
- package/dist/venues/chainlink/feeds.d.ts +8 -0
- package/dist/venues/chainlink/feeds.js +9 -0
- package/dist/venues/chainlink/feeds.js.map +1 -0
- package/dist/venues/hyperliquid/account-value.d.ts +30 -0
- package/dist/venues/hyperliquid/account-value.js +30 -0
- package/dist/venues/hyperliquid/account-value.js.map +1 -0
- package/dist/venues/hyperliquid/client.d.ts +63 -0
- package/dist/venues/hyperliquid/client.js +135 -0
- package/dist/venues/hyperliquid/client.js.map +1 -0
- package/dist/venues/hyperliquid/grid.d.ts +36 -0
- package/dist/venues/hyperliquid/grid.js +61 -0
- package/dist/venues/hyperliquid/grid.js.map +1 -0
- package/dist/venues/hyperliquid/types.d.ts +81 -0
- package/dist/venues/hyperliquid/types.js +8 -0
- package/dist/venues/hyperliquid/types.js.map +1 -0
- package/dist/withdraw/run-withdraw-plan.js +2 -0
- package/dist/withdraw/run-withdraw-plan.js.map +1 -1
- package/docker-compose.yml +44 -0
- package/package.json +12 -1
- package/skills/jinn-operator/SKILL.md +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/restorer/engine/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAmD,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,GAGxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,eAAe,GAEhB,MAAM,eAAe,CAAC;AAGvB,iFAAiF;AAEjF,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,cAAc,CAAS;IAEhC,YAAY,cAAsB;QAChC,KAAK,CAAC,oBAAoB,cAAc,gCAAgC,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AA4DD,iFAAiF;AAEjF,MAAM,OAAO,iBAAiB;IACT,WAAW,CAAoB;IAC/B,QAAQ,CAAuB;IAC/B,KAAK,CAAoC;IACzC,SAAS,CAAwC;IACjD,aAAa,CAA4C;IACzD,YAAY,CAA2C;IACvD,YAAY,CAA2C;IACvD,YAAY,CAA2C;IAE1E,0EAA0E;IAC1E,qDAAqD;IACpC,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEpE,uEAAuE;IAC/D,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,IAA8B;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACxC,CAAC;IAED,+EAA+E;IAE/E;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,KAA2B;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,qCAAqC,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CACnD,CAAC;QAEF,MAAM,OAAO,GAAqB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC;YACzC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,YAAY,KAAK;oBAC1C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;oBACvB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAiB,EAAE,KAAK,EAAE,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,IAAI,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC;QAExF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CACzD,CAAC;QACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACtB,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC;gBACzC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC/E,OAAO,CAAC,IAAI,CAAC,mCAAmC,SAAS,aAAa,MAAM,EAAE,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7G,CAAC;YACD,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM;YACxB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,KAAK,WAAW,CAAC,UAAU;gBACzB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5D,MAAM;YAER,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzB,wDAAwD;gBACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,IAAI,QAAQ,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnF,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,IAAI,MAAM,CAAC,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;oBAC3E,MAAM,IAAI,CAAC,cAAc,CACvB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EACtC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CACnE,CAAC;oBACF,qEAAqE;oBACrE,+EAA+E;oBAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAChE,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;wBACjD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBACD,kEAAkE;gBAClE,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,uEAAuE;oBACvE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,IAAI,MAAM,CAAC,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;oBAC3E,MAAM,IAAI,CAAC,cAAc,CACvB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EACtC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAC3D,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;oBACtE,iEAAiE;oBACjE,qEAAqE;oBACrE,oEAAoE;oBACpE,qEAAqE;oBACrE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAChE,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;wBACjD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,OAAO;gBACtB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC9D,MAAM;YAER,KAAK,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,IAAI,MAAM,CAAC,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;oBAC3E,MAAM,IAAI,CAAC,cAAc,CACvB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EACtC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CACxD,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACzE,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,SAAS;gBACxB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,WAAW,CAAC,UAAU;gBACzB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC9D,MAAM;YAER,KAAK,WAAW,CAAC,QAAQ,CAAC;YAC1B,KAAK,WAAW,CAAC,MAAM;gBACrB,4BAA4B;gBAC5B,MAAM;QACV,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,2EAA2E;IAC3E,iCAAiC;IAEjC;;;;;;;;;;;OAWG;IACO,KAAK,CAAC,KAAK,CAAC,MAAuB;QAC3C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,2EAA2E;QAC3E,0EAA0E;QAC1E,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,8BAA8B;QAC9B,EAAE;QACF,uEAAuE;QACvE,qEAAqE;QACrE,gCAAgC;QAChC,IAAI,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;gBACrC,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,aAAa;aACzC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,2CAA2C,MAAM,CAAC,QAAQ,gCAAgC,MAAM,CAAC,QAAQ,cAAc,CAAC;gBACvI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,sBAAsB,MAAM,EAAE,CAAC,CAAC;gBACjF,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAClB,MAAM,MAAM,GAAG,SAAS,IAAI,CAAC,IAAI,gBAAgB,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAChJ,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBACtD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,sBAAsB,MAAM,EAAE,CAAC,CAAC;oBACjF,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAE9D,MAAM,oBAAoB,CACxB;YACE,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,EACD,cAAc,EACd,kBAAkB,CACnB,CAAC;QAEF,yCAAyC;QACzC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,wBAAwB;QAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,0CAA0C;QACvD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACH,MAAM,EAAE,GAAG,MAAM,wBAAwB,CACvC;wBACE,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;qBACpC,EACD,IAAI,CAAC,SAAS,CAAC,cAAc,CAC9B,CAAC;oBACF,IAAI,EAAE,EAAE,CAAC;wBACP,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAChE,OAAO,CAAC,KAAK,CACX,yDAAyD,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CACvF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CACT,8BAA8B,QAAQ,CAAC,MAAM,qCAAqC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxG,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,eAAe,CAAC,MAAuB;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACrE,8EAA8E;QAC9E,6EAA6E;QAC7E,+EAA+E;QAC/E,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ;YAClC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,aAAa,EAAE,CAAC,IAAI,IAAI;YACzG,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,IAAI,YAAY,EAAE,IAAI,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;QAC5F,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAEtE,yEAAyE;QACzE,2EAA2E;QAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI;YAC1C,EAAE,EAAE,MAAM,CAAC,SAAS;YACpB,WAAW,EAAE,EAAE;YACf,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE;SACrE,CAAC;QAEF,mBAAmB,CAAC,UAAU,EAAE,YAAmE,CAAC,CAAC;QACrG,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAEpC,4EAA4E;QAC5E,+DAA+D;QAC/D,2EAA2E;QAC3E,2EAA2E;QAC3E,iEAAiE;QACjE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE;YACjE,UAAU;YACV,YAAY;YACZ,qBAAqB,EAAE,IAAI,CAAC,GAAG,EAAE;YACjC,kBAAkB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;SACtD,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,uCAAuC,UAAU,EAAE,CAAC,CAAC;IACxG,CAAC;IAED;;;;;;;;;OASG;IACO,KAAK,CAAC,OAAO,CAAC,MAAuB;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1F,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEvC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG;gBACV,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI;oBAC9B,EAAE,EAAE,MAAM,CAAC,SAAS;oBACpB,WAAW,EAAE,EAAE;oBACf,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/D,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE;iBACrE,CAAwD;gBACzD,YAAY;gBACZ,UAAU;gBACV,GAAG,EAAE,CAAC,KAAqD,EAAE,EAAE;oBAC7D,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9F,CAAC;gBACD,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,YAAY;aACb,CAAC;YAEF,IAAI,MAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAChE,OAAO,CAAC,IAAI,CACV,qBAAqB,MAAM,CAAC,SAAS,iDAAiD,MAAM,GAAG,CAChG,CAAC;oBACF,MAAM,GAAG;wBACP,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC5B,MAAM,EAAE;4BACN,OAAO,EAAE,IAAI;4BACb,MAAM,EAAE,oBAAoB;4BAC5B,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;yBAC7B;wBACD,aAAa,EAAE;4BACb,MAAM,EAAE,SAAS;4BACjB,MAAM;yBACP;wBACD,SAAS,EAAE,EAAE;qBACd,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAE/C,wEAAwE;YACxE,uEAAuE;YACvE,2EAA2E;YAC3E,sEAAsE;YACtE,sEAAsE;YACtE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,aAAa,EAAE;gBACvE,sBAAsB,EAAE,IAAI,CAAC,GAAG,EAAE;gBAClC,mBAAmB,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;gBAChG,YAAY,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;gBAChC,WAAW,EAAE,MAAM,CAAC,MAAM;gBAC1B,kBAAkB,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;gBAChD,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,qCAAqC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrG,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,OAAwB;QACvD,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,IAAI,CAAC,MAAuB;QAC1C,iFAAiF;QACjF,4EAA4E;QAC5E,8EAA8E;QAC9E,2EAA2E;QAC3E,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC;YAC9E,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAsB,CAAC;gBAC1E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,iDAAiD,CAAC,CAAC;YACtG,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,SAAS,wCAAwC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACxI,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAE1F,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC;QAElD,4EAA4E;QAC5E,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACpE,MAAM,iBAAiB,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAElF,0CAA0C;QAC1C,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAEpF,sCAAsC;QACtC,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAEjC,iFAAiF;QACjF,iEAAiE;QACjE,2EAA2E;QAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;QACpF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACtF,CAAC;QAED,8BAA8B;QAC9B,MAAM,UAAU,GAAG;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW;YACX,QAAQ;YACR,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAwF,CAAC;QAC3H,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAyF,CAAC;QAE7H,MAAM,kBAAkB,GAAG;YACzB,WAAW,EAAE;gBACX,UAAU,EAAE,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAAC,GAAG,EAAE;gBACtD,MAAM,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;gBACvC,6EAA6E;gBAC7E,yEAAyE;gBACzE,2EAA2E;gBAC3E,OAAO,EAAE,kBAAkB,EAAE,OAAO,IAAI,kBAAkB,IAAI,EAAE;aACjE;YACD,YAAY,EAAE;gBACZ,UAAU,EAAE,MAAM,CAAC,sBAAsB,IAAI,IAAI,CAAC,GAAG,EAAE;gBACvD,MAAM,EAAE,mBAAmB,EAAE,MAAM,IAAI,CAAC;gBACxC,iCAAiC;gBACjC,OAAO,EAAE,mBAAmB,EAAE,OAAO,IAAI,mBAAmB,IAAI,EAAE;aACnE;YACD,KAAK,EAAG,MAAM,CAAC,YAA0B,IAAI,EAAE;YAC/C,MAAM,EAAG,MAAM,CAAC,WAAuC,IAAI,EAAE;YAC7D,aAAa,EAAG,MAAM,CAAC,kBAA8C,IAAI,SAAS;YAClF,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,SAAS;SAC9C,CAAC;QAEF,gFAAgF;QAChF,MAAM,WAAW,GAAW,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAChC,sEAAsE;YACtE,kEAAkE;YAClE,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,YAAY,GAA4B,EAAE,WAAW,EAAE,CAAC;QAE9D,qDAAqD;QACrD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,MAAM,uBAAuB,CACvF,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,IAAI,CAAC,YAAY,EACjB,YAAY,CACb,CAAC;QAEF,6EAA6E;QAC7E,iBAAiB,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtE,4CAA4C;QAC5C,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;QACxC,CAAC;QAED,2EAA2E;QAC3E,qFAAqF;QACrF,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,EAAE;YACpE,WAAW;YACX,YAAY;YACZ,YAAY,EAAE,aAAa;SAC5B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,uCAAuC,WAAW,EAAE,CAAC,CAAC;QAEvG,0CAA0C;QAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,OAAO,CAAC,MAAuB;QAC7C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,2EAA2E;QAC3E,6DAA6D;QAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,YAAgD,CAAC;QAC7E,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YACrE,MAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;QAED,4DAA4D;QAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAErC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,MAAM,eAAe,CAC3D,SAA0B,EAC1B,WAAW,EACX,YAA6B,EAC7B,IAAI,CAAC,YAAY;QACjB,6EAA6E;QAC5E,MAAM,CAAC,cAAgC,IAAI,SAAS;QACrD,gFAAgF;QAChF,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE;YAC3D,cAAc;SACf,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,qCAAqC,cAAc,YAAY,WAAW,EAAE,CAAC,CAAC;IAC1H,CAAC;IAED,+EAA+E;IAE/E;;;;;;OAMG;IACK,iBAAiB,CAAC,MAAuB;QAC/C,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,KAAK,WAAW,CAAC,OAAO;gBACtB,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,KAAK,WAAW,CAAC,YAAY;gBAC3B,OAAO,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,KAAK,WAAW,CAAC,aAAa;gBAC5B,OAAO,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3E;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,cAAc,CAC1B,MAAuB,EACvB,EAAuB;QAEvB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,IAAI,QAAQ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,WAAW,CAAC,MAAuB;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,0EAA0E;YAC1E,gFAAgF;YAChF,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,yEAAyE;YACzE,qEAAqE;YACrE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,MAAM,EAAE,CAAC,CAAC;gBACrE,OAAO,CAAC,KAAK,CAAC,uCAAuC,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,KAAK,WAAW,CAAC,UAAU;gBACzB,6DAA6D;gBAC7D,sDAAsD;gBACtD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzB,MAAM;YAER,KAAK,WAAW,CAAC,OAAO;gBACtB,8CAA8C;gBAC9C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;gBACnE,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3E,MAAM;YAER,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,4CAA4C;oBAC5C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACvD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7E,CAAC;gBACD,kEAAkE;gBAClE,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,+CAA+C;oBAC/C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACvD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7E,CAAC;qBAAM,CAAC;oBACN,+BAA+B;oBAC/B,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBACnC,kEAAkE;oBAClE,kEAAkE;oBAClE,8DAA8D;oBAC9D,sEAAsE;oBACtE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAChE,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;wBAChF,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,OAAO;gBACtB,uDAAuD;gBACvD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM;YAER,KAAK,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,iDAAiD;oBACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACvD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7E,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACtC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,SAAS;gBACxB,kEAAkE;gBAClE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxB,MAAM;YAER,KAAK,WAAW,CAAC,UAAU;gBACzB,6DAA6D;gBAC7D,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM;YAER,KAAK,WAAW,CAAC,QAAQ,CAAC;YAC1B,KAAK,WAAW,CAAC,MAAM;gBACrB,iCAAiC;gBACjC,MAAM;QACV,CAAC;IACH,CAAC;CACF;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,uDAAuD;AACvD,mCAAmC;AACnC,SAAS,wBAAwB,CAAC,GAAY;IAC5C,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,6DAA6D;IAC7D,MAAM,qBAAqB,GAAG;QAC5B,aAAa;QACb,0BAA0B;QAC1B,sBAAsB;QACtB,2BAA2B;QAC3B,cAAc;QACd,mBAAmB;QACnB,eAAe;QACf,mBAAmB;KACpB,CAAC;IACF,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpE,4EAA4E;IAC5E,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,mBAAmB,GAAG;YAC1B,eAAe;YACf,cAAc;YACd,eAAe;YACf,iBAAiB;YACjB,gBAAgB;YAChB,cAAc;YACd,iBAAiB;YACjB,mBAAmB;SACpB,CAAC;QACF,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restorer engine — manifest assembly + signing.
|
|
3
|
+
*
|
|
4
|
+
* §5.1 Restoration manifest, §5.5 Signing.
|
|
5
|
+
*
|
|
6
|
+
* Assembles a `portfolio.v0.manifest.v1` object from engine-controlled
|
|
7
|
+
* provenance fields + impl-supplied output, then:
|
|
8
|
+
* 1. Serialises to canonical JSON (sorted keys, no whitespace) minus the
|
|
9
|
+
* `signature` field.
|
|
10
|
+
* 2. keccak256-hashes the canonical JSON bytes.
|
|
11
|
+
* 3. Signs the 32-byte hash with the agent EOA's private key via secp256k1
|
|
12
|
+
* (raw ECDSA, no EIP-191 prefix — uses viem's `sign({ hash, privateKey })`
|
|
13
|
+
* from `viem/accounts`).
|
|
14
|
+
* 4. Uploads the signed manifest to IPFS and returns the CID.
|
|
15
|
+
*/
|
|
16
|
+
import type { Hex } from 'viem';
|
|
17
|
+
import type { Artifact } from '../../types/portfolio.js';
|
|
18
|
+
import type { Snapshot } from '../../types/portfolio.js';
|
|
19
|
+
export interface ManifestProvenance {
|
|
20
|
+
intentCid: string;
|
|
21
|
+
onchainCreationTx: string;
|
|
22
|
+
onchainCreationBlock: number;
|
|
23
|
+
requestId: string;
|
|
24
|
+
safeAddress: string;
|
|
25
|
+
agentEoa: string;
|
|
26
|
+
windowStartTs: number;
|
|
27
|
+
windowEndTs: number;
|
|
28
|
+
}
|
|
29
|
+
export interface ManifestImplOutput {
|
|
30
|
+
preSnapshot: Snapshot;
|
|
31
|
+
postSnapshot: Snapshot;
|
|
32
|
+
fills: unknown[];
|
|
33
|
+
gating: Record<string, unknown>;
|
|
34
|
+
informational?: Record<string, unknown>;
|
|
35
|
+
rationale?: Array<{
|
|
36
|
+
ts: number;
|
|
37
|
+
sessionId: string;
|
|
38
|
+
note: string;
|
|
39
|
+
relatedFillTids?: number[];
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
export interface AssembledManifest {
|
|
43
|
+
manifest: Record<string, unknown>;
|
|
44
|
+
manifestCid: string;
|
|
45
|
+
signatureHash: Hex;
|
|
46
|
+
}
|
|
47
|
+
export interface ManifestAssemblyDeps {
|
|
48
|
+
ipfsRegistryUrl: string;
|
|
49
|
+
agentEoaPrivateKey: Hex;
|
|
50
|
+
/** Safe multisig address. When provided, used for manifest.restorer.safeAddress. */
|
|
51
|
+
safeAddress?: `0x${string}`;
|
|
52
|
+
}
|
|
53
|
+
export interface ManifestAssemblyOptions {
|
|
54
|
+
/**
|
|
55
|
+
* Timestamp to use for `generatedAt` field. Persisting and reusing across
|
|
56
|
+
* retries ensures the manifest CID is deterministic (idempotent PACKAGING).
|
|
57
|
+
* Defaults to Date.now() if not provided (first-run case).
|
|
58
|
+
*/
|
|
59
|
+
generatedAt?: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Assemble, sign, and upload the portfolio.v0.manifest.v1.
|
|
63
|
+
*
|
|
64
|
+
* Returns the full manifest object, its IPFS CID, and the keccak256 hash
|
|
65
|
+
* that was signed (useful as evidenceHash for claimDelivery).
|
|
66
|
+
*/
|
|
67
|
+
export declare function assembleAndSignManifest(provenance: ManifestProvenance, implOutput: ManifestImplOutput, artifacts: Artifact[], deps: ManifestAssemblyDeps, opts?: ManifestAssemblyOptions): Promise<AssembledManifest>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restorer engine — manifest assembly + signing.
|
|
3
|
+
*
|
|
4
|
+
* §5.1 Restoration manifest, §5.5 Signing.
|
|
5
|
+
*
|
|
6
|
+
* Assembles a `portfolio.v0.manifest.v1` object from engine-controlled
|
|
7
|
+
* provenance fields + impl-supplied output, then:
|
|
8
|
+
* 1. Serialises to canonical JSON (sorted keys, no whitespace) minus the
|
|
9
|
+
* `signature` field.
|
|
10
|
+
* 2. keccak256-hashes the canonical JSON bytes.
|
|
11
|
+
* 3. Signs the 32-byte hash with the agent EOA's private key via secp256k1
|
|
12
|
+
* (raw ECDSA, no EIP-191 prefix — uses viem's `sign({ hash, privateKey })`
|
|
13
|
+
* from `viem/accounts`).
|
|
14
|
+
* 4. Uploads the signed manifest to IPFS and returns the CID.
|
|
15
|
+
*/
|
|
16
|
+
import { signCanonical } from './signing.js';
|
|
17
|
+
import { uploadToIpfs } from '../../adapters/mech/ipfs.js';
|
|
18
|
+
// ── Assembly ──────────────────────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* Assemble, sign, and upload the portfolio.v0.manifest.v1.
|
|
21
|
+
*
|
|
22
|
+
* Returns the full manifest object, its IPFS CID, and the keccak256 hash
|
|
23
|
+
* that was signed (useful as evidenceHash for claimDelivery).
|
|
24
|
+
*/
|
|
25
|
+
export async function assembleAndSignManifest(provenance, implOutput, artifacts, deps, opts = {}) {
|
|
26
|
+
// Use caller-supplied generatedAt (persisted on first pack, reused on retry)
|
|
27
|
+
// to keep the manifest CID deterministic across PACKAGING retries.
|
|
28
|
+
const generatedAt = opts.generatedAt ?? Date.now();
|
|
29
|
+
// Build unsigned manifest (signature field absent)
|
|
30
|
+
const unsigned = {
|
|
31
|
+
schemaVersion: 'portfolio.v0.manifest.v1',
|
|
32
|
+
generatedAt,
|
|
33
|
+
intent: {
|
|
34
|
+
cid: provenance.intentCid,
|
|
35
|
+
onchainCreationTx: provenance.onchainCreationTx,
|
|
36
|
+
onchainCreationBlock: provenance.onchainCreationBlock,
|
|
37
|
+
requestId: provenance.requestId,
|
|
38
|
+
},
|
|
39
|
+
restorer: {
|
|
40
|
+
safeAddress: provenance.safeAddress,
|
|
41
|
+
agentEoa: provenance.agentEoa,
|
|
42
|
+
},
|
|
43
|
+
window: {
|
|
44
|
+
startTs: provenance.windowStartTs,
|
|
45
|
+
endTs: provenance.windowEndTs,
|
|
46
|
+
},
|
|
47
|
+
preSnapshot: implOutput.preSnapshot,
|
|
48
|
+
postSnapshot: implOutput.postSnapshot,
|
|
49
|
+
fills: implOutput.fills,
|
|
50
|
+
gating: implOutput.gating,
|
|
51
|
+
...(implOutput.informational !== undefined
|
|
52
|
+
? { informational: implOutput.informational }
|
|
53
|
+
: {}),
|
|
54
|
+
artifacts,
|
|
55
|
+
...(implOutput.rationale !== undefined
|
|
56
|
+
? { rationale: implOutput.rationale }
|
|
57
|
+
: {}),
|
|
58
|
+
};
|
|
59
|
+
// Sign the unsigned manifest using the shared canonical signing helper.
|
|
60
|
+
const signed = await signCanonical(unsigned, deps.agentEoaPrivateKey, provenance.agentEoa);
|
|
61
|
+
const hash = signed.hash;
|
|
62
|
+
const signedManifest = {
|
|
63
|
+
...unsigned,
|
|
64
|
+
signature: {
|
|
65
|
+
algo: 'secp256k1',
|
|
66
|
+
signer: provenance.agentEoa,
|
|
67
|
+
hash: signed.hash,
|
|
68
|
+
sig: signed.sig,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
// Upload to IPFS
|
|
72
|
+
const manifestCid = await uploadToIpfs(deps.ipfsRegistryUrl, signedManifest);
|
|
73
|
+
return {
|
|
74
|
+
manifest: signedManifest,
|
|
75
|
+
manifestCid,
|
|
76
|
+
signatureHash: hash,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=manifest-assembly.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-assembly.js","sourceRoot":"","sources":["../../../src/restorer/engine/manifest-assembly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAgD3D,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAA8B,EAC9B,UAA8B,EAC9B,SAAqB,EACrB,IAA0B,EAC1B,OAAgC,EAAE;IAElC,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAEnD,mDAAmD;IACnD,MAAM,QAAQ,GAA4B;QACxC,aAAa,EAAE,0BAA0B;QACzC,WAAW;QACX,MAAM,EAAE;YACN,GAAG,EAAE,UAAU,CAAC,SAAS;YACzB,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;YAC/C,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;YACrD,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B;QACD,MAAM,EAAE;YACN,OAAO,EAAE,UAAU,CAAC,aAAa;YACjC,KAAK,EAAE,UAAU,CAAC,WAAW;SAC9B;QACD,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,GAAG,CAAC,UAAU,CAAC,aAAa,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE;YAC7C,CAAC,CAAC,EAAE,CAAC;QACP,SAAS;QACT,GAAG,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE;YACrC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,wEAAwE;IACxE,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,QAAQ,EACR,IAAI,CAAC,kBAAkB,EACvB,UAAU,CAAC,QAAyB,CACrC,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAW,CAAC;IAEhC,MAAM,cAAc,GAA4B;QAC9C,GAAG,QAAQ;QACX,SAAS,EAAE;YACT,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,UAAU,CAAC,QAAQ;YAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB;KACF,CAAC;IAEF,iBAAiB;IACjB,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAE7E,OAAO;QACL,QAAQ,EAAE,cAAc;QACxB,WAAW;QACX,aAAa,EAAE,IAAI;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restorer engine — workingDir provisioning + artifact walking + IPFS upload.
|
|
3
|
+
*
|
|
4
|
+
* §6.6 workdir layout, §5.3 artifact role conventions.
|
|
5
|
+
*
|
|
6
|
+
* Responsibilities:
|
|
7
|
+
* 1. Provision workingDir at PRE_SNAPSHOT time: write intent.json, env/ files,
|
|
8
|
+
* sessions/ dir.
|
|
9
|
+
* 2. After impl returns: walk workingDir, read OUTPUTS.json (if present),
|
|
10
|
+
* compute sha256, upload each artifact to IPFS, return structured list.
|
|
11
|
+
*/
|
|
12
|
+
import type { DesiredState } from '../../types/desired-state.js';
|
|
13
|
+
import type { Artifact, OutputArtifact } from '../../types/portfolio.js';
|
|
14
|
+
export interface UploadedArtifact extends Artifact {
|
|
15
|
+
localPath: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PackagingDeps {
|
|
18
|
+
ipfsRegistryUrl: string;
|
|
19
|
+
/**
|
|
20
|
+
* Called after artifact registration is ready (after manifest CID is known).
|
|
21
|
+
* The optional `parentManifestCid` is the IPFS CID of the enclosing manifest,
|
|
22
|
+
* enabling back-pointer links per spec §6.1. Fire-and-forget is fine.
|
|
23
|
+
*/
|
|
24
|
+
registerArtifact?: (artifact: {
|
|
25
|
+
id: string;
|
|
26
|
+
title: string;
|
|
27
|
+
tags: string[];
|
|
28
|
+
outcome: string;
|
|
29
|
+
parentManifestCid?: string;
|
|
30
|
+
}) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Provision the working directory at PRE_SNAPSHOT time.
|
|
34
|
+
*
|
|
35
|
+
* Creates:
|
|
36
|
+
* <workingDir>/intent.json — canonical DesiredState JSON
|
|
37
|
+
* <workingDir>/env/<VAR> — one file per env var (mode 0600)
|
|
38
|
+
* <workingDir>/sessions/ — directory for session transcripts
|
|
39
|
+
*/
|
|
40
|
+
export declare function provisionWorkingDir(workingDir: string, intent: DesiredState, envVars?: Record<string, string>): void;
|
|
41
|
+
/**
|
|
42
|
+
* Provision the impl state directory on first invocation.
|
|
43
|
+
* Never deleted by the engine — persistent across attempts.
|
|
44
|
+
*/
|
|
45
|
+
export declare function provisionImplStateDir(implStateDir: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Walk the working directory and collect declared + default artifacts.
|
|
48
|
+
*
|
|
49
|
+
* Priority: OUTPUTS.json overrides defaults. After collecting declared entries,
|
|
50
|
+
* we also always add a tarball of the full workingDir as `system_snapshot`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function walkArtifacts(workingDir: string, implArtifacts?: OutputArtifact[]): Promise<Array<{
|
|
53
|
+
localPath: string;
|
|
54
|
+
role: string;
|
|
55
|
+
metadata?: Record<string, unknown>;
|
|
56
|
+
tags?: string[];
|
|
57
|
+
access?: {
|
|
58
|
+
kind: 'open' | 'x402-gated';
|
|
59
|
+
endpoint?: string;
|
|
60
|
+
priceUsdc?: string;
|
|
61
|
+
};
|
|
62
|
+
}>>;
|
|
63
|
+
/**
|
|
64
|
+
* Upload all collected artifacts to IPFS — NO registration.
|
|
65
|
+
*
|
|
66
|
+
* Returns an array of `UploadedArtifact` (= Artifact + localPath).
|
|
67
|
+
* Registration is deferred until the manifest CID is known; call
|
|
68
|
+
* `registerArtifacts(uploaded, parentManifestCid, deps)` afterwards.
|
|
69
|
+
*/
|
|
70
|
+
export declare function uploadArtifacts(artifacts: Array<{
|
|
71
|
+
localPath: string;
|
|
72
|
+
role: string;
|
|
73
|
+
metadata?: Record<string, unknown>;
|
|
74
|
+
tags?: string[];
|
|
75
|
+
access?: {
|
|
76
|
+
kind: 'open' | 'x402-gated';
|
|
77
|
+
endpoint?: string;
|
|
78
|
+
priceUsdc?: string;
|
|
79
|
+
};
|
|
80
|
+
}>, deps: PackagingDeps): Promise<UploadedArtifact[]>;
|
|
81
|
+
/**
|
|
82
|
+
* Register already-uploaded artifacts with a back-pointer to the parent manifest CID.
|
|
83
|
+
*
|
|
84
|
+
* Call this AFTER the manifest has been assembled, signed, and uploaded so that
|
|
85
|
+
* `parentManifestCid` is known (spec §6.1 requirement). Fire-and-forget.
|
|
86
|
+
*/
|
|
87
|
+
export declare function registerArtifacts(uploaded: UploadedArtifact[], parentManifestCid: string, deps: PackagingDeps): void;
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restorer engine — workingDir provisioning + artifact walking + IPFS upload.
|
|
3
|
+
*
|
|
4
|
+
* §6.6 workdir layout, §5.3 artifact role conventions.
|
|
5
|
+
*
|
|
6
|
+
* Responsibilities:
|
|
7
|
+
* 1. Provision workingDir at PRE_SNAPSHOT time: write intent.json, env/ files,
|
|
8
|
+
* sessions/ dir.
|
|
9
|
+
* 2. After impl returns: walk workingDir, read OUTPUTS.json (if present),
|
|
10
|
+
* compute sha256, upload each artifact to IPFS, return structured list.
|
|
11
|
+
*/
|
|
12
|
+
import { createHash } from 'node:crypto';
|
|
13
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, } from 'node:fs';
|
|
14
|
+
import { join, relative, resolve, extname, isAbsolute } from 'node:path';
|
|
15
|
+
import { pipeline } from 'node:stream/promises';
|
|
16
|
+
import { createGzip } from 'node:zlib';
|
|
17
|
+
import { createWriteStream } from 'node:fs';
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
import { uploadToIpfs } from '../../adapters/mech/ipfs.js';
|
|
20
|
+
// ── OUTPUTS.json schema ───────────────────────────────────────────────────────
|
|
21
|
+
const OutputEntrySchema = z.object({
|
|
22
|
+
path: z.string(),
|
|
23
|
+
role: z.string(),
|
|
24
|
+
metadata: z.record(z.unknown()).optional(),
|
|
25
|
+
tags: z.array(z.string()).optional(),
|
|
26
|
+
access: z
|
|
27
|
+
.object({
|
|
28
|
+
kind: z.enum(['open', 'x402-gated']),
|
|
29
|
+
endpoint: z.string().optional(),
|
|
30
|
+
priceUsdc: z.string().optional(),
|
|
31
|
+
})
|
|
32
|
+
.optional(),
|
|
33
|
+
});
|
|
34
|
+
const OutputsJsonSchema = z.object({
|
|
35
|
+
outputs: z.array(OutputEntrySchema),
|
|
36
|
+
});
|
|
37
|
+
// ── WorkingDir provisioning ───────────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Provision the working directory at PRE_SNAPSHOT time.
|
|
40
|
+
*
|
|
41
|
+
* Creates:
|
|
42
|
+
* <workingDir>/intent.json — canonical DesiredState JSON
|
|
43
|
+
* <workingDir>/env/<VAR> — one file per env var (mode 0600)
|
|
44
|
+
* <workingDir>/sessions/ — directory for session transcripts
|
|
45
|
+
*/
|
|
46
|
+
export function provisionWorkingDir(workingDir, intent, envVars = {}) {
|
|
47
|
+
mkdirSync(workingDir, { recursive: true, mode: 0o755 });
|
|
48
|
+
// intent.json
|
|
49
|
+
writeFileSync(join(workingDir, 'intent.json'), JSON.stringify(intent, null, 2), 'utf-8');
|
|
50
|
+
// env/ directory — one file per var, mode 0600
|
|
51
|
+
const envDir = join(workingDir, 'env');
|
|
52
|
+
mkdirSync(envDir, { recursive: true, mode: 0o700 });
|
|
53
|
+
for (const [name, value] of Object.entries(envVars)) {
|
|
54
|
+
writeFileSync(join(envDir, name), value, { encoding: 'utf-8', mode: 0o600 });
|
|
55
|
+
}
|
|
56
|
+
// sessions/ directory
|
|
57
|
+
mkdirSync(join(workingDir, 'sessions'), { recursive: true, mode: 0o755 });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Provision the impl state directory on first invocation.
|
|
61
|
+
* Never deleted by the engine — persistent across attempts.
|
|
62
|
+
*/
|
|
63
|
+
export function provisionImplStateDir(implStateDir) {
|
|
64
|
+
mkdirSync(implStateDir, { recursive: true, mode: 0o755 });
|
|
65
|
+
}
|
|
66
|
+
// ── Tarball helper ────────────────────────────────────────────────────────────
|
|
67
|
+
/**
|
|
68
|
+
* Create a gzipped tar of the workingDir at the given output path.
|
|
69
|
+
* Returns the output path.
|
|
70
|
+
*
|
|
71
|
+
* Uses native Node.js streams — no external binary required.
|
|
72
|
+
*
|
|
73
|
+
* DETERMINISM: uses epoch-0 mtime for all entries so the resulting tarball
|
|
74
|
+
* is byte-for-byte identical across retries (same file contents → same CID).
|
|
75
|
+
* The `excludeName` parameter is used to skip the tarball itself so it does
|
|
76
|
+
* not include itself.
|
|
77
|
+
*/
|
|
78
|
+
async function createWorkdirTarball(workingDir, outputPath, excludeName) {
|
|
79
|
+
// Build a simple tar manually using Buffer operations to avoid spawning
|
|
80
|
+
// external processes. For correctness and portability we use a pure-JS
|
|
81
|
+
// approach: read all files, pack them into a POSIX tar, gzip the result.
|
|
82
|
+
const entries = [];
|
|
83
|
+
function walk(dir) {
|
|
84
|
+
for (const name of readdirSync(dir)) {
|
|
85
|
+
const full = join(dir, name);
|
|
86
|
+
const st = statSync(full);
|
|
87
|
+
if (st.isDirectory()) {
|
|
88
|
+
const relDir = relative(workingDir, full);
|
|
89
|
+
// Security: exclude env/ and everything inside it — env/ contains
|
|
90
|
+
// secrets written at mode 0o600 by provisionWorkingDir and must never
|
|
91
|
+
// appear in a publicly-uploaded IPFS tarball. We check both "env" (the
|
|
92
|
+
// directory itself at workingDir root) and any path that starts with
|
|
93
|
+
// "env/" (nested contents, though the guard on the directory entry
|
|
94
|
+
// below already handles recursion).
|
|
95
|
+
if (relDir === 'env' || relDir.startsWith('env/') || relDir.startsWith('env\\'))
|
|
96
|
+
continue;
|
|
97
|
+
walk(full);
|
|
98
|
+
}
|
|
99
|
+
else if (st.isFile()) {
|
|
100
|
+
const relPath = relative(workingDir, full);
|
|
101
|
+
// Exclude the tarball itself to prevent self-inclusion
|
|
102
|
+
if (excludeName && relPath === excludeName)
|
|
103
|
+
continue;
|
|
104
|
+
// Exclude anything inside env/ (belt-and-suspenders guard)
|
|
105
|
+
if (relPath.startsWith('env/') || relPath.startsWith('env\\'))
|
|
106
|
+
continue;
|
|
107
|
+
const content = readFileSync(full);
|
|
108
|
+
entries.push({ relPath, content });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
walk(workingDir);
|
|
113
|
+
// Build ustar-format tar in memory
|
|
114
|
+
const blocks = [];
|
|
115
|
+
function padStr(s, len) {
|
|
116
|
+
const buf = Buffer.alloc(len, 0);
|
|
117
|
+
buf.write(s.slice(0, len), 'utf-8');
|
|
118
|
+
return buf;
|
|
119
|
+
}
|
|
120
|
+
function octalField(n, len) {
|
|
121
|
+
const s = n.toString(8).padStart(len - 1, '0') + ' ';
|
|
122
|
+
return Buffer.from(s, 'ascii');
|
|
123
|
+
}
|
|
124
|
+
for (const { relPath, content } of entries) {
|
|
125
|
+
const header = Buffer.alloc(512, 0);
|
|
126
|
+
// name (100)
|
|
127
|
+
padStr(relPath, 100).copy(header, 0);
|
|
128
|
+
// mode (8)
|
|
129
|
+
octalField(0o644, 8).copy(header, 100);
|
|
130
|
+
// uid (8)
|
|
131
|
+
octalField(0, 8).copy(header, 108);
|
|
132
|
+
// gid (8)
|
|
133
|
+
octalField(0, 8).copy(header, 116);
|
|
134
|
+
// size (12)
|
|
135
|
+
octalField(content.length, 12).copy(header, 124);
|
|
136
|
+
// mtime (12) — fixed epoch 0 for deterministic/reproducible tarballs
|
|
137
|
+
octalField(0, 12).copy(header, 136);
|
|
138
|
+
// typeflag
|
|
139
|
+
header[156] = 0x30; // '0' = regular file
|
|
140
|
+
// magic
|
|
141
|
+
Buffer.from('ustar \0', 'ascii').copy(header, 257);
|
|
142
|
+
// Compute checksum
|
|
143
|
+
header.fill(0x20, 148, 156); // space out checksum field
|
|
144
|
+
let checksum = 0;
|
|
145
|
+
for (let i = 0; i < 512; i++)
|
|
146
|
+
checksum += header[i];
|
|
147
|
+
octalField(checksum, 8).copy(header, 148);
|
|
148
|
+
blocks.push(header);
|
|
149
|
+
// Content + padding to 512-byte boundary
|
|
150
|
+
blocks.push(content);
|
|
151
|
+
const remainder = content.length % 512;
|
|
152
|
+
if (remainder > 0) {
|
|
153
|
+
blocks.push(Buffer.alloc(512 - remainder, 0));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Two 512-byte zero blocks as end-of-archive marker
|
|
157
|
+
blocks.push(Buffer.alloc(1024, 0));
|
|
158
|
+
const tarData = Buffer.concat(blocks);
|
|
159
|
+
// Gzip compress
|
|
160
|
+
await pipeline((async function* () { yield tarData; })(), createGzip(), createWriteStream(outputPath));
|
|
161
|
+
return outputPath;
|
|
162
|
+
}
|
|
163
|
+
// ── Path containment helper ───────────────────────────────────────────────────
|
|
164
|
+
/**
|
|
165
|
+
* Returns true iff `candidate` resolves to a path strictly inside `workingDir`.
|
|
166
|
+
* Rejects dotdot traversal, symlink escapes (after resolve), and paths that
|
|
167
|
+
* are equal to workingDir itself (directories, not files).
|
|
168
|
+
*/
|
|
169
|
+
function isInsideWorkingDir(workingDir, candidate) {
|
|
170
|
+
const wd = resolve(workingDir);
|
|
171
|
+
const c = resolve(candidate);
|
|
172
|
+
const rel = relative(wd, c);
|
|
173
|
+
return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);
|
|
174
|
+
}
|
|
175
|
+
// ── sha256 helper ─────────────────────────────────────────────────────────────
|
|
176
|
+
function sha256Hex(buf) {
|
|
177
|
+
return createHash('sha256').update(buf).digest('hex');
|
|
178
|
+
}
|
|
179
|
+
// ── Artifact walking ──────────────────────────────────────────────────────────
|
|
180
|
+
/**
|
|
181
|
+
* Walk the working directory and collect declared + default artifacts.
|
|
182
|
+
*
|
|
183
|
+
* Priority: OUTPUTS.json overrides defaults. After collecting declared entries,
|
|
184
|
+
* we also always add a tarball of the full workingDir as `system_snapshot`.
|
|
185
|
+
*/
|
|
186
|
+
export async function walkArtifacts(workingDir, implArtifacts = []) {
|
|
187
|
+
const result = [];
|
|
188
|
+
// 1. Check for OUTPUTS.json
|
|
189
|
+
const outputsJsonPath = join(workingDir, 'OUTPUTS.json');
|
|
190
|
+
let usedOutputsJson = false;
|
|
191
|
+
if (existsSync(outputsJsonPath)) {
|
|
192
|
+
try {
|
|
193
|
+
const raw = JSON.parse(readFileSync(outputsJsonPath, 'utf-8'));
|
|
194
|
+
const parsed = OutputsJsonSchema.parse(raw);
|
|
195
|
+
for (const entry of parsed.outputs) {
|
|
196
|
+
const fullPath = join(workingDir, entry.path);
|
|
197
|
+
if (!isInsideWorkingDir(workingDir, fullPath)) {
|
|
198
|
+
console.warn(`[restorer-engine] OUTPUTS.json path traversal detected (skipped): ${entry.path}`);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (existsSync(fullPath) && statSync(fullPath).isFile()) {
|
|
202
|
+
result.push({
|
|
203
|
+
localPath: fullPath,
|
|
204
|
+
role: entry.role,
|
|
205
|
+
metadata: entry.metadata,
|
|
206
|
+
tags: entry.tags,
|
|
207
|
+
access: entry.access,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
usedOutputsJson = true;
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
console.warn(`[restorer-engine] OUTPUTS.json parse failed (ignored): ${err instanceof Error ? err.message : err}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (!usedOutputsJson) {
|
|
218
|
+
// 2. Apply impl-provided OutputArtifact entries
|
|
219
|
+
for (const art of implArtifacts) {
|
|
220
|
+
// Reject absolute paths outright — impl must use workingDir-relative paths
|
|
221
|
+
if (isAbsolute(art.path)) {
|
|
222
|
+
console.warn(`[restorer-engine] impl artifact absolute path rejected (skipped): ${art.path}`);
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
const fullPath = join(workingDir, art.path);
|
|
226
|
+
if (!isInsideWorkingDir(workingDir, fullPath)) {
|
|
227
|
+
console.warn(`[restorer-engine] impl artifact path traversal detected (skipped): ${art.path}`);
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
if (existsSync(fullPath) && statSync(fullPath).isFile()) {
|
|
231
|
+
result.push({
|
|
232
|
+
localPath: fullPath,
|
|
233
|
+
role: art.role,
|
|
234
|
+
metadata: art.metadata,
|
|
235
|
+
tags: art.tags,
|
|
236
|
+
access: art.access,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// 3. Apply default conventions for files not already declared
|
|
241
|
+
const declared = new Set(result.map((r) => r.localPath));
|
|
242
|
+
// sessions/ → session_transcript
|
|
243
|
+
const sessionsDir = join(workingDir, 'sessions');
|
|
244
|
+
if (existsSync(sessionsDir)) {
|
|
245
|
+
for (const name of readdirSync(sessionsDir)) {
|
|
246
|
+
const full = join(sessionsDir, name);
|
|
247
|
+
if (statSync(full).isFile() && !declared.has(full)) {
|
|
248
|
+
result.push({ localPath: full, role: 'session_transcript', access: { kind: 'open' } });
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Markdown files at root → design_document
|
|
253
|
+
const rootFiles = readdirSync(workingDir);
|
|
254
|
+
for (const name of rootFiles) {
|
|
255
|
+
const full = join(workingDir, name);
|
|
256
|
+
if (statSync(full).isFile() &&
|
|
257
|
+
extname(name).toLowerCase() === '.md' &&
|
|
258
|
+
!declared.has(full)) {
|
|
259
|
+
result.push({ localPath: full, role: 'design_document', access: { kind: 'open' } });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// logs/ → runtime_log
|
|
263
|
+
const logsDir = join(workingDir, 'logs');
|
|
264
|
+
if (existsSync(logsDir)) {
|
|
265
|
+
for (const name of readdirSync(logsDir)) {
|
|
266
|
+
const full = join(logsDir, name);
|
|
267
|
+
if (statSync(full).isFile() && !declared.has(full)) {
|
|
268
|
+
result.push({ localPath: full, role: 'runtime_log', access: { kind: 'open' } });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// 4. Always add system_snapshot tarball of the full workingDir.
|
|
274
|
+
// Deterministic filename inside workingDir so retries produce the same CID.
|
|
275
|
+
const SNAPSHOT_FILENAME = 'system_snapshot.tar.gz';
|
|
276
|
+
const tarballPath = join(workingDir, SNAPSHOT_FILENAME);
|
|
277
|
+
try {
|
|
278
|
+
await createWorkdirTarball(workingDir, tarballPath, SNAPSHOT_FILENAME);
|
|
279
|
+
result.push({
|
|
280
|
+
localPath: tarballPath,
|
|
281
|
+
role: 'system_snapshot',
|
|
282
|
+
metadata: { description: 'Full workingDir snapshot' },
|
|
283
|
+
access: { kind: 'open' },
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
console.warn(`[restorer-engine] workingDir tarball creation failed (non-fatal): ${err instanceof Error ? err.message : err}`);
|
|
288
|
+
}
|
|
289
|
+
return result;
|
|
290
|
+
}
|
|
291
|
+
// ── Upload pipeline ───────────────────────────────────────────────────────────
|
|
292
|
+
/**
|
|
293
|
+
* Upload all collected artifacts to IPFS — NO registration.
|
|
294
|
+
*
|
|
295
|
+
* Returns an array of `UploadedArtifact` (= Artifact + localPath).
|
|
296
|
+
* Registration is deferred until the manifest CID is known; call
|
|
297
|
+
* `registerArtifacts(uploaded, parentManifestCid, deps)` afterwards.
|
|
298
|
+
*/
|
|
299
|
+
export async function uploadArtifacts(artifacts, deps) {
|
|
300
|
+
const results = [];
|
|
301
|
+
for (const art of artifacts) {
|
|
302
|
+
try {
|
|
303
|
+
const content = readFileSync(art.localPath);
|
|
304
|
+
const hash = sha256Hex(content);
|
|
305
|
+
// Upload raw bytes as base64-encoded JSON envelope so IPFS receives JSON
|
|
306
|
+
// (consistent with how other uploads work via uploadToIpfs).
|
|
307
|
+
const envelope = {
|
|
308
|
+
role: art.role,
|
|
309
|
+
sha256: hash,
|
|
310
|
+
data: content.toString('base64'),
|
|
311
|
+
};
|
|
312
|
+
const cid = await uploadToIpfs(deps.ipfsRegistryUrl, envelope);
|
|
313
|
+
const uploaded = {
|
|
314
|
+
cid,
|
|
315
|
+
sha256: hash,
|
|
316
|
+
role: art.role,
|
|
317
|
+
metadata: art.metadata,
|
|
318
|
+
tags: art.tags,
|
|
319
|
+
access: art.access,
|
|
320
|
+
localPath: art.localPath,
|
|
321
|
+
};
|
|
322
|
+
results.push(uploaded);
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
console.error(`[restorer-engine] artifact upload failed for ${art.localPath}: ${err instanceof Error ? err.message : err}`);
|
|
326
|
+
// Non-fatal: continue with remaining artifacts
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return results;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Register already-uploaded artifacts with a back-pointer to the parent manifest CID.
|
|
333
|
+
*
|
|
334
|
+
* Call this AFTER the manifest has been assembled, signed, and uploaded so that
|
|
335
|
+
* `parentManifestCid` is known (spec §6.1 requirement). Fire-and-forget.
|
|
336
|
+
*/
|
|
337
|
+
export function registerArtifacts(uploaded, parentManifestCid, deps) {
|
|
338
|
+
if (!deps.registerArtifact)
|
|
339
|
+
return;
|
|
340
|
+
for (const art of uploaded) {
|
|
341
|
+
deps.registerArtifact({
|
|
342
|
+
id: art.cid,
|
|
343
|
+
title: art.localPath.split('/').pop() ?? art.cid,
|
|
344
|
+
tags: art.tags ?? [art.role],
|
|
345
|
+
outcome: 'uploaded',
|
|
346
|
+
parentManifestCid,
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=packaging.js.map
|