From bc6494cd1b290783ef3aef0763bf28d1deabf4b0 Mon Sep 17 00:00:00 2001 From: tegwick Date: Sun, 11 Oct 2026 04:28:38 +0200 Subject: [PATCH] Bind concrete protected release executor and final owner-reviewed decision packet Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade --- WORK-RECORDS.md | 13 + .../README.md | 4 +- .../combined-source-boundary-validation.json | 26 + .../decision-packet.md | 10 +- .../execution-bundle.json | 48 + .../initial-653b68c3/execution-bundle.json | 48 + .../initial-653b68c3/execution/README.md | 17 + .../initial-653b68c3/execution/actuator.py | 343 +++ .../execution/authority_journal.py | 146 + .../execution/execution-plan.json | 49 + .../execution/native_program.py | 2 + .../execution/packet-refinement.json | 22 + .../execution/receipt_safety.py | 15 + .../root-authority-receipt-template.json | 19 + .../execution/test_execution.py | 296 ++ .../execution/validation.json | 14 + .../initial-653b68c3/original-manifest.json | 79 + .../execution/README.md | 21 + .../execution/actuator.py | 353 +++ .../execution/authority_journal.py | 147 + .../execution/execution-plan.json | 51 + .../execution/native_program.py | 2 + .../execution/packet-refinement.json | 39 + .../execution/receipt_safety.py | 15 + .../root-authority-receipt-template.json | 19 + .../execution/test_execution.py | 367 +++ .../execution/validation.json | 20 + .../initial-b1e3e66b/archive-map.json | 314 ++ .../initial-b1e3e66b/original-manifest.json | 548 ++++ .../deploy/lifecycle/admission.candidate.json | 52 + .../deploy/lifecycle/service.candidate.json | 800 ++++++ .../README.md | 7 + .../base-image-config.json | 146 + .../base-trivy-full.json | 2362 +++++++++++++++ .../candidate-admission.json | 52 + .../candidate-deployment.json | 267 ++ .../change_guard.py | 68 + .../check_installed.py | 21 + .../decision-packet.md | 33 + .../fresh-preflight-validation.json | 50 + .../image-config.json | 222 ++ .../image-manifest.json | 56 + ...nherited-vulnerability-follow-through.json | 21 + .../original-packet-manifest.json | 254 ++ .../deploy/lifecycle/admission.candidate.json | 52 + .../deploy/lifecycle/service.candidate.json | 800 ++++++ .../README.md | 7 + .../base-image-config.json | 146 + .../base-trivy-full.json | 2362 +++++++++++++++ .../candidate-admission.json | 52 + .../candidate-deployment.json | 267 ++ .../change_guard.py | 41 + .../check_installed.py | 21 + .../decision-packet.md | 29 + .../fresh-preflight-validation.json | 47 + .../image-config.json | 222 ++ .../image-manifest.json | 56 + ...nherited-vulnerability-follow-through.json | 21 + .../intake.json | 261 ++ .../lifecycle-commands.json | 277 ++ .../memo.json | 141 + .../native-backup-restore-protocol.md | 40 + .../native-preflight-initial-refusal.json | 5 + .../native-preflight-tracking-id-refusal.json | 9 + .../native-preflight.json | 43 + .../preflight-inputs.json | 14 + .../preflight.py | 23 + .../proposal.json | 50 + .../published-verification.json | 58 + .../registry-proof.json | 47 + .../rollback-admission.json | 52 + .../rollback-deployment.json | 267 ++ .../sbom.cdx.json | 2560 +++++++++++++++++ .../sealed-live-deployment.json | 286 ++ .../security-summary.json | 35 + .../test_change_guard.py | 66 + .../trivy-full.json | 2391 +++++++++++++++ .../validation.json | 20 + .../verify_registry.py | 125 + ...ifecycle-consumer-pin-repair.md.source.txt | 153 + .../intake.json | 261 ++ .../lifecycle-commands.json | 277 ++ .../memo.json | 141 + .../native-backup-restore-protocol.md | 52 + .../native-preflight-initial-refusal.json | 5 + .../native-preflight-tracking-id-refusal.json | 9 + .../native-preflight.json | 43 + .../preflight-inputs.json | 16 + .../preflight.py | 25 + .../proposal.json | 55 + .../published-verification.json | 64 + .../registry-proof.json | 47 + .../review-refinement.json | 199 ++ .../rollback-admission.json | 52 + .../rollback-deployment.json | 267 ++ .../sbom.cdx.json | 2560 +++++++++++++++++ .../sealed-live-deployment.json | 286 ++ .../sealed-native-dependencies.json | 52 + .../security-summary.json | 35 + .../sqlite_readonly.py | 39 + .../test_change_guard.py | 91 + .../test_preflight_optimization.py | 37 + .../test_sqlite_readonly.py | 47 + .../trivy-full.json | 2391 +++++++++++++++ .../validation.json | 26 + .../verify_registry.py | 125 + ...9-lifecycle-consumer-pin-repair.source.txt | 156 + .../intake.json | 26 +- .../lifecycle-commands.json | 32 +- .../memo.json | 16 +- .../native-backup-restore-protocol.md | 18 +- .../proposal.json | 38 +- .../validation.json | 37 +- ...1-purpose-actuator-product-owner-review.md | 80 + ...-11-purpose-combined-packet-product-ack.md | 63 + intakes/intakes.md | 1 + workplans/ADHOC-2026-10-11.md | 28 + ...D-WP-0009-lifecycle-consumer-pin-repair.md | 1 + 118 files changed, 26156 insertions(+), 46 deletions(-) create mode 100644 docs/evidence/2026-10-11-purpose-image-release/combined-source-boundary-validation.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-bundle.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution-bundle.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/README.md create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/actuator.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/authority_journal.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/execution-plan.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/native_program.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/packet-refinement.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/receipt_safety.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/root-authority-receipt-template.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/test_execution.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/validation.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/original-manifest.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/README.md create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/actuator.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/authority_journal.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/execution-plan.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/native_program.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/packet-refinement.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/receipt_safety.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/root-authority-receipt-template.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/test_execution.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/execution/validation.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/archive-map.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/original-manifest.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/deploy/lifecycle/admission.candidate.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/deploy/lifecycle/service.candidate.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/original-packet-manifest.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/review-refinement.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-native-dependencies.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sqlite_readonly.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_preflight_optimization.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_sqlite_readonly.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py create mode 100644 docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.source.txt create mode 100644 docs/reviews/2026-10-11-purpose-actuator-product-owner-review.md create mode 100644 docs/reviews/2026-10-11-purpose-combined-packet-product-ack.md diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index 3e64c3f..ce2bbeb 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -9,13 +9,20 @@ | Kind | ID | Status | Lane | Source | | --- | --- | --- | --- | --- | | workplan | INFD-WP-ADHOC-2026-10-03 | finished | — | workplans/ADHOC-2026-10-03.md | +| workplan | INFD-WP-ADHOC-2026-10-11 | finished | — | workplans/ADHOC-2026-10-11.md | | workplan | INFD-WP-0003 | finished | — | workplans/INFD-WP-0003-my-decisions-overview.md | | workplan | INFD-WP-0005 | finished | — | workplans/INFD-WP-0005-frictionless-decision-intake.md | | workplan | INFD-WP-0006 | finished | — | workplans/INFD-WP-0006-fresh-review-authentication.md | | workplan | INFD-WP-0007 | finished | — | workplans/INFD-WP-0007-decision-lifecycle-service.md | | workplan | INFD-WP-0008 | backlog | — | workplans/INFD-WP-0008-lifecycle-expansion-contracts.md | +| workplan | INFD-WP-0009 | active | — | workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md | | task | INFD-WP-ADHOC-2026-10-03-T01 | done | — | workplans/ADHOC-2026-10-03.md | | task | INFD-WP-ADHOC-2026-10-03-T02 | done | — | workplans/ADHOC-2026-10-03.md | +| task | INFD-WP-ADHOC-2026-10-11-T01 | done | — | workplans/ADHOC-2026-10-11.md | +| task | INFD-WP-ADHOC-2026-10-11-T02 | done | — | workplans/ADHOC-2026-10-11.md | +| task | INFD-WP-ADHOC-2026-10-11-T03 | done | — | workplans/ADHOC-2026-10-11.md | +| task | INFD-WP-ADHOC-2026-10-11-T04 | done | — | workplans/ADHOC-2026-10-11.md | +| task | INFD-WP-ADHOC-2026-10-11-T05 | done | — | workplans/ADHOC-2026-10-11.md | | task | INFD-WP-0003-T01 | done | — | workplans/INFD-WP-0003-my-decisions-overview.md | | task | INFD-WP-0003-T02 | done | — | workplans/INFD-WP-0003-my-decisions-overview.md | | task | INFD-WP-0003-T03 | done | — | workplans/INFD-WP-0003-my-decisions-overview.md | @@ -43,6 +50,11 @@ | task | INFD-WP-0008-T02 | todo | — | workplans/INFD-WP-0008-lifecycle-expansion-contracts.md | | task | INFD-WP-0008-T03 | todo | — | workplans/INFD-WP-0008-lifecycle-expansion-contracts.md | | task | INFD-WP-0008-T04 | todo | — | workplans/INFD-WP-0008-lifecycle-expansion-contracts.md | +| task | INFD-WP-0009-T01 | done | — | workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md | +| task | INFD-WP-0009-T02 | done | — | workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md | +| task | INFD-WP-0009-T03 | done | — | workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md | +| task | INFD-WP-0009-T04 | progress | — | workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md | +| task | INFD-WP-0009-T05 | todo | — | workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md | | intake | INFD-IN-0001 | closed | blue | intakes/intakes.md | | intake | INFD-IN-0002 | closed | blue | intakes/intakes.md | | intake | INFD-IN-0003 | closed | blue | intakes/intakes.md | @@ -51,3 +63,4 @@ | intake | INFD-IN-0006 | closed | blue | intakes/intakes.md | | intake | INFD-IN-0007 | open | blue | intakes/intakes.md | | intake | INFD-IN-0008 | open | blue | intakes/intakes.md | +| intake | INFD-IN-0009 | open | blue | intakes/intakes.md | diff --git a/docs/evidence/2026-10-11-purpose-image-release/README.md b/docs/evidence/2026-10-11-purpose-image-release/README.md index bdef8cc..a21f828 100644 --- a/docs/evidence/2026-10-11-purpose-image-release/README.md +++ b/docs/evidence/2026-10-11-purpose-image-release/README.md @@ -4,4 +4,6 @@ Actual CI task11484/run3 at3e4bcb26 published immutable763c. The registry proof, This stage prepares owner admission/service source candidates, protected native backup/restore protocol and20document offline-valid informed-decision memo. Native workload remains7f5/config6c. No native backup/export/restore, image change or human approval occurred. Initial failed CI/native preflight evidence remains in owner history. The original36path7c packet is fully archived and remains refinement-required, not approved. The amended gate adds pre-open stdlib readonlyschema5/integrity/count checks, explicitlocal/remote optimizationrefusal and actualCM/PVC UID/content/custody seals. The immutable original native capture stays sealed; future preflight requires unique output outside the sealed packet and owner source tree. -The memo's actual rawscan attachment plus hash-linked rawSBOM/base scan totalamended boundedpacketbytes (under256KiB); source/image receipt binds raw evidence filenames and hashes. Full owner source manifest includes all raw evidence and helper/tests. Source preparation or local checks do not approve native execution. +The memo directly attaches exact execution-bundle.json in place of the rawscan, with unchanged rawscan/SBOM/base scan hash-linked by published-verification.json; twenty documents remain under256KiB; source/image receipt binds raw evidence filenames and hashes. Full owner source manifest includes all raw evidence and helper/tests. Source preparation or local checks do not approve native execution. + +The original78pathb1 packet is archived under initial-b1e3e66b with original manifest and exact source map. No previously recorded capture or product/Platform review is relabelled as review of this new packet. Exact23path mechanical helper review agreement is separate from founder approval. The all-phase deadline, isolated UID0 initializer, four Git blobs, rollback-verify and native_provider=false limitation are explicitly refined in the new decision packet/protocol. diff --git a/docs/evidence/2026-10-11-purpose-image-release/combined-source-boundary-validation.json b/docs/evidence/2026-10-11-purpose-image-release/combined-source-boundary-validation.json new file mode 100644 index 0000000..07ebe8c --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/combined-source-boundary-validation.json @@ -0,0 +1,26 @@ +{ + "source_hash_negative_cases": [ + { + "case": "executor:authority_journal.py", + "refused_before_authority_or_dispatch": true + }, + { + "case": "case:sealed-native-dependencies.json", + "refused_before_authority_or_dispatch": true + }, + { + "case": "owner:deploy/lifecycle/kustomization.yaml", + "refused_before_authority_or_dispatch": true + }, + { + "case": "owner:deploy/lifecycle/registries.candidate.json", + "refused_before_authority_or_dispatch": true + } + ], + "combined_manifest_hashes_pass": true, + "exact_reviewed_23_helper_paths_pass": true, + "original_scan_sbom_base_evidence_hashes_pass": true, + "all_execution_plan_case_hashes_pass": true, + "native_actions_executed": false, + "data_backup_export_restore_executed": false +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md b/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md index ccb5cbe..11fb110 100644 --- a/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md +++ b/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md @@ -2,7 +2,7 @@ ## Requested decision -Approve the exact purpose-only image rollout and protected real-data backup/restore protocol for the existing Informed Decision service on railiance01. This request is separate from the already approved config-only repair. Only the existing Deployment image changes through the owner's manual Argo workflow, with prune disabled. Runtime ConfigMap `informed-decision-runtime-6c221878d051`, schema5, PVC, credentials, audience, policies, registries, access, replica1 and Recreate strategy remain fixed. Execute by 2026-10-12T23:59:59Z, after refreshed sealed-source/UID/configuration checks and backup/restore gates. Expiry stops authorization for an unstarted release; it does not install a controller or automatically roll back an already released image. +Approve the exact purpose-only image rollout and protected real-data backup/restore protocol for the existing Informed Decision service on railiance01. This request is separate from the already approved config-only repair. Only the existing Deployment image changes through the owner's manual Argo workflow, with prune disabled. Runtime ConfigMap `informed-decision-runtime-6c221878d051`, schema5, PVC, credentials, audience, policies, registries, access, replica1 and Recreate strategy remain fixed. Execute by 2026-10-12T23:59:59Z, after refreshed sealed-source/UID/configuration checks and backup/restore gates. All phases, including recovery and verification, must begin before this deadline. If the window is exhausted, stop and obtain a fresh founder decision; this may delay recovery. No timer/controller automatically changes the released image. ## Artifact and known finding @@ -31,3 +31,11 @@ Proceed with this narrow release plus explicit inherited-medium follow-through, ## Independent review refinements The initial36path/20document packet at manifest7c6738b3 and submissionac41c8ae is preserved in source preparation evidence, with the failed/conditional review. Independent Platform review identified admin auto-migration, optimization bypass, and actual same-name ConfigMap/PVC replacement gaps. The amended packet adds pre-open stdlib read-only schema/integrity/count gates, explicit local/remote optimization refusal, and independently sealed actual native config/PVC custody checks. These are refinements in the same proposal/trial, with no original or amended founder approval claimed. + +## Mechanically bound helper and recovery refinement + +The directly attached execution-bundle.json binds exact supervised helper sources, plan, tests and PENDING authority template. It verifies all four committed owner Kustomize inputs and rejects present automated:{} as well as source overrides. Root must freshly authenticate the exact founder native disposition before every phase; receipt bookkeeping is not an autonomous signed grant. The same proposal/trial preserves the earlier36path7c packet, amended78pathb1 packet and original11file653 helper plus conditional review findings. + +The offline copy uses one UID0/CAP_CHOWN-only initializer confined to the NEW nonce-bound local volume, exact candidate image, networknone/readonlyroot/no-newprivileges/CPU1/128Mi, no host/livePVC/config/token mounts. All following pre-open/admin/post-open checks are UID10001. Post-admin readonly schema5/integrity/counts must match the frozen snapshot and original snapshot SHA must remain unchanged. Rollback dispatch never requires the failing candidate to be Ready or opens its database; seals/source/image pair/admission CAS still gate it. A separate rollback-verify proves recovered old-image Ready1/scoped operation/schema5 retained-current-DB integrity. Same-phase retries are refused after ambiguous outcomes. + +Raw scan/SBOM/base-scan bytes remain retained unchanged, hash-bound by the directly attached published-verification receipt; the bundle replaces only the direct raw scan attachment to stay within twenty documents. Known fixable inherited MEDIUM and T05 follow-through remain visible. Ten installed synthetic checks, including those later on actual placement, explicitly have native_provider=false. Actual provider/PDP authority evidence is a distinct T04 completion gate and is not supplied by these checks. Source preparation basis e0359bcb6cdfad9ab3e868054121fe0cebec2d68 plus9268c9ac0bbee508fe35c0b90dcefef4c24da2f5 is recorded; the final applied owner commit must be pinned before execution. diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-bundle.json b/docs/evidence/2026-10-11-purpose-image-release/execution-bundle.json new file mode 100644 index 0000000..70b5c80 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-bundle.json @@ -0,0 +1,48 @@ +{ + "kind": "informed-decision.execution-source-bundle", + "version": 1, + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "files": { + "README.md": { + "sha256": "a6ecdabebce12eeafea61173edb6e6d0e349a76e366546978e2ed02e7b109df2", + "content": "# Supervised Informed Decision purpose release executor — unapproved preparation\n\nNo native database read, backup/export/restore or workload action has been run. This source implements the reviewed protocol; its additional mechanical details need peer review and an amended hash-bound packet before first human submission. The original78path packet/reviews remain historical technical agreement, not founder approval of this executor.\n\nRun one phase at a time only after the coordinator has freshly authenticated the exact founder disposition at the existing fixed Informed Decision origin. Root writes the protected0600 fixed files `/tmp/security-infd-purpose-root-authority.json` and `/tmp/security-infd-purpose-native-outcome-latest.json`. The receipt template is PENDING and cannot authorize anything. The helper checks exact nested confirmed person/platform-root ACCEPT version1, original memo identity/current memo SHA, source commit, plan SHA and freshness120seconds. This is supervised receipt bookkeeping, not cryptographic provider verification, a signed grant or agent autonomy promotion. Root/harness supervision remains the authority boundary. Never synthesize an approval receipt from a technical review or caller assertion.\n\nInvocation after actual approval: `python3 execution/actuator.py --phase --root-authority-receipt /tmp/security-infd-purpose-root-authority.json --root-native-outcome /tmp/security-infd-purpose-native-outcome-latest.json --source-revision `. Order: drill-backup → drill-copy → offline-verify → cleanup-offline → cutover-backup → cutover-copy → release → verify. Rollback is a distinct authorized recovery after a recorded release attempt, followed by rollback-verify. Rollback dispatch needs no Ready Pod or candidate database exec: sealed Deployment/CM/PVC/source/image pair and admission CAS remain mandatory. Its acknowledgment is not recovery completion; rollback-verify separately requires Ready1 of the old image, succeeded exact scoped operation and readonly schema5/integrity/count proof of the current retained database. Root refreshes actual native acceptance immediately before each phase.\n\nThe private ignored Custodian custody parent `.private-backups` must already exist,0700 owned by the workstation agent user; the exact case child20261011-infd-purpose-r1 is created only after authority checks. Native parent `/data/private/purpose-overlay-r1` is uniquely created by UID10001 for drill/cutover SQLite-consistent snapshots, each0600/nonsymlink/single-link. The attached stdlib readonly checker must report schema5/integrity/counts before any Store/admin on native source or offlineclone. Invalid states/count shapes and all raw child outputs are withheld. Main-only snapshot closure is verified before binary transfer; stdin/stdout snapshot bytes reach only private files or the isolated restore copy, never tool/chat/log output. Streams stop beyond frozen byte count/512MiB; failures retain partial private evidence.\n\nNew private offline volume `infd-purpose-r1-restore-20261011` is created only on the pinned local workstation Docker socket/engine bnt-lap001, with localdriver/nooptions and attemptnonce labels. One-time initializer runs exact763c as UID0 with only CAP_CHOWN, networknone/read-onlyroot/no-newprivileges, one NEW namedvolume mount, no host/livePVC/credential/config mounts. It receives only the protected snapshot on stdin, verifies bytes, sets folder0700/file0600 owned10001. Then UID10001 performs readonly pre-open validation, `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite`, never the service entrypoint. A second UID10001/network-none readonly integrity/schema/count check after admin must exactly equal the frozen snapshot proof, and the original protected snapshot SHA must remain unchanged. Cleanup compares exact nonce/creation identity and removes only this clone volume, retaining all native/offcluster originals. CPU1/memory128MiB; private offcluster capacity at least1GiB+16MiB and native estimated two/one-snapshot headroom required.\n\nEvery phase fsyncs RUNNING intent before dispatch. Any failure/interruption/ambiguous result remains UNCERTAIN; same-phase retry is refused. Separate operator diagnosis and any needed recovery are recorded; neither snapshots nor unresolved/new records are removed to make checks green. Frozen snapshot/clone counters must agree; live post-cutover/rollback counters can include legitimate concurrent commits/state transitions.\n\nExisting Application UID and actual Deployment/Pod/CM/PVC custody/source are checked. All four owner render Git blobs must match; overrides/plugins/multiple sources and even automated:{} are rejected. The existing Application.operation API is used (native argocd CLI is absent), with server dry-run, resourceVersion/UID/source tests, one Deployment only, prune=false. Dispatch acknowledgment is not rollout completion. Verify requires exact succeeded operation/controller generation/Ready1, same schema5 DB, actual installed hash/mode/UID and10purpose checks plus bounded localhosthealth/readiness. Purpose transport remains synthetic and is explicitly not a native PDP authority test. Rollback pins prior7db/7f5 through the same scoped workflow and retains the current live database; it never restores an older snapshot over later writes.\n\nSixteen synthetic tests pass against frozen case metadata: authority/expiry/actor/ambiguity refusals, crash intent/no retry/order, credential-output withholding, private bounded binarycopy, volume recreation cleanup refusal, source/automation/CM/PVC/Ready drift, pre-open gate refusal and exact Deployment-only operation/dry-run. These are source tests, not native backup or release proof.\n\nAll phases, including recovery and verification, are bounded by 2026-10-12T23:59:59Z. This explicitly refines the earlier packet deadline wording for unstarted release: the helper does not extend authority past the deadline. Start sufficiently early to complete drill/cutover/recovery; after expiry stop and obtain a fresh founder decision. This may delay recovery if the window is exhausted, and must be disclosed before acceptance.\n\nThe initial 11-file helper freeze SHA653b68c3891c066f40d104bfc67a35da5e436605cd99afd52fbac4b47a9553fe and independent conditional findings remain archived under execution-history/initial-653b68c3. This refinement is the same proposal/trial; no native execution or human acceptance has occurred.\n" + }, + "actuator.py": { + "sha256": "6b9d6439862454f261ee77f05b26519f8109599b1f67078bc4e1f7c7c4061ba5", + "content": "\"\"\"One fixed supervised phase; never run this during source preparation.\"\"\"\nimport argparse\nimport hashlib\nimport json\nimport os\nfrom pathlib import Path\nimport re\nimport selectors\nimport stat\nimport subprocess\nimport sys\nimport time\n\nif sys.flags.optimize:\n raise SystemExit('optimized interpreter refused')\n\nPHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline',\n 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback', 'rollback-verify')\n\n\ndef require(value, reason):\n if not value:\n raise ValueError(reason)\n\n\ndef sha(path):\n digest = hashlib.sha256()\n with Path(path).open('rb') as stream:\n for block in iter(lambda: stream.read(1024**2), b''):\n digest.update(block)\n return digest.hexdigest()\n\n\ndef private(path, directory=False):\n info = Path(path).lstat()\n require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode))\n and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600)\n and (directory or info.st_nlink == 1), 'private owned custody required')\n\nROOT = Path(__file__).resolve().parent\nCASE = ROOT.parent\nOWNER = Path('/home/worsch/informed-decision')\nCUSTODIAN = Path('/home/worsch/the-custodian')\nCUSTODY = CUSTODIAN / '.private-backups/20261011-infd-purpose-r1'\nSOCKET = 'unix:///var/run/docker.sock'\nIMAGE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a'\nVOLUME = 'infd-purpose-r1-restore-20261011'\nMAX_BYTES = 512 * 1024**2\n\n\ndef run(argv, body=None, timeout=90):\n return subprocess.run(argv, input=body, text=True, capture_output=True, timeout=timeout)\n\n\ndef json_result(result):\n try:\n value = json.loads(result.stdout)\n except (ValueError, TypeError):\n raise ValueError('safe phase receipt unavailable; outcome uncertain') from None\n require(result.returncode == 0 and isinstance(value, dict) and value.get('all_checks_pass') is True,\n 'phase did not verify complete; raw output withheld; no retry')\n permitted = {'phase', 'all_checks_pass', 'raw_output_withheld', 'native_approval_verified_by_root',\n 'native_authenticated_grant', 'source_readonly_baseline', 'snapshot_readonly',\n 'snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'native_parent_private',\n 'native_uid', 'pod_name', 'pod_uid', 'live_readonly_schema_integrity_counts',\n 'live_counts_may_include_concurrent_commits', 'operation_requested', 'source_revision',\n 'resources', 'prune', 'rollout_verified', 'latest_live_database_retained',\n 'client_diff_sha256', 'native_rollout_verified', 'current_schema5_database_retained',\n 'private_copy_verified', 'installed_purpose_checks', 'policy_sha256',\n 'policy_mode', 'policy_uid', 'health_statuses', 'native_provider_probe', 'recovery_verification'}\n require(set(value) <= permitted, 'unexpected output fields withheld')\n from receipt_safety import counts\n for name in ('source_readonly_baseline', 'snapshot_readonly', 'live_readonly_schema_integrity_counts'):\n if name in value:\n counts(value[name])\n for name in ('snapshot_sha256', 'client_diff_sha256'):\n if name in value:\n require(re.fullmatch(r'[a-f0-9]{64}', value[name]) is not None, 'invalid output digest withheld')\n if 'snapshot_bytes' in value:\n require(type(value['snapshot_bytes']) is int and 0 < value['snapshot_bytes'] <= MAX_BYTES,\n 'invalid output size withheld')\n if 'snapshot_file' in value:\n require(value['snapshot_file'] in ('drill.sqlite', 'cutover.sqlite'), 'invalid output file withheld')\n return value\n\n\ndef docker(argv, body=None, timeout=120):\n return run(['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET] + argv,\n body=body, timeout=timeout)\n\n\ndef remote(phase, revision, approved):\n # Fixed module imported only after main verifies every executor source hash.\n from native_program import PROGRAM\n payload = {'phase': phase, 'source_revision': revision, 'approval': approved,\n 'sealed': json.loads((CASE / 'sealed-live-deployment.json').read_text()),\n 'dependencies': json.loads((CASE / 'sealed-native-dependencies.json').read_text()),\n 'candidate': json.loads((CASE / 'candidate-deployment.json').read_text()),\n 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()),\n 'receipt_safety': (ROOT / 'receipt_safety.py').read_text(),\n 'purpose_checks': (CASE / 'check_installed.py').read_text(),\n 'readonly': (CASE / 'sqlite_readonly.py').read_text()}\n script = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace(\n '__GUARD__', repr((CASE / 'change_guard.py').read_text()))\n return json_result(run(['ssh', 'railiance01', 'python3 -'], script, timeout=200))\n\n\ndef copy_snapshot(phase, revision, approved, journal):\n metadata = remote(phase, revision, approved)\n backup_phase = 'drill-backup' if phase == 'drill-copy' else 'cutover-backup'\n prior = journal.data['phases'][backup_phase]['result']\n for key in ('snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'snapshot_readonly'):\n require(metadata[key] == prior[key], 'closed frozen snapshot changed')\n name = metadata['snapshot_file']\n require(name in ('drill.sqlite', 'cutover.sqlite') and 0 < metadata['snapshot_bytes'] <= MAX_BYTES,\n 'fixed bounded snapshot required')\n pod = metadata['pod_name']\n require(re.fullmatch(r'[a-z0-9]([-a-z0-9]*[a-z0-9])?', pod) is not None, 'fixed owner pod name required')\n local = CUSTODY / name\n fd = os.open(local, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600)\n # Binary snapshot stdout goes only to a private file, never tool/chat/log output.\n # Snapshot schema/count metadata was validated before opening this destination.\n with os.fdopen(fd, 'wb') as destination:\n command = ('kubectl exec -n informed-decision ' + pod +\n ' -c informed-decision -- cat /data/private/purpose-overlay-r1/' + name)\n transfer = subprocess.Popen(['ssh', 'railiance01', command], stdout=subprocess.PIPE,\n stderr=subprocess.DEVNULL)\n selector = selectors.DefaultSelector()\n selector.register(transfer.stdout, selectors.EVENT_READ)\n deadline = time.monotonic() + 150\n received = 0\n try:\n while True:\n remaining = deadline - time.monotonic()\n require(remaining > 0 and selector.select(remaining), 'private transfer timed out')\n block = os.read(transfer.stdout.fileno(), 1024**2)\n if not block:\n break\n received += len(block)\n require(received <= metadata['snapshot_bytes'] and received <= MAX_BYTES,\n 'private copy exceeds frozen snapshot size')\n destination.write(block)\n transfer.wait(timeout=max(1, deadline - time.monotonic()))\n finally:\n selector.close()\n transfer.stdout.close()\n if transfer.poll() is None:\n transfer.kill()\n transfer.wait()\n destination.flush()\n os.fsync(destination.fileno())\n private(local)\n require(transfer.returncode == 0 and local.stat().st_size == metadata['snapshot_bytes']\n and sha(local) == metadata['snapshot_sha256'], 'private copy incomplete/uncertain; retain, no retry')\n # Re-read identity/hash after transfer. This is verification, not a write retry.\n after = remote(phase, revision, approved)\n require(after['pod_uid'] == metadata['pod_uid'] and after['snapshot_sha256'] == metadata['snapshot_sha256'],\n 'source identity/snapshot changed during transfer')\n return {**metadata, 'off_cluster_private_copy_verified': True, 'snapshot_contents_output': False}\n\n\ndef offline_verify(journal):\n from receipt_safety import counts\n snapshot = CUSTODY / 'drill.sqlite'\n private(snapshot)\n previous = journal.data['phases']['drill-copy']['result']\n require(sha(snapshot) == previous['snapshot_sha256'], 'protected snapshot bytes changed')\n identity = docker(['info', '--format', '{{json .Name}}'])\n require(identity.returncode == 0 and json.loads(identity.stdout) == 'bnt-lap001',\n 'local offline Docker engine identity changed')\n listed = docker(['volume', 'ls', '--format', '{{.Name}}'])\n require(listed.returncode == 0 and VOLUME not in listed.stdout.splitlines(),\n 'disposable volume absence not verified')\n nonce = journal.data['phases']['offline-verify']['attempt_id']\n labels = {'informed-decision.case': 'infd-purpose-20261011-r1',\n 'informed-decision.use': 'offline-restore-only', 'informed-decision.attempt': nonce}\n created = docker(['volume', 'create', '--driver', 'local', '--label', 'informed-decision.case=infd-purpose-20261011-r1',\n '--label', 'informed-decision.attempt=' + nonce,\n '--label', 'informed-decision.use=offline-restore-only', VOLUME])\n require(created.returncode == 0 and created.stdout.strip() == VOLUME, 'volume creation uncertain; no retry')\n inspected = docker(['volume', 'inspect', VOLUME])\n require(inspected.returncode == 0, 'new volume identity unavailable')\n volume = json.loads(inspected.stdout)\n require(len(volume) == 1 and volume[0]['Name'] == VOLUME and volume[0].get('Labels') == labels\n and volume[0].get('Driver') == 'local' and not volume[0].get('Options')\n and volume[0].get('Scope') == 'local', 'new isolated volume identity changed')\n identity = {key: volume[0][key] for key in ('Name', 'Labels', 'Driver', 'Scope', 'CreatedAt')}\n journal.note('offline-verify', 'created_volume_identity', identity)\n # One-time UID0/CAP_CHOWN initialization is isolated to the NEW named volume.\n # No host/live PVC/config/token mount exists; this detail needs packet review.\n initializer = \"\"\"import hashlib,os,stat,sys\nif sys.flags.optimize:raise RuntimeError('optimized interpreter refused')\nfolder='/restore';expected=EXPECTED\nif os.listdir(folder):raise ValueError('new empty private volume required')\nos.chmod(folder,0o700)\nfd=os.open(folder+'/review.sqlite',os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW|os.O_WRONLY,0o600)\ndigest=hashlib.sha256();size=0\nwith os.fdopen(fd,'wb') as target:\n while True:\n block=sys.stdin.buffer.read(1024**2)\n if not block:break\n size+=len(block)\n if size>512*1024**2:raise ValueError('private restore size exceeds bound')\n target.write(block);digest.update(block)\n target.flush();os.fsync(target.fileno())\nif digest.hexdigest()!=expected:raise ValueError('private copied snapshot differs')\nos.chown(folder+'/review.sqlite',10001,10001);os.chown(folder,10001,10001)\nprint('{\"all_checks_pass\":true,\"private_copy_verified\":true}')\n\"\"\".replace('EXPECTED', repr(previous['snapshot_sha256']))\n with snapshot.open('rb') as source:\n argv = ['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET,\n 'run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m',\n '--user', '0:0', '--cap-drop', 'ALL', '--cap-add', 'CHOWN',\n '--security-opt', 'no-new-privileges', '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore',\n '--entrypoint', 'python', IMAGE, '-c', initializer]\n copied = subprocess.run(argv, stdin=source, text=True, capture_output=True, timeout=150)\n json_result(copied)\n options = ['run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m',\n '--user', '10001:10001', '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges',\n '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore']\n readonly = docker(options + ['--entrypoint', 'python', IMAGE, '-', '--db', '/restore/review.sqlite'],\n (CASE / 'sqlite_readonly.py').read_text())\n require(readonly.returncode == 0, 'offline pre-open schema/integrity gate refused; never open Store')\n checked = counts(json.loads(readonly.stdout))\n require(checked == previous['snapshot_readonly'], 'frozen snapshot/clone readonly counts differ')\n admin = docker(options + ['--entrypoint', 'informed-decision-admin', IMAGE,\n 'inspect', '--db', '/restore/review.sqlite'])\n require(admin.returncode == 0, 'offline admin result uncertain')\n admin_counts = json.loads(admin.stdout)\n require(admin_counts == {key: checked[key] for key in ('schema_version', 'lifecycle', 'outbox', 'submissions')},\n 'offline admin changed frozen snapshot counters')\n # Admin Store construction must not silently alter schema/integrity/counters.\n post = docker(options + ['--entrypoint', 'python', IMAGE, '-', '--db', '/restore/review.sqlite'],\n (CASE / 'sqlite_readonly.py').read_text())\n require(post.returncode == 0, 'offline post-admin readonly integrity gate refused')\n post_checked = counts(json.loads(post.stdout))\n require(post_checked == checked == previous['snapshot_readonly'],\n 'offline admin altered frozen snapshot proof')\n private(snapshot)\n require(sha(snapshot) == previous['snapshot_sha256'], 'original protected snapshot changed during drill')\n return {'all_checks_pass': True, 'offline_volume': VOLUME, 'offline_readonly': checked,\n 'offline_post_admin_readonly': post_checked, 'original_snapshot_hash_unchanged': True,\n 'created_volume_identity': identity,\n 'admin_counts': admin_counts, 'network': 'none', 'runtime_tokens_or_config_mounted': False,\n 'service_entrypoint_started': False, 'original_snapshot_retained': True}\n\n\ndef cleanup_offline(journal):\n inspected = docker(['volume', 'inspect', VOLUME])\n require(inspected.returncode == 0, 'owned disposable volume identity unverified')\n value = json.loads(inspected.stdout)\n expected = journal.data['phases']['offline-verify']['result']['created_volume_identity']\n require(len(value) == 1 and {key: value[0].get(key) for key in expected} == expected\n and not value[0].get('Options'), 'volume ownership/recreation changed')\n removed = docker(['volume', 'rm', VOLUME])\n require(removed.returncode == 0 and removed.stdout.strip() == VOLUME\n and docker(['volume', 'inspect', VOLUME]).returncode != 0,\n 'cleanup outcome ambiguous; do not retry')\n return {'all_checks_pass': True, 'only_disposable_offline_volume_removed': VOLUME,\n 'native_and_offcluster_original_snapshots_retained': True}\n\n\ndef main():\n parser = argparse.ArgumentParser(description=__doc__)\n parser.add_argument('--phase', choices=PHASES, required=True)\n parser.add_argument('--root-authority-receipt', type=Path, required=True)\n parser.add_argument('--root-native-outcome', type=Path, required=True)\n parser.add_argument('--source-revision', required=True)\n args = parser.parse_args()\n require(args.root_authority_receipt == Path('/tmp/security-infd-purpose-root-authority.json')\n and args.root_native_outcome == Path('/tmp/security-infd-purpose-native-outcome-latest.json'),\n 'fixed supervised receipt paths required')\n require(re.fullmatch(r'[0-9a-f]{40}', args.source_revision) is not None, 'exact source commit required')\n # Verify all prepared executor/input bytes before reading authority or dispatching.\n plan = json.loads((ROOT / 'execution-plan.json').read_text())\n require(set(plan['executor_files']) == {'actuator.py', 'authority_journal.py', 'native_program.py', 'receipt_safety.py'},\n 'fixed executor sources required')\n require(set(plan['owner_source_files']) == {'deploy/lifecycle/admission.candidate.json',\n 'deploy/lifecycle/service.candidate.json',\n 'deploy/lifecycle/kustomization.yaml',\n 'deploy/lifecycle/registries.candidate.json'},\n 'fixed owner image sources required')\n for relative, digest in plan['executor_files'].items():\n target = ROOT / relative\n require(not target.is_symlink() and sha(target) == digest, 'executor source bytes changed')\n for relative, digest in plan['case_files'].items():\n require(not Path(relative).is_absolute() and '..' not in Path(relative).parts,\n 'case source path escaped')\n target = CASE / relative\n require(not target.is_symlink() and sha(target) == digest, 'case source bytes changed')\n for relative, digest in plan['owner_source_files'].items():\n target = OWNER / relative\n require(not target.is_symlink() and sha(target) == digest, 'owner image-only source changed')\n committed = subprocess.run(['git', '-C', str(OWNER), 'show', args.source_revision + ':' + relative],\n capture_output=True)\n require(committed.returncode == 0 and hashlib.sha256(committed.stdout).hexdigest() == digest,\n 'committed owner render source differs from approved inputs')\n head = run(['git', '-C', str(OWNER), 'rev-parse', 'HEAD'])\n require(head.returncode == 0 and head.stdout.strip() == args.source_revision, 'owner source HEAD differs')\n from authority_journal import Journal, authority\n private(args.root_authority_receipt)\n private(args.root_native_outcome)\n receipt = json.loads(args.root_authority_receipt.read_text())\n require(receipt.get('native_outcome_sha256') == sha(args.root_native_outcome), 'native outcome bytes changed')\n require(receipt.get('executor_plan_sha256') == sha(ROOT / 'execution-plan.json'),\n 'root verified executor plan differs')\n approved = authority(receipt, json.loads(args.root_native_outcome.read_text()), sha(CASE / 'memo.json'),\n args.source_revision, args.phase)\n parent = CUSTODY.parent\n private(parent, directory=True)\n ignored = run(['git', '-C', str(CUSTODIAN), 'check-ignore', '--no-index', str(CUSTODY / 'drill.sqlite')])\n require(ignored.returncode == 0, 'offcluster custody is not ignored')\n if not CUSTODY.exists():\n require(args.phase == 'drill-backup', 'first approved phase must create unique private custody')\n os.mkdir(CUSTODY, 0o700)\n private(CUSTODY, directory=True)\n capacity = os.statvfs(CUSTODY)\n require(capacity.f_bavail * capacity.f_frsize >= 2 * MAX_BYTES + 16 * 1024**2,\n 'independent protected custody headroom insufficient')\n os.makedirs(CUSTODY / 'empty-docker-config', mode=0o700, exist_ok=True)\n private(CUSTODY / 'empty-docker-config', directory=True)\n require(not list((CUSTODY / 'empty-docker-config').iterdir()), 'public Docker read config must stay empty')\n journal = Journal(CUSTODY, {'proposal': plan['proposal_id'], 'source_revision': args.source_revision,\n 'memo_sha256': sha(CASE / 'memo.json'), 'plan_sha256': sha(ROOT / 'execution-plan.json')})\n try:\n journal.start(args.phase, approved) # fsynced RUNNING before any phase effect.\n if args.phase in ('drill-copy', 'cutover-copy'):\n result = copy_snapshot(args.phase, args.source_revision, approved, journal)\n elif args.phase == 'offline-verify':\n result = offline_verify(journal)\n elif args.phase == 'cleanup-offline':\n result = cleanup_offline(journal)\n else:\n result = remote(args.phase, args.source_revision, approved)\n journal.finish(args.phase, result)\n print(json.dumps(result)) # Only count/hash/identity receipts, never snapshot bytes.\n except BaseException as error:\n safe = {'all_checks_pass': False, 'phase': args.phase, 'failure_class': type(error).__name__,\n 'failure': 'fixed phase outcome uncertain; original evidence retained; no retry',\n 'raw_output_withheld': True}\n if journal.data['phases'].get(args.phase, {}).get('state') == 'RUNNING':\n journal.finish(args.phase, safe)\n print(json.dumps(safe))\n raise SystemExit(1) from None\n finally:\n journal.close()\n\n\nif __name__ == '__main__':\n try:\n main()\n except Exception:\n raise SystemExit('supervised execution refused before phase; raw output withheld') from None\n" + }, + "authority_journal.py": { + "sha256": "74d6a91169296a99fa7dac2d0902567280f910af743580ec4b454f2abf8374aa", + "content": "\"\"\"Supervised receipt bookkeeping, not an authenticated approval provider.\"\"\"\nimport datetime\nimport fcntl\nimport hashlib\nimport json\nimport os\nimport re\nfrom pathlib import Path\nimport stat\nimport uuid\n\nFOUNDER = {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'}\nMEMO_ID = 'infd-20261011-purpose-overlay-r1'\nPROPOSAL = 'INFD-WP-0009-T04/purpose-overlay-v1'\nPHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline',\n 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback', 'rollback-verify')\n\n\ndef require(value, reason):\n if not value:\n raise ValueError(reason)\n\n\ndef sha(path):\n digest = hashlib.sha256()\n with Path(path).open('rb') as stream:\n for block in iter(lambda: stream.read(1024**2), b''):\n digest.update(block)\n return digest.hexdigest()\n\n\ndef private(path, directory=False):\n info = Path(path).lstat()\n require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode))\n and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600)\n and (directory or info.st_nlink == 1), 'private owned custody required')\n\n\ndef authority(receipt, outcome, memo_sha, source_revision, phase, now=None):\n \"\"\"Root must freshly verify native outcome at fixed ORIGIN outside this helper.\n\n Receipt files/flags are not signed grants. This function checks the exact\n supervised receipt relation; existing harness/founder authority remains the\n actual permission boundary. It never authenticates a caller as human.\n \"\"\"\n now = now or datetime.datetime.now(datetime.timezone.utc)\n require(phase in PHASES, 'fixed phase required')\n require(receipt.get('proposal_id') == PROPOSAL and receipt.get('memo_id') == MEMO_ID\n and receipt.get('memo_version') == 1 and receipt.get('memo_sha256') == memo_sha\n and receipt.get('source_revision') == source_revision\n and receipt.get('activation') == 'APPROVED'\n and receipt.get('authority_mode') == 'ADMINISTER'\n and receipt.get('target') == 'realm:kubernetes/railiance01/informed-decision'\n and receipt.get('verification_method') == 'root-fixed-origin-native-readback'\n and receipt.get('runtime_authenticated_grant') is False,\n 'exact externally verified supervised receipt required')\n verified = datetime.datetime.fromisoformat(receipt['verified_at'].replace('Z', '+00:00'))\n require(verified.tzinfo is not None and 0 <= (now - verified).total_seconds() <= 120,\n 'fresh root native readback required before every phase')\n deadline = datetime.datetime.fromisoformat('2026-10-12T23:59:59+00:00')\n require(now < deadline, 'approved execution window expired')\n require(outcome.get('memo_id') == MEMO_ID and outcome.get('review', {}).get('stale') is False\n and outcome['review'].get('intake_state') == 'ready', 'native review is not ready/current')\n review_id = outcome['review']['memo_id']\n require(review_id == receipt.get('review_memo_id'), 'native review identity changed')\n accepted = [x for x in outcome.get('dispositions', [])\n if x.get('submission_state') == 'confirmed'\n and x.get('disposition', {}).get('verb') == 'accept'\n and x['disposition'].get('memo_version') == 1]\n require(len(accepted) == 1, 'one confirmed founder acceptance required')\n accepted = accepted[0]['disposition']\n require(accepted.get('actor') == FOUNDER and accepted.get('memo_id') == review_id\n and accepted.get('approval_id') == receipt.get('approval_id')\n and accepted.get('id') == receipt.get('disposition_id')\n and accepted.get('at') == receipt.get('accepted_at'), 'exact founder disposition mismatch')\n require(re.fullmatch(r'[a-f0-9-]{36}', accepted['approval_id']) is not None\n and re.fullmatch(r'disp-[a-f0-9-]{36}', accepted['id']) is not None\n and re.fullmatch(r'review-[a-f0-9-]{36}', review_id) is not None,\n 'native disposition identifiers are malformed')\n accepted_at = datetime.datetime.fromisoformat(accepted['at'].replace('Z', '+00:00'))\n require(accepted_at.tzinfo is not None and accepted_at <= verified, 'acceptance time not bounded')\n return {key: receipt[key] for key in ('approval_id', 'disposition_id', 'accepted_at', 'verified_at')}\n\n\nclass Journal:\n def __init__(self, parent, identity):\n self.parent = Path(parent)\n private(self.parent, directory=True)\n self.path = self.parent / 'execution-journal.json'\n self.lock = os.open(self.parent / 'execution.lock', os.O_CREAT | os.O_NOFOLLOW | os.O_RDWR, 0o600)\n fcntl.flock(self.lock, fcntl.LOCK_EX | fcntl.LOCK_NB)\n private(self.parent / 'execution.lock')\n if self.path.exists():\n private(self.path)\n self.data = json.loads(self.path.read_text())\n require(self.data['identity'] == identity, 'journal case/source identity changed')\n else:\n self.data = {'identity': identity, 'phases': {}}\n self.save()\n\n def save(self):\n temporary = self.parent / 'execution-journal.new'\n fd = os.open(temporary, os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW | os.O_WRONLY, 0o600)\n try:\n with os.fdopen(fd, 'w') as stream:\n json.dump(self.data, stream, indent=2)\n stream.write('\\n')\n stream.flush()\n os.fsync(stream.fileno())\n os.replace(temporary, self.path)\n directory = os.open(self.parent, os.O_DIRECTORY | os.O_RDONLY)\n try:\n os.fsync(directory)\n finally:\n os.close(directory)\n except BaseException:\n # Retain evidence rather than overwriting an uncertain durable intent.\n raise\n\n def start(self, phase, approval):\n require(phase not in self.data['phases'], 'already attempted phase; no retry')\n predecessors = dict(zip(PHASES[1:8], PHASES[:7]))\n predecessors['rollback-verify'] = 'rollback'\n if phase in predecessors:\n require(self.data['phases'].get(predecessors[phase], {}).get('state') == 'COMPLETE',\n 'preceding phase is not verified complete')\n if phase == 'rollback':\n require('release' in self.data['phases'], 'rollback requires a recorded release attempt')\n self.data['phases'][phase] = {'state': 'RUNNING', 'approval': approval,\n 'attempt_id': str(uuid.uuid4()),\n 'started_at': datetime.datetime.now(datetime.timezone.utc).isoformat()}\n self.save()\n\n def note(self, phase, key, value):\n require(self.data['phases'][phase]['state'] == 'RUNNING', 'phase intent missing')\n self.data['phases'][phase][key] = value\n self.save()\n\n def finish(self, phase, result):\n entry = self.data['phases'][phase]\n require(entry['state'] == 'RUNNING', 'phase intent missing')\n entry['result'] = result\n entry['state'] = 'COMPLETE' if result.get('all_checks_pass') is True else 'UNCERTAIN'\n self.save()\n\n def close(self):\n os.close(self.lock)\n" + }, + "execution-plan.json": { + "sha256": "f5e5fa906ff19d3a45d10dcdb2810373ae21f9cf44c0472ff2bd47d3bc3328d6", + "content": "{\n \"kind\": \"informed-decision.supervised-mechanical-release-plan\",\n \"version\": 1,\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"trial_id\": \"infd-purpose-20261011-r1\",\n \"state\": \"prepared-unapproved\",\n \"executor_files\": {\n \"actuator.py\": \"6b9d6439862454f261ee77f05b26519f8109599b1f67078bc4e1f7c7c4061ba5\",\n \"authority_journal.py\": \"74d6a91169296a99fa7dac2d0902567280f910af743580ec4b454f2abf8374aa\",\n \"native_program.py\": \"349f516a4e55f7fb47470144ce781a665fb003ebff380d054f642b22133d1cde\",\n \"receipt_safety.py\": \"5c54373f2dc4b064008225c186efb1d5afdeec36d15350bda0a12ded97602d1b\"\n },\n \"case_files\": {\n \"change_guard.py\": \"f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be\",\n \"sqlite_readonly.py\": \"eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38\",\n \"preflight-inputs.json\": \"756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06\",\n \"sealed-live-deployment.json\": \"d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362\",\n \"sealed-native-dependencies.json\": \"042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369\",\n \"candidate-deployment.json\": \"722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e\",\n \"rollback-deployment.json\": \"39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121\",\n \"check_installed.py\": \"a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad\",\n \"published-verification.json\": \"8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2\",\n \"security-summary.json\": \"0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44\"\n },\n \"owner_source_files\": {\n \"deploy/lifecycle/admission.candidate.json\": \"92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55\",\n \"deploy/lifecycle/service.candidate.json\": \"38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4\",\n \"deploy/lifecycle/kustomization.yaml\": \"1bbce81bc6758434354157f8601534320c5d0290587908fd15a6d25e3fa57f47\",\n \"deploy/lifecycle/registries.candidate.json\": \"9bad6db5fbc2178d31b04120016a41830c3552fbb9e2517b718f9bbe87cf649e\"\n },\n \"candidate_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"prior_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"source_revision\": \"must-be-exact-final-owner-HEAD-with-approved-four-Git-blobs\",\n \"phases\": [\n \"drill-backup\",\n \"drill-copy\",\n \"offline-verify\",\n \"cleanup-offline\",\n \"cutover-backup\",\n \"cutover-copy\",\n \"release\",\n \"verify\",\n \"rollback\",\n \"rollback-verify\"\n ],\n \"authorization\": \"fresh externally authenticated root fixed-origin native readback before each phase; exact confirmed platform-root disposition and current packet SHA/source commit; receipt bookkeeping is not an autonomous signed grant\",\n \"execute_by\": \"2026-10-12T23:59:59Z\",\n \"raw_output_withheld\": true,\n \"native_data_or_workload_action_executed\": false,\n \"deadline_semantics\": \"All phases including verification/recovery must begin before execute_by. No extension or automatic emergency grant; beyond deadline stop and obtain a fresh founder decision. Complete the bounded drill and rollout early enough to allow recovery within the window.\"\n}\n" + }, + "native_program.py": { + "sha256": "349f516a4e55f7fb47470144ce781a665fb003ebff380d054f642b22133d1cde", + "content": "\"\"\"Fixed remote source, passed only after exact supervised approval.\"\"\"\nPROGRAM = '\\nimport copy,datetime,hashlib,json,os,re,subprocess,sys\\nif sys.flags.optimize:raise RuntimeError(\\'optimized interpreter refused\\')\\npayload=json.loads(__PAYLOAD__)\\nexec(__GUARD__)\\nphase=payload[\\'phase\\']\\nif phase not in (\\'drill-backup\\',\\'cutover-backup\\',\\'drill-copy\\',\\'cutover-copy\\',\\'release\\',\\'verify\\',\\'rollback\\',\\'rollback-verify\\'):raise ValueError(\\'fixed native phase required\\')\\ndeadline=datetime.datetime.fromisoformat(\\'2026-10-12T23:59:59+00:00\\')\\ndef require(value,reason):\\n if not value:raise ValueError(reason)\\nrequire(datetime.datetime.now(datetime.timezone.utc)0 and size<=512*1024**2 and free>=size*(2 if action==\\'drill-backup\\' else 1)+16*1024**2,\\'bounded native snapshot capacity required\\')\\n if action==\\'drill-backup\\':\\n require(not os.path.lexists(folder),\\'native case directory must be unique\\')\\n os.mkdir(folder,0o700);os.chmod(folder,0o700)\\n private(folder,True)\\n filename=\\'drill.sqlite\\' if action==\\'drill-backup\\' else \\'cutover.sqlite\\';output=folder+\\'/\\'+filename\\n require(not os.path.lexists(output),\\'snapshot output must be unique\\')\\n admin=subprocess.run([\\'informed-decision-admin\\',\\'backup\\',\\'--db\\',db,\\'--output\\',output],capture_output=True,text=True,timeout=120)\\n require(admin.returncode==0 and json.loads(admin.stdout)=={\\'status\\':\\'backed_up\\',\\'consistent_snapshot\\':True},\\'backup completion not verified; do not retry\\')\\n private(output)\\n for suffix in (\\'-wal\\',\\'-shm\\'):\\n require(not os.path.exists(output+suffix) or os.stat(output+suffix).st_size==0,\\'snapshot is not closed main-file custody\\')\\n snapshot=counts(inspect_readonly(output))\\n size=os.stat(output).st_size;require(0 10**12\n for number in value[group].values()):\n raise ValueError('count-only receipt values refused')\n return value\n" + }, + "root-authority-receipt-template.json": { + "sha256": "15966b7c6f088a033baf1fef878ddb351de2fa2ae46b5bc710265ed172ab2813", + "content": "{\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"memo_id\": \"infd-20261011-purpose-overlay-r1\",\n \"memo_version\": 1,\n \"memo_sha256\": null,\n \"source_revision\": null,\n \"activation\": \"PENDING\",\n \"authority_mode\": \"ADMINISTER\",\n \"target\": \"realm:kubernetes/railiance01/informed-decision\",\n \"verification_method\": \"root-fixed-origin-native-readback\",\n \"runtime_authenticated_grant\": false,\n \"verified_at\": null,\n \"accepted_at\": null,\n \"review_memo_id\": null,\n \"approval_id\": null,\n \"disposition_id\": null,\n \"native_outcome_sha256\": null,\n \"executor_plan_sha256\": \"4d5530e7418f638b10ccff0e0d9a0727adc64a7f3a45907f6deb5739ad2adc85\"\n}\n" + }, + "test_execution.py": { + "sha256": "9ccf6d421bf20f0e8350f6713d6d1cee2ba199f485dcaf2558c387421d9a2b48", + "content": "\"\"\"Synthetic custody/transport tests. No native data, Docker or cluster action.\"\"\"\nimport copy\nimport datetime\nimport io\nimport json\nimport os\nfrom pathlib import Path\nimport subprocess\nimport sys\nimport tempfile\nimport unittest\nfrom unittest.mock import patch\nfrom contextlib import redirect_stdout\n\nimport actuator\nfrom authority_journal import Journal, authority\nfrom native_program import PROGRAM\nfrom receipt_safety import counts\n\nCASE = Path('/home/worsch/informed-decision/docs/evidence/2026-10-11-purpose-image-release')\nNOW = datetime.datetime(2026, 10, 11, 2, 0, tzinfo=datetime.timezone.utc)\nREVISION = 'e' * 40\nCOUNT = {'schema_version': 5, 'integrity': 'ok', 'read_only_pre_open': True, 'store_constructed': False,\n 'lifecycle': {'records': 3, 'events': 8, 'pending': 1},\n 'outbox': {'pending': 2, 'delivered': 10}, 'submissions': {'confirmed': 1, 'unresolved': 1}}\n\n\ndef accepted():\n approval = '11111111-1111-4111-8111-111111111111'\n review = 'review-22222222-2222-4222-8222-222222222222'\n disposition = 'disp-33333333-3333-4333-8333-333333333333'\n receipt = {'proposal_id': 'INFD-WP-0009-T04/purpose-overlay-v1',\n 'memo_id': 'infd-20261011-purpose-overlay-r1', 'memo_version': 1,\n 'memo_sha256': 'a' * 64, 'source_revision': REVISION, 'activation': 'APPROVED',\n 'authority_mode': 'ADMINISTER', 'target': 'realm:kubernetes/railiance01/informed-decision',\n 'verification_method': 'root-fixed-origin-native-readback', 'runtime_authenticated_grant': False,\n 'verified_at': '2026-10-11T02:00:00Z', 'accepted_at': '2026-10-11T01:59:00Z',\n 'review_memo_id': review, 'approval_id': approval, 'disposition_id': disposition}\n outcome = {'memo_id': receipt['memo_id'], 'review': {'memo_id': review, 'stale': False, 'intake_state': 'ready'},\n 'dispositions': [{'approval_id': None, 'submission_state': 'confirmed',\n 'disposition': {'verb': 'accept', 'memo_version': 1, 'memo_id': review,\n 'approval_id': approval, 'id': disposition,\n 'actor': {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'},\n 'at': receipt['accepted_at']}}]}\n return receipt, outcome\n\n\nclass AuthorityAndCustody(unittest.TestCase):\n def test_exact_nested_founder_receipt_not_top_level_approval(self):\n receipt, outcome = accepted()\n result = authority(receipt, outcome, 'a' * 64, REVISION, 'drill-backup', NOW)\n self.assertEqual(result['approval_id'], receipt['approval_id'])\n\n def test_pending_stale_wrong_actor_version_and_binding_refuse(self):\n mutations = [lambda r, o: r.update(activation='PENDING'),\n lambda r, o: r.update(memo_sha256='changed'),\n lambda r, o: r.update(source_revision='changed'),\n lambda r, o: r.update(target='other'),\n lambda r, o: r.update(verified_at='2026-10-11T01:00:00Z'),\n lambda r, o: r.update(verification_method='caller-asserted'),\n lambda r, o: r.update(runtime_authenticated_grant=True),\n lambda r, o: o['review'].update(stale=True),\n lambda r, o: o['review'].update(intake_state='pending'),\n lambda r, o: o['dispositions'][0].update(submission_state='unresolved'),\n lambda r, o: o['dispositions'][0]['disposition'].update(memo_version=2),\n lambda r, o: o['dispositions'][0]['disposition'].update(actor={'kind': 'agent', 'sub': 'platform-root'}),\n lambda r, o: o['dispositions'].append(copy.deepcopy(o['dispositions'][0]))]\n for mutate in mutations:\n with self.subTest(mutate=mutate):\n r, o = accepted()\n mutate(r, o)\n with self.assertRaises(ValueError):\n authority(r, o, 'a' * 64, REVISION, 'release', NOW)\n\n def test_expired_window_and_unknown_phase_refuse(self):\n r, o = accepted()\n with self.assertRaises(ValueError):\n authority(r, o, 'a' * 64, REVISION, 'arbitrary', NOW)\n late = datetime.datetime(2026, 10, 13, tzinfo=datetime.timezone.utc)\n r['verified_at'] = late.isoformat()\n with self.assertRaises(ValueError):\n authority(r, o, 'a' * 64, REVISION, 'rollback', late)\n\n def test_durable_intent_precedes_dispatch_and_never_retries(self):\n with tempfile.TemporaryDirectory() as directory:\n parent = Path(directory)\n os.chmod(parent, 0o700)\n journal = Journal(parent, {'case': 'fixture'})\n journal.start('drill-backup', {'approval_id': 'fixture'})\n self.assertEqual(json.loads(journal.path.read_text())['phases']['drill-backup']['state'], 'RUNNING')\n journal.close() # simulated crash before result\n recovered = Journal(parent, {'case': 'fixture'})\n with self.assertRaises(ValueError):\n recovered.start('drill-backup', {})\n with self.assertRaises(ValueError):\n recovered.start('drill-copy', {})\n recovered.close()\n\n def test_phase_order_and_uncertain_release_allows_only_distinct_recovery(self):\n with tempfile.TemporaryDirectory() as directory:\n os.chmod(directory, 0o700)\n j = Journal(directory, {'case': 'fixture'})\n with self.assertRaises(ValueError):\n j.start('release', {})\n for phase in actuator.PHASES[:6]:\n j.start(phase, {})\n j.finish(phase, {'all_checks_pass': True})\n j.start('release', {})\n j.finish('release', {'all_checks_pass': False})\n with self.assertRaises(ValueError):\n j.start('release', {})\n with self.assertRaises(ValueError):\n j.start('verify', {})\n j.start('rollback', {})\n j.finish('rollback', {'all_checks_pass': True})\n j.close()\n\n def test_secret_or_unknown_child_output_is_withheld(self):\n for body in ('not-json', '{\"all_checks_pass\":true,\"token\":\"private-value\"}',\n '{\"all_checks_pass\":true,\"snapshot_readonly\":{\"schema_version\":5}}'):\n with self.assertRaises(ValueError):\n actuator.json_result(subprocess.CompletedProcess([], 0, body, ''))\n wrong = copy.deepcopy(COUNT)\n wrong['outbox'] = {'private-row-value': 1}\n with self.assertRaises(ValueError):\n counts(wrong)\n counts(COUNT) # blocked/unresolved counts are not required to be zero.\n\n def test_binary_copy_is_bounded_private_and_never_echoed(self):\n blob = b'synthetic private fixture bytes'\n digest = __import__('hashlib').sha256(blob).hexdigest()\n metadata = {'all_checks_pass': True, 'snapshot_file': 'drill.sqlite', 'snapshot_bytes': len(blob),\n 'snapshot_sha256': digest, 'snapshot_readonly': COUNT,\n 'pod_name': 'fixture-pod', 'pod_uid': 'fixture-uid'}\n journal = type('FixtureJournal', (), {'data': {'phases': {'drill-backup': {'result': metadata}}}})()\n real_popen = subprocess.Popen\n for extra in (b'', b'oversized'):\n with self.subTest(extra=extra), tempfile.TemporaryDirectory() as folder:\n os.chmod(folder, 0o700)\n output = io.StringIO()\n\n def child(*args, **kwargs):\n return real_popen([sys.executable, '-c', 'import sys;sys.stdout.buffer.write(' + repr(blob + extra) + ')'],\n stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)\n\n with patch.object(actuator, 'CUSTODY', Path(folder)), patch.object(actuator, 'remote', return_value=metadata), \\\n patch('subprocess.Popen', side_effect=child), redirect_stdout(output):\n if extra:\n with self.assertRaises(ValueError):\n actuator.copy_snapshot('drill-copy', REVISION, {}, journal)\n else:\n result = actuator.copy_snapshot('drill-copy', REVISION, {}, journal)\n self.assertTrue(result['off_cluster_private_copy_verified'])\n self.assertEqual((Path(folder) / 'drill.sqlite').read_bytes(), blob)\n self.assertEqual(output.getvalue(), '')\n self.assertEqual((Path(folder) / 'drill.sqlite').stat().st_mode & 0o777, 0o600)\n\n def test_recreated_offline_volume_cannot_be_deleted(self):\n identity = {'Name': actuator.VOLUME, 'Labels': {'nonce': 'old'}, 'CreatedAt': 'old'}\n journal = type('FixtureJournal', (), {'data': {'phases': {\n 'offline-verify': {'result': {'created_volume_identity': identity}}}}})()\n inspected = [{**identity, 'CreatedAt': 'recreated'}]\n with patch.object(actuator, 'docker', return_value=subprocess.CompletedProcess([], 0, json.dumps(inspected), '')) as mocked:\n with self.assertRaises(ValueError):\n actuator.cleanup_offline(journal)\n self.assertEqual(mocked.call_count, 1)\n\n def test_offline_post_admin_integrity_and_original_hash_are_rechecked(self):\n for defect in ('none', 'post-integrity', 'original-hash'):\n with self.subTest(defect=defect), tempfile.TemporaryDirectory() as directory:\n folder=Path(directory);os.chmod(folder,0o700)\n snapshot=folder/'drill.sqlite';snapshot.write_bytes(b'private synthetic snapshot');os.chmod(snapshot,0o600)\n digest=actuator.sha(snapshot)\n prior={'snapshot_sha256':digest,'snapshot_readonly':COUNT}\n journal=type('FixtureJournal',(),{'data':{'phases':{'drill-copy':{'result':prior},'offline-verify':{'attempt_id':'nonce'}}},'note':lambda *args:None})()\n reads=[]\n volume={'Name':actuator.VOLUME,'Labels':{'informed-decision.case':'infd-purpose-20261011-r1','informed-decision.use':'offline-restore-only','informed-decision.attempt':'nonce'},'Driver':'local','Scope':'local','CreatedAt':'fixture','Options':None}\n def docker(argv, body=None, **kwargs):\n if argv[0]=='info':body=json.dumps('bnt-lap001')\n elif argv[:2]==['volume','ls']:body=''\n elif argv[:2]==['volume','create']:body=actuator.VOLUME\n elif argv[:2]==['volume','inspect']:body=json.dumps([volume])\n elif 'informed-decision-admin' in argv:\n body=json.dumps({key:COUNT[key] for key in ('schema_version','lifecycle','outbox','submissions')})\n if defect=='original-hash':snapshot.write_bytes(b'changed synthetic original')\n elif '--entrypoint' in argv and 'python' in argv:\n reads.append(argv);proof=copy.deepcopy(COUNT)\n if len(reads)==2 and defect=='post-integrity':proof['integrity']='corrupt'\n body=json.dumps(proof)\n else:raise AssertionError('unexpected offline command')\n return subprocess.CompletedProcess(argv,0,body,'')\n with patch.object(actuator,'CUSTODY',folder),patch.object(actuator,'CASE',CASE),patch.object(actuator,'docker',side_effect=docker),patch('subprocess.run',return_value=subprocess.CompletedProcess([],0,'{\"all_checks_pass\":true,\"private_copy_verified\":true}','')):\n if defect=='none':\n result=actuator.offline_verify(journal)\n self.assertEqual(result['offline_post_admin_readonly'],COUNT)\n self.assertTrue(result['original_snapshot_hash_unchanged'])\n else:\n with self.assertRaises(ValueError):actuator.offline_verify(journal)\n self.assertEqual(len(reads),2)\n\n\nclass FixedNativeProgram(unittest.TestCase):\n def fixture(self):\n sealed = json.loads((CASE / 'sealed-live-deployment.json').read_text())\n live = copy.deepcopy(sealed)\n live['metadata'].update(generation=42)\n live['status'] = {'readyReplicas': 1, 'updatedReplicas': 1, 'observedGeneration': 42}\n dependencies = json.loads((CASE / 'sealed-native-dependencies.json').read_text())\n cm = copy.deepcopy(dependencies['configmap'])\n cm.pop('canonical_data_sha256')\n service = json.loads((CASE / 'candidate-deployment.json').read_text())\n source_service = json.loads((CASE.parents[2] / 'deploy/lifecycle/service.candidate.json').read_text())\n cm['data'] = next(x for x in source_service['items'] if x['kind'] == 'ConfigMap')['data']\n pvc = copy.deepcopy(dependencies['pvc'])\n pvc['status'] = {'phase': 'Bound'}\n app = {'metadata': {'uid': '499868f2-eabc-4df4-ae31-b89ce58d750d', 'resourceVersion': '17'},\n 'spec': {'source': {'repoURL': 'https://forgejo.coulomb.social/coulomb/informed-decision.git',\n 'path': 'deploy/lifecycle', 'targetRevision': '7db8485ffecdebfabd77a9daec085553c74bf0bf'},\n 'destination': {'namespace': 'informed-decision', 'server': 'https://kubernetes.default.svc'}}}\n objects = {'deployment': live, 'configmap': cm, 'pvc': pvc, 'application': app}\n payload = {'phase': 'release', 'source_revision': REVISION, 'approval': {}, 'sealed': sealed,\n 'dependencies': dependencies, 'candidate': service,\n 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()),\n 'readonly': (CASE / 'sqlite_readonly.py').read_text(),'purpose_checks':(CASE/'check_installed.py').read_text(),\n 'receipt_safety': (Path(__file__).parent / 'receipt_safety.py').read_text()}\n return objects, payload\n\n def execute_fake(self, objects, payload, ambiguous=False, schema_refused=False):\n writes = []\n calls = []\n\n def fake(argv, input=None, **kwargs):\n calls.append(argv)\n if argv[:2] == ['kubectl', 'get']:\n kind = argv[2]\n if kind in objects:\n body = objects[kind]\n elif kind == 'pods':\n body = {'items': [{'metadata': {'name': 'fixture-pod', 'uid': 'pod-uid',\n 'ownerReferences': [{'kind': 'ReplicaSet', 'name': 'fixture-rs', 'uid': 'rs-uid'}]},\n 'spec': objects['deployment']['spec']['template']['spec'],\n 'status': {'phase': 'Running', 'containerStatuses': [{'name':'informed-decision','ready': True}]}}]}\n elif kind == 'replicaset':\n body = {'metadata': {'uid': 'rs-uid', 'ownerReferences': [\n {'kind': 'Deployment', 'uid': payload['sealed']['metadata']['uid']}]}}\n elif kind == 'nodes':\n body = {'items': [{'metadata': {'name': 'fixture-node'}, 'status': {\n 'addresses': [{'address': '92.205.62.239'}], 'allocatable': {'cpu': '4'},\n 'conditions': [{'type': key, 'status': 'True' if key == 'Ready' else 'False'}\n for key in ('Ready', 'MemoryPressure', 'DiskPressure', 'PIDPressure')]}}]}\n else:\n raise AssertionError('unexpected fixed metadata route')\n return subprocess.CompletedProcess(argv, 0, json.dumps(body), '')\n if argv[:2] == ['kubectl', 'exec']:\n if schema_refused:\n return subprocess.CompletedProcess(argv, 1, '', 'withheld')\n return subprocess.CompletedProcess(argv, 0, json.dumps({\n 'all_checks_pass': True, 'live_readonly_schema_integrity_counts': COUNT}), '')\n if argv[:2] == ['kubectl', 'apply']:\n admitted = copy.deepcopy(payload['sealed'])\n admitted['spec']['template']['spec']['containers'][0]['image'] = (actuator.IMAGE if payload['phase']=='release' else payload['sealed']['spec']['template']['spec']['containers'][0]['image'])\n return subprocess.CompletedProcess(argv, 0, json.dumps(admitted), '')\n if argv[:2] == ['kubectl', 'describe']:\n return subprocess.CompletedProcess(argv, 0, 'Allocated resources:\\n cpu 3460m (86%)\\n', '')\n if argv[:2] == ['kubectl', 'diff']:\n return subprocess.CompletedProcess(argv, 1, '-image: base\\n+image: candidate\\n', '')\n if argv[:2] == ['kubectl', 'patch']:\n if '--dry-run=server' not in argv:\n writes.append(json.loads(input))\n if ambiguous:\n return subprocess.CompletedProcess(argv, 1, '', 'withheld')\n return subprocess.CompletedProcess(argv, 0, 'application.argoproj.io/informed-decision\\n', '')\n raise AssertionError('unexpected command')\n\n source = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace(\n '__GUARD__', repr((CASE / 'change_guard.py').read_text()))\n output = io.StringIO()\n with patch('subprocess.run', side_effect=fake), redirect_stdout(output):\n try:\n exec(compile(source, 'fixed-native-fixture', 'exec'), {'__name__': '__fixture__'})\n except (ValueError, SystemExit):\n pass\n receipt = json.loads(output.getvalue()) if output.getvalue() else {'all_checks_pass': False}\n return receipt, writes, calls\n\n def test_only_existing_application_operation_and_deployment_are_requested(self):\n objects, payload = self.fixture()\n receipt, writes, calls = self.execute_fake(objects, payload)\n self.assertTrue(receipt['all_checks_pass'])\n self.assertFalse(receipt['rollout_verified'])\n self.assertEqual(len(writes), 1)\n operation = writes[0][-1]['value']\n self.assertFalse(operation['sync']['prune'])\n self.assertEqual(operation['sync']['resources'], [\n {'group': 'apps', 'kind': 'Deployment', 'name': 'informed-decision', 'namespace': 'informed-decision'}])\n self.assertTrue(any('--dry-run=server' in argv and argv[:2] == ['kubectl', 'patch'] for argv in calls))\n self.assertEqual(writes[0][0]['path'], '/metadata/uid')\n\n def test_source_overrides_automation_and_custody_drift_stop_before_write(self):\n mutations = [lambda o: o['application']['metadata'].update(uid='recreated'),\n lambda o: o['application']['spec'].update(syncPolicy={'automated': {}}),\n lambda o: o['application']['spec']['source'].update(kustomize={'images': ['other']}),\n lambda o: o['application']['spec'].update(sources=[{}]),\n lambda o: o['configmap']['metadata'].update(uid='recreated'),\n lambda o: o['pvc']['spec'].update(volumeName='replaced'),\n lambda o: o['deployment']['status'].update(readyReplicas=0)]\n for mutate in mutations:\n with self.subTest(mutate=mutate):\n objects, payload = self.fixture()\n mutate(objects)\n receipt, writes, calls = self.execute_fake(objects, payload)\n self.assertFalse(receipt['all_checks_pass'])\n self.assertEqual(writes, [])\n\n def test_preopen_schema_refusal_prevents_image_operation(self):\n objects, payload = self.fixture()\n receipt, writes, calls = self.execute_fake(objects, payload, schema_refused=True)\n self.assertFalse(receipt['all_checks_pass'])\n self.assertEqual(writes, [])\n\n\n def test_rollback_unready_candidate_never_reads_pod_or_database(self):\n objects, payload = self.fixture()\n payload['phase'] = 'rollback'\n objects['deployment']['status'].update(readyReplicas=0, updatedReplicas=0)\n objects['deployment']['spec']['template']['spec']['containers'][0]['image'] = actuator.IMAGE\n objects['application']['spec']['source']['targetRevision'] = REVISION\n receipt, writes, calls = self.execute_fake(objects, payload, schema_refused=True)\n self.assertTrue(receipt['all_checks_pass'])\n self.assertFalse(receipt['rollout_verified'])\n self.assertEqual(len(writes), 1)\n self.assertFalse(any(argv[:2] == ['kubectl', 'exec'] or argv[:3] == ['kubectl', 'get', 'pods'] for argv in calls))\n self.assertEqual(writes[0][-1]['value']['sync']['revision'], '7db8485ffecdebfabd77a9daec085553c74bf0bf')\n\n def test_rollback_still_refuses_custody_or_nonpair_image_drift(self):\n for defect in ('cm', 'pvc', 'image'):\n with self.subTest(defect=defect):\n objects, payload = self.fixture();payload['phase'] = 'rollback'\n objects['deployment']['status']['readyReplicas'] = 0\n if defect == 'cm':objects['configmap']['metadata']['uid'] = 'recreated'\n elif defect == 'pvc':objects['pvc']['spec']['volumeName'] = 'replaced'\n else:objects['deployment']['spec']['template']['spec']['containers'][0]['image'] = 'foreign-image'\n receipt, writes, calls = self.execute_fake(objects, payload)\n self.assertFalse(receipt['all_checks_pass']);self.assertEqual(writes, [])\n\n def test_recovery_verification_is_separate_ready_old_image_schema_proof(self):\n objects, payload = self.fixture();payload['phase'] = 'rollback-verify'\n objects['application']['status'] = {'operationState': {'phase': 'Succeeded', 'operation': {'sync': {\n 'revision': '7db8485ffecdebfabd77a9daec085553c74bf0bf', 'prune': False,\n 'resources': [{'group':'apps','kind':'Deployment','name':'informed-decision','namespace':'informed-decision'}]}}}}\n receipt, writes, calls = self.execute_fake(objects, payload)\n self.assertTrue(receipt['all_checks_pass']);self.assertTrue(receipt['recovery_verification'])\n self.assertEqual(writes, [])\n self.assertTrue(any(argv[:2]==['kubectl','exec'] for argv in calls))\n objects['deployment']['status']['readyReplicas'] = 0\n receipt, writes, calls = self.execute_fake(objects,payload)\n self.assertFalse(receipt['all_checks_pass'])\n\n def test_ambiguous_patch_is_never_retried(self):\n objects, payload = self.fixture()\n receipt, writes, calls = self.execute_fake(objects, payload, ambiguous=True)\n self.assertFalse(receipt['all_checks_pass'])\n self.assertEqual(len(writes), 1)\n\n\nif __name__ == '__main__':\n unittest.main()\n" + }, + "validation.json": { + "sha256": "26c5acfa6e2ef5909ff9f3fc819ca1763b79f3cb65b3c43371f7944a284cde28", + "content": "{\n \"tests\": 16,\n \"result\": \"passed\",\n \"synthetic_transport_only\": true,\n \"real_native_data_read\": false,\n \"native_backup_export_restore_executed\": false,\n \"native_workload_changed\": false,\n \"actual_founder_approval\": false,\n \"local_read_only_capability_checks\": [\n \"argocdCLI absent, existingApplication.operation path retained\",\n \"Dockerunixsocket engineName bnt-lap001\"\n ],\n \"case_source_commit_at_preparation\": \"e0359bc (owner original78source; final helpercommit mustbe explicitlypinned)\",\n \"additional_regressions\": [\n \"Ready0 candidate rollback dispatch has no Pod metadata/DB exec and one scoped CAS operation\",\n \"rollback still refuses CM/PVC or nonpair-image drift\",\n \"separate old-image Ready/schema5 recovery proof\",\n \"post-admin readonly integrity refusal and original snapshot tamper refusal\"\n ]\n}\n" + } + }, + "native_execution": false +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution-bundle.json b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution-bundle.json new file mode 100644 index 0000000..23120f4 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution-bundle.json @@ -0,0 +1,48 @@ +{ + "kind": "informed-decision.execution-source-bundle", + "version": 1, + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "files": { + "README.md": { + "sha256": "91d7b3c36498629bb4632b2a45cd75b67bf3a8ce8ab924d6a754a67410fadf6f", + "content": "# Supervised Informed Decision purpose release executor \u2014 unapproved preparation\n\nNo native database read, backup/export/restore or workload action has been run. This source implements the reviewed protocol; its additional mechanical details need peer review and an amended hash-bound packet before first human submission. The original78path packet/reviews remain historical technical agreement, not founder approval of this executor.\n\nRun one phase at a time only after the coordinator has freshly authenticated the exact founder disposition at the existing fixed Informed Decision origin. Root writes the protected0600 fixed files `/tmp/security-infd-purpose-root-authority.json` and `/tmp/security-infd-purpose-native-outcome-latest.json`. The receipt template is PENDING and cannot authorize anything. The helper checks exact nested confirmed person/platform-root ACCEPT version1, original memo identity/current memo SHA, source commit, plan SHA and freshness120seconds. This is supervised receipt bookkeeping, not cryptographic provider verification, a signed grant or agent autonomy promotion. Root/harness supervision remains the authority boundary. Never synthesize an approval receipt from a technical review or caller assertion.\n\nInvocation after actual approval: `python3 execution/actuator.py --phase --root-authority-receipt /tmp/security-infd-purpose-root-authority.json --root-native-outcome /tmp/security-infd-purpose-native-outcome-latest.json --source-revision `. Order: drill-backup \u2192 drill-copy \u2192 offline-verify \u2192 cleanup-offline \u2192 cutover-backup \u2192 cutover-copy \u2192 release \u2192 verify. Rollback is a distinct authorized recovery after a recorded release attempt. Root refreshes actual native acceptance immediately before each phase.\n\nThe private ignored Custodian custody parent `.private-backups` must already exist,0700 owned by the workstation agent user; the exact case child20261011-infd-purpose-r1 is created only after authority checks. Native parent `/data/private/purpose-overlay-r1` is uniquely created by UID10001 for drill/cutover SQLite-consistent snapshots, each0600/nonsymlink/single-link. The attached stdlib readonly checker must report schema5/integrity/counts before any Store/admin on native source or offlineclone. Invalid states/count shapes and all raw child outputs are withheld. Main-only snapshot closure is verified before binary transfer; stdin/stdout snapshot bytes reach only private files or the isolated restore copy, never tool/chat/log output. Streams stop beyond frozen byte count/512MiB; failures retain partial private evidence.\n\nNew private offline volume `infd-purpose-r1-restore-20261011` is created only on the pinned local workstation Docker socket/engine bnt-lap001, with localdriver/nooptions and attemptnonce labels. One-time initializer runs exact763c as UID0 with only CAP_CHOWN, networknone/read-onlyroot/no-newprivileges, one NEW namedvolume mount, no host/livePVC/credential/config mounts. It receives only the protected snapshot on stdin, verifies bytes, sets folder0700/file0600 owned10001. Then UID10001 performs readonly pre-open validation and `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite`, never the service entrypoint. Cleanup compares exact nonce/creation identity and removes only this clone volume, retaining all native/offcluster originals. CPU1/memory128MiB; private offcluster capacity at least1GiB+16MiB and native estimated two/one-snapshot headroom required.\n\nEvery phase fsyncs RUNNING intent before dispatch. Any failure/interruption/ambiguous result remains UNCERTAIN; same-phase retry is refused. Separate operator diagnosis and any needed recovery are recorded; neither snapshots nor unresolved/new records are removed to make checks green. Frozen snapshot/clone counters must agree; live post-cutover/rollback counters can include legitimate concurrent commits/state transitions.\n\nExisting Application UID and actual Deployment/Pod/CM/PVC custody/source are checked. All four owner render Git blobs must match; overrides/plugins/multiple sources and even automated:{} are rejected. The existing Application.operation API is used (native argocd CLI is absent), with server dry-run, resourceVersion/UID/source tests, one Deployment only, prune=false. Dispatch acknowledgment is not rollout completion. Verify requires exact succeeded operation/controller generation/Ready1, same schema5 DB, actual installed hash/mode/UID and10purpose checks plus bounded localhosthealth/readiness. Purpose transport remains synthetic and is explicitly not a native PDP authority test. Rollback pins prior7db/7f5 through the same scoped workflow and retains the current live database; it never restores an older snapshot over later writes.\n\nTwelve synthetic tests pass against frozen case metadata: authority/expiry/actor/ambiguity refusals, crash intent/no retry/order, credential-output withholding, private bounded binarycopy, volume recreation cleanup refusal, source/automation/CM/PVC/Ready drift, pre-open gate refusal and exact Deployment-only operation/dry-run. These are source tests, not native backup or release proof.\n" + }, + "actuator.py": { + "sha256": "faf019cd011dee1032d3f309e85b1f1b0bf5f333d6e279701c3f7e233d54fe23", + "content": "\"\"\"One fixed supervised phase; never run this during source preparation.\"\"\"\nimport argparse\nimport hashlib\nimport json\nimport os\nfrom pathlib import Path\nimport re\nimport selectors\nimport stat\nimport subprocess\nimport sys\nimport time\n\nif sys.flags.optimize:\n raise SystemExit('optimized interpreter refused')\n\nPHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline',\n 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback')\n\n\ndef require(value, reason):\n if not value:\n raise ValueError(reason)\n\n\ndef sha(path):\n digest = hashlib.sha256()\n with Path(path).open('rb') as stream:\n for block in iter(lambda: stream.read(1024**2), b''):\n digest.update(block)\n return digest.hexdigest()\n\n\ndef private(path, directory=False):\n info = Path(path).lstat()\n require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode))\n and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600)\n and (directory or info.st_nlink == 1), 'private owned custody required')\n\nROOT = Path(__file__).resolve().parent\nCASE = ROOT.parent\nOWNER = Path('/home/worsch/informed-decision')\nCUSTODIAN = Path('/home/worsch/the-custodian')\nCUSTODY = CUSTODIAN / '.private-backups/20261011-infd-purpose-r1'\nSOCKET = 'unix:///var/run/docker.sock'\nIMAGE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a'\nVOLUME = 'infd-purpose-r1-restore-20261011'\nMAX_BYTES = 512 * 1024**2\n\n\ndef run(argv, body=None, timeout=90):\n return subprocess.run(argv, input=body, text=True, capture_output=True, timeout=timeout)\n\n\ndef json_result(result):\n try:\n value = json.loads(result.stdout)\n except (ValueError, TypeError):\n raise ValueError('safe phase receipt unavailable; outcome uncertain') from None\n require(result.returncode == 0 and isinstance(value, dict) and value.get('all_checks_pass') is True,\n 'phase did not verify complete; raw output withheld; no retry')\n permitted = {'phase', 'all_checks_pass', 'raw_output_withheld', 'native_approval_verified_by_root',\n 'native_authenticated_grant', 'source_readonly_baseline', 'snapshot_readonly',\n 'snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'native_parent_private',\n 'native_uid', 'pod_name', 'pod_uid', 'live_readonly_schema_integrity_counts',\n 'live_counts_may_include_concurrent_commits', 'operation_requested', 'source_revision',\n 'resources', 'prune', 'rollout_verified', 'latest_live_database_retained',\n 'client_diff_sha256', 'native_rollout_verified', 'current_schema5_database_retained',\n 'private_copy_verified', 'installed_purpose_checks', 'policy_sha256',\n 'policy_mode', 'policy_uid', 'health_statuses', 'native_provider_probe'}\n require(set(value) <= permitted, 'unexpected output fields withheld')\n from receipt_safety import counts\n for name in ('source_readonly_baseline', 'snapshot_readonly', 'live_readonly_schema_integrity_counts'):\n if name in value:\n counts(value[name])\n for name in ('snapshot_sha256', 'client_diff_sha256'):\n if name in value:\n require(re.fullmatch(r'[a-f0-9]{64}', value[name]) is not None, 'invalid output digest withheld')\n if 'snapshot_bytes' in value:\n require(type(value['snapshot_bytes']) is int and 0 < value['snapshot_bytes'] <= MAX_BYTES,\n 'invalid output size withheld')\n if 'snapshot_file' in value:\n require(value['snapshot_file'] in ('drill.sqlite', 'cutover.sqlite'), 'invalid output file withheld')\n return value\n\n\ndef docker(argv, body=None, timeout=120):\n return run(['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET] + argv,\n body=body, timeout=timeout)\n\n\ndef remote(phase, revision, approved):\n # Fixed module imported only after main verifies every executor source hash.\n from native_program import PROGRAM\n payload = {'phase': phase, 'source_revision': revision, 'approval': approved,\n 'sealed': json.loads((CASE / 'sealed-live-deployment.json').read_text()),\n 'dependencies': json.loads((CASE / 'sealed-native-dependencies.json').read_text()),\n 'candidate': json.loads((CASE / 'candidate-deployment.json').read_text()),\n 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()),\n 'receipt_safety': (ROOT / 'receipt_safety.py').read_text(),\n 'purpose_checks': (CASE / 'check_installed.py').read_text(),\n 'readonly': (CASE / 'sqlite_readonly.py').read_text()}\n script = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace(\n '__GUARD__', repr((CASE / 'change_guard.py').read_text()))\n return json_result(run(['ssh', 'railiance01', 'python3 -'], script, timeout=200))\n\n\ndef copy_snapshot(phase, revision, approved, journal):\n metadata = remote(phase, revision, approved)\n backup_phase = 'drill-backup' if phase == 'drill-copy' else 'cutover-backup'\n prior = journal.data['phases'][backup_phase]['result']\n for key in ('snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'snapshot_readonly'):\n require(metadata[key] == prior[key], 'closed frozen snapshot changed')\n name = metadata['snapshot_file']\n require(name in ('drill.sqlite', 'cutover.sqlite') and 0 < metadata['snapshot_bytes'] <= MAX_BYTES,\n 'fixed bounded snapshot required')\n pod = metadata['pod_name']\n require(re.fullmatch(r'[a-z0-9]([-a-z0-9]*[a-z0-9])?', pod) is not None, 'fixed owner pod name required')\n local = CUSTODY / name\n fd = os.open(local, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600)\n # Binary snapshot stdout goes only to a private file, never tool/chat/log output.\n # Snapshot schema/count metadata was validated before opening this destination.\n with os.fdopen(fd, 'wb') as destination:\n command = ('kubectl exec -n informed-decision ' + pod +\n ' -c informed-decision -- cat /data/private/purpose-overlay-r1/' + name)\n transfer = subprocess.Popen(['ssh', 'railiance01', command], stdout=subprocess.PIPE,\n stderr=subprocess.DEVNULL)\n selector = selectors.DefaultSelector()\n selector.register(transfer.stdout, selectors.EVENT_READ)\n deadline = time.monotonic() + 150\n received = 0\n try:\n while True:\n remaining = deadline - time.monotonic()\n require(remaining > 0 and selector.select(remaining), 'private transfer timed out')\n block = os.read(transfer.stdout.fileno(), 1024**2)\n if not block:\n break\n received += len(block)\n require(received <= metadata['snapshot_bytes'] and received <= MAX_BYTES,\n 'private copy exceeds frozen snapshot size')\n destination.write(block)\n transfer.wait(timeout=max(1, deadline - time.monotonic()))\n finally:\n selector.close()\n transfer.stdout.close()\n if transfer.poll() is None:\n transfer.kill()\n transfer.wait()\n destination.flush()\n os.fsync(destination.fileno())\n private(local)\n require(transfer.returncode == 0 and local.stat().st_size == metadata['snapshot_bytes']\n and sha(local) == metadata['snapshot_sha256'], 'private copy incomplete/uncertain; retain, no retry')\n # Re-read identity/hash after transfer. This is verification, not a write retry.\n after = remote(phase, revision, approved)\n require(after['pod_uid'] == metadata['pod_uid'] and after['snapshot_sha256'] == metadata['snapshot_sha256'],\n 'source identity/snapshot changed during transfer')\n return {**metadata, 'off_cluster_private_copy_verified': True, 'snapshot_contents_output': False}\n\n\ndef offline_verify(journal):\n from receipt_safety import counts\n snapshot = CUSTODY / 'drill.sqlite'\n private(snapshot)\n previous = journal.data['phases']['drill-copy']['result']\n require(sha(snapshot) == previous['snapshot_sha256'], 'protected snapshot bytes changed')\n identity = docker(['info', '--format', '{{json .Name}}'])\n require(identity.returncode == 0 and json.loads(identity.stdout) == 'bnt-lap001',\n 'local offline Docker engine identity changed')\n listed = docker(['volume', 'ls', '--format', '{{.Name}}'])\n require(listed.returncode == 0 and VOLUME not in listed.stdout.splitlines(),\n 'disposable volume absence not verified')\n nonce = journal.data['phases']['offline-verify']['attempt_id']\n labels = {'informed-decision.case': 'infd-purpose-20261011-r1',\n 'informed-decision.use': 'offline-restore-only', 'informed-decision.attempt': nonce}\n created = docker(['volume', 'create', '--driver', 'local', '--label', 'informed-decision.case=infd-purpose-20261011-r1',\n '--label', 'informed-decision.attempt=' + nonce,\n '--label', 'informed-decision.use=offline-restore-only', VOLUME])\n require(created.returncode == 0 and created.stdout.strip() == VOLUME, 'volume creation uncertain; no retry')\n inspected = docker(['volume', 'inspect', VOLUME])\n require(inspected.returncode == 0, 'new volume identity unavailable')\n volume = json.loads(inspected.stdout)\n require(len(volume) == 1 and volume[0]['Name'] == VOLUME and volume[0].get('Labels') == labels\n and volume[0].get('Driver') == 'local' and not volume[0].get('Options')\n and volume[0].get('Scope') == 'local', 'new isolated volume identity changed')\n identity = {key: volume[0][key] for key in ('Name', 'Labels', 'Driver', 'Scope', 'CreatedAt')}\n journal.note('offline-verify', 'created_volume_identity', identity)\n # One-time UID0/CAP_CHOWN initialization is isolated to the NEW named volume.\n # No host/live PVC/config/token mount exists; this detail needs packet review.\n initializer = \"\"\"import hashlib,os,stat,sys\nif sys.flags.optimize:raise RuntimeError('optimized interpreter refused')\nfolder='/restore';expected=EXPECTED\nif os.listdir(folder):raise ValueError('new empty private volume required')\nos.chmod(folder,0o700)\nfd=os.open(folder+'/review.sqlite',os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW|os.O_WRONLY,0o600)\ndigest=hashlib.sha256();size=0\nwith os.fdopen(fd,'wb') as target:\n while True:\n block=sys.stdin.buffer.read(1024**2)\n if not block:break\n size+=len(block)\n if size>512*1024**2:raise ValueError('private restore size exceeds bound')\n target.write(block);digest.update(block)\n target.flush();os.fsync(target.fileno())\nif digest.hexdigest()!=expected:raise ValueError('private copied snapshot differs')\nos.chown(folder+'/review.sqlite',10001,10001);os.chown(folder,10001,10001)\nprint('{\"all_checks_pass\":true,\"private_copy_verified\":true}')\n\"\"\".replace('EXPECTED', repr(previous['snapshot_sha256']))\n with snapshot.open('rb') as source:\n argv = ['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET,\n 'run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m',\n '--user', '0:0', '--cap-drop', 'ALL', '--cap-add', 'CHOWN',\n '--security-opt', 'no-new-privileges', '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore',\n '--entrypoint', 'python', IMAGE, '-c', initializer]\n copied = subprocess.run(argv, stdin=source, text=True, capture_output=True, timeout=150)\n json_result(copied)\n options = ['run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m',\n '--user', '10001:10001', '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges',\n '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore']\n readonly = docker(options + ['--entrypoint', 'python', IMAGE, '-', '--db', '/restore/review.sqlite'],\n (CASE / 'sqlite_readonly.py').read_text())\n require(readonly.returncode == 0, 'offline pre-open schema/integrity gate refused; never open Store')\n checked = counts(json.loads(readonly.stdout))\n require(checked == previous['snapshot_readonly'], 'frozen snapshot/clone readonly counts differ')\n admin = docker(options + ['--entrypoint', 'informed-decision-admin', IMAGE,\n 'inspect', '--db', '/restore/review.sqlite'])\n require(admin.returncode == 0, 'offline admin result uncertain')\n admin_counts = json.loads(admin.stdout)\n require(admin_counts == {key: checked[key] for key in ('schema_version', 'lifecycle', 'outbox', 'submissions')},\n 'offline admin changed frozen snapshot counters')\n return {'all_checks_pass': True, 'offline_volume': VOLUME, 'offline_readonly': checked,\n 'created_volume_identity': identity,\n 'admin_counts': admin_counts, 'network': 'none', 'runtime_tokens_or_config_mounted': False,\n 'service_entrypoint_started': False, 'original_snapshot_retained': True}\n\n\ndef cleanup_offline(journal):\n inspected = docker(['volume', 'inspect', VOLUME])\n require(inspected.returncode == 0, 'owned disposable volume identity unverified')\n value = json.loads(inspected.stdout)\n expected = journal.data['phases']['offline-verify']['result']['created_volume_identity']\n require(len(value) == 1 and {key: value[0].get(key) for key in expected} == expected\n and not value[0].get('Options'), 'volume ownership/recreation changed')\n removed = docker(['volume', 'rm', VOLUME])\n require(removed.returncode == 0 and removed.stdout.strip() == VOLUME\n and docker(['volume', 'inspect', VOLUME]).returncode != 0,\n 'cleanup outcome ambiguous; do not retry')\n return {'all_checks_pass': True, 'only_disposable_offline_volume_removed': VOLUME,\n 'native_and_offcluster_original_snapshots_retained': True}\n\n\ndef main():\n parser = argparse.ArgumentParser(description=__doc__)\n parser.add_argument('--phase', choices=PHASES, required=True)\n parser.add_argument('--root-authority-receipt', type=Path, required=True)\n parser.add_argument('--root-native-outcome', type=Path, required=True)\n parser.add_argument('--source-revision', required=True)\n args = parser.parse_args()\n require(args.root_authority_receipt == Path('/tmp/security-infd-purpose-root-authority.json')\n and args.root_native_outcome == Path('/tmp/security-infd-purpose-native-outcome-latest.json'),\n 'fixed supervised receipt paths required')\n require(re.fullmatch(r'[0-9a-f]{40}', args.source_revision) is not None, 'exact source commit required')\n # Verify all prepared executor/input bytes before reading authority or dispatching.\n plan = json.loads((ROOT / 'execution-plan.json').read_text())\n require(set(plan['executor_files']) == {'actuator.py', 'authority_journal.py', 'native_program.py', 'receipt_safety.py'},\n 'fixed executor sources required')\n require(set(plan['owner_source_files']) == {'deploy/lifecycle/admission.candidate.json',\n 'deploy/lifecycle/service.candidate.json',\n 'deploy/lifecycle/kustomization.yaml',\n 'deploy/lifecycle/registries.candidate.json'},\n 'fixed owner image sources required')\n for relative, digest in plan['executor_files'].items():\n target = ROOT / relative\n require(not target.is_symlink() and sha(target) == digest, 'executor source bytes changed')\n for relative, digest in plan['case_files'].items():\n require(not Path(relative).is_absolute() and '..' not in Path(relative).parts,\n 'case source path escaped')\n target = CASE / relative\n require(not target.is_symlink() and sha(target) == digest, 'case source bytes changed')\n for relative, digest in plan['owner_source_files'].items():\n target = OWNER / relative\n require(not target.is_symlink() and sha(target) == digest, 'owner image-only source changed')\n committed = subprocess.run(['git', '-C', str(OWNER), 'show', args.source_revision + ':' + relative],\n capture_output=True)\n require(committed.returncode == 0 and hashlib.sha256(committed.stdout).hexdigest() == digest,\n 'committed owner render source differs from approved inputs')\n head = run(['git', '-C', str(OWNER), 'rev-parse', 'HEAD'])\n require(head.returncode == 0 and head.stdout.strip() == args.source_revision, 'owner source HEAD differs')\n from authority_journal import Journal, authority\n private(args.root_authority_receipt)\n private(args.root_native_outcome)\n receipt = json.loads(args.root_authority_receipt.read_text())\n require(receipt.get('native_outcome_sha256') == sha(args.root_native_outcome), 'native outcome bytes changed')\n require(receipt.get('executor_plan_sha256') == sha(ROOT / 'execution-plan.json'),\n 'root verified executor plan differs')\n approved = authority(receipt, json.loads(args.root_native_outcome.read_text()), sha(CASE / 'memo.json'),\n args.source_revision, args.phase)\n parent = CUSTODY.parent\n private(parent, directory=True)\n ignored = run(['git', '-C', str(CUSTODIAN), 'check-ignore', '--no-index', str(CUSTODY / 'drill.sqlite')])\n require(ignored.returncode == 0, 'offcluster custody is not ignored')\n if not CUSTODY.exists():\n require(args.phase == 'drill-backup', 'first approved phase must create unique private custody')\n os.mkdir(CUSTODY, 0o700)\n private(CUSTODY, directory=True)\n capacity = os.statvfs(CUSTODY)\n require(capacity.f_bavail * capacity.f_frsize >= 2 * MAX_BYTES + 16 * 1024**2,\n 'independent protected custody headroom insufficient')\n os.makedirs(CUSTODY / 'empty-docker-config', mode=0o700, exist_ok=True)\n private(CUSTODY / 'empty-docker-config', directory=True)\n require(not list((CUSTODY / 'empty-docker-config').iterdir()), 'public Docker read config must stay empty')\n journal = Journal(CUSTODY, {'proposal': plan['proposal_id'], 'source_revision': args.source_revision,\n 'memo_sha256': sha(CASE / 'memo.json'), 'plan_sha256': sha(ROOT / 'execution-plan.json')})\n try:\n journal.start(args.phase, approved) # fsynced RUNNING before any phase effect.\n if args.phase in ('drill-copy', 'cutover-copy'):\n result = copy_snapshot(args.phase, args.source_revision, approved, journal)\n elif args.phase == 'offline-verify':\n result = offline_verify(journal)\n elif args.phase == 'cleanup-offline':\n result = cleanup_offline(journal)\n else:\n result = remote(args.phase, args.source_revision, approved)\n journal.finish(args.phase, result)\n print(json.dumps(result)) # Only count/hash/identity receipts, never snapshot bytes.\n except BaseException as error:\n safe = {'all_checks_pass': False, 'phase': args.phase, 'failure_class': type(error).__name__,\n 'failure': 'fixed phase outcome uncertain; original evidence retained; no retry',\n 'raw_output_withheld': True}\n if journal.data['phases'].get(args.phase, {}).get('state') == 'RUNNING':\n journal.finish(args.phase, safe)\n print(json.dumps(safe))\n raise SystemExit(1) from None\n finally:\n journal.close()\n\n\nif __name__ == '__main__':\n try:\n main()\n except Exception:\n raise SystemExit('supervised execution refused before phase; raw output withheld') from None\n" + }, + "authority_journal.py": { + "sha256": "55e441b1af7288540c31ea4733c3471559a2100a26fae8b6b0ed415e04d469a5", + "content": "\"\"\"Supervised receipt bookkeeping, not an authenticated approval provider.\"\"\"\nimport datetime\nimport fcntl\nimport hashlib\nimport json\nimport os\nimport re\nfrom pathlib import Path\nimport stat\nimport uuid\n\nFOUNDER = {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'}\nMEMO_ID = 'infd-20261011-purpose-overlay-r1'\nPROPOSAL = 'INFD-WP-0009-T04/purpose-overlay-v1'\nPHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline',\n 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback')\n\n\ndef require(value, reason):\n if not value:\n raise ValueError(reason)\n\n\ndef sha(path):\n digest = hashlib.sha256()\n with Path(path).open('rb') as stream:\n for block in iter(lambda: stream.read(1024**2), b''):\n digest.update(block)\n return digest.hexdigest()\n\n\ndef private(path, directory=False):\n info = Path(path).lstat()\n require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode))\n and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600)\n and (directory or info.st_nlink == 1), 'private owned custody required')\n\n\ndef authority(receipt, outcome, memo_sha, source_revision, phase, now=None):\n \"\"\"Root must freshly verify native outcome at fixed ORIGIN outside this helper.\n\n Receipt files/flags are not signed grants. This function checks the exact\n supervised receipt relation; existing harness/founder authority remains the\n actual permission boundary. It never authenticates a caller as human.\n \"\"\"\n now = now or datetime.datetime.now(datetime.timezone.utc)\n require(phase in PHASES, 'fixed phase required')\n require(receipt.get('proposal_id') == PROPOSAL and receipt.get('memo_id') == MEMO_ID\n and receipt.get('memo_version') == 1 and receipt.get('memo_sha256') == memo_sha\n and receipt.get('source_revision') == source_revision\n and receipt.get('activation') == 'APPROVED'\n and receipt.get('authority_mode') == 'ADMINISTER'\n and receipt.get('target') == 'realm:kubernetes/railiance01/informed-decision'\n and receipt.get('verification_method') == 'root-fixed-origin-native-readback'\n and receipt.get('runtime_authenticated_grant') is False,\n 'exact externally verified supervised receipt required')\n verified = datetime.datetime.fromisoformat(receipt['verified_at'].replace('Z', '+00:00'))\n require(verified.tzinfo is not None and 0 <= (now - verified).total_seconds() <= 120,\n 'fresh root native readback required before every phase')\n deadline = datetime.datetime.fromisoformat('2026-10-12T23:59:59+00:00')\n require(now < deadline, 'approved execution window expired')\n require(outcome.get('memo_id') == MEMO_ID and outcome.get('review', {}).get('stale') is False\n and outcome['review'].get('intake_state') == 'ready', 'native review is not ready/current')\n review_id = outcome['review']['memo_id']\n require(review_id == receipt.get('review_memo_id'), 'native review identity changed')\n accepted = [x for x in outcome.get('dispositions', [])\n if x.get('submission_state') == 'confirmed'\n and x.get('disposition', {}).get('verb') == 'accept'\n and x['disposition'].get('memo_version') == 1]\n require(len(accepted) == 1, 'one confirmed founder acceptance required')\n accepted = accepted[0]['disposition']\n require(accepted.get('actor') == FOUNDER and accepted.get('memo_id') == review_id\n and accepted.get('approval_id') == receipt.get('approval_id')\n and accepted.get('id') == receipt.get('disposition_id')\n and accepted.get('at') == receipt.get('accepted_at'), 'exact founder disposition mismatch')\n require(re.fullmatch(r'[a-f0-9-]{36}', accepted['approval_id']) is not None\n and re.fullmatch(r'disp-[a-f0-9-]{36}', accepted['id']) is not None\n and re.fullmatch(r'review-[a-f0-9-]{36}', review_id) is not None,\n 'native disposition identifiers are malformed')\n accepted_at = datetime.datetime.fromisoformat(accepted['at'].replace('Z', '+00:00'))\n require(accepted_at.tzinfo is not None and accepted_at <= verified, 'acceptance time not bounded')\n return {key: receipt[key] for key in ('approval_id', 'disposition_id', 'accepted_at', 'verified_at')}\n\n\nclass Journal:\n def __init__(self, parent, identity):\n self.parent = Path(parent)\n private(self.parent, directory=True)\n self.path = self.parent / 'execution-journal.json'\n self.lock = os.open(self.parent / 'execution.lock', os.O_CREAT | os.O_NOFOLLOW | os.O_RDWR, 0o600)\n fcntl.flock(self.lock, fcntl.LOCK_EX | fcntl.LOCK_NB)\n private(self.parent / 'execution.lock')\n if self.path.exists():\n private(self.path)\n self.data = json.loads(self.path.read_text())\n require(self.data['identity'] == identity, 'journal case/source identity changed')\n else:\n self.data = {'identity': identity, 'phases': {}}\n self.save()\n\n def save(self):\n temporary = self.parent / 'execution-journal.new'\n fd = os.open(temporary, os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW | os.O_WRONLY, 0o600)\n try:\n with os.fdopen(fd, 'w') as stream:\n json.dump(self.data, stream, indent=2)\n stream.write('\\n')\n stream.flush()\n os.fsync(stream.fileno())\n os.replace(temporary, self.path)\n directory = os.open(self.parent, os.O_DIRECTORY | os.O_RDONLY)\n try:\n os.fsync(directory)\n finally:\n os.close(directory)\n except BaseException:\n # Retain evidence rather than overwriting an uncertain durable intent.\n raise\n\n def start(self, phase, approval):\n require(phase not in self.data['phases'], 'already attempted phase; no retry')\n predecessors = dict(zip(PHASES[1:-1], PHASES[:-2]))\n if phase in predecessors:\n require(self.data['phases'].get(predecessors[phase], {}).get('state') == 'COMPLETE',\n 'preceding phase is not verified complete')\n if phase == 'rollback':\n require('release' in self.data['phases'], 'rollback requires a recorded release attempt')\n self.data['phases'][phase] = {'state': 'RUNNING', 'approval': approval,\n 'attempt_id': str(uuid.uuid4()),\n 'started_at': datetime.datetime.now(datetime.timezone.utc).isoformat()}\n self.save()\n\n def note(self, phase, key, value):\n require(self.data['phases'][phase]['state'] == 'RUNNING', 'phase intent missing')\n self.data['phases'][phase][key] = value\n self.save()\n\n def finish(self, phase, result):\n entry = self.data['phases'][phase]\n require(entry['state'] == 'RUNNING', 'phase intent missing')\n entry['result'] = result\n entry['state'] = 'COMPLETE' if result.get('all_checks_pass') is True else 'UNCERTAIN'\n self.save()\n\n def close(self):\n os.close(self.lock)\n" + }, + "execution-plan.json": { + "sha256": "4d5530e7418f638b10ccff0e0d9a0727adc64a7f3a45907f6deb5739ad2adc85", + "content": "{\n \"kind\": \"informed-decision.supervised-mechanical-release-plan\",\n \"version\": 1,\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"trial_id\": \"infd-purpose-20261011-r1\",\n \"state\": \"prepared-unapproved\",\n \"executor_files\": {\n \"actuator.py\": \"faf019cd011dee1032d3f309e85b1f1b0bf5f333d6e279701c3f7e233d54fe23\",\n \"authority_journal.py\": \"55e441b1af7288540c31ea4733c3471559a2100a26fae8b6b0ed415e04d469a5\",\n \"native_program.py\": \"3ad4fe28d0556a001f6334f3f8267d1e21d76e17db9765d3cc35b679a9db9ec5\",\n \"receipt_safety.py\": \"5c54373f2dc4b064008225c186efb1d5afdeec36d15350bda0a12ded97602d1b\"\n },\n \"case_files\": {\n \"change_guard.py\": \"f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be\",\n \"sqlite_readonly.py\": \"eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38\",\n \"preflight-inputs.json\": \"756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06\",\n \"sealed-live-deployment.json\": \"d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362\",\n \"sealed-native-dependencies.json\": \"042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369\",\n \"candidate-deployment.json\": \"722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e\",\n \"rollback-deployment.json\": \"39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121\",\n \"check_installed.py\": \"a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad\",\n \"published-verification.json\": \"8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2\",\n \"security-summary.json\": \"0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44\"\n },\n \"owner_source_files\": {\n \"deploy/lifecycle/admission.candidate.json\": \"92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55\",\n \"deploy/lifecycle/service.candidate.json\": \"38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4\",\n \"deploy/lifecycle/kustomization.yaml\": \"1bbce81bc6758434354157f8601534320c5d0290587908fd15a6d25e3fa57f47\",\n \"deploy/lifecycle/registries.candidate.json\": \"9bad6db5fbc2178d31b04120016a41830c3552fbb9e2517b718f9bbe87cf649e\"\n },\n \"candidate_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"prior_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"source_revision\": \"must-be-exact-final-owner-HEAD-with-approved-four-Git-blobs\",\n \"phases\": [\n \"drill-backup\",\n \"drill-copy\",\n \"offline-verify\",\n \"cleanup-offline\",\n \"cutover-backup\",\n \"cutover-copy\",\n \"release\",\n \"verify\",\n \"rollback\"\n ],\n \"authorization\": \"fresh externally authenticated root fixed-origin native readback before each phase; exact confirmed platform-root disposition and current packet SHA/source commit; receipt bookkeeping is not an autonomous signed grant\",\n \"execute_by\": \"2026-10-12T23:59:59Z\",\n \"raw_output_withheld\": true,\n \"native_data_or_workload_action_executed\": false\n}\n" + }, + "native_program.py": { + "sha256": "3ad4fe28d0556a001f6334f3f8267d1e21d76e17db9765d3cc35b679a9db9ec5", + "content": "\"\"\"Fixed supervised remote program; no standalone authority.\"\"\"\nPROGRAM = '\\nimport copy,datetime,hashlib,json,os,re,subprocess,sys\\nif sys.flags.optimize:raise RuntimeError(\\'optimized interpreter refused\\')\\npayload=json.loads(__PAYLOAD__)\\nexec(__GUARD__)\\nphase=payload[\\'phase\\']\\nif phase not in (\\'drill-backup\\',\\'cutover-backup\\',\\'drill-copy\\',\\'cutover-copy\\',\\'release\\',\\'verify\\',\\'rollback\\'):raise ValueError(\\'fixed native phase required\\')\\ndeadline=datetime.datetime.fromisoformat(\\'2026-10-12T23:59:59+00:00\\')\\ndef require(value,reason):\\n if not value:raise ValueError(reason)\\nrequire(datetime.datetime.now(datetime.timezone.utc)0 and size<=512*1024**2 and free>=size*(2 if action==\\'drill-backup\\' else 1)+16*1024**2,\\'bounded native snapshot capacity required\\')\\n if action==\\'drill-backup\\':\\n require(not os.path.lexists(folder),\\'native case directory must be unique\\')\\n os.mkdir(folder,0o700);os.chmod(folder,0o700)\\n private(folder,True)\\n filename=\\'drill.sqlite\\' if action==\\'drill-backup\\' else \\'cutover.sqlite\\';output=folder+\\'/\\'+filename\\n require(not os.path.lexists(output),\\'snapshot output must be unique\\')\\n admin=subprocess.run([\\'informed-decision-admin\\',\\'backup\\',\\'--db\\',db,\\'--output\\',output],capture_output=True,text=True,timeout=120)\\n require(admin.returncode==0 and json.loads(admin.stdout)=={\\'status\\':\\'backed_up\\',\\'consistent_snapshot\\':True},\\'backup completion not verified; do not retry\\')\\n private(output)\\n for suffix in (\\'-wal\\',\\'-shm\\'):\\n require(not os.path.exists(output+suffix) or os.stat(output+suffix).st_size==0,\\'snapshot is not closed main-file custody\\')\\n snapshot=counts(inspect_readonly(output))\\n size=os.stat(output).st_size;require(0 10**12\n for number in value[group].values()):\n raise ValueError('count-only receipt values refused')\n return value\n" + }, + "root-authority-receipt-template.json": { + "sha256": "15966b7c6f088a033baf1fef878ddb351de2fa2ae46b5bc710265ed172ab2813", + "content": "{\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"memo_id\": \"infd-20261011-purpose-overlay-r1\",\n \"memo_version\": 1,\n \"memo_sha256\": null,\n \"source_revision\": null,\n \"activation\": \"PENDING\",\n \"authority_mode\": \"ADMINISTER\",\n \"target\": \"realm:kubernetes/railiance01/informed-decision\",\n \"verification_method\": \"root-fixed-origin-native-readback\",\n \"runtime_authenticated_grant\": false,\n \"verified_at\": null,\n \"accepted_at\": null,\n \"review_memo_id\": null,\n \"approval_id\": null,\n \"disposition_id\": null,\n \"native_outcome_sha256\": null,\n \"executor_plan_sha256\": \"4d5530e7418f638b10ccff0e0d9a0727adc64a7f3a45907f6deb5739ad2adc85\"\n}\n" + }, + "test_execution.py": { + "sha256": "d4f20fba850f0303a87971d2498bccc894ab39b7584ce98756e1c536e517fb18", + "content": "\"\"\"Synthetic custody/transport tests. No native data, Docker or cluster action.\"\"\"\nimport copy\nimport datetime\nimport io\nimport json\nimport os\nfrom pathlib import Path\nimport subprocess\nimport sys\nimport tempfile\nimport unittest\nfrom unittest.mock import patch\nfrom contextlib import redirect_stdout\n\nimport actuator\nfrom authority_journal import Journal, authority\nfrom native_program import PROGRAM\nfrom receipt_safety import counts\n\nCASE = Path('/home/worsch/informed-decision/docs/evidence/2026-10-11-purpose-image-release')\nNOW = datetime.datetime(2026, 10, 11, 2, 0, tzinfo=datetime.timezone.utc)\nREVISION = 'e' * 40\nCOUNT = {'schema_version': 5, 'integrity': 'ok', 'read_only_pre_open': True, 'store_constructed': False,\n 'lifecycle': {'records': 3, 'events': 8, 'pending': 1},\n 'outbox': {'pending': 2, 'delivered': 10}, 'submissions': {'confirmed': 1, 'unresolved': 1}}\n\n\ndef accepted():\n approval = '11111111-1111-4111-8111-111111111111'\n review = 'review-22222222-2222-4222-8222-222222222222'\n disposition = 'disp-33333333-3333-4333-8333-333333333333'\n receipt = {'proposal_id': 'INFD-WP-0009-T04/purpose-overlay-v1',\n 'memo_id': 'infd-20261011-purpose-overlay-r1', 'memo_version': 1,\n 'memo_sha256': 'a' * 64, 'source_revision': REVISION, 'activation': 'APPROVED',\n 'authority_mode': 'ADMINISTER', 'target': 'realm:kubernetes/railiance01/informed-decision',\n 'verification_method': 'root-fixed-origin-native-readback', 'runtime_authenticated_grant': False,\n 'verified_at': '2026-10-11T02:00:00Z', 'accepted_at': '2026-10-11T01:59:00Z',\n 'review_memo_id': review, 'approval_id': approval, 'disposition_id': disposition}\n outcome = {'memo_id': receipt['memo_id'], 'review': {'memo_id': review, 'stale': False, 'intake_state': 'ready'},\n 'dispositions': [{'approval_id': None, 'submission_state': 'confirmed',\n 'disposition': {'verb': 'accept', 'memo_version': 1, 'memo_id': review,\n 'approval_id': approval, 'id': disposition,\n 'actor': {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'},\n 'at': receipt['accepted_at']}}]}\n return receipt, outcome\n\n\nclass AuthorityAndCustody(unittest.TestCase):\n def test_exact_nested_founder_receipt_not_top_level_approval(self):\n receipt, outcome = accepted()\n result = authority(receipt, outcome, 'a' * 64, REVISION, 'drill-backup', NOW)\n self.assertEqual(result['approval_id'], receipt['approval_id'])\n\n def test_pending_stale_wrong_actor_version_and_binding_refuse(self):\n mutations = [lambda r, o: r.update(activation='PENDING'),\n lambda r, o: r.update(memo_sha256='changed'),\n lambda r, o: r.update(source_revision='changed'),\n lambda r, o: r.update(target='other'),\n lambda r, o: r.update(verified_at='2026-10-11T01:00:00Z'),\n lambda r, o: r.update(verification_method='caller-asserted'),\n lambda r, o: r.update(runtime_authenticated_grant=True),\n lambda r, o: o['review'].update(stale=True),\n lambda r, o: o['review'].update(intake_state='pending'),\n lambda r, o: o['dispositions'][0].update(submission_state='unresolved'),\n lambda r, o: o['dispositions'][0]['disposition'].update(memo_version=2),\n lambda r, o: o['dispositions'][0]['disposition'].update(actor={'kind': 'agent', 'sub': 'platform-root'}),\n lambda r, o: o['dispositions'].append(copy.deepcopy(o['dispositions'][0]))]\n for mutate in mutations:\n with self.subTest(mutate=mutate):\n r, o = accepted()\n mutate(r, o)\n with self.assertRaises(ValueError):\n authority(r, o, 'a' * 64, REVISION, 'release', NOW)\n\n def test_expired_window_and_unknown_phase_refuse(self):\n r, o = accepted()\n with self.assertRaises(ValueError):\n authority(r, o, 'a' * 64, REVISION, 'arbitrary', NOW)\n late = datetime.datetime(2026, 10, 13, tzinfo=datetime.timezone.utc)\n r['verified_at'] = late.isoformat()\n with self.assertRaises(ValueError):\n authority(r, o, 'a' * 64, REVISION, 'rollback', late)\n\n def test_durable_intent_precedes_dispatch_and_never_retries(self):\n with tempfile.TemporaryDirectory() as directory:\n parent = Path(directory)\n os.chmod(parent, 0o700)\n journal = Journal(parent, {'case': 'fixture'})\n journal.start('drill-backup', {'approval_id': 'fixture'})\n self.assertEqual(json.loads(journal.path.read_text())['phases']['drill-backup']['state'], 'RUNNING')\n journal.close() # simulated crash before result\n recovered = Journal(parent, {'case': 'fixture'})\n with self.assertRaises(ValueError):\n recovered.start('drill-backup', {})\n with self.assertRaises(ValueError):\n recovered.start('drill-copy', {})\n recovered.close()\n\n def test_phase_order_and_uncertain_release_allows_only_distinct_recovery(self):\n with tempfile.TemporaryDirectory() as directory:\n os.chmod(directory, 0o700)\n j = Journal(directory, {'case': 'fixture'})\n with self.assertRaises(ValueError):\n j.start('release', {})\n for phase in actuator.PHASES[:-3]:\n j.start(phase, {})\n j.finish(phase, {'all_checks_pass': True})\n j.start('release', {})\n j.finish('release', {'all_checks_pass': False})\n with self.assertRaises(ValueError):\n j.start('release', {})\n with self.assertRaises(ValueError):\n j.start('verify', {})\n j.start('rollback', {})\n j.finish('rollback', {'all_checks_pass': True})\n j.close()\n\n def test_secret_or_unknown_child_output_is_withheld(self):\n for body in ('not-json', '{\"all_checks_pass\":true,\"token\":\"private-value\"}',\n '{\"all_checks_pass\":true,\"snapshot_readonly\":{\"schema_version\":5}}'):\n with self.assertRaises(ValueError):\n actuator.json_result(subprocess.CompletedProcess([], 0, body, ''))\n wrong = copy.deepcopy(COUNT)\n wrong['outbox'] = {'private-row-value': 1}\n with self.assertRaises(ValueError):\n counts(wrong)\n counts(COUNT) # blocked/unresolved counts are not required to be zero.\n\n def test_binary_copy_is_bounded_private_and_never_echoed(self):\n blob = b'synthetic private fixture bytes'\n digest = __import__('hashlib').sha256(blob).hexdigest()\n metadata = {'all_checks_pass': True, 'snapshot_file': 'drill.sqlite', 'snapshot_bytes': len(blob),\n 'snapshot_sha256': digest, 'snapshot_readonly': COUNT,\n 'pod_name': 'fixture-pod', 'pod_uid': 'fixture-uid'}\n journal = type('FixtureJournal', (), {'data': {'phases': {'drill-backup': {'result': metadata}}}})()\n real_popen = subprocess.Popen\n for extra in (b'', b'oversized'):\n with self.subTest(extra=extra), tempfile.TemporaryDirectory() as folder:\n os.chmod(folder, 0o700)\n output = io.StringIO()\n\n def child(*args, **kwargs):\n return real_popen([sys.executable, '-c', 'import sys;sys.stdout.buffer.write(' + repr(blob + extra) + ')'],\n stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)\n\n with patch.object(actuator, 'CUSTODY', Path(folder)), patch.object(actuator, 'remote', return_value=metadata), \\\n patch('subprocess.Popen', side_effect=child), redirect_stdout(output):\n if extra:\n with self.assertRaises(ValueError):\n actuator.copy_snapshot('drill-copy', REVISION, {}, journal)\n else:\n result = actuator.copy_snapshot('drill-copy', REVISION, {}, journal)\n self.assertTrue(result['off_cluster_private_copy_verified'])\n self.assertEqual((Path(folder) / 'drill.sqlite').read_bytes(), blob)\n self.assertEqual(output.getvalue(), '')\n self.assertEqual((Path(folder) / 'drill.sqlite').stat().st_mode & 0o777, 0o600)\n\n def test_recreated_offline_volume_cannot_be_deleted(self):\n identity = {'Name': actuator.VOLUME, 'Labels': {'nonce': 'old'}, 'CreatedAt': 'old'}\n journal = type('FixtureJournal', (), {'data': {'phases': {\n 'offline-verify': {'result': {'created_volume_identity': identity}}}}})()\n inspected = [{**identity, 'CreatedAt': 'recreated'}]\n with patch.object(actuator, 'docker', return_value=subprocess.CompletedProcess([], 0, json.dumps(inspected), '')) as mocked:\n with self.assertRaises(ValueError):\n actuator.cleanup_offline(journal)\n self.assertEqual(mocked.call_count, 1)\n\n\nclass FixedNativeProgram(unittest.TestCase):\n def fixture(self):\n sealed = json.loads((CASE / 'sealed-live-deployment.json').read_text())\n live = copy.deepcopy(sealed)\n live['metadata'].update(generation=42)\n live['status'] = {'readyReplicas': 1, 'updatedReplicas': 1, 'observedGeneration': 42}\n dependencies = json.loads((CASE / 'sealed-native-dependencies.json').read_text())\n cm = copy.deepcopy(dependencies['configmap'])\n cm.pop('canonical_data_sha256')\n service = json.loads((CASE / 'candidate-deployment.json').read_text())\n source_service = json.loads((CASE.parents[2] / 'deploy/lifecycle/service.candidate.json').read_text())\n cm['data'] = next(x for x in source_service['items'] if x['kind'] == 'ConfigMap')['data']\n pvc = copy.deepcopy(dependencies['pvc'])\n pvc['status'] = {'phase': 'Bound'}\n app = {'metadata': {'uid': '499868f2-eabc-4df4-ae31-b89ce58d750d', 'resourceVersion': '17'},\n 'spec': {'source': {'repoURL': 'https://forgejo.coulomb.social/coulomb/informed-decision.git',\n 'path': 'deploy/lifecycle', 'targetRevision': '7db8485ffecdebfabd77a9daec085553c74bf0bf'},\n 'destination': {'namespace': 'informed-decision', 'server': 'https://kubernetes.default.svc'}}}\n objects = {'deployment': live, 'configmap': cm, 'pvc': pvc, 'application': app}\n payload = {'phase': 'release', 'source_revision': REVISION, 'approval': {}, 'sealed': sealed,\n 'dependencies': dependencies, 'candidate': service,\n 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()),\n 'readonly': (CASE / 'sqlite_readonly.py').read_text(),'purpose_checks':(CASE/'check_installed.py').read_text(),\n 'receipt_safety': (Path(__file__).parent / 'receipt_safety.py').read_text()}\n return objects, payload\n\n def execute_fake(self, objects, payload, ambiguous=False, schema_refused=False):\n writes = []\n calls = []\n\n def fake(argv, input=None, **kwargs):\n calls.append(argv)\n if argv[:2] == ['kubectl', 'get']:\n kind = argv[2]\n if kind in objects:\n body = objects[kind]\n elif kind == 'pods':\n body = {'items': [{'metadata': {'name': 'fixture-pod', 'uid': 'pod-uid',\n 'ownerReferences': [{'kind': 'ReplicaSet', 'name': 'fixture-rs', 'uid': 'rs-uid'}]},\n 'spec': objects['deployment']['spec']['template']['spec'],\n 'status': {'phase': 'Running', 'containerStatuses': [{'name':'informed-decision','ready': True}]}}]}\n elif kind == 'replicaset':\n body = {'metadata': {'uid': 'rs-uid', 'ownerReferences': [\n {'kind': 'Deployment', 'uid': payload['sealed']['metadata']['uid']}]}}\n elif kind == 'nodes':\n body = {'items': [{'metadata': {'name': 'fixture-node'}, 'status': {\n 'addresses': [{'address': '92.205.62.239'}], 'allocatable': {'cpu': '4'},\n 'conditions': [{'type': key, 'status': 'True' if key == 'Ready' else 'False'}\n for key in ('Ready', 'MemoryPressure', 'DiskPressure', 'PIDPressure')]}}]}\n else:\n raise AssertionError('unexpected fixed metadata route')\n return subprocess.CompletedProcess(argv, 0, json.dumps(body), '')\n if argv[:2] == ['kubectl', 'exec']:\n if schema_refused:\n return subprocess.CompletedProcess(argv, 1, '', 'withheld')\n return subprocess.CompletedProcess(argv, 0, json.dumps({\n 'all_checks_pass': True, 'live_readonly_schema_integrity_counts': COUNT}), '')\n if argv[:2] == ['kubectl', 'apply']:\n admitted = copy.deepcopy(payload['sealed'])\n admitted['spec']['template']['spec']['containers'][0]['image'] = actuator.IMAGE\n return subprocess.CompletedProcess(argv, 0, json.dumps(admitted), '')\n if argv[:2] == ['kubectl', 'describe']:\n return subprocess.CompletedProcess(argv, 0, 'Allocated resources:\\n cpu 3460m (86%)\\n', '')\n if argv[:2] == ['kubectl', 'diff']:\n return subprocess.CompletedProcess(argv, 1, '-image: base\\n+image: candidate\\n', '')\n if argv[:2] == ['kubectl', 'patch']:\n if '--dry-run=server' not in argv:\n writes.append(json.loads(input))\n if ambiguous:\n return subprocess.CompletedProcess(argv, 1, '', 'withheld')\n return subprocess.CompletedProcess(argv, 0, 'application.argoproj.io/informed-decision\\n', '')\n raise AssertionError('unexpected command')\n\n source = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace(\n '__GUARD__', repr((CASE / 'change_guard.py').read_text()))\n output = io.StringIO()\n with patch('subprocess.run', side_effect=fake), redirect_stdout(output):\n try:\n exec(compile(source, 'fixed-native-fixture', 'exec'), {'__name__': '__fixture__'})\n except (ValueError, SystemExit):\n pass\n receipt = json.loads(output.getvalue()) if output.getvalue() else {'all_checks_pass': False}\n return receipt, writes, calls\n\n def test_only_existing_application_operation_and_deployment_are_requested(self):\n objects, payload = self.fixture()\n receipt, writes, calls = self.execute_fake(objects, payload)\n self.assertTrue(receipt['all_checks_pass'])\n self.assertFalse(receipt['rollout_verified'])\n self.assertEqual(len(writes), 1)\n operation = writes[0][-1]['value']\n self.assertFalse(operation['sync']['prune'])\n self.assertEqual(operation['sync']['resources'], [\n {'group': 'apps', 'kind': 'Deployment', 'name': 'informed-decision', 'namespace': 'informed-decision'}])\n self.assertTrue(any('--dry-run=server' in argv and argv[:2] == ['kubectl', 'patch'] for argv in calls))\n self.assertEqual(writes[0][0]['path'], '/metadata/uid')\n\n def test_source_overrides_automation_and_custody_drift_stop_before_write(self):\n mutations = [lambda o: o['application']['metadata'].update(uid='recreated'),\n lambda o: o['application']['spec'].update(syncPolicy={'automated': {}}),\n lambda o: o['application']['spec']['source'].update(kustomize={'images': ['other']}),\n lambda o: o['application']['spec'].update(sources=[{}]),\n lambda o: o['configmap']['metadata'].update(uid='recreated'),\n lambda o: o['pvc']['spec'].update(volumeName='replaced'),\n lambda o: o['deployment']['status'].update(readyReplicas=0)]\n for mutate in mutations:\n with self.subTest(mutate=mutate):\n objects, payload = self.fixture()\n mutate(objects)\n receipt, writes, calls = self.execute_fake(objects, payload)\n self.assertFalse(receipt['all_checks_pass'])\n self.assertEqual(writes, [])\n\n def test_preopen_schema_refusal_prevents_image_operation(self):\n objects, payload = self.fixture()\n receipt, writes, calls = self.execute_fake(objects, payload, schema_refused=True)\n self.assertFalse(receipt['all_checks_pass'])\n self.assertEqual(writes, [])\n\n def test_ambiguous_patch_is_never_retried(self):\n objects, payload = self.fixture()\n receipt, writes, calls = self.execute_fake(objects, payload, ambiguous=True)\n self.assertFalse(receipt['all_checks_pass'])\n self.assertEqual(len(writes), 1)\n\n\nif __name__ == '__main__':\n unittest.main()\n" + }, + "validation.json": { + "sha256": "abefda88f48ae455205cf6c27033fa81f99e89baea9ffffb8c26749a53815a39", + "content": "{\n \"tests\": 12,\n \"result\": \"passed\",\n \"synthetic_transport_only\": true,\n \"real_native_data_read\": false,\n \"native_backup_export_restore_executed\": false,\n \"native_workload_changed\": false,\n \"actual_founder_approval\": false,\n \"local_read_only_capability_checks\": [\n \"argocdCLI absent, existingApplication.operation path retained\",\n \"Dockerunixsocket engineName bnt-lap001\"\n ],\n \"case_source_commit_at_preparation\": \"e0359bc (owner original78source; final helpercommit mustbe explicitlypinned)\"\n}\n" + } + }, + "native_execution": false +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/README.md b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/README.md new file mode 100644 index 0000000..65f417b --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/README.md @@ -0,0 +1,17 @@ +# Supervised Informed Decision purpose release executor — unapproved preparation + +No native database read, backup/export/restore or workload action has been run. This source implements the reviewed protocol; its additional mechanical details need peer review and an amended hash-bound packet before first human submission. The original78path packet/reviews remain historical technical agreement, not founder approval of this executor. + +Run one phase at a time only after the coordinator has freshly authenticated the exact founder disposition at the existing fixed Informed Decision origin. Root writes the protected0600 fixed files `/tmp/security-infd-purpose-root-authority.json` and `/tmp/security-infd-purpose-native-outcome-latest.json`. The receipt template is PENDING and cannot authorize anything. The helper checks exact nested confirmed person/platform-root ACCEPT version1, original memo identity/current memo SHA, source commit, plan SHA and freshness120seconds. This is supervised receipt bookkeeping, not cryptographic provider verification, a signed grant or agent autonomy promotion. Root/harness supervision remains the authority boundary. Never synthesize an approval receipt from a technical review or caller assertion. + +Invocation after actual approval: `python3 execution/actuator.py --phase --root-authority-receipt /tmp/security-infd-purpose-root-authority.json --root-native-outcome /tmp/security-infd-purpose-native-outcome-latest.json --source-revision `. Order: drill-backup → drill-copy → offline-verify → cleanup-offline → cutover-backup → cutover-copy → release → verify. Rollback is a distinct authorized recovery after a recorded release attempt. Root refreshes actual native acceptance immediately before each phase. + +The private ignored Custodian custody parent `.private-backups` must already exist,0700 owned by the workstation agent user; the exact case child20261011-infd-purpose-r1 is created only after authority checks. Native parent `/data/private/purpose-overlay-r1` is uniquely created by UID10001 for drill/cutover SQLite-consistent snapshots, each0600/nonsymlink/single-link. The attached stdlib readonly checker must report schema5/integrity/counts before any Store/admin on native source or offlineclone. Invalid states/count shapes and all raw child outputs are withheld. Main-only snapshot closure is verified before binary transfer; stdin/stdout snapshot bytes reach only private files or the isolated restore copy, never tool/chat/log output. Streams stop beyond frozen byte count/512MiB; failures retain partial private evidence. + +New private offline volume `infd-purpose-r1-restore-20261011` is created only on the pinned local workstation Docker socket/engine bnt-lap001, with localdriver/nooptions and attemptnonce labels. One-time initializer runs exact763c as UID0 with only CAP_CHOWN, networknone/read-onlyroot/no-newprivileges, one NEW namedvolume mount, no host/livePVC/credential/config mounts. It receives only the protected snapshot on stdin, verifies bytes, sets folder0700/file0600 owned10001. Then UID10001 performs readonly pre-open validation and `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite`, never the service entrypoint. Cleanup compares exact nonce/creation identity and removes only this clone volume, retaining all native/offcluster originals. CPU1/memory128MiB; private offcluster capacity at least1GiB+16MiB and native estimated two/one-snapshot headroom required. + +Every phase fsyncs RUNNING intent before dispatch. Any failure/interruption/ambiguous result remains UNCERTAIN; same-phase retry is refused. Separate operator diagnosis and any needed recovery are recorded; neither snapshots nor unresolved/new records are removed to make checks green. Frozen snapshot/clone counters must agree; live post-cutover/rollback counters can include legitimate concurrent commits/state transitions. + +Existing Application UID and actual Deployment/Pod/CM/PVC custody/source are checked. All four owner render Git blobs must match; overrides/plugins/multiple sources and even automated:{} are rejected. The existing Application.operation API is used (native argocd CLI is absent), with server dry-run, resourceVersion/UID/source tests, one Deployment only, prune=false. Dispatch acknowledgment is not rollout completion. Verify requires exact succeeded operation/controller generation/Ready1, same schema5 DB, actual installed hash/mode/UID and10purpose checks plus bounded localhosthealth/readiness. Purpose transport remains synthetic and is explicitly not a native PDP authority test. Rollback pins prior7db/7f5 through the same scoped workflow and retains the current live database; it never restores an older snapshot over later writes. + +Twelve synthetic tests pass against frozen case metadata: authority/expiry/actor/ambiguity refusals, crash intent/no retry/order, credential-output withholding, private bounded binarycopy, volume recreation cleanup refusal, source/automation/CM/PVC/Ready drift, pre-open gate refusal and exact Deployment-only operation/dry-run. These are source tests, not native backup or release proof. diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/actuator.py b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/actuator.py new file mode 100644 index 0000000..88e3fb6 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/actuator.py @@ -0,0 +1,343 @@ +"""One fixed supervised phase; never run this during source preparation.""" +import argparse +import hashlib +import json +import os +from pathlib import Path +import re +import selectors +import stat +import subprocess +import sys +import time + +if sys.flags.optimize: + raise SystemExit('optimized interpreter refused') + +PHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline', + 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback') + + +def require(value, reason): + if not value: + raise ValueError(reason) + + +def sha(path): + digest = hashlib.sha256() + with Path(path).open('rb') as stream: + for block in iter(lambda: stream.read(1024**2), b''): + digest.update(block) + return digest.hexdigest() + + +def private(path, directory=False): + info = Path(path).lstat() + require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode)) + and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600) + and (directory or info.st_nlink == 1), 'private owned custody required') + +ROOT = Path(__file__).resolve().parent +CASE = ROOT.parent +OWNER = Path('/home/worsch/informed-decision') +CUSTODIAN = Path('/home/worsch/the-custodian') +CUSTODY = CUSTODIAN / '.private-backups/20261011-infd-purpose-r1' +SOCKET = 'unix:///var/run/docker.sock' +IMAGE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a' +VOLUME = 'infd-purpose-r1-restore-20261011' +MAX_BYTES = 512 * 1024**2 + + +def run(argv, body=None, timeout=90): + return subprocess.run(argv, input=body, text=True, capture_output=True, timeout=timeout) + + +def json_result(result): + try: + value = json.loads(result.stdout) + except (ValueError, TypeError): + raise ValueError('safe phase receipt unavailable; outcome uncertain') from None + require(result.returncode == 0 and isinstance(value, dict) and value.get('all_checks_pass') is True, + 'phase did not verify complete; raw output withheld; no retry') + permitted = {'phase', 'all_checks_pass', 'raw_output_withheld', 'native_approval_verified_by_root', + 'native_authenticated_grant', 'source_readonly_baseline', 'snapshot_readonly', + 'snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'native_parent_private', + 'native_uid', 'pod_name', 'pod_uid', 'live_readonly_schema_integrity_counts', + 'live_counts_may_include_concurrent_commits', 'operation_requested', 'source_revision', + 'resources', 'prune', 'rollout_verified', 'latest_live_database_retained', + 'client_diff_sha256', 'native_rollout_verified', 'current_schema5_database_retained', + 'private_copy_verified', 'installed_purpose_checks', 'policy_sha256', + 'policy_mode', 'policy_uid', 'health_statuses', 'native_provider_probe'} + require(set(value) <= permitted, 'unexpected output fields withheld') + from receipt_safety import counts + for name in ('source_readonly_baseline', 'snapshot_readonly', 'live_readonly_schema_integrity_counts'): + if name in value: + counts(value[name]) + for name in ('snapshot_sha256', 'client_diff_sha256'): + if name in value: + require(re.fullmatch(r'[a-f0-9]{64}', value[name]) is not None, 'invalid output digest withheld') + if 'snapshot_bytes' in value: + require(type(value['snapshot_bytes']) is int and 0 < value['snapshot_bytes'] <= MAX_BYTES, + 'invalid output size withheld') + if 'snapshot_file' in value: + require(value['snapshot_file'] in ('drill.sqlite', 'cutover.sqlite'), 'invalid output file withheld') + return value + + +def docker(argv, body=None, timeout=120): + return run(['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET] + argv, + body=body, timeout=timeout) + + +def remote(phase, revision, approved): + # Fixed module imported only after main verifies every executor source hash. + from native_program import PROGRAM + payload = {'phase': phase, 'source_revision': revision, 'approval': approved, + 'sealed': json.loads((CASE / 'sealed-live-deployment.json').read_text()), + 'dependencies': json.loads((CASE / 'sealed-native-dependencies.json').read_text()), + 'candidate': json.loads((CASE / 'candidate-deployment.json').read_text()), + 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()), + 'receipt_safety': (ROOT / 'receipt_safety.py').read_text(), + 'purpose_checks': (CASE / 'check_installed.py').read_text(), + 'readonly': (CASE / 'sqlite_readonly.py').read_text()} + script = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace( + '__GUARD__', repr((CASE / 'change_guard.py').read_text())) + return json_result(run(['ssh', 'railiance01', 'python3 -'], script, timeout=200)) + + +def copy_snapshot(phase, revision, approved, journal): + metadata = remote(phase, revision, approved) + backup_phase = 'drill-backup' if phase == 'drill-copy' else 'cutover-backup' + prior = journal.data['phases'][backup_phase]['result'] + for key in ('snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'snapshot_readonly'): + require(metadata[key] == prior[key], 'closed frozen snapshot changed') + name = metadata['snapshot_file'] + require(name in ('drill.sqlite', 'cutover.sqlite') and 0 < metadata['snapshot_bytes'] <= MAX_BYTES, + 'fixed bounded snapshot required') + pod = metadata['pod_name'] + require(re.fullmatch(r'[a-z0-9]([-a-z0-9]*[a-z0-9])?', pod) is not None, 'fixed owner pod name required') + local = CUSTODY / name + fd = os.open(local, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600) + # Binary snapshot stdout goes only to a private file, never tool/chat/log output. + # Snapshot schema/count metadata was validated before opening this destination. + with os.fdopen(fd, 'wb') as destination: + command = ('kubectl exec -n informed-decision ' + pod + + ' -c informed-decision -- cat /data/private/purpose-overlay-r1/' + name) + transfer = subprocess.Popen(['ssh', 'railiance01', command], stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL) + selector = selectors.DefaultSelector() + selector.register(transfer.stdout, selectors.EVENT_READ) + deadline = time.monotonic() + 150 + received = 0 + try: + while True: + remaining = deadline - time.monotonic() + require(remaining > 0 and selector.select(remaining), 'private transfer timed out') + block = os.read(transfer.stdout.fileno(), 1024**2) + if not block: + break + received += len(block) + require(received <= metadata['snapshot_bytes'] and received <= MAX_BYTES, + 'private copy exceeds frozen snapshot size') + destination.write(block) + transfer.wait(timeout=max(1, deadline - time.monotonic())) + finally: + selector.close() + transfer.stdout.close() + if transfer.poll() is None: + transfer.kill() + transfer.wait() + destination.flush() + os.fsync(destination.fileno()) + private(local) + require(transfer.returncode == 0 and local.stat().st_size == metadata['snapshot_bytes'] + and sha(local) == metadata['snapshot_sha256'], 'private copy incomplete/uncertain; retain, no retry') + # Re-read identity/hash after transfer. This is verification, not a write retry. + after = remote(phase, revision, approved) + require(after['pod_uid'] == metadata['pod_uid'] and after['snapshot_sha256'] == metadata['snapshot_sha256'], + 'source identity/snapshot changed during transfer') + return {**metadata, 'off_cluster_private_copy_verified': True, 'snapshot_contents_output': False} + + +def offline_verify(journal): + from receipt_safety import counts + snapshot = CUSTODY / 'drill.sqlite' + private(snapshot) + previous = journal.data['phases']['drill-copy']['result'] + require(sha(snapshot) == previous['snapshot_sha256'], 'protected snapshot bytes changed') + identity = docker(['info', '--format', '{{json .Name}}']) + require(identity.returncode == 0 and json.loads(identity.stdout) == 'bnt-lap001', + 'local offline Docker engine identity changed') + listed = docker(['volume', 'ls', '--format', '{{.Name}}']) + require(listed.returncode == 0 and VOLUME not in listed.stdout.splitlines(), + 'disposable volume absence not verified') + nonce = journal.data['phases']['offline-verify']['attempt_id'] + labels = {'informed-decision.case': 'infd-purpose-20261011-r1', + 'informed-decision.use': 'offline-restore-only', 'informed-decision.attempt': nonce} + created = docker(['volume', 'create', '--driver', 'local', '--label', 'informed-decision.case=infd-purpose-20261011-r1', + '--label', 'informed-decision.attempt=' + nonce, + '--label', 'informed-decision.use=offline-restore-only', VOLUME]) + require(created.returncode == 0 and created.stdout.strip() == VOLUME, 'volume creation uncertain; no retry') + inspected = docker(['volume', 'inspect', VOLUME]) + require(inspected.returncode == 0, 'new volume identity unavailable') + volume = json.loads(inspected.stdout) + require(len(volume) == 1 and volume[0]['Name'] == VOLUME and volume[0].get('Labels') == labels + and volume[0].get('Driver') == 'local' and not volume[0].get('Options') + and volume[0].get('Scope') == 'local', 'new isolated volume identity changed') + identity = {key: volume[0][key] for key in ('Name', 'Labels', 'Driver', 'Scope', 'CreatedAt')} + journal.note('offline-verify', 'created_volume_identity', identity) + # One-time UID0/CAP_CHOWN initialization is isolated to the NEW named volume. + # No host/live PVC/config/token mount exists; this detail needs packet review. + initializer = """import hashlib,os,stat,sys +if sys.flags.optimize:raise RuntimeError('optimized interpreter refused') +folder='/restore';expected=EXPECTED +if os.listdir(folder):raise ValueError('new empty private volume required') +os.chmod(folder,0o700) +fd=os.open(folder+'/review.sqlite',os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW|os.O_WRONLY,0o600) +digest=hashlib.sha256();size=0 +with os.fdopen(fd,'wb') as target: + while True: + block=sys.stdin.buffer.read(1024**2) + if not block:break + size+=len(block) + if size>512*1024**2:raise ValueError('private restore size exceeds bound') + target.write(block);digest.update(block) + target.flush();os.fsync(target.fileno()) +if digest.hexdigest()!=expected:raise ValueError('private copied snapshot differs') +os.chown(folder+'/review.sqlite',10001,10001);os.chown(folder,10001,10001) +print('{"all_checks_pass":true,"private_copy_verified":true}') +""".replace('EXPECTED', repr(previous['snapshot_sha256'])) + with snapshot.open('rb') as source: + argv = ['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET, + 'run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m', + '--user', '0:0', '--cap-drop', 'ALL', '--cap-add', 'CHOWN', + '--security-opt', 'no-new-privileges', '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore', + '--entrypoint', 'python', IMAGE, '-c', initializer] + copied = subprocess.run(argv, stdin=source, text=True, capture_output=True, timeout=150) + json_result(copied) + options = ['run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m', + '--user', '10001:10001', '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges', + '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore'] + readonly = docker(options + ['--entrypoint', 'python', IMAGE, '-', '--db', '/restore/review.sqlite'], + (CASE / 'sqlite_readonly.py').read_text()) + require(readonly.returncode == 0, 'offline pre-open schema/integrity gate refused; never open Store') + checked = counts(json.loads(readonly.stdout)) + require(checked == previous['snapshot_readonly'], 'frozen snapshot/clone readonly counts differ') + admin = docker(options + ['--entrypoint', 'informed-decision-admin', IMAGE, + 'inspect', '--db', '/restore/review.sqlite']) + require(admin.returncode == 0, 'offline admin result uncertain') + admin_counts = json.loads(admin.stdout) + require(admin_counts == {key: checked[key] for key in ('schema_version', 'lifecycle', 'outbox', 'submissions')}, + 'offline admin changed frozen snapshot counters') + return {'all_checks_pass': True, 'offline_volume': VOLUME, 'offline_readonly': checked, + 'created_volume_identity': identity, + 'admin_counts': admin_counts, 'network': 'none', 'runtime_tokens_or_config_mounted': False, + 'service_entrypoint_started': False, 'original_snapshot_retained': True} + + +def cleanup_offline(journal): + inspected = docker(['volume', 'inspect', VOLUME]) + require(inspected.returncode == 0, 'owned disposable volume identity unverified') + value = json.loads(inspected.stdout) + expected = journal.data['phases']['offline-verify']['result']['created_volume_identity'] + require(len(value) == 1 and {key: value[0].get(key) for key in expected} == expected + and not value[0].get('Options'), 'volume ownership/recreation changed') + removed = docker(['volume', 'rm', VOLUME]) + require(removed.returncode == 0 and removed.stdout.strip() == VOLUME + and docker(['volume', 'inspect', VOLUME]).returncode != 0, + 'cleanup outcome ambiguous; do not retry') + return {'all_checks_pass': True, 'only_disposable_offline_volume_removed': VOLUME, + 'native_and_offcluster_original_snapshots_retained': True} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--phase', choices=PHASES, required=True) + parser.add_argument('--root-authority-receipt', type=Path, required=True) + parser.add_argument('--root-native-outcome', type=Path, required=True) + parser.add_argument('--source-revision', required=True) + args = parser.parse_args() + require(args.root_authority_receipt == Path('/tmp/security-infd-purpose-root-authority.json') + and args.root_native_outcome == Path('/tmp/security-infd-purpose-native-outcome-latest.json'), + 'fixed supervised receipt paths required') + require(re.fullmatch(r'[0-9a-f]{40}', args.source_revision) is not None, 'exact source commit required') + # Verify all prepared executor/input bytes before reading authority or dispatching. + plan = json.loads((ROOT / 'execution-plan.json').read_text()) + require(set(plan['executor_files']) == {'actuator.py', 'authority_journal.py', 'native_program.py', 'receipt_safety.py'}, + 'fixed executor sources required') + require(set(plan['owner_source_files']) == {'deploy/lifecycle/admission.candidate.json', + 'deploy/lifecycle/service.candidate.json', + 'deploy/lifecycle/kustomization.yaml', + 'deploy/lifecycle/registries.candidate.json'}, + 'fixed owner image sources required') + for relative, digest in plan['executor_files'].items(): + target = ROOT / relative + require(not target.is_symlink() and sha(target) == digest, 'executor source bytes changed') + for relative, digest in plan['case_files'].items(): + require(not Path(relative).is_absolute() and '..' not in Path(relative).parts, + 'case source path escaped') + target = CASE / relative + require(not target.is_symlink() and sha(target) == digest, 'case source bytes changed') + for relative, digest in plan['owner_source_files'].items(): + target = OWNER / relative + require(not target.is_symlink() and sha(target) == digest, 'owner image-only source changed') + committed = subprocess.run(['git', '-C', str(OWNER), 'show', args.source_revision + ':' + relative], + capture_output=True) + require(committed.returncode == 0 and hashlib.sha256(committed.stdout).hexdigest() == digest, + 'committed owner render source differs from approved inputs') + head = run(['git', '-C', str(OWNER), 'rev-parse', 'HEAD']) + require(head.returncode == 0 and head.stdout.strip() == args.source_revision, 'owner source HEAD differs') + from authority_journal import Journal, authority + private(args.root_authority_receipt) + private(args.root_native_outcome) + receipt = json.loads(args.root_authority_receipt.read_text()) + require(receipt.get('native_outcome_sha256') == sha(args.root_native_outcome), 'native outcome bytes changed') + require(receipt.get('executor_plan_sha256') == sha(ROOT / 'execution-plan.json'), + 'root verified executor plan differs') + approved = authority(receipt, json.loads(args.root_native_outcome.read_text()), sha(CASE / 'memo.json'), + args.source_revision, args.phase) + parent = CUSTODY.parent + private(parent, directory=True) + ignored = run(['git', '-C', str(CUSTODIAN), 'check-ignore', '--no-index', str(CUSTODY / 'drill.sqlite')]) + require(ignored.returncode == 0, 'offcluster custody is not ignored') + if not CUSTODY.exists(): + require(args.phase == 'drill-backup', 'first approved phase must create unique private custody') + os.mkdir(CUSTODY, 0o700) + private(CUSTODY, directory=True) + capacity = os.statvfs(CUSTODY) + require(capacity.f_bavail * capacity.f_frsize >= 2 * MAX_BYTES + 16 * 1024**2, + 'independent protected custody headroom insufficient') + os.makedirs(CUSTODY / 'empty-docker-config', mode=0o700, exist_ok=True) + private(CUSTODY / 'empty-docker-config', directory=True) + require(not list((CUSTODY / 'empty-docker-config').iterdir()), 'public Docker read config must stay empty') + journal = Journal(CUSTODY, {'proposal': plan['proposal_id'], 'source_revision': args.source_revision, + 'memo_sha256': sha(CASE / 'memo.json'), 'plan_sha256': sha(ROOT / 'execution-plan.json')}) + try: + journal.start(args.phase, approved) # fsynced RUNNING before any phase effect. + if args.phase in ('drill-copy', 'cutover-copy'): + result = copy_snapshot(args.phase, args.source_revision, approved, journal) + elif args.phase == 'offline-verify': + result = offline_verify(journal) + elif args.phase == 'cleanup-offline': + result = cleanup_offline(journal) + else: + result = remote(args.phase, args.source_revision, approved) + journal.finish(args.phase, result) + print(json.dumps(result)) # Only count/hash/identity receipts, never snapshot bytes. + except BaseException as error: + safe = {'all_checks_pass': False, 'phase': args.phase, 'failure_class': type(error).__name__, + 'failure': 'fixed phase outcome uncertain; original evidence retained; no retry', + 'raw_output_withheld': True} + if journal.data['phases'].get(args.phase, {}).get('state') == 'RUNNING': + journal.finish(args.phase, safe) + print(json.dumps(safe)) + raise SystemExit(1) from None + finally: + journal.close() + + +if __name__ == '__main__': + try: + main() + except Exception: + raise SystemExit('supervised execution refused before phase; raw output withheld') from None diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/authority_journal.py b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/authority_journal.py new file mode 100644 index 0000000..95c792b --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/authority_journal.py @@ -0,0 +1,146 @@ +"""Supervised receipt bookkeeping, not an authenticated approval provider.""" +import datetime +import fcntl +import hashlib +import json +import os +import re +from pathlib import Path +import stat +import uuid + +FOUNDER = {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'} +MEMO_ID = 'infd-20261011-purpose-overlay-r1' +PROPOSAL = 'INFD-WP-0009-T04/purpose-overlay-v1' +PHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline', + 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback') + + +def require(value, reason): + if not value: + raise ValueError(reason) + + +def sha(path): + digest = hashlib.sha256() + with Path(path).open('rb') as stream: + for block in iter(lambda: stream.read(1024**2), b''): + digest.update(block) + return digest.hexdigest() + + +def private(path, directory=False): + info = Path(path).lstat() + require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode)) + and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600) + and (directory or info.st_nlink == 1), 'private owned custody required') + + +def authority(receipt, outcome, memo_sha, source_revision, phase, now=None): + """Root must freshly verify native outcome at fixed ORIGIN outside this helper. + + Receipt files/flags are not signed grants. This function checks the exact + supervised receipt relation; existing harness/founder authority remains the + actual permission boundary. It never authenticates a caller as human. + """ + now = now or datetime.datetime.now(datetime.timezone.utc) + require(phase in PHASES, 'fixed phase required') + require(receipt.get('proposal_id') == PROPOSAL and receipt.get('memo_id') == MEMO_ID + and receipt.get('memo_version') == 1 and receipt.get('memo_sha256') == memo_sha + and receipt.get('source_revision') == source_revision + and receipt.get('activation') == 'APPROVED' + and receipt.get('authority_mode') == 'ADMINISTER' + and receipt.get('target') == 'realm:kubernetes/railiance01/informed-decision' + and receipt.get('verification_method') == 'root-fixed-origin-native-readback' + and receipt.get('runtime_authenticated_grant') is False, + 'exact externally verified supervised receipt required') + verified = datetime.datetime.fromisoformat(receipt['verified_at'].replace('Z', '+00:00')) + require(verified.tzinfo is not None and 0 <= (now - verified).total_seconds() <= 120, + 'fresh root native readback required before every phase') + deadline = datetime.datetime.fromisoformat('2026-10-12T23:59:59+00:00') + require(now < deadline, 'approved execution window expired') + require(outcome.get('memo_id') == MEMO_ID and outcome.get('review', {}).get('stale') is False + and outcome['review'].get('intake_state') == 'ready', 'native review is not ready/current') + review_id = outcome['review']['memo_id'] + require(review_id == receipt.get('review_memo_id'), 'native review identity changed') + accepted = [x for x in outcome.get('dispositions', []) + if x.get('submission_state') == 'confirmed' + and x.get('disposition', {}).get('verb') == 'accept' + and x['disposition'].get('memo_version') == 1] + require(len(accepted) == 1, 'one confirmed founder acceptance required') + accepted = accepted[0]['disposition'] + require(accepted.get('actor') == FOUNDER and accepted.get('memo_id') == review_id + and accepted.get('approval_id') == receipt.get('approval_id') + and accepted.get('id') == receipt.get('disposition_id') + and accepted.get('at') == receipt.get('accepted_at'), 'exact founder disposition mismatch') + require(re.fullmatch(r'[a-f0-9-]{36}', accepted['approval_id']) is not None + and re.fullmatch(r'disp-[a-f0-9-]{36}', accepted['id']) is not None + and re.fullmatch(r'review-[a-f0-9-]{36}', review_id) is not None, + 'native disposition identifiers are malformed') + accepted_at = datetime.datetime.fromisoformat(accepted['at'].replace('Z', '+00:00')) + require(accepted_at.tzinfo is not None and accepted_at <= verified, 'acceptance time not bounded') + return {key: receipt[key] for key in ('approval_id', 'disposition_id', 'accepted_at', 'verified_at')} + + +class Journal: + def __init__(self, parent, identity): + self.parent = Path(parent) + private(self.parent, directory=True) + self.path = self.parent / 'execution-journal.json' + self.lock = os.open(self.parent / 'execution.lock', os.O_CREAT | os.O_NOFOLLOW | os.O_RDWR, 0o600) + fcntl.flock(self.lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + private(self.parent / 'execution.lock') + if self.path.exists(): + private(self.path) + self.data = json.loads(self.path.read_text()) + require(self.data['identity'] == identity, 'journal case/source identity changed') + else: + self.data = {'identity': identity, 'phases': {}} + self.save() + + def save(self): + temporary = self.parent / 'execution-journal.new' + fd = os.open(temporary, os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW | os.O_WRONLY, 0o600) + try: + with os.fdopen(fd, 'w') as stream: + json.dump(self.data, stream, indent=2) + stream.write('\n') + stream.flush() + os.fsync(stream.fileno()) + os.replace(temporary, self.path) + directory = os.open(self.parent, os.O_DIRECTORY | os.O_RDONLY) + try: + os.fsync(directory) + finally: + os.close(directory) + except BaseException: + # Retain evidence rather than overwriting an uncertain durable intent. + raise + + def start(self, phase, approval): + require(phase not in self.data['phases'], 'already attempted phase; no retry') + predecessors = dict(zip(PHASES[1:-1], PHASES[:-2])) + if phase in predecessors: + require(self.data['phases'].get(predecessors[phase], {}).get('state') == 'COMPLETE', + 'preceding phase is not verified complete') + if phase == 'rollback': + require('release' in self.data['phases'], 'rollback requires a recorded release attempt') + self.data['phases'][phase] = {'state': 'RUNNING', 'approval': approval, + 'attempt_id': str(uuid.uuid4()), + 'started_at': datetime.datetime.now(datetime.timezone.utc).isoformat()} + self.save() + + def note(self, phase, key, value): + require(self.data['phases'][phase]['state'] == 'RUNNING', 'phase intent missing') + self.data['phases'][phase][key] = value + self.save() + + def finish(self, phase, result): + entry = self.data['phases'][phase] + require(entry['state'] == 'RUNNING', 'phase intent missing') + entry['result'] = result + entry['state'] = 'COMPLETE' if result.get('all_checks_pass') is True else 'UNCERTAIN' + self.save() + + def close(self): + os.close(self.lock) diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/execution-plan.json b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/execution-plan.json new file mode 100644 index 0000000..056d12a --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/execution-plan.json @@ -0,0 +1,49 @@ +{ + "kind": "informed-decision.supervised-mechanical-release-plan", + "version": 1, + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "trial_id": "infd-purpose-20261011-r1", + "state": "prepared-unapproved", + "executor_files": { + "actuator.py": "faf019cd011dee1032d3f309e85b1f1b0bf5f333d6e279701c3f7e233d54fe23", + "authority_journal.py": "55e441b1af7288540c31ea4733c3471559a2100a26fae8b6b0ed415e04d469a5", + "native_program.py": "3ad4fe28d0556a001f6334f3f8267d1e21d76e17db9765d3cc35b679a9db9ec5", + "receipt_safety.py": "5c54373f2dc4b064008225c186efb1d5afdeec36d15350bda0a12ded97602d1b" + }, + "case_files": { + "change_guard.py": "f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be", + "sqlite_readonly.py": "eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38", + "preflight-inputs.json": "756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06", + "sealed-live-deployment.json": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362", + "sealed-native-dependencies.json": "042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369", + "candidate-deployment.json": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e", + "rollback-deployment.json": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121", + "check_installed.py": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad", + "published-verification.json": "8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2", + "security-summary.json": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + "owner_source_files": { + "deploy/lifecycle/admission.candidate.json": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55", + "deploy/lifecycle/service.candidate.json": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4", + "deploy/lifecycle/kustomization.yaml": "1bbce81bc6758434354157f8601534320c5d0290587908fd15a6d25e3fa57f47", + "deploy/lifecycle/registries.candidate.json": "9bad6db5fbc2178d31b04120016a41830c3552fbb9e2517b718f9bbe87cf649e" + }, + "candidate_image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "prior_image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "source_revision": "must-be-exact-final-owner-HEAD-with-approved-four-Git-blobs", + "phases": [ + "drill-backup", + "drill-copy", + "offline-verify", + "cleanup-offline", + "cutover-backup", + "cutover-copy", + "release", + "verify", + "rollback" + ], + "authorization": "fresh externally authenticated root fixed-origin native readback before each phase; exact confirmed platform-root disposition and current packet SHA/source commit; receipt bookkeeping is not an autonomous signed grant", + "execute_by": "2026-10-12T23:59:59Z", + "raw_output_withheld": true, + "native_data_or_workload_action_executed": false +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/native_program.py b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/native_program.py new file mode 100644 index 0000000..c91ba36 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/native_program.py @@ -0,0 +1,2 @@ +"""Fixed supervised remote program; no standalone authority.""" +PROGRAM = '\nimport copy,datetime,hashlib,json,os,re,subprocess,sys\nif sys.flags.optimize:raise RuntimeError(\'optimized interpreter refused\')\npayload=json.loads(__PAYLOAD__)\nexec(__GUARD__)\nphase=payload[\'phase\']\nif phase not in (\'drill-backup\',\'cutover-backup\',\'drill-copy\',\'cutover-copy\',\'release\',\'verify\',\'rollback\'):raise ValueError(\'fixed native phase required\')\ndeadline=datetime.datetime.fromisoformat(\'2026-10-12T23:59:59+00:00\')\ndef require(value,reason):\n if not value:raise ValueError(reason)\nrequire(datetime.datetime.now(datetime.timezone.utc)0 and size<=512*1024**2 and free>=size*(2 if action==\'drill-backup\' else 1)+16*1024**2,\'bounded native snapshot capacity required\')\n if action==\'drill-backup\':\n require(not os.path.lexists(folder),\'native case directory must be unique\')\n os.mkdir(folder,0o700);os.chmod(folder,0o700)\n private(folder,True)\n filename=\'drill.sqlite\' if action==\'drill-backup\' else \'cutover.sqlite\';output=folder+\'/\'+filename\n require(not os.path.lexists(output),\'snapshot output must be unique\')\n admin=subprocess.run([\'informed-decision-admin\',\'backup\',\'--db\',db,\'--output\',output],capture_output=True,text=True,timeout=120)\n require(admin.returncode==0 and json.loads(admin.stdout)=={\'status\':\'backed_up\',\'consistent_snapshot\':True},\'backup completion not verified; do not retry\')\n private(output)\n for suffix in (\'-wal\',\'-shm\'):\n require(not os.path.exists(output+suffix) or os.stat(output+suffix).st_size==0,\'snapshot is not closed main-file custody\')\n snapshot=counts(inspect_readonly(output))\n size=os.stat(output).st_size;require(0 10**12 + for number in value[group].values()): + raise ValueError('count-only receipt values refused') + return value diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/root-authority-receipt-template.json b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/root-authority-receipt-template.json new file mode 100644 index 0000000..3f22cb3 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/root-authority-receipt-template.json @@ -0,0 +1,19 @@ +{ + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "memo_id": "infd-20261011-purpose-overlay-r1", + "memo_version": 1, + "memo_sha256": null, + "source_revision": null, + "activation": "PENDING", + "authority_mode": "ADMINISTER", + "target": "realm:kubernetes/railiance01/informed-decision", + "verification_method": "root-fixed-origin-native-readback", + "runtime_authenticated_grant": false, + "verified_at": null, + "accepted_at": null, + "review_memo_id": null, + "approval_id": null, + "disposition_id": null, + "native_outcome_sha256": null, + "executor_plan_sha256": "4d5530e7418f638b10ccff0e0d9a0727adc64a7f3a45907f6deb5739ad2adc85" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/test_execution.py b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/test_execution.py new file mode 100644 index 0000000..f976168 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/test_execution.py @@ -0,0 +1,296 @@ +"""Synthetic custody/transport tests. No native data, Docker or cluster action.""" +import copy +import datetime +import io +import json +import os +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest +from unittest.mock import patch +from contextlib import redirect_stdout + +import actuator +from authority_journal import Journal, authority +from native_program import PROGRAM +from receipt_safety import counts + +CASE = Path('/home/worsch/informed-decision/docs/evidence/2026-10-11-purpose-image-release') +NOW = datetime.datetime(2026, 10, 11, 2, 0, tzinfo=datetime.timezone.utc) +REVISION = 'e' * 40 +COUNT = {'schema_version': 5, 'integrity': 'ok', 'read_only_pre_open': True, 'store_constructed': False, + 'lifecycle': {'records': 3, 'events': 8, 'pending': 1}, + 'outbox': {'pending': 2, 'delivered': 10}, 'submissions': {'confirmed': 1, 'unresolved': 1}} + + +def accepted(): + approval = '11111111-1111-4111-8111-111111111111' + review = 'review-22222222-2222-4222-8222-222222222222' + disposition = 'disp-33333333-3333-4333-8333-333333333333' + receipt = {'proposal_id': 'INFD-WP-0009-T04/purpose-overlay-v1', + 'memo_id': 'infd-20261011-purpose-overlay-r1', 'memo_version': 1, + 'memo_sha256': 'a' * 64, 'source_revision': REVISION, 'activation': 'APPROVED', + 'authority_mode': 'ADMINISTER', 'target': 'realm:kubernetes/railiance01/informed-decision', + 'verification_method': 'root-fixed-origin-native-readback', 'runtime_authenticated_grant': False, + 'verified_at': '2026-10-11T02:00:00Z', 'accepted_at': '2026-10-11T01:59:00Z', + 'review_memo_id': review, 'approval_id': approval, 'disposition_id': disposition} + outcome = {'memo_id': receipt['memo_id'], 'review': {'memo_id': review, 'stale': False, 'intake_state': 'ready'}, + 'dispositions': [{'approval_id': None, 'submission_state': 'confirmed', + 'disposition': {'verb': 'accept', 'memo_version': 1, 'memo_id': review, + 'approval_id': approval, 'id': disposition, + 'actor': {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'}, + 'at': receipt['accepted_at']}}]} + return receipt, outcome + + +class AuthorityAndCustody(unittest.TestCase): + def test_exact_nested_founder_receipt_not_top_level_approval(self): + receipt, outcome = accepted() + result = authority(receipt, outcome, 'a' * 64, REVISION, 'drill-backup', NOW) + self.assertEqual(result['approval_id'], receipt['approval_id']) + + def test_pending_stale_wrong_actor_version_and_binding_refuse(self): + mutations = [lambda r, o: r.update(activation='PENDING'), + lambda r, o: r.update(memo_sha256='changed'), + lambda r, o: r.update(source_revision='changed'), + lambda r, o: r.update(target='other'), + lambda r, o: r.update(verified_at='2026-10-11T01:00:00Z'), + lambda r, o: r.update(verification_method='caller-asserted'), + lambda r, o: r.update(runtime_authenticated_grant=True), + lambda r, o: o['review'].update(stale=True), + lambda r, o: o['review'].update(intake_state='pending'), + lambda r, o: o['dispositions'][0].update(submission_state='unresolved'), + lambda r, o: o['dispositions'][0]['disposition'].update(memo_version=2), + lambda r, o: o['dispositions'][0]['disposition'].update(actor={'kind': 'agent', 'sub': 'platform-root'}), + lambda r, o: o['dispositions'].append(copy.deepcopy(o['dispositions'][0]))] + for mutate in mutations: + with self.subTest(mutate=mutate): + r, o = accepted() + mutate(r, o) + with self.assertRaises(ValueError): + authority(r, o, 'a' * 64, REVISION, 'release', NOW) + + def test_expired_window_and_unknown_phase_refuse(self): + r, o = accepted() + with self.assertRaises(ValueError): + authority(r, o, 'a' * 64, REVISION, 'arbitrary', NOW) + late = datetime.datetime(2026, 10, 13, tzinfo=datetime.timezone.utc) + r['verified_at'] = late.isoformat() + with self.assertRaises(ValueError): + authority(r, o, 'a' * 64, REVISION, 'rollback', late) + + def test_durable_intent_precedes_dispatch_and_never_retries(self): + with tempfile.TemporaryDirectory() as directory: + parent = Path(directory) + os.chmod(parent, 0o700) + journal = Journal(parent, {'case': 'fixture'}) + journal.start('drill-backup', {'approval_id': 'fixture'}) + self.assertEqual(json.loads(journal.path.read_text())['phases']['drill-backup']['state'], 'RUNNING') + journal.close() # simulated crash before result + recovered = Journal(parent, {'case': 'fixture'}) + with self.assertRaises(ValueError): + recovered.start('drill-backup', {}) + with self.assertRaises(ValueError): + recovered.start('drill-copy', {}) + recovered.close() + + def test_phase_order_and_uncertain_release_allows_only_distinct_recovery(self): + with tempfile.TemporaryDirectory() as directory: + os.chmod(directory, 0o700) + j = Journal(directory, {'case': 'fixture'}) + with self.assertRaises(ValueError): + j.start('release', {}) + for phase in actuator.PHASES[:-3]: + j.start(phase, {}) + j.finish(phase, {'all_checks_pass': True}) + j.start('release', {}) + j.finish('release', {'all_checks_pass': False}) + with self.assertRaises(ValueError): + j.start('release', {}) + with self.assertRaises(ValueError): + j.start('verify', {}) + j.start('rollback', {}) + j.finish('rollback', {'all_checks_pass': True}) + j.close() + + def test_secret_or_unknown_child_output_is_withheld(self): + for body in ('not-json', '{"all_checks_pass":true,"token":"private-value"}', + '{"all_checks_pass":true,"snapshot_readonly":{"schema_version":5}}'): + with self.assertRaises(ValueError): + actuator.json_result(subprocess.CompletedProcess([], 0, body, '')) + wrong = copy.deepcopy(COUNT) + wrong['outbox'] = {'private-row-value': 1} + with self.assertRaises(ValueError): + counts(wrong) + counts(COUNT) # blocked/unresolved counts are not required to be zero. + + def test_binary_copy_is_bounded_private_and_never_echoed(self): + blob = b'synthetic private fixture bytes' + digest = __import__('hashlib').sha256(blob).hexdigest() + metadata = {'all_checks_pass': True, 'snapshot_file': 'drill.sqlite', 'snapshot_bytes': len(blob), + 'snapshot_sha256': digest, 'snapshot_readonly': COUNT, + 'pod_name': 'fixture-pod', 'pod_uid': 'fixture-uid'} + journal = type('FixtureJournal', (), {'data': {'phases': {'drill-backup': {'result': metadata}}}})() + real_popen = subprocess.Popen + for extra in (b'', b'oversized'): + with self.subTest(extra=extra), tempfile.TemporaryDirectory() as folder: + os.chmod(folder, 0o700) + output = io.StringIO() + + def child(*args, **kwargs): + return real_popen([sys.executable, '-c', 'import sys;sys.stdout.buffer.write(' + repr(blob + extra) + ')'], + stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + + with patch.object(actuator, 'CUSTODY', Path(folder)), patch.object(actuator, 'remote', return_value=metadata), \ + patch('subprocess.Popen', side_effect=child), redirect_stdout(output): + if extra: + with self.assertRaises(ValueError): + actuator.copy_snapshot('drill-copy', REVISION, {}, journal) + else: + result = actuator.copy_snapshot('drill-copy', REVISION, {}, journal) + self.assertTrue(result['off_cluster_private_copy_verified']) + self.assertEqual((Path(folder) / 'drill.sqlite').read_bytes(), blob) + self.assertEqual(output.getvalue(), '') + self.assertEqual((Path(folder) / 'drill.sqlite').stat().st_mode & 0o777, 0o600) + + def test_recreated_offline_volume_cannot_be_deleted(self): + identity = {'Name': actuator.VOLUME, 'Labels': {'nonce': 'old'}, 'CreatedAt': 'old'} + journal = type('FixtureJournal', (), {'data': {'phases': { + 'offline-verify': {'result': {'created_volume_identity': identity}}}}})() + inspected = [{**identity, 'CreatedAt': 'recreated'}] + with patch.object(actuator, 'docker', return_value=subprocess.CompletedProcess([], 0, json.dumps(inspected), '')) as mocked: + with self.assertRaises(ValueError): + actuator.cleanup_offline(journal) + self.assertEqual(mocked.call_count, 1) + + +class FixedNativeProgram(unittest.TestCase): + def fixture(self): + sealed = json.loads((CASE / 'sealed-live-deployment.json').read_text()) + live = copy.deepcopy(sealed) + live['metadata'].update(generation=42) + live['status'] = {'readyReplicas': 1, 'updatedReplicas': 1, 'observedGeneration': 42} + dependencies = json.loads((CASE / 'sealed-native-dependencies.json').read_text()) + cm = copy.deepcopy(dependencies['configmap']) + cm.pop('canonical_data_sha256') + service = json.loads((CASE / 'candidate-deployment.json').read_text()) + source_service = json.loads((CASE.parents[2] / 'deploy/lifecycle/service.candidate.json').read_text()) + cm['data'] = next(x for x in source_service['items'] if x['kind'] == 'ConfigMap')['data'] + pvc = copy.deepcopy(dependencies['pvc']) + pvc['status'] = {'phase': 'Bound'} + app = {'metadata': {'uid': '499868f2-eabc-4df4-ae31-b89ce58d750d', 'resourceVersion': '17'}, + 'spec': {'source': {'repoURL': 'https://forgejo.coulomb.social/coulomb/informed-decision.git', + 'path': 'deploy/lifecycle', 'targetRevision': '7db8485ffecdebfabd77a9daec085553c74bf0bf'}, + 'destination': {'namespace': 'informed-decision', 'server': 'https://kubernetes.default.svc'}}} + objects = {'deployment': live, 'configmap': cm, 'pvc': pvc, 'application': app} + payload = {'phase': 'release', 'source_revision': REVISION, 'approval': {}, 'sealed': sealed, + 'dependencies': dependencies, 'candidate': service, + 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()), + 'readonly': (CASE / 'sqlite_readonly.py').read_text(),'purpose_checks':(CASE/'check_installed.py').read_text(), + 'receipt_safety': (Path(__file__).parent / 'receipt_safety.py').read_text()} + return objects, payload + + def execute_fake(self, objects, payload, ambiguous=False, schema_refused=False): + writes = [] + calls = [] + + def fake(argv, input=None, **kwargs): + calls.append(argv) + if argv[:2] == ['kubectl', 'get']: + kind = argv[2] + if kind in objects: + body = objects[kind] + elif kind == 'pods': + body = {'items': [{'metadata': {'name': 'fixture-pod', 'uid': 'pod-uid', + 'ownerReferences': [{'kind': 'ReplicaSet', 'name': 'fixture-rs', 'uid': 'rs-uid'}]}, + 'spec': objects['deployment']['spec']['template']['spec'], + 'status': {'phase': 'Running', 'containerStatuses': [{'name':'informed-decision','ready': True}]}}]} + elif kind == 'replicaset': + body = {'metadata': {'uid': 'rs-uid', 'ownerReferences': [ + {'kind': 'Deployment', 'uid': payload['sealed']['metadata']['uid']}]}} + elif kind == 'nodes': + body = {'items': [{'metadata': {'name': 'fixture-node'}, 'status': { + 'addresses': [{'address': '92.205.62.239'}], 'allocatable': {'cpu': '4'}, + 'conditions': [{'type': key, 'status': 'True' if key == 'Ready' else 'False'} + for key in ('Ready', 'MemoryPressure', 'DiskPressure', 'PIDPressure')]}}]} + else: + raise AssertionError('unexpected fixed metadata route') + return subprocess.CompletedProcess(argv, 0, json.dumps(body), '') + if argv[:2] == ['kubectl', 'exec']: + if schema_refused: + return subprocess.CompletedProcess(argv, 1, '', 'withheld') + return subprocess.CompletedProcess(argv, 0, json.dumps({ + 'all_checks_pass': True, 'live_readonly_schema_integrity_counts': COUNT}), '') + if argv[:2] == ['kubectl', 'apply']: + admitted = copy.deepcopy(payload['sealed']) + admitted['spec']['template']['spec']['containers'][0]['image'] = actuator.IMAGE + return subprocess.CompletedProcess(argv, 0, json.dumps(admitted), '') + if argv[:2] == ['kubectl', 'describe']: + return subprocess.CompletedProcess(argv, 0, 'Allocated resources:\n cpu 3460m (86%)\n', '') + if argv[:2] == ['kubectl', 'diff']: + return subprocess.CompletedProcess(argv, 1, '-image: base\n+image: candidate\n', '') + if argv[:2] == ['kubectl', 'patch']: + if '--dry-run=server' not in argv: + writes.append(json.loads(input)) + if ambiguous: + return subprocess.CompletedProcess(argv, 1, '', 'withheld') + return subprocess.CompletedProcess(argv, 0, 'application.argoproj.io/informed-decision\n', '') + raise AssertionError('unexpected command') + + source = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace( + '__GUARD__', repr((CASE / 'change_guard.py').read_text())) + output = io.StringIO() + with patch('subprocess.run', side_effect=fake), redirect_stdout(output): + try: + exec(compile(source, 'fixed-native-fixture', 'exec'), {'__name__': '__fixture__'}) + except (ValueError, SystemExit): + pass + receipt = json.loads(output.getvalue()) if output.getvalue() else {'all_checks_pass': False} + return receipt, writes, calls + + def test_only_existing_application_operation_and_deployment_are_requested(self): + objects, payload = self.fixture() + receipt, writes, calls = self.execute_fake(objects, payload) + self.assertTrue(receipt['all_checks_pass']) + self.assertFalse(receipt['rollout_verified']) + self.assertEqual(len(writes), 1) + operation = writes[0][-1]['value'] + self.assertFalse(operation['sync']['prune']) + self.assertEqual(operation['sync']['resources'], [ + {'group': 'apps', 'kind': 'Deployment', 'name': 'informed-decision', 'namespace': 'informed-decision'}]) + self.assertTrue(any('--dry-run=server' in argv and argv[:2] == ['kubectl', 'patch'] for argv in calls)) + self.assertEqual(writes[0][0]['path'], '/metadata/uid') + + def test_source_overrides_automation_and_custody_drift_stop_before_write(self): + mutations = [lambda o: o['application']['metadata'].update(uid='recreated'), + lambda o: o['application']['spec'].update(syncPolicy={'automated': {}}), + lambda o: o['application']['spec']['source'].update(kustomize={'images': ['other']}), + lambda o: o['application']['spec'].update(sources=[{}]), + lambda o: o['configmap']['metadata'].update(uid='recreated'), + lambda o: o['pvc']['spec'].update(volumeName='replaced'), + lambda o: o['deployment']['status'].update(readyReplicas=0)] + for mutate in mutations: + with self.subTest(mutate=mutate): + objects, payload = self.fixture() + mutate(objects) + receipt, writes, calls = self.execute_fake(objects, payload) + self.assertFalse(receipt['all_checks_pass']) + self.assertEqual(writes, []) + + def test_preopen_schema_refusal_prevents_image_operation(self): + objects, payload = self.fixture() + receipt, writes, calls = self.execute_fake(objects, payload, schema_refused=True) + self.assertFalse(receipt['all_checks_pass']) + self.assertEqual(writes, []) + + def test_ambiguous_patch_is_never_retried(self): + objects, payload = self.fixture() + receipt, writes, calls = self.execute_fake(objects, payload, ambiguous=True) + self.assertFalse(receipt['all_checks_pass']) + self.assertEqual(len(writes), 1) + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/validation.json b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/validation.json new file mode 100644 index 0000000..cae9e6b --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/execution/validation.json @@ -0,0 +1,14 @@ +{ + "tests": 12, + "result": "passed", + "synthetic_transport_only": true, + "real_native_data_read": false, + "native_backup_export_restore_executed": false, + "native_workload_changed": false, + "actual_founder_approval": false, + "local_read_only_capability_checks": [ + "argocdCLI absent, existingApplication.operation path retained", + "Dockerunixsocket engineName bnt-lap001" + ], + "case_source_commit_at_preparation": "e0359bc (owner original78source; final helpercommit mustbe explicitlypinned)" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/original-manifest.json b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/original-manifest.json new file mode 100644 index 0000000..3662887 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution-history/initial-653b68c3/original-manifest.json @@ -0,0 +1,79 @@ +[ + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/README.md", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/README.md", + "original_sha256": null, + "staged_sha256": "91d7b3c36498629bb4632b2a45cd75b67bf3a8ce8ab924d6a754a67410fadf6f" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/actuator.py", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/actuator.py", + "original_sha256": null, + "staged_sha256": "faf019cd011dee1032d3f309e85b1f1b0bf5f333d6e279701c3f7e233d54fe23" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/authority_journal.py", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/authority_journal.py", + "original_sha256": null, + "staged_sha256": "55e441b1af7288540c31ea4733c3471559a2100a26fae8b6b0ed415e04d469a5" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/execution-plan.json", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/execution-plan.json", + "original_sha256": null, + "staged_sha256": "4d5530e7418f638b10ccff0e0d9a0727adc64a7f3a45907f6deb5739ad2adc85" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/native_program.py", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/native_program.py", + "original_sha256": null, + "staged_sha256": "3ad4fe28d0556a001f6334f3f8267d1e21d76e17db9765d3cc35b679a9db9ec5" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/packet-refinement.json", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/packet-refinement.json", + "original_sha256": null, + "staged_sha256": "003f08e4ff4abe96478f1db9d5b13e4a49a16cdc724090ba0d40a9f7e8440624" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/receipt_safety.py", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/receipt_safety.py", + "original_sha256": null, + "staged_sha256": "5c54373f2dc4b064008225c186efb1d5afdeec36d15350bda0a12ded97602d1b" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/root-authority-receipt-template.json", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/root-authority-receipt-template.json", + "original_sha256": null, + "staged_sha256": "15966b7c6f088a033baf1fef878ddb351de2fa2ae46b5bc710265ed172ab2813" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/test_execution.py", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/test_execution.py", + "original_sha256": null, + "staged_sha256": "d4f20fba850f0303a87971d2498bccc894ab39b7584ce98756e1c536e517fb18" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution/validation.json", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution/validation.json", + "original_sha256": null, + "staged_sha256": "abefda88f48ae455205cf6c27033fa81f99e89baea9ffffb8c26749a53815a39" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/execution-bundle.json", + "staged_path": "/tmp/infd-purpose-execution-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/execution-bundle.json", + "original_sha256": null, + "staged_sha256": "0a79eda40fe0954fd3828bf06fd6ccf149e294ac194bc6fe605e585b878fa8d3" + } +] diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution/README.md b/docs/evidence/2026-10-11-purpose-image-release/execution/README.md new file mode 100644 index 0000000..b3c8083 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution/README.md @@ -0,0 +1,21 @@ +# Supervised Informed Decision purpose release executor — unapproved preparation + +No native database read, backup/export/restore or workload action has been run. This source implements the reviewed protocol; its additional mechanical details need peer review and an amended hash-bound packet before first human submission. The original78path packet/reviews remain historical technical agreement, not founder approval of this executor. + +Run one phase at a time only after the coordinator has freshly authenticated the exact founder disposition at the existing fixed Informed Decision origin. Root writes the protected0600 fixed files `/tmp/security-infd-purpose-root-authority.json` and `/tmp/security-infd-purpose-native-outcome-latest.json`. The receipt template is PENDING and cannot authorize anything. The helper checks exact nested confirmed person/platform-root ACCEPT version1, original memo identity/current memo SHA, source commit, plan SHA and freshness120seconds. This is supervised receipt bookkeeping, not cryptographic provider verification, a signed grant or agent autonomy promotion. Root/harness supervision remains the authority boundary. Never synthesize an approval receipt from a technical review or caller assertion. + +Invocation after actual approval: `python3 execution/actuator.py --phase --root-authority-receipt /tmp/security-infd-purpose-root-authority.json --root-native-outcome /tmp/security-infd-purpose-native-outcome-latest.json --source-revision `. Order: drill-backup → drill-copy → offline-verify → cleanup-offline → cutover-backup → cutover-copy → release → verify. Rollback is a distinct authorized recovery after a recorded release attempt, followed by rollback-verify. Rollback dispatch needs no Ready Pod or candidate database exec: sealed Deployment/CM/PVC/source/image pair and admission CAS remain mandatory. Its acknowledgment is not recovery completion; rollback-verify separately requires Ready1 of the old image, succeeded exact scoped operation and readonly schema5/integrity/count proof of the current retained database. Root refreshes actual native acceptance immediately before each phase. + +The private ignored Custodian custody parent `.private-backups` must already exist,0700 owned by the workstation agent user; the exact case child20261011-infd-purpose-r1 is created only after authority checks. Native parent `/data/private/purpose-overlay-r1` is uniquely created by UID10001 for drill/cutover SQLite-consistent snapshots, each0600/nonsymlink/single-link. The attached stdlib readonly checker must report schema5/integrity/counts before any Store/admin on native source or offlineclone. Invalid states/count shapes and all raw child outputs are withheld. Main-only snapshot closure is verified before binary transfer; stdin/stdout snapshot bytes reach only private files or the isolated restore copy, never tool/chat/log output. Streams stop beyond frozen byte count/512MiB; failures retain partial private evidence. + +New private offline volume `infd-purpose-r1-restore-20261011` is created only on the pinned local workstation Docker socket/engine bnt-lap001, with localdriver/nooptions and attemptnonce labels. One-time initializer runs exact763c as UID0 with only CAP_CHOWN, networknone/read-onlyroot/no-newprivileges, one NEW namedvolume mount, no host/livePVC/credential/config mounts. It receives only the protected snapshot on stdin, verifies bytes, sets folder0700/file0600 owned10001. Then UID10001 performs readonly pre-open validation, `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite`, never the service entrypoint. A second UID10001/network-none readonly integrity/schema/count check after admin must exactly equal the frozen snapshot proof, and the original protected snapshot SHA must remain unchanged. Cleanup compares exact nonce/creation identity and removes only this clone volume, retaining all native/offcluster originals. CPU1/memory128MiB; private offcluster capacity at least1GiB+16MiB and native estimated two/one-snapshot headroom required. + +Every phase fsyncs RUNNING intent before dispatch. Any failure/interruption/ambiguous result remains UNCERTAIN; same-phase retry is refused. Separate operator diagnosis and any needed recovery are recorded; neither snapshots nor unresolved/new records are removed to make checks green. Frozen snapshot/clone counters must agree; live post-cutover/rollback counters can include legitimate concurrent commits/state transitions. + +Existing Application UID and actual Deployment/Pod/CM/PVC custody/source are checked. All four owner render Git blobs must match; overrides/plugins/multiple sources and even automated:{} are rejected. The existing Application.operation API is used (native argocd CLI is absent), with server dry-run, resourceVersion/UID/source tests, one Deployment only, prune=false. Dispatch acknowledgment is not rollout completion. Verify requires exact succeeded operation/controller generation/Ready1, same schema5 DB, actual installed hash/mode/UID and10purpose checks plus bounded localhosthealth/readiness. Purpose transport remains synthetic and is explicitly not a native PDP authority test. Rollback pins prior7db/7f5 through the same scoped workflow and retains the current live database; it never restores an older snapshot over later writes. + +Sixteen synthetic tests pass against frozen case metadata: authority/expiry/actor/ambiguity refusals, crash intent/no retry/order, credential-output withholding, private bounded binarycopy, volume recreation cleanup refusal, source/automation/CM/PVC/Ready drift, pre-open gate refusal and exact Deployment-only operation/dry-run. These are source tests, not native backup or release proof. + +All phases, including recovery and verification, are bounded by 2026-10-12T23:59:59Z. This explicitly refines the earlier packet deadline wording for unstarted release: the helper does not extend authority past the deadline. Start sufficiently early to complete drill/cutover/recovery; after expiry stop and obtain a fresh founder decision. This may delay recovery if the window is exhausted, and must be disclosed before acceptance. + +The initial 11-file helper freeze SHA653b68c3891c066f40d104bfc67a35da5e436605cd99afd52fbac4b47a9553fe and independent conditional findings remain archived under execution-history/initial-653b68c3. This refinement is the same proposal/trial; no native execution or human acceptance has occurred. diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution/actuator.py b/docs/evidence/2026-10-11-purpose-image-release/execution/actuator.py new file mode 100644 index 0000000..c5cb78f --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution/actuator.py @@ -0,0 +1,353 @@ +"""One fixed supervised phase; never run this during source preparation.""" +import argparse +import hashlib +import json +import os +from pathlib import Path +import re +import selectors +import stat +import subprocess +import sys +import time + +if sys.flags.optimize: + raise SystemExit('optimized interpreter refused') + +PHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline', + 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback', 'rollback-verify') + + +def require(value, reason): + if not value: + raise ValueError(reason) + + +def sha(path): + digest = hashlib.sha256() + with Path(path).open('rb') as stream: + for block in iter(lambda: stream.read(1024**2), b''): + digest.update(block) + return digest.hexdigest() + + +def private(path, directory=False): + info = Path(path).lstat() + require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode)) + and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600) + and (directory or info.st_nlink == 1), 'private owned custody required') + +ROOT = Path(__file__).resolve().parent +CASE = ROOT.parent +OWNER = Path('/home/worsch/informed-decision') +CUSTODIAN = Path('/home/worsch/the-custodian') +CUSTODY = CUSTODIAN / '.private-backups/20261011-infd-purpose-r1' +SOCKET = 'unix:///var/run/docker.sock' +IMAGE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a' +VOLUME = 'infd-purpose-r1-restore-20261011' +MAX_BYTES = 512 * 1024**2 + + +def run(argv, body=None, timeout=90): + return subprocess.run(argv, input=body, text=True, capture_output=True, timeout=timeout) + + +def json_result(result): + try: + value = json.loads(result.stdout) + except (ValueError, TypeError): + raise ValueError('safe phase receipt unavailable; outcome uncertain') from None + require(result.returncode == 0 and isinstance(value, dict) and value.get('all_checks_pass') is True, + 'phase did not verify complete; raw output withheld; no retry') + permitted = {'phase', 'all_checks_pass', 'raw_output_withheld', 'native_approval_verified_by_root', + 'native_authenticated_grant', 'source_readonly_baseline', 'snapshot_readonly', + 'snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'native_parent_private', + 'native_uid', 'pod_name', 'pod_uid', 'live_readonly_schema_integrity_counts', + 'live_counts_may_include_concurrent_commits', 'operation_requested', 'source_revision', + 'resources', 'prune', 'rollout_verified', 'latest_live_database_retained', + 'client_diff_sha256', 'native_rollout_verified', 'current_schema5_database_retained', + 'private_copy_verified', 'installed_purpose_checks', 'policy_sha256', + 'policy_mode', 'policy_uid', 'health_statuses', 'native_provider_probe', 'recovery_verification'} + require(set(value) <= permitted, 'unexpected output fields withheld') + from receipt_safety import counts + for name in ('source_readonly_baseline', 'snapshot_readonly', 'live_readonly_schema_integrity_counts'): + if name in value: + counts(value[name]) + for name in ('snapshot_sha256', 'client_diff_sha256'): + if name in value: + require(re.fullmatch(r'[a-f0-9]{64}', value[name]) is not None, 'invalid output digest withheld') + if 'snapshot_bytes' in value: + require(type(value['snapshot_bytes']) is int and 0 < value['snapshot_bytes'] <= MAX_BYTES, + 'invalid output size withheld') + if 'snapshot_file' in value: + require(value['snapshot_file'] in ('drill.sqlite', 'cutover.sqlite'), 'invalid output file withheld') + return value + + +def docker(argv, body=None, timeout=120): + return run(['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET] + argv, + body=body, timeout=timeout) + + +def remote(phase, revision, approved): + # Fixed module imported only after main verifies every executor source hash. + from native_program import PROGRAM + payload = {'phase': phase, 'source_revision': revision, 'approval': approved, + 'sealed': json.loads((CASE / 'sealed-live-deployment.json').read_text()), + 'dependencies': json.loads((CASE / 'sealed-native-dependencies.json').read_text()), + 'candidate': json.loads((CASE / 'candidate-deployment.json').read_text()), + 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()), + 'receipt_safety': (ROOT / 'receipt_safety.py').read_text(), + 'purpose_checks': (CASE / 'check_installed.py').read_text(), + 'readonly': (CASE / 'sqlite_readonly.py').read_text()} + script = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace( + '__GUARD__', repr((CASE / 'change_guard.py').read_text())) + return json_result(run(['ssh', 'railiance01', 'python3 -'], script, timeout=200)) + + +def copy_snapshot(phase, revision, approved, journal): + metadata = remote(phase, revision, approved) + backup_phase = 'drill-backup' if phase == 'drill-copy' else 'cutover-backup' + prior = journal.data['phases'][backup_phase]['result'] + for key in ('snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'snapshot_readonly'): + require(metadata[key] == prior[key], 'closed frozen snapshot changed') + name = metadata['snapshot_file'] + require(name in ('drill.sqlite', 'cutover.sqlite') and 0 < metadata['snapshot_bytes'] <= MAX_BYTES, + 'fixed bounded snapshot required') + pod = metadata['pod_name'] + require(re.fullmatch(r'[a-z0-9]([-a-z0-9]*[a-z0-9])?', pod) is not None, 'fixed owner pod name required') + local = CUSTODY / name + fd = os.open(local, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600) + # Binary snapshot stdout goes only to a private file, never tool/chat/log output. + # Snapshot schema/count metadata was validated before opening this destination. + with os.fdopen(fd, 'wb') as destination: + command = ('kubectl exec -n informed-decision ' + pod + + ' -c informed-decision -- cat /data/private/purpose-overlay-r1/' + name) + transfer = subprocess.Popen(['ssh', 'railiance01', command], stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL) + selector = selectors.DefaultSelector() + selector.register(transfer.stdout, selectors.EVENT_READ) + deadline = time.monotonic() + 150 + received = 0 + try: + while True: + remaining = deadline - time.monotonic() + require(remaining > 0 and selector.select(remaining), 'private transfer timed out') + block = os.read(transfer.stdout.fileno(), 1024**2) + if not block: + break + received += len(block) + require(received <= metadata['snapshot_bytes'] and received <= MAX_BYTES, + 'private copy exceeds frozen snapshot size') + destination.write(block) + transfer.wait(timeout=max(1, deadline - time.monotonic())) + finally: + selector.close() + transfer.stdout.close() + if transfer.poll() is None: + transfer.kill() + transfer.wait() + destination.flush() + os.fsync(destination.fileno()) + private(local) + require(transfer.returncode == 0 and local.stat().st_size == metadata['snapshot_bytes'] + and sha(local) == metadata['snapshot_sha256'], 'private copy incomplete/uncertain; retain, no retry') + # Re-read identity/hash after transfer. This is verification, not a write retry. + after = remote(phase, revision, approved) + require(after['pod_uid'] == metadata['pod_uid'] and after['snapshot_sha256'] == metadata['snapshot_sha256'], + 'source identity/snapshot changed during transfer') + return {**metadata, 'off_cluster_private_copy_verified': True, 'snapshot_contents_output': False} + + +def offline_verify(journal): + from receipt_safety import counts + snapshot = CUSTODY / 'drill.sqlite' + private(snapshot) + previous = journal.data['phases']['drill-copy']['result'] + require(sha(snapshot) == previous['snapshot_sha256'], 'protected snapshot bytes changed') + identity = docker(['info', '--format', '{{json .Name}}']) + require(identity.returncode == 0 and json.loads(identity.stdout) == 'bnt-lap001', + 'local offline Docker engine identity changed') + listed = docker(['volume', 'ls', '--format', '{{.Name}}']) + require(listed.returncode == 0 and VOLUME not in listed.stdout.splitlines(), + 'disposable volume absence not verified') + nonce = journal.data['phases']['offline-verify']['attempt_id'] + labels = {'informed-decision.case': 'infd-purpose-20261011-r1', + 'informed-decision.use': 'offline-restore-only', 'informed-decision.attempt': nonce} + created = docker(['volume', 'create', '--driver', 'local', '--label', 'informed-decision.case=infd-purpose-20261011-r1', + '--label', 'informed-decision.attempt=' + nonce, + '--label', 'informed-decision.use=offline-restore-only', VOLUME]) + require(created.returncode == 0 and created.stdout.strip() == VOLUME, 'volume creation uncertain; no retry') + inspected = docker(['volume', 'inspect', VOLUME]) + require(inspected.returncode == 0, 'new volume identity unavailable') + volume = json.loads(inspected.stdout) + require(len(volume) == 1 and volume[0]['Name'] == VOLUME and volume[0].get('Labels') == labels + and volume[0].get('Driver') == 'local' and not volume[0].get('Options') + and volume[0].get('Scope') == 'local', 'new isolated volume identity changed') + identity = {key: volume[0][key] for key in ('Name', 'Labels', 'Driver', 'Scope', 'CreatedAt')} + journal.note('offline-verify', 'created_volume_identity', identity) + # One-time UID0/CAP_CHOWN initialization is isolated to the NEW named volume. + # No host/live PVC/config/token mount exists; this detail needs packet review. + initializer = """import hashlib,os,stat,sys +if sys.flags.optimize:raise RuntimeError('optimized interpreter refused') +folder='/restore';expected=EXPECTED +if os.listdir(folder):raise ValueError('new empty private volume required') +os.chmod(folder,0o700) +fd=os.open(folder+'/review.sqlite',os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW|os.O_WRONLY,0o600) +digest=hashlib.sha256();size=0 +with os.fdopen(fd,'wb') as target: + while True: + block=sys.stdin.buffer.read(1024**2) + if not block:break + size+=len(block) + if size>512*1024**2:raise ValueError('private restore size exceeds bound') + target.write(block);digest.update(block) + target.flush();os.fsync(target.fileno()) +if digest.hexdigest()!=expected:raise ValueError('private copied snapshot differs') +os.chown(folder+'/review.sqlite',10001,10001);os.chown(folder,10001,10001) +print('{"all_checks_pass":true,"private_copy_verified":true}') +""".replace('EXPECTED', repr(previous['snapshot_sha256'])) + with snapshot.open('rb') as source: + argv = ['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET, + 'run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m', + '--user', '0:0', '--cap-drop', 'ALL', '--cap-add', 'CHOWN', + '--security-opt', 'no-new-privileges', '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore', + '--entrypoint', 'python', IMAGE, '-c', initializer] + copied = subprocess.run(argv, stdin=source, text=True, capture_output=True, timeout=150) + json_result(copied) + options = ['run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m', + '--user', '10001:10001', '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges', + '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore'] + readonly = docker(options + ['--entrypoint', 'python', IMAGE, '-', '--db', '/restore/review.sqlite'], + (CASE / 'sqlite_readonly.py').read_text()) + require(readonly.returncode == 0, 'offline pre-open schema/integrity gate refused; never open Store') + checked = counts(json.loads(readonly.stdout)) + require(checked == previous['snapshot_readonly'], 'frozen snapshot/clone readonly counts differ') + admin = docker(options + ['--entrypoint', 'informed-decision-admin', IMAGE, + 'inspect', '--db', '/restore/review.sqlite']) + require(admin.returncode == 0, 'offline admin result uncertain') + admin_counts = json.loads(admin.stdout) + require(admin_counts == {key: checked[key] for key in ('schema_version', 'lifecycle', 'outbox', 'submissions')}, + 'offline admin changed frozen snapshot counters') + # Admin Store construction must not silently alter schema/integrity/counters. + post = docker(options + ['--entrypoint', 'python', IMAGE, '-', '--db', '/restore/review.sqlite'], + (CASE / 'sqlite_readonly.py').read_text()) + require(post.returncode == 0, 'offline post-admin readonly integrity gate refused') + post_checked = counts(json.loads(post.stdout)) + require(post_checked == checked == previous['snapshot_readonly'], + 'offline admin altered frozen snapshot proof') + private(snapshot) + require(sha(snapshot) == previous['snapshot_sha256'], 'original protected snapshot changed during drill') + return {'all_checks_pass': True, 'offline_volume': VOLUME, 'offline_readonly': checked, + 'offline_post_admin_readonly': post_checked, 'original_snapshot_hash_unchanged': True, + 'created_volume_identity': identity, + 'admin_counts': admin_counts, 'network': 'none', 'runtime_tokens_or_config_mounted': False, + 'service_entrypoint_started': False, 'original_snapshot_retained': True} + + +def cleanup_offline(journal): + inspected = docker(['volume', 'inspect', VOLUME]) + require(inspected.returncode == 0, 'owned disposable volume identity unverified') + value = json.loads(inspected.stdout) + expected = journal.data['phases']['offline-verify']['result']['created_volume_identity'] + require(len(value) == 1 and {key: value[0].get(key) for key in expected} == expected + and not value[0].get('Options'), 'volume ownership/recreation changed') + removed = docker(['volume', 'rm', VOLUME]) + require(removed.returncode == 0 and removed.stdout.strip() == VOLUME + and docker(['volume', 'inspect', VOLUME]).returncode != 0, + 'cleanup outcome ambiguous; do not retry') + return {'all_checks_pass': True, 'only_disposable_offline_volume_removed': VOLUME, + 'native_and_offcluster_original_snapshots_retained': True} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--phase', choices=PHASES, required=True) + parser.add_argument('--root-authority-receipt', type=Path, required=True) + parser.add_argument('--root-native-outcome', type=Path, required=True) + parser.add_argument('--source-revision', required=True) + args = parser.parse_args() + require(args.root_authority_receipt == Path('/tmp/security-infd-purpose-root-authority.json') + and args.root_native_outcome == Path('/tmp/security-infd-purpose-native-outcome-latest.json'), + 'fixed supervised receipt paths required') + require(re.fullmatch(r'[0-9a-f]{40}', args.source_revision) is not None, 'exact source commit required') + # Verify all prepared executor/input bytes before reading authority or dispatching. + plan = json.loads((ROOT / 'execution-plan.json').read_text()) + require(set(plan['executor_files']) == {'actuator.py', 'authority_journal.py', 'native_program.py', 'receipt_safety.py'}, + 'fixed executor sources required') + require(set(plan['owner_source_files']) == {'deploy/lifecycle/admission.candidate.json', + 'deploy/lifecycle/service.candidate.json', + 'deploy/lifecycle/kustomization.yaml', + 'deploy/lifecycle/registries.candidate.json'}, + 'fixed owner image sources required') + for relative, digest in plan['executor_files'].items(): + target = ROOT / relative + require(not target.is_symlink() and sha(target) == digest, 'executor source bytes changed') + for relative, digest in plan['case_files'].items(): + require(not Path(relative).is_absolute() and '..' not in Path(relative).parts, + 'case source path escaped') + target = CASE / relative + require(not target.is_symlink() and sha(target) == digest, 'case source bytes changed') + for relative, digest in plan['owner_source_files'].items(): + target = OWNER / relative + require(not target.is_symlink() and sha(target) == digest, 'owner image-only source changed') + committed = subprocess.run(['git', '-C', str(OWNER), 'show', args.source_revision + ':' + relative], + capture_output=True) + require(committed.returncode == 0 and hashlib.sha256(committed.stdout).hexdigest() == digest, + 'committed owner render source differs from approved inputs') + head = run(['git', '-C', str(OWNER), 'rev-parse', 'HEAD']) + require(head.returncode == 0 and head.stdout.strip() == args.source_revision, 'owner source HEAD differs') + from authority_journal import Journal, authority + private(args.root_authority_receipt) + private(args.root_native_outcome) + receipt = json.loads(args.root_authority_receipt.read_text()) + require(receipt.get('native_outcome_sha256') == sha(args.root_native_outcome), 'native outcome bytes changed') + require(receipt.get('executor_plan_sha256') == sha(ROOT / 'execution-plan.json'), + 'root verified executor plan differs') + approved = authority(receipt, json.loads(args.root_native_outcome.read_text()), sha(CASE / 'memo.json'), + args.source_revision, args.phase) + parent = CUSTODY.parent + private(parent, directory=True) + ignored = run(['git', '-C', str(CUSTODIAN), 'check-ignore', '--no-index', str(CUSTODY / 'drill.sqlite')]) + require(ignored.returncode == 0, 'offcluster custody is not ignored') + if not CUSTODY.exists(): + require(args.phase == 'drill-backup', 'first approved phase must create unique private custody') + os.mkdir(CUSTODY, 0o700) + private(CUSTODY, directory=True) + capacity = os.statvfs(CUSTODY) + require(capacity.f_bavail * capacity.f_frsize >= 2 * MAX_BYTES + 16 * 1024**2, + 'independent protected custody headroom insufficient') + os.makedirs(CUSTODY / 'empty-docker-config', mode=0o700, exist_ok=True) + private(CUSTODY / 'empty-docker-config', directory=True) + require(not list((CUSTODY / 'empty-docker-config').iterdir()), 'public Docker read config must stay empty') + journal = Journal(CUSTODY, {'proposal': plan['proposal_id'], 'source_revision': args.source_revision, + 'memo_sha256': sha(CASE / 'memo.json'), 'plan_sha256': sha(ROOT / 'execution-plan.json')}) + try: + journal.start(args.phase, approved) # fsynced RUNNING before any phase effect. + if args.phase in ('drill-copy', 'cutover-copy'): + result = copy_snapshot(args.phase, args.source_revision, approved, journal) + elif args.phase == 'offline-verify': + result = offline_verify(journal) + elif args.phase == 'cleanup-offline': + result = cleanup_offline(journal) + else: + result = remote(args.phase, args.source_revision, approved) + journal.finish(args.phase, result) + print(json.dumps(result)) # Only count/hash/identity receipts, never snapshot bytes. + except BaseException as error: + safe = {'all_checks_pass': False, 'phase': args.phase, 'failure_class': type(error).__name__, + 'failure': 'fixed phase outcome uncertain; original evidence retained; no retry', + 'raw_output_withheld': True} + if journal.data['phases'].get(args.phase, {}).get('state') == 'RUNNING': + journal.finish(args.phase, safe) + print(json.dumps(safe)) + raise SystemExit(1) from None + finally: + journal.close() + + +if __name__ == '__main__': + try: + main() + except Exception: + raise SystemExit('supervised execution refused before phase; raw output withheld') from None diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution/authority_journal.py b/docs/evidence/2026-10-11-purpose-image-release/execution/authority_journal.py new file mode 100644 index 0000000..00df0ec --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution/authority_journal.py @@ -0,0 +1,147 @@ +"""Supervised receipt bookkeeping, not an authenticated approval provider.""" +import datetime +import fcntl +import hashlib +import json +import os +import re +from pathlib import Path +import stat +import uuid + +FOUNDER = {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'} +MEMO_ID = 'infd-20261011-purpose-overlay-r1' +PROPOSAL = 'INFD-WP-0009-T04/purpose-overlay-v1' +PHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline', + 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback', 'rollback-verify') + + +def require(value, reason): + if not value: + raise ValueError(reason) + + +def sha(path): + digest = hashlib.sha256() + with Path(path).open('rb') as stream: + for block in iter(lambda: stream.read(1024**2), b''): + digest.update(block) + return digest.hexdigest() + + +def private(path, directory=False): + info = Path(path).lstat() + require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode)) + and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600) + and (directory or info.st_nlink == 1), 'private owned custody required') + + +def authority(receipt, outcome, memo_sha, source_revision, phase, now=None): + """Root must freshly verify native outcome at fixed ORIGIN outside this helper. + + Receipt files/flags are not signed grants. This function checks the exact + supervised receipt relation; existing harness/founder authority remains the + actual permission boundary. It never authenticates a caller as human. + """ + now = now or datetime.datetime.now(datetime.timezone.utc) + require(phase in PHASES, 'fixed phase required') + require(receipt.get('proposal_id') == PROPOSAL and receipt.get('memo_id') == MEMO_ID + and receipt.get('memo_version') == 1 and receipt.get('memo_sha256') == memo_sha + and receipt.get('source_revision') == source_revision + and receipt.get('activation') == 'APPROVED' + and receipt.get('authority_mode') == 'ADMINISTER' + and receipt.get('target') == 'realm:kubernetes/railiance01/informed-decision' + and receipt.get('verification_method') == 'root-fixed-origin-native-readback' + and receipt.get('runtime_authenticated_grant') is False, + 'exact externally verified supervised receipt required') + verified = datetime.datetime.fromisoformat(receipt['verified_at'].replace('Z', '+00:00')) + require(verified.tzinfo is not None and 0 <= (now - verified).total_seconds() <= 120, + 'fresh root native readback required before every phase') + deadline = datetime.datetime.fromisoformat('2026-10-12T23:59:59+00:00') + require(now < deadline, 'approved execution window expired') + require(outcome.get('memo_id') == MEMO_ID and outcome.get('review', {}).get('stale') is False + and outcome['review'].get('intake_state') == 'ready', 'native review is not ready/current') + review_id = outcome['review']['memo_id'] + require(review_id == receipt.get('review_memo_id'), 'native review identity changed') + accepted = [x for x in outcome.get('dispositions', []) + if x.get('submission_state') == 'confirmed' + and x.get('disposition', {}).get('verb') == 'accept' + and x['disposition'].get('memo_version') == 1] + require(len(accepted) == 1, 'one confirmed founder acceptance required') + accepted = accepted[0]['disposition'] + require(accepted.get('actor') == FOUNDER and accepted.get('memo_id') == review_id + and accepted.get('approval_id') == receipt.get('approval_id') + and accepted.get('id') == receipt.get('disposition_id') + and accepted.get('at') == receipt.get('accepted_at'), 'exact founder disposition mismatch') + require(re.fullmatch(r'[a-f0-9-]{36}', accepted['approval_id']) is not None + and re.fullmatch(r'disp-[a-f0-9-]{36}', accepted['id']) is not None + and re.fullmatch(r'review-[a-f0-9-]{36}', review_id) is not None, + 'native disposition identifiers are malformed') + accepted_at = datetime.datetime.fromisoformat(accepted['at'].replace('Z', '+00:00')) + require(accepted_at.tzinfo is not None and accepted_at <= verified, 'acceptance time not bounded') + return {key: receipt[key] for key in ('approval_id', 'disposition_id', 'accepted_at', 'verified_at')} + + +class Journal: + def __init__(self, parent, identity): + self.parent = Path(parent) + private(self.parent, directory=True) + self.path = self.parent / 'execution-journal.json' + self.lock = os.open(self.parent / 'execution.lock', os.O_CREAT | os.O_NOFOLLOW | os.O_RDWR, 0o600) + fcntl.flock(self.lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + private(self.parent / 'execution.lock') + if self.path.exists(): + private(self.path) + self.data = json.loads(self.path.read_text()) + require(self.data['identity'] == identity, 'journal case/source identity changed') + else: + self.data = {'identity': identity, 'phases': {}} + self.save() + + def save(self): + temporary = self.parent / 'execution-journal.new' + fd = os.open(temporary, os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW | os.O_WRONLY, 0o600) + try: + with os.fdopen(fd, 'w') as stream: + json.dump(self.data, stream, indent=2) + stream.write('\n') + stream.flush() + os.fsync(stream.fileno()) + os.replace(temporary, self.path) + directory = os.open(self.parent, os.O_DIRECTORY | os.O_RDONLY) + try: + os.fsync(directory) + finally: + os.close(directory) + except BaseException: + # Retain evidence rather than overwriting an uncertain durable intent. + raise + + def start(self, phase, approval): + require(phase not in self.data['phases'], 'already attempted phase; no retry') + predecessors = dict(zip(PHASES[1:8], PHASES[:7])) + predecessors['rollback-verify'] = 'rollback' + if phase in predecessors: + require(self.data['phases'].get(predecessors[phase], {}).get('state') == 'COMPLETE', + 'preceding phase is not verified complete') + if phase == 'rollback': + require('release' in self.data['phases'], 'rollback requires a recorded release attempt') + self.data['phases'][phase] = {'state': 'RUNNING', 'approval': approval, + 'attempt_id': str(uuid.uuid4()), + 'started_at': datetime.datetime.now(datetime.timezone.utc).isoformat()} + self.save() + + def note(self, phase, key, value): + require(self.data['phases'][phase]['state'] == 'RUNNING', 'phase intent missing') + self.data['phases'][phase][key] = value + self.save() + + def finish(self, phase, result): + entry = self.data['phases'][phase] + require(entry['state'] == 'RUNNING', 'phase intent missing') + entry['result'] = result + entry['state'] = 'COMPLETE' if result.get('all_checks_pass') is True else 'UNCERTAIN' + self.save() + + def close(self): + os.close(self.lock) diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution/execution-plan.json b/docs/evidence/2026-10-11-purpose-image-release/execution/execution-plan.json new file mode 100644 index 0000000..521898f --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution/execution-plan.json @@ -0,0 +1,51 @@ +{ + "kind": "informed-decision.supervised-mechanical-release-plan", + "version": 1, + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "trial_id": "infd-purpose-20261011-r1", + "state": "prepared-unapproved", + "executor_files": { + "actuator.py": "6b9d6439862454f261ee77f05b26519f8109599b1f67078bc4e1f7c7c4061ba5", + "authority_journal.py": "74d6a91169296a99fa7dac2d0902567280f910af743580ec4b454f2abf8374aa", + "native_program.py": "349f516a4e55f7fb47470144ce781a665fb003ebff380d054f642b22133d1cde", + "receipt_safety.py": "5c54373f2dc4b064008225c186efb1d5afdeec36d15350bda0a12ded97602d1b" + }, + "case_files": { + "change_guard.py": "f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be", + "sqlite_readonly.py": "eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38", + "preflight-inputs.json": "756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06", + "sealed-live-deployment.json": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362", + "sealed-native-dependencies.json": "042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369", + "candidate-deployment.json": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e", + "rollback-deployment.json": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121", + "check_installed.py": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad", + "published-verification.json": "8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2", + "security-summary.json": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + "owner_source_files": { + "deploy/lifecycle/admission.candidate.json": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55", + "deploy/lifecycle/service.candidate.json": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4", + "deploy/lifecycle/kustomization.yaml": "1bbce81bc6758434354157f8601534320c5d0290587908fd15a6d25e3fa57f47", + "deploy/lifecycle/registries.candidate.json": "9bad6db5fbc2178d31b04120016a41830c3552fbb9e2517b718f9bbe87cf649e" + }, + "candidate_image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "prior_image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "source_revision": "must-be-exact-final-owner-HEAD-with-approved-four-Git-blobs", + "phases": [ + "drill-backup", + "drill-copy", + "offline-verify", + "cleanup-offline", + "cutover-backup", + "cutover-copy", + "release", + "verify", + "rollback", + "rollback-verify" + ], + "authorization": "fresh externally authenticated root fixed-origin native readback before each phase; exact confirmed platform-root disposition and current packet SHA/source commit; receipt bookkeeping is not an autonomous signed grant", + "execute_by": "2026-10-12T23:59:59Z", + "raw_output_withheld": true, + "native_data_or_workload_action_executed": false, + "deadline_semantics": "All phases including verification/recovery must begin before execute_by. No extension or automatic emergency grant; beyond deadline stop and obtain a fresh founder decision. Complete the bounded drill and rollout early enough to allow recovery within the window." +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution/native_program.py b/docs/evidence/2026-10-11-purpose-image-release/execution/native_program.py new file mode 100644 index 0000000..f46d24c --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution/native_program.py @@ -0,0 +1,2 @@ +"""Fixed remote source, passed only after exact supervised approval.""" +PROGRAM = '\nimport copy,datetime,hashlib,json,os,re,subprocess,sys\nif sys.flags.optimize:raise RuntimeError(\'optimized interpreter refused\')\npayload=json.loads(__PAYLOAD__)\nexec(__GUARD__)\nphase=payload[\'phase\']\nif phase not in (\'drill-backup\',\'cutover-backup\',\'drill-copy\',\'cutover-copy\',\'release\',\'verify\',\'rollback\',\'rollback-verify\'):raise ValueError(\'fixed native phase required\')\ndeadline=datetime.datetime.fromisoformat(\'2026-10-12T23:59:59+00:00\')\ndef require(value,reason):\n if not value:raise ValueError(reason)\nrequire(datetime.datetime.now(datetime.timezone.utc)0 and size<=512*1024**2 and free>=size*(2 if action==\'drill-backup\' else 1)+16*1024**2,\'bounded native snapshot capacity required\')\n if action==\'drill-backup\':\n require(not os.path.lexists(folder),\'native case directory must be unique\')\n os.mkdir(folder,0o700);os.chmod(folder,0o700)\n private(folder,True)\n filename=\'drill.sqlite\' if action==\'drill-backup\' else \'cutover.sqlite\';output=folder+\'/\'+filename\n require(not os.path.lexists(output),\'snapshot output must be unique\')\n admin=subprocess.run([\'informed-decision-admin\',\'backup\',\'--db\',db,\'--output\',output],capture_output=True,text=True,timeout=120)\n require(admin.returncode==0 and json.loads(admin.stdout)=={\'status\':\'backed_up\',\'consistent_snapshot\':True},\'backup completion not verified; do not retry\')\n private(output)\n for suffix in (\'-wal\',\'-shm\'):\n require(not os.path.exists(output+suffix) or os.stat(output+suffix).st_size==0,\'snapshot is not closed main-file custody\')\n snapshot=counts(inspect_readonly(output))\n size=os.stat(output).st_size;require(0 10**12 + for number in value[group].values()): + raise ValueError('count-only receipt values refused') + return value diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution/root-authority-receipt-template.json b/docs/evidence/2026-10-11-purpose-image-release/execution/root-authority-receipt-template.json new file mode 100644 index 0000000..3f22cb3 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution/root-authority-receipt-template.json @@ -0,0 +1,19 @@ +{ + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "memo_id": "infd-20261011-purpose-overlay-r1", + "memo_version": 1, + "memo_sha256": null, + "source_revision": null, + "activation": "PENDING", + "authority_mode": "ADMINISTER", + "target": "realm:kubernetes/railiance01/informed-decision", + "verification_method": "root-fixed-origin-native-readback", + "runtime_authenticated_grant": false, + "verified_at": null, + "accepted_at": null, + "review_memo_id": null, + "approval_id": null, + "disposition_id": null, + "native_outcome_sha256": null, + "executor_plan_sha256": "4d5530e7418f638b10ccff0e0d9a0727adc64a7f3a45907f6deb5739ad2adc85" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution/test_execution.py b/docs/evidence/2026-10-11-purpose-image-release/execution/test_execution.py new file mode 100644 index 0000000..965cceb --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution/test_execution.py @@ -0,0 +1,367 @@ +"""Synthetic custody/transport tests. No native data, Docker or cluster action.""" +import copy +import datetime +import io +import json +import os +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest +from unittest.mock import patch +from contextlib import redirect_stdout + +import actuator +from authority_journal import Journal, authority +from native_program import PROGRAM +from receipt_safety import counts + +CASE = Path('/home/worsch/informed-decision/docs/evidence/2026-10-11-purpose-image-release') +NOW = datetime.datetime(2026, 10, 11, 2, 0, tzinfo=datetime.timezone.utc) +REVISION = 'e' * 40 +COUNT = {'schema_version': 5, 'integrity': 'ok', 'read_only_pre_open': True, 'store_constructed': False, + 'lifecycle': {'records': 3, 'events': 8, 'pending': 1}, + 'outbox': {'pending': 2, 'delivered': 10}, 'submissions': {'confirmed': 1, 'unresolved': 1}} + + +def accepted(): + approval = '11111111-1111-4111-8111-111111111111' + review = 'review-22222222-2222-4222-8222-222222222222' + disposition = 'disp-33333333-3333-4333-8333-333333333333' + receipt = {'proposal_id': 'INFD-WP-0009-T04/purpose-overlay-v1', + 'memo_id': 'infd-20261011-purpose-overlay-r1', 'memo_version': 1, + 'memo_sha256': 'a' * 64, 'source_revision': REVISION, 'activation': 'APPROVED', + 'authority_mode': 'ADMINISTER', 'target': 'realm:kubernetes/railiance01/informed-decision', + 'verification_method': 'root-fixed-origin-native-readback', 'runtime_authenticated_grant': False, + 'verified_at': '2026-10-11T02:00:00Z', 'accepted_at': '2026-10-11T01:59:00Z', + 'review_memo_id': review, 'approval_id': approval, 'disposition_id': disposition} + outcome = {'memo_id': receipt['memo_id'], 'review': {'memo_id': review, 'stale': False, 'intake_state': 'ready'}, + 'dispositions': [{'approval_id': None, 'submission_state': 'confirmed', + 'disposition': {'verb': 'accept', 'memo_version': 1, 'memo_id': review, + 'approval_id': approval, 'id': disposition, + 'actor': {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'}, + 'at': receipt['accepted_at']}}]} + return receipt, outcome + + +class AuthorityAndCustody(unittest.TestCase): + def test_exact_nested_founder_receipt_not_top_level_approval(self): + receipt, outcome = accepted() + result = authority(receipt, outcome, 'a' * 64, REVISION, 'drill-backup', NOW) + self.assertEqual(result['approval_id'], receipt['approval_id']) + + def test_pending_stale_wrong_actor_version_and_binding_refuse(self): + mutations = [lambda r, o: r.update(activation='PENDING'), + lambda r, o: r.update(memo_sha256='changed'), + lambda r, o: r.update(source_revision='changed'), + lambda r, o: r.update(target='other'), + lambda r, o: r.update(verified_at='2026-10-11T01:00:00Z'), + lambda r, o: r.update(verification_method='caller-asserted'), + lambda r, o: r.update(runtime_authenticated_grant=True), + lambda r, o: o['review'].update(stale=True), + lambda r, o: o['review'].update(intake_state='pending'), + lambda r, o: o['dispositions'][0].update(submission_state='unresolved'), + lambda r, o: o['dispositions'][0]['disposition'].update(memo_version=2), + lambda r, o: o['dispositions'][0]['disposition'].update(actor={'kind': 'agent', 'sub': 'platform-root'}), + lambda r, o: o['dispositions'].append(copy.deepcopy(o['dispositions'][0]))] + for mutate in mutations: + with self.subTest(mutate=mutate): + r, o = accepted() + mutate(r, o) + with self.assertRaises(ValueError): + authority(r, o, 'a' * 64, REVISION, 'release', NOW) + + def test_expired_window_and_unknown_phase_refuse(self): + r, o = accepted() + with self.assertRaises(ValueError): + authority(r, o, 'a' * 64, REVISION, 'arbitrary', NOW) + late = datetime.datetime(2026, 10, 13, tzinfo=datetime.timezone.utc) + r['verified_at'] = late.isoformat() + with self.assertRaises(ValueError): + authority(r, o, 'a' * 64, REVISION, 'rollback', late) + + def test_durable_intent_precedes_dispatch_and_never_retries(self): + with tempfile.TemporaryDirectory() as directory: + parent = Path(directory) + os.chmod(parent, 0o700) + journal = Journal(parent, {'case': 'fixture'}) + journal.start('drill-backup', {'approval_id': 'fixture'}) + self.assertEqual(json.loads(journal.path.read_text())['phases']['drill-backup']['state'], 'RUNNING') + journal.close() # simulated crash before result + recovered = Journal(parent, {'case': 'fixture'}) + with self.assertRaises(ValueError): + recovered.start('drill-backup', {}) + with self.assertRaises(ValueError): + recovered.start('drill-copy', {}) + recovered.close() + + def test_phase_order_and_uncertain_release_allows_only_distinct_recovery(self): + with tempfile.TemporaryDirectory() as directory: + os.chmod(directory, 0o700) + j = Journal(directory, {'case': 'fixture'}) + with self.assertRaises(ValueError): + j.start('release', {}) + for phase in actuator.PHASES[:6]: + j.start(phase, {}) + j.finish(phase, {'all_checks_pass': True}) + j.start('release', {}) + j.finish('release', {'all_checks_pass': False}) + with self.assertRaises(ValueError): + j.start('release', {}) + with self.assertRaises(ValueError): + j.start('verify', {}) + j.start('rollback', {}) + j.finish('rollback', {'all_checks_pass': True}) + j.close() + + def test_secret_or_unknown_child_output_is_withheld(self): + for body in ('not-json', '{"all_checks_pass":true,"token":"private-value"}', + '{"all_checks_pass":true,"snapshot_readonly":{"schema_version":5}}'): + with self.assertRaises(ValueError): + actuator.json_result(subprocess.CompletedProcess([], 0, body, '')) + wrong = copy.deepcopy(COUNT) + wrong['outbox'] = {'private-row-value': 1} + with self.assertRaises(ValueError): + counts(wrong) + counts(COUNT) # blocked/unresolved counts are not required to be zero. + + def test_binary_copy_is_bounded_private_and_never_echoed(self): + blob = b'synthetic private fixture bytes' + digest = __import__('hashlib').sha256(blob).hexdigest() + metadata = {'all_checks_pass': True, 'snapshot_file': 'drill.sqlite', 'snapshot_bytes': len(blob), + 'snapshot_sha256': digest, 'snapshot_readonly': COUNT, + 'pod_name': 'fixture-pod', 'pod_uid': 'fixture-uid'} + journal = type('FixtureJournal', (), {'data': {'phases': {'drill-backup': {'result': metadata}}}})() + real_popen = subprocess.Popen + for extra in (b'', b'oversized'): + with self.subTest(extra=extra), tempfile.TemporaryDirectory() as folder: + os.chmod(folder, 0o700) + output = io.StringIO() + + def child(*args, **kwargs): + return real_popen([sys.executable, '-c', 'import sys;sys.stdout.buffer.write(' + repr(blob + extra) + ')'], + stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + + with patch.object(actuator, 'CUSTODY', Path(folder)), patch.object(actuator, 'remote', return_value=metadata), \ + patch('subprocess.Popen', side_effect=child), redirect_stdout(output): + if extra: + with self.assertRaises(ValueError): + actuator.copy_snapshot('drill-copy', REVISION, {}, journal) + else: + result = actuator.copy_snapshot('drill-copy', REVISION, {}, journal) + self.assertTrue(result['off_cluster_private_copy_verified']) + self.assertEqual((Path(folder) / 'drill.sqlite').read_bytes(), blob) + self.assertEqual(output.getvalue(), '') + self.assertEqual((Path(folder) / 'drill.sqlite').stat().st_mode & 0o777, 0o600) + + def test_recreated_offline_volume_cannot_be_deleted(self): + identity = {'Name': actuator.VOLUME, 'Labels': {'nonce': 'old'}, 'CreatedAt': 'old'} + journal = type('FixtureJournal', (), {'data': {'phases': { + 'offline-verify': {'result': {'created_volume_identity': identity}}}}})() + inspected = [{**identity, 'CreatedAt': 'recreated'}] + with patch.object(actuator, 'docker', return_value=subprocess.CompletedProcess([], 0, json.dumps(inspected), '')) as mocked: + with self.assertRaises(ValueError): + actuator.cleanup_offline(journal) + self.assertEqual(mocked.call_count, 1) + + def test_offline_post_admin_integrity_and_original_hash_are_rechecked(self): + for defect in ('none', 'post-integrity', 'original-hash'): + with self.subTest(defect=defect), tempfile.TemporaryDirectory() as directory: + folder=Path(directory);os.chmod(folder,0o700) + snapshot=folder/'drill.sqlite';snapshot.write_bytes(b'private synthetic snapshot');os.chmod(snapshot,0o600) + digest=actuator.sha(snapshot) + prior={'snapshot_sha256':digest,'snapshot_readonly':COUNT} + journal=type('FixtureJournal',(),{'data':{'phases':{'drill-copy':{'result':prior},'offline-verify':{'attempt_id':'nonce'}}},'note':lambda *args:None})() + reads=[] + volume={'Name':actuator.VOLUME,'Labels':{'informed-decision.case':'infd-purpose-20261011-r1','informed-decision.use':'offline-restore-only','informed-decision.attempt':'nonce'},'Driver':'local','Scope':'local','CreatedAt':'fixture','Options':None} + def docker(argv, body=None, **kwargs): + if argv[0]=='info':body=json.dumps('bnt-lap001') + elif argv[:2]==['volume','ls']:body='' + elif argv[:2]==['volume','create']:body=actuator.VOLUME + elif argv[:2]==['volume','inspect']:body=json.dumps([volume]) + elif 'informed-decision-admin' in argv: + body=json.dumps({key:COUNT[key] for key in ('schema_version','lifecycle','outbox','submissions')}) + if defect=='original-hash':snapshot.write_bytes(b'changed synthetic original') + elif '--entrypoint' in argv and 'python' in argv: + reads.append(argv);proof=copy.deepcopy(COUNT) + if len(reads)==2 and defect=='post-integrity':proof['integrity']='corrupt' + body=json.dumps(proof) + else:raise AssertionError('unexpected offline command') + return subprocess.CompletedProcess(argv,0,body,'') + with patch.object(actuator,'CUSTODY',folder),patch.object(actuator,'CASE',CASE),patch.object(actuator,'docker',side_effect=docker),patch('subprocess.run',return_value=subprocess.CompletedProcess([],0,'{"all_checks_pass":true,"private_copy_verified":true}','')): + if defect=='none': + result=actuator.offline_verify(journal) + self.assertEqual(result['offline_post_admin_readonly'],COUNT) + self.assertTrue(result['original_snapshot_hash_unchanged']) + else: + with self.assertRaises(ValueError):actuator.offline_verify(journal) + self.assertEqual(len(reads),2) + + +class FixedNativeProgram(unittest.TestCase): + def fixture(self): + sealed = json.loads((CASE / 'sealed-live-deployment.json').read_text()) + live = copy.deepcopy(sealed) + live['metadata'].update(generation=42) + live['status'] = {'readyReplicas': 1, 'updatedReplicas': 1, 'observedGeneration': 42} + dependencies = json.loads((CASE / 'sealed-native-dependencies.json').read_text()) + cm = copy.deepcopy(dependencies['configmap']) + cm.pop('canonical_data_sha256') + service = json.loads((CASE / 'candidate-deployment.json').read_text()) + source_service = json.loads((CASE.parents[2] / 'deploy/lifecycle/service.candidate.json').read_text()) + cm['data'] = next(x for x in source_service['items'] if x['kind'] == 'ConfigMap')['data'] + pvc = copy.deepcopy(dependencies['pvc']) + pvc['status'] = {'phase': 'Bound'} + app = {'metadata': {'uid': '499868f2-eabc-4df4-ae31-b89ce58d750d', 'resourceVersion': '17'}, + 'spec': {'source': {'repoURL': 'https://forgejo.coulomb.social/coulomb/informed-decision.git', + 'path': 'deploy/lifecycle', 'targetRevision': '7db8485ffecdebfabd77a9daec085553c74bf0bf'}, + 'destination': {'namespace': 'informed-decision', 'server': 'https://kubernetes.default.svc'}}} + objects = {'deployment': live, 'configmap': cm, 'pvc': pvc, 'application': app} + payload = {'phase': 'release', 'source_revision': REVISION, 'approval': {}, 'sealed': sealed, + 'dependencies': dependencies, 'candidate': service, + 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()), + 'readonly': (CASE / 'sqlite_readonly.py').read_text(),'purpose_checks':(CASE/'check_installed.py').read_text(), + 'receipt_safety': (Path(__file__).parent / 'receipt_safety.py').read_text()} + return objects, payload + + def execute_fake(self, objects, payload, ambiguous=False, schema_refused=False): + writes = [] + calls = [] + + def fake(argv, input=None, **kwargs): + calls.append(argv) + if argv[:2] == ['kubectl', 'get']: + kind = argv[2] + if kind in objects: + body = objects[kind] + elif kind == 'pods': + body = {'items': [{'metadata': {'name': 'fixture-pod', 'uid': 'pod-uid', + 'ownerReferences': [{'kind': 'ReplicaSet', 'name': 'fixture-rs', 'uid': 'rs-uid'}]}, + 'spec': objects['deployment']['spec']['template']['spec'], + 'status': {'phase': 'Running', 'containerStatuses': [{'name':'informed-decision','ready': True}]}}]} + elif kind == 'replicaset': + body = {'metadata': {'uid': 'rs-uid', 'ownerReferences': [ + {'kind': 'Deployment', 'uid': payload['sealed']['metadata']['uid']}]}} + elif kind == 'nodes': + body = {'items': [{'metadata': {'name': 'fixture-node'}, 'status': { + 'addresses': [{'address': '92.205.62.239'}], 'allocatable': {'cpu': '4'}, + 'conditions': [{'type': key, 'status': 'True' if key == 'Ready' else 'False'} + for key in ('Ready', 'MemoryPressure', 'DiskPressure', 'PIDPressure')]}}]} + else: + raise AssertionError('unexpected fixed metadata route') + return subprocess.CompletedProcess(argv, 0, json.dumps(body), '') + if argv[:2] == ['kubectl', 'exec']: + if schema_refused: + return subprocess.CompletedProcess(argv, 1, '', 'withheld') + return subprocess.CompletedProcess(argv, 0, json.dumps({ + 'all_checks_pass': True, 'live_readonly_schema_integrity_counts': COUNT}), '') + if argv[:2] == ['kubectl', 'apply']: + admitted = copy.deepcopy(payload['sealed']) + admitted['spec']['template']['spec']['containers'][0]['image'] = (actuator.IMAGE if payload['phase']=='release' else payload['sealed']['spec']['template']['spec']['containers'][0]['image']) + return subprocess.CompletedProcess(argv, 0, json.dumps(admitted), '') + if argv[:2] == ['kubectl', 'describe']: + return subprocess.CompletedProcess(argv, 0, 'Allocated resources:\n cpu 3460m (86%)\n', '') + if argv[:2] == ['kubectl', 'diff']: + return subprocess.CompletedProcess(argv, 1, '-image: base\n+image: candidate\n', '') + if argv[:2] == ['kubectl', 'patch']: + if '--dry-run=server' not in argv: + writes.append(json.loads(input)) + if ambiguous: + return subprocess.CompletedProcess(argv, 1, '', 'withheld') + return subprocess.CompletedProcess(argv, 0, 'application.argoproj.io/informed-decision\n', '') + raise AssertionError('unexpected command') + + source = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace( + '__GUARD__', repr((CASE / 'change_guard.py').read_text())) + output = io.StringIO() + with patch('subprocess.run', side_effect=fake), redirect_stdout(output): + try: + exec(compile(source, 'fixed-native-fixture', 'exec'), {'__name__': '__fixture__'}) + except (ValueError, SystemExit): + pass + receipt = json.loads(output.getvalue()) if output.getvalue() else {'all_checks_pass': False} + return receipt, writes, calls + + def test_only_existing_application_operation_and_deployment_are_requested(self): + objects, payload = self.fixture() + receipt, writes, calls = self.execute_fake(objects, payload) + self.assertTrue(receipt['all_checks_pass']) + self.assertFalse(receipt['rollout_verified']) + self.assertEqual(len(writes), 1) + operation = writes[0][-1]['value'] + self.assertFalse(operation['sync']['prune']) + self.assertEqual(operation['sync']['resources'], [ + {'group': 'apps', 'kind': 'Deployment', 'name': 'informed-decision', 'namespace': 'informed-decision'}]) + self.assertTrue(any('--dry-run=server' in argv and argv[:2] == ['kubectl', 'patch'] for argv in calls)) + self.assertEqual(writes[0][0]['path'], '/metadata/uid') + + def test_source_overrides_automation_and_custody_drift_stop_before_write(self): + mutations = [lambda o: o['application']['metadata'].update(uid='recreated'), + lambda o: o['application']['spec'].update(syncPolicy={'automated': {}}), + lambda o: o['application']['spec']['source'].update(kustomize={'images': ['other']}), + lambda o: o['application']['spec'].update(sources=[{}]), + lambda o: o['configmap']['metadata'].update(uid='recreated'), + lambda o: o['pvc']['spec'].update(volumeName='replaced'), + lambda o: o['deployment']['status'].update(readyReplicas=0)] + for mutate in mutations: + with self.subTest(mutate=mutate): + objects, payload = self.fixture() + mutate(objects) + receipt, writes, calls = self.execute_fake(objects, payload) + self.assertFalse(receipt['all_checks_pass']) + self.assertEqual(writes, []) + + def test_preopen_schema_refusal_prevents_image_operation(self): + objects, payload = self.fixture() + receipt, writes, calls = self.execute_fake(objects, payload, schema_refused=True) + self.assertFalse(receipt['all_checks_pass']) + self.assertEqual(writes, []) + + + def test_rollback_unready_candidate_never_reads_pod_or_database(self): + objects, payload = self.fixture() + payload['phase'] = 'rollback' + objects['deployment']['status'].update(readyReplicas=0, updatedReplicas=0) + objects['deployment']['spec']['template']['spec']['containers'][0]['image'] = actuator.IMAGE + objects['application']['spec']['source']['targetRevision'] = REVISION + receipt, writes, calls = self.execute_fake(objects, payload, schema_refused=True) + self.assertTrue(receipt['all_checks_pass']) + self.assertFalse(receipt['rollout_verified']) + self.assertEqual(len(writes), 1) + self.assertFalse(any(argv[:2] == ['kubectl', 'exec'] or argv[:3] == ['kubectl', 'get', 'pods'] for argv in calls)) + self.assertEqual(writes[0][-1]['value']['sync']['revision'], '7db8485ffecdebfabd77a9daec085553c74bf0bf') + + def test_rollback_still_refuses_custody_or_nonpair_image_drift(self): + for defect in ('cm', 'pvc', 'image'): + with self.subTest(defect=defect): + objects, payload = self.fixture();payload['phase'] = 'rollback' + objects['deployment']['status']['readyReplicas'] = 0 + if defect == 'cm':objects['configmap']['metadata']['uid'] = 'recreated' + elif defect == 'pvc':objects['pvc']['spec']['volumeName'] = 'replaced' + else:objects['deployment']['spec']['template']['spec']['containers'][0]['image'] = 'foreign-image' + receipt, writes, calls = self.execute_fake(objects, payload) + self.assertFalse(receipt['all_checks_pass']);self.assertEqual(writes, []) + + def test_recovery_verification_is_separate_ready_old_image_schema_proof(self): + objects, payload = self.fixture();payload['phase'] = 'rollback-verify' + objects['application']['status'] = {'operationState': {'phase': 'Succeeded', 'operation': {'sync': { + 'revision': '7db8485ffecdebfabd77a9daec085553c74bf0bf', 'prune': False, + 'resources': [{'group':'apps','kind':'Deployment','name':'informed-decision','namespace':'informed-decision'}]}}}} + receipt, writes, calls = self.execute_fake(objects, payload) + self.assertTrue(receipt['all_checks_pass']);self.assertTrue(receipt['recovery_verification']) + self.assertEqual(writes, []) + self.assertTrue(any(argv[:2]==['kubectl','exec'] for argv in calls)) + objects['deployment']['status']['readyReplicas'] = 0 + receipt, writes, calls = self.execute_fake(objects,payload) + self.assertFalse(receipt['all_checks_pass']) + + def test_ambiguous_patch_is_never_retried(self): + objects, payload = self.fixture() + receipt, writes, calls = self.execute_fake(objects, payload, ambiguous=True) + self.assertFalse(receipt['all_checks_pass']) + self.assertEqual(len(writes), 1) + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/2026-10-11-purpose-image-release/execution/validation.json b/docs/evidence/2026-10-11-purpose-image-release/execution/validation.json new file mode 100644 index 0000000..321f6fa --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/execution/validation.json @@ -0,0 +1,20 @@ +{ + "tests": 16, + "result": "passed", + "synthetic_transport_only": true, + "real_native_data_read": false, + "native_backup_export_restore_executed": false, + "native_workload_changed": false, + "actual_founder_approval": false, + "local_read_only_capability_checks": [ + "argocdCLI absent, existingApplication.operation path retained", + "Dockerunixsocket engineName bnt-lap001" + ], + "case_source_commit_at_preparation": "e0359bc (owner original78source; final helpercommit mustbe explicitlypinned)", + "additional_regressions": [ + "Ready0 candidate rollback dispatch has no Pod metadata/DB exec and one scoped CAS operation", + "rollback still refuses CM/PVC or nonpair-image drift", + "separate old-image Ready/schema5 recovery proof", + "post-admin readonly integrity refusal and original snapshot tamper refusal" + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/archive-map.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/archive-map.json new file mode 100644 index 0000000..c5f2c05 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/archive-map.json @@ -0,0 +1,314 @@ +{ + "deploy/lifecycle/admission.candidate.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/deploy/lifecycle/admission.candidate.json", + "sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + "deploy/lifecycle/service.candidate.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/deploy/lifecycle/service.candidate.json", + "sha256": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4" + }, + "docs/evidence/2026-10-11-purpose-image-release/README.md": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md", + "sha256": "ca2c34727a462c63f017700f703324d934f5fa3adc858c2756d62096b119c40c" + }, + "docs/evidence/2026-10-11-purpose-image-release/base-image-config.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "sha256": "b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00" + }, + "docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "sha256": "d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80" + }, + "docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + "docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "sha256": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + "docs/evidence/2026-10-11-purpose-image-release/change_guard.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "sha256": "f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be" + }, + "docs/evidence/2026-10-11-purpose-image-release/check_installed.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "sha256": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + "docs/evidence/2026-10-11-purpose-image-release/decision-packet.md": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "sha256": "23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1" + }, + "docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "sha256": "2ec324aa8e3f97753b3ed87bca80820feb5e542dc0a4799aa848ec77ea92feb7" + }, + "docs/evidence/2026-10-11-purpose-image-release/image-config.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "sha256": "4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10" + }, + "docs/evidence/2026-10-11-purpose-image-release/image-manifest.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "sha256": "978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb" + }, + "docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "sha256": "e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/original-packet-manifest.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/original-packet-manifest.json", + "sha256": "7c6738b39ea8e54e61c8ed625e94ad0b2755e672e1576efcdf84a1d665ac3300" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json", + "sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json", + "sha256": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md", + "sha256": "f88a79a93fff34a1b438e2dc0344cad88d6c7960dde04bc7f3c04ac1fbb992c7" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "sha256": "b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "sha256": "d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "sha256": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "sha256": "830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "sha256": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "sha256": "7f6d8987f65dff479eeead67b7ca940ef44c22c1cdbdd6ca33fd732b824c8f02" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "sha256": "aa1d494e42491f0619f731a836c597df9178409887d734c166a8df81f8807a27" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "sha256": "4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "sha256": "978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "sha256": "e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json", + "sha256": "9a39631362f20168da409cef74f7690f3aa1b8f841fc96ecd8770f73a1f954ac" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "sha256": "b6210dcd34e5485c94e35f4bdd3329fb72c1d40fa9357caf40ac42b4f8afa5c2" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json", + "sha256": "06530425dd9634182f70a65dd2da56cbad3da967bc842b3c7b01c30542222128" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "sha256": "aa9758d4de587d14c6ce0fdaccd84002c5c5099425b9169ca7c972a86e9d3dec" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "sha256": "052fc57d2cda43b2e474f28a5ff70753f5fa673c77a9645a201d0e0e961792e4" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "sha256": "aaa77b406b201eb40a62f60182057e90b1baea06e03f85d7e06916b57f5f2de8" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "sha256": "eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "sha256": "0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "sha256": "c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "sha256": "08c5573eaad05efd24b6df6737d33e7189543eb621f21704e38bab4326094914" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "sha256": "e304dd29571bf7d7b9f1db2ade0163dd39cfec012a5ce6986139f019f37e65a2" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "sha256": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "sha256": "22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "sha256": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "sha256": "a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "sha256": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "sha256": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "sha256": "b7cd28b2ada33004c9264cb54c9749fa501f60166638f926e50e264ddebe037d" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "sha256": "f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json", + "sha256": "3b57f525bbbb1db9dc46bcc6b0057a8dd9f45c461fad0a8dea5391ca78038c36" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "sha256": "413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4" + }, + "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt", + "sha256": "18205c0c7aa8f3460d78e3b7ad9dddd9e361395f9a28d93a7a384c29c9602d36" + }, + "docs/evidence/2026-10-11-purpose-image-release/intake.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json", + "sha256": "f61da7bf60e42728c2ef2f98838f310e9f97765096015492917ef8e9cab2d000" + }, + "docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "sha256": "c25d47a084401aafe4f17b9e9ac87bf099d7c9f423bd181509617314884bd28a" + }, + "docs/evidence/2026-10-11-purpose-image-release/memo.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json", + "sha256": "33a321fe0c276733034288e7395496cb52c8eaf7730da880637cfa379276978c" + }, + "docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "sha256": "2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc" + }, + "docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "sha256": "052fc57d2cda43b2e474f28a5ff70753f5fa673c77a9645a201d0e0e961792e4" + }, + "docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "sha256": "aaa77b406b201eb40a62f60182057e90b1baea06e03f85d7e06916b57f5f2de8" + }, + "docs/evidence/2026-10-11-purpose-image-release/native-preflight.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "sha256": "eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + "docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "sha256": "756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06" + }, + "docs/evidence/2026-10-11-purpose-image-release/preflight.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "sha256": "6b4c65f708238c9a9d17fd065876c7a00e1f1745926f990a1dd5e667298340cd" + }, + "docs/evidence/2026-10-11-purpose-image-release/proposal.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "sha256": "a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82" + }, + "docs/evidence/2026-10-11-purpose-image-release/published-verification.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "sha256": "8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2" + }, + "docs/evidence/2026-10-11-purpose-image-release/registry-proof.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "sha256": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + "docs/evidence/2026-10-11-purpose-image-release/review-refinement.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/review-refinement.json", + "sha256": "ea62845cee5ee6f4f6cb7f5dcd0af601ba29a21c8ff80efbbc02ad16e35bea75" + }, + "docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "sha256": "22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + "docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "sha256": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + "docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "sha256": "a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + "docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "sha256": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + "docs/evidence/2026-10-11-purpose-image-release/sealed-native-dependencies.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-native-dependencies.json", + "sha256": "042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369" + }, + "docs/evidence/2026-10-11-purpose-image-release/security-summary.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "sha256": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + "docs/evidence/2026-10-11-purpose-image-release/sqlite_readonly.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sqlite_readonly.py", + "sha256": "eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38" + }, + "docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "sha256": "da5350437357ba329236cc137610c03856f38f836ddf2856025bc12011fad07f" + }, + "docs/evidence/2026-10-11-purpose-image-release/test_preflight_optimization.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_preflight_optimization.py", + "sha256": "a0c4fa18c5d6c21476a06c6d05fe7656259d204299138851599e9214d911206d" + }, + "docs/evidence/2026-10-11-purpose-image-release/test_sqlite_readonly.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_sqlite_readonly.py", + "sha256": "c7a91d0c6a373d738c88bb817d9bfb2ff8a179bc61b93063b89677b566520323" + }, + "docs/evidence/2026-10-11-purpose-image-release/trivy-full.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "sha256": "f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + "docs/evidence/2026-10-11-purpose-image-release/validation.json": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json", + "sha256": "303490dd5a89da0ea2ea92149cfa7cd580e8f3270d3db42edae1c59e4aaf42ca" + }, + "docs/evidence/2026-10-11-purpose-image-release/verify_registry.py": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "sha256": "413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4" + }, + "workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md": { + "archive_relative": "initial-b1e3e66b/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.source.txt", + "sha256": "24e4b022f17ca041ccfbfb11d6de6373c90f4e790690e1cd4cf00e84fde6b838" + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/original-manifest.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/original-manifest.json new file mode 100644 index 0000000..367e87d --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/original-manifest.json @@ -0,0 +1,548 @@ +[ + { + "repo": "informed-decision", + "path": "deploy/lifecycle/admission.candidate.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/deploy/lifecycle/admission.candidate.json", + "original_sha256": "22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50", + "staged_sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "repo": "informed-decision", + "path": "deploy/lifecycle/service.candidate.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/deploy/lifecycle/service.candidate.json", + "original_sha256": "7a676532836affd6d75c7f1c41a5f937d8c8c809f63e3264ccce612730d5ba7b", + "staged_sha256": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/README.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/README.md", + "original_sha256": null, + "staged_sha256": "ca2c34727a462c63f017700f703324d934f5fa3adc858c2756d62096b119c40c" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "original_sha256": null, + "staged_sha256": "b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "original_sha256": null, + "staged_sha256": "d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "original_sha256": null, + "staged_sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "original_sha256": null, + "staged_sha256": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "original_sha256": null, + "staged_sha256": "f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "original_sha256": null, + "staged_sha256": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "original_sha256": null, + "staged_sha256": "23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "original_sha256": null, + "staged_sha256": "2ec324aa8e3f97753b3ed87bca80820feb5e542dc0a4799aa848ec77ea92feb7" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "original_sha256": null, + "staged_sha256": "4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "original_sha256": null, + "staged_sha256": "978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "original_sha256": null, + "staged_sha256": "e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/original-packet-manifest.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/original-packet-manifest.json", + "original_sha256": null, + "staged_sha256": "7c6738b39ea8e54e61c8ed625e94ad0b2755e672e1576efcdf84a1d665ac3300" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json", + "original_sha256": null, + "staged_sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json", + "original_sha256": null, + "staged_sha256": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md", + "original_sha256": null, + "staged_sha256": "f88a79a93fff34a1b438e2dc0344cad88d6c7960dde04bc7f3c04ac1fbb992c7" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "original_sha256": null, + "staged_sha256": "b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "original_sha256": null, + "staged_sha256": "d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "original_sha256": null, + "staged_sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "original_sha256": null, + "staged_sha256": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "original_sha256": null, + "staged_sha256": "830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "original_sha256": null, + "staged_sha256": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "original_sha256": null, + "staged_sha256": "7f6d8987f65dff479eeead67b7ca940ef44c22c1cdbdd6ca33fd732b824c8f02" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "original_sha256": null, + "staged_sha256": "aa1d494e42491f0619f731a836c597df9178409887d734c166a8df81f8807a27" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "original_sha256": null, + "staged_sha256": "4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "original_sha256": null, + "staged_sha256": "978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "original_sha256": null, + "staged_sha256": "e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json", + "original_sha256": null, + "staged_sha256": "9a39631362f20168da409cef74f7690f3aa1b8f841fc96ecd8770f73a1f954ac" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "original_sha256": null, + "staged_sha256": "b6210dcd34e5485c94e35f4bdd3329fb72c1d40fa9357caf40ac42b4f8afa5c2" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json", + "original_sha256": null, + "staged_sha256": "06530425dd9634182f70a65dd2da56cbad3da967bc842b3c7b01c30542222128" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "original_sha256": null, + "staged_sha256": "aa9758d4de587d14c6ce0fdaccd84002c5c5099425b9169ca7c972a86e9d3dec" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "original_sha256": null, + "staged_sha256": "052fc57d2cda43b2e474f28a5ff70753f5fa673c77a9645a201d0e0e961792e4" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "original_sha256": null, + "staged_sha256": "aaa77b406b201eb40a62f60182057e90b1baea06e03f85d7e06916b57f5f2de8" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "original_sha256": null, + "staged_sha256": "eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "original_sha256": null, + "staged_sha256": "0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "original_sha256": null, + "staged_sha256": "c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "original_sha256": null, + "staged_sha256": "08c5573eaad05efd24b6df6737d33e7189543eb621f21704e38bab4326094914" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "original_sha256": null, + "staged_sha256": "e304dd29571bf7d7b9f1db2ade0163dd39cfec012a5ce6986139f019f37e65a2" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "original_sha256": null, + "staged_sha256": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "original_sha256": null, + "staged_sha256": "22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "original_sha256": null, + "staged_sha256": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "original_sha256": null, + "staged_sha256": "a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "original_sha256": null, + "staged_sha256": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "original_sha256": null, + "staged_sha256": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "original_sha256": null, + "staged_sha256": "b7cd28b2ada33004c9264cb54c9749fa501f60166638f926e50e264ddebe037d" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "original_sha256": null, + "staged_sha256": "f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json", + "original_sha256": null, + "staged_sha256": "3b57f525bbbb1db9dc46bcc6b0057a8dd9f45c461fad0a8dea5391ca78038c36" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "original_sha256": null, + "staged_sha256": "413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt", + "original_sha256": null, + "staged_sha256": "18205c0c7aa8f3460d78e3b7ad9dddd9e361395f9a28d93a7a384c29c9602d36" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/intake.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/intake.json", + "original_sha256": null, + "staged_sha256": "f61da7bf60e42728c2ef2f98838f310e9f97765096015492917ef8e9cab2d000" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "original_sha256": null, + "staged_sha256": "c25d47a084401aafe4f17b9e9ac87bf099d7c9f423bd181509617314884bd28a" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/memo.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/memo.json", + "original_sha256": null, + "staged_sha256": "33a321fe0c276733034288e7395496cb52c8eaf7730da880637cfa379276978c" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "original_sha256": null, + "staged_sha256": "2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "original_sha256": null, + "staged_sha256": "052fc57d2cda43b2e474f28a5ff70753f5fa673c77a9645a201d0e0e961792e4" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "original_sha256": null, + "staged_sha256": "aaa77b406b201eb40a62f60182057e90b1baea06e03f85d7e06916b57f5f2de8" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "original_sha256": null, + "staged_sha256": "eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "original_sha256": null, + "staged_sha256": "756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "original_sha256": null, + "staged_sha256": "6b4c65f708238c9a9d17fd065876c7a00e1f1745926f990a1dd5e667298340cd" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "original_sha256": null, + "staged_sha256": "a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "original_sha256": null, + "staged_sha256": "8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "original_sha256": null, + "staged_sha256": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/review-refinement.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/review-refinement.json", + "original_sha256": null, + "staged_sha256": "ea62845cee5ee6f4f6cb7f5dcd0af601ba29a21c8ff80efbbc02ad16e35bea75" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "original_sha256": null, + "staged_sha256": "22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "original_sha256": null, + "staged_sha256": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "original_sha256": null, + "staged_sha256": "a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "original_sha256": null, + "staged_sha256": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/sealed-native-dependencies.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/sealed-native-dependencies.json", + "original_sha256": null, + "staged_sha256": "042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "original_sha256": null, + "staged_sha256": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/sqlite_readonly.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/sqlite_readonly.py", + "original_sha256": null, + "staged_sha256": "eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "original_sha256": null, + "staged_sha256": "da5350437357ba329236cc137610c03856f38f836ddf2856025bc12011fad07f" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/test_preflight_optimization.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/test_preflight_optimization.py", + "original_sha256": null, + "staged_sha256": "a0c4fa18c5d6c21476a06c6d05fe7656259d204299138851599e9214d911206d" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/test_sqlite_readonly.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/test_sqlite_readonly.py", + "original_sha256": null, + "staged_sha256": "c7a91d0c6a373d738c88bb817d9bfb2ff8a179bc61b93063b89677b566520323" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "original_sha256": null, + "staged_sha256": "f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/validation.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/validation.json", + "original_sha256": null, + "staged_sha256": "303490dd5a89da0ea2ea92149cfa7cd580e8f3270d3db42edae1c59e4aaf42ca" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "original_sha256": null, + "staged_sha256": "413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4" + }, + { + "repo": "informed-decision", + "path": "workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md", + "original_sha256": "1544ece11a7a528a34b635b267b72e1c3fd4de99327200aded74864c64e64e77", + "staged_sha256": "24e4b022f17ca041ccfbfb11d6de6373c90f4e790690e1cd4cf00e84fde6b838" + } +] diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/deploy/lifecycle/admission.candidate.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/deploy/lifecycle/admission.candidate.json new file mode 100644 index 0000000..ddc0cea --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/deploy/lifecycle/admission.candidate.json @@ -0,0 +1,52 @@ +{ + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "policy": { + "origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080", + "package": "informed-decision.compact-sitting", + "version": "v13", + "package_digest": "sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873", + "pod_name": "flex-auth-informed-decision-sitting" + }, + "keycape_egress_ips": [ + "92.205.62.239" + ], + "storage_class": "local-path", + "ordinary_approval_ids": [ + "2ce76d7f-01c3-4b63-8476-8d1230679769", + "c2af4bcf-15b4-4305-aac1-acc7e4dcb099", + "dc22666a-d5d7-46bc-9490-ebe9fe09dc38" + ], + "lifecycle_policy": { + "package": "informed-decision.lifecycle", + "version": "v2", + "package_digest": "sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c", + "origin": "http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080", + "pod_name": "flex-auth-informed-decision-lifecycle" + }, + "lifecycle_delivery": true, + "intake_attributes": true, + "intake_delivery": { + "hub_origin": "http://state-hub.state-hub.svc.cluster.local:8000" + }, + "workload_api": { + "registries_configmap": "informed-decision-workload-registry", + "peers": [ + { + "namespace": "state-hub", + "app": "state-hub" + } + ], + "api_egress": [ + { + "ip": "10.43.0.1", + "port": 443 + }, + { + "ip": "92.205.62.239", + "port": 6443 + } + ], + "intake": true, + "lifecycle": true + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/deploy/lifecycle/service.candidate.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/deploy/lifecycle/service.candidate.json new file mode 100644 index 0000000..c6bd69e --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/deploy/lifecycle/service.candidate.json @@ -0,0 +1,800 @@ +{ + "apiVersion": "v1", + "kind": "List", + "items": [ + { + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "name": "review", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "automountServiceAccountToken": false + }, + { + "apiVersion": "v1", + "kind": "PersistentVolumeClaim", + "metadata": { + "name": "informed-decision-data", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "storageClassName": "local-path", + "resources": { + "requests": { + "storage": "1Gi" + } + } + } + }, + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "informed-decision-runtime-6c221878d051", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "immutable": true, + "data": { + "runtime.json": "{\"approval_origin\":\"http://approval-engine.approval-engine.svc.cluster.local:8080\",\"audit\":{\"origin\":\"http://audit-core.audit-core.svc.cluster.local:8080\",\"sender_token_file\":\"/var/run/secrets/informed-decision/audit/token\"},\"evidence_db\":\"/data/private/review.sqlite\",\"intake_attributes\":true,\"intake_delivery\":{\"hub_origin\":\"http://state-hub.state-hub.svc.cluster.local:8000\"},\"lifecycle_delivery\":true,\"lifecycle_policy\":{\"caller_token_file\":\"/var/run/secrets/informed-decision/policy/token\",\"origin\":\"http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080\",\"package\":\"informed-decision.lifecycle\",\"package_digest\":\"sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c\",\"version\":\"v2\"},\"ordinary_approval_ids\":[\"2ce76d7f-01c3-4b63-8476-8d1230679769\",\"c2af4bcf-15b4-4305-aac1-acc7e4dcb099\",\"dc22666a-d5d7-46bc-9490-ebe9fe09dc38\"],\"policy\":{\"caller_token_file\":\"/var/run/secrets/informed-decision/policy/token\",\"origin\":\"http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080\",\"package\":\"informed-decision.compact-sitting\",\"package_digest\":\"sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873\",\"version\":\"v13\"},\"schema\":\"informed-decision.review-runtime.v1\",\"workload_api\":{\"intake\":{\"groups_file\":\"/workload-registry/review-groups.json\",\"secret_file\":\"/var/run/secrets/informed-decision/requester/client-secret\",\"submitters_file\":\"/workload-registry/intake-submitters.json\"},\"lifecycle_callers_file\":\"/workload-registry/lifecycle-callers.json\",\"token_review\":{\"ca_file\":\"/var/run/secrets/informed-decision/kubernetes/ca.crt\",\"origin\":\"https://kubernetes.default.svc:443\",\"token_file\":\"/var/run/secrets/informed-decision/kubernetes/token\"}}}" + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "informed-decision", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "replicas": 1, + "strategy": { + "type": "Recreate" + }, + "progressDeadlineSeconds": 600, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + }, + "spec": { + "automountServiceAccountToken": false, + "serviceAccountName": "review", + "terminationGracePeriodSeconds": 45, + "securityContext": { + "runAsNonRoot": true, + "runAsUser": 10001, + "runAsGroup": 10001, + "fsGroup": 10001, + "fsGroupChangePolicy": "OnRootMismatch", + "seccompProfile": { + "type": "RuntimeDefault" + } + }, + "containers": [ + { + "name": "informed-decision", + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "capabilities": { + "drop": [ + "ALL" + ] + } + }, + "env": [ + { + "name": "INFD_KEYCAPE_ISSUER", + "value": "https://kc.coulomb.social" + }, + { + "name": "INFD_CONTAINER_CONFIG", + "value": "/configuration/runtime.json" + } + ], + "ports": [ + { + "name": "http", + "containerPort": 8080 + }, + { + "name": "workload", + "containerPort": 8081 + } + ], + "startupProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 12 + }, + "readinessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "livenessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "resources": { + "requests": { + "cpu": "5m", + "memory": "64Mi" + }, + "limits": { + "cpu": "500m", + "memory": "256Mi" + } + }, + "volumeMounts": [ + { + "name": "data", + "mountPath": "/data" + }, + { + "name": "runtime", + "mountPath": "/run/informed-decision" + }, + { + "name": "tmp", + "mountPath": "/tmp" + }, + { + "name": "configuration", + "mountPath": "/configuration", + "readOnly": true + }, + { + "name": "caller", + "mountPath": "/var/run/secrets/informed-decision/policy", + "readOnly": true + }, + { + "name": "audit", + "mountPath": "/var/run/secrets/informed-decision/audit", + "readOnly": true + }, + { + "name": "kubernetes-api", + "mountPath": "/var/run/secrets/informed-decision/kubernetes", + "readOnly": true + }, + { + "name": "workload-registry", + "mountPath": "/workload-registry", + "readOnly": true + }, + { + "name": "sitting-requester", + "mountPath": "/var/run/secrets/informed-decision/requester", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "data", + "persistentVolumeClaim": { + "claimName": "informed-decision-data" + } + }, + { + "name": "runtime", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + } + }, + { + "name": "tmp", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + } + }, + { + "name": "configuration", + "configMap": { + "name": "informed-decision-runtime-6c221878d051", + "defaultMode": 292 + } + }, + { + "name": "caller", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "path": "token", + "audience": "flex-auth", + "expirationSeconds": 3600 + } + } + ] + } + }, + { + "name": "audit", + "secret": { + "secretName": "informed-decision-audit", + "defaultMode": 288, + "items": [ + { + "key": "token", + "path": "token" + } + ] + } + }, + { + "name": "kubernetes-api", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "path": "token", + "expirationSeconds": 600 + } + }, + { + "configMap": { + "name": "kube-root-ca.crt", + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ] + } + } + ] + } + }, + { + "name": "workload-registry", + "configMap": { + "name": "informed-decision-workload-registry", + "defaultMode": 292 + } + }, + { + "name": "sitting-requester", + "secret": { + "secretName": "informed-decision-sitting-requester", + "defaultMode": 288, + "optional": false, + "items": [ + { + "key": "client-secret", + "path": "client-secret" + } + ] + } + } + ] + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "informed-decision", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + }, + "ports": [ + { + "name": "http", + "port": 80, + "targetPort": "http", + "protocol": "TCP" + } + ] + } + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "informed-decision-review", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + }, + "policyTypes": [ + "Ingress", + "Egress" + ], + "ingress": [ + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "kube-system" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "traefik" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + }, + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "state-hub" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "state-hub" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8081 + } + ] + } + ], + "egress": [ + { + "to": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "kube-system" + } + }, + "podSelector": { + "matchLabels": { + "k8s-app": "kube-dns" + } + } + } + ], + "ports": [ + { + "protocol": "UDP", + "port": 53 + }, + { + "protocol": "TCP", + "port": 53 + } + ] + }, + { + "to": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "approval-engine" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "approval-engine" + } + } + }, + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "audit-core" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "audit-core" + } + } + }, + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "flex-auth" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "flex-auth-informed-decision-sitting" + } + } + }, + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "flex-auth" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "flex-auth-informed-decision-lifecycle" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + }, + { + "to": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "kube-system" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "traefik" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8443 + } + ] + }, + { + "to": [ + { + "ipBlock": { + "cidr": "92.205.62.239/32" + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 443 + } + ] + }, + { + "to": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "state-hub" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "state-hub" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8000 + } + ] + }, + { + "to": [ + { + "ipBlock": { + "cidr": "10.43.0.1/32" + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 443 + } + ] + }, + { + "to": [ + { + "ipBlock": { + "cidr": "92.205.62.239/32" + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 6443 + } + ] + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "informed-decision-workload", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + }, + "ports": [ + { + "name": "workload", + "port": 8081, + "targetPort": "workload", + "protocol": "TCP" + } + ] + } + }, + { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "ClusterRole", + "metadata": { + "name": "informed-decision-tokenreview", + "annotations": { + "informed-decision.coulomb.social/admission": "proposal; INFD-WP-0007/INFD-WP-0005 owner review required" + } + }, + "rules": [ + { + "apiGroups": [ + "authentication.k8s.io" + ], + "resources": [ + "tokenreviews" + ], + "verbs": [ + "create" + ] + } + ] + }, + { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "ClusterRoleBinding", + "metadata": { + "name": "informed-decision-tokenreview", + "annotations": { + "informed-decision.coulomb.social/admission": "proposal; INFD-WP-0007/INFD-WP-0005 owner review required" + } + }, + "roleRef": { + "apiGroup": "rbac.authorization.k8s.io", + "kind": "ClusterRole", + "name": "informed-decision-tokenreview" + }, + "subjects": [ + { + "kind": "ServiceAccount", + "name": "review", + "namespace": "informed-decision" + } + ] + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "informed-decision-review-ingress", + "namespace": "approval-engine", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08", + "informed-decision.coulomb.social/owner-review": "APPROVAL-WP-0002-T01" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "approval-engine" + } + }, + "policyTypes": [ + "Ingress" + ], + "ingress": [ + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "informed-decision" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + } + ] + } + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "informed-decision-review-ingress", + "namespace": "flex-auth", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08", + "informed-decision.coulomb.social/owner-review": "INFD-WP-0001-T08 policy-owner return" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "flex-auth-informed-decision-sitting" + } + }, + "policyTypes": [ + "Ingress" + ], + "ingress": [ + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "informed-decision" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + } + ] + } + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "informed-decision-lifecycle-ingress", + "namespace": "flex-auth", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08", + "informed-decision.coulomb.social/owner-review": "INFD-WP-0007 lifecycle policy-owner return" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "flex-auth-informed-decision-lifecycle" + } + }, + "policyTypes": [ + "Ingress" + ], + "ingress": [ + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "informed-decision" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + } + ] + } + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md new file mode 100644 index 0000000..bdef8cc --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md @@ -0,0 +1,7 @@ +# Exact published purpose overlay and unapproved native release packet + +Actual CI task11484/run3 at3e4bcb26 published immutable763c. The registry proof, installedUID/mode/purpose checks, full scan/SBOM and actualbase comparison are retained. The full scan contains1fixable inheritedMEDIUM,0HIGH/CRITICAL; see owner follow-through/T05. Legacy serialization differences are disclosed. + +This stage prepares owner admission/service source candidates, protected native backup/restore protocol and20document offline-valid informed-decision memo. Native workload remains7f5/config6c. No native backup/export/restore, image change or human approval occurred. Initial failed CI/native preflight evidence remains in owner history. The original36path7c packet is fully archived and remains refinement-required, not approved. The amended gate adds pre-open stdlib readonlyschema5/integrity/count checks, explicitlocal/remote optimizationrefusal and actualCM/PVC UID/content/custody seals. The immutable original native capture stays sealed; future preflight requires unique output outside the sealed packet and owner source tree. + +The memo's actual rawscan attachment plus hash-linked rawSBOM/base scan totalamended boundedpacketbytes (under256KiB); source/image receipt binds raw evidence filenames and hashes. Full owner source manifest includes all raw evidence and helper/tests. Source preparation or local checks do not approve native execution. diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json new file mode 100644 index 0000000..e8630f4 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json @@ -0,0 +1,146 @@ +{ + "architecture": "amd64", + "config": { + "User": "10001:10001", + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + }, + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "Entrypoint": [ + "informed-decision-container" + ], + "WorkingDir": "/app" + }, + "created": "2026-10-05T01:03:56.675216821+02:00", + "history": [ + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "CMD [\"/bin/sh\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV LANG=C.UTF-8", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "RUN /bin/sh -c set -eux; \tapk add --no-cache \t\tca-certificates \t\ttzdata \t; # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_VERSION=3.12.14", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:10:30.672225972Z", + "created_by": "RUN /bin/sh -c set -eux; \t\tapk add --no-cache --virtual .build-deps \t\tbluez-dev \t\tbzip2-dev \t\tdpkg-dev dpkg \t\tfindutils \t\tg++ \t\tgcc \t\tgdbm-dev \t\tgnupg \t\tlibc-dev \t\tlibffi-dev \t\tlibnsl-dev \t\tlibtirpc-dev \t\tlinux-headers \t\tmake \t\tncurses-dev \t\topenssl-dev \t\tpax-utils \t\treadline-dev \t\tsqlite-dev \t\ttar \t\ttcl-dev \t\ttk \t\ttk-dev \t\tutil-linux-dev \t\txz \t\txz-dev \t\tzlib-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \techo \"$PYTHON_SHA256 *python.tar.xz\" | sha256sum -c -; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t$(test \"${gnuArch%%-*}\" != 'riscv64' && echo '--with-lto') \t\t--with-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"-DTHREAD_STACK_SIZE=0x100000\"; \tLDFLAGS=\"${LDFLAGS:-} -Wl,--strip-all\"; \tarch=\"$(apk --print-arch)\"; \tcase \"$arch\" in \t\tx86_64|aarch64) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\"; \t\t\t;; \t\tx86) \t\t\t;; \t\t*) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\"; \t\t\t;; \tesac; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\$\\$ORIGIN/../lib'\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \t\t| tr ',' '\\n' \t\t| sort -u \t\t| awk 'system(\"[ -e /usr/local/lib/\" $1 \" ]\") == 0 { next } { print \"so:\" $1 }' \t\t| xargs -rt apk add --no-network --virtual .python-rundeps \t; \tapk del --no-network .build-deps; \t\texport PYTHONDONTWRITEBYTECODE=1; \tpython3 --version; \tpip3 --version # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "RUN /bin/sh -c set -eux; \tfor src in idle3 pip3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "CMD [\"python3\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "RUN /bin/sh -c apk add --no-cache 'libuuid>=2.42.3-r1' && addgroup -S -g 10001 informed && adduser -S -u 10001 -G informed -H informed # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:55.351944978+02:00", + "created_by": "COPY /opt/venv /opt/venv # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.462092072+02:00", + "created_by": "RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "WORKDIR /app", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "USER 10001:10001", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "EXPOSE [8080/tcp 8081/tcp]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "ENTRYPOINT [\"informed-decision-container\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + ] + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json new file mode 100644 index 0000000..acb2a52 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json @@ -0,0 +1,2362 @@ +{ + "SchemaVersion": 2, + "Trivy": { + "Version": "0.74.0" + }, + "ReportID": "01a12890-e255-75ba-9a37-1fe16e6bef49", + "CreatedAt": "2026-10-11T01:25:46.197378104Z", + "ArtifactID": "sha256:6b6a81301d444377b872cc0e4993ffeb2f0625a8822f4603f711bb46f8bc0d39", + "ArtifactName": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "ArtifactType": "container_image", + "Metadata": { + "Size": 88242688, + "OS": { + "Family": "alpine", + "Name": "3.24.1" + }, + "ImageID": "sha256:d00553b452bacb9f80f8320b6140ec10b4d364b472c96d7280821a180fb3d862", + "DiffIDs": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + ], + "RepoDigests": [ + "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173" + ], + "Reference": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "ImageConfig": { + "architecture": "amd64", + "created": "2026-10-05T01:03:56.675216821+02:00", + "history": [ + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "CMD [\"/bin/sh\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV LANG=C.UTF-8", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "RUN /bin/sh -c set -eux; \tapk add --no-cache \t\tca-certificates \t\ttzdata \t; # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_VERSION=3.12.14", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:10:30.672225972Z", + "created_by": "RUN /bin/sh -c set -eux; \t\tapk add --no-cache --virtual .build-deps \t\tbluez-dev \t\tbzip2-dev \t\tdpkg-dev dpkg \t\tfindutils \t\tg++ \t\tgcc \t\tgdbm-dev \t\tgnupg \t\tlibc-dev \t\tlibffi-dev \t\tlibnsl-dev \t\tlibtirpc-dev \t\tlinux-headers \t\tmake \t\tncurses-dev \t\topenssl-dev \t\tpax-utils \t\treadline-dev \t\tsqlite-dev \t\ttar \t\ttcl-dev \t\ttk \t\ttk-dev \t\tutil-linux-dev \t\txz \t\txz-dev \t\tzlib-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \techo \"$PYTHON_SHA256 *python.tar.xz\" | sha256sum -c -; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t$(test \"${gnuArch%%-*}\" != 'riscv64' \u0026\u0026 echo '--with-lto') \t\t--with-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"-DTHREAD_STACK_SIZE=0x100000\"; \tLDFLAGS=\"${LDFLAGS:-} -Wl,--strip-all\"; \tarch=\"$(apk --print-arch)\"; \tcase \"$arch\" in \t\tx86_64|aarch64) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\"; \t\t\t;; \t\tx86) \t\t\t;; \t\t*) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\"; \t\t\t;; \tesac; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\$\\$ORIGIN/../lib'\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \t\t| tr ',' '\\n' \t\t| sort -u \t\t| awk 'system(\"[ -e /usr/local/lib/\" $1 \" ]\") == 0 { next } { print \"so:\" $1 }' \t\t| xargs -rt apk add --no-network --virtual .python-rundeps \t; \tapk del --no-network .build-deps; \t\texport PYTHONDONTWRITEBYTECODE=1; \tpython3 --version; \tpip3 --version # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "RUN /bin/sh -c set -eux; \tfor src in idle3 pip3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "CMD [\"python3\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "RUN /bin/sh -c apk add --no-cache 'libuuid\u003e=2.42.3-r1' \u0026\u0026 addgroup -S -g 10001 informed \u0026\u0026 adduser -S -u 10001 -G informed -H informed # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:55.351944978+02:00", + "created_by": "COPY /opt/venv /opt/venv # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.462092072+02:00", + "created_by": "RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "WORKDIR /app", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "USER 10001:10001", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "EXPOSE [8080/tcp 8081/tcp]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "ENTRYPOINT [\"informed-decision-container\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + ] + }, + "config": { + "Entrypoint": [ + "informed-decision-container" + ], + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "User": "10001:10001", + "WorkingDir": "/app", + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + } + } + }, + "Layers": [ + { + "Size": 8697856, + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "Size": 1538048, + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "Size": 47150592, + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "Size": 5120, + "Digest": "sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b", + "DiffID": "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe" + }, + { + "Size": 131584, + "Digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86", + "DiffID": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + { + "Size": 30705664, + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "Size": 12288, + "Digest": "sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f", + "DiffID": "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59" + }, + { + "Size": 1536, + "Digest": "sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3", + "DiffID": "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + } + ] + }, + "Results": [ + { + "Target": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 (alpine 3.24.1)", + "Class": "os-pkgs", + "Type": "alpine", + "Packages": [ + { + "ID": ".python-rundeps@20260901.001029", + "Name": ".python-rundeps", + "Identifier": { + "PURL": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch\u0026distro=3.24.1", + "UID": "4e26c99fecac1e97" + }, + "Version": "20260901.001029", + "Arch": "noarch", + "DependsOn": [ + "gdbm@1.26-r0", + "libbz2@1.0.8-r6", + "libcrypto3@3.5.8-r0", + "libffi@3.5.2-r1", + "libncursesw@6.6_p20260516-r0", + "libnsl@2.0.1-r2", + "libpanelw@6.6_p20260516-r0", + "libssl3@3.5.8-r0", + "libtirpc@1.3.5-r1", + "libuuid@2.42.3-r1", + "musl@1.2.6-r2", + "readline@8.3.3-r1", + "sqlite-libs@3.53.4-r0", + "xz-libs@5.8.3-r0", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:51d0c1e7d88a414345799f0309185c625013ef32", + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-baselayout@3.7.2-r1", + "Name": "alpine-baselayout", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "1b9c543300f8073e" + }, + "Version": "3.7.2-r1", + "Arch": "x86_64", + "SrcName": "alpine-baselayout", + "SrcVersion": "3.7.2-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "alpine-baselayout-data@3.7.2-r1", + "busybox-binsh@1.37.0-r31" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:f0fcfdc2f4da058af6473bc45c4eab62916225b2", + "InstalledFiles": [ + "etc/motd", + "etc/crontabs/root", + "etc/modprobe.d/aliases.conf", + "etc/modprobe.d/blacklist.conf", + "etc/modprobe.d/i386.conf", + "etc/profile.d/20locale.sh", + "etc/profile.d/README", + "etc/profile.d/color_prompt.sh.disabled", + "usr/lib/sysctl.d/00-alpine.conf", + "var/lock", + "var/run", + "var/spool/mail", + "var/spool/cron/crontabs" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-baselayout-data@3.7.2-r1", + "Name": "alpine-baselayout-data", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "fcc3cd90122d8aa7" + }, + "Version": "3.7.2-r1", + "Arch": "x86_64", + "SrcName": "alpine-baselayout", + "SrcVersion": "3.7.2-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508", + "InstalledFiles": [ + "etc/fstab", + "etc/group", + "etc/hostname", + "etc/hosts", + "etc/inittab", + "etc/modules", + "etc/mtab", + "etc/nsswitch.conf", + "etc/passwd", + "etc/profile", + "etc/protocols", + "etc/services", + "etc/shadow", + "etc/shells", + "etc/sysctl.conf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-keys@2.6-r0", + "Name": "alpine-keys", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "cb1f6c8fa74713e0" + }, + "Version": "2.6-r0", + "Arch": "x86_64", + "SrcName": "alpine-keys", + "SrcVersion": "2.6-r0", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:d8d6b80e53c059a77e4915da78ba964f3ffea240", + "InstalledFiles": [ + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub", + "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", + "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub", + "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub", + "usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub", + "usr/share/apk/keys/loongarch64/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub", + "usr/share/apk/keys/mips64/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", + "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", + "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub", + "usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub", + "usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub", + "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", + "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-release@3.24.1-r0", + "Name": "alpine-release", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "6cfad6f36e1f31aa" + }, + "Version": "3.24.1-r0", + "Arch": "x86_64", + "SrcName": "alpine-base", + "SrcVersion": "3.24.1-r0", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "alpine-keys@2.6-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:bc6912a25cdc7733e0035ed509eceaa4026946e3", + "InstalledFiles": [ + "etc/alpine-release", + "etc/issue", + "etc/os-release", + "etc/secfixes.d/alpine", + "usr/lib/os-release" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "apk-tools@3.0.6-r0", + "Name": "apk-tools", + "Identifier": { + "PURL": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "cb2633c883b17a04" + }, + "Version": "3.0.6-r0", + "Arch": "x86_64", + "SrcName": "apk-tools", + "SrcVersion": "3.0.6-r0", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "ca-certificates-bundle@20260611-r0", + "libapk@3.0.6-r0", + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:043333589798a1f52e09ae63f026c6c8fa676d34", + "InstalledFiles": [ + "sbin/apk" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "busybox@1.37.0-r31", + "Name": "busybox", + "Identifier": { + "PURL": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "771020c43c8440bf" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:b5405ebc02f7dd8be95b6265c54b243d5456ab8f", + "InstalledFiles": [ + "bin/busybox", + "etc/securetty", + "etc/busybox-paths.d/busybox", + "etc/logrotate.d/acpid", + "etc/network/if-up.d/dad", + "etc/udhcpc/udhcpc.conf", + "usr/share/udhcpc/default.script" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "busybox-binsh@1.37.0-r31", + "Name": "busybox-binsh", + "Identifier": { + "PURL": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "1ec8a3d5d2b63297" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "busybox@1.37.0-r31" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7", + "InstalledFiles": [ + "bin/sh" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ca-certificates@20260611-r0", + "Name": "ca-certificates", + "Identifier": { + "PURL": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "2a3c316ee83c6198" + }, + "Version": "20260611-r0", + "Arch": "x86_64", + "SrcName": "ca-certificates", + "SrcVersion": "20260611-r0", + "Licenses": [ + "MPL-2.0", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "busybox-binsh@1.37.0-r31", + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + "Digest": "sha1:8f2a04abeb54b331e2970a0a0dffb7bd6bdde567", + "InstalledFiles": [ + "etc/ca-certificates.conf", + "etc/apk/protected_paths.d/ca-certificates.list", + "etc/ca-certificates/update.d/certhash", + "usr/bin/c_rehash", + "usr/sbin/update-ca-certificates", + "usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt", + "usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt", + "usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt", + "usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_ECC_TLS_2021.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_RSA_TLS_2021.crt", + "usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt", + "usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA1.crt", + "usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA2.crt", + "usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt", + "usr/share/ca-certificates/mozilla/CA_Disig_Root_R2.crt", + "usr/share/ca-certificates/mozilla/CFCA_EV_ROOT.crt", + "usr/share/ca-certificates/mozilla/COMODO_ECC_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/COMODO_RSA_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/Certainly_Root_E1.crt", + "usr/share/ca-certificates/mozilla/Certainly_Root_R1.crt", + "usr/share/ca-certificates/mozilla/Certigna_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_EC-384_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA_2.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Root_CA.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_1_2020.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_2_2023.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_1_2020.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_2_2023.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G2.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G3.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G2.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G3.crt", + "usr/share/ca-certificates/mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt", + "usr/share/ca-certificates/mozilla/DigiCert_TLS_RSA4096_Root_G5.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Trusted_Root_G4.crt", + "usr/share/ca-certificates/mozilla/GDCA_TrustAUTH_R5_ROOT.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R1.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R3.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R4.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R4.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R5.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R3.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R6.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_E46.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_R46.crt", + "usr/share/ca-certificates/mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/HARICA_TLS_ECC_Root_CA_2021.crt", + "usr/share/ca-certificates/mozilla/HARICA_TLS_RSA_Root_CA_2021.crt", + "usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt", + "usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt", + "usr/share/ca-certificates/mozilla/HiPKI_Root_CA_-_G1.crt", + "usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt", + "usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt", + "usr/share/ca-certificates/mozilla/ISRG_Root_X2.crt", + "usr/share/ca-certificates/mozilla/IdenTrust_Commercial_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/IdenTrust_Public_Sector_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/Izenpe.com.crt", + "usr/share/ca-certificates/mozilla/Microsec_e-Szigno_Root_CA_2009.crt", + "usr/share/ca-certificates/mozilla/Microsoft_ECC_Root_Certificate_Authority_2017.crt", + "usr/share/ca-certificates/mozilla/Microsoft_RSA_Root_Certificate_Authority_2017.crt", + "usr/share/ca-certificates/mozilla/NAVER_Global_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt", + "usr/share/ca-certificates/mozilla/OISTE_Server_Root_ECC_G1.crt", + "usr/share/ca-certificates/mozilla/OISTE_Server_Root_RSA_G1.crt", + "usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GB_CA.crt", + "usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GC_CA.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_1_G3.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_2_G3.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_3_G3.crt", + "usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_ECC.crt", + "usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_RSA_R2.crt", + "usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_ECC.crt", + "usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_RSA.crt", + "usr/share/ca-certificates/mozilla/SSL.com_TLS_ECC_Root_CA_2022.crt", + "usr/share/ca-certificates/mozilla/SSL.com_TLS_RSA_Root_CA_2022.crt", + "usr/share/ca-certificates/mozilla/SZAFIR_ROOT_CA2.crt", + "usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_E46.crt", + "usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_R46.crt", + "usr/share/ca-certificates/mozilla/SecureSign_Root_CA14.crt", + "usr/share/ca-certificates/mozilla/SecureSign_Root_CA15.crt", + "usr/share/ca-certificates/mozilla/Security_Communication_ECC_RootCA1.crt", + "usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt", + "usr/share/ca-certificates/mozilla/Starfield_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/SwissSign_RSA_TLS_Root_CA_2022_-_1.crt", + "usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_2.crt", + "usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_3.crt", + "usr/share/ca-certificates/mozilla/TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.crt", + "usr/share/ca-certificates/mozilla/TWCA_CYBER_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TWCA_Global_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TWCA_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/Telekom_Security_TLS_ECC_Root_2020.crt", + "usr/share/ca-certificates/mozilla/Telekom_Security_TLS_RSA_Root_2023.crt", + "usr/share/ca-certificates/mozilla/Telia_Root_CA_v2.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G3.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G4.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_TLS_ECC_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_TLS_RSA_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TunTrust_Root_CA.crt", + "usr/share/ca-certificates/mozilla/UCA_Extended_Validation_Root.crt", + "usr/share/ca-certificates/mozilla/UCA_Global_G2_Root.crt", + "usr/share/ca-certificates/mozilla/USERTrust_ECC_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/USERTrust_RSA_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/certSIGN_Root_CA_G2.crt", + "usr/share/ca-certificates/mozilla/e-Szigno_Root_CA_2017.crt", + "usr/share/ca-certificates/mozilla/e-Szigno_TLS_Root_CA_2023.crt", + "usr/share/ca-certificates/mozilla/ePKI_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_C3.crt", + "usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_G3.crt", + "usr/share/ca-certificates/mozilla/emSign_Root_CA_-_C1.crt", + "usr/share/ca-certificates/mozilla/emSign_Root_CA_-_G1.crt", + "usr/share/ca-certificates/mozilla/vTrus_ECC_Root_CA.crt", + "usr/share/ca-certificates/mozilla/vTrus_Root_CA.crt" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ca-certificates-bundle@20260611-r0", + "Name": "ca-certificates-bundle", + "Identifier": { + "PURL": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "20337c2ea28bef28" + }, + "Version": "20260611-r0", + "Arch": "x86_64", + "SrcName": "ca-certificates", + "SrcVersion": "20260611-r0", + "Licenses": [ + "MPL-2.0", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c9534a03750bdfae341f10969016090fc11febbd", + "InstalledFiles": [ + "etc/ssl/cert.pem", + "etc/ssl/certs/ca-certificates.crt", + "etc/ssl1.1/cert.pem", + "etc/ssl1.1/certs" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "gdbm@1.26-r0", + "Name": "gdbm", + "Identifier": { + "PURL": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "5eb1a3f86262ca77" + }, + "Version": "1.26-r0", + "Arch": "x86_64", + "SrcName": "gdbm", + "SrcVersion": "1.26-r0", + "Licenses": [ + "GPL-3.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:619493d8124fe49a8ee1d8f7a1372cf7e3977337", + "InstalledFiles": [ + "usr/lib/libgdbm.so.6", + "usr/lib/libgdbm.so.6.0.0", + "usr/lib/libgdbm_compat.so.4", + "usr/lib/libgdbm_compat.so.4.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "keyutils-libs@1.6.3-r4", + "Name": "keyutils-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64\u0026distro=3.24.1", + "UID": "a1a29120eb342032" + }, + "Version": "1.6.3-r4", + "Arch": "x86_64", + "SrcName": "keyutils", + "SrcVersion": "1.6.3-r4", + "Licenses": [ + "GPL-2.0-or-later", + "LGPL-2.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:b7331c96f077fc3522ee4361a441d1097204cd90", + "InstalledFiles": [ + "usr/lib/libkeyutils.so.1", + "usr/lib/libkeyutils.so.1.10" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "krb5-conf@1.0-r2", + "Name": "krb5-conf", + "Identifier": { + "PURL": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "e7cf94ba8b6dbc33" + }, + "Version": "1.0-r2", + "Arch": "x86_64", + "SrcName": "krb5-conf", + "SrcVersion": "1.0-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:40a11e0690a59e110367b62a80661024e9942a2d", + "InstalledFiles": [ + "etc/krb5.conf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "krb5-libs@1.22.2-r1", + "Name": "krb5-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "958f8b4a4f087dac" + }, + "Version": "1.22.2-r1", + "Arch": "x86_64", + "SrcName": "krb5", + "SrcVersion": "1.22.2-r1", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "keyutils-libs@1.6.3-r4", + "krb5-conf@1.0-r2", + "libcom_err@1.47.4-r0", + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "libverto@0.3.2-r2", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:ef02346e21b817ff379e4601e5b1fc9760e5e31a", + "InstalledFiles": [ + "usr/lib/libgssapi_krb5.so.2", + "usr/lib/libgssapi_krb5.so.2.2", + "usr/lib/libgssrpc.so.4", + "usr/lib/libgssrpc.so.4.2", + "usr/lib/libk5crypto.so.3", + "usr/lib/libk5crypto.so.3.1", + "usr/lib/libkadm5clnt_mit.so.12", + "usr/lib/libkadm5clnt_mit.so.12.0", + "usr/lib/libkadm5srv_mit.so.12", + "usr/lib/libkadm5srv_mit.so.12.0", + "usr/lib/libkdb5.so.10", + "usr/lib/libkdb5.so.10.0", + "usr/lib/libkrad.so.0", + "usr/lib/libkrad.so.0.0", + "usr/lib/libkrb5.so.3", + "usr/lib/libkrb5.so.3.3", + "usr/lib/libkrb5support.so.0", + "usr/lib/libkrb5support.so.0.1", + "usr/lib/krb5/plugins/kdb/db2.so", + "usr/lib/krb5/plugins/preauth/otp.so", + "usr/lib/krb5/plugins/preauth/spake.so", + "usr/lib/krb5/plugins/preauth/test.so", + "usr/lib/krb5/plugins/tls/k5tls.so" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libapk@3.0.6-r0", + "Name": "libapk", + "Identifier": { + "PURL": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "a35b8b9b3219513a" + }, + "Version": "3.0.6-r0", + "Arch": "x86_64", + "SrcName": "apk-tools", + "SrcVersion": "3.0.6-r0", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "musl@1.2.6-r2", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:523a8f58104589f74f743d501c81bf6517155378", + "InstalledFiles": [ + "usr/lib/libapk.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libbz2@1.0.8-r6", + "Name": "libbz2", + "Identifier": { + "PURL": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64\u0026distro=3.24.1", + "UID": "48e17539404e2d56" + }, + "Version": "1.0.8-r6", + "Arch": "x86_64", + "SrcName": "bzip2", + "SrcVersion": "1.0.8-r6", + "Licenses": [ + "bzip-2-1.0.6" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:08566ba5c7af97c25474be8b24e8b48f0116b67d", + "InstalledFiles": [ + "usr/lib/libbz2.so.1", + "usr/lib/libbz2.so.1.0.8" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libcom_err@1.47.4-r0", + "Name": "libcom_err", + "Identifier": { + "PURL": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "3fc35a3f66d192af" + }, + "Version": "1.47.4-r0", + "Arch": "x86_64", + "SrcName": "e2fsprogs", + "SrcVersion": "1.47.4-r0", + "Licenses": [ + "GPL-2.0-or-later", + "LGPL-2.0-or-later", + "BSD-3-Clause", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef", + "InstalledFiles": [ + "usr/lib/libcom_err.so.2", + "usr/lib/libcom_err.so.2.1" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libcrypto3@3.5.8-r0", + "Name": "libcrypto3", + "Identifier": { + "PURL": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "4299bba2ba9c96aa" + }, + "Version": "3.5.8-r0", + "Arch": "x86_64", + "SrcName": "openssl", + "SrcVersion": "3.5.8-r0", + "Licenses": [ + "Apache-2.0" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3", + "InstalledFiles": [ + "etc/ssl/ct_log_list.cnf", + "etc/ssl/ct_log_list.cnf.dist", + "etc/ssl/openssl.cnf", + "etc/ssl/openssl.cnf.dist", + "usr/lib/libcrypto.so.3", + "usr/lib/engines-3/afalg.so", + "usr/lib/engines-3/capi.so", + "usr/lib/engines-3/loader_attic.so", + "usr/lib/engines-3/padlock.so", + "usr/lib/ossl-modules/legacy.so" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libffi@3.5.2-r1", + "Name": "libffi", + "Identifier": { + "PURL": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "d3eaa921287b1ccd" + }, + "Version": "3.5.2-r1", + "Arch": "x86_64", + "SrcName": "libffi", + "SrcVersion": "3.5.2-r1", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a", + "InstalledFiles": [ + "usr/lib/libffi.so.8", + "usr/lib/libffi.so.8.2.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libintl@1.0-r0", + "Name": "libintl", + "Identifier": { + "PURL": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "25c18808d8fc87e0" + }, + "Version": "1.0-r0", + "Arch": "x86_64", + "SrcName": "gettext", + "SrcVersion": "1.0-r0", + "Licenses": [ + "LGPL-2.1-or-later" + ], + "Maintainer": "Carlo Landmeter \u003cclandmeter@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:282d6642ccac87237e43a864159d73cf5abe7550", + "InstalledFiles": [ + "usr/lib/libintl.so.8", + "usr/lib/libintl.so.8.4.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libncursesw@6.6_p20260516-r0", + "Name": "libncursesw", + "Identifier": { + "PURL": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e8939f45e2191bcc" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "DependsOn": [ + "musl@1.2.6-r2", + "ncurses-terminfo-base@6.6_p20260516-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:9f318e6e324d6827274829194cf6ac6afbaded12", + "InstalledFiles": [ + "usr/lib/libncursesw.so.6", + "usr/lib/libncursesw.so.6.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libnsl@2.0.1-r2", + "Name": "libnsl", + "Identifier": { + "PURL": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "3d893c60d41da67b" + }, + "Version": "2.0.1-r2", + "Arch": "x86_64", + "SrcName": "libnsl", + "SrcVersion": "2.0.1-r2", + "Licenses": [ + "LGPL-2.0-or-later" + ], + "DependsOn": [ + "libintl@1.0-r0", + "libtirpc@1.3.5-r1", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:5194adbf26560b52be318481a7af294ab05fd795", + "InstalledFiles": [ + "usr/lib/libnsl.so.3", + "usr/lib/libnsl.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libpanelw@6.6_p20260516-r0", + "Name": "libpanelw", + "Identifier": { + "PURL": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "ef1ad9bb256b373" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "DependsOn": [ + "libncursesw@6.6_p20260516-r0", + "musl@1.2.6-r2", + "ncurses-terminfo-base@6.6_p20260516-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:149bdc434232ed11fc5bb975ba519a07154a6f56", + "InstalledFiles": [ + "usr/lib/libpanelw.so.6", + "usr/lib/libpanelw.so.6.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libssl3@3.5.8-r0", + "Name": "libssl3", + "Identifier": { + "PURL": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "f290ab59b88b1c4a" + }, + "Version": "3.5.8-r0", + "Arch": "x86_64", + "SrcName": "openssl", + "SrcVersion": "3.5.8-r0", + "Licenses": [ + "Apache-2.0" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:5f9b1e55d821953d2e2b1db322dad70a3b5041ea", + "InstalledFiles": [ + "usr/lib/libssl.so.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libtirpc@1.3.5-r1", + "Name": "libtirpc", + "Identifier": { + "PURL": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "471c8d955ca03be5" + }, + "Version": "1.3.5-r1", + "Arch": "x86_64", + "SrcName": "libtirpc", + "SrcVersion": "1.3.5-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "krb5-libs@1.22.2-r1", + "libtirpc-conf@1.3.5-r1", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:c32865bd86a8b8829d152279cabbc5ac6d430eb2", + "InstalledFiles": [ + "usr/lib/libtirpc.so.3", + "usr/lib/libtirpc.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libtirpc-conf@1.3.5-r1", + "Name": "libtirpc-conf", + "Identifier": { + "PURL": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "3437392c14aad33f" + }, + "Version": "1.3.5-r1", + "Arch": "x86_64", + "SrcName": "libtirpc", + "SrcVersion": "1.3.5-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:0c17d9988dc986c90e22f79778df047eca9973ff", + "InstalledFiles": [ + "etc/bindresvport.blacklist", + "etc/netconfig" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libuuid@2.42.3-r1", + "Name": "libuuid", + "Identifier": { + "PURL": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "c444e9cdd1bdda40" + }, + "Version": "2.42.3-r1", + "Arch": "x86_64", + "SrcName": "util-linux", + "SrcVersion": "2.42.3-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86", + "DiffID": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + "Digest": "sha1:8f041ef637ad75f381cc0c034f2afbbb0303264e", + "InstalledFiles": [ + "usr/lib/libuuid.so.1", + "usr/lib/libuuid.so.1.3.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libverto@0.3.2-r2", + "Name": "libverto", + "Identifier": { + "PURL": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "9df4321a283a6cf6" + }, + "Version": "0.3.2-r2", + "Arch": "x86_64", + "SrcName": "libverto", + "SrcVersion": "0.3.2-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Francesco Colista \u003cfcolista@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:73233059338142e4ac6d8fb8bb0074e93da75dc1", + "InstalledFiles": [ + "usr/lib/libverto.so.1", + "usr/lib/libverto.so.1.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "musl@1.2.6-r2", + "Name": "musl", + "Identifier": { + "PURL": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "1f8cb44befe503d4" + }, + "Version": "1.2.6-r2", + "Arch": "x86_64", + "SrcName": "musl", + "SrcVersion": "1.2.6-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:0f7e5827e4e1a73631beda27b78431a8ba240e05", + "InstalledFiles": [ + "lib/ld-musl-x86_64.so.1", + "lib/libc.musl-x86_64.so.1" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "musl-utils@1.2.6-r2", + "Name": "musl-utils", + "Identifier": { + "PURL": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "4497482ec1d943e1" + }, + "Version": "1.2.6-r2", + "Arch": "x86_64", + "SrcName": "musl", + "SrcVersion": "1.2.6-r2", + "Licenses": [ + "MIT", + "BSD-2-Clause", + "GPL-2.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2", + "scanelf@1.3.9-r1" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:75ada3c48d63ec5d87c42fdf934a3fdd11298dc5", + "InstalledFiles": [ + "sbin/ldconfig", + "usr/bin/getconf", + "usr/bin/getent", + "usr/bin/iconv", + "usr/bin/ldd" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ncurses-terminfo-base@6.6_p20260516-r0", + "Name": "ncurses-terminfo-base", + "Identifier": { + "PURL": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e7fac5c6a6e9ae8" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:9d551d828e9c8ee52c5801c1d6046828ebf15752", + "InstalledFiles": [ + "etc/terminfo/a/alacritty", + "etc/terminfo/a/ansi", + "etc/terminfo/d/dumb", + "etc/terminfo/g/gnome", + "etc/terminfo/g/gnome-256color", + "etc/terminfo/k/konsole", + "etc/terminfo/k/konsole-256color", + "etc/terminfo/k/konsole-linux", + "etc/terminfo/l/linux", + "etc/terminfo/p/putty", + "etc/terminfo/p/putty-256color", + "etc/terminfo/r/rxvt", + "etc/terminfo/r/rxvt-256color", + "etc/terminfo/s/screen", + "etc/terminfo/s/screen-256color", + "etc/terminfo/s/st-0.6", + "etc/terminfo/s/st-0.7", + "etc/terminfo/s/st-0.8", + "etc/terminfo/s/st-0.8.5", + "etc/terminfo/s/st-16color", + "etc/terminfo/s/st-256color", + "etc/terminfo/s/st-direct", + "etc/terminfo/s/sun", + "etc/terminfo/t/terminator", + "etc/terminfo/t/terminology", + "etc/terminfo/t/terminology-0.6.1", + "etc/terminfo/t/terminology-1.0.0", + "etc/terminfo/t/terminology-1.8.1", + "etc/terminfo/t/tmux", + "etc/terminfo/t/tmux-256color", + "etc/terminfo/v/vt100", + "etc/terminfo/v/vt102", + "etc/terminfo/v/vt200", + "etc/terminfo/v/vt220", + "etc/terminfo/v/vt52", + "etc/terminfo/v/vte", + "etc/terminfo/v/vte-256color", + "etc/terminfo/x/xterm", + "etc/terminfo/x/xterm-256color", + "etc/terminfo/x/xterm-color", + "etc/terminfo/x/xterm-xfree86" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "readline@8.3.3-r1", + "Name": "readline", + "Identifier": { + "PURL": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "f50058781c93e1f2" + }, + "Version": "8.3.3-r1", + "Arch": "x86_64", + "SrcName": "readline", + "SrcVersion": "8.3.3-r1", + "Licenses": [ + "GPL-3.0-or-later" + ], + "Maintainer": "qaqland \u003cqaq@qaq.land\u003e", + "DependsOn": [ + "libncursesw@6.6_p20260516-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:945b16e378bc00e44d89d4de8124bba7647fdf4d", + "InstalledFiles": [ + "etc/inputrc", + "usr/lib/libreadline.so.8", + "usr/lib/libreadline.so.8.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "scanelf@1.3.9-r1", + "Name": "scanelf", + "Identifier": { + "PURL": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "936394657a1626fb" + }, + "Version": "1.3.9-r1", + "Arch": "x86_64", + "SrcName": "pax-utils", + "SrcVersion": "1.3.9-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:013f903d0ba219673aebbdd04f74bb5ed82b01f0", + "InstalledFiles": [ + "usr/bin/scanelf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "sqlite-libs@3.53.4-r0", + "Name": "sqlite-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "8b10aee2ccc192de" + }, + "Version": "3.53.4-r0", + "Arch": "x86_64", + "SrcName": "sqlite", + "SrcVersion": "3.53.4-r0", + "Licenses": [ + "blessing" + ], + "Maintainer": "Jingyun Hua \u003chuajingyun@loongson.cn\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:f7630ceb37c232b6609861aeab6cdb9cd120e6fa", + "InstalledFiles": [ + "usr/lib/libsqlite3.so.0", + "usr/lib/libsqlite3.so.3.53.4" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ssl_client@1.37.0-r31", + "Name": "ssl_client", + "Identifier": { + "PURL": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "d42e31f15a4ce47a" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c220f4a5125a313af733e98def94132bb1e9d40d", + "InstalledFiles": [ + "usr/bin/ssl_client" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "tzdata@2026c-r0", + "Name": "tzdata", + "Identifier": { + "PURL": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "52c6b50eff629f9d" + }, + "Version": "2026c-r0", + "Arch": "x86_64", + "SrcName": "tzdata", + "SrcVersion": "2026c-r0", + "Licenses": [ + "Public-Domain" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + "Digest": "sha1:61f7544ecd8dd63eac23fe3e645702fda92ef02a", + "InstalledFiles": [ + "usr/share/zoneinfo/CET", + "usr/share/zoneinfo/CST6CDT", + "usr/share/zoneinfo/Cuba", + "usr/share/zoneinfo/EET", + "usr/share/zoneinfo/EST", + "usr/share/zoneinfo/EST5EDT", + "usr/share/zoneinfo/Egypt", + "usr/share/zoneinfo/Eire", + "usr/share/zoneinfo/Factory", + "usr/share/zoneinfo/GB", + "usr/share/zoneinfo/GB-Eire", + "usr/share/zoneinfo/GMT", + "usr/share/zoneinfo/GMT+0", + "usr/share/zoneinfo/GMT-0", + "usr/share/zoneinfo/GMT0", + "usr/share/zoneinfo/Greenwich", + "usr/share/zoneinfo/HST", + "usr/share/zoneinfo/Hongkong", + "usr/share/zoneinfo/Iceland", + "usr/share/zoneinfo/Iran", + "usr/share/zoneinfo/Israel", + "usr/share/zoneinfo/Jamaica", + "usr/share/zoneinfo/Japan", + "usr/share/zoneinfo/Kwajalein", + "usr/share/zoneinfo/Libya", + "usr/share/zoneinfo/MET", + "usr/share/zoneinfo/MST", + "usr/share/zoneinfo/MST7MDT", + "usr/share/zoneinfo/NZ", + "usr/share/zoneinfo/NZ-CHAT", + "usr/share/zoneinfo/Navajo", + "usr/share/zoneinfo/PRC", + "usr/share/zoneinfo/PST8PDT", + "usr/share/zoneinfo/Poland", + "usr/share/zoneinfo/Portugal", + "usr/share/zoneinfo/ROC", + "usr/share/zoneinfo/ROK", + "usr/share/zoneinfo/Singapore", + "usr/share/zoneinfo/Turkey", + "usr/share/zoneinfo/UCT", + "usr/share/zoneinfo/UTC", + "usr/share/zoneinfo/Universal", + "usr/share/zoneinfo/W-SU", + "usr/share/zoneinfo/WET", + "usr/share/zoneinfo/Zulu", + "usr/share/zoneinfo/iso3166.tab", + "usr/share/zoneinfo/leap-seconds.list", + "usr/share/zoneinfo/posixrules", + "usr/share/zoneinfo/zone.tab", + "usr/share/zoneinfo/zone1970.tab", + "usr/share/zoneinfo/Africa/Abidjan", + "usr/share/zoneinfo/Africa/Accra", + "usr/share/zoneinfo/Africa/Addis_Ababa", + "usr/share/zoneinfo/Africa/Algiers", + "usr/share/zoneinfo/Africa/Asmara", + "usr/share/zoneinfo/Africa/Asmera", + "usr/share/zoneinfo/Africa/Bamako", + "usr/share/zoneinfo/Africa/Bangui", + "usr/share/zoneinfo/Africa/Banjul", + "usr/share/zoneinfo/Africa/Bissau", + "usr/share/zoneinfo/Africa/Blantyre", + "usr/share/zoneinfo/Africa/Brazzaville", + "usr/share/zoneinfo/Africa/Bujumbura", + "usr/share/zoneinfo/Africa/Cairo", + "usr/share/zoneinfo/Africa/Casablanca", + "usr/share/zoneinfo/Africa/Ceuta", + "usr/share/zoneinfo/Africa/Conakry", + "usr/share/zoneinfo/Africa/Dakar", + "usr/share/zoneinfo/Africa/Dar_es_Salaam", + "usr/share/zoneinfo/Africa/Djibouti", + "usr/share/zoneinfo/Africa/Douala", + "usr/share/zoneinfo/Africa/El_Aaiun", + "usr/share/zoneinfo/Africa/Freetown", + "usr/share/zoneinfo/Africa/Gaborone", + "usr/share/zoneinfo/Africa/Harare", + "usr/share/zoneinfo/Africa/Johannesburg", + "usr/share/zoneinfo/Africa/Juba", + "usr/share/zoneinfo/Africa/Kampala", + "usr/share/zoneinfo/Africa/Khartoum", + "usr/share/zoneinfo/Africa/Kigali", + "usr/share/zoneinfo/Africa/Kinshasa", + "usr/share/zoneinfo/Africa/Lagos", + "usr/share/zoneinfo/Africa/Libreville", + "usr/share/zoneinfo/Africa/Lome", + "usr/share/zoneinfo/Africa/Luanda", + "usr/share/zoneinfo/Africa/Lubumbashi", + "usr/share/zoneinfo/Africa/Lusaka", + "usr/share/zoneinfo/Africa/Malabo", + "usr/share/zoneinfo/Africa/Maputo", + "usr/share/zoneinfo/Africa/Maseru", + "usr/share/zoneinfo/Africa/Mbabane", + "usr/share/zoneinfo/Africa/Mogadishu", + "usr/share/zoneinfo/Africa/Monrovia", + "usr/share/zoneinfo/Africa/Nairobi", + "usr/share/zoneinfo/Africa/Ndjamena", + "usr/share/zoneinfo/Africa/Niamey", + "usr/share/zoneinfo/Africa/Nouakchott", + "usr/share/zoneinfo/Africa/Ouagadougou", + "usr/share/zoneinfo/Africa/Porto-Novo", + "usr/share/zoneinfo/Africa/Sao_Tome", + "usr/share/zoneinfo/Africa/Timbuktu", + "usr/share/zoneinfo/Africa/Tripoli", + "usr/share/zoneinfo/Africa/Tunis", + "usr/share/zoneinfo/Africa/Windhoek", + "usr/share/zoneinfo/America/Adak", + "usr/share/zoneinfo/America/Anchorage", + "usr/share/zoneinfo/America/Anguilla", + "usr/share/zoneinfo/America/Antigua", + "usr/share/zoneinfo/America/Araguaina", + "usr/share/zoneinfo/America/Aruba", + "usr/share/zoneinfo/America/Asuncion", + "usr/share/zoneinfo/America/Atikokan", + "usr/share/zoneinfo/America/Atka", + "usr/share/zoneinfo/America/Bahia", + "usr/share/zoneinfo/America/Bahia_Banderas", + "usr/share/zoneinfo/America/Barbados", + "usr/share/zoneinfo/America/Belem", + "usr/share/zoneinfo/America/Belize", + "usr/share/zoneinfo/America/Blanc-Sablon", + "usr/share/zoneinfo/America/Boa_Vista", + "usr/share/zoneinfo/America/Bogota", + "usr/share/zoneinfo/America/Boise", + "usr/share/zoneinfo/America/Buenos_Aires", + "usr/share/zoneinfo/America/Cambridge_Bay", + "usr/share/zoneinfo/America/Campo_Grande", + "usr/share/zoneinfo/America/Cancun", + "usr/share/zoneinfo/America/Caracas", + "usr/share/zoneinfo/America/Catamarca", + "usr/share/zoneinfo/America/Cayenne", + "usr/share/zoneinfo/America/Cayman", + "usr/share/zoneinfo/America/Chicago", + "usr/share/zoneinfo/America/Chihuahua", + "usr/share/zoneinfo/America/Ciudad_Juarez", + "usr/share/zoneinfo/America/Coral_Harbour", + "usr/share/zoneinfo/America/Cordoba", + "usr/share/zoneinfo/America/Costa_Rica", + "usr/share/zoneinfo/America/Coyhaique", + "usr/share/zoneinfo/America/Creston", + "usr/share/zoneinfo/America/Cuiaba", + "usr/share/zoneinfo/America/Curacao", + "usr/share/zoneinfo/America/Danmarkshavn", + "usr/share/zoneinfo/America/Dawson", + "usr/share/zoneinfo/America/Dawson_Creek", + "usr/share/zoneinfo/America/Denver", + "usr/share/zoneinfo/America/Detroit", + "usr/share/zoneinfo/America/Dominica", + "usr/share/zoneinfo/America/Edmonton", + "usr/share/zoneinfo/America/Eirunepe", + "usr/share/zoneinfo/America/El_Salvador", + "usr/share/zoneinfo/America/Ensenada", + "usr/share/zoneinfo/America/Fort_Nelson", + "usr/share/zoneinfo/America/Fort_Wayne", + "usr/share/zoneinfo/America/Fortaleza", + "usr/share/zoneinfo/America/Glace_Bay", + "usr/share/zoneinfo/America/Godthab", + "usr/share/zoneinfo/America/Goose_Bay", + "usr/share/zoneinfo/America/Grand_Turk", + "usr/share/zoneinfo/America/Grenada", + "usr/share/zoneinfo/America/Guadeloupe", + "usr/share/zoneinfo/America/Guatemala", + "usr/share/zoneinfo/America/Guayaquil", + "usr/share/zoneinfo/America/Guyana", + "usr/share/zoneinfo/America/Halifax", + "usr/share/zoneinfo/America/Havana", + "usr/share/zoneinfo/America/Hermosillo", + "usr/share/zoneinfo/America/Indianapolis", + "usr/share/zoneinfo/America/Inuvik", + "usr/share/zoneinfo/America/Iqaluit", + "usr/share/zoneinfo/America/Jamaica", + "usr/share/zoneinfo/America/Jujuy", + "usr/share/zoneinfo/America/Juneau", + "usr/share/zoneinfo/America/Knox_IN", + "usr/share/zoneinfo/America/Kralendijk", + "usr/share/zoneinfo/America/La_Paz", + "usr/share/zoneinfo/America/Lima", + "usr/share/zoneinfo/America/Los_Angeles", + "usr/share/zoneinfo/America/Louisville", + "usr/share/zoneinfo/America/Lower_Princes", + "usr/share/zoneinfo/America/Maceio", + "usr/share/zoneinfo/America/Managua", + "usr/share/zoneinfo/America/Manaus", + "usr/share/zoneinfo/America/Marigot", + "usr/share/zoneinfo/America/Martinique", + "usr/share/zoneinfo/America/Matamoros", + "usr/share/zoneinfo/America/Mazatlan", + "usr/share/zoneinfo/America/Mendoza", + "usr/share/zoneinfo/America/Menominee", + "usr/share/zoneinfo/America/Merida", + "usr/share/zoneinfo/America/Metlakatla", + "usr/share/zoneinfo/America/Mexico_City", + "usr/share/zoneinfo/America/Miquelon", + "usr/share/zoneinfo/America/Moncton", + "usr/share/zoneinfo/America/Monterrey", + "usr/share/zoneinfo/America/Montevideo", + "usr/share/zoneinfo/America/Montreal", + "usr/share/zoneinfo/America/Montserrat", + "usr/share/zoneinfo/America/Nassau", + "usr/share/zoneinfo/America/New_York", + "usr/share/zoneinfo/America/Nipigon", + "usr/share/zoneinfo/America/Nome", + "usr/share/zoneinfo/America/Noronha", + "usr/share/zoneinfo/America/Nuuk", + "usr/share/zoneinfo/America/Ojinaga", + "usr/share/zoneinfo/America/Panama", + "usr/share/zoneinfo/America/Pangnirtung", + "usr/share/zoneinfo/America/Paramaribo", + "usr/share/zoneinfo/America/Phoenix", + "usr/share/zoneinfo/America/Port-au-Prince", + "usr/share/zoneinfo/America/Port_of_Spain", + "usr/share/zoneinfo/America/Porto_Acre", + "usr/share/zoneinfo/America/Porto_Velho", + "usr/share/zoneinfo/America/Puerto_Rico", + "usr/share/zoneinfo/America/Punta_Arenas", + "usr/share/zoneinfo/America/Rainy_River", + "usr/share/zoneinfo/America/Rankin_Inlet", + "usr/share/zoneinfo/America/Recife", + "usr/share/zoneinfo/America/Regina", + "usr/share/zoneinfo/America/Resolute", + "usr/share/zoneinfo/America/Rio_Branco", + "usr/share/zoneinfo/America/Rosario", + "usr/share/zoneinfo/America/Santa_Isabel", + "usr/share/zoneinfo/America/Santarem", + "usr/share/zoneinfo/America/Santiago", + "usr/share/zoneinfo/America/Santo_Domingo", + "usr/share/zoneinfo/America/Sao_Paulo", + "usr/share/zoneinfo/America/Scoresbysund", + "usr/share/zoneinfo/America/Shiprock", + "usr/share/zoneinfo/America/Sitka", + "usr/share/zoneinfo/America/St_Barthelemy", + "usr/share/zoneinfo/America/St_Johns", + "usr/share/zoneinfo/America/St_Kitts", + "usr/share/zoneinfo/America/St_Lucia", + "usr/share/zoneinfo/America/St_Thomas", + "usr/share/zoneinfo/America/St_Vincent", + "usr/share/zoneinfo/America/Swift_Current", + "usr/share/zoneinfo/America/Tegucigalpa", + "usr/share/zoneinfo/America/Thule", + "usr/share/zoneinfo/America/Thunder_Bay", + "usr/share/zoneinfo/America/Tijuana", + "usr/share/zoneinfo/America/Toronto", + "usr/share/zoneinfo/America/Tortola", + "usr/share/zoneinfo/America/Vancouver", + "usr/share/zoneinfo/America/Virgin", + "usr/share/zoneinfo/America/Whitehorse", + "usr/share/zoneinfo/America/Winnipeg", + "usr/share/zoneinfo/America/Yakutat", + "usr/share/zoneinfo/America/Yellowknife", + "usr/share/zoneinfo/America/Argentina/Buenos_Aires", + "usr/share/zoneinfo/America/Argentina/Catamarca", + "usr/share/zoneinfo/America/Argentina/ComodRivadavia", + "usr/share/zoneinfo/America/Argentina/Cordoba", + "usr/share/zoneinfo/America/Argentina/Jujuy", + "usr/share/zoneinfo/America/Argentina/La_Rioja", + "usr/share/zoneinfo/America/Argentina/Mendoza", + "usr/share/zoneinfo/America/Argentina/Rio_Gallegos", + "usr/share/zoneinfo/America/Argentina/Salta", + "usr/share/zoneinfo/America/Argentina/San_Juan", + "usr/share/zoneinfo/America/Argentina/San_Luis", + "usr/share/zoneinfo/America/Argentina/Tucuman", + "usr/share/zoneinfo/America/Argentina/Ushuaia", + "usr/share/zoneinfo/America/Indiana/Indianapolis", + "usr/share/zoneinfo/America/Indiana/Knox", + "usr/share/zoneinfo/America/Indiana/Marengo", + "usr/share/zoneinfo/America/Indiana/Petersburg", + "usr/share/zoneinfo/America/Indiana/Tell_City", + "usr/share/zoneinfo/America/Indiana/Vevay", + "usr/share/zoneinfo/America/Indiana/Vincennes", + "usr/share/zoneinfo/America/Indiana/Winamac", + "usr/share/zoneinfo/America/Kentucky/Louisville", + "usr/share/zoneinfo/America/Kentucky/Monticello", + "usr/share/zoneinfo/America/North_Dakota/Beulah", + "usr/share/zoneinfo/America/North_Dakota/Center", + "usr/share/zoneinfo/America/North_Dakota/New_Salem", + "usr/share/zoneinfo/Antarctica/Casey", + "usr/share/zoneinfo/Antarctica/Davis", + "usr/share/zoneinfo/Antarctica/DumontDUrville", + "usr/share/zoneinfo/Antarctica/Macquarie", + "usr/share/zoneinfo/Antarctica/Mawson", + "usr/share/zoneinfo/Antarctica/McMurdo", + "usr/share/zoneinfo/Antarctica/Palmer", + "usr/share/zoneinfo/Antarctica/Rothera", + "usr/share/zoneinfo/Antarctica/South_Pole", + "usr/share/zoneinfo/Antarctica/Syowa", + "usr/share/zoneinfo/Antarctica/Troll", + "usr/share/zoneinfo/Antarctica/Vostok", + "usr/share/zoneinfo/Arctic/Longyearbyen", + "usr/share/zoneinfo/Asia/Aden", + "usr/share/zoneinfo/Asia/Almaty", + "usr/share/zoneinfo/Asia/Amman", + "usr/share/zoneinfo/Asia/Anadyr", + "usr/share/zoneinfo/Asia/Aqtau", + "usr/share/zoneinfo/Asia/Aqtobe", + "usr/share/zoneinfo/Asia/Ashgabat", + "usr/share/zoneinfo/Asia/Ashkhabad", + "usr/share/zoneinfo/Asia/Atyrau", + "usr/share/zoneinfo/Asia/Baghdad", + "usr/share/zoneinfo/Asia/Bahrain", + "usr/share/zoneinfo/Asia/Baku", + "usr/share/zoneinfo/Asia/Bangkok", + "usr/share/zoneinfo/Asia/Barnaul", + "usr/share/zoneinfo/Asia/Beirut", + "usr/share/zoneinfo/Asia/Bishkek", + "usr/share/zoneinfo/Asia/Brunei", + "usr/share/zoneinfo/Asia/Calcutta", + "usr/share/zoneinfo/Asia/Chita", + "usr/share/zoneinfo/Asia/Choibalsan", + "usr/share/zoneinfo/Asia/Chongqing", + "usr/share/zoneinfo/Asia/Chungking", + "usr/share/zoneinfo/Asia/Colombo", + "usr/share/zoneinfo/Asia/Dacca", + "usr/share/zoneinfo/Asia/Damascus", + "usr/share/zoneinfo/Asia/Dhaka", + "usr/share/zoneinfo/Asia/Dili", + "usr/share/zoneinfo/Asia/Dubai", + "usr/share/zoneinfo/Asia/Dushanbe", + "usr/share/zoneinfo/Asia/Famagusta", + "usr/share/zoneinfo/Asia/Gaza", + "usr/share/zoneinfo/Asia/Harbin", + "usr/share/zoneinfo/Asia/Hebron", + "usr/share/zoneinfo/Asia/Ho_Chi_Minh", + "usr/share/zoneinfo/Asia/Hong_Kong", + "usr/share/zoneinfo/Asia/Hovd", + "usr/share/zoneinfo/Asia/Irkutsk", + "usr/share/zoneinfo/Asia/Istanbul", + "usr/share/zoneinfo/Asia/Jakarta", + "usr/share/zoneinfo/Asia/Jayapura", + "usr/share/zoneinfo/Asia/Jerusalem", + "usr/share/zoneinfo/Asia/Kabul", + "usr/share/zoneinfo/Asia/Kamchatka", + "usr/share/zoneinfo/Asia/Karachi", + "usr/share/zoneinfo/Asia/Kashgar", + "usr/share/zoneinfo/Asia/Kathmandu", + "usr/share/zoneinfo/Asia/Katmandu", + "usr/share/zoneinfo/Asia/Khandyga", + "usr/share/zoneinfo/Asia/Kolkata", + "usr/share/zoneinfo/Asia/Krasnoyarsk", + "usr/share/zoneinfo/Asia/Kuala_Lumpur", + "usr/share/zoneinfo/Asia/Kuching", + "usr/share/zoneinfo/Asia/Kuwait", + "usr/share/zoneinfo/Asia/Macao", + "usr/share/zoneinfo/Asia/Macau", + "usr/share/zoneinfo/Asia/Magadan", + "usr/share/zoneinfo/Asia/Makassar", + "usr/share/zoneinfo/Asia/Manila", + "usr/share/zoneinfo/Asia/Muscat", + "usr/share/zoneinfo/Asia/Nicosia", + "usr/share/zoneinfo/Asia/Novokuznetsk", + "usr/share/zoneinfo/Asia/Novosibirsk", + "usr/share/zoneinfo/Asia/Omsk", + "usr/share/zoneinfo/Asia/Oral", + "usr/share/zoneinfo/Asia/Phnom_Penh", + "usr/share/zoneinfo/Asia/Pontianak", + "usr/share/zoneinfo/Asia/Pyongyang", + "usr/share/zoneinfo/Asia/Qatar", + "usr/share/zoneinfo/Asia/Qostanay", + "usr/share/zoneinfo/Asia/Qyzylorda", + "usr/share/zoneinfo/Asia/Rangoon", + "usr/share/zoneinfo/Asia/Riyadh", + "usr/share/zoneinfo/Asia/Saigon", + "usr/share/zoneinfo/Asia/Sakhalin", + "usr/share/zoneinfo/Asia/Samarkand", + "usr/share/zoneinfo/Asia/Seoul", + "usr/share/zoneinfo/Asia/Shanghai", + "usr/share/zoneinfo/Asia/Singapore", + "usr/share/zoneinfo/Asia/Srednekolymsk", + "usr/share/zoneinfo/Asia/Taipei", + "usr/share/zoneinfo/Asia/Tashkent", + "usr/share/zoneinfo/Asia/Tbilisi", + "usr/share/zoneinfo/Asia/Tehran", + "usr/share/zoneinfo/Asia/Tel_Aviv", + "usr/share/zoneinfo/Asia/Thimbu", + "usr/share/zoneinfo/Asia/Thimphu", + "usr/share/zoneinfo/Asia/Tokyo", + "usr/share/zoneinfo/Asia/Tomsk", + "usr/share/zoneinfo/Asia/Ujung_Pandang", + "usr/share/zoneinfo/Asia/Ulaanbaatar", + "usr/share/zoneinfo/Asia/Ulan_Bator", + "usr/share/zoneinfo/Asia/Urumqi", + "usr/share/zoneinfo/Asia/Ust-Nera", + "usr/share/zoneinfo/Asia/Vientiane", + "usr/share/zoneinfo/Asia/Vladivostok", + "usr/share/zoneinfo/Asia/Yakutsk", + "usr/share/zoneinfo/Asia/Yangon", + "usr/share/zoneinfo/Asia/Yekaterinburg", + "usr/share/zoneinfo/Asia/Yerevan", + "usr/share/zoneinfo/Atlantic/Azores", + "usr/share/zoneinfo/Atlantic/Bermuda", + "usr/share/zoneinfo/Atlantic/Canary", + "usr/share/zoneinfo/Atlantic/Cape_Verde", + "usr/share/zoneinfo/Atlantic/Faeroe", + "usr/share/zoneinfo/Atlantic/Faroe", + "usr/share/zoneinfo/Atlantic/Jan_Mayen", + "usr/share/zoneinfo/Atlantic/Madeira", + "usr/share/zoneinfo/Atlantic/Reykjavik", + "usr/share/zoneinfo/Atlantic/South_Georgia", + "usr/share/zoneinfo/Atlantic/St_Helena", + "usr/share/zoneinfo/Atlantic/Stanley", + "usr/share/zoneinfo/Australia/ACT", + "usr/share/zoneinfo/Australia/Adelaide", + "usr/share/zoneinfo/Australia/Brisbane", + "usr/share/zoneinfo/Australia/Broken_Hill", + "usr/share/zoneinfo/Australia/Canberra", + "usr/share/zoneinfo/Australia/Currie", + "usr/share/zoneinfo/Australia/Darwin", + "usr/share/zoneinfo/Australia/Eucla", + "usr/share/zoneinfo/Australia/Hobart", + "usr/share/zoneinfo/Australia/LHI", + "usr/share/zoneinfo/Australia/Lindeman", + "usr/share/zoneinfo/Australia/Lord_Howe", + "usr/share/zoneinfo/Australia/Melbourne", + "usr/share/zoneinfo/Australia/NSW", + "usr/share/zoneinfo/Australia/North", + "usr/share/zoneinfo/Australia/Perth", + "usr/share/zoneinfo/Australia/Queensland", + "usr/share/zoneinfo/Australia/South", + "usr/share/zoneinfo/Australia/Sydney", + "usr/share/zoneinfo/Australia/Tasmania", + "usr/share/zoneinfo/Australia/Victoria", + "usr/share/zoneinfo/Australia/West", + "usr/share/zoneinfo/Australia/Yancowinna", + "usr/share/zoneinfo/Brazil/Acre", + "usr/share/zoneinfo/Brazil/DeNoronha", + "usr/share/zoneinfo/Brazil/East", + "usr/share/zoneinfo/Brazil/West", + "usr/share/zoneinfo/Canada/Atlantic", + "usr/share/zoneinfo/Canada/Central", + "usr/share/zoneinfo/Canada/Eastern", + "usr/share/zoneinfo/Canada/Mountain", + "usr/share/zoneinfo/Canada/Newfoundland", + "usr/share/zoneinfo/Canada/Pacific", + "usr/share/zoneinfo/Canada/Saskatchewan", + "usr/share/zoneinfo/Canada/Yukon", + "usr/share/zoneinfo/Chile/Continental", + "usr/share/zoneinfo/Chile/EasterIsland", + "usr/share/zoneinfo/Etc/GMT", + "usr/share/zoneinfo/Etc/GMT+0", + "usr/share/zoneinfo/Etc/GMT+1", + "usr/share/zoneinfo/Etc/GMT+10", + "usr/share/zoneinfo/Etc/GMT+11", + "usr/share/zoneinfo/Etc/GMT+12", + "usr/share/zoneinfo/Etc/GMT+2", + "usr/share/zoneinfo/Etc/GMT+3", + "usr/share/zoneinfo/Etc/GMT+4", + "usr/share/zoneinfo/Etc/GMT+5", + "usr/share/zoneinfo/Etc/GMT+6", + "usr/share/zoneinfo/Etc/GMT+7", + "usr/share/zoneinfo/Etc/GMT+8", + "usr/share/zoneinfo/Etc/GMT+9", + "usr/share/zoneinfo/Etc/GMT-0", + "usr/share/zoneinfo/Etc/GMT-1", + "usr/share/zoneinfo/Etc/GMT-10", + "usr/share/zoneinfo/Etc/GMT-11", + "usr/share/zoneinfo/Etc/GMT-12", + "usr/share/zoneinfo/Etc/GMT-13", + "usr/share/zoneinfo/Etc/GMT-14", + "usr/share/zoneinfo/Etc/GMT-2", + "usr/share/zoneinfo/Etc/GMT-3", + "usr/share/zoneinfo/Etc/GMT-4", + "usr/share/zoneinfo/Etc/GMT-5", + "usr/share/zoneinfo/Etc/GMT-6", + "usr/share/zoneinfo/Etc/GMT-7", + "usr/share/zoneinfo/Etc/GMT-8", + "usr/share/zoneinfo/Etc/GMT-9", + "usr/share/zoneinfo/Etc/GMT0", + "usr/share/zoneinfo/Etc/Greenwich", + "usr/share/zoneinfo/Etc/UCT", + "usr/share/zoneinfo/Etc/UTC", + "usr/share/zoneinfo/Etc/Universal", + "usr/share/zoneinfo/Etc/Zulu", + "usr/share/zoneinfo/Europe/Amsterdam", + "usr/share/zoneinfo/Europe/Andorra", + "usr/share/zoneinfo/Europe/Astrakhan", + "usr/share/zoneinfo/Europe/Athens", + "usr/share/zoneinfo/Europe/Belfast", + "usr/share/zoneinfo/Europe/Belgrade", + "usr/share/zoneinfo/Europe/Berlin", + "usr/share/zoneinfo/Europe/Bratislava", + "usr/share/zoneinfo/Europe/Brussels", + "usr/share/zoneinfo/Europe/Bucharest", + "usr/share/zoneinfo/Europe/Budapest", + "usr/share/zoneinfo/Europe/Busingen", + "usr/share/zoneinfo/Europe/Chisinau", + "usr/share/zoneinfo/Europe/Copenhagen", + "usr/share/zoneinfo/Europe/Dublin", + "usr/share/zoneinfo/Europe/Gibraltar", + "usr/share/zoneinfo/Europe/Guernsey", + "usr/share/zoneinfo/Europe/Helsinki", + "usr/share/zoneinfo/Europe/Isle_of_Man", + "usr/share/zoneinfo/Europe/Istanbul", + "usr/share/zoneinfo/Europe/Jersey", + "usr/share/zoneinfo/Europe/Kaliningrad", + "usr/share/zoneinfo/Europe/Kiev", + "usr/share/zoneinfo/Europe/Kirov", + "usr/share/zoneinfo/Europe/Kyiv", + "usr/share/zoneinfo/Europe/Lisbon", + "usr/share/zoneinfo/Europe/Ljubljana", + "usr/share/zoneinfo/Europe/London", + "usr/share/zoneinfo/Europe/Luxembourg", + "usr/share/zoneinfo/Europe/Madrid", + "usr/share/zoneinfo/Europe/Malta", + "usr/share/zoneinfo/Europe/Mariehamn", + "usr/share/zoneinfo/Europe/Minsk", + "usr/share/zoneinfo/Europe/Monaco", + "usr/share/zoneinfo/Europe/Moscow", + "usr/share/zoneinfo/Europe/Nicosia", + "usr/share/zoneinfo/Europe/Oslo", + "usr/share/zoneinfo/Europe/Paris", + "usr/share/zoneinfo/Europe/Podgorica", + "usr/share/zoneinfo/Europe/Prague", + "usr/share/zoneinfo/Europe/Riga", + "usr/share/zoneinfo/Europe/Rome", + "usr/share/zoneinfo/Europe/Samara", + "usr/share/zoneinfo/Europe/San_Marino", + "usr/share/zoneinfo/Europe/Sarajevo", + "usr/share/zoneinfo/Europe/Saratov", + "usr/share/zoneinfo/Europe/Simferopol", + "usr/share/zoneinfo/Europe/Skopje", + "usr/share/zoneinfo/Europe/Sofia", + "usr/share/zoneinfo/Europe/Stockholm", + "usr/share/zoneinfo/Europe/Tallinn", + "usr/share/zoneinfo/Europe/Tirane", + "usr/share/zoneinfo/Europe/Tiraspol", + "usr/share/zoneinfo/Europe/Ulyanovsk", + "usr/share/zoneinfo/Europe/Uzhgorod", + "usr/share/zoneinfo/Europe/Vaduz", + "usr/share/zoneinfo/Europe/Vatican", + "usr/share/zoneinfo/Europe/Vienna", + "usr/share/zoneinfo/Europe/Vilnius", + "usr/share/zoneinfo/Europe/Volgograd", + "usr/share/zoneinfo/Europe/Warsaw", + "usr/share/zoneinfo/Europe/Zagreb", + "usr/share/zoneinfo/Europe/Zaporozhye", + "usr/share/zoneinfo/Europe/Zurich", + "usr/share/zoneinfo/Indian/Antananarivo", + "usr/share/zoneinfo/Indian/Chagos", + "usr/share/zoneinfo/Indian/Christmas", + "usr/share/zoneinfo/Indian/Cocos", + "usr/share/zoneinfo/Indian/Comoro", + "usr/share/zoneinfo/Indian/Kerguelen", + "usr/share/zoneinfo/Indian/Mahe", + "usr/share/zoneinfo/Indian/Maldives", + "usr/share/zoneinfo/Indian/Mauritius", + "usr/share/zoneinfo/Indian/Mayotte", + "usr/share/zoneinfo/Indian/Reunion", + "usr/share/zoneinfo/Mexico/BajaNorte", + "usr/share/zoneinfo/Mexico/BajaSur", + "usr/share/zoneinfo/Mexico/General", + "usr/share/zoneinfo/Pacific/Apia", + "usr/share/zoneinfo/Pacific/Auckland", + "usr/share/zoneinfo/Pacific/Bougainville", + "usr/share/zoneinfo/Pacific/Chatham", + "usr/share/zoneinfo/Pacific/Chuuk", + "usr/share/zoneinfo/Pacific/Easter", + "usr/share/zoneinfo/Pacific/Efate", + "usr/share/zoneinfo/Pacific/Enderbury", + "usr/share/zoneinfo/Pacific/Fakaofo", + "usr/share/zoneinfo/Pacific/Fiji", + "usr/share/zoneinfo/Pacific/Funafuti", + "usr/share/zoneinfo/Pacific/Galapagos", + "usr/share/zoneinfo/Pacific/Gambier", + "usr/share/zoneinfo/Pacific/Guadalcanal", + "usr/share/zoneinfo/Pacific/Guam", + "usr/share/zoneinfo/Pacific/Honolulu", + "usr/share/zoneinfo/Pacific/Johnston", + "usr/share/zoneinfo/Pacific/Kanton", + "usr/share/zoneinfo/Pacific/Kiritimati", + "usr/share/zoneinfo/Pacific/Kosrae", + "usr/share/zoneinfo/Pacific/Kwajalein", + "usr/share/zoneinfo/Pacific/Majuro", + "usr/share/zoneinfo/Pacific/Marquesas", + "usr/share/zoneinfo/Pacific/Midway", + "usr/share/zoneinfo/Pacific/Nauru", + "usr/share/zoneinfo/Pacific/Niue", + "usr/share/zoneinfo/Pacific/Norfolk", + "usr/share/zoneinfo/Pacific/Noumea", + "usr/share/zoneinfo/Pacific/Pago_Pago", + "usr/share/zoneinfo/Pacific/Palau", + "usr/share/zoneinfo/Pacific/Pitcairn", + "usr/share/zoneinfo/Pacific/Pohnpei", + "usr/share/zoneinfo/Pacific/Ponape", + "usr/share/zoneinfo/Pacific/Port_Moresby", + "usr/share/zoneinfo/Pacific/Rarotonga", + "usr/share/zoneinfo/Pacific/Saipan", + "usr/share/zoneinfo/Pacific/Samoa", + "usr/share/zoneinfo/Pacific/Tahiti", + "usr/share/zoneinfo/Pacific/Tarawa", + "usr/share/zoneinfo/Pacific/Tongatapu", + "usr/share/zoneinfo/Pacific/Truk", + "usr/share/zoneinfo/Pacific/Wake", + "usr/share/zoneinfo/Pacific/Wallis", + "usr/share/zoneinfo/Pacific/Yap", + "usr/share/zoneinfo/US/Alaska", + "usr/share/zoneinfo/US/Aleutian", + "usr/share/zoneinfo/US/Arizona", + "usr/share/zoneinfo/US/Central", + "usr/share/zoneinfo/US/East-Indiana", + "usr/share/zoneinfo/US/Eastern", + "usr/share/zoneinfo/US/Hawaii", + "usr/share/zoneinfo/US/Indiana-Starke", + "usr/share/zoneinfo/US/Michigan", + "usr/share/zoneinfo/US/Mountain", + "usr/share/zoneinfo/US/Pacific", + "usr/share/zoneinfo/US/Samoa" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "xz-libs@5.8.3-r0", + "Name": "xz-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "1ae658a5f132a091" + }, + "Version": "5.8.3-r0", + "Arch": "x86_64", + "SrcName": "xz", + "SrcVersion": "5.8.3-r0", + "Licenses": [ + "GPL-2.0-or-later", + "0BSD", + "Public-Domain", + "LGPL-2.1-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:4c92c5be0c5bef404e93c880eba9037a9b147347", + "InstalledFiles": [ + "usr/lib/liblzma.so.5", + "usr/lib/liblzma.so.5.8.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "zlib@1.3.2-r0", + "Name": "zlib", + "Identifier": { + "PURL": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e37054a2982d6c16" + }, + "Version": "1.3.2-r0", + "Arch": "x86_64", + "SrcName": "zlib", + "SrcVersion": "1.3.2-r0", + "Licenses": [ + "Zlib" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:dd4c3d102acaef2a71a1495951d55fabc8680613", + "InstalledFiles": [ + "usr/lib/libz.so.1", + "usr/lib/libz.so.1.3.2" + ], + "AnalyzedBy": "apk" + } + ], + "Vulnerabilities": [ + { + "VulnerabilityID": "CVE-2026-85091", + "PkgID": "zlib@1.3.2-r0", + "PkgName": "zlib", + "PkgIdentifier": { + "PURL": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e37054a2982d6c16" + }, + "InstalledVersion": "1.3.2-r0", + "FixedVersion": "1.3.2-r1", + "Status": "fixed", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "PrimaryURL": "https://avd.aquasec.com/nvd/cve-2026-85091", + "DataSource": { + "ID": "alpine", + "Name": "Alpine Secdb", + "URL": "https://secdb.alpinelinux.org/" + }, + "Fingerprint": "sha256:1d2bed479202d1fc9f68eacc57b530b660b8b99c3382887448dd585a61bc7567", + "Title": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vul ...", + "Description": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.", + "Severity": "MEDIUM", + "CweIDs": [ + "CWE-787" + ], + "VendorSeverity": { + "ubuntu": 2 + }, + "References": [ + "https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490", + "https://github.com/madler/zlib", + "https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393", + "https://www.cve.org/CVERecord?id=CVE-2026-85091", + "https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate" + ], + "PublishedDate": "2026-09-03T13:06:20.573Z", + "LastModifiedDate": "2026-09-09T20:41:07.123Z" + } + ] + }, + { + "Target": "Python", + "Class": "lang-pkgs", + "Type": "python-pkg", + "Packages": [ + { + "Name": "PyJWT", + "Identifier": { + "PURL": "pkg:pypi/pyjwt@2.15.1", + "UID": "d3f5f9a421b8abc9" + }, + "Version": "2.15.1", + "Licenses": [ + "MIT" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "cffi", + "Identifier": { + "PURL": "pkg:pypi/cffi@2.1.1", + "UID": "21042e2f37e33c05" + }, + "Version": "2.1.1", + "Licenses": [ + "MIT-0" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "cryptography", + "Identifier": { + "PURL": "pkg:pypi/cryptography@50.0.1", + "UID": "dcb3df6383fe2a60" + }, + "Version": "50.0.1", + "Licenses": [ + "Apache-2.0 OR BSD-3-Clause" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "informed-decision", + "Identifier": { + "PURL": "pkg:pypi/informed-decision@0.2.0", + "UID": "7989f2afae8ff568" + }, + "Version": "0.2.0", + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "pycparser", + "Identifier": { + "PURL": "pkg:pypi/pycparser@3.0", + "UID": "e5a4d03f15a695ff" + }, + "Version": "3.0", + "Licenses": [ + "BSD-3-Clause" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "waitress", + "Identifier": { + "PURL": "pkg:pypi/waitress@3.0.2", + "UID": "806e218e1c1e85f" + }, + "Version": "3.0.2", + "Licenses": [ + "ZPL-2.1" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + } + ] + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json new file mode 100644 index 0000000..ddc0cea --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json @@ -0,0 +1,52 @@ +{ + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "policy": { + "origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080", + "package": "informed-decision.compact-sitting", + "version": "v13", + "package_digest": "sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873", + "pod_name": "flex-auth-informed-decision-sitting" + }, + "keycape_egress_ips": [ + "92.205.62.239" + ], + "storage_class": "local-path", + "ordinary_approval_ids": [ + "2ce76d7f-01c3-4b63-8476-8d1230679769", + "c2af4bcf-15b4-4305-aac1-acc7e4dcb099", + "dc22666a-d5d7-46bc-9490-ebe9fe09dc38" + ], + "lifecycle_policy": { + "package": "informed-decision.lifecycle", + "version": "v2", + "package_digest": "sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c", + "origin": "http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080", + "pod_name": "flex-auth-informed-decision-lifecycle" + }, + "lifecycle_delivery": true, + "intake_attributes": true, + "intake_delivery": { + "hub_origin": "http://state-hub.state-hub.svc.cluster.local:8000" + }, + "workload_api": { + "registries_configmap": "informed-decision-workload-registry", + "peers": [ + { + "namespace": "state-hub", + "app": "state-hub" + } + ], + "api_egress": [ + { + "ip": "10.43.0.1", + "port": 443 + }, + { + "ip": "92.205.62.239", + "port": 6443 + } + ], + "intake": true, + "lifecycle": true + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json new file mode 100644 index 0000000..25758da --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json @@ -0,0 +1,267 @@ +{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover", + "argocd.argoproj.io/tracking-id": "informed-decision:apps/Deployment:informed-decision/informed-decision" + }, + "name": "informed-decision", + "namespace": "informed-decision" + }, + "spec": { + "progressDeadlineSeconds": 600, + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision" + } + }, + "strategy": { + "type": "Recreate" + }, + "template": { + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "labels": { + "app.kubernetes.io/component": "review", + "app.kubernetes.io/name": "informed-decision" + } + }, + "spec": { + "automountServiceAccountToken": false, + "containers": [ + { + "env": [ + { + "name": "INFD_KEYCAPE_ISSUER", + "value": "https://kc.coulomb.social" + }, + { + "name": "INFD_CONTAINER_CONFIG", + "value": "/configuration/runtime.json" + } + ], + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "livenessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "name": "informed-decision", + "ports": [ + { + "containerPort": 8080, + "name": "http" + }, + { + "containerPort": 8081, + "name": "workload" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "resources": { + "limits": { + "cpu": "500m", + "memory": "256Mi" + }, + "requests": { + "cpu": "5m", + "memory": "64Mi" + } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true + }, + "startupProbe": { + "failureThreshold": 12, + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "volumeMounts": [ + { + "mountPath": "/data", + "name": "data" + }, + { + "mountPath": "/run/informed-decision", + "name": "runtime" + }, + { + "mountPath": "/tmp", + "name": "tmp" + }, + { + "mountPath": "/configuration", + "name": "configuration", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/policy", + "name": "caller", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/audit", + "name": "audit", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/kubernetes", + "name": "kubernetes-api", + "readOnly": true + }, + { + "mountPath": "/workload-registry", + "name": "workload-registry", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/requester", + "name": "sitting-requester", + "readOnly": true + } + ] + } + ], + "securityContext": { + "fsGroup": 10001, + "fsGroupChangePolicy": "OnRootMismatch", + "runAsGroup": 10001, + "runAsNonRoot": true, + "runAsUser": 10001, + "seccompProfile": { + "type": "RuntimeDefault" + } + }, + "serviceAccountName": "review", + "terminationGracePeriodSeconds": 45, + "volumes": [ + { + "name": "data", + "persistentVolumeClaim": { + "claimName": "informed-decision-data" + } + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "runtime" + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "tmp" + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-runtime-6c221878d051" + }, + "name": "configuration" + }, + { + "name": "caller", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "audience": "flex-auth", + "expirationSeconds": 3600, + "path": "token" + } + } + ] + } + }, + { + "name": "audit", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "token", + "path": "token" + } + ], + "secretName": "informed-decision-audit" + } + }, + { + "name": "kubernetes-api", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "expirationSeconds": 600, + "path": "token" + } + }, + { + "configMap": { + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ], + "name": "kube-root-ca.crt" + } + } + ] + } + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-workload-registry" + }, + "name": "workload-registry" + }, + { + "name": "sitting-requester", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "client-secret", + "path": "client-secret" + } + ], + "optional": false, + "secretName": "informed-decision-sitting-requester" + } + } + ] + } + } + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py new file mode 100644 index 0000000..3135a59 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py @@ -0,0 +1,68 @@ +"""Read-only exact Deployment and admission boundaries; no mutation authority.""" +import copy +import hashlib +import json + +BASE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173' +CANDIDATE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a' + + +def dependency_projection(configmap, pvc): + if (configmap.get('kind') != 'ConfigMap' or configmap.get('immutable') is not True + or configmap['metadata']['namespace'] != 'informed-decision' + or configmap['metadata']['name'] != 'informed-decision-runtime-6c221878d051' + or set(configmap.get('data', {})) != {'runtime.json'} + or configmap.get('binaryData')): + raise ValueError('unexpected immutable runtime config identity') + if (pvc.get('kind') != 'PersistentVolumeClaim' + or pvc['metadata']['namespace'] != 'informed-decision' + or pvc['metadata']['name'] != 'informed-decision-data' + or pvc.get('status', {}).get('phase') != 'Bound' + or not pvc.get('spec', {}).get('volumeName')): + raise ValueError('unexpected bound PVC custody') + config = projection(configmap) + config.pop('data') + config['canonical_data_sha256'] = hashlib.sha256(json.dumps( + configmap['data'], sort_keys=True, separators=(',', ':')).encode()).hexdigest() + return {'configmap': config, 'pvc': projection(pvc), 'pvc_phase': 'Bound'} + + +def check_dependencies(configmap, pvc, sealed): + if dependency_projection(configmap, pvc) != sealed: + raise ValueError('runtime config or PVC identity/custody changed') + + +def projection(value): + value = copy.deepcopy(value) + value.pop('status', None) + for key in ('resourceVersion', 'generation', 'creationTimestamp', 'managedFields'): + value['metadata'].pop(key, None) + for key in ('kubectl.kubernetes.io/last-applied-configuration', 'deployment.kubernetes.io/revision'): + value['metadata'].get('annotations', {}).pop(key, None) + return value + + +def check_current(current, sealed): + if projection(current) != sealed: + raise ValueError('sealed live UID or configuration changed') + + +def check_admitted(admitted, sealed): + expected = copy.deepcopy(sealed) + containers = expected['spec']['template']['spec']['containers'] + if len(containers) != 1 or containers[0]['name'] != 'informed-decision' or containers[0]['image'] != BASE: + raise ValueError('unexpected baseline container identity') + containers[0]['image'] = CANDIDATE + if projection(admitted) != expected: + raise ValueError('admission changed configuration beyond the sole image pin') + + +def transport_result(exit_code, output): + import json + try: + value = json.loads(output) + except (ValueError, TypeError): + return {'all_checks_pass': False, 'reason': 'invalid transport result'} + if exit_code != 0 or not isinstance(value, dict) or value.get('all_checks_pass') is not True: + return {'all_checks_pass': False, 'reason': 'read-only preflight refused'} + return value diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py new file mode 100644 index 0000000..0736145 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py @@ -0,0 +1,21 @@ +import copy,json,time +from datetime import datetime,timezone +from informed_decision.policy import PolicyClient,CONTRACT,submitted_digest +pin='sha256:'+'b'*64 +req={'id':'image-purpose-fixture','tenant':'tenant:platform','subject':{'id':'synthetic','type':'service','tenant':'tenant:platform'},'resource':{'id':'memo:fixture','type':'memo','system':'informed-decision','tenant':'tenant:platform'},'action':'register','context':{}} +class Transport: + def request(self,*args,**kwargs): + now=time.time(); stamp=lambda t:datetime.fromtimestamp(t,timezone.utc).isoformat() + b={**copy.deepcopy({k:req[k] for k in ('tenant','subject','action','resource','context')}),'request_digest':'sha256:'+'e'*64,'submitted_request_digest':submitted_digest(req)} + if self.purpose!='ABSENT':b['purpose']=self.purpose + d={'id':'synthetic-decision','contract_version':CONTRACT,'request_id':req['id'],'effect':'allow','matched_policy_version':'v1','subject':req['subject'],'resource':req['resource'],'binding':b,'lifetime':{'kind':'ttl','not_before':stamp(now-1),'expires_at':stamp(now+60)},'provenance':{'policy_package':'fixture','policy_version':'v1','policy_package_digest':pin,'registry_snapshot_digest':'sha256:'+'c'*64,'evaluator':'flex-auth/fixture','decision_time':stamp(now)}} + return 200,d +checks=[] +for purpose in ('ABSENT','','readback','enforcement','unknown',None,False,0,[],{}): + t=Transport();t.purpose=purpose + c=PolicyClient('https://fixture.invalid',lambda:'synthetic-only',package='fixture',version='v1',package_digest=pin,transport=t) + o=c.check(req) + if purpose in ('ABSENT',''):assert o.outcome=='allow';o.require_current(time.time()) + else:assert o.outcome=='invalid_decision' and o.decision_json is None + checks.append(str(purpose)) +print(json.dumps({'installed_image_purpose_variants':len(checks),'binding_forms_allowed':2,'advisory_or_malformed_refused':8,'synthetic_only':True,'native_provider':False})) diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md new file mode 100644 index 0000000..ccb5cbe --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md @@ -0,0 +1,33 @@ +# Informed Decision purpose overlay release + +## Requested decision + +Approve the exact purpose-only image rollout and protected real-data backup/restore protocol for the existing Informed Decision service on railiance01. This request is separate from the already approved config-only repair. Only the existing Deployment image changes through the owner's manual Argo workflow, with prune disabled. Runtime ConfigMap `informed-decision-runtime-6c221878d051`, schema5, PVC, credentials, audience, policies, registries, access, replica1 and Recreate strategy remain fixed. Execute by 2026-10-12T23:59:59Z, after refreshed sealed-source/UID/configuration checks and backup/restore gates. Expiry stops authorization for an unstarted release; it does not install a controller or automatically roll back an already released image. + +## Artifact and known finding + +Actual owner CI task11484/run3 published immutable image `sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a` from source `3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168`. Anonymous registry verification preserves all eight base compressed blobs/rootfs layers and adds only policy.py with exact source hash and mode0644. Legacy-builder media-type/default config serialization differences are recorded; the runtime semantics remain unchanged. Pulled published image executes as UID10001/GID10001 and passes ten installed checks: two supported binding forms, eight advisory/malformed refusals. Tests use synthetic transport and do not claim new native PDP authorization proof. The two failed CI attempts remain in the same trial history. + +Actual unfiltered pinned scanner/DB evidence covers44packages: zero HIGH/CRITICAL, **one fixable MEDIUM**, CVE-2026-85091, zlib1.3.2-r0 fixed in1.3.2-r1. Actual current-base scan has the identical finding. Approving this packet explicitly permits this inherited finding during this narrow purpose release; it is not a RiskNexus estate risk grade or zero-CVE claim. Owner record INFD-RISK-20261011-ZLIB-85091 and live task INFD-WP-0009-T05 require separate base refresh and native approval, reviewed by2026-10-18. That review date is manual follow-through, with no auto-controller claim. Scanner notes Alpine3.24 absent EOL list; OS vulnerability detection ran against38OSpackages. Unknown vulnerabilities remain outside snapshot knowledge. + +## Native baseline and gates + +Original read-only capture01:25:38Z: existing Deployment UIDa588e10a, Ready1, image7f5c, unchanged runtime6c; native admission preserves the full configuration plus exactly the proposed image. Clientdiff returns1. Requests3460/4000mCPU86%, memory9472Mi59%; refresh before release. Existing Argo Application UID499868f2 is manual, target7db8485, Healthy with pre-existing OutOfSync status. Do not treat a scoped Deployment release as full-app reconciliation. Preserve its tracking-id; no unrelated resource sync/prune/adoption. + +The refined read-only helper binds original source/helper/render/baseline hashes and actual immutable ConfigMap/PVC UIDs, runtime-data checksum and bound volume identity, explicitly refuses optimized interpreters, checks exact fresh live UID/configuration and admission, and writes a separate execution receipt outside this sealed packet. Failed initial raw Kustomize metadata check is retained: direct kubectl apply would drop Argo tracking-id. The reviewed selected Deployment explicitly retains that existing ID, matching Argo ownership. Any unrelated drift, different UID, altered admission, unavailable protected backup capacity, uncertain backup, restore mismatch or unhealthy baseline stops the release. + +## Protected backup and release + +Before **any** native source or offline-restored Store/admin open, use the attached stdlib SQLite mode=ro/query_only checker to require schema5, integrity=ok and count-only baseline. The admin automatically migrates oldschemas, so a post-open report alone cannot prove no migration. Refuse other schemas before admin. Then use the existing owner admin's SQLite backup API, not a raw copy of the live database/WAL. Protect directories0700/files0600, owned by10001. Retain independently protected off-cluster snapshot custody and only count/hash receipts. No database contents, caller tokens, requester Secret or runtime credential files enter Git, State Hub, logs or this packet. Native backup and offline real-data restore have not yet occurred. Use an isolated private disposable copy, networknone and no runtime config/token mounts, run the pre-open checker and exact offline `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite` after it passes, comparing frozen snapshot counts without service startup, then clean only the disposable restored copy. Retain the original snapshot. The attached protocol binds case-specific paths and fail-closed capacity/custody checks. + +Refresh a consistent online snapshot immediately before image-only cutover. This protocol does not assert traffic/dispatcher quiescence. Current and candidate share schema5 and unchanged store code; rollback retains the latest live database and all new/uncertain evidence. Stop the old writer before the new one with existing Recreate and single-writer lock. Do not restore an older snapshot over later writes, discard unresolved external effects, scale other workloads, change policies/identity/custody, or create human dispositions to make checks green. + +Pin the existing Application to the exact owner commit containing the approved candidate source hashes, and manually sync only Deployment/informed-decision with prune=false. Verify actualimage/module/mode/UID, health/readiness and installed purpose refusals on the real placement; explicitly distinguish synthetic-transport checks from actual provider evidence. Existing native binding/lifecycle behavior must remain available. If unhealthy or verification fails, return Application source to7db8485 and scoped-sync prior same-schema image7f5c, preserving current evidence database; retain failed outcomes. Any data recovery beyond this same-schema image rollback is a separate founder decision. + +## Alternatives and estimates + +Proceed with this narrow release plus explicit inherited-medium follow-through, or defer and prepare a separate base/dependency refresh before any release. No additional recurring hosting is proposed: estimated incremental infrastructure EUR0, with private storage and attended engineering/recovery time unpriced. Risks include a brief Recreate interruption, private backup custody errors, caller refusal when advisory responses were improperly treated as binding, and the disclosed inherited finding. This decision does not promote agent autonomy or grant unrelated work. + +## Independent review refinements + +The initial36path/20document packet at manifest7c6738b3 and submissionac41c8ae is preserved in source preparation evidence, with the failed/conditional review. Independent Platform review identified admin auto-migration, optimization bypass, and actual same-name ConfigMap/PVC replacement gaps. The amended packet adds pre-open stdlib read-only schema/integrity/count gates, explicit local/remote optimization refusal, and independently sealed actual native config/PVC custody checks. These are refinements in the same proposal/trial, with no original or amended founder approval claimed. diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json new file mode 100644 index 0000000..1fc30be --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json @@ -0,0 +1,50 @@ +{ + "node_allocatable_cpu_m": 4000, + "node_requested_cpu_m": 3460, + "captured_at": "2026-10-11T01:39:14.234277+00:00", + "native_workload_changed": false, + "native_backup_restore_executed": false, + "argo": { + "uid": "499868f2-eabc-4df4-ae31-b89ce58d750d", + "repoURL": "https://forgejo.coulomb.social/coulomb/informed-decision.git", + "targetRevision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "path": "deploy/lifecycle", + "destination": { + "namespace": "informed-decision", + "server": "https://kubernetes.default.svc" + }, + "automated": false, + "sync": { + "comparedTo": { + "destination": { + "namespace": "informed-decision", + "server": "https://kubernetes.default.svc" + }, + "source": { + "path": "deploy/lifecycle", + "repoURL": "https://forgejo.coulomb.social/coulomb/informed-decision.git", + "targetRevision": "7db8485ffecdebfabd77a9daec085553c74bf0bf" + } + }, + "revision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "status": "OutOfSync" + }, + "health": { + "lastTransitionTime": "2026-10-10T23:14:52Z", + "status": "Healthy" + } + }, + "native_dependencies_checked": true, + "configmap_uid": "90113d2d-54d9-4e82-b1d3-90b49ebed2b5", + "pvc_uid": "d80b25b1-141a-441b-b205-98fa2fd98b7c", + "live_ready_replicas": 1, + "admitted_uid": "a588e10a-90d2-4883-975e-6dd8b8feca92", + "server_dry_run_passed": true, + "admitted_spec_exactly_live_plus_image": true, + "client_diff_exit": 1, + "client_diff_sha256": "840769c7d2a9c1655c40a3259f833d1fc8f69950ceb3bedb707a955fed711566", + "node_allocated_resources": "(Total limits may be over 100 percent, i.e., overcommitted.)\n Resource Requests Limits\n -------- -------- ------\n cpu 3460m (86%) 36200m (905%)\n memory 9472Mi (59%) 32898Mi (205%)\n ephemeral-storage 0 (0%) 0 (0%)\n hugepages-1Gi 0 (0%) 0 (0%)\n hugepages-2Mi 0 (0%) 0 (0%)", + "all_checks_pass": true, + "sealed_preflight_inputs_sha256": "756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06", + "fresh_execution_receipt": true +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json new file mode 100644 index 0000000..bc38933 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json @@ -0,0 +1,222 @@ +{ + "architecture": "amd64", + "config": { + "Hostname": "", + "Domainname": "", + "User": "10001:10001", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + }, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "Cmd": null, + "Image": "sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883", + "Volumes": null, + "WorkingDir": "/app", + "Entrypoint": [ + "informed-decision-container" + ], + "OnBuild": null, + "Labels": { + "org.opencontainers.image.base.digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "org.opencontainers.image.revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "social.coulomb.release.scope": "INFD-WP-0009-T04/purpose-overlay-v1", + "social.coulomb.source.policy.sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62" + } + }, + "container_config": { + "Hostname": "", + "Domainname": "", + "User": "10001:10001", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + }, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "Cmd": [ + "/bin/sh", + "-c", + "#(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py " + ], + "Image": "sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883", + "Volumes": null, + "WorkingDir": "/app", + "Entrypoint": [ + "informed-decision-container" + ], + "OnBuild": null, + "Labels": { + "org.opencontainers.image.base.digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "org.opencontainers.image.revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "social.coulomb.release.scope": "INFD-WP-0009-T04/purpose-overlay-v1", + "social.coulomb.source.policy.sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62" + } + }, + "created": "2026-10-11T01:21:04.787527697Z", + "docker_version": "27.5.1", + "history": [ + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "CMD [\"/bin/sh\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV LANG=C.UTF-8", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "RUN /bin/sh -c set -eux; \tapk add --no-cache \t\tca-certificates \t\ttzdata \t; # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_VERSION=3.12.14", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:10:30.672225972Z", + "created_by": "RUN /bin/sh -c set -eux; \t\tapk add --no-cache --virtual .build-deps \t\tbluez-dev \t\tbzip2-dev \t\tdpkg-dev dpkg \t\tfindutils \t\tg++ \t\tgcc \t\tgdbm-dev \t\tgnupg \t\tlibc-dev \t\tlibffi-dev \t\tlibnsl-dev \t\tlibtirpc-dev \t\tlinux-headers \t\tmake \t\tncurses-dev \t\topenssl-dev \t\tpax-utils \t\treadline-dev \t\tsqlite-dev \t\ttar \t\ttcl-dev \t\ttk \t\ttk-dev \t\tutil-linux-dev \t\txz \t\txz-dev \t\tzlib-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \techo \"$PYTHON_SHA256 *python.tar.xz\" | sha256sum -c -; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t$(test \"${gnuArch%%-*}\" != 'riscv64' && echo '--with-lto') \t\t--with-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"-DTHREAD_STACK_SIZE=0x100000\"; \tLDFLAGS=\"${LDFLAGS:-} -Wl,--strip-all\"; \tarch=\"$(apk --print-arch)\"; \tcase \"$arch\" in \t\tx86_64|aarch64) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\"; \t\t\t;; \t\tx86) \t\t\t;; \t\t*) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\"; \t\t\t;; \tesac; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\$\\$ORIGIN/../lib'\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \t\t| tr ',' '\\n' \t\t| sort -u \t\t| awk 'system(\"[ -e /usr/local/lib/\" $1 \" ]\") == 0 { next } { print \"so:\" $1 }' \t\t| xargs -rt apk add --no-network --virtual .python-rundeps \t; \tapk del --no-network .build-deps; \t\texport PYTHONDONTWRITEBYTECODE=1; \tpython3 --version; \tpip3 --version # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "RUN /bin/sh -c set -eux; \tfor src in idle3 pip3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "CMD [\"python3\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "RUN /bin/sh -c apk add --no-cache 'libuuid>=2.42.3-r1' && addgroup -S -g 10001 informed && adduser -S -u 10001 -G informed -H informed # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:55.351944978+02:00", + "created_by": "COPY /opt/venv /opt/venv # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.462092072+02:00", + "created_by": "RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "WORKDIR /app", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "USER 10001:10001", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "EXPOSE [8080/tcp 8081/tcp]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "ENTRYPOINT [\"informed-decision-container\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-11T01:15:11.991443676Z", + "created_by": "/bin/sh -c #(nop) ARG SOURCE_REVISION", + "empty_layer": true + }, + { + "created": "2026-10-11T01:21:04.716126392Z", + "created_by": "/bin/sh -c #(nop) LABEL org.opencontainers.image.revision=3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168 org.opencontainers.image.base.digest=sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 social.coulomb.source.policy.sha256=9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62 social.coulomb.release.scope=INFD-WP-0009-T04/purpose-overlay-v1", + "empty_layer": true + }, + { + "created": "2026-10-11T01:21:04.787527697Z", + "created_by": "/bin/sh -c #(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py " + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02", + "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + ] + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json new file mode 100644 index 0000000..71f69b0 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json @@ -0,0 +1,56 @@ +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 10428, + "digest": "sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 3846391, + "digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 408093, + "digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 16346740, + "digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 248, + "digest": "sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 49243, + "digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 10216362, + "digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 459, + "digest": "sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 93, + "digest": "sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 3586, + "digest": "sha256:cfee29c2f8119d2a39714ecbe5095a2dc1c986054f2e1fe0a6565163242417e3" + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json new file mode 100644 index 0000000..f0fa85b --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json @@ -0,0 +1,21 @@ +{ + "id": "INFD-RISK-20261011-ZLIB-85091", + "kind": "owner-vulnerability-follow-through", + "owner": "informed-decision", + "task": "INFD-WP-0009-T05", + "status": "open", + "created": "2026-10-11", + "review_due": "2026-10-18", + "finding": "CVE-2026-85091", + "scanner_severity": "MEDIUM", + "estate_risk_grade": null, + "affected_package": "zlib", + "installed": "1.3.2-r0", + "fixed": "1.3.2-r1", + "actual_current_base_and_candidate_findings_identical": true, + "source_evidence": "security-summary.json, trivy-full.json, base-trivy-full.json", + "human_temporary_disposition": "pending", + "follow_through": "Prepare a separately source-bound official-base/dependency refresh through normal owner CI, verify full scan and runtime compatibility, obtain distinct native release approval before updating this workload", + "manual_review_expiry": "Due date requires owner review/escalation if unresolved; no automatic rollback/controller is installed", + "close_condition": "Verified installed native fixed package and full unfiltered rescan; preserve original detection and any human disposition" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/original-packet-manifest.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/original-packet-manifest.json new file mode 100644 index 0000000..a1b8362 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/original-packet-manifest.json @@ -0,0 +1,254 @@ +[ + { + "repo": "informed-decision", + "path": "deploy/lifecycle/admission.candidate.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/deploy/lifecycle/admission.candidate.json", + "original_sha256": "22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50", + "staged_sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "repo": "informed-decision", + "path": "deploy/lifecycle/service.candidate.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/deploy/lifecycle/service.candidate.json", + "original_sha256": "7a676532836affd6d75c7f1c41a5f937d8c8c809f63e3264ccce612730d5ba7b", + "staged_sha256": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/README.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/README.md", + "original_sha256": null, + "staged_sha256": "f88a79a93fff34a1b438e2dc0344cad88d6c7960dde04bc7f3c04ac1fbb992c7" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "original_sha256": null, + "staged_sha256": "b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "original_sha256": null, + "staged_sha256": "d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "original_sha256": null, + "staged_sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "original_sha256": null, + "staged_sha256": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "original_sha256": null, + "staged_sha256": "830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "original_sha256": null, + "staged_sha256": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "original_sha256": null, + "staged_sha256": "7f6d8987f65dff479eeead67b7ca940ef44c22c1cdbdd6ca33fd732b824c8f02" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "original_sha256": null, + "staged_sha256": "aa1d494e42491f0619f731a836c597df9178409887d734c166a8df81f8807a27" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "original_sha256": null, + "staged_sha256": "4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "original_sha256": null, + "staged_sha256": "978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "original_sha256": null, + "staged_sha256": "e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/intake.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/intake.json", + "original_sha256": null, + "staged_sha256": "9a39631362f20168da409cef74f7690f3aa1b8f841fc96ecd8770f73a1f954ac" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "original_sha256": null, + "staged_sha256": "b6210dcd34e5485c94e35f4bdd3329fb72c1d40fa9357caf40ac42b4f8afa5c2" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/memo.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/memo.json", + "original_sha256": null, + "staged_sha256": "06530425dd9634182f70a65dd2da56cbad3da967bc842b3c7b01c30542222128" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "original_sha256": null, + "staged_sha256": "aa9758d4de587d14c6ce0fdaccd84002c5c5099425b9169ca7c972a86e9d3dec" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "original_sha256": null, + "staged_sha256": "052fc57d2cda43b2e474f28a5ff70753f5fa673c77a9645a201d0e0e961792e4" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "original_sha256": null, + "staged_sha256": "aaa77b406b201eb40a62f60182057e90b1baea06e03f85d7e06916b57f5f2de8" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "original_sha256": null, + "staged_sha256": "eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "original_sha256": null, + "staged_sha256": "0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "original_sha256": null, + "staged_sha256": "c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "original_sha256": null, + "staged_sha256": "08c5573eaad05efd24b6df6737d33e7189543eb621f21704e38bab4326094914" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "original_sha256": null, + "staged_sha256": "e304dd29571bf7d7b9f1db2ade0163dd39cfec012a5ce6986139f019f37e65a2" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "original_sha256": null, + "staged_sha256": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "original_sha256": null, + "staged_sha256": "22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "original_sha256": null, + "staged_sha256": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "original_sha256": null, + "staged_sha256": "a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "original_sha256": null, + "staged_sha256": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "original_sha256": null, + "staged_sha256": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "original_sha256": null, + "staged_sha256": "b7cd28b2ada33004c9264cb54c9749fa501f60166638f926e50e264ddebe037d" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "original_sha256": null, + "staged_sha256": "f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/validation.json", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/validation.json", + "original_sha256": null, + "staged_sha256": "3b57f525bbbb1db9dc46bcc6b0057a8dd9f45c461fad0a8dea5391ca78038c36" + }, + { + "repo": "informed-decision", + "path": "docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "original_sha256": null, + "staged_sha256": "413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4" + }, + { + "repo": "informed-decision", + "path": "workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md", + "staged_path": "/tmp/infd-purpose-release-stage/informed-decision/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md", + "original_sha256": "1544ece11a7a528a34b635b267b72e1c3fd4de99327200aded74864c64e64e77", + "staged_sha256": "18205c0c7aa8f3460d78e3b7ad9dddd9e361395f9a28d93a7a384c29c9602d36" + } +] diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json new file mode 100644 index 0000000..ddc0cea --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json @@ -0,0 +1,52 @@ +{ + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "policy": { + "origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080", + "package": "informed-decision.compact-sitting", + "version": "v13", + "package_digest": "sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873", + "pod_name": "flex-auth-informed-decision-sitting" + }, + "keycape_egress_ips": [ + "92.205.62.239" + ], + "storage_class": "local-path", + "ordinary_approval_ids": [ + "2ce76d7f-01c3-4b63-8476-8d1230679769", + "c2af4bcf-15b4-4305-aac1-acc7e4dcb099", + "dc22666a-d5d7-46bc-9490-ebe9fe09dc38" + ], + "lifecycle_policy": { + "package": "informed-decision.lifecycle", + "version": "v2", + "package_digest": "sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c", + "origin": "http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080", + "pod_name": "flex-auth-informed-decision-lifecycle" + }, + "lifecycle_delivery": true, + "intake_attributes": true, + "intake_delivery": { + "hub_origin": "http://state-hub.state-hub.svc.cluster.local:8000" + }, + "workload_api": { + "registries_configmap": "informed-decision-workload-registry", + "peers": [ + { + "namespace": "state-hub", + "app": "state-hub" + } + ], + "api_egress": [ + { + "ip": "10.43.0.1", + "port": 443 + }, + { + "ip": "92.205.62.239", + "port": 6443 + } + ], + "intake": true, + "lifecycle": true + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json new file mode 100644 index 0000000..c6bd69e --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json @@ -0,0 +1,800 @@ +{ + "apiVersion": "v1", + "kind": "List", + "items": [ + { + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "name": "review", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "automountServiceAccountToken": false + }, + { + "apiVersion": "v1", + "kind": "PersistentVolumeClaim", + "metadata": { + "name": "informed-decision-data", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "storageClassName": "local-path", + "resources": { + "requests": { + "storage": "1Gi" + } + } + } + }, + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "informed-decision-runtime-6c221878d051", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "immutable": true, + "data": { + "runtime.json": "{\"approval_origin\":\"http://approval-engine.approval-engine.svc.cluster.local:8080\",\"audit\":{\"origin\":\"http://audit-core.audit-core.svc.cluster.local:8080\",\"sender_token_file\":\"/var/run/secrets/informed-decision/audit/token\"},\"evidence_db\":\"/data/private/review.sqlite\",\"intake_attributes\":true,\"intake_delivery\":{\"hub_origin\":\"http://state-hub.state-hub.svc.cluster.local:8000\"},\"lifecycle_delivery\":true,\"lifecycle_policy\":{\"caller_token_file\":\"/var/run/secrets/informed-decision/policy/token\",\"origin\":\"http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080\",\"package\":\"informed-decision.lifecycle\",\"package_digest\":\"sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c\",\"version\":\"v2\"},\"ordinary_approval_ids\":[\"2ce76d7f-01c3-4b63-8476-8d1230679769\",\"c2af4bcf-15b4-4305-aac1-acc7e4dcb099\",\"dc22666a-d5d7-46bc-9490-ebe9fe09dc38\"],\"policy\":{\"caller_token_file\":\"/var/run/secrets/informed-decision/policy/token\",\"origin\":\"http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080\",\"package\":\"informed-decision.compact-sitting\",\"package_digest\":\"sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873\",\"version\":\"v13\"},\"schema\":\"informed-decision.review-runtime.v1\",\"workload_api\":{\"intake\":{\"groups_file\":\"/workload-registry/review-groups.json\",\"secret_file\":\"/var/run/secrets/informed-decision/requester/client-secret\",\"submitters_file\":\"/workload-registry/intake-submitters.json\"},\"lifecycle_callers_file\":\"/workload-registry/lifecycle-callers.json\",\"token_review\":{\"ca_file\":\"/var/run/secrets/informed-decision/kubernetes/ca.crt\",\"origin\":\"https://kubernetes.default.svc:443\",\"token_file\":\"/var/run/secrets/informed-decision/kubernetes/token\"}}}" + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "informed-decision", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "replicas": 1, + "strategy": { + "type": "Recreate" + }, + "progressDeadlineSeconds": 600, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + }, + "spec": { + "automountServiceAccountToken": false, + "serviceAccountName": "review", + "terminationGracePeriodSeconds": 45, + "securityContext": { + "runAsNonRoot": true, + "runAsUser": 10001, + "runAsGroup": 10001, + "fsGroup": 10001, + "fsGroupChangePolicy": "OnRootMismatch", + "seccompProfile": { + "type": "RuntimeDefault" + } + }, + "containers": [ + { + "name": "informed-decision", + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "capabilities": { + "drop": [ + "ALL" + ] + } + }, + "env": [ + { + "name": "INFD_KEYCAPE_ISSUER", + "value": "https://kc.coulomb.social" + }, + { + "name": "INFD_CONTAINER_CONFIG", + "value": "/configuration/runtime.json" + } + ], + "ports": [ + { + "name": "http", + "containerPort": 8080 + }, + { + "name": "workload", + "containerPort": 8081 + } + ], + "startupProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 12 + }, + "readinessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "livenessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "resources": { + "requests": { + "cpu": "5m", + "memory": "64Mi" + }, + "limits": { + "cpu": "500m", + "memory": "256Mi" + } + }, + "volumeMounts": [ + { + "name": "data", + "mountPath": "/data" + }, + { + "name": "runtime", + "mountPath": "/run/informed-decision" + }, + { + "name": "tmp", + "mountPath": "/tmp" + }, + { + "name": "configuration", + "mountPath": "/configuration", + "readOnly": true + }, + { + "name": "caller", + "mountPath": "/var/run/secrets/informed-decision/policy", + "readOnly": true + }, + { + "name": "audit", + "mountPath": "/var/run/secrets/informed-decision/audit", + "readOnly": true + }, + { + "name": "kubernetes-api", + "mountPath": "/var/run/secrets/informed-decision/kubernetes", + "readOnly": true + }, + { + "name": "workload-registry", + "mountPath": "/workload-registry", + "readOnly": true + }, + { + "name": "sitting-requester", + "mountPath": "/var/run/secrets/informed-decision/requester", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "data", + "persistentVolumeClaim": { + "claimName": "informed-decision-data" + } + }, + { + "name": "runtime", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + } + }, + { + "name": "tmp", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + } + }, + { + "name": "configuration", + "configMap": { + "name": "informed-decision-runtime-6c221878d051", + "defaultMode": 292 + } + }, + { + "name": "caller", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "path": "token", + "audience": "flex-auth", + "expirationSeconds": 3600 + } + } + ] + } + }, + { + "name": "audit", + "secret": { + "secretName": "informed-decision-audit", + "defaultMode": 288, + "items": [ + { + "key": "token", + "path": "token" + } + ] + } + }, + { + "name": "kubernetes-api", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "path": "token", + "expirationSeconds": 600 + } + }, + { + "configMap": { + "name": "kube-root-ca.crt", + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ] + } + } + ] + } + }, + { + "name": "workload-registry", + "configMap": { + "name": "informed-decision-workload-registry", + "defaultMode": 292 + } + }, + { + "name": "sitting-requester", + "secret": { + "secretName": "informed-decision-sitting-requester", + "defaultMode": 288, + "optional": false, + "items": [ + { + "key": "client-secret", + "path": "client-secret" + } + ] + } + } + ] + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "informed-decision", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + }, + "ports": [ + { + "name": "http", + "port": 80, + "targetPort": "http", + "protocol": "TCP" + } + ] + } + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "informed-decision-review", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + }, + "policyTypes": [ + "Ingress", + "Egress" + ], + "ingress": [ + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "kube-system" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "traefik" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + }, + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "state-hub" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "state-hub" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8081 + } + ] + } + ], + "egress": [ + { + "to": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "kube-system" + } + }, + "podSelector": { + "matchLabels": { + "k8s-app": "kube-dns" + } + } + } + ], + "ports": [ + { + "protocol": "UDP", + "port": 53 + }, + { + "protocol": "TCP", + "port": 53 + } + ] + }, + { + "to": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "approval-engine" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "approval-engine" + } + } + }, + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "audit-core" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "audit-core" + } + } + }, + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "flex-auth" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "flex-auth-informed-decision-sitting" + } + } + }, + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "flex-auth" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "flex-auth-informed-decision-lifecycle" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + }, + { + "to": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "kube-system" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "traefik" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8443 + } + ] + }, + { + "to": [ + { + "ipBlock": { + "cidr": "92.205.62.239/32" + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 443 + } + ] + }, + { + "to": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "state-hub" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "state-hub" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8000 + } + ] + }, + { + "to": [ + { + "ipBlock": { + "cidr": "10.43.0.1/32" + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 443 + } + ] + }, + { + "to": [ + { + "ipBlock": { + "cidr": "92.205.62.239/32" + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 6443 + } + ] + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "informed-decision-workload", + "namespace": "informed-decision", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + }, + "ports": [ + { + "name": "workload", + "port": 8081, + "targetPort": "workload", + "protocol": "TCP" + } + ] + } + }, + { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "ClusterRole", + "metadata": { + "name": "informed-decision-tokenreview", + "annotations": { + "informed-decision.coulomb.social/admission": "proposal; INFD-WP-0007/INFD-WP-0005 owner review required" + } + }, + "rules": [ + { + "apiGroups": [ + "authentication.k8s.io" + ], + "resources": [ + "tokenreviews" + ], + "verbs": [ + "create" + ] + } + ] + }, + { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "ClusterRoleBinding", + "metadata": { + "name": "informed-decision-tokenreview", + "annotations": { + "informed-decision.coulomb.social/admission": "proposal; INFD-WP-0007/INFD-WP-0005 owner review required" + } + }, + "roleRef": { + "apiGroup": "rbac.authorization.k8s.io", + "kind": "ClusterRole", + "name": "informed-decision-tokenreview" + }, + "subjects": [ + { + "kind": "ServiceAccount", + "name": "review", + "namespace": "informed-decision" + } + ] + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "informed-decision-review-ingress", + "namespace": "approval-engine", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08", + "informed-decision.coulomb.social/owner-review": "APPROVAL-WP-0002-T01" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "approval-engine" + } + }, + "policyTypes": [ + "Ingress" + ], + "ingress": [ + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "informed-decision" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + } + ] + } + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "informed-decision-review-ingress", + "namespace": "flex-auth", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08", + "informed-decision.coulomb.social/owner-review": "INFD-WP-0001-T08 policy-owner return" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "flex-auth-informed-decision-sitting" + } + }, + "policyTypes": [ + "Ingress" + ], + "ingress": [ + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "informed-decision" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + } + ] + } + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "informed-decision-lifecycle-ingress", + "namespace": "flex-auth", + "annotations": { + "informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08", + "informed-decision.coulomb.social/owner-review": "INFD-WP-0007 lifecycle policy-owner return" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "flex-auth-informed-decision-lifecycle" + } + }, + "policyTypes": [ + "Ingress" + ], + "ingress": [ + { + "from": [ + { + "namespaceSelector": { + "matchLabels": { + "kubernetes.io/metadata.name": "informed-decision" + } + }, + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision", + "app.kubernetes.io/component": "review" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 8080 + } + ] + } + ] + } + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md new file mode 100644 index 0000000..d1cb671 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md @@ -0,0 +1,7 @@ +# Exact published purpose overlay and unapproved native release packet + +Actual CI task11484/run3 at3e4bcb26 published immutable763c. The registry proof, installedUID/mode/purpose checks, full scan/SBOM and actualbase comparison are retained. The full scan contains1fixable inheritedMEDIUM,0HIGH/CRITICAL; see owner follow-through/T05. Legacy serialization differences are disclosed. + +This stage prepares owner admission/service source candidates, protected native backup/restore protocol and20document offline-valid informed-decision memo. Native workload remains7f5/config6c. No native backup/export/restore, image change or human approval occurred. Initial failed CI/native preflight evidence remains in owner history. The immutable original native capture stays sealed; future preflight requires unique output outside the sealed packet and owner source tree. + +The memo's actual rawscan/SBOM attachments plus hash-linked rawbase scan total249719packetbytes (under256KiB); source/image receipt binds raw evidence filenames and hashes. Full owner source manifest includes all raw evidence and helper/tests. Source preparation or local checks do not approve native execution. diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json new file mode 100644 index 0000000..e8630f4 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json @@ -0,0 +1,146 @@ +{ + "architecture": "amd64", + "config": { + "User": "10001:10001", + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + }, + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "Entrypoint": [ + "informed-decision-container" + ], + "WorkingDir": "/app" + }, + "created": "2026-10-05T01:03:56.675216821+02:00", + "history": [ + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "CMD [\"/bin/sh\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV LANG=C.UTF-8", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "RUN /bin/sh -c set -eux; \tapk add --no-cache \t\tca-certificates \t\ttzdata \t; # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_VERSION=3.12.14", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:10:30.672225972Z", + "created_by": "RUN /bin/sh -c set -eux; \t\tapk add --no-cache --virtual .build-deps \t\tbluez-dev \t\tbzip2-dev \t\tdpkg-dev dpkg \t\tfindutils \t\tg++ \t\tgcc \t\tgdbm-dev \t\tgnupg \t\tlibc-dev \t\tlibffi-dev \t\tlibnsl-dev \t\tlibtirpc-dev \t\tlinux-headers \t\tmake \t\tncurses-dev \t\topenssl-dev \t\tpax-utils \t\treadline-dev \t\tsqlite-dev \t\ttar \t\ttcl-dev \t\ttk \t\ttk-dev \t\tutil-linux-dev \t\txz \t\txz-dev \t\tzlib-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \techo \"$PYTHON_SHA256 *python.tar.xz\" | sha256sum -c -; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t$(test \"${gnuArch%%-*}\" != 'riscv64' && echo '--with-lto') \t\t--with-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"-DTHREAD_STACK_SIZE=0x100000\"; \tLDFLAGS=\"${LDFLAGS:-} -Wl,--strip-all\"; \tarch=\"$(apk --print-arch)\"; \tcase \"$arch\" in \t\tx86_64|aarch64) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\"; \t\t\t;; \t\tx86) \t\t\t;; \t\t*) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\"; \t\t\t;; \tesac; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\$\\$ORIGIN/../lib'\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \t\t| tr ',' '\\n' \t\t| sort -u \t\t| awk 'system(\"[ -e /usr/local/lib/\" $1 \" ]\") == 0 { next } { print \"so:\" $1 }' \t\t| xargs -rt apk add --no-network --virtual .python-rundeps \t; \tapk del --no-network .build-deps; \t\texport PYTHONDONTWRITEBYTECODE=1; \tpython3 --version; \tpip3 --version # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "RUN /bin/sh -c set -eux; \tfor src in idle3 pip3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "CMD [\"python3\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "RUN /bin/sh -c apk add --no-cache 'libuuid>=2.42.3-r1' && addgroup -S -g 10001 informed && adduser -S -u 10001 -G informed -H informed # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:55.351944978+02:00", + "created_by": "COPY /opt/venv /opt/venv # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.462092072+02:00", + "created_by": "RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "WORKDIR /app", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "USER 10001:10001", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "EXPOSE [8080/tcp 8081/tcp]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "ENTRYPOINT [\"informed-decision-container\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + ] + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json new file mode 100644 index 0000000..acb2a52 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json @@ -0,0 +1,2362 @@ +{ + "SchemaVersion": 2, + "Trivy": { + "Version": "0.74.0" + }, + "ReportID": "01a12890-e255-75ba-9a37-1fe16e6bef49", + "CreatedAt": "2026-10-11T01:25:46.197378104Z", + "ArtifactID": "sha256:6b6a81301d444377b872cc0e4993ffeb2f0625a8822f4603f711bb46f8bc0d39", + "ArtifactName": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "ArtifactType": "container_image", + "Metadata": { + "Size": 88242688, + "OS": { + "Family": "alpine", + "Name": "3.24.1" + }, + "ImageID": "sha256:d00553b452bacb9f80f8320b6140ec10b4d364b472c96d7280821a180fb3d862", + "DiffIDs": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + ], + "RepoDigests": [ + "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173" + ], + "Reference": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "ImageConfig": { + "architecture": "amd64", + "created": "2026-10-05T01:03:56.675216821+02:00", + "history": [ + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "CMD [\"/bin/sh\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV LANG=C.UTF-8", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "RUN /bin/sh -c set -eux; \tapk add --no-cache \t\tca-certificates \t\ttzdata \t; # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_VERSION=3.12.14", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:10:30.672225972Z", + "created_by": "RUN /bin/sh -c set -eux; \t\tapk add --no-cache --virtual .build-deps \t\tbluez-dev \t\tbzip2-dev \t\tdpkg-dev dpkg \t\tfindutils \t\tg++ \t\tgcc \t\tgdbm-dev \t\tgnupg \t\tlibc-dev \t\tlibffi-dev \t\tlibnsl-dev \t\tlibtirpc-dev \t\tlinux-headers \t\tmake \t\tncurses-dev \t\topenssl-dev \t\tpax-utils \t\treadline-dev \t\tsqlite-dev \t\ttar \t\ttcl-dev \t\ttk \t\ttk-dev \t\tutil-linux-dev \t\txz \t\txz-dev \t\tzlib-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \techo \"$PYTHON_SHA256 *python.tar.xz\" | sha256sum -c -; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t$(test \"${gnuArch%%-*}\" != 'riscv64' \u0026\u0026 echo '--with-lto') \t\t--with-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"-DTHREAD_STACK_SIZE=0x100000\"; \tLDFLAGS=\"${LDFLAGS:-} -Wl,--strip-all\"; \tarch=\"$(apk --print-arch)\"; \tcase \"$arch\" in \t\tx86_64|aarch64) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\"; \t\t\t;; \t\tx86) \t\t\t;; \t\t*) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\"; \t\t\t;; \tesac; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\$\\$ORIGIN/../lib'\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \t\t| tr ',' '\\n' \t\t| sort -u \t\t| awk 'system(\"[ -e /usr/local/lib/\" $1 \" ]\") == 0 { next } { print \"so:\" $1 }' \t\t| xargs -rt apk add --no-network --virtual .python-rundeps \t; \tapk del --no-network .build-deps; \t\texport PYTHONDONTWRITEBYTECODE=1; \tpython3 --version; \tpip3 --version # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "RUN /bin/sh -c set -eux; \tfor src in idle3 pip3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "CMD [\"python3\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "RUN /bin/sh -c apk add --no-cache 'libuuid\u003e=2.42.3-r1' \u0026\u0026 addgroup -S -g 10001 informed \u0026\u0026 adduser -S -u 10001 -G informed -H informed # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:55.351944978+02:00", + "created_by": "COPY /opt/venv /opt/venv # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.462092072+02:00", + "created_by": "RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "WORKDIR /app", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "USER 10001:10001", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "EXPOSE [8080/tcp 8081/tcp]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "ENTRYPOINT [\"informed-decision-container\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + ] + }, + "config": { + "Entrypoint": [ + "informed-decision-container" + ], + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "User": "10001:10001", + "WorkingDir": "/app", + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + } + } + }, + "Layers": [ + { + "Size": 8697856, + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "Size": 1538048, + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "Size": 47150592, + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "Size": 5120, + "Digest": "sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b", + "DiffID": "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe" + }, + { + "Size": 131584, + "Digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86", + "DiffID": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + { + "Size": 30705664, + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "Size": 12288, + "Digest": "sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f", + "DiffID": "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59" + }, + { + "Size": 1536, + "Digest": "sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3", + "DiffID": "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + } + ] + }, + "Results": [ + { + "Target": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 (alpine 3.24.1)", + "Class": "os-pkgs", + "Type": "alpine", + "Packages": [ + { + "ID": ".python-rundeps@20260901.001029", + "Name": ".python-rundeps", + "Identifier": { + "PURL": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch\u0026distro=3.24.1", + "UID": "4e26c99fecac1e97" + }, + "Version": "20260901.001029", + "Arch": "noarch", + "DependsOn": [ + "gdbm@1.26-r0", + "libbz2@1.0.8-r6", + "libcrypto3@3.5.8-r0", + "libffi@3.5.2-r1", + "libncursesw@6.6_p20260516-r0", + "libnsl@2.0.1-r2", + "libpanelw@6.6_p20260516-r0", + "libssl3@3.5.8-r0", + "libtirpc@1.3.5-r1", + "libuuid@2.42.3-r1", + "musl@1.2.6-r2", + "readline@8.3.3-r1", + "sqlite-libs@3.53.4-r0", + "xz-libs@5.8.3-r0", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:51d0c1e7d88a414345799f0309185c625013ef32", + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-baselayout@3.7.2-r1", + "Name": "alpine-baselayout", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "1b9c543300f8073e" + }, + "Version": "3.7.2-r1", + "Arch": "x86_64", + "SrcName": "alpine-baselayout", + "SrcVersion": "3.7.2-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "alpine-baselayout-data@3.7.2-r1", + "busybox-binsh@1.37.0-r31" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:f0fcfdc2f4da058af6473bc45c4eab62916225b2", + "InstalledFiles": [ + "etc/motd", + "etc/crontabs/root", + "etc/modprobe.d/aliases.conf", + "etc/modprobe.d/blacklist.conf", + "etc/modprobe.d/i386.conf", + "etc/profile.d/20locale.sh", + "etc/profile.d/README", + "etc/profile.d/color_prompt.sh.disabled", + "usr/lib/sysctl.d/00-alpine.conf", + "var/lock", + "var/run", + "var/spool/mail", + "var/spool/cron/crontabs" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-baselayout-data@3.7.2-r1", + "Name": "alpine-baselayout-data", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "fcc3cd90122d8aa7" + }, + "Version": "3.7.2-r1", + "Arch": "x86_64", + "SrcName": "alpine-baselayout", + "SrcVersion": "3.7.2-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508", + "InstalledFiles": [ + "etc/fstab", + "etc/group", + "etc/hostname", + "etc/hosts", + "etc/inittab", + "etc/modules", + "etc/mtab", + "etc/nsswitch.conf", + "etc/passwd", + "etc/profile", + "etc/protocols", + "etc/services", + "etc/shadow", + "etc/shells", + "etc/sysctl.conf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-keys@2.6-r0", + "Name": "alpine-keys", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "cb1f6c8fa74713e0" + }, + "Version": "2.6-r0", + "Arch": "x86_64", + "SrcName": "alpine-keys", + "SrcVersion": "2.6-r0", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:d8d6b80e53c059a77e4915da78ba964f3ffea240", + "InstalledFiles": [ + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub", + "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", + "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub", + "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub", + "usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub", + "usr/share/apk/keys/loongarch64/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub", + "usr/share/apk/keys/mips64/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", + "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", + "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub", + "usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub", + "usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub", + "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", + "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-release@3.24.1-r0", + "Name": "alpine-release", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "6cfad6f36e1f31aa" + }, + "Version": "3.24.1-r0", + "Arch": "x86_64", + "SrcName": "alpine-base", + "SrcVersion": "3.24.1-r0", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "alpine-keys@2.6-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:bc6912a25cdc7733e0035ed509eceaa4026946e3", + "InstalledFiles": [ + "etc/alpine-release", + "etc/issue", + "etc/os-release", + "etc/secfixes.d/alpine", + "usr/lib/os-release" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "apk-tools@3.0.6-r0", + "Name": "apk-tools", + "Identifier": { + "PURL": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "cb2633c883b17a04" + }, + "Version": "3.0.6-r0", + "Arch": "x86_64", + "SrcName": "apk-tools", + "SrcVersion": "3.0.6-r0", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "ca-certificates-bundle@20260611-r0", + "libapk@3.0.6-r0", + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:043333589798a1f52e09ae63f026c6c8fa676d34", + "InstalledFiles": [ + "sbin/apk" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "busybox@1.37.0-r31", + "Name": "busybox", + "Identifier": { + "PURL": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "771020c43c8440bf" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:b5405ebc02f7dd8be95b6265c54b243d5456ab8f", + "InstalledFiles": [ + "bin/busybox", + "etc/securetty", + "etc/busybox-paths.d/busybox", + "etc/logrotate.d/acpid", + "etc/network/if-up.d/dad", + "etc/udhcpc/udhcpc.conf", + "usr/share/udhcpc/default.script" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "busybox-binsh@1.37.0-r31", + "Name": "busybox-binsh", + "Identifier": { + "PURL": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "1ec8a3d5d2b63297" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "busybox@1.37.0-r31" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7", + "InstalledFiles": [ + "bin/sh" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ca-certificates@20260611-r0", + "Name": "ca-certificates", + "Identifier": { + "PURL": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "2a3c316ee83c6198" + }, + "Version": "20260611-r0", + "Arch": "x86_64", + "SrcName": "ca-certificates", + "SrcVersion": "20260611-r0", + "Licenses": [ + "MPL-2.0", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "busybox-binsh@1.37.0-r31", + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + "Digest": "sha1:8f2a04abeb54b331e2970a0a0dffb7bd6bdde567", + "InstalledFiles": [ + "etc/ca-certificates.conf", + "etc/apk/protected_paths.d/ca-certificates.list", + "etc/ca-certificates/update.d/certhash", + "usr/bin/c_rehash", + "usr/sbin/update-ca-certificates", + "usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt", + "usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt", + "usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt", + "usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_ECC_TLS_2021.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_RSA_TLS_2021.crt", + "usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt", + "usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA1.crt", + "usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA2.crt", + "usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt", + "usr/share/ca-certificates/mozilla/CA_Disig_Root_R2.crt", + "usr/share/ca-certificates/mozilla/CFCA_EV_ROOT.crt", + "usr/share/ca-certificates/mozilla/COMODO_ECC_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/COMODO_RSA_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/Certainly_Root_E1.crt", + "usr/share/ca-certificates/mozilla/Certainly_Root_R1.crt", + "usr/share/ca-certificates/mozilla/Certigna_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_EC-384_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA_2.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Root_CA.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_1_2020.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_2_2023.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_1_2020.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_2_2023.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G2.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G3.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G2.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G3.crt", + "usr/share/ca-certificates/mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt", + "usr/share/ca-certificates/mozilla/DigiCert_TLS_RSA4096_Root_G5.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Trusted_Root_G4.crt", + "usr/share/ca-certificates/mozilla/GDCA_TrustAUTH_R5_ROOT.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R1.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R3.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R4.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R4.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R5.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R3.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R6.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_E46.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_R46.crt", + "usr/share/ca-certificates/mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/HARICA_TLS_ECC_Root_CA_2021.crt", + "usr/share/ca-certificates/mozilla/HARICA_TLS_RSA_Root_CA_2021.crt", + "usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt", + "usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt", + "usr/share/ca-certificates/mozilla/HiPKI_Root_CA_-_G1.crt", + "usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt", + "usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt", + "usr/share/ca-certificates/mozilla/ISRG_Root_X2.crt", + "usr/share/ca-certificates/mozilla/IdenTrust_Commercial_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/IdenTrust_Public_Sector_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/Izenpe.com.crt", + "usr/share/ca-certificates/mozilla/Microsec_e-Szigno_Root_CA_2009.crt", + "usr/share/ca-certificates/mozilla/Microsoft_ECC_Root_Certificate_Authority_2017.crt", + "usr/share/ca-certificates/mozilla/Microsoft_RSA_Root_Certificate_Authority_2017.crt", + "usr/share/ca-certificates/mozilla/NAVER_Global_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt", + "usr/share/ca-certificates/mozilla/OISTE_Server_Root_ECC_G1.crt", + "usr/share/ca-certificates/mozilla/OISTE_Server_Root_RSA_G1.crt", + "usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GB_CA.crt", + "usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GC_CA.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_1_G3.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_2_G3.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_3_G3.crt", + "usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_ECC.crt", + "usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_RSA_R2.crt", + "usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_ECC.crt", + "usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_RSA.crt", + "usr/share/ca-certificates/mozilla/SSL.com_TLS_ECC_Root_CA_2022.crt", + "usr/share/ca-certificates/mozilla/SSL.com_TLS_RSA_Root_CA_2022.crt", + "usr/share/ca-certificates/mozilla/SZAFIR_ROOT_CA2.crt", + "usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_E46.crt", + "usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_R46.crt", + "usr/share/ca-certificates/mozilla/SecureSign_Root_CA14.crt", + "usr/share/ca-certificates/mozilla/SecureSign_Root_CA15.crt", + "usr/share/ca-certificates/mozilla/Security_Communication_ECC_RootCA1.crt", + "usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt", + "usr/share/ca-certificates/mozilla/Starfield_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/SwissSign_RSA_TLS_Root_CA_2022_-_1.crt", + "usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_2.crt", + "usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_3.crt", + "usr/share/ca-certificates/mozilla/TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.crt", + "usr/share/ca-certificates/mozilla/TWCA_CYBER_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TWCA_Global_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TWCA_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/Telekom_Security_TLS_ECC_Root_2020.crt", + "usr/share/ca-certificates/mozilla/Telekom_Security_TLS_RSA_Root_2023.crt", + "usr/share/ca-certificates/mozilla/Telia_Root_CA_v2.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G3.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G4.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_TLS_ECC_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_TLS_RSA_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TunTrust_Root_CA.crt", + "usr/share/ca-certificates/mozilla/UCA_Extended_Validation_Root.crt", + "usr/share/ca-certificates/mozilla/UCA_Global_G2_Root.crt", + "usr/share/ca-certificates/mozilla/USERTrust_ECC_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/USERTrust_RSA_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/certSIGN_Root_CA_G2.crt", + "usr/share/ca-certificates/mozilla/e-Szigno_Root_CA_2017.crt", + "usr/share/ca-certificates/mozilla/e-Szigno_TLS_Root_CA_2023.crt", + "usr/share/ca-certificates/mozilla/ePKI_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_C3.crt", + "usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_G3.crt", + "usr/share/ca-certificates/mozilla/emSign_Root_CA_-_C1.crt", + "usr/share/ca-certificates/mozilla/emSign_Root_CA_-_G1.crt", + "usr/share/ca-certificates/mozilla/vTrus_ECC_Root_CA.crt", + "usr/share/ca-certificates/mozilla/vTrus_Root_CA.crt" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ca-certificates-bundle@20260611-r0", + "Name": "ca-certificates-bundle", + "Identifier": { + "PURL": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "20337c2ea28bef28" + }, + "Version": "20260611-r0", + "Arch": "x86_64", + "SrcName": "ca-certificates", + "SrcVersion": "20260611-r0", + "Licenses": [ + "MPL-2.0", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c9534a03750bdfae341f10969016090fc11febbd", + "InstalledFiles": [ + "etc/ssl/cert.pem", + "etc/ssl/certs/ca-certificates.crt", + "etc/ssl1.1/cert.pem", + "etc/ssl1.1/certs" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "gdbm@1.26-r0", + "Name": "gdbm", + "Identifier": { + "PURL": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "5eb1a3f86262ca77" + }, + "Version": "1.26-r0", + "Arch": "x86_64", + "SrcName": "gdbm", + "SrcVersion": "1.26-r0", + "Licenses": [ + "GPL-3.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:619493d8124fe49a8ee1d8f7a1372cf7e3977337", + "InstalledFiles": [ + "usr/lib/libgdbm.so.6", + "usr/lib/libgdbm.so.6.0.0", + "usr/lib/libgdbm_compat.so.4", + "usr/lib/libgdbm_compat.so.4.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "keyutils-libs@1.6.3-r4", + "Name": "keyutils-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64\u0026distro=3.24.1", + "UID": "a1a29120eb342032" + }, + "Version": "1.6.3-r4", + "Arch": "x86_64", + "SrcName": "keyutils", + "SrcVersion": "1.6.3-r4", + "Licenses": [ + "GPL-2.0-or-later", + "LGPL-2.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:b7331c96f077fc3522ee4361a441d1097204cd90", + "InstalledFiles": [ + "usr/lib/libkeyutils.so.1", + "usr/lib/libkeyutils.so.1.10" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "krb5-conf@1.0-r2", + "Name": "krb5-conf", + "Identifier": { + "PURL": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "e7cf94ba8b6dbc33" + }, + "Version": "1.0-r2", + "Arch": "x86_64", + "SrcName": "krb5-conf", + "SrcVersion": "1.0-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:40a11e0690a59e110367b62a80661024e9942a2d", + "InstalledFiles": [ + "etc/krb5.conf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "krb5-libs@1.22.2-r1", + "Name": "krb5-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "958f8b4a4f087dac" + }, + "Version": "1.22.2-r1", + "Arch": "x86_64", + "SrcName": "krb5", + "SrcVersion": "1.22.2-r1", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "keyutils-libs@1.6.3-r4", + "krb5-conf@1.0-r2", + "libcom_err@1.47.4-r0", + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "libverto@0.3.2-r2", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:ef02346e21b817ff379e4601e5b1fc9760e5e31a", + "InstalledFiles": [ + "usr/lib/libgssapi_krb5.so.2", + "usr/lib/libgssapi_krb5.so.2.2", + "usr/lib/libgssrpc.so.4", + "usr/lib/libgssrpc.so.4.2", + "usr/lib/libk5crypto.so.3", + "usr/lib/libk5crypto.so.3.1", + "usr/lib/libkadm5clnt_mit.so.12", + "usr/lib/libkadm5clnt_mit.so.12.0", + "usr/lib/libkadm5srv_mit.so.12", + "usr/lib/libkadm5srv_mit.so.12.0", + "usr/lib/libkdb5.so.10", + "usr/lib/libkdb5.so.10.0", + "usr/lib/libkrad.so.0", + "usr/lib/libkrad.so.0.0", + "usr/lib/libkrb5.so.3", + "usr/lib/libkrb5.so.3.3", + "usr/lib/libkrb5support.so.0", + "usr/lib/libkrb5support.so.0.1", + "usr/lib/krb5/plugins/kdb/db2.so", + "usr/lib/krb5/plugins/preauth/otp.so", + "usr/lib/krb5/plugins/preauth/spake.so", + "usr/lib/krb5/plugins/preauth/test.so", + "usr/lib/krb5/plugins/tls/k5tls.so" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libapk@3.0.6-r0", + "Name": "libapk", + "Identifier": { + "PURL": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "a35b8b9b3219513a" + }, + "Version": "3.0.6-r0", + "Arch": "x86_64", + "SrcName": "apk-tools", + "SrcVersion": "3.0.6-r0", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "musl@1.2.6-r2", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:523a8f58104589f74f743d501c81bf6517155378", + "InstalledFiles": [ + "usr/lib/libapk.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libbz2@1.0.8-r6", + "Name": "libbz2", + "Identifier": { + "PURL": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64\u0026distro=3.24.1", + "UID": "48e17539404e2d56" + }, + "Version": "1.0.8-r6", + "Arch": "x86_64", + "SrcName": "bzip2", + "SrcVersion": "1.0.8-r6", + "Licenses": [ + "bzip-2-1.0.6" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:08566ba5c7af97c25474be8b24e8b48f0116b67d", + "InstalledFiles": [ + "usr/lib/libbz2.so.1", + "usr/lib/libbz2.so.1.0.8" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libcom_err@1.47.4-r0", + "Name": "libcom_err", + "Identifier": { + "PURL": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "3fc35a3f66d192af" + }, + "Version": "1.47.4-r0", + "Arch": "x86_64", + "SrcName": "e2fsprogs", + "SrcVersion": "1.47.4-r0", + "Licenses": [ + "GPL-2.0-or-later", + "LGPL-2.0-or-later", + "BSD-3-Clause", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef", + "InstalledFiles": [ + "usr/lib/libcom_err.so.2", + "usr/lib/libcom_err.so.2.1" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libcrypto3@3.5.8-r0", + "Name": "libcrypto3", + "Identifier": { + "PURL": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "4299bba2ba9c96aa" + }, + "Version": "3.5.8-r0", + "Arch": "x86_64", + "SrcName": "openssl", + "SrcVersion": "3.5.8-r0", + "Licenses": [ + "Apache-2.0" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3", + "InstalledFiles": [ + "etc/ssl/ct_log_list.cnf", + "etc/ssl/ct_log_list.cnf.dist", + "etc/ssl/openssl.cnf", + "etc/ssl/openssl.cnf.dist", + "usr/lib/libcrypto.so.3", + "usr/lib/engines-3/afalg.so", + "usr/lib/engines-3/capi.so", + "usr/lib/engines-3/loader_attic.so", + "usr/lib/engines-3/padlock.so", + "usr/lib/ossl-modules/legacy.so" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libffi@3.5.2-r1", + "Name": "libffi", + "Identifier": { + "PURL": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "d3eaa921287b1ccd" + }, + "Version": "3.5.2-r1", + "Arch": "x86_64", + "SrcName": "libffi", + "SrcVersion": "3.5.2-r1", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a", + "InstalledFiles": [ + "usr/lib/libffi.so.8", + "usr/lib/libffi.so.8.2.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libintl@1.0-r0", + "Name": "libintl", + "Identifier": { + "PURL": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "25c18808d8fc87e0" + }, + "Version": "1.0-r0", + "Arch": "x86_64", + "SrcName": "gettext", + "SrcVersion": "1.0-r0", + "Licenses": [ + "LGPL-2.1-or-later" + ], + "Maintainer": "Carlo Landmeter \u003cclandmeter@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:282d6642ccac87237e43a864159d73cf5abe7550", + "InstalledFiles": [ + "usr/lib/libintl.so.8", + "usr/lib/libintl.so.8.4.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libncursesw@6.6_p20260516-r0", + "Name": "libncursesw", + "Identifier": { + "PURL": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e8939f45e2191bcc" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "DependsOn": [ + "musl@1.2.6-r2", + "ncurses-terminfo-base@6.6_p20260516-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:9f318e6e324d6827274829194cf6ac6afbaded12", + "InstalledFiles": [ + "usr/lib/libncursesw.so.6", + "usr/lib/libncursesw.so.6.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libnsl@2.0.1-r2", + "Name": "libnsl", + "Identifier": { + "PURL": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "3d893c60d41da67b" + }, + "Version": "2.0.1-r2", + "Arch": "x86_64", + "SrcName": "libnsl", + "SrcVersion": "2.0.1-r2", + "Licenses": [ + "LGPL-2.0-or-later" + ], + "DependsOn": [ + "libintl@1.0-r0", + "libtirpc@1.3.5-r1", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:5194adbf26560b52be318481a7af294ab05fd795", + "InstalledFiles": [ + "usr/lib/libnsl.so.3", + "usr/lib/libnsl.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libpanelw@6.6_p20260516-r0", + "Name": "libpanelw", + "Identifier": { + "PURL": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "ef1ad9bb256b373" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "DependsOn": [ + "libncursesw@6.6_p20260516-r0", + "musl@1.2.6-r2", + "ncurses-terminfo-base@6.6_p20260516-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:149bdc434232ed11fc5bb975ba519a07154a6f56", + "InstalledFiles": [ + "usr/lib/libpanelw.so.6", + "usr/lib/libpanelw.so.6.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libssl3@3.5.8-r0", + "Name": "libssl3", + "Identifier": { + "PURL": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "f290ab59b88b1c4a" + }, + "Version": "3.5.8-r0", + "Arch": "x86_64", + "SrcName": "openssl", + "SrcVersion": "3.5.8-r0", + "Licenses": [ + "Apache-2.0" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:5f9b1e55d821953d2e2b1db322dad70a3b5041ea", + "InstalledFiles": [ + "usr/lib/libssl.so.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libtirpc@1.3.5-r1", + "Name": "libtirpc", + "Identifier": { + "PURL": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "471c8d955ca03be5" + }, + "Version": "1.3.5-r1", + "Arch": "x86_64", + "SrcName": "libtirpc", + "SrcVersion": "1.3.5-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "krb5-libs@1.22.2-r1", + "libtirpc-conf@1.3.5-r1", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:c32865bd86a8b8829d152279cabbc5ac6d430eb2", + "InstalledFiles": [ + "usr/lib/libtirpc.so.3", + "usr/lib/libtirpc.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libtirpc-conf@1.3.5-r1", + "Name": "libtirpc-conf", + "Identifier": { + "PURL": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "3437392c14aad33f" + }, + "Version": "1.3.5-r1", + "Arch": "x86_64", + "SrcName": "libtirpc", + "SrcVersion": "1.3.5-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:0c17d9988dc986c90e22f79778df047eca9973ff", + "InstalledFiles": [ + "etc/bindresvport.blacklist", + "etc/netconfig" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libuuid@2.42.3-r1", + "Name": "libuuid", + "Identifier": { + "PURL": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "c444e9cdd1bdda40" + }, + "Version": "2.42.3-r1", + "Arch": "x86_64", + "SrcName": "util-linux", + "SrcVersion": "2.42.3-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86", + "DiffID": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + "Digest": "sha1:8f041ef637ad75f381cc0c034f2afbbb0303264e", + "InstalledFiles": [ + "usr/lib/libuuid.so.1", + "usr/lib/libuuid.so.1.3.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libverto@0.3.2-r2", + "Name": "libverto", + "Identifier": { + "PURL": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "9df4321a283a6cf6" + }, + "Version": "0.3.2-r2", + "Arch": "x86_64", + "SrcName": "libverto", + "SrcVersion": "0.3.2-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Francesco Colista \u003cfcolista@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:73233059338142e4ac6d8fb8bb0074e93da75dc1", + "InstalledFiles": [ + "usr/lib/libverto.so.1", + "usr/lib/libverto.so.1.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "musl@1.2.6-r2", + "Name": "musl", + "Identifier": { + "PURL": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "1f8cb44befe503d4" + }, + "Version": "1.2.6-r2", + "Arch": "x86_64", + "SrcName": "musl", + "SrcVersion": "1.2.6-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:0f7e5827e4e1a73631beda27b78431a8ba240e05", + "InstalledFiles": [ + "lib/ld-musl-x86_64.so.1", + "lib/libc.musl-x86_64.so.1" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "musl-utils@1.2.6-r2", + "Name": "musl-utils", + "Identifier": { + "PURL": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "4497482ec1d943e1" + }, + "Version": "1.2.6-r2", + "Arch": "x86_64", + "SrcName": "musl", + "SrcVersion": "1.2.6-r2", + "Licenses": [ + "MIT", + "BSD-2-Clause", + "GPL-2.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2", + "scanelf@1.3.9-r1" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:75ada3c48d63ec5d87c42fdf934a3fdd11298dc5", + "InstalledFiles": [ + "sbin/ldconfig", + "usr/bin/getconf", + "usr/bin/getent", + "usr/bin/iconv", + "usr/bin/ldd" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ncurses-terminfo-base@6.6_p20260516-r0", + "Name": "ncurses-terminfo-base", + "Identifier": { + "PURL": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e7fac5c6a6e9ae8" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:9d551d828e9c8ee52c5801c1d6046828ebf15752", + "InstalledFiles": [ + "etc/terminfo/a/alacritty", + "etc/terminfo/a/ansi", + "etc/terminfo/d/dumb", + "etc/terminfo/g/gnome", + "etc/terminfo/g/gnome-256color", + "etc/terminfo/k/konsole", + "etc/terminfo/k/konsole-256color", + "etc/terminfo/k/konsole-linux", + "etc/terminfo/l/linux", + "etc/terminfo/p/putty", + "etc/terminfo/p/putty-256color", + "etc/terminfo/r/rxvt", + "etc/terminfo/r/rxvt-256color", + "etc/terminfo/s/screen", + "etc/terminfo/s/screen-256color", + "etc/terminfo/s/st-0.6", + "etc/terminfo/s/st-0.7", + "etc/terminfo/s/st-0.8", + "etc/terminfo/s/st-0.8.5", + "etc/terminfo/s/st-16color", + "etc/terminfo/s/st-256color", + "etc/terminfo/s/st-direct", + "etc/terminfo/s/sun", + "etc/terminfo/t/terminator", + "etc/terminfo/t/terminology", + "etc/terminfo/t/terminology-0.6.1", + "etc/terminfo/t/terminology-1.0.0", + "etc/terminfo/t/terminology-1.8.1", + "etc/terminfo/t/tmux", + "etc/terminfo/t/tmux-256color", + "etc/terminfo/v/vt100", + "etc/terminfo/v/vt102", + "etc/terminfo/v/vt200", + "etc/terminfo/v/vt220", + "etc/terminfo/v/vt52", + "etc/terminfo/v/vte", + "etc/terminfo/v/vte-256color", + "etc/terminfo/x/xterm", + "etc/terminfo/x/xterm-256color", + "etc/terminfo/x/xterm-color", + "etc/terminfo/x/xterm-xfree86" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "readline@8.3.3-r1", + "Name": "readline", + "Identifier": { + "PURL": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "f50058781c93e1f2" + }, + "Version": "8.3.3-r1", + "Arch": "x86_64", + "SrcName": "readline", + "SrcVersion": "8.3.3-r1", + "Licenses": [ + "GPL-3.0-or-later" + ], + "Maintainer": "qaqland \u003cqaq@qaq.land\u003e", + "DependsOn": [ + "libncursesw@6.6_p20260516-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:945b16e378bc00e44d89d4de8124bba7647fdf4d", + "InstalledFiles": [ + "etc/inputrc", + "usr/lib/libreadline.so.8", + "usr/lib/libreadline.so.8.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "scanelf@1.3.9-r1", + "Name": "scanelf", + "Identifier": { + "PURL": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "936394657a1626fb" + }, + "Version": "1.3.9-r1", + "Arch": "x86_64", + "SrcName": "pax-utils", + "SrcVersion": "1.3.9-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:013f903d0ba219673aebbdd04f74bb5ed82b01f0", + "InstalledFiles": [ + "usr/bin/scanelf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "sqlite-libs@3.53.4-r0", + "Name": "sqlite-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "8b10aee2ccc192de" + }, + "Version": "3.53.4-r0", + "Arch": "x86_64", + "SrcName": "sqlite", + "SrcVersion": "3.53.4-r0", + "Licenses": [ + "blessing" + ], + "Maintainer": "Jingyun Hua \u003chuajingyun@loongson.cn\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:f7630ceb37c232b6609861aeab6cdb9cd120e6fa", + "InstalledFiles": [ + "usr/lib/libsqlite3.so.0", + "usr/lib/libsqlite3.so.3.53.4" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ssl_client@1.37.0-r31", + "Name": "ssl_client", + "Identifier": { + "PURL": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "d42e31f15a4ce47a" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c220f4a5125a313af733e98def94132bb1e9d40d", + "InstalledFiles": [ + "usr/bin/ssl_client" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "tzdata@2026c-r0", + "Name": "tzdata", + "Identifier": { + "PURL": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "52c6b50eff629f9d" + }, + "Version": "2026c-r0", + "Arch": "x86_64", + "SrcName": "tzdata", + "SrcVersion": "2026c-r0", + "Licenses": [ + "Public-Domain" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + "Digest": "sha1:61f7544ecd8dd63eac23fe3e645702fda92ef02a", + "InstalledFiles": [ + "usr/share/zoneinfo/CET", + "usr/share/zoneinfo/CST6CDT", + "usr/share/zoneinfo/Cuba", + "usr/share/zoneinfo/EET", + "usr/share/zoneinfo/EST", + "usr/share/zoneinfo/EST5EDT", + "usr/share/zoneinfo/Egypt", + "usr/share/zoneinfo/Eire", + "usr/share/zoneinfo/Factory", + "usr/share/zoneinfo/GB", + "usr/share/zoneinfo/GB-Eire", + "usr/share/zoneinfo/GMT", + "usr/share/zoneinfo/GMT+0", + "usr/share/zoneinfo/GMT-0", + "usr/share/zoneinfo/GMT0", + "usr/share/zoneinfo/Greenwich", + "usr/share/zoneinfo/HST", + "usr/share/zoneinfo/Hongkong", + "usr/share/zoneinfo/Iceland", + "usr/share/zoneinfo/Iran", + "usr/share/zoneinfo/Israel", + "usr/share/zoneinfo/Jamaica", + "usr/share/zoneinfo/Japan", + "usr/share/zoneinfo/Kwajalein", + "usr/share/zoneinfo/Libya", + "usr/share/zoneinfo/MET", + "usr/share/zoneinfo/MST", + "usr/share/zoneinfo/MST7MDT", + "usr/share/zoneinfo/NZ", + "usr/share/zoneinfo/NZ-CHAT", + "usr/share/zoneinfo/Navajo", + "usr/share/zoneinfo/PRC", + "usr/share/zoneinfo/PST8PDT", + "usr/share/zoneinfo/Poland", + "usr/share/zoneinfo/Portugal", + "usr/share/zoneinfo/ROC", + "usr/share/zoneinfo/ROK", + "usr/share/zoneinfo/Singapore", + "usr/share/zoneinfo/Turkey", + "usr/share/zoneinfo/UCT", + "usr/share/zoneinfo/UTC", + "usr/share/zoneinfo/Universal", + "usr/share/zoneinfo/W-SU", + "usr/share/zoneinfo/WET", + "usr/share/zoneinfo/Zulu", + "usr/share/zoneinfo/iso3166.tab", + "usr/share/zoneinfo/leap-seconds.list", + "usr/share/zoneinfo/posixrules", + "usr/share/zoneinfo/zone.tab", + "usr/share/zoneinfo/zone1970.tab", + "usr/share/zoneinfo/Africa/Abidjan", + "usr/share/zoneinfo/Africa/Accra", + "usr/share/zoneinfo/Africa/Addis_Ababa", + "usr/share/zoneinfo/Africa/Algiers", + "usr/share/zoneinfo/Africa/Asmara", + "usr/share/zoneinfo/Africa/Asmera", + "usr/share/zoneinfo/Africa/Bamako", + "usr/share/zoneinfo/Africa/Bangui", + "usr/share/zoneinfo/Africa/Banjul", + "usr/share/zoneinfo/Africa/Bissau", + "usr/share/zoneinfo/Africa/Blantyre", + "usr/share/zoneinfo/Africa/Brazzaville", + "usr/share/zoneinfo/Africa/Bujumbura", + "usr/share/zoneinfo/Africa/Cairo", + "usr/share/zoneinfo/Africa/Casablanca", + "usr/share/zoneinfo/Africa/Ceuta", + "usr/share/zoneinfo/Africa/Conakry", + "usr/share/zoneinfo/Africa/Dakar", + "usr/share/zoneinfo/Africa/Dar_es_Salaam", + "usr/share/zoneinfo/Africa/Djibouti", + "usr/share/zoneinfo/Africa/Douala", + "usr/share/zoneinfo/Africa/El_Aaiun", + "usr/share/zoneinfo/Africa/Freetown", + "usr/share/zoneinfo/Africa/Gaborone", + "usr/share/zoneinfo/Africa/Harare", + "usr/share/zoneinfo/Africa/Johannesburg", + "usr/share/zoneinfo/Africa/Juba", + "usr/share/zoneinfo/Africa/Kampala", + "usr/share/zoneinfo/Africa/Khartoum", + "usr/share/zoneinfo/Africa/Kigali", + "usr/share/zoneinfo/Africa/Kinshasa", + "usr/share/zoneinfo/Africa/Lagos", + "usr/share/zoneinfo/Africa/Libreville", + "usr/share/zoneinfo/Africa/Lome", + "usr/share/zoneinfo/Africa/Luanda", + "usr/share/zoneinfo/Africa/Lubumbashi", + "usr/share/zoneinfo/Africa/Lusaka", + "usr/share/zoneinfo/Africa/Malabo", + "usr/share/zoneinfo/Africa/Maputo", + "usr/share/zoneinfo/Africa/Maseru", + "usr/share/zoneinfo/Africa/Mbabane", + "usr/share/zoneinfo/Africa/Mogadishu", + "usr/share/zoneinfo/Africa/Monrovia", + "usr/share/zoneinfo/Africa/Nairobi", + "usr/share/zoneinfo/Africa/Ndjamena", + "usr/share/zoneinfo/Africa/Niamey", + "usr/share/zoneinfo/Africa/Nouakchott", + "usr/share/zoneinfo/Africa/Ouagadougou", + "usr/share/zoneinfo/Africa/Porto-Novo", + "usr/share/zoneinfo/Africa/Sao_Tome", + "usr/share/zoneinfo/Africa/Timbuktu", + "usr/share/zoneinfo/Africa/Tripoli", + "usr/share/zoneinfo/Africa/Tunis", + "usr/share/zoneinfo/Africa/Windhoek", + "usr/share/zoneinfo/America/Adak", + "usr/share/zoneinfo/America/Anchorage", + "usr/share/zoneinfo/America/Anguilla", + "usr/share/zoneinfo/America/Antigua", + "usr/share/zoneinfo/America/Araguaina", + "usr/share/zoneinfo/America/Aruba", + "usr/share/zoneinfo/America/Asuncion", + "usr/share/zoneinfo/America/Atikokan", + "usr/share/zoneinfo/America/Atka", + "usr/share/zoneinfo/America/Bahia", + "usr/share/zoneinfo/America/Bahia_Banderas", + "usr/share/zoneinfo/America/Barbados", + "usr/share/zoneinfo/America/Belem", + "usr/share/zoneinfo/America/Belize", + "usr/share/zoneinfo/America/Blanc-Sablon", + "usr/share/zoneinfo/America/Boa_Vista", + "usr/share/zoneinfo/America/Bogota", + "usr/share/zoneinfo/America/Boise", + "usr/share/zoneinfo/America/Buenos_Aires", + "usr/share/zoneinfo/America/Cambridge_Bay", + "usr/share/zoneinfo/America/Campo_Grande", + "usr/share/zoneinfo/America/Cancun", + "usr/share/zoneinfo/America/Caracas", + "usr/share/zoneinfo/America/Catamarca", + "usr/share/zoneinfo/America/Cayenne", + "usr/share/zoneinfo/America/Cayman", + "usr/share/zoneinfo/America/Chicago", + "usr/share/zoneinfo/America/Chihuahua", + "usr/share/zoneinfo/America/Ciudad_Juarez", + "usr/share/zoneinfo/America/Coral_Harbour", + "usr/share/zoneinfo/America/Cordoba", + "usr/share/zoneinfo/America/Costa_Rica", + "usr/share/zoneinfo/America/Coyhaique", + "usr/share/zoneinfo/America/Creston", + "usr/share/zoneinfo/America/Cuiaba", + "usr/share/zoneinfo/America/Curacao", + "usr/share/zoneinfo/America/Danmarkshavn", + "usr/share/zoneinfo/America/Dawson", + "usr/share/zoneinfo/America/Dawson_Creek", + "usr/share/zoneinfo/America/Denver", + "usr/share/zoneinfo/America/Detroit", + "usr/share/zoneinfo/America/Dominica", + "usr/share/zoneinfo/America/Edmonton", + "usr/share/zoneinfo/America/Eirunepe", + "usr/share/zoneinfo/America/El_Salvador", + "usr/share/zoneinfo/America/Ensenada", + "usr/share/zoneinfo/America/Fort_Nelson", + "usr/share/zoneinfo/America/Fort_Wayne", + "usr/share/zoneinfo/America/Fortaleza", + "usr/share/zoneinfo/America/Glace_Bay", + "usr/share/zoneinfo/America/Godthab", + "usr/share/zoneinfo/America/Goose_Bay", + "usr/share/zoneinfo/America/Grand_Turk", + "usr/share/zoneinfo/America/Grenada", + "usr/share/zoneinfo/America/Guadeloupe", + "usr/share/zoneinfo/America/Guatemala", + "usr/share/zoneinfo/America/Guayaquil", + "usr/share/zoneinfo/America/Guyana", + "usr/share/zoneinfo/America/Halifax", + "usr/share/zoneinfo/America/Havana", + "usr/share/zoneinfo/America/Hermosillo", + "usr/share/zoneinfo/America/Indianapolis", + "usr/share/zoneinfo/America/Inuvik", + "usr/share/zoneinfo/America/Iqaluit", + "usr/share/zoneinfo/America/Jamaica", + "usr/share/zoneinfo/America/Jujuy", + "usr/share/zoneinfo/America/Juneau", + "usr/share/zoneinfo/America/Knox_IN", + "usr/share/zoneinfo/America/Kralendijk", + "usr/share/zoneinfo/America/La_Paz", + "usr/share/zoneinfo/America/Lima", + "usr/share/zoneinfo/America/Los_Angeles", + "usr/share/zoneinfo/America/Louisville", + "usr/share/zoneinfo/America/Lower_Princes", + "usr/share/zoneinfo/America/Maceio", + "usr/share/zoneinfo/America/Managua", + "usr/share/zoneinfo/America/Manaus", + "usr/share/zoneinfo/America/Marigot", + "usr/share/zoneinfo/America/Martinique", + "usr/share/zoneinfo/America/Matamoros", + "usr/share/zoneinfo/America/Mazatlan", + "usr/share/zoneinfo/America/Mendoza", + "usr/share/zoneinfo/America/Menominee", + "usr/share/zoneinfo/America/Merida", + "usr/share/zoneinfo/America/Metlakatla", + "usr/share/zoneinfo/America/Mexico_City", + "usr/share/zoneinfo/America/Miquelon", + "usr/share/zoneinfo/America/Moncton", + "usr/share/zoneinfo/America/Monterrey", + "usr/share/zoneinfo/America/Montevideo", + "usr/share/zoneinfo/America/Montreal", + "usr/share/zoneinfo/America/Montserrat", + "usr/share/zoneinfo/America/Nassau", + "usr/share/zoneinfo/America/New_York", + "usr/share/zoneinfo/America/Nipigon", + "usr/share/zoneinfo/America/Nome", + "usr/share/zoneinfo/America/Noronha", + "usr/share/zoneinfo/America/Nuuk", + "usr/share/zoneinfo/America/Ojinaga", + "usr/share/zoneinfo/America/Panama", + "usr/share/zoneinfo/America/Pangnirtung", + "usr/share/zoneinfo/America/Paramaribo", + "usr/share/zoneinfo/America/Phoenix", + "usr/share/zoneinfo/America/Port-au-Prince", + "usr/share/zoneinfo/America/Port_of_Spain", + "usr/share/zoneinfo/America/Porto_Acre", + "usr/share/zoneinfo/America/Porto_Velho", + "usr/share/zoneinfo/America/Puerto_Rico", + "usr/share/zoneinfo/America/Punta_Arenas", + "usr/share/zoneinfo/America/Rainy_River", + "usr/share/zoneinfo/America/Rankin_Inlet", + "usr/share/zoneinfo/America/Recife", + "usr/share/zoneinfo/America/Regina", + "usr/share/zoneinfo/America/Resolute", + "usr/share/zoneinfo/America/Rio_Branco", + "usr/share/zoneinfo/America/Rosario", + "usr/share/zoneinfo/America/Santa_Isabel", + "usr/share/zoneinfo/America/Santarem", + "usr/share/zoneinfo/America/Santiago", + "usr/share/zoneinfo/America/Santo_Domingo", + "usr/share/zoneinfo/America/Sao_Paulo", + "usr/share/zoneinfo/America/Scoresbysund", + "usr/share/zoneinfo/America/Shiprock", + "usr/share/zoneinfo/America/Sitka", + "usr/share/zoneinfo/America/St_Barthelemy", + "usr/share/zoneinfo/America/St_Johns", + "usr/share/zoneinfo/America/St_Kitts", + "usr/share/zoneinfo/America/St_Lucia", + "usr/share/zoneinfo/America/St_Thomas", + "usr/share/zoneinfo/America/St_Vincent", + "usr/share/zoneinfo/America/Swift_Current", + "usr/share/zoneinfo/America/Tegucigalpa", + "usr/share/zoneinfo/America/Thule", + "usr/share/zoneinfo/America/Thunder_Bay", + "usr/share/zoneinfo/America/Tijuana", + "usr/share/zoneinfo/America/Toronto", + "usr/share/zoneinfo/America/Tortola", + "usr/share/zoneinfo/America/Vancouver", + "usr/share/zoneinfo/America/Virgin", + "usr/share/zoneinfo/America/Whitehorse", + "usr/share/zoneinfo/America/Winnipeg", + "usr/share/zoneinfo/America/Yakutat", + "usr/share/zoneinfo/America/Yellowknife", + "usr/share/zoneinfo/America/Argentina/Buenos_Aires", + "usr/share/zoneinfo/America/Argentina/Catamarca", + "usr/share/zoneinfo/America/Argentina/ComodRivadavia", + "usr/share/zoneinfo/America/Argentina/Cordoba", + "usr/share/zoneinfo/America/Argentina/Jujuy", + "usr/share/zoneinfo/America/Argentina/La_Rioja", + "usr/share/zoneinfo/America/Argentina/Mendoza", + "usr/share/zoneinfo/America/Argentina/Rio_Gallegos", + "usr/share/zoneinfo/America/Argentina/Salta", + "usr/share/zoneinfo/America/Argentina/San_Juan", + "usr/share/zoneinfo/America/Argentina/San_Luis", + "usr/share/zoneinfo/America/Argentina/Tucuman", + "usr/share/zoneinfo/America/Argentina/Ushuaia", + "usr/share/zoneinfo/America/Indiana/Indianapolis", + "usr/share/zoneinfo/America/Indiana/Knox", + "usr/share/zoneinfo/America/Indiana/Marengo", + "usr/share/zoneinfo/America/Indiana/Petersburg", + "usr/share/zoneinfo/America/Indiana/Tell_City", + "usr/share/zoneinfo/America/Indiana/Vevay", + "usr/share/zoneinfo/America/Indiana/Vincennes", + "usr/share/zoneinfo/America/Indiana/Winamac", + "usr/share/zoneinfo/America/Kentucky/Louisville", + "usr/share/zoneinfo/America/Kentucky/Monticello", + "usr/share/zoneinfo/America/North_Dakota/Beulah", + "usr/share/zoneinfo/America/North_Dakota/Center", + "usr/share/zoneinfo/America/North_Dakota/New_Salem", + "usr/share/zoneinfo/Antarctica/Casey", + "usr/share/zoneinfo/Antarctica/Davis", + "usr/share/zoneinfo/Antarctica/DumontDUrville", + "usr/share/zoneinfo/Antarctica/Macquarie", + "usr/share/zoneinfo/Antarctica/Mawson", + "usr/share/zoneinfo/Antarctica/McMurdo", + "usr/share/zoneinfo/Antarctica/Palmer", + "usr/share/zoneinfo/Antarctica/Rothera", + "usr/share/zoneinfo/Antarctica/South_Pole", + "usr/share/zoneinfo/Antarctica/Syowa", + "usr/share/zoneinfo/Antarctica/Troll", + "usr/share/zoneinfo/Antarctica/Vostok", + "usr/share/zoneinfo/Arctic/Longyearbyen", + "usr/share/zoneinfo/Asia/Aden", + "usr/share/zoneinfo/Asia/Almaty", + "usr/share/zoneinfo/Asia/Amman", + "usr/share/zoneinfo/Asia/Anadyr", + "usr/share/zoneinfo/Asia/Aqtau", + "usr/share/zoneinfo/Asia/Aqtobe", + "usr/share/zoneinfo/Asia/Ashgabat", + "usr/share/zoneinfo/Asia/Ashkhabad", + "usr/share/zoneinfo/Asia/Atyrau", + "usr/share/zoneinfo/Asia/Baghdad", + "usr/share/zoneinfo/Asia/Bahrain", + "usr/share/zoneinfo/Asia/Baku", + "usr/share/zoneinfo/Asia/Bangkok", + "usr/share/zoneinfo/Asia/Barnaul", + "usr/share/zoneinfo/Asia/Beirut", + "usr/share/zoneinfo/Asia/Bishkek", + "usr/share/zoneinfo/Asia/Brunei", + "usr/share/zoneinfo/Asia/Calcutta", + "usr/share/zoneinfo/Asia/Chita", + "usr/share/zoneinfo/Asia/Choibalsan", + "usr/share/zoneinfo/Asia/Chongqing", + "usr/share/zoneinfo/Asia/Chungking", + "usr/share/zoneinfo/Asia/Colombo", + "usr/share/zoneinfo/Asia/Dacca", + "usr/share/zoneinfo/Asia/Damascus", + "usr/share/zoneinfo/Asia/Dhaka", + "usr/share/zoneinfo/Asia/Dili", + "usr/share/zoneinfo/Asia/Dubai", + "usr/share/zoneinfo/Asia/Dushanbe", + "usr/share/zoneinfo/Asia/Famagusta", + "usr/share/zoneinfo/Asia/Gaza", + "usr/share/zoneinfo/Asia/Harbin", + "usr/share/zoneinfo/Asia/Hebron", + "usr/share/zoneinfo/Asia/Ho_Chi_Minh", + "usr/share/zoneinfo/Asia/Hong_Kong", + "usr/share/zoneinfo/Asia/Hovd", + "usr/share/zoneinfo/Asia/Irkutsk", + "usr/share/zoneinfo/Asia/Istanbul", + "usr/share/zoneinfo/Asia/Jakarta", + "usr/share/zoneinfo/Asia/Jayapura", + "usr/share/zoneinfo/Asia/Jerusalem", + "usr/share/zoneinfo/Asia/Kabul", + "usr/share/zoneinfo/Asia/Kamchatka", + "usr/share/zoneinfo/Asia/Karachi", + "usr/share/zoneinfo/Asia/Kashgar", + "usr/share/zoneinfo/Asia/Kathmandu", + "usr/share/zoneinfo/Asia/Katmandu", + "usr/share/zoneinfo/Asia/Khandyga", + "usr/share/zoneinfo/Asia/Kolkata", + "usr/share/zoneinfo/Asia/Krasnoyarsk", + "usr/share/zoneinfo/Asia/Kuala_Lumpur", + "usr/share/zoneinfo/Asia/Kuching", + "usr/share/zoneinfo/Asia/Kuwait", + "usr/share/zoneinfo/Asia/Macao", + "usr/share/zoneinfo/Asia/Macau", + "usr/share/zoneinfo/Asia/Magadan", + "usr/share/zoneinfo/Asia/Makassar", + "usr/share/zoneinfo/Asia/Manila", + "usr/share/zoneinfo/Asia/Muscat", + "usr/share/zoneinfo/Asia/Nicosia", + "usr/share/zoneinfo/Asia/Novokuznetsk", + "usr/share/zoneinfo/Asia/Novosibirsk", + "usr/share/zoneinfo/Asia/Omsk", + "usr/share/zoneinfo/Asia/Oral", + "usr/share/zoneinfo/Asia/Phnom_Penh", + "usr/share/zoneinfo/Asia/Pontianak", + "usr/share/zoneinfo/Asia/Pyongyang", + "usr/share/zoneinfo/Asia/Qatar", + "usr/share/zoneinfo/Asia/Qostanay", + "usr/share/zoneinfo/Asia/Qyzylorda", + "usr/share/zoneinfo/Asia/Rangoon", + "usr/share/zoneinfo/Asia/Riyadh", + "usr/share/zoneinfo/Asia/Saigon", + "usr/share/zoneinfo/Asia/Sakhalin", + "usr/share/zoneinfo/Asia/Samarkand", + "usr/share/zoneinfo/Asia/Seoul", + "usr/share/zoneinfo/Asia/Shanghai", + "usr/share/zoneinfo/Asia/Singapore", + "usr/share/zoneinfo/Asia/Srednekolymsk", + "usr/share/zoneinfo/Asia/Taipei", + "usr/share/zoneinfo/Asia/Tashkent", + "usr/share/zoneinfo/Asia/Tbilisi", + "usr/share/zoneinfo/Asia/Tehran", + "usr/share/zoneinfo/Asia/Tel_Aviv", + "usr/share/zoneinfo/Asia/Thimbu", + "usr/share/zoneinfo/Asia/Thimphu", + "usr/share/zoneinfo/Asia/Tokyo", + "usr/share/zoneinfo/Asia/Tomsk", + "usr/share/zoneinfo/Asia/Ujung_Pandang", + "usr/share/zoneinfo/Asia/Ulaanbaatar", + "usr/share/zoneinfo/Asia/Ulan_Bator", + "usr/share/zoneinfo/Asia/Urumqi", + "usr/share/zoneinfo/Asia/Ust-Nera", + "usr/share/zoneinfo/Asia/Vientiane", + "usr/share/zoneinfo/Asia/Vladivostok", + "usr/share/zoneinfo/Asia/Yakutsk", + "usr/share/zoneinfo/Asia/Yangon", + "usr/share/zoneinfo/Asia/Yekaterinburg", + "usr/share/zoneinfo/Asia/Yerevan", + "usr/share/zoneinfo/Atlantic/Azores", + "usr/share/zoneinfo/Atlantic/Bermuda", + "usr/share/zoneinfo/Atlantic/Canary", + "usr/share/zoneinfo/Atlantic/Cape_Verde", + "usr/share/zoneinfo/Atlantic/Faeroe", + "usr/share/zoneinfo/Atlantic/Faroe", + "usr/share/zoneinfo/Atlantic/Jan_Mayen", + "usr/share/zoneinfo/Atlantic/Madeira", + "usr/share/zoneinfo/Atlantic/Reykjavik", + "usr/share/zoneinfo/Atlantic/South_Georgia", + "usr/share/zoneinfo/Atlantic/St_Helena", + "usr/share/zoneinfo/Atlantic/Stanley", + "usr/share/zoneinfo/Australia/ACT", + "usr/share/zoneinfo/Australia/Adelaide", + "usr/share/zoneinfo/Australia/Brisbane", + "usr/share/zoneinfo/Australia/Broken_Hill", + "usr/share/zoneinfo/Australia/Canberra", + "usr/share/zoneinfo/Australia/Currie", + "usr/share/zoneinfo/Australia/Darwin", + "usr/share/zoneinfo/Australia/Eucla", + "usr/share/zoneinfo/Australia/Hobart", + "usr/share/zoneinfo/Australia/LHI", + "usr/share/zoneinfo/Australia/Lindeman", + "usr/share/zoneinfo/Australia/Lord_Howe", + "usr/share/zoneinfo/Australia/Melbourne", + "usr/share/zoneinfo/Australia/NSW", + "usr/share/zoneinfo/Australia/North", + "usr/share/zoneinfo/Australia/Perth", + "usr/share/zoneinfo/Australia/Queensland", + "usr/share/zoneinfo/Australia/South", + "usr/share/zoneinfo/Australia/Sydney", + "usr/share/zoneinfo/Australia/Tasmania", + "usr/share/zoneinfo/Australia/Victoria", + "usr/share/zoneinfo/Australia/West", + "usr/share/zoneinfo/Australia/Yancowinna", + "usr/share/zoneinfo/Brazil/Acre", + "usr/share/zoneinfo/Brazil/DeNoronha", + "usr/share/zoneinfo/Brazil/East", + "usr/share/zoneinfo/Brazil/West", + "usr/share/zoneinfo/Canada/Atlantic", + "usr/share/zoneinfo/Canada/Central", + "usr/share/zoneinfo/Canada/Eastern", + "usr/share/zoneinfo/Canada/Mountain", + "usr/share/zoneinfo/Canada/Newfoundland", + "usr/share/zoneinfo/Canada/Pacific", + "usr/share/zoneinfo/Canada/Saskatchewan", + "usr/share/zoneinfo/Canada/Yukon", + "usr/share/zoneinfo/Chile/Continental", + "usr/share/zoneinfo/Chile/EasterIsland", + "usr/share/zoneinfo/Etc/GMT", + "usr/share/zoneinfo/Etc/GMT+0", + "usr/share/zoneinfo/Etc/GMT+1", + "usr/share/zoneinfo/Etc/GMT+10", + "usr/share/zoneinfo/Etc/GMT+11", + "usr/share/zoneinfo/Etc/GMT+12", + "usr/share/zoneinfo/Etc/GMT+2", + "usr/share/zoneinfo/Etc/GMT+3", + "usr/share/zoneinfo/Etc/GMT+4", + "usr/share/zoneinfo/Etc/GMT+5", + "usr/share/zoneinfo/Etc/GMT+6", + "usr/share/zoneinfo/Etc/GMT+7", + "usr/share/zoneinfo/Etc/GMT+8", + "usr/share/zoneinfo/Etc/GMT+9", + "usr/share/zoneinfo/Etc/GMT-0", + "usr/share/zoneinfo/Etc/GMT-1", + "usr/share/zoneinfo/Etc/GMT-10", + "usr/share/zoneinfo/Etc/GMT-11", + "usr/share/zoneinfo/Etc/GMT-12", + "usr/share/zoneinfo/Etc/GMT-13", + "usr/share/zoneinfo/Etc/GMT-14", + "usr/share/zoneinfo/Etc/GMT-2", + "usr/share/zoneinfo/Etc/GMT-3", + "usr/share/zoneinfo/Etc/GMT-4", + "usr/share/zoneinfo/Etc/GMT-5", + "usr/share/zoneinfo/Etc/GMT-6", + "usr/share/zoneinfo/Etc/GMT-7", + "usr/share/zoneinfo/Etc/GMT-8", + "usr/share/zoneinfo/Etc/GMT-9", + "usr/share/zoneinfo/Etc/GMT0", + "usr/share/zoneinfo/Etc/Greenwich", + "usr/share/zoneinfo/Etc/UCT", + "usr/share/zoneinfo/Etc/UTC", + "usr/share/zoneinfo/Etc/Universal", + "usr/share/zoneinfo/Etc/Zulu", + "usr/share/zoneinfo/Europe/Amsterdam", + "usr/share/zoneinfo/Europe/Andorra", + "usr/share/zoneinfo/Europe/Astrakhan", + "usr/share/zoneinfo/Europe/Athens", + "usr/share/zoneinfo/Europe/Belfast", + "usr/share/zoneinfo/Europe/Belgrade", + "usr/share/zoneinfo/Europe/Berlin", + "usr/share/zoneinfo/Europe/Bratislava", + "usr/share/zoneinfo/Europe/Brussels", + "usr/share/zoneinfo/Europe/Bucharest", + "usr/share/zoneinfo/Europe/Budapest", + "usr/share/zoneinfo/Europe/Busingen", + "usr/share/zoneinfo/Europe/Chisinau", + "usr/share/zoneinfo/Europe/Copenhagen", + "usr/share/zoneinfo/Europe/Dublin", + "usr/share/zoneinfo/Europe/Gibraltar", + "usr/share/zoneinfo/Europe/Guernsey", + "usr/share/zoneinfo/Europe/Helsinki", + "usr/share/zoneinfo/Europe/Isle_of_Man", + "usr/share/zoneinfo/Europe/Istanbul", + "usr/share/zoneinfo/Europe/Jersey", + "usr/share/zoneinfo/Europe/Kaliningrad", + "usr/share/zoneinfo/Europe/Kiev", + "usr/share/zoneinfo/Europe/Kirov", + "usr/share/zoneinfo/Europe/Kyiv", + "usr/share/zoneinfo/Europe/Lisbon", + "usr/share/zoneinfo/Europe/Ljubljana", + "usr/share/zoneinfo/Europe/London", + "usr/share/zoneinfo/Europe/Luxembourg", + "usr/share/zoneinfo/Europe/Madrid", + "usr/share/zoneinfo/Europe/Malta", + "usr/share/zoneinfo/Europe/Mariehamn", + "usr/share/zoneinfo/Europe/Minsk", + "usr/share/zoneinfo/Europe/Monaco", + "usr/share/zoneinfo/Europe/Moscow", + "usr/share/zoneinfo/Europe/Nicosia", + "usr/share/zoneinfo/Europe/Oslo", + "usr/share/zoneinfo/Europe/Paris", + "usr/share/zoneinfo/Europe/Podgorica", + "usr/share/zoneinfo/Europe/Prague", + "usr/share/zoneinfo/Europe/Riga", + "usr/share/zoneinfo/Europe/Rome", + "usr/share/zoneinfo/Europe/Samara", + "usr/share/zoneinfo/Europe/San_Marino", + "usr/share/zoneinfo/Europe/Sarajevo", + "usr/share/zoneinfo/Europe/Saratov", + "usr/share/zoneinfo/Europe/Simferopol", + "usr/share/zoneinfo/Europe/Skopje", + "usr/share/zoneinfo/Europe/Sofia", + "usr/share/zoneinfo/Europe/Stockholm", + "usr/share/zoneinfo/Europe/Tallinn", + "usr/share/zoneinfo/Europe/Tirane", + "usr/share/zoneinfo/Europe/Tiraspol", + "usr/share/zoneinfo/Europe/Ulyanovsk", + "usr/share/zoneinfo/Europe/Uzhgorod", + "usr/share/zoneinfo/Europe/Vaduz", + "usr/share/zoneinfo/Europe/Vatican", + "usr/share/zoneinfo/Europe/Vienna", + "usr/share/zoneinfo/Europe/Vilnius", + "usr/share/zoneinfo/Europe/Volgograd", + "usr/share/zoneinfo/Europe/Warsaw", + "usr/share/zoneinfo/Europe/Zagreb", + "usr/share/zoneinfo/Europe/Zaporozhye", + "usr/share/zoneinfo/Europe/Zurich", + "usr/share/zoneinfo/Indian/Antananarivo", + "usr/share/zoneinfo/Indian/Chagos", + "usr/share/zoneinfo/Indian/Christmas", + "usr/share/zoneinfo/Indian/Cocos", + "usr/share/zoneinfo/Indian/Comoro", + "usr/share/zoneinfo/Indian/Kerguelen", + "usr/share/zoneinfo/Indian/Mahe", + "usr/share/zoneinfo/Indian/Maldives", + "usr/share/zoneinfo/Indian/Mauritius", + "usr/share/zoneinfo/Indian/Mayotte", + "usr/share/zoneinfo/Indian/Reunion", + "usr/share/zoneinfo/Mexico/BajaNorte", + "usr/share/zoneinfo/Mexico/BajaSur", + "usr/share/zoneinfo/Mexico/General", + "usr/share/zoneinfo/Pacific/Apia", + "usr/share/zoneinfo/Pacific/Auckland", + "usr/share/zoneinfo/Pacific/Bougainville", + "usr/share/zoneinfo/Pacific/Chatham", + "usr/share/zoneinfo/Pacific/Chuuk", + "usr/share/zoneinfo/Pacific/Easter", + "usr/share/zoneinfo/Pacific/Efate", + "usr/share/zoneinfo/Pacific/Enderbury", + "usr/share/zoneinfo/Pacific/Fakaofo", + "usr/share/zoneinfo/Pacific/Fiji", + "usr/share/zoneinfo/Pacific/Funafuti", + "usr/share/zoneinfo/Pacific/Galapagos", + "usr/share/zoneinfo/Pacific/Gambier", + "usr/share/zoneinfo/Pacific/Guadalcanal", + "usr/share/zoneinfo/Pacific/Guam", + "usr/share/zoneinfo/Pacific/Honolulu", + "usr/share/zoneinfo/Pacific/Johnston", + "usr/share/zoneinfo/Pacific/Kanton", + "usr/share/zoneinfo/Pacific/Kiritimati", + "usr/share/zoneinfo/Pacific/Kosrae", + "usr/share/zoneinfo/Pacific/Kwajalein", + "usr/share/zoneinfo/Pacific/Majuro", + "usr/share/zoneinfo/Pacific/Marquesas", + "usr/share/zoneinfo/Pacific/Midway", + "usr/share/zoneinfo/Pacific/Nauru", + "usr/share/zoneinfo/Pacific/Niue", + "usr/share/zoneinfo/Pacific/Norfolk", + "usr/share/zoneinfo/Pacific/Noumea", + "usr/share/zoneinfo/Pacific/Pago_Pago", + "usr/share/zoneinfo/Pacific/Palau", + "usr/share/zoneinfo/Pacific/Pitcairn", + "usr/share/zoneinfo/Pacific/Pohnpei", + "usr/share/zoneinfo/Pacific/Ponape", + "usr/share/zoneinfo/Pacific/Port_Moresby", + "usr/share/zoneinfo/Pacific/Rarotonga", + "usr/share/zoneinfo/Pacific/Saipan", + "usr/share/zoneinfo/Pacific/Samoa", + "usr/share/zoneinfo/Pacific/Tahiti", + "usr/share/zoneinfo/Pacific/Tarawa", + "usr/share/zoneinfo/Pacific/Tongatapu", + "usr/share/zoneinfo/Pacific/Truk", + "usr/share/zoneinfo/Pacific/Wake", + "usr/share/zoneinfo/Pacific/Wallis", + "usr/share/zoneinfo/Pacific/Yap", + "usr/share/zoneinfo/US/Alaska", + "usr/share/zoneinfo/US/Aleutian", + "usr/share/zoneinfo/US/Arizona", + "usr/share/zoneinfo/US/Central", + "usr/share/zoneinfo/US/East-Indiana", + "usr/share/zoneinfo/US/Eastern", + "usr/share/zoneinfo/US/Hawaii", + "usr/share/zoneinfo/US/Indiana-Starke", + "usr/share/zoneinfo/US/Michigan", + "usr/share/zoneinfo/US/Mountain", + "usr/share/zoneinfo/US/Pacific", + "usr/share/zoneinfo/US/Samoa" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "xz-libs@5.8.3-r0", + "Name": "xz-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "1ae658a5f132a091" + }, + "Version": "5.8.3-r0", + "Arch": "x86_64", + "SrcName": "xz", + "SrcVersion": "5.8.3-r0", + "Licenses": [ + "GPL-2.0-or-later", + "0BSD", + "Public-Domain", + "LGPL-2.1-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:4c92c5be0c5bef404e93c880eba9037a9b147347", + "InstalledFiles": [ + "usr/lib/liblzma.so.5", + "usr/lib/liblzma.so.5.8.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "zlib@1.3.2-r0", + "Name": "zlib", + "Identifier": { + "PURL": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e37054a2982d6c16" + }, + "Version": "1.3.2-r0", + "Arch": "x86_64", + "SrcName": "zlib", + "SrcVersion": "1.3.2-r0", + "Licenses": [ + "Zlib" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:dd4c3d102acaef2a71a1495951d55fabc8680613", + "InstalledFiles": [ + "usr/lib/libz.so.1", + "usr/lib/libz.so.1.3.2" + ], + "AnalyzedBy": "apk" + } + ], + "Vulnerabilities": [ + { + "VulnerabilityID": "CVE-2026-85091", + "PkgID": "zlib@1.3.2-r0", + "PkgName": "zlib", + "PkgIdentifier": { + "PURL": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e37054a2982d6c16" + }, + "InstalledVersion": "1.3.2-r0", + "FixedVersion": "1.3.2-r1", + "Status": "fixed", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "PrimaryURL": "https://avd.aquasec.com/nvd/cve-2026-85091", + "DataSource": { + "ID": "alpine", + "Name": "Alpine Secdb", + "URL": "https://secdb.alpinelinux.org/" + }, + "Fingerprint": "sha256:1d2bed479202d1fc9f68eacc57b530b660b8b99c3382887448dd585a61bc7567", + "Title": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vul ...", + "Description": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.", + "Severity": "MEDIUM", + "CweIDs": [ + "CWE-787" + ], + "VendorSeverity": { + "ubuntu": 2 + }, + "References": [ + "https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490", + "https://github.com/madler/zlib", + "https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393", + "https://www.cve.org/CVERecord?id=CVE-2026-85091", + "https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate" + ], + "PublishedDate": "2026-09-03T13:06:20.573Z", + "LastModifiedDate": "2026-09-09T20:41:07.123Z" + } + ] + }, + { + "Target": "Python", + "Class": "lang-pkgs", + "Type": "python-pkg", + "Packages": [ + { + "Name": "PyJWT", + "Identifier": { + "PURL": "pkg:pypi/pyjwt@2.15.1", + "UID": "d3f5f9a421b8abc9" + }, + "Version": "2.15.1", + "Licenses": [ + "MIT" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "cffi", + "Identifier": { + "PURL": "pkg:pypi/cffi@2.1.1", + "UID": "21042e2f37e33c05" + }, + "Version": "2.1.1", + "Licenses": [ + "MIT-0" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "cryptography", + "Identifier": { + "PURL": "pkg:pypi/cryptography@50.0.1", + "UID": "dcb3df6383fe2a60" + }, + "Version": "50.0.1", + "Licenses": [ + "Apache-2.0 OR BSD-3-Clause" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "informed-decision", + "Identifier": { + "PURL": "pkg:pypi/informed-decision@0.2.0", + "UID": "7989f2afae8ff568" + }, + "Version": "0.2.0", + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "pycparser", + "Identifier": { + "PURL": "pkg:pypi/pycparser@3.0", + "UID": "e5a4d03f15a695ff" + }, + "Version": "3.0", + "Licenses": [ + "BSD-3-Clause" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "waitress", + "Identifier": { + "PURL": "pkg:pypi/waitress@3.0.2", + "UID": "806e218e1c1e85f" + }, + "Version": "3.0.2", + "Licenses": [ + "ZPL-2.1" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + } + ] + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json new file mode 100644 index 0000000..ddc0cea --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json @@ -0,0 +1,52 @@ +{ + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "policy": { + "origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080", + "package": "informed-decision.compact-sitting", + "version": "v13", + "package_digest": "sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873", + "pod_name": "flex-auth-informed-decision-sitting" + }, + "keycape_egress_ips": [ + "92.205.62.239" + ], + "storage_class": "local-path", + "ordinary_approval_ids": [ + "2ce76d7f-01c3-4b63-8476-8d1230679769", + "c2af4bcf-15b4-4305-aac1-acc7e4dcb099", + "dc22666a-d5d7-46bc-9490-ebe9fe09dc38" + ], + "lifecycle_policy": { + "package": "informed-decision.lifecycle", + "version": "v2", + "package_digest": "sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c", + "origin": "http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080", + "pod_name": "flex-auth-informed-decision-lifecycle" + }, + "lifecycle_delivery": true, + "intake_attributes": true, + "intake_delivery": { + "hub_origin": "http://state-hub.state-hub.svc.cluster.local:8000" + }, + "workload_api": { + "registries_configmap": "informed-decision-workload-registry", + "peers": [ + { + "namespace": "state-hub", + "app": "state-hub" + } + ], + "api_egress": [ + { + "ip": "10.43.0.1", + "port": 443 + }, + { + "ip": "92.205.62.239", + "port": 6443 + } + ], + "intake": true, + "lifecycle": true + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json new file mode 100644 index 0000000..25758da --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json @@ -0,0 +1,267 @@ +{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover", + "argocd.argoproj.io/tracking-id": "informed-decision:apps/Deployment:informed-decision/informed-decision" + }, + "name": "informed-decision", + "namespace": "informed-decision" + }, + "spec": { + "progressDeadlineSeconds": 600, + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision" + } + }, + "strategy": { + "type": "Recreate" + }, + "template": { + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "labels": { + "app.kubernetes.io/component": "review", + "app.kubernetes.io/name": "informed-decision" + } + }, + "spec": { + "automountServiceAccountToken": false, + "containers": [ + { + "env": [ + { + "name": "INFD_KEYCAPE_ISSUER", + "value": "https://kc.coulomb.social" + }, + { + "name": "INFD_CONTAINER_CONFIG", + "value": "/configuration/runtime.json" + } + ], + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "livenessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "name": "informed-decision", + "ports": [ + { + "containerPort": 8080, + "name": "http" + }, + { + "containerPort": 8081, + "name": "workload" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "resources": { + "limits": { + "cpu": "500m", + "memory": "256Mi" + }, + "requests": { + "cpu": "5m", + "memory": "64Mi" + } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true + }, + "startupProbe": { + "failureThreshold": 12, + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "volumeMounts": [ + { + "mountPath": "/data", + "name": "data" + }, + { + "mountPath": "/run/informed-decision", + "name": "runtime" + }, + { + "mountPath": "/tmp", + "name": "tmp" + }, + { + "mountPath": "/configuration", + "name": "configuration", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/policy", + "name": "caller", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/audit", + "name": "audit", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/kubernetes", + "name": "kubernetes-api", + "readOnly": true + }, + { + "mountPath": "/workload-registry", + "name": "workload-registry", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/requester", + "name": "sitting-requester", + "readOnly": true + } + ] + } + ], + "securityContext": { + "fsGroup": 10001, + "fsGroupChangePolicy": "OnRootMismatch", + "runAsGroup": 10001, + "runAsNonRoot": true, + "runAsUser": 10001, + "seccompProfile": { + "type": "RuntimeDefault" + } + }, + "serviceAccountName": "review", + "terminationGracePeriodSeconds": 45, + "volumes": [ + { + "name": "data", + "persistentVolumeClaim": { + "claimName": "informed-decision-data" + } + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "runtime" + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "tmp" + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-runtime-6c221878d051" + }, + "name": "configuration" + }, + { + "name": "caller", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "audience": "flex-auth", + "expirationSeconds": 3600, + "path": "token" + } + } + ] + } + }, + { + "name": "audit", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "token", + "path": "token" + } + ], + "secretName": "informed-decision-audit" + } + }, + { + "name": "kubernetes-api", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "expirationSeconds": 600, + "path": "token" + } + }, + { + "configMap": { + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ], + "name": "kube-root-ca.crt" + } + } + ] + } + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-workload-registry" + }, + "name": "workload-registry" + }, + { + "name": "sitting-requester", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "client-secret", + "path": "client-secret" + } + ], + "optional": false, + "secretName": "informed-decision-sitting-requester" + } + } + ] + } + } + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py new file mode 100644 index 0000000..782964b --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py @@ -0,0 +1,41 @@ +"""Read-only exact Deployment and admission boundaries; no mutation authority.""" +import copy + +BASE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173' +CANDIDATE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a' + + +def projection(value): + value = copy.deepcopy(value) + value.pop('status', None) + for key in ('resourceVersion', 'generation', 'creationTimestamp', 'managedFields'): + value['metadata'].pop(key, None) + for key in ('kubectl.kubernetes.io/last-applied-configuration', 'deployment.kubernetes.io/revision'): + value['metadata'].get('annotations', {}).pop(key, None) + return value + + +def check_current(current, sealed): + if projection(current) != sealed: + raise ValueError('sealed live UID or configuration changed') + + +def check_admitted(admitted, sealed): + expected = copy.deepcopy(sealed) + containers = expected['spec']['template']['spec']['containers'] + if len(containers) != 1 or containers[0]['name'] != 'informed-decision' or containers[0]['image'] != BASE: + raise ValueError('unexpected baseline container identity') + containers[0]['image'] = CANDIDATE + if projection(admitted) != expected: + raise ValueError('admission changed configuration beyond the sole image pin') + + +def transport_result(exit_code, output): + import json + try: + value = json.loads(output) + except (ValueError, TypeError): + return {'all_checks_pass': False, 'reason': 'invalid transport result'} + if exit_code != 0 or not isinstance(value, dict) or value.get('all_checks_pass') is not True: + return {'all_checks_pass': False, 'reason': 'read-only preflight refused'} + return value diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py new file mode 100644 index 0000000..0736145 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py @@ -0,0 +1,21 @@ +import copy,json,time +from datetime import datetime,timezone +from informed_decision.policy import PolicyClient,CONTRACT,submitted_digest +pin='sha256:'+'b'*64 +req={'id':'image-purpose-fixture','tenant':'tenant:platform','subject':{'id':'synthetic','type':'service','tenant':'tenant:platform'},'resource':{'id':'memo:fixture','type':'memo','system':'informed-decision','tenant':'tenant:platform'},'action':'register','context':{}} +class Transport: + def request(self,*args,**kwargs): + now=time.time(); stamp=lambda t:datetime.fromtimestamp(t,timezone.utc).isoformat() + b={**copy.deepcopy({k:req[k] for k in ('tenant','subject','action','resource','context')}),'request_digest':'sha256:'+'e'*64,'submitted_request_digest':submitted_digest(req)} + if self.purpose!='ABSENT':b['purpose']=self.purpose + d={'id':'synthetic-decision','contract_version':CONTRACT,'request_id':req['id'],'effect':'allow','matched_policy_version':'v1','subject':req['subject'],'resource':req['resource'],'binding':b,'lifetime':{'kind':'ttl','not_before':stamp(now-1),'expires_at':stamp(now+60)},'provenance':{'policy_package':'fixture','policy_version':'v1','policy_package_digest':pin,'registry_snapshot_digest':'sha256:'+'c'*64,'evaluator':'flex-auth/fixture','decision_time':stamp(now)}} + return 200,d +checks=[] +for purpose in ('ABSENT','','readback','enforcement','unknown',None,False,0,[],{}): + t=Transport();t.purpose=purpose + c=PolicyClient('https://fixture.invalid',lambda:'synthetic-only',package='fixture',version='v1',package_digest=pin,transport=t) + o=c.check(req) + if purpose in ('ABSENT',''):assert o.outcome=='allow';o.require_current(time.time()) + else:assert o.outcome=='invalid_decision' and o.decision_json is None + checks.append(str(purpose)) +print(json.dumps({'installed_image_purpose_variants':len(checks),'binding_forms_allowed':2,'advisory_or_malformed_refused':8,'synthetic_only':True,'native_provider':False})) diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md new file mode 100644 index 0000000..68f5867 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md @@ -0,0 +1,29 @@ +# Informed Decision purpose overlay release + +## Requested decision + +Approve the exact purpose-only image rollout and protected real-data backup/restore protocol for the existing Informed Decision service on railiance01. This request is separate from the already approved config-only repair. Only the existing Deployment image changes through the owner's manual Argo workflow, with prune disabled. Runtime ConfigMap `informed-decision-runtime-6c221878d051`, schema5, PVC, credentials, audience, policies, registries, access, replica1 and Recreate strategy remain fixed. Execute by 2026-10-12T23:59:59Z, after refreshed sealed-source/UID/configuration checks and backup/restore gates. Expiry stops authorization for an unstarted release; it does not install a controller or automatically roll back an already released image. + +## Artifact and known finding + +Actual owner CI task11484/run3 published immutable image `sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a` from source `3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168`. Anonymous registry verification preserves all eight base compressed blobs/rootfs layers and adds only policy.py with exact source hash and mode0644. Legacy-builder media-type/default config serialization differences are recorded; the runtime semantics remain unchanged. Pulled published image executes as UID10001/GID10001 and passes ten installed checks: two supported binding forms, eight advisory/malformed refusals. Tests use synthetic transport and do not claim new native PDP authorization proof. The two failed CI attempts remain in the same trial history. + +Actual unfiltered pinned scanner/DB evidence covers44packages: zero HIGH/CRITICAL, **one fixable MEDIUM**, CVE-2026-85091, zlib1.3.2-r0 fixed in1.3.2-r1. Actual current-base scan has the identical finding. Approving this packet explicitly permits this inherited finding during this narrow purpose release; it is not a RiskNexus estate risk grade or zero-CVE claim. Owner record INFD-RISK-20261011-ZLIB-85091 and live task INFD-WP-0009-T05 require separate base refresh and native approval, reviewed by2026-10-18. That review date is manual follow-through, with no auto-controller claim. Scanner notes Alpine3.24 absent EOL list; OS vulnerability detection ran against38OSpackages. Unknown vulnerabilities remain outside snapshot knowledge. + +## Native baseline and gates + +Fresh read-only capture01:25:38Z: existing Deployment UIDa588e10a, Ready1, image7f5c, unchanged runtime6c; native admission preserves the full configuration plus exactly the proposed image. Clientdiff returns1. Requests3460/4000mCPU86%, memory9472Mi59%; refresh before release. Existing Argo Application UID499868f2 is manual, target7db8485, Healthy with pre-existing OutOfSync status. Do not treat a scoped Deployment release as full-app reconciliation. Preserve its tracking-id; no unrelated resource sync/prune/adoption. + +The read-only helper binds original source/helper/render/baseline hashes, checks exact fresh live UID/configuration and admission, and writes a separate execution receipt outside this sealed packet. Failed initial raw Kustomize metadata check is retained: direct kubectl apply would drop Argo tracking-id. The reviewed selected Deployment explicitly retains that existing ID, matching Argo ownership. Any unrelated drift, different UID, altered admission, unavailable protected backup capacity, uncertain backup, restore mismatch or unhealthy baseline stops the release. + +## Protected backup and release + +Use the existing owner admin's SQLite backup API, not a raw copy of the live database/WAL. Protect directories0700/files0600, owned by10001. Retain independently protected off-cluster snapshot custody and only count/hash receipts. No database contents, caller tokens, requester Secret or runtime credential files enter Git, State Hub, logs or this packet. Native backup and offline real-data restore have not yet occurred. Use an isolated private disposable copy, networknone and no runtime config/token mounts, validate schema5/integrity and frozen snapshot counts, then clean only the disposable restored copy. Retain the original snapshot. The attached protocol binds case-specific paths and fail-closed capacity/custody checks. + +Refresh a consistent online snapshot immediately before image-only cutover. This protocol does not assert traffic/dispatcher quiescence. Current and candidate share schema5 and unchanged store code; rollback retains the latest live database and all new/uncertain evidence. Stop the old writer before the new one with existing Recreate and single-writer lock. Do not restore an older snapshot over later writes, discard unresolved external effects, scale other workloads, change policies/identity/custody, or create human dispositions to make checks green. + +Pin the existing Application to the exact owner commit containing the approved candidate source hashes, and manually sync only Deployment/informed-decision with prune=false. Verify actualimage/module/mode/UID, health/readiness and installed purpose refusals on the real placement; explicitly distinguish synthetic-transport checks from actual provider evidence. Existing native binding/lifecycle behavior must remain available. If unhealthy or verification fails, return Application source to7db8485 and scoped-sync prior same-schema image7f5c, preserving current evidence database; retain failed outcomes. Any data recovery beyond this same-schema image rollback is a separate founder decision. + +## Alternatives and estimates + +Proceed with this narrow release plus explicit inherited-medium follow-through, or defer and prepare a separate base/dependency refresh before any release. No additional recurring hosting is proposed: estimated incremental infrastructure EUR0, with private storage and attended engineering/recovery time unpriced. Risks include a brief Recreate interruption, private backup custody errors, caller refusal when advisory responses were improperly treated as binding, and the disclosed inherited finding. This decision does not promote agent autonomy or grant unrelated work. diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json new file mode 100644 index 0000000..8cbb1c0 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json @@ -0,0 +1,47 @@ +{ + "node_allocatable_cpu_m": 4000, + "node_requested_cpu_m": 3460, + "captured_at": "2026-10-11T01:30:33.674360+00:00", + "native_workload_changed": false, + "native_backup_restore_executed": false, + "argo": { + "uid": "499868f2-eabc-4df4-ae31-b89ce58d750d", + "repoURL": "https://forgejo.coulomb.social/coulomb/informed-decision.git", + "targetRevision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "path": "deploy/lifecycle", + "destination": { + "namespace": "informed-decision", + "server": "https://kubernetes.default.svc" + }, + "automated": false, + "sync": { + "comparedTo": { + "destination": { + "namespace": "informed-decision", + "server": "https://kubernetes.default.svc" + }, + "source": { + "path": "deploy/lifecycle", + "repoURL": "https://forgejo.coulomb.social/coulomb/informed-decision.git", + "targetRevision": "7db8485ffecdebfabd77a9daec085553c74bf0bf" + } + }, + "revision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "status": "OutOfSync" + }, + "health": { + "lastTransitionTime": "2026-10-10T23:14:52Z", + "status": "Healthy" + } + }, + "live_ready_replicas": 1, + "admitted_uid": "a588e10a-90d2-4883-975e-6dd8b8feca92", + "server_dry_run_passed": true, + "admitted_spec_exactly_live_plus_image": true, + "client_diff_exit": 1, + "client_diff_sha256": "0506825b408bb2c7b9dcb00a5ee655dc9ec23b09b308d42bb013d72672f8f415", + "node_allocated_resources": "(Total limits may be over 100 percent, i.e., overcommitted.)\n Resource Requests Limits\n -------- -------- ------\n cpu 3460m (86%) 36200m (905%)\n memory 9472Mi (59%) 32898Mi (205%)\n ephemeral-storage 0 (0%) 0 (0%)\n hugepages-1Gi 0 (0%) 0 (0%)\n hugepages-2Mi 0 (0%) 0 (0%)", + "all_checks_pass": true, + "sealed_preflight_inputs_sha256": "0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944", + "fresh_execution_receipt": true +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json new file mode 100644 index 0000000..bc38933 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json @@ -0,0 +1,222 @@ +{ + "architecture": "amd64", + "config": { + "Hostname": "", + "Domainname": "", + "User": "10001:10001", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + }, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "Cmd": null, + "Image": "sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883", + "Volumes": null, + "WorkingDir": "/app", + "Entrypoint": [ + "informed-decision-container" + ], + "OnBuild": null, + "Labels": { + "org.opencontainers.image.base.digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "org.opencontainers.image.revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "social.coulomb.release.scope": "INFD-WP-0009-T04/purpose-overlay-v1", + "social.coulomb.source.policy.sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62" + } + }, + "container_config": { + "Hostname": "", + "Domainname": "", + "User": "10001:10001", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + }, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "Cmd": [ + "/bin/sh", + "-c", + "#(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py " + ], + "Image": "sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883", + "Volumes": null, + "WorkingDir": "/app", + "Entrypoint": [ + "informed-decision-container" + ], + "OnBuild": null, + "Labels": { + "org.opencontainers.image.base.digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "org.opencontainers.image.revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "social.coulomb.release.scope": "INFD-WP-0009-T04/purpose-overlay-v1", + "social.coulomb.source.policy.sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62" + } + }, + "created": "2026-10-11T01:21:04.787527697Z", + "docker_version": "27.5.1", + "history": [ + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "CMD [\"/bin/sh\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV LANG=C.UTF-8", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "RUN /bin/sh -c set -eux; \tapk add --no-cache \t\tca-certificates \t\ttzdata \t; # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_VERSION=3.12.14", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:10:30.672225972Z", + "created_by": "RUN /bin/sh -c set -eux; \t\tapk add --no-cache --virtual .build-deps \t\tbluez-dev \t\tbzip2-dev \t\tdpkg-dev dpkg \t\tfindutils \t\tg++ \t\tgcc \t\tgdbm-dev \t\tgnupg \t\tlibc-dev \t\tlibffi-dev \t\tlibnsl-dev \t\tlibtirpc-dev \t\tlinux-headers \t\tmake \t\tncurses-dev \t\topenssl-dev \t\tpax-utils \t\treadline-dev \t\tsqlite-dev \t\ttar \t\ttcl-dev \t\ttk \t\ttk-dev \t\tutil-linux-dev \t\txz \t\txz-dev \t\tzlib-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \techo \"$PYTHON_SHA256 *python.tar.xz\" | sha256sum -c -; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t$(test \"${gnuArch%%-*}\" != 'riscv64' && echo '--with-lto') \t\t--with-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"-DTHREAD_STACK_SIZE=0x100000\"; \tLDFLAGS=\"${LDFLAGS:-} -Wl,--strip-all\"; \tarch=\"$(apk --print-arch)\"; \tcase \"$arch\" in \t\tx86_64|aarch64) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\"; \t\t\t;; \t\tx86) \t\t\t;; \t\t*) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\"; \t\t\t;; \tesac; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\$\\$ORIGIN/../lib'\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \t\t| tr ',' '\\n' \t\t| sort -u \t\t| awk 'system(\"[ -e /usr/local/lib/\" $1 \" ]\") == 0 { next } { print \"so:\" $1 }' \t\t| xargs -rt apk add --no-network --virtual .python-rundeps \t; \tapk del --no-network .build-deps; \t\texport PYTHONDONTWRITEBYTECODE=1; \tpython3 --version; \tpip3 --version # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "RUN /bin/sh -c set -eux; \tfor src in idle3 pip3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "CMD [\"python3\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "RUN /bin/sh -c apk add --no-cache 'libuuid>=2.42.3-r1' && addgroup -S -g 10001 informed && adduser -S -u 10001 -G informed -H informed # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:55.351944978+02:00", + "created_by": "COPY /opt/venv /opt/venv # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.462092072+02:00", + "created_by": "RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "WORKDIR /app", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "USER 10001:10001", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "EXPOSE [8080/tcp 8081/tcp]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "ENTRYPOINT [\"informed-decision-container\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-11T01:15:11.991443676Z", + "created_by": "/bin/sh -c #(nop) ARG SOURCE_REVISION", + "empty_layer": true + }, + { + "created": "2026-10-11T01:21:04.716126392Z", + "created_by": "/bin/sh -c #(nop) LABEL org.opencontainers.image.revision=3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168 org.opencontainers.image.base.digest=sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 social.coulomb.source.policy.sha256=9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62 social.coulomb.release.scope=INFD-WP-0009-T04/purpose-overlay-v1", + "empty_layer": true + }, + { + "created": "2026-10-11T01:21:04.787527697Z", + "created_by": "/bin/sh -c #(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py " + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02", + "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + ] + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json new file mode 100644 index 0000000..71f69b0 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json @@ -0,0 +1,56 @@ +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 10428, + "digest": "sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 3846391, + "digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 408093, + "digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 16346740, + "digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 248, + "digest": "sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 49243, + "digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 10216362, + "digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 459, + "digest": "sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 93, + "digest": "sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 3586, + "digest": "sha256:cfee29c2f8119d2a39714ecbe5095a2dc1c986054f2e1fe0a6565163242417e3" + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json new file mode 100644 index 0000000..f0fa85b --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json @@ -0,0 +1,21 @@ +{ + "id": "INFD-RISK-20261011-ZLIB-85091", + "kind": "owner-vulnerability-follow-through", + "owner": "informed-decision", + "task": "INFD-WP-0009-T05", + "status": "open", + "created": "2026-10-11", + "review_due": "2026-10-18", + "finding": "CVE-2026-85091", + "scanner_severity": "MEDIUM", + "estate_risk_grade": null, + "affected_package": "zlib", + "installed": "1.3.2-r0", + "fixed": "1.3.2-r1", + "actual_current_base_and_candidate_findings_identical": true, + "source_evidence": "security-summary.json, trivy-full.json, base-trivy-full.json", + "human_temporary_disposition": "pending", + "follow_through": "Prepare a separately source-bound official-base/dependency refresh through normal owner CI, verify full scan and runtime compatibility, obtain distinct native release approval before updating this workload", + "manual_review_expiry": "Due date requires owner review/escalation if unresolved; no automatic rollback/controller is installed", + "close_condition": "Verified installed native fixed package and full unfiltered rescan; preserve original detection and any human disposition" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json new file mode 100644 index 0000000..128e290 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json @@ -0,0 +1,261 @@ +{ + "kind": "informed-decision.memo-intake", + "version": 1, + "idempotency_key": "infd-20261011-purpose-overlay-r1-v1", + "memo_class": "decision-record", + "review_group": "net-kingdom-admins", + "drafted_by": "custodian-codex", + "approval_intent": { + "action": "administer", + "principal": "informed-decision", + "purpose": "Approve exact image-only purpose overlay release plus protected native evidence backup/restore gates and explicit inherited fixable-medium owner follow-through; no unrelated grant.", + "target": { + "id": "INFD-WP-0009-T04/purpose-overlay-v1", + "type": "runtime-change", + "system": "railiance01" + } + }, + "memo": { + "id": "infd-20261011-purpose-overlay-r1", + "version": 1, + "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", + "requested_act": "approve", + "binding_level": "organizational", + "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Protected real-data backup/restore and fresh sealed-source/UID/configuration gates required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "binding": { + "principal": { + "id": "pending-human-session", + "kind": "person", + "display_name": "Founder review" + }, + "target": { + "kind": "environment", + "id": "realm:kubernetes/railiance01/informed-decision", + "label": "Informed Decision image-only purpose hardening on railiance01", + "environment": "production" + }, + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedpreflight+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + }, + "step_kind": "approve", + "packet": [ + { + "item_id": "decision-packet-md", + "label": "decision-packet.md", + "hash": "sha256:7f6d8987f65dff479eeead67b7ca940ef44c22c1cdbdd6ca33fd732b824c8f02" + }, + { + "item_id": "proposal-json", + "label": "proposal.json", + "hash": "sha256:08c5573eaad05efd24b6df6737d33e7189543eb621f21704e38bab4326094914" + }, + { + "item_id": "candidate-admission-json", + "label": "candidate-admission.json", + "hash": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "item_id": "rollback-admission-json", + "label": "rollback-admission.json", + "hash": "sha256:22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "item_id": "candidate-deployment-json", + "label": "candidate-deployment.json", + "hash": "sha256:722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "item_id": "rollback-deployment-json", + "label": "rollback-deployment.json", + "hash": "sha256:39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "item_id": "published-verification-json", + "label": "published-verification.json", + "hash": "sha256:e304dd29571bf7d7b9f1db2ade0163dd39cfec012a5ce6986139f019f37e65a2" + }, + { + "item_id": "registry-proof-json", + "label": "registry-proof.json", + "hash": "sha256:5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "item_id": "security-summary-json", + "label": "security-summary.json", + "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "item_id": "trivy-full-json", + "label": "trivy-full.json", + "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "item_id": "sbom-cdx-json", + "label": "sbom.cdx.json", + "hash": "sha256:a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + { + "item_id": "check-installed-py", + "label": "check_installed.py", + "hash": "sha256:a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + { + "item_id": "native-backup-restore-protocol-md", + "label": "native-backup-restore-protocol.md", + "hash": "sha256:aa9758d4de587d14c6ce0fdaccd84002c5c5099425b9169ca7c972a86e9d3dec" + }, + { + "item_id": "inherited-vulnerability-follow-through-json", + "label": "inherited-vulnerability-follow-through.json", + "hash": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "item_id": "native-preflight-json", + "label": "native-preflight.json", + "hash": "sha256:eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "item_id": "sealed-live-deployment-json", + "label": "sealed-live-deployment.json", + "hash": "sha256:d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "item_id": "change-guard-py", + "label": "change_guard.py", + "hash": "sha256:830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1" + }, + { + "item_id": "preflight-py", + "label": "preflight.py", + "hash": "sha256:c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834" + }, + { + "item_id": "preflight-inputs-json", + "label": "preflight-inputs.json", + "hash": "sha256:0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944" + }, + { + "item_id": "fresh-preflight-validation-json", + "label": "fresh-preflight-validation.json", + "hash": "sha256:aa1d494e42491f0619f731a836c597df9178409887d734c166a8df81f8807a27" + } + ], + "highlights": [ + { + "id": "native-custody-rollout-and-known-medium", + "item_id": "decision-packet-md", + "note": "Protected real-data snapshot/restore and a brief Recreate restart require this separate native approval. Actual scan has one fixable inherited MEDIUM, not zero CVEs; exact owner follow-through due2026-10-18 is manual, with no automatic controller. Rollback preserves latestschema5DB and allnew/uncertain evidence. Synthetic transport tests are not native PDP authority proof.", + "required_ack": true, + "severity": "warning", + "locator": { + "kind": "section", + "heading": "Requested decision" + } + } + ], + "sealed": false, + "approval_id": null, + "approval_binding_digest": null + }, + "packet": [ + { + "item_id": "decision-packet-md", + "media_type": "text/markdown", + "content": "# Informed Decision purpose overlay release\n\n## Requested decision\n\nApprove the exact purpose-only image rollout and protected real-data backup/restore protocol for the existing Informed Decision service on railiance01. This request is separate from the already approved config-only repair. Only the existing Deployment image changes through the owner's manual Argo workflow, with prune disabled. Runtime ConfigMap `informed-decision-runtime-6c221878d051`, schema5, PVC, credentials, audience, policies, registries, access, replica1 and Recreate strategy remain fixed. Execute by 2026-10-12T23:59:59Z, after refreshed sealed-source/UID/configuration checks and backup/restore gates. Expiry stops authorization for an unstarted release; it does not install a controller or automatically roll back an already released image.\n\n## Artifact and known finding\n\nActual owner CI task11484/run3 published immutable image `sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a` from source `3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168`. Anonymous registry verification preserves all eight base compressed blobs/rootfs layers and adds only policy.py with exact source hash and mode0644. Legacy-builder media-type/default config serialization differences are recorded; the runtime semantics remain unchanged. Pulled published image executes as UID10001/GID10001 and passes ten installed checks: two supported binding forms, eight advisory/malformed refusals. Tests use synthetic transport and do not claim new native PDP authorization proof. The two failed CI attempts remain in the same trial history.\n\nActual unfiltered pinned scanner/DB evidence covers44packages: zero HIGH/CRITICAL, **one fixable MEDIUM**, CVE-2026-85091, zlib1.3.2-r0 fixed in1.3.2-r1. Actual current-base scan has the identical finding. Approving this packet explicitly permits this inherited finding during this narrow purpose release; it is not a RiskNexus estate risk grade or zero-CVE claim. Owner record INFD-RISK-20261011-ZLIB-85091 and live task INFD-WP-0009-T05 require separate base refresh and native approval, reviewed by2026-10-18. That review date is manual follow-through, with no auto-controller claim. Scanner notes Alpine3.24 absent EOL list; OS vulnerability detection ran against38OSpackages. Unknown vulnerabilities remain outside snapshot knowledge.\n\n## Native baseline and gates\n\nFresh read-only capture01:25:38Z: existing Deployment UIDa588e10a, Ready1, image7f5c, unchanged runtime6c; native admission preserves the full configuration plus exactly the proposed image. Clientdiff returns1. Requests3460/4000mCPU86%, memory9472Mi59%; refresh before release. Existing Argo Application UID499868f2 is manual, target7db8485, Healthy with pre-existing OutOfSync status. Do not treat a scoped Deployment release as full-app reconciliation. Preserve its tracking-id; no unrelated resource sync/prune/adoption.\n\nThe read-only helper binds original source/helper/render/baseline hashes, checks exact fresh live UID/configuration and admission, and writes a separate execution receipt outside this sealed packet. Failed initial raw Kustomize metadata check is retained: direct kubectl apply would drop Argo tracking-id. The reviewed selected Deployment explicitly retains that existing ID, matching Argo ownership. Any unrelated drift, different UID, altered admission, unavailable protected backup capacity, uncertain backup, restore mismatch or unhealthy baseline stops the release.\n\n## Protected backup and release\n\nUse the existing owner admin's SQLite backup API, not a raw copy of the live database/WAL. Protect directories0700/files0600, owned by10001. Retain independently protected off-cluster snapshot custody and only count/hash receipts. No database contents, caller tokens, requester Secret or runtime credential files enter Git, State Hub, logs or this packet. Native backup and offline real-data restore have not yet occurred. Use an isolated private disposable copy, networknone and no runtime config/token mounts, validate schema5/integrity and frozen snapshot counts, then clean only the disposable restored copy. Retain the original snapshot. The attached protocol binds case-specific paths and fail-closed capacity/custody checks.\n\nRefresh a consistent online snapshot immediately before image-only cutover. This protocol does not assert traffic/dispatcher quiescence. Current and candidate share schema5 and unchanged store code; rollback retains the latest live database and all new/uncertain evidence. Stop the old writer before the new one with existing Recreate and single-writer lock. Do not restore an older snapshot over later writes, discard unresolved external effects, scale other workloads, change policies/identity/custody, or create human dispositions to make checks green.\n\nPin the existing Application to the exact owner commit containing the approved candidate source hashes, and manually sync only Deployment/informed-decision with prune=false. Verify actualimage/module/mode/UID, health/readiness and installed purpose refusals on the real placement; explicitly distinguish synthetic-transport checks from actual provider evidence. Existing native binding/lifecycle behavior must remain available. If unhealthy or verification fails, return Application source to7db8485 and scoped-sync prior same-schema image7f5c, preserving current evidence database; retain failed outcomes. Any data recovery beyond this same-schema image rollback is a separate founder decision.\n\n## Alternatives and estimates\n\nProceed with this narrow release plus explicit inherited-medium follow-through, or defer and prepare a separate base/dependency refresh before any release. No additional recurring hosting is proposed: estimated incremental infrastructure EUR0, with private storage and attended engineering/recovery time unpriced. Risks include a brief Recreate interruption, private backup custody errors, caller refusal when advisory responses were improperly treated as binding, and the disclosed inherited finding. This decision does not promote agent autonomy or grant unrelated work.\n" + }, + { + "item_id": "proposal-json", + "media_type": "application/json", + "content": "{\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"trial_id\": \"infd-purpose-20261011-r1\",\n \"state\": \"prepared-unapproved\",\n \"target\": \"realm:kubernetes/railiance01/informed-decision\",\n \"authority\": \"ADMINISTER; activation APPROVED only upon exact founder disposition\",\n \"candidate_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"published_source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"prior_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"prior_argo_revision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"native_object\": {\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"namespace\": \"informed-decision\",\n \"name\": \"informed-decision\",\n \"uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\"\n },\n \"argo_application_uid\": \"499868f2-eabc-4df4-ae31-b89ce58d750d\",\n \"source_gate\": \"Exact committed owner source must contain the two approved candidate file hashes in preflight-inputs.json; source preparation is not native approval\",\n \"sync_scope\": [\n \"apps:Deployment:informed-decision\"\n ],\n \"prune\": false,\n \"automated_sync\": false,\n \"runtime_configmap\": \"informed-decision-runtime-6c221878d051\",\n \"schema\": 5,\n \"requested_operations\": [\n \"Protected SQLite-consistent native backup and independently protected off-cluster custody\",\n \"Offline restore/integrity/count comparison on a private disposable volume with exact candidate, no runtime tokens/config/network\",\n \"Refresh a consistent pre-cutover snapshot, retain private copies and count-only/hash receipts\",\n \"Pin existing manual Argo Application to exact approved owner source and manually sync only existing Deployment image\",\n \"Verify health/readiness/image/module/installed fail-closed purpose checks and retained schema/count evidence; recover to prior same-schema image if needed\"\n ],\n \"execute_by\": \"2026-10-12T23:59:59Z\",\n \"temporary_vulnerability_review_due\": \"2026-10-18\",\n \"known_scan_findings\": \"0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, actual currentbase+candidate findings identical\",\n \"vulnerability_record\": \"INFD-RISK-20261011-ZLIB-85091 / INFD-WP-0009-T05\",\n \"cost_estimate_EUR\": 0,\n \"cost_limits\": \"No new recurring infrastructure; private backup storage and attended engineering/recovery time unpriced, not an autopilot cost grant\",\n \"risk_estimates\": [\n \"Brief Recreate service interruption; no concurrent new writer/surge\",\n \"Private evidence snapshot custody and disposal errors; no snapshots/tokens in public evidence\",\n \"Candidate purpose refusal may expose callers relying on advisory results as binding\",\n \"Inherited known fixable MEDIUM remains until separately approved owner remediation\",\n \"Existing Argo OutOfSync baseline is retained; no whole-app sync or unrelated repairs permitted\"\n ],\n \"rollback\": \"Manual Argo source pin back to7db8485 and scoped Deployment-only sync to7f5c image; retain current schema5 database and all post-cutover evidence, never restore older snapshot over live writes\",\n \"native_executed\": false,\n \"human_approval\": false\n}\n" + }, + { + "item_id": "candidate-admission-json", + "media_type": "application/json", + "content": "{\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"policy\": {\n \"origin\": \"http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080\",\n \"package\": \"informed-decision.compact-sitting\",\n \"version\": \"v13\",\n \"package_digest\": \"sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873\",\n \"pod_name\": \"flex-auth-informed-decision-sitting\"\n },\n \"keycape_egress_ips\": [\n \"92.205.62.239\"\n ],\n \"storage_class\": \"local-path\",\n \"ordinary_approval_ids\": [\n \"2ce76d7f-01c3-4b63-8476-8d1230679769\",\n \"c2af4bcf-15b4-4305-aac1-acc7e4dcb099\",\n \"dc22666a-d5d7-46bc-9490-ebe9fe09dc38\"\n ],\n \"lifecycle_policy\": {\n \"package\": \"informed-decision.lifecycle\",\n \"version\": \"v2\",\n \"package_digest\": \"sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c\",\n \"origin\": \"http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080\",\n \"pod_name\": \"flex-auth-informed-decision-lifecycle\"\n },\n \"lifecycle_delivery\": true,\n \"intake_attributes\": true,\n \"intake_delivery\": {\n \"hub_origin\": \"http://state-hub.state-hub.svc.cluster.local:8000\"\n },\n \"workload_api\": {\n \"registries_configmap\": \"informed-decision-workload-registry\",\n \"peers\": [\n {\n \"namespace\": \"state-hub\",\n \"app\": \"state-hub\"\n }\n ],\n \"api_egress\": [\n {\n \"ip\": \"10.43.0.1\",\n \"port\": 443\n },\n {\n \"ip\": \"92.205.62.239\",\n \"port\": 6443\n }\n ],\n \"intake\": true,\n \"lifecycle\": true\n }\n}\n" + }, + { + "item_id": "rollback-admission-json", + "media_type": "application/json", + "content": "{\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"policy\": {\n \"origin\": \"http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080\",\n \"package\": \"informed-decision.compact-sitting\",\n \"version\": \"v13\",\n \"package_digest\": \"sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873\",\n \"pod_name\": \"flex-auth-informed-decision-sitting\"\n },\n \"keycape_egress_ips\": [\n \"92.205.62.239\"\n ],\n \"storage_class\": \"local-path\",\n \"ordinary_approval_ids\": [\n \"2ce76d7f-01c3-4b63-8476-8d1230679769\",\n \"c2af4bcf-15b4-4305-aac1-acc7e4dcb099\",\n \"dc22666a-d5d7-46bc-9490-ebe9fe09dc38\"\n ],\n \"lifecycle_policy\": {\n \"package\": \"informed-decision.lifecycle\",\n \"version\": \"v2\",\n \"package_digest\": \"sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c\",\n \"origin\": \"http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080\",\n \"pod_name\": \"flex-auth-informed-decision-lifecycle\"\n },\n \"lifecycle_delivery\": true,\n \"intake_attributes\": true,\n \"intake_delivery\": {\n \"hub_origin\": \"http://state-hub.state-hub.svc.cluster.local:8000\"\n },\n \"workload_api\": {\n \"registries_configmap\": \"informed-decision-workload-registry\",\n \"peers\": [\n {\n \"namespace\": \"state-hub\",\n \"app\": \"state-hub\"\n }\n ],\n \"api_egress\": [\n {\n \"ip\": \"10.43.0.1\",\n \"port\": 443\n },\n {\n \"ip\": \"92.205.62.239\",\n \"port\": 6443\n }\n ],\n \"intake\": true,\n \"lifecycle\": true\n }\n}\n" + }, + { + "item_id": "candidate-deployment-json", + "media_type": "application/json", + "content": "{\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\",\n \"argocd.argoproj.io/tracking-id\": \"informed-decision:apps/Deployment:informed-decision/informed-decision\"\n },\n \"name\": \"informed-decision\",\n \"namespace\": \"informed-decision\"\n },\n \"spec\": {\n \"progressDeadlineSeconds\": 600,\n \"replicas\": 1,\n \"selector\": {\n \"matchLabels\": {\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"strategy\": {\n \"type\": \"Recreate\"\n },\n \"template\": {\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"labels\": {\n \"app.kubernetes.io/component\": \"review\",\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"spec\": {\n \"automountServiceAccountToken\": false,\n \"containers\": [\n {\n \"env\": [\n {\n \"name\": \"INFD_KEYCAPE_ISSUER\",\n \"value\": \"https://kc.coulomb.social\"\n },\n {\n \"name\": \"INFD_CONTAINER_CONFIG\",\n \"value\": \"/configuration/runtime.json\"\n }\n ],\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"livenessProbe\": {\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"name\": \"informed-decision\",\n \"ports\": [\n {\n \"containerPort\": 8080,\n \"name\": \"http\"\n },\n {\n \"containerPort\": 8081,\n \"name\": \"workload\"\n }\n ],\n \"readinessProbe\": {\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"resources\": {\n \"limits\": {\n \"cpu\": \"500m\",\n \"memory\": \"256Mi\"\n },\n \"requests\": {\n \"cpu\": \"5m\",\n \"memory\": \"64Mi\"\n }\n },\n \"securityContext\": {\n \"allowPrivilegeEscalation\": false,\n \"capabilities\": {\n \"drop\": [\n \"ALL\"\n ]\n },\n \"readOnlyRootFilesystem\": true\n },\n \"startupProbe\": {\n \"failureThreshold\": 12,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"volumeMounts\": [\n {\n \"mountPath\": \"/data\",\n \"name\": \"data\"\n },\n {\n \"mountPath\": \"/run/informed-decision\",\n \"name\": \"runtime\"\n },\n {\n \"mountPath\": \"/tmp\",\n \"name\": \"tmp\"\n },\n {\n \"mountPath\": \"/configuration\",\n \"name\": \"configuration\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/policy\",\n \"name\": \"caller\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/audit\",\n \"name\": \"audit\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/kubernetes\",\n \"name\": \"kubernetes-api\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/workload-registry\",\n \"name\": \"workload-registry\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/requester\",\n \"name\": \"sitting-requester\",\n \"readOnly\": true\n }\n ]\n }\n ],\n \"securityContext\": {\n \"fsGroup\": 10001,\n \"fsGroupChangePolicy\": \"OnRootMismatch\",\n \"runAsGroup\": 10001,\n \"runAsNonRoot\": true,\n \"runAsUser\": 10001,\n \"seccompProfile\": {\n \"type\": \"RuntimeDefault\"\n }\n },\n \"serviceAccountName\": \"review\",\n \"terminationGracePeriodSeconds\": 45,\n \"volumes\": [\n {\n \"name\": \"data\",\n \"persistentVolumeClaim\": {\n \"claimName\": \"informed-decision-data\"\n }\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"runtime\"\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"tmp\"\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-runtime-6c221878d051\"\n },\n \"name\": \"configuration\"\n },\n {\n \"name\": \"caller\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"audience\": \"flex-auth\",\n \"expirationSeconds\": 3600,\n \"path\": \"token\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"audit\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"token\",\n \"path\": \"token\"\n }\n ],\n \"secretName\": \"informed-decision-audit\"\n }\n },\n {\n \"name\": \"kubernetes-api\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"expirationSeconds\": 600,\n \"path\": \"token\"\n }\n },\n {\n \"configMap\": {\n \"items\": [\n {\n \"key\": \"ca.crt\",\n \"path\": \"ca.crt\"\n }\n ],\n \"name\": \"kube-root-ca.crt\"\n }\n }\n ]\n }\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-workload-registry\"\n },\n \"name\": \"workload-registry\"\n },\n {\n \"name\": \"sitting-requester\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"client-secret\",\n \"path\": \"client-secret\"\n }\n ],\n \"optional\": false,\n \"secretName\": \"informed-decision-sitting-requester\"\n }\n }\n ]\n }\n }\n }\n}\n" + }, + { + "item_id": "rollback-deployment-json", + "media_type": "application/json", + "content": "{\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\",\n \"argocd.argoproj.io/tracking-id\": \"informed-decision:apps/Deployment:informed-decision/informed-decision\"\n },\n \"name\": \"informed-decision\",\n \"namespace\": \"informed-decision\"\n },\n \"spec\": {\n \"progressDeadlineSeconds\": 600,\n \"replicas\": 1,\n \"selector\": {\n \"matchLabels\": {\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"strategy\": {\n \"type\": \"Recreate\"\n },\n \"template\": {\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"labels\": {\n \"app.kubernetes.io/component\": \"review\",\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"spec\": {\n \"automountServiceAccountToken\": false,\n \"containers\": [\n {\n \"env\": [\n {\n \"name\": \"INFD_KEYCAPE_ISSUER\",\n \"value\": \"https://kc.coulomb.social\"\n },\n {\n \"name\": \"INFD_CONTAINER_CONFIG\",\n \"value\": \"/configuration/runtime.json\"\n }\n ],\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"livenessProbe\": {\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"name\": \"informed-decision\",\n \"ports\": [\n {\n \"containerPort\": 8080,\n \"name\": \"http\"\n },\n {\n \"containerPort\": 8081,\n \"name\": \"workload\"\n }\n ],\n \"readinessProbe\": {\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"resources\": {\n \"limits\": {\n \"cpu\": \"500m\",\n \"memory\": \"256Mi\"\n },\n \"requests\": {\n \"cpu\": \"5m\",\n \"memory\": \"64Mi\"\n }\n },\n \"securityContext\": {\n \"allowPrivilegeEscalation\": false,\n \"capabilities\": {\n \"drop\": [\n \"ALL\"\n ]\n },\n \"readOnlyRootFilesystem\": true\n },\n \"startupProbe\": {\n \"failureThreshold\": 12,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"volumeMounts\": [\n {\n \"mountPath\": \"/data\",\n \"name\": \"data\"\n },\n {\n \"mountPath\": \"/run/informed-decision\",\n \"name\": \"runtime\"\n },\n {\n \"mountPath\": \"/tmp\",\n \"name\": \"tmp\"\n },\n {\n \"mountPath\": \"/configuration\",\n \"name\": \"configuration\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/policy\",\n \"name\": \"caller\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/audit\",\n \"name\": \"audit\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/kubernetes\",\n \"name\": \"kubernetes-api\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/workload-registry\",\n \"name\": \"workload-registry\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/requester\",\n \"name\": \"sitting-requester\",\n \"readOnly\": true\n }\n ]\n }\n ],\n \"securityContext\": {\n \"fsGroup\": 10001,\n \"fsGroupChangePolicy\": \"OnRootMismatch\",\n \"runAsGroup\": 10001,\n \"runAsNonRoot\": true,\n \"runAsUser\": 10001,\n \"seccompProfile\": {\n \"type\": \"RuntimeDefault\"\n }\n },\n \"serviceAccountName\": \"review\",\n \"terminationGracePeriodSeconds\": 45,\n \"volumes\": [\n {\n \"name\": \"data\",\n \"persistentVolumeClaim\": {\n \"claimName\": \"informed-decision-data\"\n }\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"runtime\"\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"tmp\"\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-runtime-6c221878d051\"\n },\n \"name\": \"configuration\"\n },\n {\n \"name\": \"caller\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"audience\": \"flex-auth\",\n \"expirationSeconds\": 3600,\n \"path\": \"token\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"audit\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"token\",\n \"path\": \"token\"\n }\n ],\n \"secretName\": \"informed-decision-audit\"\n }\n },\n {\n \"name\": \"kubernetes-api\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"expirationSeconds\": 600,\n \"path\": \"token\"\n }\n },\n {\n \"configMap\": {\n \"items\": [\n {\n \"key\": \"ca.crt\",\n \"path\": \"ca.crt\"\n }\n ],\n \"name\": \"kube-root-ca.crt\"\n }\n }\n ]\n }\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-workload-registry\"\n },\n \"name\": \"workload-registry\"\n },\n {\n \"name\": \"sitting-requester\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"client-secret\",\n \"path\": \"client-secret\"\n }\n ],\n \"optional\": false,\n \"secretName\": \"informed-decision-sitting-requester\"\n }\n }\n ]\n }\n }\n }\n}\n" + }, + { + "item_id": "published-verification-json", + "media_type": "application/json", + "content": "{\n \"proposal\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"observed_at\": \"2026-10-11T01:24:01.985128+00:00\",\n \"native_owner_publication_job\": {\n \"id\": 11484,\n \"name\": \"publish-candidate\",\n \"head_branch\": \"main\",\n \"head_sha\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"run_number\": 3,\n \"event\": \"push\",\n \"display_title\": \"Prepare readable overlay context with the admitted legacy builder\",\n \"status\": \"success\",\n \"workflow_id\": \"purpose-overlay-image.yaml\",\n \"url\": \"https://forgejo.coulomb.social/coulomb/informed-decision/actions/runs/3\",\n \"created_at\": \"2026-10-11T01:20:59Z\",\n \"updated_at\": \"2026-10-11T01:21:08Z\",\n \"run_started_at\": \"2026-10-11T01:20:59Z\"\n },\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"policy_sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\",\n \"registry_proof_sha256\": \"5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213\",\n \"source_render_change_only\": \"Deployment/informed-decision spec.template.spec.containers[0].image\",\n \"runtime_configmap_unchanged\": \"informed-decision-runtime-6c221878d051\",\n \"installed_image_execution\": {\n \"immutable_registry_artifact_pulled_anonymously\": true,\n \"UID\": 10001,\n \"GID\": 10001,\n \"policy_file_UID\": 0,\n \"policy_file_mode\": \"0644\",\n \"purpose_variants\": 10,\n \"binding_forms_allowed\": 2,\n \"advisory_or_malformed_refused\": 8,\n \"network\": \"none\",\n \"read_only\": true,\n \"synthetic_transport\": true,\n \"native_PDP_test\": false\n },\n \"scan_summary_sha256\": \"0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44\",\n \"historical_failed_runs_retained\": [\n \"f66de505/task11482/run1\",\n \"acecad887/task11483/run2\"\n ],\n \"native_hosting_changed\": false,\n \"native_backup_restore_executed\": false,\n \"human_approval\": false,\n \"evidence_file_sha256\": {\n \"image-manifest.json\": \"978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb\",\n \"image-config.json\": \"4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10\",\n \"base-image-config.json\": \"b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00\",\n \"registry-proof.json\": \"5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213\",\n \"trivy-full.json\": \"f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e\",\n \"sbom.cdx.json\": \"a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d\",\n \"base-trivy-full.json\": \"d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80\",\n \"check_installed.py\": \"a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad\",\n \"verify_registry.py\": \"413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4\"\n }\n}\n" + }, + { + "item_id": "registry-proof-json", + "media_type": "application/json", + "content": "{\n \"image_digest\": \"sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"base_image_digest\": \"sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"base_layer_bytes_identical\": true,\n \"layer_media_type_conversion\": \"OCI gzip to Docker gzip, same digest and size\",\n \"base_runtime_config_semantics_identical\": true,\n \"legacy_builder_config_additions\": {\n \"Hostname\": \"\",\n \"Domainname\": \"\",\n \"AttachStdin\": false,\n \"AttachStdout\": false,\n \"AttachStderr\": false,\n \"Tty\": false,\n \"OpenStdin\": false,\n \"StdinOnce\": false,\n \"Cmd\": null,\n \"Volumes\": null,\n \"OnBuild\": null,\n \"Image\": \"sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883\"\n },\n \"base_rootfs_prefix_identical\": true,\n \"overlay_regular_files\": [\n \"opt/venv/lib/python3.12/site-packages/informed_decision/policy.py\"\n ],\n \"overlay_directories\": [\n \"opt\",\n \"opt/venv\",\n \"opt/venv/lib\",\n \"opt/venv/lib/python3.12\",\n \"opt/venv/lib/python3.12/site-packages\",\n \"opt/venv/lib/python3.12/site-packages/informed_decision\"\n ],\n \"policy_sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\",\n \"policy_mode\": \"0644\",\n \"base_user\": \"10001:10001\",\n \"source_scope_labels\": {\n \"org.opencontainers.image.revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"org.opencontainers.image.base.digest\": \"sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"social.coulomb.source.policy.sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\",\n \"social.coulomb.release.scope\": \"INFD-WP-0009-T04/purpose-overlay-v1\"\n },\n \"registry_read_route\": \"anonymous public scoped bearer challenge, no token retention\",\n \"image_executed\": false,\n \"native_workload_changed\": false,\n \"native_backup_restore_executed\": false\n}\n" + }, + { + "item_id": "security-summary-json", + "media_type": "application/json", + "content": "{\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"scanner\": \"aquasec/trivy@sha256:62b1e65e8869bc4b4c6aa4fa2b21595256c7c2f6018a9d9ad61caf87187c1969\",\n \"version\": \"0.74.0\",\n \"db_metadata\": {\n \"Version\": 2,\n \"NextUpdate\": \"2026-10-11T18:59:50.889010572Z\",\n \"UpdatedAt\": \"2026-10-10T18:59:50.889010923Z\",\n \"DownloadedAt\": \"2026-10-10T23:32:32.380033131Z\"\n },\n \"suppression\": false,\n \"ignore_unfixed\": false,\n \"severity_filter\": null,\n \"package_count\": 44,\n \"findings_by_severity\": {\n \"MEDIUM\": 1\n },\n \"findings\": [\n {\n \"id\": \"CVE-2026-85091\",\n \"package\": \"zlib\",\n \"installed\": \"1.3.2-r0\",\n \"fixed\": \"1.3.2-r1\",\n \"severity\": \"MEDIUM\"\n }\n ],\n \"coverage_limits\": [\n \"Alpine3.24 absent scanner EOL list; OS detector ran against Alpine3.24 repository on38OS packages\",\n \"Known findings asof pinnedDB, not claim absence of unknown vulnerabilities\"\n ],\n \"high_critical\": 0,\n \"same_scanner_actual_base_scan_findings_identical\": true,\n \"base_scan_file\": \"base-trivy-full.json\"\n}\n" + }, + { + "item_id": "trivy-full-json", + "media_type": "application/json", + "content": "{\n \"SchemaVersion\": 2,\n \"Trivy\": {\n \"Version\": \"0.74.0\"\n },\n \"ReportID\": \"01a1288d-8df1-73fb-9313-3642dd64ba72\",\n \"CreatedAt\": \"2026-10-11T01:22:07.985264404Z\",\n \"ArtifactID\": \"sha256:40f873b8d6345341e2f661a5038c092d186e2831dc60b61704a419a1f4f77ef6\",\n \"ArtifactName\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"ArtifactType\": \"container_image\",\n \"Metadata\": {\n \"Size\": 88258048,\n \"OS\": {\n \"Family\": \"alpine\",\n \"Name\": \"3.24.1\"\n },\n \"ImageID\": \"sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779\",\n \"DiffIDs\": [\n \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\",\n \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\",\n \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\",\n \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\",\n \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\",\n \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\",\n \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\",\n \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\",\n \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n ],\n \"RepoDigests\": [\n \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\"\n ],\n \"Reference\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"ImageConfig\": {\n \"architecture\": \"amd64\",\n \"created\": \"2026-10-11T01:21:04.787527697Z\",\n \"docker_version\": \"27.5.1\",\n \"history\": [\n {\n \"created\": \"2026-06-16T00:01:29.967161902Z\",\n \"created_by\": \"ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-06-16T00:01:29.967161902Z\",\n \"created_by\": \"CMD [\\\"/bin/sh\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV LANG=C.UTF-8\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\tapk add --no-cache \\t\\tca-certificates \\t\\ttzdata \\t; # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PYTHON_VERSION=3.12.14\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:10:30.672225972Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\t\\tapk add --no-cache --virtual .build-deps \\t\\tbluez-dev \\t\\tbzip2-dev \\t\\tdpkg-dev dpkg \\t\\tfindutils \\t\\tg++ \\t\\tgcc \\t\\tgdbm-dev \\t\\tgnupg \\t\\tlibc-dev \\t\\tlibffi-dev \\t\\tlibnsl-dev \\t\\tlibtirpc-dev \\t\\tlinux-headers \\t\\tmake \\t\\tncurses-dev \\t\\topenssl-dev \\t\\tpax-utils \\t\\treadline-dev \\t\\tsqlite-dev \\t\\ttar \\t\\ttcl-dev \\t\\ttk \\t\\ttk-dev \\t\\tutil-linux-dev \\t\\txz \\t\\txz-dev \\t\\tzlib-dev \\t; \\t\\twget -O python.tar.xz \\\"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\\\"; \\techo \\\"$PYTHON_SHA256 *python.tar.xz\\\" | sha256sum -c -; \\twget -O python.tar.xz.asc \\\"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\\\"; \\tGNUPGHOME=\\\"$(mktemp -d)\\\"; export GNUPGHOME; \\tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \\\"$GPG_KEY\\\"; \\tgpg --batch --verify python.tar.xz.asc python.tar.xz; \\tgpgconf --kill all; \\trm -rf \\\"$GNUPGHOME\\\" python.tar.xz.asc; \\tmkdir -p /usr/src/python; \\ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \\trm python.tar.xz; \\t\\tcd /usr/src/python; \\tgnuArch=\\\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\\\"; \\t./configure \\t\\t--build=\\\"$gnuArch\\\" \\t\\t--enable-loadable-sqlite-extensions \\t\\t--enable-option-checking=fatal \\t\\t--enable-shared \\t\\t$(test \\\"${gnuArch%%-*}\\\" != 'riscv64' \\u0026\\u0026 echo '--with-lto') \\t\\t--with-ensurepip \\t; \\tnproc=\\\"$(nproc)\\\"; \\tEXTRA_CFLAGS=\\\"-DTHREAD_STACK_SIZE=0x100000\\\"; \\tLDFLAGS=\\\"${LDFLAGS:-} -Wl,--strip-all\\\"; \\tarch=\\\"$(apk --print-arch)\\\"; \\tcase \\\"$arch\\\" in \\t\\tx86_64|aarch64) \\t\\t\\tEXTRA_CFLAGS=\\\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\\\"; \\t\\t\\t;; \\t\\tx86) \\t\\t\\t;; \\t\\t*) \\t\\t\\tEXTRA_CFLAGS=\\\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\\\"; \\t\\t\\t;; \\tesac; \\tmake -j \\\"$nproc\\\" \\t\\t\\\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\\\" \\t\\t\\\"LDFLAGS=${LDFLAGS:-}\\\" \\t; \\trm python; \\tmake -j \\\"$nproc\\\" \\t\\t\\\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\\\" \\t\\t\\\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\\\$\\\\$ORIGIN/../lib'\\\" \\t\\tpython \\t; \\tmake install; \\t\\tcd /; \\trm -rf /usr/src/python; \\t\\tfind /usr/local -depth \\t\\t\\\\( \\t\\t\\t\\\\( -type d -a \\\\( -name test -o -name tests -o -name idle_test \\\\) \\\\) \\t\\t\\t-o \\\\( -type f -a \\\\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\\\) \\\\) \\t\\t\\\\) -exec rm -rf '{}' + \\t; \\t\\tfind /usr/local -type f -executable -not \\\\( -name '*tkinter*' \\\\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \\t\\t| tr ',' '\\\\n' \\t\\t| sort -u \\t\\t| awk 'system(\\\"[ -e /usr/local/lib/\\\" $1 \\\" ]\\\") == 0 { next } { print \\\"so:\\\" $1 }' \\t\\t| xargs -rt apk add --no-network --virtual .python-rundeps \\t; \\tapk del --no-network .build-deps; \\t\\texport PYTHONDONTWRITEBYTECODE=1; \\tpython3 --version; \\tpip3 --version # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:10:30.782726003Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\tfor src in idle3 pip3 pydoc3 python3 python3-config; do \\t\\tdst=\\\"$(echo \\\"$src\\\" | tr -d 3)\\\"; \\t\\t[ -s \\\"/usr/local/bin/$src\\\" ]; \\t\\t[ ! -e \\\"/usr/local/bin/$dst\\\" ]; \\t\\tln -svT \\\"$src\\\" \\\"/usr/local/bin/$dst\\\"; \\tdone # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:10:30.782726003Z\",\n \"created_by\": \"CMD [\\\"python3\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-11T00:49:47.962156876+02:00\",\n \"created_by\": \"ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-11T00:49:47.962156876+02:00\",\n \"created_by\": \"RUN /bin/sh -c apk add --no-cache 'libuuid\\u003e=2.42.3-r1' \\u0026\\u0026 addgroup -S -g 10001 informed \\u0026\\u0026 adduser -S -u 10001 -G informed -H informed # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:55.351944978+02:00\",\n \"created_by\": \"COPY /opt/venv /opt/venv # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.462092072+02:00\",\n \"created_by\": \"RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"WORKDIR /app\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"USER 10001:10001\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"EXPOSE [8080/tcp 8081/tcp]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"ENTRYPOINT [\\\"informed-decision-container\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:15:11.991443676Z\",\n \"created_by\": \"/bin/sh -c #(nop) ARG SOURCE_REVISION\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:21:04.716126392Z\",\n \"created_by\": \"/bin/sh -c #(nop) LABEL org.opencontainers.image.revision=3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168 org.opencontainers.image.base.digest=sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 social.coulomb.source.policy.sha256=9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62 social.coulomb.release.scope=INFD-WP-0009-T04/purpose-overlay-v1\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:21:04.787527697Z\",\n \"created_by\": \"/bin/sh -c #(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py \"\n }\n ],\n \"os\": \"linux\",\n \"rootfs\": {\n \"type\": \"layers\",\n \"diff_ids\": [\n \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\",\n \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\",\n \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\",\n \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\",\n \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\",\n \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\",\n \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\",\n \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\",\n \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n ]\n },\n \"config\": {\n \"Entrypoint\": [\n \"informed-decision-container\"\n ],\n \"Env\": [\n \"PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"LANG=C.UTF-8\",\n \"GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305\",\n \"PYTHON_VERSION=3.12.14\",\n \"PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a\",\n \"PYTHONDONTWRITEBYTECODE=1\",\n \"PYTHONUNBUFFERED=1\"\n ],\n \"Image\": \"sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883\",\n \"Labels\": {\n \"org.opencontainers.image.base.digest\": \"sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"org.opencontainers.image.revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"social.coulomb.release.scope\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"social.coulomb.source.policy.sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\"\n },\n \"User\": \"10001:10001\",\n \"WorkingDir\": \"/app\",\n \"ExposedPorts\": {\n \"8080/tcp\": {},\n \"8081/tcp\": {}\n }\n }\n },\n \"Layers\": [\n {\n \"Size\": 8697856,\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"Size\": 1538048,\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n {\n \"Size\": 47150592,\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"Size\": 5120,\n \"Digest\": \"sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b\",\n \"DiffID\": \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\"\n },\n {\n \"Size\": 131584,\n \"Digest\": \"sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86\",\n \"DiffID\": \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\"\n },\n {\n \"Size\": 30705664,\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"Size\": 12288,\n \"Digest\": \"sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f\",\n \"DiffID\": \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\"\n },\n {\n \"Size\": 1536,\n \"Digest\": \"sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3\",\n \"DiffID\": \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\"\n },\n {\n \"Size\": 15360,\n \"Digest\": \"sha256:cfee29c2f8119d2a39714ecbe5095a2dc1c986054f2e1fe0a6565163242417e3\",\n \"DiffID\": \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n }\n ]\n },\n \"Results\": [\n {\n \"Target\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a (alpine 3.24.1)\",\n \"Class\": \"os-pkgs\",\n \"Type\": \"alpine\",\n \"Packages\": [\n {\n \"ID\": \".python-rundeps@20260901.001029\",\n \"Name\": \".python-rundeps\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch\\u0026distro=3.24.1\",\n \"UID\": \"4e26c99fecac1e97\"\n },\n \"Version\": \"20260901.001029\",\n \"Arch\": \"noarch\",\n \"DependsOn\": [\n \"gdbm@1.26-r0\",\n \"libbz2@1.0.8-r6\",\n \"libcrypto3@3.5.8-r0\",\n \"libffi@3.5.2-r1\",\n \"libncursesw@6.6_p20260516-r0\",\n \"libnsl@2.0.1-r2\",\n \"libpanelw@6.6_p20260516-r0\",\n \"libssl3@3.5.8-r0\",\n \"libtirpc@1.3.5-r1\",\n \"libuuid@2.42.3-r1\",\n \"musl@1.2.6-r2\",\n \"readline@8.3.3-r1\",\n \"sqlite-libs@3.53.4-r0\",\n \"xz-libs@5.8.3-r0\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:51d0c1e7d88a414345799f0309185c625013ef32\",\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-baselayout@3.7.2-r1\",\n \"Name\": \"alpine-baselayout\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1b9c543300f8073e\"\n },\n \"Version\": \"3.7.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-baselayout\",\n \"SrcVersion\": \"3.7.2-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"alpine-baselayout-data@3.7.2-r1\",\n \"busybox-binsh@1.37.0-r31\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:f0fcfdc2f4da058af6473bc45c4eab62916225b2\",\n \"InstalledFiles\": [\n \"etc/motd\",\n \"etc/crontabs/root\",\n \"etc/modprobe.d/aliases.conf\",\n \"etc/modprobe.d/blacklist.conf\",\n \"etc/modprobe.d/i386.conf\",\n \"etc/profile.d/20locale.sh\",\n \"etc/profile.d/README\",\n \"etc/profile.d/color_prompt.sh.disabled\",\n \"usr/lib/sysctl.d/00-alpine.conf\",\n \"var/lock\",\n \"var/run\",\n \"var/spool/mail\",\n \"var/spool/cron/crontabs\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-baselayout-data@3.7.2-r1\",\n \"Name\": \"alpine-baselayout-data\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"fcc3cd90122d8aa7\"\n },\n \"Version\": \"3.7.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-baselayout\",\n \"SrcVersion\": \"3.7.2-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508\",\n \"InstalledFiles\": [\n \"etc/fstab\",\n \"etc/group\",\n \"etc/hostname\",\n \"etc/hosts\",\n \"etc/inittab\",\n \"etc/modules\",\n \"etc/mtab\",\n \"etc/nsswitch.conf\",\n \"etc/passwd\",\n \"etc/profile\",\n \"etc/protocols\",\n \"etc/services\",\n \"etc/shadow\",\n \"etc/shells\",\n \"etc/sysctl.conf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-keys@2.6-r0\",\n \"Name\": \"alpine-keys\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"cb1f6c8fa74713e0\"\n },\n \"Version\": \"2.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-keys\",\n \"SrcVersion\": \"2.6-r0\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:d8d6b80e53c059a77e4915da78ba964f3ffea240\",\n \"InstalledFiles\": [\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub\",\n \"usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub\",\n \"usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub\",\n \"usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub\",\n \"usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub\",\n \"usr/share/apk/keys/loongarch64/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub\",\n \"usr/share/apk/keys/mips64/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub\",\n \"usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub\",\n \"usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub\",\n \"usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub\",\n \"usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub\",\n \"usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub\",\n \"usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-release@3.24.1-r0\",\n \"Name\": \"alpine-release\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"6cfad6f36e1f31aa\"\n },\n \"Version\": \"3.24.1-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-base\",\n \"SrcVersion\": \"3.24.1-r0\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"alpine-keys@2.6-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:bc6912a25cdc7733e0035ed509eceaa4026946e3\",\n \"InstalledFiles\": [\n \"etc/alpine-release\",\n \"etc/issue\",\n \"etc/os-release\",\n \"etc/secfixes.d/alpine\",\n \"usr/lib/os-release\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"apk-tools@3.0.6-r0\",\n \"Name\": \"apk-tools\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"cb2633c883b17a04\"\n },\n \"Version\": \"3.0.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"apk-tools\",\n \"SrcVersion\": \"3.0.6-r0\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"ca-certificates-bundle@20260611-r0\",\n \"libapk@3.0.6-r0\",\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:043333589798a1f52e09ae63f026c6c8fa676d34\",\n \"InstalledFiles\": [\n \"sbin/apk\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"busybox@1.37.0-r31\",\n \"Name\": \"busybox\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"771020c43c8440bf\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:b5405ebc02f7dd8be95b6265c54b243d5456ab8f\",\n \"InstalledFiles\": [\n \"bin/busybox\",\n \"etc/securetty\",\n \"etc/busybox-paths.d/busybox\",\n \"etc/logrotate.d/acpid\",\n \"etc/network/if-up.d/dad\",\n \"etc/udhcpc/udhcpc.conf\",\n \"usr/share/udhcpc/default.script\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"busybox-binsh@1.37.0-r31\",\n \"Name\": \"busybox-binsh\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1ec8a3d5d2b63297\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"busybox@1.37.0-r31\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7\",\n \"InstalledFiles\": [\n \"bin/sh\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ca-certificates@20260611-r0\",\n \"Name\": \"ca-certificates\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"2a3c316ee83c6198\"\n },\n \"Version\": \"20260611-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ca-certificates\",\n \"SrcVersion\": \"20260611-r0\",\n \"Licenses\": [\n \"MPL-2.0\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"busybox-binsh@1.37.0-r31\",\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n \"Digest\": \"sha1:8f2a04abeb54b331e2970a0a0dffb7bd6bdde567\",\n \"InstalledFiles\": [\n \"etc/ca-certificates.conf\",\n \"etc/apk/protected_paths.d/ca-certificates.list\",\n \"etc/ca-certificates/update.d/certhash\",\n \"usr/bin/c_rehash\",\n \"usr/sbin/update-ca-certificates\",\n \"usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt\",\n \"usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt\",\n \"usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt\",\n \"usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_ECC_TLS_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_RSA_TLS_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt\",\n \"usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA1.crt\",\n \"usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA2.crt\",\n \"usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/CA_Disig_Root_R2.crt\",\n \"usr/share/ca-certificates/mozilla/CFCA_EV_ROOT.crt\",\n \"usr/share/ca-certificates/mozilla/COMODO_ECC_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/COMODO_RSA_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/Certainly_Root_E1.crt\",\n \"usr/share/ca-certificates/mozilla/Certainly_Root_R1.crt\",\n \"usr/share/ca-certificates/mozilla/Certigna_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_EC-384_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA_2.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_1_2020.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_2_2023.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_1_2020.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_2_2023.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G2.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G3.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G2.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G3.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_TLS_RSA4096_Root_G5.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Trusted_Root_G4.crt\",\n \"usr/share/ca-certificates/mozilla/GDCA_TrustAUTH_R5_ROOT.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R1.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R3.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R4.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R4.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R5.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R3.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R6.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_E46.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_R46.crt\",\n \"usr/share/ca-certificates/mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/HARICA_TLS_ECC_Root_CA_2021.crt\",\n \"usr/share/ca-certificates/mozilla/HARICA_TLS_RSA_Root_CA_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt\",\n \"usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt\",\n \"usr/share/ca-certificates/mozilla/HiPKI_Root_CA_-_G1.crt\",\n \"usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt\",\n \"usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt\",\n \"usr/share/ca-certificates/mozilla/ISRG_Root_X2.crt\",\n \"usr/share/ca-certificates/mozilla/IdenTrust_Commercial_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/IdenTrust_Public_Sector_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/Izenpe.com.crt\",\n \"usr/share/ca-certificates/mozilla/Microsec_e-Szigno_Root_CA_2009.crt\",\n \"usr/share/ca-certificates/mozilla/Microsoft_ECC_Root_Certificate_Authority_2017.crt\",\n \"usr/share/ca-certificates/mozilla/Microsoft_RSA_Root_Certificate_Authority_2017.crt\",\n \"usr/share/ca-certificates/mozilla/NAVER_Global_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/NetLock_Arany_=Class_Gold=_F\u0151tan\u00fas\u00edtv\u00e1ny.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_Server_Root_ECC_G1.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_Server_Root_RSA_G1.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GB_CA.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GC_CA.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_1_G3.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_2_G3.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_3_G3.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_ECC.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_RSA_R2.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_ECC.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_RSA.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_TLS_ECC_Root_CA_2022.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_TLS_RSA_Root_CA_2022.crt\",\n \"usr/share/ca-certificates/mozilla/SZAFIR_ROOT_CA2.crt\",\n \"usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_E46.crt\",\n \"usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_R46.crt\",\n \"usr/share/ca-certificates/mozilla/SecureSign_Root_CA14.crt\",\n \"usr/share/ca-certificates/mozilla/SecureSign_Root_CA15.crt\",\n \"usr/share/ca-certificates/mozilla/Security_Communication_ECC_RootCA1.crt\",\n \"usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt\",\n \"usr/share/ca-certificates/mozilla/Starfield_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/SwissSign_RSA_TLS_Root_CA_2022_-_1.crt\",\n \"usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_2.crt\",\n \"usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_3.crt\",\n \"usr/share/ca-certificates/mozilla/TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_CYBER_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_Global_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/Telekom_Security_TLS_ECC_Root_2020.crt\",\n \"usr/share/ca-certificates/mozilla/Telekom_Security_TLS_RSA_Root_2023.crt\",\n \"usr/share/ca-certificates/mozilla/Telia_Root_CA_v2.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G3.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G4.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_TLS_ECC_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_TLS_RSA_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TunTrust_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/UCA_Extended_Validation_Root.crt\",\n \"usr/share/ca-certificates/mozilla/UCA_Global_G2_Root.crt\",\n \"usr/share/ca-certificates/mozilla/USERTrust_ECC_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/USERTrust_RSA_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/certSIGN_Root_CA_G2.crt\",\n \"usr/share/ca-certificates/mozilla/e-Szigno_Root_CA_2017.crt\",\n \"usr/share/ca-certificates/mozilla/e-Szigno_TLS_Root_CA_2023.crt\",\n \"usr/share/ca-certificates/mozilla/ePKI_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_C3.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_G3.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_Root_CA_-_C1.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_Root_CA_-_G1.crt\",\n \"usr/share/ca-certificates/mozilla/vTrus_ECC_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/vTrus_Root_CA.crt\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ca-certificates-bundle@20260611-r0\",\n \"Name\": \"ca-certificates-bundle\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"20337c2ea28bef28\"\n },\n \"Version\": \"20260611-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ca-certificates\",\n \"SrcVersion\": \"20260611-r0\",\n \"Licenses\": [\n \"MPL-2.0\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c9534a03750bdfae341f10969016090fc11febbd\",\n \"InstalledFiles\": [\n \"etc/ssl/cert.pem\",\n \"etc/ssl/certs/ca-certificates.crt\",\n \"etc/ssl1.1/cert.pem\",\n \"etc/ssl1.1/certs\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"gdbm@1.26-r0\",\n \"Name\": \"gdbm\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"5eb1a3f86262ca77\"\n },\n \"Version\": \"1.26-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"gdbm\",\n \"SrcVersion\": \"1.26-r0\",\n \"Licenses\": [\n \"GPL-3.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:619493d8124fe49a8ee1d8f7a1372cf7e3977337\",\n \"InstalledFiles\": [\n \"usr/lib/libgdbm.so.6\",\n \"usr/lib/libgdbm.so.6.0.0\",\n \"usr/lib/libgdbm_compat.so.4\",\n \"usr/lib/libgdbm_compat.so.4.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"keyutils-libs@1.6.3-r4\",\n \"Name\": \"keyutils-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"a1a29120eb342032\"\n },\n \"Version\": \"1.6.3-r4\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"keyutils\",\n \"SrcVersion\": \"1.6.3-r4\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"LGPL-2.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:b7331c96f077fc3522ee4361a441d1097204cd90\",\n \"InstalledFiles\": [\n \"usr/lib/libkeyutils.so.1\",\n \"usr/lib/libkeyutils.so.1.10\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"krb5-conf@1.0-r2\",\n \"Name\": \"krb5-conf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e7cf94ba8b6dbc33\"\n },\n \"Version\": \"1.0-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"krb5-conf\",\n \"SrcVersion\": \"1.0-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:40a11e0690a59e110367b62a80661024e9942a2d\",\n \"InstalledFiles\": [\n \"etc/krb5.conf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"krb5-libs@1.22.2-r1\",\n \"Name\": \"krb5-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"958f8b4a4f087dac\"\n },\n \"Version\": \"1.22.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"krb5\",\n \"SrcVersion\": \"1.22.2-r1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"keyutils-libs@1.6.3-r4\",\n \"krb5-conf@1.0-r2\",\n \"libcom_err@1.47.4-r0\",\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"libverto@0.3.2-r2\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:ef02346e21b817ff379e4601e5b1fc9760e5e31a\",\n \"InstalledFiles\": [\n \"usr/lib/libgssapi_krb5.so.2\",\n \"usr/lib/libgssapi_krb5.so.2.2\",\n \"usr/lib/libgssrpc.so.4\",\n \"usr/lib/libgssrpc.so.4.2\",\n \"usr/lib/libk5crypto.so.3\",\n \"usr/lib/libk5crypto.so.3.1\",\n \"usr/lib/libkadm5clnt_mit.so.12\",\n \"usr/lib/libkadm5clnt_mit.so.12.0\",\n \"usr/lib/libkadm5srv_mit.so.12\",\n \"usr/lib/libkadm5srv_mit.so.12.0\",\n \"usr/lib/libkdb5.so.10\",\n \"usr/lib/libkdb5.so.10.0\",\n \"usr/lib/libkrad.so.0\",\n \"usr/lib/libkrad.so.0.0\",\n \"usr/lib/libkrb5.so.3\",\n \"usr/lib/libkrb5.so.3.3\",\n \"usr/lib/libkrb5support.so.0\",\n \"usr/lib/libkrb5support.so.0.1\",\n \"usr/lib/krb5/plugins/kdb/db2.so\",\n \"usr/lib/krb5/plugins/preauth/otp.so\",\n \"usr/lib/krb5/plugins/preauth/spake.so\",\n \"usr/lib/krb5/plugins/preauth/test.so\",\n \"usr/lib/krb5/plugins/tls/k5tls.so\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libapk@3.0.6-r0\",\n \"Name\": \"libapk\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"a35b8b9b3219513a\"\n },\n \"Version\": \"3.0.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"apk-tools\",\n \"SrcVersion\": \"3.0.6-r0\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"musl@1.2.6-r2\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:523a8f58104589f74f743d501c81bf6517155378\",\n \"InstalledFiles\": [\n \"usr/lib/libapk.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libbz2@1.0.8-r6\",\n \"Name\": \"libbz2\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"48e17539404e2d56\"\n },\n \"Version\": \"1.0.8-r6\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"bzip2\",\n \"SrcVersion\": \"1.0.8-r6\",\n \"Licenses\": [\n \"bzip-2-1.0.6\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:08566ba5c7af97c25474be8b24e8b48f0116b67d\",\n \"InstalledFiles\": [\n \"usr/lib/libbz2.so.1\",\n \"usr/lib/libbz2.so.1.0.8\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libcom_err@1.47.4-r0\",\n \"Name\": \"libcom_err\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3fc35a3f66d192af\"\n },\n \"Version\": \"1.47.4-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"e2fsprogs\",\n \"SrcVersion\": \"1.47.4-r0\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"LGPL-2.0-or-later\",\n \"BSD-3-Clause\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef\",\n \"InstalledFiles\": [\n \"usr/lib/libcom_err.so.2\",\n \"usr/lib/libcom_err.so.2.1\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libcrypto3@3.5.8-r0\",\n \"Name\": \"libcrypto3\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"4299bba2ba9c96aa\"\n },\n \"Version\": \"3.5.8-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"openssl\",\n \"SrcVersion\": \"3.5.8-r0\",\n \"Licenses\": [\n \"Apache-2.0\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3\",\n \"InstalledFiles\": [\n \"etc/ssl/ct_log_list.cnf\",\n \"etc/ssl/ct_log_list.cnf.dist\",\n \"etc/ssl/openssl.cnf\",\n \"etc/ssl/openssl.cnf.dist\",\n \"usr/lib/libcrypto.so.3\",\n \"usr/lib/engines-3/afalg.so\",\n \"usr/lib/engines-3/capi.so\",\n \"usr/lib/engines-3/loader_attic.so\",\n \"usr/lib/engines-3/padlock.so\",\n \"usr/lib/ossl-modules/legacy.so\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libffi@3.5.2-r1\",\n \"Name\": \"libffi\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"d3eaa921287b1ccd\"\n },\n \"Version\": \"3.5.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libffi\",\n \"SrcVersion\": \"3.5.2-r1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a\",\n \"InstalledFiles\": [\n \"usr/lib/libffi.so.8\",\n \"usr/lib/libffi.so.8.2.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libintl@1.0-r0\",\n \"Name\": \"libintl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libintl@1.0-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"25c18808d8fc87e0\"\n },\n \"Version\": \"1.0-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"gettext\",\n \"SrcVersion\": \"1.0-r0\",\n \"Licenses\": [\n \"LGPL-2.1-or-later\"\n ],\n \"Maintainer\": \"Carlo Landmeter \\u003cclandmeter@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:282d6642ccac87237e43a864159d73cf5abe7550\",\n \"InstalledFiles\": [\n \"usr/lib/libintl.so.8\",\n \"usr/lib/libintl.so.8.4.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libncursesw@6.6_p20260516-r0\",\n \"Name\": \"libncursesw\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e8939f45e2191bcc\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\",\n \"ncurses-terminfo-base@6.6_p20260516-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:9f318e6e324d6827274829194cf6ac6afbaded12\",\n \"InstalledFiles\": [\n \"usr/lib/libncursesw.so.6\",\n \"usr/lib/libncursesw.so.6.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libnsl@2.0.1-r2\",\n \"Name\": \"libnsl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3d893c60d41da67b\"\n },\n \"Version\": \"2.0.1-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libnsl\",\n \"SrcVersion\": \"2.0.1-r2\",\n \"Licenses\": [\n \"LGPL-2.0-or-later\"\n ],\n \"DependsOn\": [\n \"libintl@1.0-r0\",\n \"libtirpc@1.3.5-r1\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:5194adbf26560b52be318481a7af294ab05fd795\",\n \"InstalledFiles\": [\n \"usr/lib/libnsl.so.3\",\n \"usr/lib/libnsl.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libpanelw@6.6_p20260516-r0\",\n \"Name\": \"libpanelw\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"ef1ad9bb256b373\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"DependsOn\": [\n \"libncursesw@6.6_p20260516-r0\",\n \"musl@1.2.6-r2\",\n \"ncurses-terminfo-base@6.6_p20260516-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:149bdc434232ed11fc5bb975ba519a07154a6f56\",\n \"InstalledFiles\": [\n \"usr/lib/libpanelw.so.6\",\n \"usr/lib/libpanelw.so.6.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libssl3@3.5.8-r0\",\n \"Name\": \"libssl3\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"f290ab59b88b1c4a\"\n },\n \"Version\": \"3.5.8-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"openssl\",\n \"SrcVersion\": \"3.5.8-r0\",\n \"Licenses\": [\n \"Apache-2.0\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:5f9b1e55d821953d2e2b1db322dad70a3b5041ea\",\n \"InstalledFiles\": [\n \"usr/lib/libssl.so.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libtirpc@1.3.5-r1\",\n \"Name\": \"libtirpc\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"471c8d955ca03be5\"\n },\n \"Version\": \"1.3.5-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libtirpc\",\n \"SrcVersion\": \"1.3.5-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"krb5-libs@1.22.2-r1\",\n \"libtirpc-conf@1.3.5-r1\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:c32865bd86a8b8829d152279cabbc5ac6d430eb2\",\n \"InstalledFiles\": [\n \"usr/lib/libtirpc.so.3\",\n \"usr/lib/libtirpc.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libtirpc-conf@1.3.5-r1\",\n \"Name\": \"libtirpc-conf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3437392c14aad33f\"\n },\n \"Version\": \"1.3.5-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libtirpc\",\n \"SrcVersion\": \"1.3.5-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:0c17d9988dc986c90e22f79778df047eca9973ff\",\n \"InstalledFiles\": [\n \"etc/bindresvport.blacklist\",\n \"etc/netconfig\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libuuid@2.42.3-r1\",\n \"Name\": \"libuuid\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"c444e9cdd1bdda40\"\n },\n \"Version\": \"2.42.3-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"util-linux\",\n \"SrcVersion\": \"2.42.3-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86\",\n \"DiffID\": \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\"\n },\n \"Digest\": \"sha1:8f041ef637ad75f381cc0c034f2afbbb0303264e\",\n \"InstalledFiles\": [\n \"usr/lib/libuuid.so.1\",\n \"usr/lib/libuuid.so.1.3.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libverto@0.3.2-r2\",\n \"Name\": \"libverto\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"9df4321a283a6cf6\"\n },\n \"Version\": \"0.3.2-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libverto\",\n \"SrcVersion\": \"0.3.2-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Francesco Colista \\u003cfcolista@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:73233059338142e4ac6d8fb8bb0074e93da75dc1\",\n \"InstalledFiles\": [\n \"usr/lib/libverto.so.1\",\n \"usr/lib/libverto.so.1.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"musl@1.2.6-r2\",\n \"Name\": \"musl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1f8cb44befe503d4\"\n },\n \"Version\": \"1.2.6-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"musl\",\n \"SrcVersion\": \"1.2.6-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:0f7e5827e4e1a73631beda27b78431a8ba240e05\",\n \"InstalledFiles\": [\n \"lib/ld-musl-x86_64.so.1\",\n \"lib/libc.musl-x86_64.so.1\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"musl-utils@1.2.6-r2\",\n \"Name\": \"musl-utils\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"4497482ec1d943e1\"\n },\n \"Version\": \"1.2.6-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"musl\",\n \"SrcVersion\": \"1.2.6-r2\",\n \"Licenses\": [\n \"MIT\",\n \"BSD-2-Clause\",\n \"GPL-2.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\",\n \"scanelf@1.3.9-r1\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:75ada3c48d63ec5d87c42fdf934a3fdd11298dc5\",\n \"InstalledFiles\": [\n \"sbin/ldconfig\",\n \"usr/bin/getconf\",\n \"usr/bin/getent\",\n \"usr/bin/iconv\",\n \"usr/bin/ldd\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ncurses-terminfo-base@6.6_p20260516-r0\",\n \"Name\": \"ncurses-terminfo-base\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e7fac5c6a6e9ae8\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:9d551d828e9c8ee52c5801c1d6046828ebf15752\",\n \"InstalledFiles\": [\n \"etc/terminfo/a/alacritty\",\n \"etc/terminfo/a/ansi\",\n \"etc/terminfo/d/dumb\",\n \"etc/terminfo/g/gnome\",\n \"etc/terminfo/g/gnome-256color\",\n \"etc/terminfo/k/konsole\",\n \"etc/terminfo/k/konsole-256color\",\n \"etc/terminfo/k/konsole-linux\",\n \"etc/terminfo/l/linux\",\n \"etc/terminfo/p/putty\",\n \"etc/terminfo/p/putty-256color\",\n \"etc/terminfo/r/rxvt\",\n \"etc/terminfo/r/rxvt-256color\",\n \"etc/terminfo/s/screen\",\n \"etc/terminfo/s/screen-256color\",\n \"etc/terminfo/s/st-0.6\",\n \"etc/terminfo/s/st-0.7\",\n \"etc/terminfo/s/st-0.8\",\n \"etc/terminfo/s/st-0.8.5\",\n \"etc/terminfo/s/st-16color\",\n \"etc/terminfo/s/st-256color\",\n \"etc/terminfo/s/st-direct\",\n \"etc/terminfo/s/sun\",\n \"etc/terminfo/t/terminator\",\n \"etc/terminfo/t/terminology\",\n \"etc/terminfo/t/terminology-0.6.1\",\n \"etc/terminfo/t/terminology-1.0.0\",\n \"etc/terminfo/t/terminology-1.8.1\",\n \"etc/terminfo/t/tmux\",\n \"etc/terminfo/t/tmux-256color\",\n \"etc/terminfo/v/vt100\",\n \"etc/terminfo/v/vt102\",\n \"etc/terminfo/v/vt200\",\n \"etc/terminfo/v/vt220\",\n \"etc/terminfo/v/vt52\",\n \"etc/terminfo/v/vte\",\n \"etc/terminfo/v/vte-256color\",\n \"etc/terminfo/x/xterm\",\n \"etc/terminfo/x/xterm-256color\",\n \"etc/terminfo/x/xterm-color\",\n \"etc/terminfo/x/xterm-xfree86\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"readline@8.3.3-r1\",\n \"Name\": \"readline\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"f50058781c93e1f2\"\n },\n \"Version\": \"8.3.3-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"readline\",\n \"SrcVersion\": \"8.3.3-r1\",\n \"Licenses\": [\n \"GPL-3.0-or-later\"\n ],\n \"Maintainer\": \"qaqland \\u003cqaq@qaq.land\\u003e\",\n \"DependsOn\": [\n \"libncursesw@6.6_p20260516-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:945b16e378bc00e44d89d4de8124bba7647fdf4d\",\n \"InstalledFiles\": [\n \"etc/inputrc\",\n \"usr/lib/libreadline.so.8\",\n \"usr/lib/libreadline.so.8.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"scanelf@1.3.9-r1\",\n \"Name\": \"scanelf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"936394657a1626fb\"\n },\n \"Version\": \"1.3.9-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"pax-utils\",\n \"SrcVersion\": \"1.3.9-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:013f903d0ba219673aebbdd04f74bb5ed82b01f0\",\n \"InstalledFiles\": [\n \"usr/bin/scanelf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"sqlite-libs@3.53.4-r0\",\n \"Name\": \"sqlite-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"8b10aee2ccc192de\"\n },\n \"Version\": \"3.53.4-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"sqlite\",\n \"SrcVersion\": \"3.53.4-r0\",\n \"Licenses\": [\n \"blessing\"\n ],\n \"Maintainer\": \"Jingyun Hua \\u003chuajingyun@loongson.cn\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:f7630ceb37c232b6609861aeab6cdb9cd120e6fa\",\n \"InstalledFiles\": [\n \"usr/lib/libsqlite3.so.0\",\n \"usr/lib/libsqlite3.so.3.53.4\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ssl_client@1.37.0-r31\",\n \"Name\": \"ssl_client\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"d42e31f15a4ce47a\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c220f4a5125a313af733e98def94132bb1e9d40d\",\n \"InstalledFiles\": [\n \"usr/bin/ssl_client\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"tzdata@2026c-r0\",\n \"Name\": \"tzdata\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"52c6b50eff629f9d\"\n },\n \"Version\": \"2026c-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"tzdata\",\n \"SrcVersion\": \"2026c-r0\",\n \"Licenses\": [\n \"Public-Domain\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n \"Digest\": \"sha1:61f7544ecd8dd63eac23fe3e645702fda92ef02a\",\n \"InstalledFiles\": [\n \"usr/share/zoneinfo/CET\",\n \"usr/share/zoneinfo/CST6CDT\",\n \"usr/share/zoneinfo/Cuba\",\n \"usr/share/zoneinfo/EET\",\n \"usr/share/zoneinfo/EST\",\n \"usr/share/zoneinfo/EST5EDT\",\n \"usr/share/zoneinfo/Egypt\",\n \"usr/share/zoneinfo/Eire\",\n \"usr/share/zoneinfo/Factory\",\n \"usr/share/zoneinfo/GB\",\n \"usr/share/zoneinfo/GB-Eire\",\n \"usr/share/zoneinfo/GMT\",\n \"usr/share/zoneinfo/GMT+0\",\n \"usr/share/zoneinfo/GMT-0\",\n \"usr/share/zoneinfo/GMT0\",\n \"usr/share/zoneinfo/Greenwich\",\n \"usr/share/zoneinfo/HST\",\n \"usr/share/zoneinfo/Hongkong\",\n \"usr/share/zoneinfo/Iceland\",\n \"usr/share/zoneinfo/Iran\",\n \"usr/share/zoneinfo/Israel\",\n \"usr/share/zoneinfo/Jamaica\",\n \"usr/share/zoneinfo/Japan\",\n \"usr/share/zoneinfo/Kwajalein\",\n \"usr/share/zoneinfo/Libya\",\n \"usr/share/zoneinfo/MET\",\n \"usr/share/zoneinfo/MST\",\n \"usr/share/zoneinfo/MST7MDT\",\n \"usr/share/zoneinfo/NZ\",\n \"usr/share/zoneinfo/NZ-CHAT\",\n \"usr/share/zoneinfo/Navajo\",\n \"usr/share/zoneinfo/PRC\",\n \"usr/share/zoneinfo/PST8PDT\",\n \"usr/share/zoneinfo/Poland\",\n \"usr/share/zoneinfo/Portugal\",\n \"usr/share/zoneinfo/ROC\",\n \"usr/share/zoneinfo/ROK\",\n \"usr/share/zoneinfo/Singapore\",\n \"usr/share/zoneinfo/Turkey\",\n \"usr/share/zoneinfo/UCT\",\n \"usr/share/zoneinfo/UTC\",\n \"usr/share/zoneinfo/Universal\",\n \"usr/share/zoneinfo/W-SU\",\n \"usr/share/zoneinfo/WET\",\n \"usr/share/zoneinfo/Zulu\",\n \"usr/share/zoneinfo/iso3166.tab\",\n \"usr/share/zoneinfo/leap-seconds.list\",\n \"usr/share/zoneinfo/posixrules\",\n \"usr/share/zoneinfo/zone.tab\",\n \"usr/share/zoneinfo/zone1970.tab\",\n \"usr/share/zoneinfo/Africa/Abidjan\",\n \"usr/share/zoneinfo/Africa/Accra\",\n \"usr/share/zoneinfo/Africa/Addis_Ababa\",\n \"usr/share/zoneinfo/Africa/Algiers\",\n \"usr/share/zoneinfo/Africa/Asmara\",\n \"usr/share/zoneinfo/Africa/Asmera\",\n \"usr/share/zoneinfo/Africa/Bamako\",\n \"usr/share/zoneinfo/Africa/Bangui\",\n \"usr/share/zoneinfo/Africa/Banjul\",\n \"usr/share/zoneinfo/Africa/Bissau\",\n \"usr/share/zoneinfo/Africa/Blantyre\",\n \"usr/share/zoneinfo/Africa/Brazzaville\",\n \"usr/share/zoneinfo/Africa/Bujumbura\",\n \"usr/share/zoneinfo/Africa/Cairo\",\n \"usr/share/zoneinfo/Africa/Casablanca\",\n \"usr/share/zoneinfo/Africa/Ceuta\",\n \"usr/share/zoneinfo/Africa/Conakry\",\n \"usr/share/zoneinfo/Africa/Dakar\",\n \"usr/share/zoneinfo/Africa/Dar_es_Salaam\",\n \"usr/share/zoneinfo/Africa/Djibouti\",\n \"usr/share/zoneinfo/Africa/Douala\",\n \"usr/share/zoneinfo/Africa/El_Aaiun\",\n \"usr/share/zoneinfo/Africa/Freetown\",\n \"usr/share/zoneinfo/Africa/Gaborone\",\n \"usr/share/zoneinfo/Africa/Harare\",\n \"usr/share/zoneinfo/Africa/Johannesburg\",\n \"usr/share/zoneinfo/Africa/Juba\",\n \"usr/share/zoneinfo/Africa/Kampala\",\n \"usr/share/zoneinfo/Africa/Khartoum\",\n \"usr/share/zoneinfo/Africa/Kigali\",\n \"usr/share/zoneinfo/Africa/Kinshasa\",\n \"usr/share/zoneinfo/Africa/Lagos\",\n \"usr/share/zoneinfo/Africa/Libreville\",\n \"usr/share/zoneinfo/Africa/Lome\",\n \"usr/share/zoneinfo/Africa/Luanda\",\n \"usr/share/zoneinfo/Africa/Lubumbashi\",\n \"usr/share/zoneinfo/Africa/Lusaka\",\n \"usr/share/zoneinfo/Africa/Malabo\",\n \"usr/share/zoneinfo/Africa/Maputo\",\n \"usr/share/zoneinfo/Africa/Maseru\",\n \"usr/share/zoneinfo/Africa/Mbabane\",\n \"usr/share/zoneinfo/Africa/Mogadishu\",\n \"usr/share/zoneinfo/Africa/Monrovia\",\n \"usr/share/zoneinfo/Africa/Nairobi\",\n \"usr/share/zoneinfo/Africa/Ndjamena\",\n \"usr/share/zoneinfo/Africa/Niamey\",\n \"usr/share/zoneinfo/Africa/Nouakchott\",\n \"usr/share/zoneinfo/Africa/Ouagadougou\",\n \"usr/share/zoneinfo/Africa/Porto-Novo\",\n \"usr/share/zoneinfo/Africa/Sao_Tome\",\n \"usr/share/zoneinfo/Africa/Timbuktu\",\n \"usr/share/zoneinfo/Africa/Tripoli\",\n \"usr/share/zoneinfo/Africa/Tunis\",\n \"usr/share/zoneinfo/Africa/Windhoek\",\n \"usr/share/zoneinfo/America/Adak\",\n \"usr/share/zoneinfo/America/Anchorage\",\n \"usr/share/zoneinfo/America/Anguilla\",\n \"usr/share/zoneinfo/America/Antigua\",\n \"usr/share/zoneinfo/America/Araguaina\",\n \"usr/share/zoneinfo/America/Aruba\",\n \"usr/share/zoneinfo/America/Asuncion\",\n \"usr/share/zoneinfo/America/Atikokan\",\n \"usr/share/zoneinfo/America/Atka\",\n \"usr/share/zoneinfo/America/Bahia\",\n \"usr/share/zoneinfo/America/Bahia_Banderas\",\n \"usr/share/zoneinfo/America/Barbados\",\n \"usr/share/zoneinfo/America/Belem\",\n \"usr/share/zoneinfo/America/Belize\",\n \"usr/share/zoneinfo/America/Blanc-Sablon\",\n \"usr/share/zoneinfo/America/Boa_Vista\",\n \"usr/share/zoneinfo/America/Bogota\",\n \"usr/share/zoneinfo/America/Boise\",\n \"usr/share/zoneinfo/America/Buenos_Aires\",\n \"usr/share/zoneinfo/America/Cambridge_Bay\",\n \"usr/share/zoneinfo/America/Campo_Grande\",\n \"usr/share/zoneinfo/America/Cancun\",\n \"usr/share/zoneinfo/America/Caracas\",\n \"usr/share/zoneinfo/America/Catamarca\",\n \"usr/share/zoneinfo/America/Cayenne\",\n \"usr/share/zoneinfo/America/Cayman\",\n \"usr/share/zoneinfo/America/Chicago\",\n \"usr/share/zoneinfo/America/Chihuahua\",\n \"usr/share/zoneinfo/America/Ciudad_Juarez\",\n \"usr/share/zoneinfo/America/Coral_Harbour\",\n \"usr/share/zoneinfo/America/Cordoba\",\n \"usr/share/zoneinfo/America/Costa_Rica\",\n \"usr/share/zoneinfo/America/Coyhaique\",\n \"usr/share/zoneinfo/America/Creston\",\n \"usr/share/zoneinfo/America/Cuiaba\",\n \"usr/share/zoneinfo/America/Curacao\",\n \"usr/share/zoneinfo/America/Danmarkshavn\",\n \"usr/share/zoneinfo/America/Dawson\",\n \"usr/share/zoneinfo/America/Dawson_Creek\",\n \"usr/share/zoneinfo/America/Denver\",\n \"usr/share/zoneinfo/America/Detroit\",\n \"usr/share/zoneinfo/America/Dominica\",\n \"usr/share/zoneinfo/America/Edmonton\",\n \"usr/share/zoneinfo/America/Eirunepe\",\n \"usr/share/zoneinfo/America/El_Salvador\",\n \"usr/share/zoneinfo/America/Ensenada\",\n \"usr/share/zoneinfo/America/Fort_Nelson\",\n \"usr/share/zoneinfo/America/Fort_Wayne\",\n \"usr/share/zoneinfo/America/Fortaleza\",\n \"usr/share/zoneinfo/America/Glace_Bay\",\n \"usr/share/zoneinfo/America/Godthab\",\n \"usr/share/zoneinfo/America/Goose_Bay\",\n \"usr/share/zoneinfo/America/Grand_Turk\",\n \"usr/share/zoneinfo/America/Grenada\",\n \"usr/share/zoneinfo/America/Guadeloupe\",\n \"usr/share/zoneinfo/America/Guatemala\",\n \"usr/share/zoneinfo/America/Guayaquil\",\n \"usr/share/zoneinfo/America/Guyana\",\n \"usr/share/zoneinfo/America/Halifax\",\n \"usr/share/zoneinfo/America/Havana\",\n \"usr/share/zoneinfo/America/Hermosillo\",\n \"usr/share/zoneinfo/America/Indianapolis\",\n \"usr/share/zoneinfo/America/Inuvik\",\n \"usr/share/zoneinfo/America/Iqaluit\",\n \"usr/share/zoneinfo/America/Jamaica\",\n \"usr/share/zoneinfo/America/Jujuy\",\n \"usr/share/zoneinfo/America/Juneau\",\n \"usr/share/zoneinfo/America/Knox_IN\",\n \"usr/share/zoneinfo/America/Kralendijk\",\n \"usr/share/zoneinfo/America/La_Paz\",\n \"usr/share/zoneinfo/America/Lima\",\n \"usr/share/zoneinfo/America/Los_Angeles\",\n \"usr/share/zoneinfo/America/Louisville\",\n \"usr/share/zoneinfo/America/Lower_Princes\",\n \"usr/share/zoneinfo/America/Maceio\",\n \"usr/share/zoneinfo/America/Managua\",\n \"usr/share/zoneinfo/America/Manaus\",\n \"usr/share/zoneinfo/America/Marigot\",\n \"usr/share/zoneinfo/America/Martinique\",\n \"usr/share/zoneinfo/America/Matamoros\",\n \"usr/share/zoneinfo/America/Mazatlan\",\n \"usr/share/zoneinfo/America/Mendoza\",\n \"usr/share/zoneinfo/America/Menominee\",\n \"usr/share/zoneinfo/America/Merida\",\n \"usr/share/zoneinfo/America/Metlakatla\",\n \"usr/share/zoneinfo/America/Mexico_City\",\n \"usr/share/zoneinfo/America/Miquelon\",\n \"usr/share/zoneinfo/America/Moncton\",\n \"usr/share/zoneinfo/America/Monterrey\",\n \"usr/share/zoneinfo/America/Montevideo\",\n \"usr/share/zoneinfo/America/Montreal\",\n \"usr/share/zoneinfo/America/Montserrat\",\n \"usr/share/zoneinfo/America/Nassau\",\n \"usr/share/zoneinfo/America/New_York\",\n \"usr/share/zoneinfo/America/Nipigon\",\n \"usr/share/zoneinfo/America/Nome\",\n \"usr/share/zoneinfo/America/Noronha\",\n \"usr/share/zoneinfo/America/Nuuk\",\n \"usr/share/zoneinfo/America/Ojinaga\",\n \"usr/share/zoneinfo/America/Panama\",\n \"usr/share/zoneinfo/America/Pangnirtung\",\n \"usr/share/zoneinfo/America/Paramaribo\",\n \"usr/share/zoneinfo/America/Phoenix\",\n \"usr/share/zoneinfo/America/Port-au-Prince\",\n \"usr/share/zoneinfo/America/Port_of_Spain\",\n \"usr/share/zoneinfo/America/Porto_Acre\",\n \"usr/share/zoneinfo/America/Porto_Velho\",\n \"usr/share/zoneinfo/America/Puerto_Rico\",\n \"usr/share/zoneinfo/America/Punta_Arenas\",\n \"usr/share/zoneinfo/America/Rainy_River\",\n \"usr/share/zoneinfo/America/Rankin_Inlet\",\n \"usr/share/zoneinfo/America/Recife\",\n \"usr/share/zoneinfo/America/Regina\",\n \"usr/share/zoneinfo/America/Resolute\",\n \"usr/share/zoneinfo/America/Rio_Branco\",\n \"usr/share/zoneinfo/America/Rosario\",\n \"usr/share/zoneinfo/America/Santa_Isabel\",\n \"usr/share/zoneinfo/America/Santarem\",\n \"usr/share/zoneinfo/America/Santiago\",\n \"usr/share/zoneinfo/America/Santo_Domingo\",\n \"usr/share/zoneinfo/America/Sao_Paulo\",\n \"usr/share/zoneinfo/America/Scoresbysund\",\n \"usr/share/zoneinfo/America/Shiprock\",\n \"usr/share/zoneinfo/America/Sitka\",\n \"usr/share/zoneinfo/America/St_Barthelemy\",\n \"usr/share/zoneinfo/America/St_Johns\",\n \"usr/share/zoneinfo/America/St_Kitts\",\n \"usr/share/zoneinfo/America/St_Lucia\",\n \"usr/share/zoneinfo/America/St_Thomas\",\n \"usr/share/zoneinfo/America/St_Vincent\",\n \"usr/share/zoneinfo/America/Swift_Current\",\n \"usr/share/zoneinfo/America/Tegucigalpa\",\n \"usr/share/zoneinfo/America/Thule\",\n \"usr/share/zoneinfo/America/Thunder_Bay\",\n \"usr/share/zoneinfo/America/Tijuana\",\n \"usr/share/zoneinfo/America/Toronto\",\n \"usr/share/zoneinfo/America/Tortola\",\n \"usr/share/zoneinfo/America/Vancouver\",\n \"usr/share/zoneinfo/America/Virgin\",\n \"usr/share/zoneinfo/America/Whitehorse\",\n \"usr/share/zoneinfo/America/Winnipeg\",\n \"usr/share/zoneinfo/America/Yakutat\",\n \"usr/share/zoneinfo/America/Yellowknife\",\n \"usr/share/zoneinfo/America/Argentina/Buenos_Aires\",\n \"usr/share/zoneinfo/America/Argentina/Catamarca\",\n \"usr/share/zoneinfo/America/Argentina/ComodRivadavia\",\n \"usr/share/zoneinfo/America/Argentina/Cordoba\",\n \"usr/share/zoneinfo/America/Argentina/Jujuy\",\n \"usr/share/zoneinfo/America/Argentina/La_Rioja\",\n \"usr/share/zoneinfo/America/Argentina/Mendoza\",\n \"usr/share/zoneinfo/America/Argentina/Rio_Gallegos\",\n \"usr/share/zoneinfo/America/Argentina/Salta\",\n \"usr/share/zoneinfo/America/Argentina/San_Juan\",\n \"usr/share/zoneinfo/America/Argentina/San_Luis\",\n \"usr/share/zoneinfo/America/Argentina/Tucuman\",\n \"usr/share/zoneinfo/America/Argentina/Ushuaia\",\n \"usr/share/zoneinfo/America/Indiana/Indianapolis\",\n \"usr/share/zoneinfo/America/Indiana/Knox\",\n \"usr/share/zoneinfo/America/Indiana/Marengo\",\n \"usr/share/zoneinfo/America/Indiana/Petersburg\",\n \"usr/share/zoneinfo/America/Indiana/Tell_City\",\n \"usr/share/zoneinfo/America/Indiana/Vevay\",\n \"usr/share/zoneinfo/America/Indiana/Vincennes\",\n \"usr/share/zoneinfo/America/Indiana/Winamac\",\n \"usr/share/zoneinfo/America/Kentucky/Louisville\",\n \"usr/share/zoneinfo/America/Kentucky/Monticello\",\n \"usr/share/zoneinfo/America/North_Dakota/Beulah\",\n \"usr/share/zoneinfo/America/North_Dakota/Center\",\n \"usr/share/zoneinfo/America/North_Dakota/New_Salem\",\n \"usr/share/zoneinfo/Antarctica/Casey\",\n \"usr/share/zoneinfo/Antarctica/Davis\",\n \"usr/share/zoneinfo/Antarctica/DumontDUrville\",\n \"usr/share/zoneinfo/Antarctica/Macquarie\",\n \"usr/share/zoneinfo/Antarctica/Mawson\",\n \"usr/share/zoneinfo/Antarctica/McMurdo\",\n \"usr/share/zoneinfo/Antarctica/Palmer\",\n \"usr/share/zoneinfo/Antarctica/Rothera\",\n \"usr/share/zoneinfo/Antarctica/South_Pole\",\n \"usr/share/zoneinfo/Antarctica/Syowa\",\n \"usr/share/zoneinfo/Antarctica/Troll\",\n \"usr/share/zoneinfo/Antarctica/Vostok\",\n \"usr/share/zoneinfo/Arctic/Longyearbyen\",\n \"usr/share/zoneinfo/Asia/Aden\",\n \"usr/share/zoneinfo/Asia/Almaty\",\n \"usr/share/zoneinfo/Asia/Amman\",\n \"usr/share/zoneinfo/Asia/Anadyr\",\n \"usr/share/zoneinfo/Asia/Aqtau\",\n \"usr/share/zoneinfo/Asia/Aqtobe\",\n \"usr/share/zoneinfo/Asia/Ashgabat\",\n \"usr/share/zoneinfo/Asia/Ashkhabad\",\n \"usr/share/zoneinfo/Asia/Atyrau\",\n \"usr/share/zoneinfo/Asia/Baghdad\",\n \"usr/share/zoneinfo/Asia/Bahrain\",\n \"usr/share/zoneinfo/Asia/Baku\",\n \"usr/share/zoneinfo/Asia/Bangkok\",\n \"usr/share/zoneinfo/Asia/Barnaul\",\n \"usr/share/zoneinfo/Asia/Beirut\",\n \"usr/share/zoneinfo/Asia/Bishkek\",\n \"usr/share/zoneinfo/Asia/Brunei\",\n \"usr/share/zoneinfo/Asia/Calcutta\",\n \"usr/share/zoneinfo/Asia/Chita\",\n \"usr/share/zoneinfo/Asia/Choibalsan\",\n \"usr/share/zoneinfo/Asia/Chongqing\",\n \"usr/share/zoneinfo/Asia/Chungking\",\n \"usr/share/zoneinfo/Asia/Colombo\",\n \"usr/share/zoneinfo/Asia/Dacca\",\n \"usr/share/zoneinfo/Asia/Damascus\",\n \"usr/share/zoneinfo/Asia/Dhaka\",\n \"usr/share/zoneinfo/Asia/Dili\",\n \"usr/share/zoneinfo/Asia/Dubai\",\n \"usr/share/zoneinfo/Asia/Dushanbe\",\n \"usr/share/zoneinfo/Asia/Famagusta\",\n \"usr/share/zoneinfo/Asia/Gaza\",\n \"usr/share/zoneinfo/Asia/Harbin\",\n \"usr/share/zoneinfo/Asia/Hebron\",\n \"usr/share/zoneinfo/Asia/Ho_Chi_Minh\",\n \"usr/share/zoneinfo/Asia/Hong_Kong\",\n \"usr/share/zoneinfo/Asia/Hovd\",\n \"usr/share/zoneinfo/Asia/Irkutsk\",\n \"usr/share/zoneinfo/Asia/Istanbul\",\n \"usr/share/zoneinfo/Asia/Jakarta\",\n \"usr/share/zoneinfo/Asia/Jayapura\",\n \"usr/share/zoneinfo/Asia/Jerusalem\",\n \"usr/share/zoneinfo/Asia/Kabul\",\n \"usr/share/zoneinfo/Asia/Kamchatka\",\n \"usr/share/zoneinfo/Asia/Karachi\",\n \"usr/share/zoneinfo/Asia/Kashgar\",\n \"usr/share/zoneinfo/Asia/Kathmandu\",\n \"usr/share/zoneinfo/Asia/Katmandu\",\n \"usr/share/zoneinfo/Asia/Khandyga\",\n \"usr/share/zoneinfo/Asia/Kolkata\",\n \"usr/share/zoneinfo/Asia/Krasnoyarsk\",\n \"usr/share/zoneinfo/Asia/Kuala_Lumpur\",\n \"usr/share/zoneinfo/Asia/Kuching\",\n \"usr/share/zoneinfo/Asia/Kuwait\",\n \"usr/share/zoneinfo/Asia/Macao\",\n \"usr/share/zoneinfo/Asia/Macau\",\n \"usr/share/zoneinfo/Asia/Magadan\",\n \"usr/share/zoneinfo/Asia/Makassar\",\n \"usr/share/zoneinfo/Asia/Manila\",\n \"usr/share/zoneinfo/Asia/Muscat\",\n \"usr/share/zoneinfo/Asia/Nicosia\",\n \"usr/share/zoneinfo/Asia/Novokuznetsk\",\n \"usr/share/zoneinfo/Asia/Novosibirsk\",\n \"usr/share/zoneinfo/Asia/Omsk\",\n \"usr/share/zoneinfo/Asia/Oral\",\n \"usr/share/zoneinfo/Asia/Phnom_Penh\",\n \"usr/share/zoneinfo/Asia/Pontianak\",\n \"usr/share/zoneinfo/Asia/Pyongyang\",\n \"usr/share/zoneinfo/Asia/Qatar\",\n \"usr/share/zoneinfo/Asia/Qostanay\",\n \"usr/share/zoneinfo/Asia/Qyzylorda\",\n \"usr/share/zoneinfo/Asia/Rangoon\",\n \"usr/share/zoneinfo/Asia/Riyadh\",\n \"usr/share/zoneinfo/Asia/Saigon\",\n \"usr/share/zoneinfo/Asia/Sakhalin\",\n \"usr/share/zoneinfo/Asia/Samarkand\",\n \"usr/share/zoneinfo/Asia/Seoul\",\n \"usr/share/zoneinfo/Asia/Shanghai\",\n \"usr/share/zoneinfo/Asia/Singapore\",\n \"usr/share/zoneinfo/Asia/Srednekolymsk\",\n \"usr/share/zoneinfo/Asia/Taipei\",\n \"usr/share/zoneinfo/Asia/Tashkent\",\n \"usr/share/zoneinfo/Asia/Tbilisi\",\n \"usr/share/zoneinfo/Asia/Tehran\",\n \"usr/share/zoneinfo/Asia/Tel_Aviv\",\n \"usr/share/zoneinfo/Asia/Thimbu\",\n \"usr/share/zoneinfo/Asia/Thimphu\",\n \"usr/share/zoneinfo/Asia/Tokyo\",\n \"usr/share/zoneinfo/Asia/Tomsk\",\n \"usr/share/zoneinfo/Asia/Ujung_Pandang\",\n \"usr/share/zoneinfo/Asia/Ulaanbaatar\",\n \"usr/share/zoneinfo/Asia/Ulan_Bator\",\n \"usr/share/zoneinfo/Asia/Urumqi\",\n \"usr/share/zoneinfo/Asia/Ust-Nera\",\n \"usr/share/zoneinfo/Asia/Vientiane\",\n \"usr/share/zoneinfo/Asia/Vladivostok\",\n \"usr/share/zoneinfo/Asia/Yakutsk\",\n \"usr/share/zoneinfo/Asia/Yangon\",\n \"usr/share/zoneinfo/Asia/Yekaterinburg\",\n \"usr/share/zoneinfo/Asia/Yerevan\",\n \"usr/share/zoneinfo/Atlantic/Azores\",\n \"usr/share/zoneinfo/Atlantic/Bermuda\",\n \"usr/share/zoneinfo/Atlantic/Canary\",\n \"usr/share/zoneinfo/Atlantic/Cape_Verde\",\n \"usr/share/zoneinfo/Atlantic/Faeroe\",\n \"usr/share/zoneinfo/Atlantic/Faroe\",\n \"usr/share/zoneinfo/Atlantic/Jan_Mayen\",\n \"usr/share/zoneinfo/Atlantic/Madeira\",\n \"usr/share/zoneinfo/Atlantic/Reykjavik\",\n \"usr/share/zoneinfo/Atlantic/South_Georgia\",\n \"usr/share/zoneinfo/Atlantic/St_Helena\",\n \"usr/share/zoneinfo/Atlantic/Stanley\",\n \"usr/share/zoneinfo/Australia/ACT\",\n \"usr/share/zoneinfo/Australia/Adelaide\",\n \"usr/share/zoneinfo/Australia/Brisbane\",\n \"usr/share/zoneinfo/Australia/Broken_Hill\",\n \"usr/share/zoneinfo/Australia/Canberra\",\n \"usr/share/zoneinfo/Australia/Currie\",\n \"usr/share/zoneinfo/Australia/Darwin\",\n \"usr/share/zoneinfo/Australia/Eucla\",\n \"usr/share/zoneinfo/Australia/Hobart\",\n \"usr/share/zoneinfo/Australia/LHI\",\n \"usr/share/zoneinfo/Australia/Lindeman\",\n \"usr/share/zoneinfo/Australia/Lord_Howe\",\n \"usr/share/zoneinfo/Australia/Melbourne\",\n \"usr/share/zoneinfo/Australia/NSW\",\n \"usr/share/zoneinfo/Australia/North\",\n \"usr/share/zoneinfo/Australia/Perth\",\n \"usr/share/zoneinfo/Australia/Queensland\",\n \"usr/share/zoneinfo/Australia/South\",\n \"usr/share/zoneinfo/Australia/Sydney\",\n \"usr/share/zoneinfo/Australia/Tasmania\",\n \"usr/share/zoneinfo/Australia/Victoria\",\n \"usr/share/zoneinfo/Australia/West\",\n \"usr/share/zoneinfo/Australia/Yancowinna\",\n \"usr/share/zoneinfo/Brazil/Acre\",\n \"usr/share/zoneinfo/Brazil/DeNoronha\",\n \"usr/share/zoneinfo/Brazil/East\",\n \"usr/share/zoneinfo/Brazil/West\",\n \"usr/share/zoneinfo/Canada/Atlantic\",\n \"usr/share/zoneinfo/Canada/Central\",\n \"usr/share/zoneinfo/Canada/Eastern\",\n \"usr/share/zoneinfo/Canada/Mountain\",\n \"usr/share/zoneinfo/Canada/Newfoundland\",\n \"usr/share/zoneinfo/Canada/Pacific\",\n \"usr/share/zoneinfo/Canada/Saskatchewan\",\n \"usr/share/zoneinfo/Canada/Yukon\",\n \"usr/share/zoneinfo/Chile/Continental\",\n \"usr/share/zoneinfo/Chile/EasterIsland\",\n \"usr/share/zoneinfo/Etc/GMT\",\n \"usr/share/zoneinfo/Etc/GMT+0\",\n \"usr/share/zoneinfo/Etc/GMT+1\",\n \"usr/share/zoneinfo/Etc/GMT+10\",\n \"usr/share/zoneinfo/Etc/GMT+11\",\n \"usr/share/zoneinfo/Etc/GMT+12\",\n \"usr/share/zoneinfo/Etc/GMT+2\",\n \"usr/share/zoneinfo/Etc/GMT+3\",\n \"usr/share/zoneinfo/Etc/GMT+4\",\n \"usr/share/zoneinfo/Etc/GMT+5\",\n \"usr/share/zoneinfo/Etc/GMT+6\",\n \"usr/share/zoneinfo/Etc/GMT+7\",\n \"usr/share/zoneinfo/Etc/GMT+8\",\n \"usr/share/zoneinfo/Etc/GMT+9\",\n \"usr/share/zoneinfo/Etc/GMT-0\",\n \"usr/share/zoneinfo/Etc/GMT-1\",\n \"usr/share/zoneinfo/Etc/GMT-10\",\n \"usr/share/zoneinfo/Etc/GMT-11\",\n \"usr/share/zoneinfo/Etc/GMT-12\",\n \"usr/share/zoneinfo/Etc/GMT-13\",\n \"usr/share/zoneinfo/Etc/GMT-14\",\n \"usr/share/zoneinfo/Etc/GMT-2\",\n \"usr/share/zoneinfo/Etc/GMT-3\",\n \"usr/share/zoneinfo/Etc/GMT-4\",\n \"usr/share/zoneinfo/Etc/GMT-5\",\n \"usr/share/zoneinfo/Etc/GMT-6\",\n \"usr/share/zoneinfo/Etc/GMT-7\",\n \"usr/share/zoneinfo/Etc/GMT-8\",\n \"usr/share/zoneinfo/Etc/GMT-9\",\n \"usr/share/zoneinfo/Etc/GMT0\",\n \"usr/share/zoneinfo/Etc/Greenwich\",\n \"usr/share/zoneinfo/Etc/UCT\",\n \"usr/share/zoneinfo/Etc/UTC\",\n \"usr/share/zoneinfo/Etc/Universal\",\n \"usr/share/zoneinfo/Etc/Zulu\",\n \"usr/share/zoneinfo/Europe/Amsterdam\",\n \"usr/share/zoneinfo/Europe/Andorra\",\n \"usr/share/zoneinfo/Europe/Astrakhan\",\n \"usr/share/zoneinfo/Europe/Athens\",\n \"usr/share/zoneinfo/Europe/Belfast\",\n \"usr/share/zoneinfo/Europe/Belgrade\",\n \"usr/share/zoneinfo/Europe/Berlin\",\n \"usr/share/zoneinfo/Europe/Bratislava\",\n \"usr/share/zoneinfo/Europe/Brussels\",\n \"usr/share/zoneinfo/Europe/Bucharest\",\n \"usr/share/zoneinfo/Europe/Budapest\",\n \"usr/share/zoneinfo/Europe/Busingen\",\n \"usr/share/zoneinfo/Europe/Chisinau\",\n \"usr/share/zoneinfo/Europe/Copenhagen\",\n \"usr/share/zoneinfo/Europe/Dublin\",\n \"usr/share/zoneinfo/Europe/Gibraltar\",\n \"usr/share/zoneinfo/Europe/Guernsey\",\n \"usr/share/zoneinfo/Europe/Helsinki\",\n \"usr/share/zoneinfo/Europe/Isle_of_Man\",\n \"usr/share/zoneinfo/Europe/Istanbul\",\n \"usr/share/zoneinfo/Europe/Jersey\",\n \"usr/share/zoneinfo/Europe/Kaliningrad\",\n \"usr/share/zoneinfo/Europe/Kiev\",\n \"usr/share/zoneinfo/Europe/Kirov\",\n \"usr/share/zoneinfo/Europe/Kyiv\",\n \"usr/share/zoneinfo/Europe/Lisbon\",\n \"usr/share/zoneinfo/Europe/Ljubljana\",\n \"usr/share/zoneinfo/Europe/London\",\n \"usr/share/zoneinfo/Europe/Luxembourg\",\n \"usr/share/zoneinfo/Europe/Madrid\",\n \"usr/share/zoneinfo/Europe/Malta\",\n \"usr/share/zoneinfo/Europe/Mariehamn\",\n \"usr/share/zoneinfo/Europe/Minsk\",\n \"usr/share/zoneinfo/Europe/Monaco\",\n \"usr/share/zoneinfo/Europe/Moscow\",\n \"usr/share/zoneinfo/Europe/Nicosia\",\n \"usr/share/zoneinfo/Europe/Oslo\",\n \"usr/share/zoneinfo/Europe/Paris\",\n \"usr/share/zoneinfo/Europe/Podgorica\",\n \"usr/share/zoneinfo/Europe/Prague\",\n \"usr/share/zoneinfo/Europe/Riga\",\n \"usr/share/zoneinfo/Europe/Rome\",\n \"usr/share/zoneinfo/Europe/Samara\",\n \"usr/share/zoneinfo/Europe/San_Marino\",\n \"usr/share/zoneinfo/Europe/Sarajevo\",\n \"usr/share/zoneinfo/Europe/Saratov\",\n \"usr/share/zoneinfo/Europe/Simferopol\",\n \"usr/share/zoneinfo/Europe/Skopje\",\n \"usr/share/zoneinfo/Europe/Sofia\",\n \"usr/share/zoneinfo/Europe/Stockholm\",\n \"usr/share/zoneinfo/Europe/Tallinn\",\n \"usr/share/zoneinfo/Europe/Tirane\",\n \"usr/share/zoneinfo/Europe/Tiraspol\",\n \"usr/share/zoneinfo/Europe/Ulyanovsk\",\n \"usr/share/zoneinfo/Europe/Uzhgorod\",\n \"usr/share/zoneinfo/Europe/Vaduz\",\n \"usr/share/zoneinfo/Europe/Vatican\",\n \"usr/share/zoneinfo/Europe/Vienna\",\n \"usr/share/zoneinfo/Europe/Vilnius\",\n \"usr/share/zoneinfo/Europe/Volgograd\",\n \"usr/share/zoneinfo/Europe/Warsaw\",\n \"usr/share/zoneinfo/Europe/Zagreb\",\n \"usr/share/zoneinfo/Europe/Zaporozhye\",\n \"usr/share/zoneinfo/Europe/Zurich\",\n \"usr/share/zoneinfo/Indian/Antananarivo\",\n \"usr/share/zoneinfo/Indian/Chagos\",\n \"usr/share/zoneinfo/Indian/Christmas\",\n \"usr/share/zoneinfo/Indian/Cocos\",\n \"usr/share/zoneinfo/Indian/Comoro\",\n \"usr/share/zoneinfo/Indian/Kerguelen\",\n \"usr/share/zoneinfo/Indian/Mahe\",\n \"usr/share/zoneinfo/Indian/Maldives\",\n \"usr/share/zoneinfo/Indian/Mauritius\",\n \"usr/share/zoneinfo/Indian/Mayotte\",\n \"usr/share/zoneinfo/Indian/Reunion\",\n \"usr/share/zoneinfo/Mexico/BajaNorte\",\n \"usr/share/zoneinfo/Mexico/BajaSur\",\n \"usr/share/zoneinfo/Mexico/General\",\n \"usr/share/zoneinfo/Pacific/Apia\",\n \"usr/share/zoneinfo/Pacific/Auckland\",\n \"usr/share/zoneinfo/Pacific/Bougainville\",\n \"usr/share/zoneinfo/Pacific/Chatham\",\n \"usr/share/zoneinfo/Pacific/Chuuk\",\n \"usr/share/zoneinfo/Pacific/Easter\",\n \"usr/share/zoneinfo/Pacific/Efate\",\n \"usr/share/zoneinfo/Pacific/Enderbury\",\n \"usr/share/zoneinfo/Pacific/Fakaofo\",\n \"usr/share/zoneinfo/Pacific/Fiji\",\n \"usr/share/zoneinfo/Pacific/Funafuti\",\n \"usr/share/zoneinfo/Pacific/Galapagos\",\n \"usr/share/zoneinfo/Pacific/Gambier\",\n \"usr/share/zoneinfo/Pacific/Guadalcanal\",\n \"usr/share/zoneinfo/Pacific/Guam\",\n \"usr/share/zoneinfo/Pacific/Honolulu\",\n \"usr/share/zoneinfo/Pacific/Johnston\",\n \"usr/share/zoneinfo/Pacific/Kanton\",\n \"usr/share/zoneinfo/Pacific/Kiritimati\",\n \"usr/share/zoneinfo/Pacific/Kosrae\",\n \"usr/share/zoneinfo/Pacific/Kwajalein\",\n \"usr/share/zoneinfo/Pacific/Majuro\",\n \"usr/share/zoneinfo/Pacific/Marquesas\",\n \"usr/share/zoneinfo/Pacific/Midway\",\n \"usr/share/zoneinfo/Pacific/Nauru\",\n \"usr/share/zoneinfo/Pacific/Niue\",\n \"usr/share/zoneinfo/Pacific/Norfolk\",\n \"usr/share/zoneinfo/Pacific/Noumea\",\n \"usr/share/zoneinfo/Pacific/Pago_Pago\",\n \"usr/share/zoneinfo/Pacific/Palau\",\n \"usr/share/zoneinfo/Pacific/Pitcairn\",\n \"usr/share/zoneinfo/Pacific/Pohnpei\",\n \"usr/share/zoneinfo/Pacific/Ponape\",\n \"usr/share/zoneinfo/Pacific/Port_Moresby\",\n \"usr/share/zoneinfo/Pacific/Rarotonga\",\n \"usr/share/zoneinfo/Pacific/Saipan\",\n \"usr/share/zoneinfo/Pacific/Samoa\",\n \"usr/share/zoneinfo/Pacific/Tahiti\",\n \"usr/share/zoneinfo/Pacific/Tarawa\",\n \"usr/share/zoneinfo/Pacific/Tongatapu\",\n \"usr/share/zoneinfo/Pacific/Truk\",\n \"usr/share/zoneinfo/Pacific/Wake\",\n \"usr/share/zoneinfo/Pacific/Wallis\",\n \"usr/share/zoneinfo/Pacific/Yap\",\n \"usr/share/zoneinfo/US/Alaska\",\n \"usr/share/zoneinfo/US/Aleutian\",\n \"usr/share/zoneinfo/US/Arizona\",\n \"usr/share/zoneinfo/US/Central\",\n \"usr/share/zoneinfo/US/East-Indiana\",\n \"usr/share/zoneinfo/US/Eastern\",\n \"usr/share/zoneinfo/US/Hawaii\",\n \"usr/share/zoneinfo/US/Indiana-Starke\",\n \"usr/share/zoneinfo/US/Michigan\",\n \"usr/share/zoneinfo/US/Mountain\",\n \"usr/share/zoneinfo/US/Pacific\",\n \"usr/share/zoneinfo/US/Samoa\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"xz-libs@5.8.3-r0\",\n \"Name\": \"xz-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1ae658a5f132a091\"\n },\n \"Version\": \"5.8.3-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"xz\",\n \"SrcVersion\": \"5.8.3-r0\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"0BSD\",\n \"Public-Domain\",\n \"LGPL-2.1-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:4c92c5be0c5bef404e93c880eba9037a9b147347\",\n \"InstalledFiles\": [\n \"usr/lib/liblzma.so.5\",\n \"usr/lib/liblzma.so.5.8.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"zlib@1.3.2-r0\",\n \"Name\": \"zlib\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e37054a2982d6c16\"\n },\n \"Version\": \"1.3.2-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"zlib\",\n \"SrcVersion\": \"1.3.2-r0\",\n \"Licenses\": [\n \"Zlib\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:dd4c3d102acaef2a71a1495951d55fabc8680613\",\n \"InstalledFiles\": [\n \"usr/lib/libz.so.1\",\n \"usr/lib/libz.so.1.3.2\"\n ],\n \"AnalyzedBy\": \"apk\"\n }\n ],\n \"Vulnerabilities\": [\n {\n \"VulnerabilityID\": \"CVE-2026-85091\",\n \"PkgID\": \"zlib@1.3.2-r0\",\n \"PkgName\": \"zlib\",\n \"PkgIdentifier\": {\n \"PURL\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e37054a2982d6c16\"\n },\n \"InstalledVersion\": \"1.3.2-r0\",\n \"FixedVersion\": \"1.3.2-r1\",\n \"Status\": \"fixed\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"PrimaryURL\": \"https://avd.aquasec.com/nvd/cve-2026-85091\",\n \"DataSource\": {\n \"ID\": \"alpine\",\n \"Name\": \"Alpine Secdb\",\n \"URL\": \"https://secdb.alpinelinux.org/\"\n },\n \"Fingerprint\": \"sha256:d73c01b020c55acc174a3fde47c8af6f5638c58c7189c817edd6862029f6c5f5\",\n \"Title\": \"zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vul ...\",\n \"Description\": \"zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.\",\n \"Severity\": \"MEDIUM\",\n \"CweIDs\": [\n \"CWE-787\"\n ],\n \"VendorSeverity\": {\n \"ubuntu\": 2\n },\n \"References\": [\n \"https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490\",\n \"https://github.com/madler/zlib\",\n \"https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393\",\n \"https://www.cve.org/CVERecord?id=CVE-2026-85091\",\n \"https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate\"\n ],\n \"PublishedDate\": \"2026-09-03T13:06:20.573Z\",\n \"LastModifiedDate\": \"2026-09-09T20:41:07.123Z\"\n }\n ]\n },\n {\n \"Target\": \"Python\",\n \"Class\": \"lang-pkgs\",\n \"Type\": \"python-pkg\",\n \"Packages\": [\n {\n \"Name\": \"PyJWT\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/pyjwt@2.15.1\",\n \"UID\": \"d3f5f9a421b8abc9\"\n },\n \"Version\": \"2.15.1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"cffi\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/cffi@2.1.1\",\n \"UID\": \"21042e2f37e33c05\"\n },\n \"Version\": \"2.1.1\",\n \"Licenses\": [\n \"MIT-0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"cryptography\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/cryptography@50.0.1\",\n \"UID\": \"dcb3df6383fe2a60\"\n },\n \"Version\": \"50.0.1\",\n \"Licenses\": [\n \"Apache-2.0 OR BSD-3-Clause\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"informed-decision\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/informed-decision@0.2.0\",\n \"UID\": \"7989f2afae8ff568\"\n },\n \"Version\": \"0.2.0\",\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"pycparser\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/pycparser@3.0\",\n \"UID\": \"e5a4d03f15a695ff\"\n },\n \"Version\": \"3.0\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"waitress\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/waitress@3.0.2\",\n \"UID\": \"806e218e1c1e85f\"\n },\n \"Version\": \"3.0.2\",\n \"Licenses\": [\n \"ZPL-2.1\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n }\n ]\n }\n ]\n}\n" + }, + { + "item_id": "sbom-cdx-json", + "media_type": "application/json", + "content": "{\n \"$schema\": \"http://cyclonedx.org/schema/bom-1.7.schema.json\",\n \"bomFormat\": \"CycloneDX\",\n \"specVersion\": \"1.7\",\n \"serialNumber\": \"urn:uuid:3eaaa94b-5129-41f3-82f2-f8f58ac5239a\",\n \"version\": 1,\n \"metadata\": {\n \"timestamp\": \"2026-10-11T01:22:33+00:00\",\n \"tools\": {\n \"components\": [\n {\n \"type\": \"application\",\n \"manufacturer\": {\n \"name\": \"Aqua Security Software Ltd.\"\n },\n \"group\": \"aquasecurity\",\n \"name\": \"trivy\",\n \"version\": \"0.74.0\"\n }\n ]\n },\n \"component\": {\n \"bom-ref\": \"pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision\",\n \"type\": \"container\",\n \"name\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"purl\": \"pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n },\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\"\n },\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\"\n },\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\"\n },\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:DiffID\",\n \"value\": \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\"\n },\n {\n \"name\": \"aquasecurity:trivy:ImageID\",\n \"value\": \"sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779\"\n },\n {\n \"name\": \"aquasecurity:trivy:Labels:org.opencontainers.image.base.digest\",\n \"value\": \"sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\"\n },\n {\n \"name\": \"aquasecurity:trivy:Labels:org.opencontainers.image.revision\",\n \"value\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\"\n },\n {\n \"name\": \"aquasecurity:trivy:Labels:social.coulomb.release.scope\",\n \"value\": \"INFD-WP-0009-T04/purpose-overlay-v1\"\n },\n {\n \"name\": \"aquasecurity:trivy:Labels:social.coulomb.source.policy.sha256\",\n \"value\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\"\n },\n {\n \"name\": \"aquasecurity:trivy:Reference\",\n \"value\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\"\n },\n {\n \"name\": \"aquasecurity:trivy:RepoDigest\",\n \"value\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\"\n },\n {\n \"name\": \"aquasecurity:trivy:SchemaVersion\",\n \"value\": \"2\"\n },\n {\n \"name\": \"aquasecurity:trivy:Size\",\n \"value\": \"88258048\"\n }\n ]\n }\n },\n \"components\": [\n {\n \"bom-ref\": \"5b71299e-3c0c-4c4f-bd29-865fb14e1758\",\n \"type\": \"operating-system\",\n \"name\": \"alpine\",\n \"version\": \"3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:Class\",\n \"value\": \"os-pkgs\"\n },\n {\n \"name\": \"aquasecurity:trivy:Type\",\n \"value\": \"alpine\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1\",\n \"type\": \"library\",\n \"name\": \".python-rundeps\",\n \"version\": \"20260901.001029\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"51d0c1e7d88a414345799f0309185c625013ef32\"\n }\n ],\n \"purl\": \"pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \".python-rundeps@20260901.001029\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"alpine-baselayout-data\",\n \"version\": \"3.7.2-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-only\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"alpine-baselayout-data@3.7.2-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"alpine-baselayout\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.7.2-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"alpine-baselayout\",\n \"version\": \"3.7.2-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"f0fcfdc2f4da058af6473bc45c4eab62916225b2\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-only\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"alpine-baselayout@3.7.2-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"alpine-baselayout\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.7.2-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"alpine-keys\",\n \"version\": \"2.6-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"d8d6b80e53c059a77e4915da78ba964f3ffea240\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"alpine-keys@2.6-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"alpine-keys\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"2.6-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"alpine-release\",\n \"version\": \"3.24.1-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"bc6912a25cdc7733e0035ed509eceaa4026946e3\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"alpine-release@3.24.1-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"alpine-base\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.24.1-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"apk-tools\",\n \"version\": \"3.0.6-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"043333589798a1f52e09ae63f026c6c8fa676d34\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-only\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"apk-tools@3.0.6-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"apk-tools\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.0.6-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"S\u00f6ren Tempel \"\n },\n \"name\": \"busybox-binsh\",\n \"version\": \"1.37.0-r31\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-only\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"busybox-binsh@1.37.0-r31\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"busybox\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.37.0-r31\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"S\u00f6ren Tempel \"\n },\n \"name\": \"busybox\",\n \"version\": \"1.37.0-r31\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"b5405ebc02f7dd8be95b6265c54b243d5456ab8f\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-only\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"busybox@1.37.0-r31\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"busybox\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.37.0-r31\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"ca-certificates-bundle\",\n \"version\": \"20260611-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"c9534a03750bdfae341f10969016090fc11febbd\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MPL-2.0\"\n }\n },\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"ca-certificates-bundle@20260611-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"ca-certificates\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"20260611-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"ca-certificates\",\n \"version\": \"20260611-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"8f2a04abeb54b331e2970a0a0dffb7bd6bdde567\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MPL-2.0\"\n }\n },\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"ca-certificates@20260611-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"ca-certificates\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"20260611-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"gdbm\",\n \"version\": \"1.26-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"619493d8124fe49a8ee1d8f7a1372cf7e3977337\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-3.0-or-later\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"gdbm@1.26-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"gdbm\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.26-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"keyutils-libs\",\n \"version\": \"1.6.3-r4\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"b7331c96f077fc3522ee4361a441d1097204cd90\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-or-later\"\n }\n },\n {\n \"license\": {\n \"id\": \"LGPL-2.0-or-later\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"keyutils-libs@1.6.3-r4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"keyutils\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.6.3-r4\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"krb5-conf\",\n \"version\": \"1.0-r2\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"40a11e0690a59e110367b62a80661024e9942a2d\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"krb5-conf@1.0-r2\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"krb5-conf\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.0-r2\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"krb5-libs\",\n \"version\": \"1.22.2-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"ef02346e21b817ff379e4601e5b1fc9760e5e31a\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"krb5-libs@1.22.2-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"krb5\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.22.2-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libapk\",\n \"version\": \"3.0.6-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"523a8f58104589f74f743d501c81bf6517155378\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-only\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libapk@3.0.6-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"apk-tools\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.0.6-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libbz2\",\n \"version\": \"1.0.8-r6\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"08566ba5c7af97c25474be8b24e8b48f0116b67d\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"name\": \"bzip-2-1.0.6\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libbz2@1.0.8-r6\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"bzip2\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.0.8-r6\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libcom_err\",\n \"version\": \"1.47.4-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-or-later\"\n }\n },\n {\n \"license\": {\n \"id\": \"LGPL-2.0-or-later\"\n }\n },\n {\n \"license\": {\n \"id\": \"BSD-3-Clause\"\n }\n },\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libcom_err@1.47.4-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"e2fsprogs\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.47.4-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libcrypto3\",\n \"version\": \"3.5.8-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"Apache-2.0\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libcrypto3@3.5.8-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"openssl\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.5.8-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libffi\",\n \"version\": \"3.5.2-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libffi@3.5.2-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"libffi\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.5.2-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Carlo Landmeter \"\n },\n \"name\": \"libintl\",\n \"version\": \"1.0-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"282d6642ccac87237e43a864159d73cf5abe7550\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"LGPL-2.1-or-later\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libintl@1.0-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"gettext\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.0-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Milan P. Stani\u0107 \"\n },\n \"name\": \"libncursesw\",\n \"version\": \"6.6_p20260516-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"9f318e6e324d6827274829194cf6ac6afbaded12\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"name\": \"X-11\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libncursesw@6.6_p20260516-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"ncurses\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"6.6_p20260516-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"name\": \"libnsl\",\n \"version\": \"2.0.1-r2\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"5194adbf26560b52be318481a7af294ab05fd795\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"LGPL-2.0-or-later\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libnsl@2.0.1-r2\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"libnsl\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"2.0.1-r2\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Milan P. Stani\u0107 \"\n },\n \"name\": \"libpanelw\",\n \"version\": \"6.6_p20260516-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"149bdc434232ed11fc5bb975ba519a07154a6f56\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"name\": \"X-11\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libpanelw@6.6_p20260516-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"ncurses\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"6.6_p20260516-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libssl3\",\n \"version\": \"3.5.8-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"5f9b1e55d821953d2e2b1db322dad70a3b5041ea\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"Apache-2.0\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libssl3@3.5.8-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"openssl\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.5.8-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libtirpc-conf\",\n \"version\": \"1.3.5-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"0c17d9988dc986c90e22f79778df047eca9973ff\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"BSD-3-Clause\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libtirpc-conf@1.3.5-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"libtirpc\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.3.5-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libtirpc\",\n \"version\": \"1.3.5-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"c32865bd86a8b8829d152279cabbc5ac6d430eb2\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"BSD-3-Clause\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libtirpc@1.3.5-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"libtirpc\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.3.5-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"libuuid\",\n \"version\": \"2.42.3-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"8f041ef637ad75f381cc0c034f2afbbb0303264e\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"BSD-3-Clause\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libuuid@2.42.3-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"util-linux\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"2.42.3-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Francesco Colista \"\n },\n \"name\": \"libverto\",\n \"version\": \"0.3.2-r2\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"73233059338142e4ac6d8fb8bb0074e93da75dc1\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"libverto@0.3.2-r2\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"libverto\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"0.3.2-r2\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"musl-utils\",\n \"version\": \"1.2.6-r2\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"75ada3c48d63ec5d87c42fdf934a3fdd11298dc5\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n },\n {\n \"license\": {\n \"id\": \"BSD-2-Clause\"\n }\n },\n {\n \"license\": {\n \"id\": \"GPL-2.0-or-later\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"musl-utils@1.2.6-r2\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"musl\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.2.6-r2\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"musl\",\n \"version\": \"1.2.6-r2\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"0f7e5827e4e1a73631beda27b78431a8ba240e05\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"musl@1.2.6-r2\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"musl\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.2.6-r2\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Milan P. Stani\u0107 \"\n },\n \"name\": \"ncurses-terminfo-base\",\n \"version\": \"6.6_p20260516-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"9d551d828e9c8ee52c5801c1d6046828ebf15752\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"name\": \"X-11\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"ncurses-terminfo-base@6.6_p20260516-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"ncurses\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"6.6_p20260516-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"qaqland \"\n },\n \"name\": \"readline\",\n \"version\": \"8.3.3-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"945b16e378bc00e44d89d4de8124bba7647fdf4d\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-3.0-or-later\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"readline@8.3.3-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"readline\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"8.3.3-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"scanelf\",\n \"version\": \"1.3.9-r1\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"013f903d0ba219673aebbdd04f74bb5ed82b01f0\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-only\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"scanelf@1.3.9-r1\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"pax-utils\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.3.9-r1\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Jingyun Hua \"\n },\n \"name\": \"sqlite-libs\",\n \"version\": \"3.53.4-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"f7630ceb37c232b6609861aeab6cdb9cd120e6fa\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"blessing\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"sqlite-libs@3.53.4-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"sqlite\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"3.53.4-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"S\u00f6ren Tempel \"\n },\n \"name\": \"ssl_client\",\n \"version\": \"1.37.0-r31\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"c220f4a5125a313af733e98def94132bb1e9d40d\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-only\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"ssl_client@1.37.0-r31\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"busybox\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.37.0-r31\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"tzdata\",\n \"version\": \"2026c-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"61f7544ecd8dd63eac23fe3e645702fda92ef02a\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"name\": \"Public-Domain\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"tzdata@2026c-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"tzdata\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"2026c-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"xz-libs\",\n \"version\": \"5.8.3-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"4c92c5be0c5bef404e93c880eba9037a9b147347\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"GPL-2.0-or-later\"\n }\n },\n {\n \"license\": {\n \"id\": \"0BSD\"\n }\n },\n {\n \"license\": {\n \"name\": \"Public-Domain\"\n }\n },\n {\n \"license\": {\n \"id\": \"LGPL-2.1-or-later\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"xz-libs@5.8.3-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"xz\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"5.8.3-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1\",\n \"type\": \"library\",\n \"supplier\": {\n \"name\": \"Natanael Copa \"\n },\n \"name\": \"zlib\",\n \"version\": \"1.3.2-r0\",\n \"hashes\": [\n {\n \"alg\": \"SHA-1\",\n \"content\": \"dd4c3d102acaef2a71a1495951d55fabc8680613\"\n }\n ],\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"Zlib\"\n }\n }\n ],\n \"purl\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgID\",\n \"value\": \"zlib@1.3.2-r0\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"alpine\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcName\",\n \"value\": \"zlib\"\n },\n {\n \"name\": \"aquasecurity:trivy:SrcVersion\",\n \"value\": \"1.3.2-r0\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:pypi/cffi@2.1.1\",\n \"type\": \"library\",\n \"name\": \"cffi\",\n \"version\": \"2.1.1\",\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT-0\"\n }\n }\n ],\n \"purl\": \"pkg:pypi/cffi@2.1.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:FilePath\",\n \"value\": \"opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"python-pkg\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:pypi/cryptography@50.0.1\",\n \"type\": \"library\",\n \"name\": \"cryptography\",\n \"version\": \"50.0.1\",\n \"licenses\": [\n {\n \"expression\": \"Apache-2.0 OR BSD-3-Clause\"\n }\n ],\n \"purl\": \"pkg:pypi/cryptography@50.0.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:FilePath\",\n \"value\": \"opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"python-pkg\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:pypi/informed-decision@0.2.0\",\n \"type\": \"library\",\n \"name\": \"informed-decision\",\n \"version\": \"0.2.0\",\n \"purl\": \"pkg:pypi/informed-decision@0.2.0\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:FilePath\",\n \"value\": \"opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"python-pkg\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:pypi/pycparser@3.0\",\n \"type\": \"library\",\n \"name\": \"pycparser\",\n \"version\": \"3.0\",\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"BSD-3-Clause\"\n }\n }\n ],\n \"purl\": \"pkg:pypi/pycparser@3.0\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:FilePath\",\n \"value\": \"opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"python-pkg\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:pypi/pyjwt@2.15.1\",\n \"type\": \"library\",\n \"name\": \"PyJWT\",\n \"version\": \"2.15.1\",\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"MIT\"\n }\n }\n ],\n \"purl\": \"pkg:pypi/pyjwt@2.15.1\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:FilePath\",\n \"value\": \"opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"python-pkg\"\n }\n ]\n },\n {\n \"bom-ref\": \"pkg:pypi/waitress@3.0.2\",\n \"type\": \"library\",\n \"name\": \"waitress\",\n \"version\": \"3.0.2\",\n \"licenses\": [\n {\n \"license\": {\n \"id\": \"ZPL-2.1\"\n }\n }\n ],\n \"purl\": \"pkg:pypi/waitress@3.0.2\",\n \"properties\": [\n {\n \"name\": \"aquasecurity:trivy:FilePath\",\n \"value\": \"opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDiffID\",\n \"value\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"name\": \"aquasecurity:trivy:LayerDigest\",\n \"value\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\"\n },\n {\n \"name\": \"aquasecurity:trivy:PkgType\",\n \"value\": \"python-pkg\"\n }\n ]\n }\n ],\n \"dependencies\": [\n {\n \"ref\": \"5b71299e-3c0c-4c4f-bd29-865fb14e1758\",\n \"dependsOn\": [\n \"pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1\",\n \"pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1\",\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1\",\n \"dependsOn\": [\n \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1\"\n ]\n },\n {\n \"ref\": \"pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision\",\n \"dependsOn\": [\n \"5b71299e-3c0c-4c4f-bd29-865fb14e1758\",\n \"pkg:pypi/cffi@2.1.1\",\n \"pkg:pypi/cryptography@50.0.1\",\n \"pkg:pypi/informed-decision@0.2.0\",\n \"pkg:pypi/pycparser@3.0\",\n \"pkg:pypi/pyjwt@2.15.1\",\n \"pkg:pypi/waitress@3.0.2\"\n ]\n },\n {\n \"ref\": \"pkg:pypi/cffi@2.1.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:pypi/cryptography@50.0.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:pypi/informed-decision@0.2.0\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:pypi/pycparser@3.0\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:pypi/pyjwt@2.15.1\",\n \"dependsOn\": []\n },\n {\n \"ref\": \"pkg:pypi/waitress@3.0.2\",\n \"dependsOn\": []\n }\n ],\n \"vulnerabilities\": [\n {\n \"id\": \"CVE-2026-85091\",\n \"source\": {\n \"name\": \"alpine\",\n \"url\": \"https://secdb.alpinelinux.org/\"\n },\n \"ratings\": [\n {\n \"source\": {\n \"name\": \"ubuntu\"\n },\n \"severity\": \"medium\"\n }\n ],\n \"cwes\": [\n 787\n ],\n \"description\": \"zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.\",\n \"recommendation\": \"Upgrade zlib to version 1.3.2-r1\",\n \"advisories\": [\n {\n \"url\": \"https://avd.aquasec.com/nvd/cve-2026-85091\"\n },\n {\n \"url\": \"https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490\"\n },\n {\n \"url\": \"https://github.com/madler/zlib\"\n },\n {\n \"url\": \"https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393\"\n },\n {\n \"url\": \"https://www.cve.org/CVERecord?id=CVE-2026-85091\"\n },\n {\n \"url\": \"https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate\"\n }\n ],\n \"published\": \"2026-09-03T13:06:20+00:00\",\n \"updated\": \"2026-09-09T20:41:07+00:00\",\n \"affects\": [\n {\n \"ref\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1\",\n \"versions\": [\n {\n \"version\": \"1.3.2-r0\",\n \"status\": \"affected\"\n }\n ]\n }\n ]\n }\n ]\n}\n" + }, + { + "item_id": "check-installed-py", + "media_type": "text/plain", + "content": "import copy,json,time\nfrom datetime import datetime,timezone\nfrom informed_decision.policy import PolicyClient,CONTRACT,submitted_digest\npin='sha256:'+'b'*64\nreq={'id':'image-purpose-fixture','tenant':'tenant:platform','subject':{'id':'synthetic','type':'service','tenant':'tenant:platform'},'resource':{'id':'memo:fixture','type':'memo','system':'informed-decision','tenant':'tenant:platform'},'action':'register','context':{}}\nclass Transport:\n def request(self,*args,**kwargs):\n now=time.time(); stamp=lambda t:datetime.fromtimestamp(t,timezone.utc).isoformat()\n b={**copy.deepcopy({k:req[k] for k in ('tenant','subject','action','resource','context')}),'request_digest':'sha256:'+'e'*64,'submitted_request_digest':submitted_digest(req)}\n if self.purpose!='ABSENT':b['purpose']=self.purpose\n d={'id':'synthetic-decision','contract_version':CONTRACT,'request_id':req['id'],'effect':'allow','matched_policy_version':'v1','subject':req['subject'],'resource':req['resource'],'binding':b,'lifetime':{'kind':'ttl','not_before':stamp(now-1),'expires_at':stamp(now+60)},'provenance':{'policy_package':'fixture','policy_version':'v1','policy_package_digest':pin,'registry_snapshot_digest':'sha256:'+'c'*64,'evaluator':'flex-auth/fixture','decision_time':stamp(now)}}\n return 200,d\nchecks=[]\nfor purpose in ('ABSENT','','readback','enforcement','unknown',None,False,0,[],{}):\n t=Transport();t.purpose=purpose\n c=PolicyClient('https://fixture.invalid',lambda:'synthetic-only',package='fixture',version='v1',package_digest=pin,transport=t)\n o=c.check(req)\n if purpose in ('ABSENT',''):assert o.outcome=='allow';o.require_current(time.time())\n else:assert o.outcome=='invalid_decision' and o.decision_json is None\n checks.append(str(purpose))\nprint(json.dumps({'installed_image_purpose_variants':len(checks),'binding_forms_allowed':2,'advisory_or_malformed_refused':8,'synthetic_only':True,'native_provider':False}))\n" + }, + { + "item_id": "native-backup-restore-protocol-md", + "media_type": "text/markdown", + "content": "# Protected native backup/restore and image-only release protocol\n\nPrepared protocol for `INFD-WP-0009-T04/purpose-overlay-v1`. No actual native backup, data export, restore, workload change or approval is recorded here. Candidate registry image identity remains a prerequisite; only after actual artifact proof may the founder approve one exact conditional protocol/rollout packet. The config-only7db8485 approval is outside this scope.\n\n## Preconditions and protected custody\n\nFreeze exact candidate and prior7f5c6cb image digests, source/installed policy hashes, current manually managed Argo Application/revision, runtime ConfigMap6c221878d051, Deployment UID/template/spec, schema5, policy package pins, database path `/data/private/review.sqlite`, PVC binding, replicas1/Recreate and stable keys for intended verification. Confirm no concurrent writer or custody change. Use fixed metadata; never fetch Secret objects or token values. A changed image/config/schema/owner invalidates the packet. Fresh resources/headroom and exact source/native server-dry-run/diff remain required.\n\nBackups are private evidence containing real decision records, not logs or packet attachments. Allocate a unique backup directory under existing protected PVC custody, owned10001, mode0700, snapshot file0600, no symlink/hardlink/reused output path. An off-cluster copy belongs only in the already established ignored `.private-backups/` custody with0700/0600 permissions; no Git, StateHub, public object store or terminal-content dump. Record only schema, integrity pass/fail, bounded table/state counts and protected receipt identifier; retain byte digests in protected custody if needed for internal copy identity. No credential, record payload or token fingerprint enters public evidence.\n\n## Approved online compatibility drill\n\nWithin the explicit founder-approved action, run the existing base image's `informed-decision-admin backup --db /data/private/review.sqlite --output ` in the actual serving workload. This uses SQLite's backup API for a transactionally consistent snapshot; copying a live main database while ignoring WAL is prohibited. Suppress raw failures/output and retain only sanitized status. Observe schema/integrity and count-only metadata from the resulting snapshot, not record content.\n\nTransfer that consistent snapshot only into protected off-cluster custody through the existing authorized operator lane. The copy is real production data even in build mode. Verify private permissions, unique identity and protected internal digest agreement. Do not export mounted workload credentials or directory trees; copy only the exact snapshot.\n\nCreate a separate private disposable restore volume/directory; retain the original snapshot unchanged. Run the exact published candidate with network disabled, no production ConfigMap/token mounts, read-only image and only that isolated volume writable. Override the service entrypoint with the owner's count-only administrative inspection/integrity check; do not start HTTP listeners, audit delivery, requester exchanges or approval operations. The current candidate changes policy.py only and retains the schema/store module bytes; still prove schema5, SQLite integrity and exact bounded counts before/after opening the restored copy. Refuse any migration/downgrade, lost/changed counts, unexpected write class or unknown outcome. Keep pending/uncertain submission and outbox states; never replay, discard or mark them delivered to green the drill. Cleanup only the disposable copy/volume after verified receipt; retain the original protected backup for the approved recovery interval.\n\nThis step is actual native-data compatibility evidence once performed. Its previous synthetic fixture checks remain mechanism evidence and cannot be renamed native success. A failed drill stops rollout and remains a failed/unverified outcome in the same trial.\n\n## Fresh cutover snapshot and single-writer rollout\n\nAfter successful actual-data compatibility checks, create another unique SQLite-consistent online snapshot immediately before the image cutover, retaining its point-in-time schema/integrity/count receipt. This is an online transactional snapshot, not a claim that dispatchers or human writes were quiesced. Every later committed record remains in the live database; same-schema rollback retains that database and never restores the earlier snapshot over it. The narrow image-only update does not need dispatcher/configuration/PVC/temporary-pod changes or a schema cutover. If fresh verification shows a migration or any data-restoration requirement, stop and refine the proposal rather than applying this protocol.\n\nThe existing Recreate rollout drains/stops the single old writer before starting the new image on the same PVC; the inherited single-writer lock independently refuses concurrent serving processes. Do not add an admin pod, scale-to-zero, dispatcher stop, network-policy rewrite or snapshot overwrite as an improvised image-only step. The existing owner admin backup operation runs inside the admitted serving workload, and its separate protected restore drill runs off-cluster with network disabled and no workload credentials. Those exact custody operations must be enumerated in the founder packet alongside the one Deployment image change.\n\nOnce backup/compatibility/preflight gates pass, manually pin the existing Argo Application to the exact reviewed source revision and sync only Deployment/informed-decision with prune false, keeping the current immutable runtime ConfigMap and all other resources. The source patch changes only the image in admission/rendered Deployment; no Secret, PVC, policy, database or dispatcher change is included unless separately enumerated in the final proposal. Observe five-minute readiness and exact image/config/schema/pins. Verify native lifecycle binding using stable keys and an isolated installed-client probe based on a real provider response contaminated with advisory purpose; prove refusal before any write. Do not contaminate the live PDP, create human approvals, read credentials through CLI, or replay unknown external outcomes for testing.\n\n## Same-schema rollback and evidence retention\n\nOn startup/readiness/binding/refusal failure, retain current database, cutover backup and every post-cutover evidence/uncertain outcome. Restore only the prior7f5c6cb image through the same manual Argo owner path, retaining schema5 and current DB/configuration; never restore an old snapshot over current live evidence just to roll the image back. Verify old image/Ready1, same schema/counts and prior behavior, and reconcile any external effects using existing lifecycle/audit ownership. The narrow overlay's identical store/schema/dependency bytes permit this image-only rollback; it is not permission for a schema downgrade or data loss.\n\nRecord original/approved/executed source and image revisions, backup/drill/cutover/rollout timestamps, exact disposition and sanitized outcomes in the existing supervised trial receipt. EUR0 incremental infrastructure estimate uses existing service/storage/operator lane; protected temporary copy/storage consumption and15\u201330minute recovery time remain operational costs. No EUR incident-loss cap or autonomy grant is inferred. TaskT04 cannot close until actual published image, approved native compatibility and release plus post-release refusal/binding evidence all exist.\n\n## Exact release case identifiers\n\nProposal `INFD-WP-0009-T04/purpose-overlay-v1`, trial `infd-purpose-20261011-r1`.\nProtected native parent `/data/private/purpose-overlay-r1` must be unique/non-symlink, owned10001 and0700. The drill snapshot is `drill.sqlite`, the refreshed pre-cutover snapshot `cutover.sqlite`, each new0600 file; refuse any existing output. Off-cluster custody is the existing ignored Custodian `.private-backups/20261011-infd-purpose-r1` parent0700, files0600; no snapshot is an evidence attachment. Check owner UID, no symlinks, ignored status and free capacity for both native snapshots plus independently protected copies before making any snapshot.\n\nThe disposable offline restore volume is `infd-purpose-r1-restore-20261011`; refuse an existing volume, copy only the selected frozen snapshot, and run exact published candidate763c with networknone/read-only image,128MiB/core1 and no runtime config/token mounts. SQLite `PRAGMA integrity_check` must return `ok`, `PRAGMA user_version`/Store inspection must agree with actual schema5 semantics, and installed admin count-only inspection must match the frozen snapshot. Validate the actual schema representation rather than assume PRAGMA user_version is the schema authority. No synthetic restoration is reported as native restoration. Native original/off-cluster copies remain retained; only the disposable restore copy/volume may be removed under the exact approved cleanup scope.\n" + }, + { + "item_id": "inherited-vulnerability-follow-through-json", + "media_type": "application/json", + "content": "{\n \"id\": \"INFD-RISK-20261011-ZLIB-85091\",\n \"kind\": \"owner-vulnerability-follow-through\",\n \"owner\": \"informed-decision\",\n \"task\": \"INFD-WP-0009-T05\",\n \"status\": \"open\",\n \"created\": \"2026-10-11\",\n \"review_due\": \"2026-10-18\",\n \"finding\": \"CVE-2026-85091\",\n \"scanner_severity\": \"MEDIUM\",\n \"estate_risk_grade\": null,\n \"affected_package\": \"zlib\",\n \"installed\": \"1.3.2-r0\",\n \"fixed\": \"1.3.2-r1\",\n \"actual_current_base_and_candidate_findings_identical\": true,\n \"source_evidence\": \"security-summary.json, trivy-full.json, base-trivy-full.json\",\n \"human_temporary_disposition\": \"pending\",\n \"follow_through\": \"Prepare a separately source-bound official-base/dependency refresh through normal owner CI, verify full scan and runtime compatibility, obtain distinct native release approval before updating this workload\",\n \"manual_review_expiry\": \"Due date requires owner review/escalation if unresolved; no automatic rollback/controller is installed\",\n \"close_condition\": \"Verified installed native fixed package and full unfiltered rescan; preserve original detection and any human disposition\"\n}\n" + }, + { + "item_id": "native-preflight-json", + "media_type": "application/json", + "content": "{\n \"captured_at\": \"2026-10-11T01:25:38.793555+00:00\",\n \"native_workload_changed\": false,\n \"native_backup_restore_executed\": false,\n \"argo\": {\n \"uid\": \"499868f2-eabc-4df4-ae31-b89ce58d750d\",\n \"repoURL\": \"https://forgejo.coulomb.social/coulomb/informed-decision.git\",\n \"targetRevision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"path\": \"deploy/lifecycle\",\n \"destination\": {\n \"namespace\": \"informed-decision\",\n \"server\": \"https://kubernetes.default.svc\"\n },\n \"automated\": false,\n \"sync\": {\n \"comparedTo\": {\n \"destination\": {\n \"namespace\": \"informed-decision\",\n \"server\": \"https://kubernetes.default.svc\"\n },\n \"source\": {\n \"path\": \"deploy/lifecycle\",\n \"repoURL\": \"https://forgejo.coulomb.social/coulomb/informed-decision.git\",\n \"targetRevision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\"\n }\n },\n \"revision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"status\": \"OutOfSync\"\n },\n \"health\": {\n \"lastTransitionTime\": \"2026-10-10T23:14:52Z\",\n \"status\": \"Healthy\"\n }\n },\n \"live_ready_replicas\": 1,\n \"admitted_uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\",\n \"server_dry_run_passed\": true,\n \"admitted_spec_exactly_live_plus_image\": true,\n \"client_diff_exit\": 1,\n \"client_diff_sha256\": \"a4bc024a8cec658f835285ed51964e2e084edbaf103d45a48b89c0950bcd3e7d\",\n \"node_allocated_resources\": \"(Total limits may be over 100 percent, i.e., overcommitted.)\\n Resource Requests Limits\\n -------- -------- ------\\n cpu 3460m (86%) 36200m (905%)\\n memory 9472Mi (59%) 32898Mi (205%)\\n ephemeral-storage 0 (0%) 0 (0%)\\n hugepages-1Gi 0 (0%) 0 (0%)\\n hugepages-2Mi 0 (0%) 0 (0%)\",\n \"all_checks_pass\": true\n}\n" + }, + { + "item_id": "sealed-live-deployment-json", + "media_type": "application/json", + "content": "{\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"metadata\": {\n \"annotations\": {\n \"argocd.argoproj.io/tracking-id\": \"informed-decision:apps/Deployment:informed-decision/informed-decision\",\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"name\": \"informed-decision\",\n \"namespace\": \"informed-decision\",\n \"uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\"\n },\n \"spec\": {\n \"progressDeadlineSeconds\": 600,\n \"replicas\": 1,\n \"revisionHistoryLimit\": 10,\n \"selector\": {\n \"matchLabels\": {\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"strategy\": {\n \"type\": \"Recreate\"\n },\n \"template\": {\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"labels\": {\n \"app.kubernetes.io/component\": \"review\",\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"spec\": {\n \"automountServiceAccountToken\": false,\n \"containers\": [\n {\n \"env\": [\n {\n \"name\": \"INFD_KEYCAPE_ISSUER\",\n \"value\": \"https://kc.coulomb.social\"\n },\n {\n \"name\": \"INFD_CONTAINER_CONFIG\",\n \"value\": \"/configuration/runtime.json\"\n }\n ],\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"imagePullPolicy\": \"IfNotPresent\",\n \"livenessProbe\": {\n \"failureThreshold\": 3,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\",\n \"scheme\": \"HTTP\"\n },\n \"periodSeconds\": 10,\n \"successThreshold\": 1,\n \"timeoutSeconds\": 2\n },\n \"name\": \"informed-decision\",\n \"ports\": [\n {\n \"containerPort\": 8080,\n \"name\": \"http\",\n \"protocol\": \"TCP\"\n },\n {\n \"containerPort\": 8081,\n \"name\": \"workload\",\n \"protocol\": \"TCP\"\n }\n ],\n \"readinessProbe\": {\n \"failureThreshold\": 3,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\",\n \"scheme\": \"HTTP\"\n },\n \"periodSeconds\": 10,\n \"successThreshold\": 1,\n \"timeoutSeconds\": 2\n },\n \"resources\": {\n \"limits\": {\n \"cpu\": \"500m\",\n \"memory\": \"256Mi\"\n },\n \"requests\": {\n \"cpu\": \"5m\",\n \"memory\": \"64Mi\"\n }\n },\n \"securityContext\": {\n \"allowPrivilegeEscalation\": false,\n \"capabilities\": {\n \"drop\": [\n \"ALL\"\n ]\n },\n \"readOnlyRootFilesystem\": true\n },\n \"startupProbe\": {\n \"failureThreshold\": 12,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\",\n \"scheme\": \"HTTP\"\n },\n \"periodSeconds\": 10,\n \"successThreshold\": 1,\n \"timeoutSeconds\": 2\n },\n \"terminationMessagePath\": \"/dev/termination-log\",\n \"terminationMessagePolicy\": \"File\",\n \"volumeMounts\": [\n {\n \"mountPath\": \"/data\",\n \"name\": \"data\"\n },\n {\n \"mountPath\": \"/run/informed-decision\",\n \"name\": \"runtime\"\n },\n {\n \"mountPath\": \"/tmp\",\n \"name\": \"tmp\"\n },\n {\n \"mountPath\": \"/configuration\",\n \"name\": \"configuration\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/policy\",\n \"name\": \"caller\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/audit\",\n \"name\": \"audit\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/kubernetes\",\n \"name\": \"kubernetes-api\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/workload-registry\",\n \"name\": \"workload-registry\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/requester\",\n \"name\": \"sitting-requester\",\n \"readOnly\": true\n }\n ]\n }\n ],\n \"dnsPolicy\": \"ClusterFirst\",\n \"restartPolicy\": \"Always\",\n \"schedulerName\": \"default-scheduler\",\n \"securityContext\": {\n \"fsGroup\": 10001,\n \"fsGroupChangePolicy\": \"OnRootMismatch\",\n \"runAsGroup\": 10001,\n \"runAsNonRoot\": true,\n \"runAsUser\": 10001,\n \"seccompProfile\": {\n \"type\": \"RuntimeDefault\"\n }\n },\n \"serviceAccount\": \"review\",\n \"serviceAccountName\": \"review\",\n \"terminationGracePeriodSeconds\": 45,\n \"volumes\": [\n {\n \"name\": \"data\",\n \"persistentVolumeClaim\": {\n \"claimName\": \"informed-decision-data\"\n }\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"runtime\"\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"tmp\"\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-runtime-6c221878d051\"\n },\n \"name\": \"configuration\"\n },\n {\n \"name\": \"caller\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"audience\": \"flex-auth\",\n \"expirationSeconds\": 3600,\n \"path\": \"token\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"audit\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"token\",\n \"path\": \"token\"\n }\n ],\n \"secretName\": \"informed-decision-audit\"\n }\n },\n {\n \"name\": \"kubernetes-api\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"expirationSeconds\": 600,\n \"path\": \"token\"\n }\n },\n {\n \"configMap\": {\n \"items\": [\n {\n \"key\": \"ca.crt\",\n \"path\": \"ca.crt\"\n }\n ],\n \"name\": \"kube-root-ca.crt\"\n }\n }\n ]\n }\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-workload-registry\"\n },\n \"name\": \"workload-registry\"\n },\n {\n \"name\": \"sitting-requester\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"client-secret\",\n \"path\": \"client-secret\"\n }\n ],\n \"optional\": false,\n \"secretName\": \"informed-decision-sitting-requester\"\n }\n }\n ]\n }\n }\n }\n}\n" + }, + { + "item_id": "change-guard-py", + "media_type": "text/plain", + "content": "\"\"\"Read-only exact Deployment and admission boundaries; no mutation authority.\"\"\"\nimport copy\n\nBASE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173'\nCANDIDATE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a'\n\n\ndef projection(value):\n value = copy.deepcopy(value)\n value.pop('status', None)\n for key in ('resourceVersion', 'generation', 'creationTimestamp', 'managedFields'):\n value['metadata'].pop(key, None)\n for key in ('kubectl.kubernetes.io/last-applied-configuration', 'deployment.kubernetes.io/revision'):\n value['metadata'].get('annotations', {}).pop(key, None)\n return value\n\n\ndef check_current(current, sealed):\n if projection(current) != sealed:\n raise ValueError('sealed live UID or configuration changed')\n\n\ndef check_admitted(admitted, sealed):\n expected = copy.deepcopy(sealed)\n containers = expected['spec']['template']['spec']['containers']\n if len(containers) != 1 or containers[0]['name'] != 'informed-decision' or containers[0]['image'] != BASE:\n raise ValueError('unexpected baseline container identity')\n containers[0]['image'] = CANDIDATE\n if projection(admitted) != expected:\n raise ValueError('admission changed configuration beyond the sole image pin')\n\n\ndef transport_result(exit_code, output):\n import json\n try:\n value = json.loads(output)\n except (ValueError, TypeError):\n return {'all_checks_pass': False, 'reason': 'invalid transport result'}\n if exit_code != 0 or not isinstance(value, dict) or value.get('all_checks_pass') is not True:\n return {'all_checks_pass': False, 'reason': 'read-only preflight refused'}\n return value\n" + }, + { + "item_id": "preflight-py", + "media_type": "text/plain", + "content": "\"\"\"Read-only refresh; exact original capture remains immutable; never execute cutover.\"\"\"\nimport argparse,hashlib,json,subprocess,sys\nfrom pathlib import Path\nfrom change_guard import transport_result\nROOT=Path(__file__).resolve().parent\np=argparse.ArgumentParser();p.add_argument('--receipt-output',type=Path,required=True);p.add_argument('--source-root',type=Path,default=Path('/home/worsch/informed-decision'));a=p.parse_args()\nout=a.receipt_output.resolve()\nif not a.receipt_output.is_absolute() or out==ROOT or ROOT in out.parents or out==a.source_root.resolve() or a.source_root.resolve() in out.parents or out.exists():\n raise SystemExit('unique execution receipt must be outside the sealed packet')\ninputs=json.loads((ROOT/'preflight-inputs.json').read_text())\nfor relative,digest in inputs['packet_files'].items():\n path=ROOT/relative\n if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest()!=digest:raise SystemExit('sealed helper/input bytes changed')\nfor relative,digest in inputs['owner_source_files'].items():\n path=a.source_root/relative\n if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest()!=digest:raise SystemExit('owner source bytes changed')\nprogram=\"import subprocess,json,hashlib,datetime,sys,copy,re\\ncandidate=json.loads(CANDIDATE_LITERAL)\\nsealed_baseline=json.loads(SEALED_LITERAL)\\nexec(GUARD_LITERAL)\\ndef run(args,data=None):\\n p=subprocess.run(args,input=data,text=True,capture_output=True)\\n if p.returncode: raise ValueError('read-only command failed: '+args[1]+' '+args[2])\\n return p.stdout\\nlive=json.loads(run(['kubectl','get','deployment','informed-decision','-n','informed-decision','-o','json']))\\ncheck_current(live,sealed_baseline)\\nspec=live['spec']; cs=spec['template']['spec']['containers'];assert len(cs)==1 and cs[0]['name']=='informed-decision'\\nexpected_env={'INFD_KEYCAPE_ISSUER':'https://kc.coulomb.social','INFD_CONTAINER_CONFIG':'/configuration/runtime.json'}\\nassert cs[0].get('env')==[{'name':'INFD_KEYCAPE_ISSUER','value':expected_env['INFD_KEYCAPE_ISSUER']},{'name':'INFD_CONTAINER_CONFIG','value':expected_env['INFD_CONTAINER_CONFIG']}]\\nassert cs[0]['image']=='forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173'\\nassert spec['replicas']==1 and spec['strategy']=={'type':'Recreate'}\\nassert next(v for v in spec['template']['spec']['volumes'] if v['name']=='configuration')['configMap']['name']=='informed-decision-runtime-6c221878d051'\\nassert live['status'].get('readyReplicas')==1 and live['status'].get('updatedReplicas')==1\\nsealed={'apiVersion':live['apiVersion'],'kind':live['kind'],'metadata':{k:copy.deepcopy(v) for k,v in live['metadata'].items() if k not in ('resourceVersion','generation','creationTimestamp','managedFields')},'spec':copy.deepcopy(spec)}\\nfor key in ('kubectl.kubernetes.io/last-applied-configuration','deployment.kubernetes.io/revision'):sealed['metadata'].get('annotations',{}).pop(key,None)\\nadmitted=json.loads(run(['kubectl','apply','--dry-run=server','-f','-','-o','json'],json.dumps(candidate)))\\ncheck_admitted(admitted,sealed_baseline)\\napp=json.loads(run(['kubectl','get','application','informed-decision','-n','argocd','-o','json']))\\nassert app['spec']['source']['path']=='deploy/lifecycle' and not app['spec'].get('syncPolicy',{}).get('automated')\\nargo={'uid':app['metadata']['uid'],'repoURL':app['spec']['source']['repoURL'],'targetRevision':app['spec']['source']['targetRevision'],'path':app['spec']['source']['path'],'destination':app['spec']['destination'],'automated':False,'sync':app.get('status',{}).get('sync'),'health':app.get('status',{}).get('health')}\\nexpected_argo=json.loads(ARGO_LITERAL)\\nfor key in ('uid','repoURL','targetRevision','path','destination','automated'):\\n assert argo[key]==expected_argo[key]\\nassert argo['health']['status']=='Healthy'\\ndiff=subprocess.run(['kubectl','diff','-f','-'],input=json.dumps(candidate),text=True,capture_output=True);assert diff.returncode in (0,1)\\n# Diff can contain only nonsecret Deployment references; preserve digest rather than raw stdout.\\nnode=run(['kubectl','describe','node']);allocated=re.search(r'Allocated resources:.*?CPU Requests|Allocated resources:',node,re.S)\\nsection=node.split('Allocated resources:')[1].split('Events:')[0] if 'Allocated resources:' in node else ''\\nnodes=json.loads(run(['kubectl','get','nodes','-o','json']))['items'];assert len(nodes)==1\\nalloc=nodes[0]['status']['allocatable'];cpu=alloc['cpu'];cpu_m=int(cpu[:-1]) if cpu.endswith('m') else int(cpu)*1000\\nrequested=int(re.search(r'cpu\\\\s+(\\\\d+)m',section).group(1));assert requested<=cpu_m\\nreceipt={'node_allocatable_cpu_m':cpu_m,'node_requested_cpu_m':requested,'captured_at':datetime.datetime.now(datetime.timezone.utc).isoformat(),'native_workload_changed':False,'native_backup_restore_executed':False,'argo':argo,'live_ready_replicas':1,'admitted_uid':admitted['metadata']['uid'],'server_dry_run_passed':True,'admitted_spec_exactly_live_plus_image':True,'client_diff_exit':diff.returncode,'client_diff_sha256':hashlib.sha256(diff.stdout.encode()).hexdigest(),'node_allocated_resources':section.strip(),'all_checks_pass':True}\\nprint(json.dumps(receipt))\\n\"\nfor marker,value in [('CANDIDATE_LITERAL',(ROOT/'candidate-deployment.json').read_text()),('SEALED_LITERAL',(ROOT/'sealed-live-deployment.json').read_text()),('GUARD_LITERAL',(ROOT/'change_guard.py').read_text()),('ARGO_LITERAL',json.dumps(json.loads((ROOT/'native-preflight.json').read_text())['argo']))]:\n program=program.replace(marker,repr(value))\nprogram='import traceback,json\\ntry:\\n'+''.join(' '+line+'\\n' for line in program.splitlines())+\"except Exception as error:\\n print(json.dumps({'all_checks_pass':False,'exception_type':type(error).__name__,'exception_line':traceback.extract_tb(error.__traceback__)[-1].lineno}))\\n\"\nr=subprocess.run(['ssh','railiance01','python3 -'],input=program,text=True,capture_output=True)\nresult=transport_result(r.returncode,r.stdout);result['sealed_preflight_inputs_sha256']=hashlib.sha256((ROOT/'preflight-inputs.json').read_bytes()).hexdigest();result['fresh_execution_receipt']=True\nout.write_text(json.dumps(result,indent=2)+'\\n');print(json.dumps(result,indent=2));sys.exit(0 if result.get('all_checks_pass') is True else 1)\n" + }, + { + "item_id": "preflight-inputs-json", + "media_type": "application/json", + "content": "{\n \"packet_files\": {\n \"change_guard.py\": \"830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1\",\n \"preflight.py\": \"c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834\",\n \"candidate-deployment.json\": \"722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e\",\n \"rollback-deployment.json\": \"39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121\",\n \"sealed-live-deployment.json\": \"d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362\",\n \"native-preflight.json\": \"eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262\"\n },\n \"owner_source_files\": {\n \"deploy/lifecycle/admission.candidate.json\": \"92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55\",\n \"deploy/lifecycle/service.candidate.json\": \"38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4\"\n }\n}\n" + }, + { + "item_id": "fresh-preflight-validation-json", + "media_type": "application/json", + "content": "{\n \"node_allocatable_cpu_m\": 4000,\n \"node_requested_cpu_m\": 3460,\n \"captured_at\": \"2026-10-11T01:30:33.674360+00:00\",\n \"native_workload_changed\": false,\n \"native_backup_restore_executed\": false,\n \"argo\": {\n \"uid\": \"499868f2-eabc-4df4-ae31-b89ce58d750d\",\n \"repoURL\": \"https://forgejo.coulomb.social/coulomb/informed-decision.git\",\n \"targetRevision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"path\": \"deploy/lifecycle\",\n \"destination\": {\n \"namespace\": \"informed-decision\",\n \"server\": \"https://kubernetes.default.svc\"\n },\n \"automated\": false,\n \"sync\": {\n \"comparedTo\": {\n \"destination\": {\n \"namespace\": \"informed-decision\",\n \"server\": \"https://kubernetes.default.svc\"\n },\n \"source\": {\n \"path\": \"deploy/lifecycle\",\n \"repoURL\": \"https://forgejo.coulomb.social/coulomb/informed-decision.git\",\n \"targetRevision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\"\n }\n },\n \"revision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"status\": \"OutOfSync\"\n },\n \"health\": {\n \"lastTransitionTime\": \"2026-10-10T23:14:52Z\",\n \"status\": \"Healthy\"\n }\n },\n \"live_ready_replicas\": 1,\n \"admitted_uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\",\n \"server_dry_run_passed\": true,\n \"admitted_spec_exactly_live_plus_image\": true,\n \"client_diff_exit\": 1,\n \"client_diff_sha256\": \"0506825b408bb2c7b9dcb00a5ee655dc9ec23b09b308d42bb013d72672f8f415\",\n \"node_allocated_resources\": \"(Total limits may be over 100 percent, i.e., overcommitted.)\\n Resource Requests Limits\\n -------- -------- ------\\n cpu 3460m (86%) 36200m (905%)\\n memory 9472Mi (59%) 32898Mi (205%)\\n ephemeral-storage 0 (0%) 0 (0%)\\n hugepages-1Gi 0 (0%) 0 (0%)\\n hugepages-2Mi 0 (0%) 0 (0%)\",\n \"all_checks_pass\": true,\n \"sealed_preflight_inputs_sha256\": \"0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944\",\n \"fresh_execution_receipt\": true\n}\n" + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json new file mode 100644 index 0000000..21bf12e --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json @@ -0,0 +1,277 @@ +[ + { + "id": "infd-20261011-purpose-overlay-r1", + "register": { + "memo": { + "id": "infd-20261011-purpose-overlay-r1", + "version": 1, + "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", + "requested_act": "approve", + "binding_level": "organizational", + "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Protected real-data backup/restore and fresh sealed-source/UID/configuration gates required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "binding": { + "principal": { + "id": "pending-human-session", + "kind": "person", + "display_name": "Founder review" + }, + "target": { + "kind": "environment", + "id": "realm:kubernetes/railiance01/informed-decision", + "label": "Informed Decision image-only purpose hardening on railiance01", + "environment": "production" + }, + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedpreflight+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + }, + "step_kind": "approve", + "packet": [ + { + "item_id": "decision-packet-md", + "label": "decision-packet.md", + "hash": "sha256:7f6d8987f65dff479eeead67b7ca940ef44c22c1cdbdd6ca33fd732b824c8f02" + }, + { + "item_id": "proposal-json", + "label": "proposal.json", + "hash": "sha256:08c5573eaad05efd24b6df6737d33e7189543eb621f21704e38bab4326094914" + }, + { + "item_id": "candidate-admission-json", + "label": "candidate-admission.json", + "hash": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "item_id": "rollback-admission-json", + "label": "rollback-admission.json", + "hash": "sha256:22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "item_id": "candidate-deployment-json", + "label": "candidate-deployment.json", + "hash": "sha256:722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "item_id": "rollback-deployment-json", + "label": "rollback-deployment.json", + "hash": "sha256:39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "item_id": "published-verification-json", + "label": "published-verification.json", + "hash": "sha256:e304dd29571bf7d7b9f1db2ade0163dd39cfec012a5ce6986139f019f37e65a2" + }, + { + "item_id": "registry-proof-json", + "label": "registry-proof.json", + "hash": "sha256:5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "item_id": "security-summary-json", + "label": "security-summary.json", + "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "item_id": "trivy-full-json", + "label": "trivy-full.json", + "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "item_id": "sbom-cdx-json", + "label": "sbom.cdx.json", + "hash": "sha256:a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + { + "item_id": "check-installed-py", + "label": "check_installed.py", + "hash": "sha256:a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + { + "item_id": "native-backup-restore-protocol-md", + "label": "native-backup-restore-protocol.md", + "hash": "sha256:aa9758d4de587d14c6ce0fdaccd84002c5c5099425b9169ca7c972a86e9d3dec" + }, + { + "item_id": "inherited-vulnerability-follow-through-json", + "label": "inherited-vulnerability-follow-through.json", + "hash": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "item_id": "native-preflight-json", + "label": "native-preflight.json", + "hash": "sha256:eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "item_id": "sealed-live-deployment-json", + "label": "sealed-live-deployment.json", + "hash": "sha256:d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "item_id": "change-guard-py", + "label": "change_guard.py", + "hash": "sha256:830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1" + }, + { + "item_id": "preflight-py", + "label": "preflight.py", + "hash": "sha256:c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834" + }, + { + "item_id": "preflight-inputs-json", + "label": "preflight-inputs.json", + "hash": "sha256:0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944" + }, + { + "item_id": "fresh-preflight-validation-json", + "label": "fresh-preflight-validation.json", + "hash": "sha256:aa1d494e42491f0619f731a836c597df9178409887d734c166a8df81f8807a27" + } + ], + "highlights": [ + { + "id": "native-custody-rollout-and-known-medium", + "item_id": "decision-packet-md", + "note": "Protected real-data snapshot/restore and a brief Recreate restart require this separate native approval. Actual scan has one fixable inherited MEDIUM, not zero CVEs; exact owner follow-through due2026-10-18 is manual, with no automatic controller. Rollback preserves latestschema5DB and allnew/uncertain evidence. Synthetic transport tests are not native PDP authority proof.", + "required_ack": true, + "severity": "warning", + "locator": { + "kind": "section", + "heading": "Requested decision" + } + } + ], + "sealed": false, + "approval_id": null, + "approval_binding_digest": null + }, + "documents": [ + { + "digest": "sha256:7f6d8987f65dff479eeead67b7ca940ef44c22c1cdbdd6ca33fd732b824c8f02", + "media_type": "text/markdown", + "content_base64": "IyBJbmZvcm1lZCBEZWNpc2lvbiBwdXJwb3NlIG92ZXJsYXkgcmVsZWFzZQoKIyMgUmVxdWVzdGVkIGRlY2lzaW9uCgpBcHByb3ZlIHRoZSBleGFjdCBwdXJwb3NlLW9ubHkgaW1hZ2Ugcm9sbG91dCBhbmQgcHJvdGVjdGVkIHJlYWwtZGF0YSBiYWNrdXAvcmVzdG9yZSBwcm90b2NvbCBmb3IgdGhlIGV4aXN0aW5nIEluZm9ybWVkIERlY2lzaW9uIHNlcnZpY2Ugb24gcmFpbGlhbmNlMDEuIFRoaXMgcmVxdWVzdCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBhbHJlYWR5IGFwcHJvdmVkIGNvbmZpZy1vbmx5IHJlcGFpci4gT25seSB0aGUgZXhpc3RpbmcgRGVwbG95bWVudCBpbWFnZSBjaGFuZ2VzIHRocm91Z2ggdGhlIG93bmVyJ3MgbWFudWFsIEFyZ28gd29ya2Zsb3csIHdpdGggcHJ1bmUgZGlzYWJsZWQuIFJ1bnRpbWUgQ29uZmlnTWFwIGBpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MWAsIHNjaGVtYTUsIFBWQywgY3JlZGVudGlhbHMsIGF1ZGllbmNlLCBwb2xpY2llcywgcmVnaXN0cmllcywgYWNjZXNzLCByZXBsaWNhMSBhbmQgUmVjcmVhdGUgc3RyYXRlZ3kgcmVtYWluIGZpeGVkLiBFeGVjdXRlIGJ5IDIwMjYtMTAtMTJUMjM6NTk6NTlaLCBhZnRlciByZWZyZXNoZWQgc2VhbGVkLXNvdXJjZS9VSUQvY29uZmlndXJhdGlvbiBjaGVja3MgYW5kIGJhY2t1cC9yZXN0b3JlIGdhdGVzLiBFeHBpcnkgc3RvcHMgYXV0aG9yaXphdGlvbiBmb3IgYW4gdW5zdGFydGVkIHJlbGVhc2U7IGl0IGRvZXMgbm90IGluc3RhbGwgYSBjb250cm9sbGVyIG9yIGF1dG9tYXRpY2FsbHkgcm9sbCBiYWNrIGFuIGFscmVhZHkgcmVsZWFzZWQgaW1hZ2UuCgojIyBBcnRpZmFjdCBhbmQga25vd24gZmluZGluZwoKQWN0dWFsIG93bmVyIENJIHRhc2sxMTQ4NC9ydW4zIHB1Ymxpc2hlZCBpbW11dGFibGUgaW1hZ2UgYHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhYCBmcm9tIHNvdXJjZSBgM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OGAuIEFub255bW91cyByZWdpc3RyeSB2ZXJpZmljYXRpb24gcHJlc2VydmVzIGFsbCBlaWdodCBiYXNlIGNvbXByZXNzZWQgYmxvYnMvcm9vdGZzIGxheWVycyBhbmQgYWRkcyBvbmx5IHBvbGljeS5weSB3aXRoIGV4YWN0IHNvdXJjZSBoYXNoIGFuZCBtb2RlMDY0NC4gTGVnYWN5LWJ1aWxkZXIgbWVkaWEtdHlwZS9kZWZhdWx0IGNvbmZpZyBzZXJpYWxpemF0aW9uIGRpZmZlcmVuY2VzIGFyZSByZWNvcmRlZDsgdGhlIHJ1bnRpbWUgc2VtYW50aWNzIHJlbWFpbiB1bmNoYW5nZWQuIFB1bGxlZCBwdWJsaXNoZWQgaW1hZ2UgZXhlY3V0ZXMgYXMgVUlEMTAwMDEvR0lEMTAwMDEgYW5kIHBhc3NlcyB0ZW4gaW5zdGFsbGVkIGNoZWNrczogdHdvIHN1cHBvcnRlZCBiaW5kaW5nIGZvcm1zLCBlaWdodCBhZHZpc29yeS9tYWxmb3JtZWQgcmVmdXNhbHMuIFRlc3RzIHVzZSBzeW50aGV0aWMgdHJhbnNwb3J0IGFuZCBkbyBub3QgY2xhaW0gbmV3IG5hdGl2ZSBQRFAgYXV0aG9yaXphdGlvbiBwcm9vZi4gVGhlIHR3byBmYWlsZWQgQ0kgYXR0ZW1wdHMgcmVtYWluIGluIHRoZSBzYW1lIHRyaWFsIGhpc3RvcnkuCgpBY3R1YWwgdW5maWx0ZXJlZCBwaW5uZWQgc2Nhbm5lci9EQiBldmlkZW5jZSBjb3ZlcnM0NHBhY2thZ2VzOiB6ZXJvIEhJR0gvQ1JJVElDQUwsICoqb25lIGZpeGFibGUgTUVESVVNKiosIENWRS0yMDI2LTg1MDkxLCB6bGliMS4zLjItcjAgZml4ZWQgaW4xLjMuMi1yMS4gQWN0dWFsIGN1cnJlbnQtYmFzZSBzY2FuIGhhcyB0aGUgaWRlbnRpY2FsIGZpbmRpbmcuIEFwcHJvdmluZyB0aGlzIHBhY2tldCBleHBsaWNpdGx5IHBlcm1pdHMgdGhpcyBpbmhlcml0ZWQgZmluZGluZyBkdXJpbmcgdGhpcyBuYXJyb3cgcHVycG9zZSByZWxlYXNlOyBpdCBpcyBub3QgYSBSaXNrTmV4dXMgZXN0YXRlIHJpc2sgZ3JhZGUgb3IgemVyby1DVkUgY2xhaW0uIE93bmVyIHJlY29yZCBJTkZELVJJU0stMjAyNjEwMTEtWkxJQi04NTA5MSBhbmQgbGl2ZSB0YXNrIElORkQtV1AtMDAwOS1UMDUgcmVxdWlyZSBzZXBhcmF0ZSBiYXNlIHJlZnJlc2ggYW5kIG5hdGl2ZSBhcHByb3ZhbCwgcmV2aWV3ZWQgYnkyMDI2LTEwLTE4LiBUaGF0IHJldmlldyBkYXRlIGlzIG1hbnVhbCBmb2xsb3ctdGhyb3VnaCwgd2l0aCBubyBhdXRvLWNvbnRyb2xsZXIgY2xhaW0uIFNjYW5uZXIgbm90ZXMgQWxwaW5lMy4yNCBhYnNlbnQgRU9MIGxpc3Q7IE9TIHZ1bG5lcmFiaWxpdHkgZGV0ZWN0aW9uIHJhbiBhZ2FpbnN0MzhPU3BhY2thZ2VzLiBVbmtub3duIHZ1bG5lcmFiaWxpdGllcyByZW1haW4gb3V0c2lkZSBzbmFwc2hvdCBrbm93bGVkZ2UuCgojIyBOYXRpdmUgYmFzZWxpbmUgYW5kIGdhdGVzCgpGcmVzaCByZWFkLW9ubHkgY2FwdHVyZTAxOjI1OjM4WjogZXhpc3RpbmcgRGVwbG95bWVudCBVSURhNTg4ZTEwYSwgUmVhZHkxLCBpbWFnZTdmNWMsIHVuY2hhbmdlZCBydW50aW1lNmM7IG5hdGl2ZSBhZG1pc3Npb24gcHJlc2VydmVzIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gcGx1cyBleGFjdGx5IHRoZSBwcm9wb3NlZCBpbWFnZS4gQ2xpZW50ZGlmZiByZXR1cm5zMS4gUmVxdWVzdHMzNDYwLzQwMDBtQ1BVODYlLCBtZW1vcnk5NDcyTWk1OSU7IHJlZnJlc2ggYmVmb3JlIHJlbGVhc2UuIEV4aXN0aW5nIEFyZ28gQXBwbGljYXRpb24gVUlENDk5ODY4ZjIgaXMgbWFudWFsLCB0YXJnZXQ3ZGI4NDg1LCBIZWFsdGh5IHdpdGggcHJlLWV4aXN0aW5nIE91dE9mU3luYyBzdGF0dXMuIERvIG5vdCB0cmVhdCBhIHNjb3BlZCBEZXBsb3ltZW50IHJlbGVhc2UgYXMgZnVsbC1hcHAgcmVjb25jaWxpYXRpb24uIFByZXNlcnZlIGl0cyB0cmFja2luZy1pZDsgbm8gdW5yZWxhdGVkIHJlc291cmNlIHN5bmMvcHJ1bmUvYWRvcHRpb24uCgpUaGUgcmVhZC1vbmx5IGhlbHBlciBiaW5kcyBvcmlnaW5hbCBzb3VyY2UvaGVscGVyL3JlbmRlci9iYXNlbGluZSBoYXNoZXMsIGNoZWNrcyBleGFjdCBmcmVzaCBsaXZlIFVJRC9jb25maWd1cmF0aW9uIGFuZCBhZG1pc3Npb24sIGFuZCB3cml0ZXMgYSBzZXBhcmF0ZSBleGVjdXRpb24gcmVjZWlwdCBvdXRzaWRlIHRoaXMgc2VhbGVkIHBhY2tldC4gRmFpbGVkIGluaXRpYWwgcmF3IEt1c3RvbWl6ZSBtZXRhZGF0YSBjaGVjayBpcyByZXRhaW5lZDogZGlyZWN0IGt1YmVjdGwgYXBwbHkgd291bGQgZHJvcCBBcmdvIHRyYWNraW5nLWlkLiBUaGUgcmV2aWV3ZWQgc2VsZWN0ZWQgRGVwbG95bWVudCBleHBsaWNpdGx5IHJldGFpbnMgdGhhdCBleGlzdGluZyBJRCwgbWF0Y2hpbmcgQXJnbyBvd25lcnNoaXAuIEFueSB1bnJlbGF0ZWQgZHJpZnQsIGRpZmZlcmVudCBVSUQsIGFsdGVyZWQgYWRtaXNzaW9uLCB1bmF2YWlsYWJsZSBwcm90ZWN0ZWQgYmFja3VwIGNhcGFjaXR5LCB1bmNlcnRhaW4gYmFja3VwLCByZXN0b3JlIG1pc21hdGNoIG9yIHVuaGVhbHRoeSBiYXNlbGluZSBzdG9wcyB0aGUgcmVsZWFzZS4KCiMjIFByb3RlY3RlZCBiYWNrdXAgYW5kIHJlbGVhc2UKClVzZSB0aGUgZXhpc3Rpbmcgb3duZXIgYWRtaW4ncyBTUUxpdGUgYmFja3VwIEFQSSwgbm90IGEgcmF3IGNvcHkgb2YgdGhlIGxpdmUgZGF0YWJhc2UvV0FMLiBQcm90ZWN0IGRpcmVjdG9yaWVzMDcwMC9maWxlczA2MDAsIG93bmVkIGJ5MTAwMDEuIFJldGFpbiBpbmRlcGVuZGVudGx5IHByb3RlY3RlZCBvZmYtY2x1c3RlciBzbmFwc2hvdCBjdXN0b2R5IGFuZCBvbmx5IGNvdW50L2hhc2ggcmVjZWlwdHMuIE5vIGRhdGFiYXNlIGNvbnRlbnRzLCBjYWxsZXIgdG9rZW5zLCByZXF1ZXN0ZXIgU2VjcmV0IG9yIHJ1bnRpbWUgY3JlZGVudGlhbCBmaWxlcyBlbnRlciBHaXQsIFN0YXRlIEh1YiwgbG9ncyBvciB0aGlzIHBhY2tldC4gTmF0aXZlIGJhY2t1cCBhbmQgb2ZmbGluZSByZWFsLWRhdGEgcmVzdG9yZSBoYXZlIG5vdCB5ZXQgb2NjdXJyZWQuIFVzZSBhbiBpc29sYXRlZCBwcml2YXRlIGRpc3Bvc2FibGUgY29weSwgbmV0d29ya25vbmUgYW5kIG5vIHJ1bnRpbWUgY29uZmlnL3Rva2VuIG1vdW50cywgdmFsaWRhdGUgc2NoZW1hNS9pbnRlZ3JpdHkgYW5kIGZyb3plbiBzbmFwc2hvdCBjb3VudHMsIHRoZW4gY2xlYW4gb25seSB0aGUgZGlzcG9zYWJsZSByZXN0b3JlZCBjb3B5LiBSZXRhaW4gdGhlIG9yaWdpbmFsIHNuYXBzaG90LiBUaGUgYXR0YWNoZWQgcHJvdG9jb2wgYmluZHMgY2FzZS1zcGVjaWZpYyBwYXRocyBhbmQgZmFpbC1jbG9zZWQgY2FwYWNpdHkvY3VzdG9keSBjaGVja3MuCgpSZWZyZXNoIGEgY29uc2lzdGVudCBvbmxpbmUgc25hcHNob3QgaW1tZWRpYXRlbHkgYmVmb3JlIGltYWdlLW9ubHkgY3V0b3Zlci4gVGhpcyBwcm90b2NvbCBkb2VzIG5vdCBhc3NlcnQgdHJhZmZpYy9kaXNwYXRjaGVyIHF1aWVzY2VuY2UuIEN1cnJlbnQgYW5kIGNhbmRpZGF0ZSBzaGFyZSBzY2hlbWE1IGFuZCB1bmNoYW5nZWQgc3RvcmUgY29kZTsgcm9sbGJhY2sgcmV0YWlucyB0aGUgbGF0ZXN0IGxpdmUgZGF0YWJhc2UgYW5kIGFsbCBuZXcvdW5jZXJ0YWluIGV2aWRlbmNlLiBTdG9wIHRoZSBvbGQgd3JpdGVyIGJlZm9yZSB0aGUgbmV3IG9uZSB3aXRoIGV4aXN0aW5nIFJlY3JlYXRlIGFuZCBzaW5nbGUtd3JpdGVyIGxvY2suIERvIG5vdCByZXN0b3JlIGFuIG9sZGVyIHNuYXBzaG90IG92ZXIgbGF0ZXIgd3JpdGVzLCBkaXNjYXJkIHVucmVzb2x2ZWQgZXh0ZXJuYWwgZWZmZWN0cywgc2NhbGUgb3RoZXIgd29ya2xvYWRzLCBjaGFuZ2UgcG9saWNpZXMvaWRlbnRpdHkvY3VzdG9keSwgb3IgY3JlYXRlIGh1bWFuIGRpc3Bvc2l0aW9ucyB0byBtYWtlIGNoZWNrcyBncmVlbi4KClBpbiB0aGUgZXhpc3RpbmcgQXBwbGljYXRpb24gdG8gdGhlIGV4YWN0IG93bmVyIGNvbW1pdCBjb250YWluaW5nIHRoZSBhcHByb3ZlZCBjYW5kaWRhdGUgc291cmNlIGhhc2hlcywgYW5kIG1hbnVhbGx5IHN5bmMgb25seSBEZXBsb3ltZW50L2luZm9ybWVkLWRlY2lzaW9uIHdpdGggcHJ1bmU9ZmFsc2UuIFZlcmlmeSBhY3R1YWxpbWFnZS9tb2R1bGUvbW9kZS9VSUQsIGhlYWx0aC9yZWFkaW5lc3MgYW5kIGluc3RhbGxlZCBwdXJwb3NlIHJlZnVzYWxzIG9uIHRoZSByZWFsIHBsYWNlbWVudDsgZXhwbGljaXRseSBkaXN0aW5ndWlzaCBzeW50aGV0aWMtdHJhbnNwb3J0IGNoZWNrcyBmcm9tIGFjdHVhbCBwcm92aWRlciBldmlkZW5jZS4gRXhpc3RpbmcgbmF0aXZlIGJpbmRpbmcvbGlmZWN5Y2xlIGJlaGF2aW9yIG11c3QgcmVtYWluIGF2YWlsYWJsZS4gSWYgdW5oZWFsdGh5IG9yIHZlcmlmaWNhdGlvbiBmYWlscywgcmV0dXJuIEFwcGxpY2F0aW9uIHNvdXJjZSB0bzdkYjg0ODUgYW5kIHNjb3BlZC1zeW5jIHByaW9yIHNhbWUtc2NoZW1hIGltYWdlN2Y1YywgcHJlc2VydmluZyBjdXJyZW50IGV2aWRlbmNlIGRhdGFiYXNlOyByZXRhaW4gZmFpbGVkIG91dGNvbWVzLiBBbnkgZGF0YSByZWNvdmVyeSBiZXlvbmQgdGhpcyBzYW1lLXNjaGVtYSBpbWFnZSByb2xsYmFjayBpcyBhIHNlcGFyYXRlIGZvdW5kZXIgZGVjaXNpb24uCgojIyBBbHRlcm5hdGl2ZXMgYW5kIGVzdGltYXRlcwoKUHJvY2VlZCB3aXRoIHRoaXMgbmFycm93IHJlbGVhc2UgcGx1cyBleHBsaWNpdCBpbmhlcml0ZWQtbWVkaXVtIGZvbGxvdy10aHJvdWdoLCBvciBkZWZlciBhbmQgcHJlcGFyZSBhIHNlcGFyYXRlIGJhc2UvZGVwZW5kZW5jeSByZWZyZXNoIGJlZm9yZSBhbnkgcmVsZWFzZS4gTm8gYWRkaXRpb25hbCByZWN1cnJpbmcgaG9zdGluZyBpcyBwcm9wb3NlZDogZXN0aW1hdGVkIGluY3JlbWVudGFsIGluZnJhc3RydWN0dXJlIEVVUjAsIHdpdGggcHJpdmF0ZSBzdG9yYWdlIGFuZCBhdHRlbmRlZCBlbmdpbmVlcmluZy9yZWNvdmVyeSB0aW1lIHVucHJpY2VkLiBSaXNrcyBpbmNsdWRlIGEgYnJpZWYgUmVjcmVhdGUgaW50ZXJydXB0aW9uLCBwcml2YXRlIGJhY2t1cCBjdXN0b2R5IGVycm9ycywgY2FsbGVyIHJlZnVzYWwgd2hlbiBhZHZpc29yeSByZXNwb25zZXMgd2VyZSBpbXByb3Blcmx5IHRyZWF0ZWQgYXMgYmluZGluZywgYW5kIHRoZSBkaXNjbG9zZWQgaW5oZXJpdGVkIGZpbmRpbmcuIFRoaXMgZGVjaXNpb24gZG9lcyBub3QgcHJvbW90ZSBhZ2VudCBhdXRvbm9teSBvciBncmFudCB1bnJlbGF0ZWQgd29yay4K" + }, + { + "digest": "sha256:08c5573eaad05efd24b6df6737d33e7189543eb621f21704e38bab4326094914", + "media_type": "application/json", + "content_base64": "ewogICJwcm9wb3NhbF9pZCI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIsCiAgInRyaWFsX2lkIjogImluZmQtcHVycG9zZS0yMDI2MTAxMS1yMSIsCiAgInN0YXRlIjogInByZXBhcmVkLXVuYXBwcm92ZWQiLAogICJ0YXJnZXQiOiAicmVhbG06a3ViZXJuZXRlcy9yYWlsaWFuY2UwMS9pbmZvcm1lZC1kZWNpc2lvbiIsCiAgImF1dGhvcml0eSI6ICJBRE1JTklTVEVSOyBhY3RpdmF0aW9uIEFQUFJPVkVEIG9ubHkgdXBvbiBleGFjdCBmb3VuZGVyIGRpc3Bvc2l0aW9uIiwKICAiY2FuZGlkYXRlX2ltYWdlIjogImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6NzYzYzM2NDAyYzhiZTdjYzRjMWJkMWE2MTYyM2QxYWZmOTExNmQ1MjI0MTg3NzQyNWI0NWE3MDE4Y2MwODgzYSIsCiAgInB1Ymxpc2hlZF9zb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInByaW9yX2ltYWdlIjogImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MyIsCiAgInByaW9yX2FyZ29fcmV2aXNpb24iOiAiN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZiIsCiAgIm5hdGl2ZV9vYmplY3QiOiB7CiAgICAiYXBpVmVyc2lvbiI6ICJhcHBzL3YxIiwKICAgICJraW5kIjogIkRlcGxveW1lbnQiLAogICAgIm5hbWVzcGFjZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAidWlkIjogImE1ODhlMTBhLTkwZDItNDg4My05NzVlLTZkZDhiOGZlY2E5MiIKICB9LAogICJhcmdvX2FwcGxpY2F0aW9uX3VpZCI6ICI0OTk4NjhmMi1lYWJjLTRkZjQtYWUzMS1iODljZTU4ZDc1MGQiLAogICJzb3VyY2VfZ2F0ZSI6ICJFeGFjdCBjb21taXR0ZWQgb3duZXIgc291cmNlIG11c3QgY29udGFpbiB0aGUgdHdvIGFwcHJvdmVkIGNhbmRpZGF0ZSBmaWxlIGhhc2hlcyBpbiBwcmVmbGlnaHQtaW5wdXRzLmpzb247IHNvdXJjZSBwcmVwYXJhdGlvbiBpcyBub3QgbmF0aXZlIGFwcHJvdmFsIiwKICAic3luY19zY29wZSI6IFsKICAgICJhcHBzOkRlcGxveW1lbnQ6aW5mb3JtZWQtZGVjaXNpb24iCiAgXSwKICAicHJ1bmUiOiBmYWxzZSwKICAiYXV0b21hdGVkX3N5bmMiOiBmYWxzZSwKICAicnVudGltZV9jb25maWdtYXAiOiAiaW5mb3JtZWQtZGVjaXNpb24tcnVudGltZS02YzIyMTg3OGQwNTEiLAogICJzY2hlbWEiOiA1LAogICJyZXF1ZXN0ZWRfb3BlcmF0aW9ucyI6IFsKICAgICJQcm90ZWN0ZWQgU1FMaXRlLWNvbnNpc3RlbnQgbmF0aXZlIGJhY2t1cCBhbmQgaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgb2ZmLWNsdXN0ZXIgY3VzdG9keSIsCiAgICAiT2ZmbGluZSByZXN0b3JlL2ludGVncml0eS9jb3VudCBjb21wYXJpc29uIG9uIGEgcHJpdmF0ZSBkaXNwb3NhYmxlIHZvbHVtZSB3aXRoIGV4YWN0IGNhbmRpZGF0ZSwgbm8gcnVudGltZSB0b2tlbnMvY29uZmlnL25ldHdvcmsiLAogICAgIlJlZnJlc2ggYSBjb25zaXN0ZW50IHByZS1jdXRvdmVyIHNuYXBzaG90LCByZXRhaW4gcHJpdmF0ZSBjb3BpZXMgYW5kIGNvdW50LW9ubHkvaGFzaCByZWNlaXB0cyIsCiAgICAiUGluIGV4aXN0aW5nIG1hbnVhbCBBcmdvIEFwcGxpY2F0aW9uIHRvIGV4YWN0IGFwcHJvdmVkIG93bmVyIHNvdXJjZSBhbmQgbWFudWFsbHkgc3luYyBvbmx5IGV4aXN0aW5nIERlcGxveW1lbnQgaW1hZ2UiLAogICAgIlZlcmlmeSBoZWFsdGgvcmVhZGluZXNzL2ltYWdlL21vZHVsZS9pbnN0YWxsZWQgZmFpbC1jbG9zZWQgcHVycG9zZSBjaGVja3MgYW5kIHJldGFpbmVkIHNjaGVtYS9jb3VudCBldmlkZW5jZTsgcmVjb3ZlciB0byBwcmlvciBzYW1lLXNjaGVtYSBpbWFnZSBpZiBuZWVkZWQiCiAgXSwKICAiZXhlY3V0ZV9ieSI6ICIyMDI2LTEwLTEyVDIzOjU5OjU5WiIsCiAgInRlbXBvcmFyeV92dWxuZXJhYmlsaXR5X3Jldmlld19kdWUiOiAiMjAyNi0xMC0xOCIsCiAgImtub3duX3NjYW5fZmluZGluZ3MiOiAiMEhJR0gvQ1JJVElDQUwsMWZpeGFibGUgaW5oZXJpdGVkTUVESVVNIHpsaWIsIGFjdHVhbCBjdXJyZW50YmFzZStjYW5kaWRhdGUgZmluZGluZ3MgaWRlbnRpY2FsIiwKICAidnVsbmVyYWJpbGl0eV9yZWNvcmQiOiAiSU5GRC1SSVNLLTIwMjYxMDExLVpMSUItODUwOTEgLyBJTkZELVdQLTAwMDktVDA1IiwKICAiY29zdF9lc3RpbWF0ZV9FVVIiOiAwLAogICJjb3N0X2xpbWl0cyI6ICJObyBuZXcgcmVjdXJyaW5nIGluZnJhc3RydWN0dXJlOyBwcml2YXRlIGJhY2t1cCBzdG9yYWdlIGFuZCBhdHRlbmRlZCBlbmdpbmVlcmluZy9yZWNvdmVyeSB0aW1lIHVucHJpY2VkLCBub3QgYW4gYXV0b3BpbG90IGNvc3QgZ3JhbnQiLAogICJyaXNrX2VzdGltYXRlcyI6IFsKICAgICJCcmllZiBSZWNyZWF0ZSBzZXJ2aWNlIGludGVycnVwdGlvbjsgbm8gY29uY3VycmVudCBuZXcgd3JpdGVyL3N1cmdlIiwKICAgICJQcml2YXRlIGV2aWRlbmNlIHNuYXBzaG90IGN1c3RvZHkgYW5kIGRpc3Bvc2FsIGVycm9yczsgbm8gc25hcHNob3RzL3Rva2VucyBpbiBwdWJsaWMgZXZpZGVuY2UiLAogICAgIkNhbmRpZGF0ZSBwdXJwb3NlIHJlZnVzYWwgbWF5IGV4cG9zZSBjYWxsZXJzIHJlbHlpbmcgb24gYWR2aXNvcnkgcmVzdWx0cyBhcyBiaW5kaW5nIiwKICAgICJJbmhlcml0ZWQga25vd24gZml4YWJsZSBNRURJVU0gcmVtYWlucyB1bnRpbCBzZXBhcmF0ZWx5IGFwcHJvdmVkIG93bmVyIHJlbWVkaWF0aW9uIiwKICAgICJFeGlzdGluZyBBcmdvIE91dE9mU3luYyBiYXNlbGluZSBpcyByZXRhaW5lZDsgbm8gd2hvbGUtYXBwIHN5bmMgb3IgdW5yZWxhdGVkIHJlcGFpcnMgcGVybWl0dGVkIgogIF0sCiAgInJvbGxiYWNrIjogIk1hbnVhbCBBcmdvIHNvdXJjZSBwaW4gYmFjayB0bzdkYjg0ODUgYW5kIHNjb3BlZCBEZXBsb3ltZW50LW9ubHkgc3luYyB0bzdmNWMgaW1hZ2U7IHJldGFpbiBjdXJyZW50IHNjaGVtYTUgZGF0YWJhc2UgYW5kIGFsbCBwb3N0LWN1dG92ZXIgZXZpZGVuY2UsIG5ldmVyIHJlc3RvcmUgb2xkZXIgc25hcHNob3Qgb3ZlciBsaXZlIHdyaXRlcyIsCiAgIm5hdGl2ZV9leGVjdXRlZCI6IGZhbHNlLAogICJodW1hbl9hcHByb3ZhbCI6IGZhbHNlCn0K" + }, + { + "digest": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55", + "media_type": "application/json", + "content_base64": "ewogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJwb2xpY3kiOiB7CiAgICAib3JpZ2luIjogImh0dHA6Ly9mbGV4LWF1dGgtaW5mb3JtZWQtZGVjaXNpb24tc2l0dGluZy5mbGV4LWF1dGguc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MCIsCiAgICAicGFja2FnZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi5jb21wYWN0LXNpdHRpbmciLAogICAgInZlcnNpb24iOiAidjEzIiwKICAgICJwYWNrYWdlX2RpZ2VzdCI6ICJzaGEyNTY6MzFiZTU5ODVjMGMxZTZiMGMzYTAzOWVkNzMxMGQxZTk0ZGFmNTIzYTk0ZjZkOTI2ZTZlOGQ3NTlkMzcxMTg3MyIsCiAgICAicG9kX25hbWUiOiAiZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLXNpdHRpbmciCiAgfSwKICAia2V5Y2FwZV9lZ3Jlc3NfaXBzIjogWwogICAgIjkyLjIwNS42Mi4yMzkiCiAgXSwKICAic3RvcmFnZV9jbGFzcyI6ICJsb2NhbC1wYXRoIiwKICAib3JkaW5hcnlfYXBwcm92YWxfaWRzIjogWwogICAgIjJjZTc2ZDdmLTAxYzMtNGI2My04NDc2LThkMTIzMDY3OTc2OSIsCiAgICAiYzJhZjRiY2YtMTViNC00MzA1LWFhYzEtYWNjN2U0ZGNiMDk5IiwKICAgICJkYzIyNjY2YS1kNWQ3LTQ2YmMtOTQ5MC1lYmU5ZmUwOWRjMzgiCiAgXSwKICAibGlmZWN5Y2xlX3BvbGljeSI6IHsKICAgICJwYWNrYWdlIjogImluZm9ybWVkLWRlY2lzaW9uLmxpZmVjeWNsZSIsCiAgICAidmVyc2lvbiI6ICJ2MiIsCiAgICAicGFja2FnZV9kaWdlc3QiOiAic2hhMjU2OmRhMDFlMDQ1ZmMxMDhhZGVjNmI0ODllNWQ1MWY3ZTU3MzY2NzkzMDE2YzVhNjQ3NzY5NjM3ODBhNmFhZTQ1N2MiLAogICAgIm9yaWdpbiI6ICJodHRwOi8vZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLWxpZmVjeWNsZS5mbGV4LWF1dGguc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MCIsCiAgICAicG9kX25hbWUiOiAiZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLWxpZmVjeWNsZSIKICB9LAogICJsaWZlY3ljbGVfZGVsaXZlcnkiOiB0cnVlLAogICJpbnRha2VfYXR0cmlidXRlcyI6IHRydWUsCiAgImludGFrZV9kZWxpdmVyeSI6IHsKICAgICJodWJfb3JpZ2luIjogImh0dHA6Ly9zdGF0ZS1odWIuc3RhdGUtaHViLnN2Yy5jbHVzdGVyLmxvY2FsOjgwMDAiCiAgfSwKICAid29ya2xvYWRfYXBpIjogewogICAgInJlZ2lzdHJpZXNfY29uZmlnbWFwIjogImluZm9ybWVkLWRlY2lzaW9uLXdvcmtsb2FkLXJlZ2lzdHJ5IiwKICAgICJwZWVycyI6IFsKICAgICAgewogICAgICAgICJuYW1lc3BhY2UiOiAic3RhdGUtaHViIiwKICAgICAgICAiYXBwIjogInN0YXRlLWh1YiIKICAgICAgfQogICAgXSwKICAgICJhcGlfZWdyZXNzIjogWwogICAgICB7CiAgICAgICAgImlwIjogIjEwLjQzLjAuMSIsCiAgICAgICAgInBvcnQiOiA0NDMKICAgICAgfSwKICAgICAgewogICAgICAgICJpcCI6ICI5Mi4yMDUuNjIuMjM5IiwKICAgICAgICAicG9ydCI6IDY0NDMKICAgICAgfQogICAgXSwKICAgICJpbnRha2UiOiB0cnVlLAogICAgImxpZmVjeWNsZSI6IHRydWUKICB9Cn0K" + }, + { + "digest": "sha256:22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50", + "media_type": "application/json", + "content_base64": "ewogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMiLAogICJwb2xpY3kiOiB7CiAgICAib3JpZ2luIjogImh0dHA6Ly9mbGV4LWF1dGgtaW5mb3JtZWQtZGVjaXNpb24tc2l0dGluZy5mbGV4LWF1dGguc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MCIsCiAgICAicGFja2FnZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi5jb21wYWN0LXNpdHRpbmciLAogICAgInZlcnNpb24iOiAidjEzIiwKICAgICJwYWNrYWdlX2RpZ2VzdCI6ICJzaGEyNTY6MzFiZTU5ODVjMGMxZTZiMGMzYTAzOWVkNzMxMGQxZTk0ZGFmNTIzYTk0ZjZkOTI2ZTZlOGQ3NTlkMzcxMTg3MyIsCiAgICAicG9kX25hbWUiOiAiZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLXNpdHRpbmciCiAgfSwKICAia2V5Y2FwZV9lZ3Jlc3NfaXBzIjogWwogICAgIjkyLjIwNS42Mi4yMzkiCiAgXSwKICAic3RvcmFnZV9jbGFzcyI6ICJsb2NhbC1wYXRoIiwKICAib3JkaW5hcnlfYXBwcm92YWxfaWRzIjogWwogICAgIjJjZTc2ZDdmLTAxYzMtNGI2My04NDc2LThkMTIzMDY3OTc2OSIsCiAgICAiYzJhZjRiY2YtMTViNC00MzA1LWFhYzEtYWNjN2U0ZGNiMDk5IiwKICAgICJkYzIyNjY2YS1kNWQ3LTQ2YmMtOTQ5MC1lYmU5ZmUwOWRjMzgiCiAgXSwKICAibGlmZWN5Y2xlX3BvbGljeSI6IHsKICAgICJwYWNrYWdlIjogImluZm9ybWVkLWRlY2lzaW9uLmxpZmVjeWNsZSIsCiAgICAidmVyc2lvbiI6ICJ2MiIsCiAgICAicGFja2FnZV9kaWdlc3QiOiAic2hhMjU2OmRhMDFlMDQ1ZmMxMDhhZGVjNmI0ODllNWQ1MWY3ZTU3MzY2NzkzMDE2YzVhNjQ3NzY5NjM3ODBhNmFhZTQ1N2MiLAogICAgIm9yaWdpbiI6ICJodHRwOi8vZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLWxpZmVjeWNsZS5mbGV4LWF1dGguc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MCIsCiAgICAicG9kX25hbWUiOiAiZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLWxpZmVjeWNsZSIKICB9LAogICJsaWZlY3ljbGVfZGVsaXZlcnkiOiB0cnVlLAogICJpbnRha2VfYXR0cmlidXRlcyI6IHRydWUsCiAgImludGFrZV9kZWxpdmVyeSI6IHsKICAgICJodWJfb3JpZ2luIjogImh0dHA6Ly9zdGF0ZS1odWIuc3RhdGUtaHViLnN2Yy5jbHVzdGVyLmxvY2FsOjgwMDAiCiAgfSwKICAid29ya2xvYWRfYXBpIjogewogICAgInJlZ2lzdHJpZXNfY29uZmlnbWFwIjogImluZm9ybWVkLWRlY2lzaW9uLXdvcmtsb2FkLXJlZ2lzdHJ5IiwKICAgICJwZWVycyI6IFsKICAgICAgewogICAgICAgICJuYW1lc3BhY2UiOiAic3RhdGUtaHViIiwKICAgICAgICAiYXBwIjogInN0YXRlLWh1YiIKICAgICAgfQogICAgXSwKICAgICJhcGlfZWdyZXNzIjogWwogICAgICB7CiAgICAgICAgImlwIjogIjEwLjQzLjAuMSIsCiAgICAgICAgInBvcnQiOiA0NDMKICAgICAgfSwKICAgICAgewogICAgICAgICJpcCI6ICI5Mi4yMDUuNjIuMjM5IiwKICAgICAgICAicG9ydCI6IDY0NDMKICAgICAgfQogICAgXSwKICAgICJpbnRha2UiOiB0cnVlLAogICAgImxpZmVjeWNsZSI6IHRydWUKICB9Cn0K" + }, + { + "digest": "sha256:722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e", + "media_type": "application/json", + "content_base64": "ewogICJhcGlWZXJzaW9uIjogImFwcHMvdjEiLAogICJraW5kIjogIkRlcGxveW1lbnQiLAogICJtZXRhZGF0YSI6IHsKICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgImluZm9ybWVkLWRlY2lzaW9uLmNvdWxvbWIuc29jaWFsL2FkbWlzc2lvbiI6ICJhcHByb3ZlZDsgSU5GRC1XUC0wMDA3IGN1dG92ZXIiLAogICAgICAiYXJnb2NkLmFyZ29wcm9qLmlvL3RyYWNraW5nLWlkIjogImluZm9ybWVkLWRlY2lzaW9uOmFwcHMvRGVwbG95bWVudDppbmZvcm1lZC1kZWNpc2lvbi9pbmZvcm1lZC1kZWNpc2lvbiIKICAgIH0sCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIgogIH0sCiAgInNwZWMiOiB7CiAgICAicHJvZ3Jlc3NEZWFkbGluZVNlY29uZHMiOiA2MDAsCiAgICAicmVwbGljYXMiOiAxLAogICAgInNlbGVjdG9yIjogewogICAgICAibWF0Y2hMYWJlbHMiOiB7CiAgICAgICAgImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24iCiAgICAgIH0KICAgIH0sCiAgICAic3RyYXRlZ3kiOiB7CiAgICAgICJ0eXBlIjogIlJlY3JlYXRlIgogICAgfSwKICAgICJ0ZW1wbGF0ZSI6IHsKICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi5jb3Vsb21iLnNvY2lhbC9hZG1pc3Npb24iOiAiYXBwcm92ZWQ7IElORkQtV1AtMDAwNyBjdXRvdmVyIgogICAgICAgIH0sCiAgICAgICAgImxhYmVscyI6IHsKICAgICAgICAgICJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQiOiAicmV2aWV3IiwKICAgICAgICAgICJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjogImluZm9ybWVkLWRlY2lzaW9uIgogICAgICAgIH0KICAgICAgfSwKICAgICAgInNwZWMiOiB7CiAgICAgICAgImF1dG9tb3VudFNlcnZpY2VBY2NvdW50VG9rZW4iOiBmYWxzZSwKICAgICAgICAiY29udGFpbmVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImVudiI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJJTkZEX0tFWUNBUEVfSVNTVUVSIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJodHRwczovL2tjLmNvdWxvbWIuc29jaWFsIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiSU5GRF9DT05UQUlORVJfQ09ORklHIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIvY29uZmlndXJhdGlvbi9ydW50aW1lLmpzb24iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW1hZ2UiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIiwKICAgICAgICAgICAgImxpdmVuZXNzUHJvYmUiOiB7CiAgICAgICAgICAgICAgImh0dHBHZXQiOiB7CiAgICAgICAgICAgICAgICAicGF0aCI6ICIvaGVhbHRoeiIsCiAgICAgICAgICAgICAgICAicG9ydCI6ICJodHRwIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAidGltZW91dFNlY29uZHMiOiAyCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgInBvcnRzIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJjb250YWluZXJQb3J0IjogODA4MCwKICAgICAgICAgICAgICAgICJuYW1lIjogImh0dHAiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY29udGFpbmVyUG9ydCI6IDgwODEsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJyZWFkaW5lc3NQcm9iZSI6IHsKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAicGVyaW9kU2Vjb25kcyI6IDEwLAogICAgICAgICAgICAgICJ0aW1lb3V0U2Vjb25kcyI6IDIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlc291cmNlcyI6IHsKICAgICAgICAgICAgICAibGltaXRzIjogewogICAgICAgICAgICAgICAgImNwdSI6ICI1MDBtIiwKICAgICAgICAgICAgICAgICJtZW1vcnkiOiAiMjU2TWkiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAicmVxdWVzdHMiOiB7CiAgICAgICAgICAgICAgICAiY3B1IjogIjVtIiwKICAgICAgICAgICAgICAgICJtZW1vcnkiOiAiNjRNaSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzZWN1cml0eUNvbnRleHQiOiB7CiAgICAgICAgICAgICAgImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6IGZhbHNlLAogICAgICAgICAgICAgICJjYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICAgICAiZHJvcCI6IFsKICAgICAgICAgICAgICAgICAgIkFMTCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJyZWFkT25seVJvb3RGaWxlc3lzdGVtIjogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3RhcnR1cFByb2JlIjogewogICAgICAgICAgICAgICJmYWlsdXJlVGhyZXNob2xkIjogMTIsCiAgICAgICAgICAgICAgImh0dHBHZXQiOiB7CiAgICAgICAgICAgICAgICAicGF0aCI6ICIvaGVhbHRoeiIsCiAgICAgICAgICAgICAgICAicG9ydCI6ICJodHRwIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAidGltZW91dFNlY29uZHMiOiAyCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ2b2x1bWVNb3VudHMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvZGF0YSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJkYXRhIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvcnVuL2luZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInJ1bnRpbWUiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi90bXAiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAidG1wIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvY29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJjb25maWd1cmF0aW9uIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9wb2xpY3kiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiY2FsbGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9hdWRpdCIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24va3ViZXJuZXRlcyIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJrdWJlcm5ldGVzLWFwaSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi93b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24vcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInNpdHRpbmctcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzZWN1cml0eUNvbnRleHQiOiB7CiAgICAgICAgICAiZnNHcm91cCI6IDEwMDAxLAogICAgICAgICAgImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiAiT25Sb290TWlzbWF0Y2giLAogICAgICAgICAgInJ1bkFzR3JvdXAiOiAxMDAwMSwKICAgICAgICAgICJydW5Bc05vblJvb3QiOiB0cnVlLAogICAgICAgICAgInJ1bkFzVXNlciI6IDEwMDAxLAogICAgICAgICAgInNlY2NvbXBQcm9maWxlIjogewogICAgICAgICAgICAidHlwZSI6ICJSdW50aW1lRGVmYXVsdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJzZXJ2aWNlQWNjb3VudE5hbWUiOiAicmV2aWV3IiwKICAgICAgICAidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOiA0NSwKICAgICAgICAidm9sdW1lcyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZGF0YSIsCiAgICAgICAgICAgICJwZXJzaXN0ZW50Vm9sdW1lQ2xhaW0iOiB7CiAgICAgICAgICAgICAgImNsYWltTmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1kYXRhIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZW1wdHlEaXIiOiB7CiAgICAgICAgICAgICAgIm1lZGl1bSI6ICJNZW1vcnkiLAogICAgICAgICAgICAgICJzaXplTGltaXQiOiAiMTZNaSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAicnVudGltZSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJlbXB0eURpciI6IHsKICAgICAgICAgICAgICAibWVkaXVtIjogIk1lbW9yeSIsCiAgICAgICAgICAgICAgInNpemVMaW1pdCI6ICIxNk1pIgogICAgICAgICAgICB9LAogICAgICAgICAgICAibmFtZSI6ICJ0bXAiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY29uZmlnTWFwIjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI5MiwKICAgICAgICAgICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAiY29uZmlndXJhdGlvbiIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImNhbGxlciIsCiAgICAgICAgICAgICJwcm9qZWN0ZWQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJzb3VyY2VzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAic2VydmljZUFjY291bnRUb2tlbiI6IHsKICAgICAgICAgICAgICAgICAgICAiYXVkaWVuY2UiOiAiZmxleC1hdXRoIiwKICAgICAgICAgICAgICAgICAgICAiZXhwaXJhdGlvblNlY29uZHMiOiAzNjAwLAogICAgICAgICAgICAgICAgICAgICJwYXRoIjogInRva2VuIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICJzZWNyZXQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgImtleSI6ICJ0b2tlbiIsCiAgICAgICAgICAgICAgICAgICJwYXRoIjogInRva2VuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgInNlY3JldE5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tYXVkaXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImt1YmVybmV0ZXMtYXBpIiwKICAgICAgICAgICAgInByb2plY3RlZCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyODgsCiAgICAgICAgICAgICAgInNvdXJjZXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJzZXJ2aWNlQWNjb3VudFRva2VuIjogewogICAgICAgICAgICAgICAgICAgICJleHBpcmF0aW9uU2Vjb25kcyI6IDYwMCwKICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJ0b2tlbiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJrZXkiOiAiY2EuY3J0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiY2EuY3J0IgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAia3ViZS1yb290LWNhLmNydCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyOTIsCiAgICAgICAgICAgICAgIm5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24td29ya2xvYWQtcmVnaXN0cnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogIndvcmtsb2FkLXJlZ2lzdHJ5IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2l0dGluZy1yZXF1ZXN0ZXIiLAogICAgICAgICAgICAic2VjcmV0IjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI4OCwKICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJrZXkiOiAiY2xpZW50LXNlY3JldCIsCiAgICAgICAgICAgICAgICAgICJwYXRoIjogImNsaWVudC1zZWNyZXQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAib3B0aW9uYWwiOiBmYWxzZSwKICAgICAgICAgICAgICAic2VjcmV0TmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1zaXR0aW5nLXJlcXVlc3RlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgfQogIH0KfQo=" + }, + { + "digest": "sha256:39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121", + "media_type": "application/json", + "content_base64": "ewogICJhcGlWZXJzaW9uIjogImFwcHMvdjEiLAogICJraW5kIjogIkRlcGxveW1lbnQiLAogICJtZXRhZGF0YSI6IHsKICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgImluZm9ybWVkLWRlY2lzaW9uLmNvdWxvbWIuc29jaWFsL2FkbWlzc2lvbiI6ICJhcHByb3ZlZDsgSU5GRC1XUC0wMDA3IGN1dG92ZXIiLAogICAgICAiYXJnb2NkLmFyZ29wcm9qLmlvL3RyYWNraW5nLWlkIjogImluZm9ybWVkLWRlY2lzaW9uOmFwcHMvRGVwbG95bWVudDppbmZvcm1lZC1kZWNpc2lvbi9pbmZvcm1lZC1kZWNpc2lvbiIKICAgIH0sCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIgogIH0sCiAgInNwZWMiOiB7CiAgICAicHJvZ3Jlc3NEZWFkbGluZVNlY29uZHMiOiA2MDAsCiAgICAicmVwbGljYXMiOiAxLAogICAgInNlbGVjdG9yIjogewogICAgICAibWF0Y2hMYWJlbHMiOiB7CiAgICAgICAgImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24iCiAgICAgIH0KICAgIH0sCiAgICAic3RyYXRlZ3kiOiB7CiAgICAgICJ0eXBlIjogIlJlY3JlYXRlIgogICAgfSwKICAgICJ0ZW1wbGF0ZSI6IHsKICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi5jb3Vsb21iLnNvY2lhbC9hZG1pc3Npb24iOiAiYXBwcm92ZWQ7IElORkQtV1AtMDAwNyBjdXRvdmVyIgogICAgICAgIH0sCiAgICAgICAgImxhYmVscyI6IHsKICAgICAgICAgICJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQiOiAicmV2aWV3IiwKICAgICAgICAgICJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjogImluZm9ybWVkLWRlY2lzaW9uIgogICAgICAgIH0KICAgICAgfSwKICAgICAgInNwZWMiOiB7CiAgICAgICAgImF1dG9tb3VudFNlcnZpY2VBY2NvdW50VG9rZW4iOiBmYWxzZSwKICAgICAgICAiY29udGFpbmVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImVudiI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJJTkZEX0tFWUNBUEVfSVNTVUVSIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJodHRwczovL2tjLmNvdWxvbWIuc29jaWFsIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiSU5GRF9DT05UQUlORVJfQ09ORklHIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIvY29uZmlndXJhdGlvbi9ydW50aW1lLmpzb24iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW1hZ2UiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3ZjVjNmNiMjljOWY3MGEwMjZiZmUzMGU3MjkzNDI3NGRkYzY5MjYxNjc2Y2Y2ZDQ3NmY4MWRkMzI4MTJkMTczIiwKICAgICAgICAgICAgImxpdmVuZXNzUHJvYmUiOiB7CiAgICAgICAgICAgICAgImh0dHBHZXQiOiB7CiAgICAgICAgICAgICAgICAicGF0aCI6ICIvaGVhbHRoeiIsCiAgICAgICAgICAgICAgICAicG9ydCI6ICJodHRwIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAidGltZW91dFNlY29uZHMiOiAyCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgInBvcnRzIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJjb250YWluZXJQb3J0IjogODA4MCwKICAgICAgICAgICAgICAgICJuYW1lIjogImh0dHAiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY29udGFpbmVyUG9ydCI6IDgwODEsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJyZWFkaW5lc3NQcm9iZSI6IHsKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAicGVyaW9kU2Vjb25kcyI6IDEwLAogICAgICAgICAgICAgICJ0aW1lb3V0U2Vjb25kcyI6IDIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlc291cmNlcyI6IHsKICAgICAgICAgICAgICAibGltaXRzIjogewogICAgICAgICAgICAgICAgImNwdSI6ICI1MDBtIiwKICAgICAgICAgICAgICAgICJtZW1vcnkiOiAiMjU2TWkiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAicmVxdWVzdHMiOiB7CiAgICAgICAgICAgICAgICAiY3B1IjogIjVtIiwKICAgICAgICAgICAgICAgICJtZW1vcnkiOiAiNjRNaSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzZWN1cml0eUNvbnRleHQiOiB7CiAgICAgICAgICAgICAgImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6IGZhbHNlLAogICAgICAgICAgICAgICJjYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICAgICAiZHJvcCI6IFsKICAgICAgICAgICAgICAgICAgIkFMTCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJyZWFkT25seVJvb3RGaWxlc3lzdGVtIjogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3RhcnR1cFByb2JlIjogewogICAgICAgICAgICAgICJmYWlsdXJlVGhyZXNob2xkIjogMTIsCiAgICAgICAgICAgICAgImh0dHBHZXQiOiB7CiAgICAgICAgICAgICAgICAicGF0aCI6ICIvaGVhbHRoeiIsCiAgICAgICAgICAgICAgICAicG9ydCI6ICJodHRwIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAidGltZW91dFNlY29uZHMiOiAyCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ2b2x1bWVNb3VudHMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvZGF0YSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJkYXRhIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvcnVuL2luZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInJ1bnRpbWUiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi90bXAiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAidG1wIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvY29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJjb25maWd1cmF0aW9uIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9wb2xpY3kiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiY2FsbGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9hdWRpdCIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24va3ViZXJuZXRlcyIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJrdWJlcm5ldGVzLWFwaSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi93b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24vcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInNpdHRpbmctcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzZWN1cml0eUNvbnRleHQiOiB7CiAgICAgICAgICAiZnNHcm91cCI6IDEwMDAxLAogICAgICAgICAgImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiAiT25Sb290TWlzbWF0Y2giLAogICAgICAgICAgInJ1bkFzR3JvdXAiOiAxMDAwMSwKICAgICAgICAgICJydW5Bc05vblJvb3QiOiB0cnVlLAogICAgICAgICAgInJ1bkFzVXNlciI6IDEwMDAxLAogICAgICAgICAgInNlY2NvbXBQcm9maWxlIjogewogICAgICAgICAgICAidHlwZSI6ICJSdW50aW1lRGVmYXVsdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJzZXJ2aWNlQWNjb3VudE5hbWUiOiAicmV2aWV3IiwKICAgICAgICAidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOiA0NSwKICAgICAgICAidm9sdW1lcyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZGF0YSIsCiAgICAgICAgICAgICJwZXJzaXN0ZW50Vm9sdW1lQ2xhaW0iOiB7CiAgICAgICAgICAgICAgImNsYWltTmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1kYXRhIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZW1wdHlEaXIiOiB7CiAgICAgICAgICAgICAgIm1lZGl1bSI6ICJNZW1vcnkiLAogICAgICAgICAgICAgICJzaXplTGltaXQiOiAiMTZNaSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAicnVudGltZSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJlbXB0eURpciI6IHsKICAgICAgICAgICAgICAibWVkaXVtIjogIk1lbW9yeSIsCiAgICAgICAgICAgICAgInNpemVMaW1pdCI6ICIxNk1pIgogICAgICAgICAgICB9LAogICAgICAgICAgICAibmFtZSI6ICJ0bXAiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY29uZmlnTWFwIjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI5MiwKICAgICAgICAgICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAiY29uZmlndXJhdGlvbiIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImNhbGxlciIsCiAgICAgICAgICAgICJwcm9qZWN0ZWQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJzb3VyY2VzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAic2VydmljZUFjY291bnRUb2tlbiI6IHsKICAgICAgICAgICAgICAgICAgICAiYXVkaWVuY2UiOiAiZmxleC1hdXRoIiwKICAgICAgICAgICAgICAgICAgICAiZXhwaXJhdGlvblNlY29uZHMiOiAzNjAwLAogICAgICAgICAgICAgICAgICAgICJwYXRoIjogInRva2VuIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICJzZWNyZXQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgImtleSI6ICJ0b2tlbiIsCiAgICAgICAgICAgICAgICAgICJwYXRoIjogInRva2VuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgInNlY3JldE5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tYXVkaXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImt1YmVybmV0ZXMtYXBpIiwKICAgICAgICAgICAgInByb2plY3RlZCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyODgsCiAgICAgICAgICAgICAgInNvdXJjZXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJzZXJ2aWNlQWNjb3VudFRva2VuIjogewogICAgICAgICAgICAgICAgICAgICJleHBpcmF0aW9uU2Vjb25kcyI6IDYwMCwKICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJ0b2tlbiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJrZXkiOiAiY2EuY3J0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiY2EuY3J0IgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAia3ViZS1yb290LWNhLmNydCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyOTIsCiAgICAgICAgICAgICAgIm5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24td29ya2xvYWQtcmVnaXN0cnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogIndvcmtsb2FkLXJlZ2lzdHJ5IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2l0dGluZy1yZXF1ZXN0ZXIiLAogICAgICAgICAgICAic2VjcmV0IjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI4OCwKICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJrZXkiOiAiY2xpZW50LXNlY3JldCIsCiAgICAgICAgICAgICAgICAgICJwYXRoIjogImNsaWVudC1zZWNyZXQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAib3B0aW9uYWwiOiBmYWxzZSwKICAgICAgICAgICAgICAic2VjcmV0TmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1zaXR0aW5nLXJlcXVlc3RlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgfQogIH0KfQo=" + }, + { + "digest": "sha256:e304dd29571bf7d7b9f1db2ade0163dd39cfec012a5ce6986139f019f37e65a2", + "media_type": "application/json", + "content_base64": "ewogICJwcm9wb3NhbCI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIsCiAgIm9ic2VydmVkX2F0IjogIjIwMjYtMTAtMTFUMDE6MjQ6MDEuOTg1MTI4KzAwOjAwIiwKICAibmF0aXZlX293bmVyX3B1YmxpY2F0aW9uX2pvYiI6IHsKICAgICJpZCI6IDExNDg0LAogICAgIm5hbWUiOiAicHVibGlzaC1jYW5kaWRhdGUiLAogICAgImhlYWRfYnJhbmNoIjogIm1haW4iLAogICAgImhlYWRfc2hhIjogIjNlNGJjYjI2ZjhlZWFhOGM2NDM0NWM1NjU0NzdiNWFjOGNjYmIxNjgiLAogICAgInJ1bl9udW1iZXIiOiAzLAogICAgImV2ZW50IjogInB1c2giLAogICAgImRpc3BsYXlfdGl0bGUiOiAiUHJlcGFyZSByZWFkYWJsZSBvdmVybGF5IGNvbnRleHQgd2l0aCB0aGUgYWRtaXR0ZWQgbGVnYWN5IGJ1aWxkZXIiLAogICAgInN0YXR1cyI6ICJzdWNjZXNzIiwKICAgICJ3b3JrZmxvd19pZCI6ICJwdXJwb3NlLW92ZXJsYXktaW1hZ2UueWFtbCIsCiAgICAidXJsIjogImh0dHBzOi8vZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uL2FjdGlvbnMvcnVucy8zIiwKICAgICJjcmVhdGVkX2F0IjogIjIwMjYtMTAtMTFUMDE6MjA6NTlaIiwKICAgICJ1cGRhdGVkX2F0IjogIjIwMjYtMTAtMTFUMDE6MjE6MDhaIiwKICAgICJydW5fc3RhcnRlZF9hdCI6ICIyMDI2LTEwLTExVDAxOjIwOjU5WiIKICB9LAogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJzb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInBvbGljeV9zaGEyNTYiOiAiOWQ3YzFiZTRjYjYxOTlkMTRlZjBhYWVhZDVmODU5NTFmNDViMGNjYmQ3YzgwMGE3ZmRlOTIyYTI1MzU2NmI2MiIsCiAgInJlZ2lzdHJ5X3Byb29mX3NoYTI1NiI6ICI1YWEyYzFmNzgwYzQ3ZjYyZmE5YjU5ZGE5NTQzZDgyYzA3YWZhMDJiMWQ5NDZlNjE0NGI4YTA0MmVmODZmMjEzIiwKICAic291cmNlX3JlbmRlcl9jaGFuZ2Vfb25seSI6ICJEZXBsb3ltZW50L2luZm9ybWVkLWRlY2lzaW9uIHNwZWMudGVtcGxhdGUuc3BlYy5jb250YWluZXJzWzBdLmltYWdlIiwKICAicnVudGltZV9jb25maWdtYXBfdW5jaGFuZ2VkIjogImluZm9ybWVkLWRlY2lzaW9uLXJ1bnRpbWUtNmMyMjE4NzhkMDUxIiwKICAiaW5zdGFsbGVkX2ltYWdlX2V4ZWN1dGlvbiI6IHsKICAgICJpbW11dGFibGVfcmVnaXN0cnlfYXJ0aWZhY3RfcHVsbGVkX2Fub255bW91c2x5IjogdHJ1ZSwKICAgICJVSUQiOiAxMDAwMSwKICAgICJHSUQiOiAxMDAwMSwKICAgICJwb2xpY3lfZmlsZV9VSUQiOiAwLAogICAgInBvbGljeV9maWxlX21vZGUiOiAiMDY0NCIsCiAgICAicHVycG9zZV92YXJpYW50cyI6IDEwLAogICAgImJpbmRpbmdfZm9ybXNfYWxsb3dlZCI6IDIsCiAgICAiYWR2aXNvcnlfb3JfbWFsZm9ybWVkX3JlZnVzZWQiOiA4LAogICAgIm5ldHdvcmsiOiAibm9uZSIsCiAgICAicmVhZF9vbmx5IjogdHJ1ZSwKICAgICJzeW50aGV0aWNfdHJhbnNwb3J0IjogdHJ1ZSwKICAgICJuYXRpdmVfUERQX3Rlc3QiOiBmYWxzZQogIH0sCiAgInNjYW5fc3VtbWFyeV9zaGEyNTYiOiAiMGVlNTY0MDBkYzcwM2Y3Yzk5NjhjMmEwYTNlYTAzOTBkODM2MmY4ZDBiYmY4MDAyYTJiZDdmYTU4ZjE5Y2I0NCIsCiAgImhpc3RvcmljYWxfZmFpbGVkX3J1bnNfcmV0YWluZWQiOiBbCiAgICAiZjY2ZGU1MDUvdGFzazExNDgyL3J1bjEiLAogICAgImFjZWNhZDg4Ny90YXNrMTE0ODMvcnVuMiIKICBdLAogICJuYXRpdmVfaG9zdGluZ19jaGFuZ2VkIjogZmFsc2UsCiAgIm5hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZCI6IGZhbHNlLAogICJodW1hbl9hcHByb3ZhbCI6IGZhbHNlLAogICJldmlkZW5jZV9maWxlX3NoYTI1NiI6IHsKICAgICJpbWFnZS1tYW5pZmVzdC5qc29uIjogIjk3OGM1NzVkM2M3YmYwZGUzOWRiZTRlOTU2N2MzOWNkMzZmNzBiN2U1NWJjMTczNTdiZGIwM2ZiM2I5NmIwZmIiLAogICAgImltYWdlLWNvbmZpZy5qc29uIjogIjRhZDcyNDljNzVmZDlmYzAzOWNlYjE4Njc3MjQxOWUxY2JhNWZkOTc1OWM0MDQ1NTY0NTljODBhMmQyODVkMTAiLAogICAgImJhc2UtaW1hZ2UtY29uZmlnLmpzb24iOiAiYjcwNmM5MjA5ZTMyNGYzOWE4NmZmY2RhMmEzZTlkOTRjOTI2NDk3MzlhZDViMjFmZTQ2MTEwMDZlMzZmNmYwMCIsCiAgICAicmVnaXN0cnktcHJvb2YuanNvbiI6ICI1YWEyYzFmNzgwYzQ3ZjYyZmE5YjU5ZGE5NTQzZDgyYzA3YWZhMDJiMWQ5NDZlNjE0NGI4YTA0MmVmODZmMjEzIiwKICAgICJ0cml2eS1mdWxsLmpzb24iOiAiZjM4YThmN2U2YzQxOWVlZDkxNTRkNzc2MmY5MzJiOWRlYjY2ODBhNjIyMjQ3YjA4MTk2Yjc0NThiODkzNDM0ZSIsCiAgICAic2JvbS5jZHguanNvbiI6ICJhNDI1Mjk1MWUyMDI3NDcyYzI2ZDg2NzljYjU0M2UzMDk4MzE4MDgwOWQ2ZGQzYzdjOTRiODgzZDYyODAzZTVkIiwKICAgICJiYXNlLXRyaXZ5LWZ1bGwuanNvbiI6ICJkNDRjNTU1YWVjYmIxYTQ1MThmNDEyN2Q0ODAxNWVhNDU5MzI1YzkzZThiMDM3MTkxMGE1NWRlNDcyOTNjYTgwIiwKICAgICJjaGVja19pbnN0YWxsZWQucHkiOiAiYTM0YTUxYmU5YzlmMmIxNmEwNmE4ODE3M2I1YzZjNDkyYzk5NTdmZTAyMWNmNDEyYTg2YTE3Mzc3MzA2NDBhZCIsCiAgICAidmVyaWZ5X3JlZ2lzdHJ5LnB5IjogIjQxM2Y1NzVjMjFhMmJkMThhMzY5NmY4ZjJkOTM5ZWVhZGM1MmQ3NmYyODJjNDI4MTNmNzZiYjBlM2VlOGEyYTQiCiAgfQp9Cg==" + }, + { + "digest": "sha256:5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213", + "media_type": "application/json", + "content_base64": "ewogICJpbWFnZV9kaWdlc3QiOiAic2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJzb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgImJhc2VfaW1hZ2VfZGlnZXN0IjogInNoYTI1Njo3ZjVjNmNiMjljOWY3MGEwMjZiZmUzMGU3MjkzNDI3NGRkYzY5MjYxNjc2Y2Y2ZDQ3NmY4MWRkMzI4MTJkMTczIiwKICAiYmFzZV9sYXllcl9ieXRlc19pZGVudGljYWwiOiB0cnVlLAogICJsYXllcl9tZWRpYV90eXBlX2NvbnZlcnNpb24iOiAiT0NJIGd6aXAgdG8gRG9ja2VyIGd6aXAsIHNhbWUgZGlnZXN0IGFuZCBzaXplIiwKICAiYmFzZV9ydW50aW1lX2NvbmZpZ19zZW1hbnRpY3NfaWRlbnRpY2FsIjogdHJ1ZSwKICAibGVnYWN5X2J1aWxkZXJfY29uZmlnX2FkZGl0aW9ucyI6IHsKICAgICJIb3N0bmFtZSI6ICIiLAogICAgIkRvbWFpbm5hbWUiOiAiIiwKICAgICJBdHRhY2hTdGRpbiI6IGZhbHNlLAogICAgIkF0dGFjaFN0ZG91dCI6IGZhbHNlLAogICAgIkF0dGFjaFN0ZGVyciI6IGZhbHNlLAogICAgIlR0eSI6IGZhbHNlLAogICAgIk9wZW5TdGRpbiI6IGZhbHNlLAogICAgIlN0ZGluT25jZSI6IGZhbHNlLAogICAgIkNtZCI6IG51bGwsCiAgICAiVm9sdW1lcyI6IG51bGwsCiAgICAiT25CdWlsZCI6IG51bGwsCiAgICAiSW1hZ2UiOiAic2hhMjU2OjkwZjE1NzRmOWVkYTM1ZmE2Y2I5NzI5NjFiZWIyN2E3Y2I5MDRjMzY1NjBlMzgxOTMwYjBlMTQwNjVjMjM4ODMiCiAgfSwKICAiYmFzZV9yb290ZnNfcHJlZml4X2lkZW50aWNhbCI6IHRydWUsCiAgIm92ZXJsYXlfcmVndWxhcl9maWxlcyI6IFsKICAgICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL2luZm9ybWVkX2RlY2lzaW9uL3BvbGljeS5weSIKICBdLAogICJvdmVybGF5X2RpcmVjdG9yaWVzIjogWwogICAgIm9wdCIsCiAgICAib3B0L3ZlbnYiLAogICAgIm9wdC92ZW52L2xpYiIsCiAgICAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIiLAogICAgIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMiLAogICAgIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvaW5mb3JtZWRfZGVjaXNpb24iCiAgXSwKICAicG9saWN5X3NoYTI1NiI6ICI5ZDdjMWJlNGNiNjE5OWQxNGVmMGFhZWFkNWY4NTk1MWY0NWIwY2NiZDdjODAwYTdmZGU5MjJhMjUzNTY2YjYyIiwKICAicG9saWN5X21vZGUiOiAiMDY0NCIsCiAgImJhc2VfdXNlciI6ICIxMDAwMToxMDAwMSIsCiAgInNvdXJjZV9zY29wZV9sYWJlbHMiOiB7CiAgICAib3JnLm9wZW5jb250YWluZXJzLmltYWdlLnJldmlzaW9uIjogIjNlNGJjYjI2ZjhlZWFhOGM2NDM0NWM1NjU0NzdiNWFjOGNjYmIxNjgiLAogICAgIm9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5iYXNlLmRpZ2VzdCI6ICJzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MyIsCiAgICAic29jaWFsLmNvdWxvbWIuc291cmNlLnBvbGljeS5zaGEyNTYiOiAiOWQ3YzFiZTRjYjYxOTlkMTRlZjBhYWVhZDVmODU5NTFmNDViMGNjYmQ3YzgwMGE3ZmRlOTIyYTI1MzU2NmI2MiIsCiAgICAic29jaWFsLmNvdWxvbWIucmVsZWFzZS5zY29wZSI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIKICB9LAogICJyZWdpc3RyeV9yZWFkX3JvdXRlIjogImFub255bW91cyBwdWJsaWMgc2NvcGVkIGJlYXJlciBjaGFsbGVuZ2UsIG5vIHRva2VuIHJldGVudGlvbiIsCiAgImltYWdlX2V4ZWN1dGVkIjogZmFsc2UsCiAgIm5hdGl2ZV93b3JrbG9hZF9jaGFuZ2VkIjogZmFsc2UsCiAgIm5hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZCI6IGZhbHNlCn0K" + }, + { + "digest": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44", + "media_type": "application/json", + "content_base64": "ewogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJzb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInNjYW5uZXIiOiAiYXF1YXNlYy90cml2eUBzaGEyNTY6NjJiMWU2NWU4ODY5YmM0YjRjNmFhNGZhMmIyMTU5NTI1NmM3YzJmNjAxOGE5ZDlhZDYxY2FmODcxODdjMTk2OSIsCiAgInZlcnNpb24iOiAiMC43NC4wIiwKICAiZGJfbWV0YWRhdGEiOiB7CiAgICAiVmVyc2lvbiI6IDIsCiAgICAiTmV4dFVwZGF0ZSI6ICIyMDI2LTEwLTExVDE4OjU5OjUwLjg4OTAxMDU3MloiLAogICAgIlVwZGF0ZWRBdCI6ICIyMDI2LTEwLTEwVDE4OjU5OjUwLjg4OTAxMDkyM1oiLAogICAgIkRvd25sb2FkZWRBdCI6ICIyMDI2LTEwLTEwVDIzOjMyOjMyLjM4MDAzMzEzMVoiCiAgfSwKICAic3VwcHJlc3Npb24iOiBmYWxzZSwKICAiaWdub3JlX3VuZml4ZWQiOiBmYWxzZSwKICAic2V2ZXJpdHlfZmlsdGVyIjogbnVsbCwKICAicGFja2FnZV9jb3VudCI6IDQ0LAogICJmaW5kaW5nc19ieV9zZXZlcml0eSI6IHsKICAgICJNRURJVU0iOiAxCiAgfSwKICAiZmluZGluZ3MiOiBbCiAgICB7CiAgICAgICJpZCI6ICJDVkUtMjAyNi04NTA5MSIsCiAgICAgICJwYWNrYWdlIjogInpsaWIiLAogICAgICAiaW5zdGFsbGVkIjogIjEuMy4yLXIwIiwKICAgICAgImZpeGVkIjogIjEuMy4yLXIxIiwKICAgICAgInNldmVyaXR5IjogIk1FRElVTSIKICAgIH0KICBdLAogICJjb3ZlcmFnZV9saW1pdHMiOiBbCiAgICAiQWxwaW5lMy4yNCBhYnNlbnQgc2Nhbm5lciBFT0wgbGlzdDsgT1MgZGV0ZWN0b3IgcmFuIGFnYWluc3QgQWxwaW5lMy4yNCByZXBvc2l0b3J5IG9uMzhPUyBwYWNrYWdlcyIsCiAgICAiS25vd24gZmluZGluZ3MgYXNvZiBwaW5uZWREQiwgbm90IGNsYWltIGFic2VuY2Ugb2YgdW5rbm93biB2dWxuZXJhYmlsaXRpZXMiCiAgXSwKICAiaGlnaF9jcml0aWNhbCI6IDAsCiAgInNhbWVfc2Nhbm5lcl9hY3R1YWxfYmFzZV9zY2FuX2ZpbmRpbmdzX2lkZW50aWNhbCI6IHRydWUsCiAgImJhc2Vfc2Nhbl9maWxlIjogImJhc2UtdHJpdnktZnVsbC5qc29uIgp9Cg==" + }, + { + "digest": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e", + "media_type": "application/json", + "content_base64": "ewogICJTY2hlbWFWZXJzaW9uIjogMiwKICAiVHJpdnkiOiB7CiAgICAiVmVyc2lvbiI6ICIwLjc0LjAiCiAgfSwKICAiUmVwb3J0SUQiOiAiMDFhMTI4OGQtOGRmMS03M2ZiLTkzMTMtMzY0MmRkNjRiYTcyIiwKICAiQ3JlYXRlZEF0IjogIjIwMjYtMTAtMTFUMDE6MjI6MDcuOTg1MjY0NDA0WiIsCiAgIkFydGlmYWN0SUQiOiAic2hhMjU2OjQwZjg3M2I4ZDYzNDUzNDFlMmY2NjFhNTAzOGMwOTJkMTg2ZTI4MzFkYzYwYjYxNzA0YTQxOWExZjRmNzdlZjYiLAogICJBcnRpZmFjdE5hbWUiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIiwKICAiQXJ0aWZhY3RUeXBlIjogImNvbnRhaW5lcl9pbWFnZSIsCiAgIk1ldGFkYXRhIjogewogICAgIlNpemUiOiA4ODI1ODA0OCwKICAgICJPUyI6IHsKICAgICAgIkZhbWlseSI6ICJhbHBpbmUiLAogICAgICAiTmFtZSI6ICIzLjI0LjEiCiAgICB9LAogICAgIkltYWdlSUQiOiAic2hhMjU2OmYzNGRlMjEzNzljNGY1MGVhMDM2MWNhMWQ4Mjk2YzhlNzJmOTg5NDk5YWQyODgwMTZiODEyMDQ5OTdhZTQ3NzkiLAogICAgIkRpZmZJRHMiOiBbCiAgICAgICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIsCiAgICAgICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIsCiAgICAgICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIsCiAgICAgICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIsCiAgICAgICJzaGEyNTY6ZjliNGE4YTQxMmEwYzA3YTQ4OWU0NmZiNWRiNDFmOWQwZGM4NGQ0ZWMzOGE0ZTJjNmFiOTUzMWY0NGUwZDlmMSIsCiAgICAgICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIsCiAgICAgICJzaGEyNTY6MzYxNDMwYTExMTM5Njk3NDNiOTllMjM3YjIwZjAyM2Q1NDk3NDkzYmNmOTZmYjkxYWY5OWFjMGEwZGJjNGE1OSIsCiAgICAgICJzaGEyNTY6Y2ZjNTkzOTY3NGQ2N2Y2MGI0NDExYzI0ZGZjZGU1NjIyYjcxMmVlYjczNzZjZDA5NDFhMjc1MWRhODBhNmIwMiIsCiAgICAgICJzaGEyNTY6MjFmZjkxODhjYjI5Y2E5NWZlOWJlMTEzNTVmNzBhYjU1ODZlODQ5OWUzM2I1MmEyNTNkOTUzZmIzYjc1YWVhMyIKICAgIF0sCiAgICAiUmVwb0RpZ2VzdHMiOiBbCiAgICAgICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiCiAgICBdLAogICAgIlJlZmVyZW5jZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICAgIkltYWdlQ29uZmlnIjogewogICAgICAiYXJjaGl0ZWN0dXJlIjogImFtZDY0IiwKICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0xMVQwMToyMTowNC43ODc1Mjc2OTdaIiwKICAgICAgImRvY2tlcl92ZXJzaW9uIjogIjI3LjUuMSIsCiAgICAgICJoaXN0b3J5IjogWwogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDYtMTZUMDA6MDE6MjkuOTY3MTYxOTAyWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJBREQgYWxwaW5lLW1pbmlyb290ZnMtMy4yNC4xLXg4Nl82NC50YXIuZ3ogLyAjIGJ1aWxka2l0IiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA2LTE2VDAwOjAxOjI5Ljk2NzE2MTkwMloiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiQ01EIFtcIi9iaW4vc2hcIl0iLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBBVEg9L3Vzci9sb2NhbC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0wMVQwMDowNToyNC4yMjQ1NDQ4NDNaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBMQU5HPUMuVVRGLTgiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgc2V0IC1ldXg7IFx0YXBrIGFkZCAtLW5vLWNhY2hlIFx0XHRjYS1jZXJ0aWZpY2F0ZXMgXHRcdHR6ZGF0YSBcdDsgIyBidWlsZGtpdCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0wMVQwMDowNToyNC4yMjQ1NDQ4NDNaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBHUEdfS0VZPTcxNjk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBZVEhPTl9WRVJTSU9OPTMuMTIuMTQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBZVEhPTl9TSEEyNTY9NWM4NDYyYWY1NzkwYmFmNDNhMzIxYTE1NTlkYmUwZGIwNmQxYmU0MzAwZmI4NWZiNTNjNDAwNjA2NjhlNTQ4YSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMDFUMDA6MTA6MzAuNjcyMjI1OTcyWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJSVU4gL2Jpbi9zaCAtYyBzZXQgLWV1eDsgXHRcdGFwayBhZGQgLS1uby1jYWNoZSAtLXZpcnR1YWwgLmJ1aWxkLWRlcHMgXHRcdGJsdWV6LWRldiBcdFx0YnppcDItZGV2IFx0XHRkcGtnLWRldiBkcGtnIFx0XHRmaW5kdXRpbHMgXHRcdGcrKyBcdFx0Z2NjIFx0XHRnZGJtLWRldiBcdFx0Z251cGcgXHRcdGxpYmMtZGV2IFx0XHRsaWJmZmktZGV2IFx0XHRsaWJuc2wtZGV2IFx0XHRsaWJ0aXJwYy1kZXYgXHRcdGxpbnV4LWhlYWRlcnMgXHRcdG1ha2UgXHRcdG5jdXJzZXMtZGV2IFx0XHRvcGVuc3NsLWRldiBcdFx0cGF4LXV0aWxzIFx0XHRyZWFkbGluZS1kZXYgXHRcdHNxbGl0ZS1kZXYgXHRcdHRhciBcdFx0dGNsLWRldiBcdFx0dGsgXHRcdHRrLWRldiBcdFx0dXRpbC1saW51eC1kZXYgXHRcdHh6IFx0XHR4ei1kZXYgXHRcdHpsaWItZGV2IFx0OyBcdFx0d2dldCAtTyBweXRob24udGFyLnh6IFwiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFlUSE9OX1ZFUlNJT04lJVthLXpdKn0vUHl0aG9uLSRQWVRIT05fVkVSU0lPTi50YXIueHpcIjsgXHRlY2hvIFwiJFBZVEhPTl9TSEEyNTYgKnB5dGhvbi50YXIueHpcIiB8IHNoYTI1NnN1bSAtYyAtOyBcdHdnZXQgLU8gcHl0aG9uLnRhci54ei5hc2MgXCJodHRwczovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQWVRIT05fVkVSU0lPTiUlW2Etel0qfS9QeXRob24tJFBZVEhPTl9WRVJTSU9OLnRhci54ei5hc2NcIjsgXHRHTlVQR0hPTUU9XCIkKG1rdGVtcCAtZClcIjsgZXhwb3J0IEdOVVBHSE9NRTsgXHRncGcgLS1iYXRjaCAtLWtleXNlcnZlciBoa3BzOi8va2V5cy5vcGVucGdwLm9yZyAtLXJlY3Yta2V5cyBcIiRHUEdfS0VZXCI7IFx0Z3BnIC0tYmF0Y2ggLS12ZXJpZnkgcHl0aG9uLnRhci54ei5hc2MgcHl0aG9uLnRhci54ejsgXHRncGdjb25mIC0ta2lsbCBhbGw7IFx0cm0gLXJmIFwiJEdOVVBHSE9NRVwiIHB5dGhvbi50YXIueHouYXNjOyBcdG1rZGlyIC1wIC91c3Ivc3JjL3B5dGhvbjsgXHR0YXIgLS1leHRyYWN0IC0tZGlyZWN0b3J5IC91c3Ivc3JjL3B5dGhvbiAtLXN0cmlwLWNvbXBvbmVudHM9MSAtLWZpbGUgcHl0aG9uLnRhci54ejsgXHRybSBweXRob24udGFyLnh6OyBcdFx0Y2QgL3Vzci9zcmMvcHl0aG9uOyBcdGdudUFyY2g9XCIkKGRwa2ctYXJjaGl0ZWN0dXJlIC0tcXVlcnkgREVCX0JVSUxEX0dOVV9UWVBFKVwiOyBcdC4vY29uZmlndXJlIFx0XHQtLWJ1aWxkPVwiJGdudUFyY2hcIiBcdFx0LS1lbmFibGUtbG9hZGFibGUtc3FsaXRlLWV4dGVuc2lvbnMgXHRcdC0tZW5hYmxlLW9wdGlvbi1jaGVja2luZz1mYXRhbCBcdFx0LS1lbmFibGUtc2hhcmVkIFx0XHQkKHRlc3QgXCIke2dudUFyY2glJS0qfVwiICE9ICdyaXNjdjY0JyBcdTAwMjZcdTAwMjYgZWNobyAnLS13aXRoLWx0bycpIFx0XHQtLXdpdGgtZW5zdXJlcGlwIFx0OyBcdG5wcm9jPVwiJChucHJvYylcIjsgXHRFWFRSQV9DRkxBR1M9XCItRFRIUkVBRF9TVEFDS19TSVpFPTB4MTAwMDAwXCI7IFx0TERGTEFHUz1cIiR7TERGTEFHUzotfSAtV2wsLS1zdHJpcC1hbGxcIjsgXHRhcmNoPVwiJChhcGsgLS1wcmludC1hcmNoKVwiOyBcdGNhc2UgXCIkYXJjaFwiIGluIFx0XHR4ODZfNjR8YWFyY2g2NCkgXHRcdFx0RVhUUkFfQ0ZMQUdTPVwiJHtFWFRSQV9DRkxBR1M6LX0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLW1uby1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlclwiOyBcdFx0XHQ7OyBcdFx0eDg2KSBcdFx0XHQ7OyBcdFx0KikgXHRcdFx0RVhUUkFfQ0ZMQUdTPVwiJHtFWFRSQV9DRkxBR1M6LX0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXJcIjsgXHRcdFx0OzsgXHRlc2FjOyBcdG1ha2UgLWogXCIkbnByb2NcIiBcdFx0XCJFWFRSQV9DRkxBR1M9JHtFWFRSQV9DRkxBR1M6LX1cIiBcdFx0XCJMREZMQUdTPSR7TERGTEFHUzotfVwiIFx0OyBcdHJtIHB5dGhvbjsgXHRtYWtlIC1qIFwiJG5wcm9jXCIgXHRcdFwiRVhUUkFfQ0ZMQUdTPSR7RVhUUkFfQ0ZMQUdTOi19XCIgXHRcdFwiTERGTEFHUz0ke0xERkxBR1M6LX0gLVdsLC1ycGF0aD0nXFwkXFwkT1JJR0lOLy4uL2xpYidcIiBcdFx0cHl0aG9uIFx0OyBcdG1ha2UgaW5zdGFsbDsgXHRcdGNkIC87IFx0cm0gLXJmIC91c3Ivc3JjL3B5dGhvbjsgXHRcdGZpbmQgL3Vzci9sb2NhbCAtZGVwdGggXHRcdFxcKCBcdFx0XHRcXCggLXR5cGUgZCAtYSBcXCggLW5hbWUgdGVzdCAtbyAtbmFtZSB0ZXN0cyAtbyAtbmFtZSBpZGxlX3Rlc3QgXFwpIFxcKSBcdFx0XHQtbyBcXCggLXR5cGUgZiAtYSBcXCggLW5hbWUgJyoucHljJyAtbyAtbmFtZSAnKi5weW8nIC1vIC1uYW1lICdsaWJweXRob24qLmEnIFxcKSBcXCkgXHRcdFxcKSAtZXhlYyBybSAtcmYgJ3t9JyArIFx0OyBcdFx0ZmluZCAvdXNyL2xvY2FsIC10eXBlIGYgLWV4ZWN1dGFibGUgLW5vdCBcXCggLW5hbWUgJyp0a2ludGVyKicgXFwpIC1leGVjIHNjYW5lbGYgLS1uZWVkZWQgLS1ub2Jhbm5lciAtLWZvcm1hdCAnJW4jcCcgJ3t9JyAnOycgXHRcdHwgdHIgJywnICdcXG4nIFx0XHR8IHNvcnQgLXUgXHRcdHwgYXdrICdzeXN0ZW0oXCJbIC1lIC91c3IvbG9jYWwvbGliL1wiICQxIFwiIF1cIikgPT0gMCB7IG5leHQgfSB7IHByaW50IFwic286XCIgJDEgfScgXHRcdHwgeGFyZ3MgLXJ0IGFwayBhZGQgLS1uby1uZXR3b3JrIC0tdmlydHVhbCAucHl0aG9uLXJ1bmRlcHMgXHQ7IFx0YXBrIGRlbCAtLW5vLW5ldHdvcmsgLmJ1aWxkLWRlcHM7IFx0XHRleHBvcnQgUFlUSE9ORE9OVFdSSVRFQllURUNPREU9MTsgXHRweXRob24zIC0tdmVyc2lvbjsgXHRwaXAzIC0tdmVyc2lvbiAjIGJ1aWxka2l0IiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjEwOjMwLjc4MjcyNjAwM1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgc2V0IC1ldXg7IFx0Zm9yIHNyYyBpbiBpZGxlMyBwaXAzIHB5ZG9jMyBweXRob24zIHB5dGhvbjMtY29uZmlnOyBkbyBcdFx0ZHN0PVwiJChlY2hvIFwiJHNyY1wiIHwgdHIgLWQgMylcIjsgXHRcdFsgLXMgXCIvdXNyL2xvY2FsL2Jpbi8kc3JjXCIgXTsgXHRcdFsgISAtZSBcIi91c3IvbG9jYWwvYmluLyRkc3RcIiBdOyBcdFx0bG4gLXN2VCBcIiRzcmNcIiBcIi91c3IvbG9jYWwvYmluLyRkc3RcIjsgXHRkb25lICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMDFUMDA6MTA6MzAuNzgyNzI2MDAzWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJDTUQgW1wicHl0aG9uM1wiXSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMTFUMDA6NDk6NDcuOTYyMTU2ODc2KzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBQWVRIT05ET05UV1JJVEVCWVRFQ09ERT0xIFBZVEhPTlVOQlVGRkVSRUQ9MSBQQVRIPS9vcHQvdmVudi9iaW46L3Vzci9sb2NhbC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0xMVQwMDo0OTo0Ny45NjIxNTY4NzYrMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgYXBrIGFkZCAtLW5vLWNhY2hlICdsaWJ1dWlkXHUwMDNlPTIuNDIuMy1yMScgICAgIFx1MDAyNlx1MDAyNiBhZGRncm91cCAtUyAtZyAxMDAwMSBpbmZvcm1lZCAgICAgXHUwMDI2XHUwMDI2IGFkZHVzZXIgLVMgLXUgMTAwMDEgLUcgaW5mb3JtZWQgLUggaW5mb3JtZWQgIyBidWlsZGtpdCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1NS4zNTE5NDQ5NzgrMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiQ09QWSAvb3B0L3ZlbnYgL29wdC92ZW52ICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNDYyMDkyMDcyKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIlJVTiAvYmluL3NoIC1jIHJtIC1yZiAvdXNyL2xvY2FsL2Jpbi9waXAqIC91c3IvbG9jYWwvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9waXAqICAgICAvdXNyL2xvY2FsL2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvc2V0dXB0b29scyogL3Vzci9sb2NhbC9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL3BrZ19yZXNvdXJjZXMgICAgIC9vcHQvdmVudi9iaW4vcGlwKiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9waXAqICAgICAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9zZXR1cHRvb2xzKiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9wa2dfcmVzb3VyY2VzICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNjc1MjE2ODIxKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIldPUktESVIgL2FwcCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1Ni42NzUyMTY4MjErMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiVVNFUiAxMDAwMToxMDAwMSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNjc1MjE2ODIxKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVYUE9TRSBbODA4MC90Y3AgODA4MS90Y3BdIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1Ni42NzUyMTY4MjErMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5UUllQT0lOVCBbXCJpbmZvcm1lZC1kZWNpc2lvbi1jb250YWluZXJcIl0iLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTEwLTExVDAxOjE1OjExLjk5MTQ0MzY3NloiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiL2Jpbi9zaCAtYyAjKG5vcCkgIEFSRyBTT1VSQ0VfUkVWSVNJT04iLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0xMVQwMToyMTowNC43MTYxMjYzOTJaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIi9iaW4vc2ggLWMgIyhub3ApICBMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UucmV2aXNpb249M2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYmFzZS5kaWdlc3Q9c2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMgc29jaWFsLmNvdWxvbWIuc291cmNlLnBvbGljeS5zaGEyNTY9OWQ3YzFiZTRjYjYxOTlkMTRlZjBhYWVhZDVmODU5NTFmNDViMGNjYmQ3YzgwMGE3ZmRlOTIyYTI1MzU2NmI2MiBzb2NpYWwuY291bG9tYi5yZWxlYXNlLnNjb3BlPUlORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMTFUMDE6MjE6MDQuNzg3NTI3Njk3WiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICIvYmluL3NoIC1jICMobm9wKSBDT1BZIGZpbGU6MmJlOWNiMzZlNzI1M2UxNTczMzY3MzM1OWNkYThjYWEyMjk4NmI2ODg4ODIyYTAwOGMxYjM2MGQ5MDk5OTRlMCBpbiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9pbmZvcm1lZF9kZWNpc2lvbi9wb2xpY3kucHkgIgogICAgICAgIH0KICAgICAgXSwKICAgICAgIm9zIjogImxpbnV4IiwKICAgICAgInJvb3RmcyI6IHsKICAgICAgICAidHlwZSI6ICJsYXllcnMiLAogICAgICAgICJkaWZmX2lkcyI6IFsKICAgICAgICAgICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIsCiAgICAgICAgICAic2hhMjU2OjNjYTRiZTJjNmU5YWMwMjIzNzE1MzU1MjUzNzI1MzgxMDAwNDg2YzJiNDViZmNiMjJjZjU3MWI2YTg1YTEyZGQiLAogICAgICAgICAgInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IiwKICAgICAgICAgICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIsCiAgICAgICAgICAic2hhMjU2OmY5YjRhOGE0MTJhMGMwN2E0ODllNDZmYjVkYjQxZjlkMGRjODRkNGVjMzhhNGUyYzZhYjk1MzFmNDRlMGQ5ZjEiLAogICAgICAgICAgInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIiwKICAgICAgICAgICJzaGEyNTY6MzYxNDMwYTExMTM5Njk3NDNiOTllMjM3YjIwZjAyM2Q1NDk3NDkzYmNmOTZmYjkxYWY5OWFjMGEwZGJjNGE1OSIsCiAgICAgICAgICAic2hhMjU2OmNmYzU5Mzk2NzRkNjdmNjBiNDQxMWMyNGRmY2RlNTYyMmI3MTJlZWI3Mzc2Y2QwOTQxYTI3NTFkYTgwYTZiMDIiLAogICAgICAgICAgInNoYTI1NjoyMWZmOTE4OGNiMjljYTk1ZmU5YmUxMTM1NWY3MGFiNTU4NmU4NDk5ZTMzYjUyYTI1M2Q5NTNmYjNiNzVhZWEzIgogICAgICAgIF0KICAgICAgfSwKICAgICAgImNvbmZpZyI6IHsKICAgICAgICAiRW50cnlwb2ludCI6IFsKICAgICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi1jb250YWluZXIiCiAgICAgICAgXSwKICAgICAgICAiRW52IjogWwogICAgICAgICAgIlBBVEg9L29wdC92ZW52L2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgIkxBTkc9Qy5VVEYtOCIsCiAgICAgICAgICAiR1BHX0tFWT03MTY5NjA1RjYyQzc1MTM1NkQwNTRBMjZBODIxRTY4MEU1RkE2MzA1IiwKICAgICAgICAgICJQWVRIT05fVkVSU0lPTj0zLjEyLjE0IiwKICAgICAgICAgICJQWVRIT05fU0hBMjU2PTVjODQ2MmFmNTc5MGJhZjQzYTMyMWExNTU5ZGJlMGRiMDZkMWJlNDMwMGZiODVmYjUzYzQwMDYwNjY4ZTU0OGEiLAogICAgICAgICAgIlBZVEhPTkRPTlRXUklURUJZVEVDT0RFPTEiLAogICAgICAgICAgIlBZVEhPTlVOQlVGRkVSRUQ9MSIKICAgICAgICBdLAogICAgICAgICJJbWFnZSI6ICJzaGEyNTY6OTBmMTU3NGY5ZWRhMzVmYTZjYjk3Mjk2MWJlYjI3YTdjYjkwNGMzNjU2MGUzODE5MzBiMGUxNDA2NWMyMzg4MyIsCiAgICAgICAgIkxhYmVscyI6IHsKICAgICAgICAgICJvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYmFzZS5kaWdlc3QiOiAic2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMiLAogICAgICAgICAgIm9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5yZXZpc2lvbiI6ICIzZTRiY2IyNmY4ZWVhYThjNjQzNDVjNTY1NDc3YjVhYzhjY2JiMTY4IiwKICAgICAgICAgICJzb2NpYWwuY291bG9tYi5yZWxlYXNlLnNjb3BlIjogIklORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxIiwKICAgICAgICAgICJzb2NpYWwuY291bG9tYi5zb3VyY2UucG9saWN5LnNoYTI1NiI6ICI5ZDdjMWJlNGNiNjE5OWQxNGVmMGFhZWFkNWY4NTk1MWY0NWIwY2NiZDdjODAwYTdmZGU5MjJhMjUzNTY2YjYyIgogICAgICAgIH0sCiAgICAgICAgIlVzZXIiOiAiMTAwMDE6MTAwMDEiLAogICAgICAgICJXb3JraW5nRGlyIjogIi9hcHAiLAogICAgICAgICJFeHBvc2VkUG9ydHMiOiB7CiAgICAgICAgICAiODA4MC90Y3AiOiB7fSwKICAgICAgICAgICI4MDgxL3RjcCI6IHt9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkxheWVycyI6IFsKICAgICAgewogICAgICAgICJTaXplIjogODY5Nzg1NiwKICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICB9LAogICAgICB7CiAgICAgICAgIlNpemUiOiAxNTM4MDQ4LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjQ3MzkzYjY2OGNlNTM1ZDA2ZTg5Njc5MTdkNDI0YzE3N2UyZWNjY2FlODM4NTZkNDhiMmU5OTE2NGY4Y2M2Y2IiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjNjYTRiZTJjNmU5YWMwMjIzNzE1MzU1MjUzNzI1MzgxMDAwNDg2YzJiNDViZmNiMjJjZjU3MWI2YTg1YTEyZGQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDQ3MTUwNTkyLAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDUxMjAsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ZWQ2MmM5MWNjZDk0ZTM2YTkyOGU5NmQ3MDRjZmNmMjA4NjEzMDI1OTAyNDVjYzEyYWE4OWExNWE1ZDZiZTI5YiIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIKICAgICAgfSwKICAgICAgewogICAgICAgICJTaXplIjogMTMxNTg0LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OmYwZmUzZTA4YWIwNDZjMGM1ZTI5ZDM0ZWU3M2JjOGM3ZTAzMzk4ZWI4OTFlNDQ5OGUwYTY3MDg4YTVlYTNlODYiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmY5YjRhOGE0MTJhMGMwN2E0ODllNDZmYjVkYjQxZjlkMGRjODRkNGVjMzhhNGUyYzZhYjk1MzFmNDRlMGQ5ZjEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDMwNzA1NjY0LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDEyMjg4LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjE2YTNkYmE2YjcyMGQzMDU5ZWFiOTE4Y2QzNTk2Zjk0MTQ1YWM5Y2Y0ZDQ1NmY5MjVhMjFmMGY3MjUyMjg2M2YiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM2MTQzMGExMTEzOTY5NzQzYjk5ZTIzN2IyMGYwMjNkNTQ5NzQ5M2JjZjk2ZmI5MWFmOTlhYzBhMGRiYzRhNTkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDE1MzYsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ZTczZGQ0NjRmYmZmNTYwN2NjNjJhMWIyYjY2YjBlZWZlNzM3ZGZhZDRkYjhlN2I1OGE0OGNkYTdjMTJkOTRkMyIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6Y2ZjNTkzOTY3NGQ2N2Y2MGI0NDExYzI0ZGZjZGU1NjIyYjcxMmVlYjczNzZjZDA5NDFhMjc1MWRhODBhNmIwMiIKICAgICAgfSwKICAgICAgewogICAgICAgICJTaXplIjogMTUzNjAsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6Y2ZlZTI5YzJmODExOWQyYTM5NzE0ZWNiZTUwOTVhMmRjMWM5ODYwNTRmMmUxZmUwYTY1NjUxNjMyNDI0MTdlMyIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MjFmZjkxODhjYjI5Y2E5NWZlOWJlMTEzNTVmNzBhYjU1ODZlODQ5OWUzM2I1MmEyNTNkOTUzZmIzYjc1YWVhMyIKICAgICAgfQogICAgXQogIH0sCiAgIlJlc3VsdHMiOiBbCiAgICB7CiAgICAgICJUYXJnZXQiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIChhbHBpbmUgMy4yNC4xKSIsCiAgICAgICJDbGFzcyI6ICJvcy1wa2dzIiwKICAgICAgIlR5cGUiOiAiYWxwaW5lIiwKICAgICAgIlBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJJRCI6ICIucHl0aG9uLXJ1bmRlcHNAMjAyNjA5MDEuMDAxMDI5IiwKICAgICAgICAgICJOYW1lIjogIi5weXRob24tcnVuZGVwcyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvLnB5dGhvbi1ydW5kZXBzQDIwMjYwOTAxLjAwMTAyOT9hcmNoPW5vYXJjaFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjRlMjZjOTlmZWNhYzFlOTciCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMjAyNjA5MDEuMDAxMDI5IiwKICAgICAgICAgICJBcmNoIjogIm5vYXJjaCIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiZ2RibUAxLjI2LXIwIiwKICAgICAgICAgICAgImxpYmJ6MkAxLjAuOC1yNiIsCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYmZmaUAzLjUuMi1yMSIsCiAgICAgICAgICAgICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICAgImxpYm5zbEAyLjAuMS1yMiIsCiAgICAgICAgICAgICJsaWJwYW5lbHdANi42X3AyMDI2MDUxNi1yMCIsCiAgICAgICAgICAgICJsaWJzc2wzQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnRpcnBjQDEuMy41LXIxIiwKICAgICAgICAgICAgImxpYnV1aWRAMi40Mi4zLXIxIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiLAogICAgICAgICAgICAicmVhZGxpbmVAOC4zLjMtcjEiLAogICAgICAgICAgICAic3FsaXRlLWxpYnNAMy41My40LXIwIiwKICAgICAgICAgICAgInh6LWxpYnNANS44LjMtcjAiLAogICAgICAgICAgICAiemxpYkAxLjMuMi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo1MWQwYzFlN2Q4OGE0MTQzNDU3OTlmMDMwOTE4NWM2MjUwMTNlZjMyIiwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJhbHBpbmUtYmFzZWxheW91dEAzLjcuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLWJhc2VsYXlvdXRAMy43LjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIxYjljNTQzMzAwZjgwNzNlIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuNy4yLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjcuMi1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImFscGluZS1iYXNlbGF5b3V0LWRhdGFAMy43LjItcjEiLAogICAgICAgICAgICAiYnVzeWJveC1iaW5zaEAxLjM3LjAtcjMxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmYwZmNmZGMyZjRkYTA1OGFmNjQ3M2JjNDVjNGVhYjYyOTE2MjI1YjIiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL21vdGQiLAogICAgICAgICAgICAiZXRjL2Nyb250YWJzL3Jvb3QiLAogICAgICAgICAgICAiZXRjL21vZHByb2JlLmQvYWxpYXNlcy5jb25mIiwKICAgICAgICAgICAgImV0Yy9tb2Rwcm9iZS5kL2JsYWNrbGlzdC5jb25mIiwKICAgICAgICAgICAgImV0Yy9tb2Rwcm9iZS5kL2kzODYuY29uZiIsCiAgICAgICAgICAgICJldGMvcHJvZmlsZS5kLzIwbG9jYWxlLnNoIiwKICAgICAgICAgICAgImV0Yy9wcm9maWxlLmQvUkVBRE1FIiwKICAgICAgICAgICAgImV0Yy9wcm9maWxlLmQvY29sb3JfcHJvbXB0LnNoLmRpc2FibGVkIiwKICAgICAgICAgICAgInVzci9saWIvc3lzY3RsLmQvMDAtYWxwaW5lLmNvbmYiLAogICAgICAgICAgICAidmFyL2xvY2siLAogICAgICAgICAgICAidmFyL3J1biIsCiAgICAgICAgICAgICJ2YXIvc3Bvb2wvbWFpbCIsCiAgICAgICAgICAgICJ2YXIvc3Bvb2wvY3Jvbi9jcm9udGFicyIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYWxwaW5lLWJhc2VsYXlvdXQtZGF0YUAzLjcuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dC1kYXRhIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUtYmFzZWxheW91dC1kYXRhQDMuNy4yLXIxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZmNjM2NkOTAxMjJkOGFhNyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjcuMi1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYWxwaW5lLWJhc2VsYXlvdXQiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy43LjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmM2ZjliZGVkMTdkODQ0YjZmMWIwYmI1NzY2ZDJjMzVjMGQ1Yzg1MDgiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL2ZzdGFiIiwKICAgICAgICAgICAgImV0Yy9ncm91cCIsCiAgICAgICAgICAgICJldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAiZXRjL2hvc3RzIiwKICAgICAgICAgICAgImV0Yy9pbml0dGFiIiwKICAgICAgICAgICAgImV0Yy9tb2R1bGVzIiwKICAgICAgICAgICAgImV0Yy9tdGFiIiwKICAgICAgICAgICAgImV0Yy9uc3N3aXRjaC5jb25mIiwKICAgICAgICAgICAgImV0Yy9wYXNzd2QiLAogICAgICAgICAgICAiZXRjL3Byb2ZpbGUiLAogICAgICAgICAgICAiZXRjL3Byb3RvY29scyIsCiAgICAgICAgICAgICJldGMvc2VydmljZXMiLAogICAgICAgICAgICAiZXRjL3NoYWRvdyIsCiAgICAgICAgICAgICJldGMvc2hlbGxzIiwKICAgICAgICAgICAgImV0Yy9zeXNjdGwuY29uZiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYWxwaW5lLWtleXNAMi42LXIwIiwKICAgICAgICAgICJOYW1lIjogImFscGluZS1rZXlzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUta2V5c0AyLjYtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJjYjFmNmM4ZmE3NDcxM2UwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjIuNi1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYWxwaW5lLWtleXMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMi42LXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpkOGQ2YjgwZTUzYzA1OWE3N2U0OTE1ZGE3OGJhOTY0ZjNmZmVhMjQwIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAiZXRjL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI2MWNlY2IucnNhLnB1YiIsCiAgICAgICAgICAgICJldGMvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTY1ZWU1OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI0M2VmNGIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01MjRkMjdiYi5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNjFjZWNiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTgxOTlkY2MucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01OGNiYjQ3Ni5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTU4ZTRmMTdkLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNWU2OWNhNTAucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MGFjMjA5OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjVlZTU5LnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2NjZlM2YucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhOTcyNC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFiYzIzLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2YWMzYmMucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhZGZlYi5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFlMzUwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2ZGIzMGQucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02NmJhMjBmZS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hYXJjaDY0L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTgxOTlkY2MucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWFyY2g2NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFlMzUwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FybWhmL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI0ZDI3YmIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYXJtaGYvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhOTcyNC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hcm12Ny9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNGQyN2JiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FybXY3L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2YWRmZWIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvbG9vbmdhcmNoNjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02NmJhMjBmZS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9taXBzNjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01ZTY5Y2E1MC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9wcGM2NGxlL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNThjYmI0NzYucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvcHBjNjRsZS9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFiYzIzLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3Jpc2N2NjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MGFjMjA5OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9yaXNjdjY0L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2ZGIzMGQucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvczM5MHgvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01OGU0ZjE3ZC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9zMzkweC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFjM2JjLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNDNlZjRiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjY2ZTNmLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNjFjZWNiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjVlZTU5LnJzYS5wdWIiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImFscGluZS1yZWxlYXNlQDMuMjQuMS1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtcmVsZWFzZSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLXJlbGVhc2VAMy4yNC4xLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNmNmYWQ2ZjM2ZTFmMzFhYSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjI0LjEtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImFscGluZS1iYXNlIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjMuMjQuMS1yMCIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImFscGluZS1rZXlzQDIuNi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpiYzY5MTJhMjVjZGM3NzMzZTAwMzVlZDUwOWVjZWFhNDAyNjk0NmUzIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy9hbHBpbmUtcmVsZWFzZSIsCiAgICAgICAgICAgICJldGMvaXNzdWUiLAogICAgICAgICAgICAiZXRjL29zLXJlbGVhc2UiLAogICAgICAgICAgICAiZXRjL3NlY2ZpeGVzLmQvYWxwaW5lIiwKICAgICAgICAgICAgInVzci9saWIvb3MtcmVsZWFzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYXBrLXRvb2xzQDMuMC42LXIwIiwKICAgICAgICAgICJOYW1lIjogImFway10b29scyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYXBrLXRvb2xzQDMuMC42LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiY2IyNjMzYzg4M2IxN2EwNCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjAuNi1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYXBrLXRvb2xzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjMuMC42LXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkdQTC0yLjAtb25seSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiY2EtY2VydGlmaWNhdGVzLWJ1bmRsZUAyMDI2MDYxMS1yMCIsCiAgICAgICAgICAgICJsaWJhcGtAMy4wLjYtcjAiLAogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIiwKICAgICAgICAgICAgInpsaWJAMS4zLjItcjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MDQzMzMzNTg5Nzk4YTFmNTJlMDlhZTYzZjAyNmM2YzhmYTY3NmQzNCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJzYmluL2FwayIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYnVzeWJveEAxLjM3LjAtcjMxIiwKICAgICAgICAgICJOYW1lIjogImJ1c3lib3giLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2J1c3lib3hAMS4zNy4wLXIzMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjc3MTAyMGM0M2M4NDQwYmYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zNy4wLXIzMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYnVzeWJveCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjM3LjAtcjMxIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkdQTC0yLjAtb25seSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJTw7ZyZW4gVGVtcGVsIFx1MDAzY3NvZXJlbithbHBpbmVAc29lcmVuLXRlbXBlbC5uZXRcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6YjU0MDVlYmMwMmY3ZGQ4YmU5NWI2MjY1YzU0YjI0M2Q1NDU2YWI4ZiIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJiaW4vYnVzeWJveCIsCiAgICAgICAgICAgICJldGMvc2VjdXJldHR5IiwKICAgICAgICAgICAgImV0Yy9idXN5Ym94LXBhdGhzLmQvYnVzeWJveCIsCiAgICAgICAgICAgICJldGMvbG9ncm90YXRlLmQvYWNwaWQiLAogICAgICAgICAgICAiZXRjL25ldHdvcmsvaWYtdXAuZC9kYWQiLAogICAgICAgICAgICAiZXRjL3VkaGNwYy91ZGhjcGMuY29uZiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvdWRoY3BjL2RlZmF1bHQuc2NyaXB0IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJidXN5Ym94LWJpbnNoQDEuMzcuMC1yMzEiLAogICAgICAgICAgIk5hbWUiOiAiYnVzeWJveC1iaW5zaCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYnVzeWJveC1iaW5zaEAxLjM3LjAtcjMxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWVjOGEzZDVkMmI2MzI5NyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjM3LjAtcjMxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJidXN5Ym94IiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMzcuMC1yMzEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIlPDtnJlbiBUZW1wZWwgXHUwMDNjc29lcmVuK2FscGluZUBzb2VyZW4tdGVtcGVsLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiYnVzeWJveEAxLjM3LjAtcjMxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjVjYmQxNGFjYzZmMTgwNGM1YmFjNmM3N2RjMmM0OTJmMDEwYjBmYzciLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiYmluL3NoIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJjYS1jZXJ0aWZpY2F0ZXNAMjAyNjA2MTEtcjAiLAogICAgICAgICAgIk5hbWUiOiAiY2EtY2VydGlmaWNhdGVzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9jYS1jZXJ0aWZpY2F0ZXNAMjAyNjA2MTEtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIyYTNjMzE2ZWU4M2M2MTk4IgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjIwMjYwNjExLXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJjYS1jZXJ0aWZpY2F0ZXMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMjAyNjA2MTEtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTVBMLTIuMCIsCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImJ1c3lib3gtYmluc2hAMS4zNy4wLXIzMSIsCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo0NzM5M2I2NjhjZTUzNWQwNmU4OTY3OTE3ZDQyNGMxNzdlMmVjY2NhZTgzODU2ZDQ4YjJlOTkxNjRmOGNjNmNiIiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OGYyYTA0YWJlYjU0YjMzMWUyOTcwYTBhMGRmZmI3YmQ2YmRkZTU2NyIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvY2EtY2VydGlmaWNhdGVzLmNvbmYiLAogICAgICAgICAgICAiZXRjL2Fway9wcm90ZWN0ZWRfcGF0aHMuZC9jYS1jZXJ0aWZpY2F0ZXMubGlzdCIsCiAgICAgICAgICAgICJldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kL2NlcnRoYXNoIiwKICAgICAgICAgICAgInVzci9iaW4vY19yZWhhc2giLAogICAgICAgICAgICAidXNyL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQUNDVlJBSVoxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQUNfUkFJWl9GTk1ULVJDTS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FDX1JBSVpfRk5NVC1SQ01fU0VSVklET1JFU19TRUdVUk9TLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQU5GX1NlY3VyZV9TZXJ2ZXJfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FjdGFsaXNfQXV0aGVudGljYXRpb25fUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FtYXpvbl9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BbWF6b25fUm9vdF9DQV8yLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQW1hem9uX1Jvb3RfQ0FfMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FtYXpvbl9Sb290X0NBXzQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BdG9zX1RydXN0ZWRSb290XzIwMTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BdG9zX1RydXN0ZWRSb290X1Jvb3RfQ0FfRUNDX1RMU18yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQXRvc19UcnVzdGVkUm9vdF9Sb290X0NBX1JTQV9UTFNfMjAyMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0F1dG9yaWRhZF9kZV9DZXJ0aWZpY2FjaW9uX0Zpcm1hcHJvZmVzaW9uYWxfQ0lGX0E2MjYzNDA2OC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0JKQ0FfR2xvYmFsX1Jvb3RfQ0ExLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQkpDQV9HbG9iYWxfUm9vdF9DQTIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9CdXlwYXNzX0NsYXNzXzJfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0J1eXBhc3NfQ2xhc3NfM19Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ0FfRGlzaWdfUm9vdF9SMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NGQ0FfRVZfUk9PVC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NPTU9ET19FQ0NfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHkuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DT01PRE9fUlNBX0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ2VydGFpbmx5X1Jvb3RfRTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DZXJ0YWlubHlfUm9vdF9SMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnRpZ25hX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DZXJ0dW1fRUMtMzg0X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ2VydHVtX1RydXN0ZWRfTmV0d29ya19DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnR1bV9UcnVzdGVkX05ldHdvcmtfQ0FfMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnR1bV9UcnVzdGVkX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ELVRSVVNUX0JSX1Jvb3RfQ0FfMV8yMDIwLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9CUl9Sb290X0NBXzJfMjAyMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0QtVFJVU1RfRVZfUm9vdF9DQV8xXzIwMjAuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ELVRSVVNUX0VWX1Jvb3RfQ0FfMl8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9Sb290X0NsYXNzXzNfQ0FfMl8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9Sb290X0NsYXNzXzNfQ0FfMl9FVl8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfQXNzdXJlZF9JRF9Sb290X0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfQXNzdXJlZF9JRF9Sb290X0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfR2xvYmFsX1Jvb3RfRzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9EaWdpQ2VydF9HbG9iYWxfUm9vdF9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0RpZ2lDZXJ0X1RMU19FQ0NfUDM4NF9Sb290X0c1LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfVExTX1JTQTQwOTZfUm9vdF9HNS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0RpZ2lDZXJ0X1RydXN0ZWRfUm9vdF9HNC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dEQ0FfVHJ1c3RBVVRIX1I1X1JPT1QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HVFNfUm9vdF9SMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dUU19Sb290X1IzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvR1RTX1Jvb3RfUjQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX0VDQ19Sb290X0NBXy1fUjQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX0VDQ19Sb290X0NBXy1fUjUuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX1Jvb3RfQ0FfLV9SMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dsb2JhbFNpZ25fUm9vdF9DQV8tX1I2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvR2xvYmFsU2lnbl9Sb290X0U0Ni5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dsb2JhbFNpZ25fUm9vdF9SNDYuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9Hb19EYWRkeV9Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8tX0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSEFSSUNBX1RMU19FQ0NfUm9vdF9DQV8yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSEFSSUNBX1RMU19SU0FfUm9vdF9DQV8yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSGVsbGVuaWNfQWNhZGVtaWNfYW5kX1Jlc2VhcmNoX0luc3RpdHV0aW9uc19FQ0NfUm9vdENBXzIwMTUuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9IZWxsZW5pY19BY2FkZW1pY19hbmRfUmVzZWFyY2hfSW5zdGl0dXRpb25zX1Jvb3RDQV8yMDE1LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSGlQS0lfUm9vdF9DQV8tX0cxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSG9uZ2tvbmdfUG9zdF9Sb290X0NBXzMuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JU1JHX1Jvb3RfWDEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JU1JHX1Jvb3RfWDIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JZGVuVHJ1c3RfQ29tbWVyY2lhbF9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JZGVuVHJ1c3RfUHVibGljX1NlY3Rvcl9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JemVucGUuY29tLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zZWNfZS1Temlnbm9fUm9vdF9DQV8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zb2Z0X0VDQ19Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8yMDE3LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zb2Z0X1JTQV9Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8yMDE3LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTkFWRVJfR2xvYmFsX1Jvb3RfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHkuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9OZXRMb2NrX0FyYW55Xz1DbGFzc19Hb2xkPV9GxZF0YW7DunPDrXR2w6FueS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1NlcnZlcl9Sb290X0VDQ19HMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1NlcnZlcl9Sb290X1JTQV9HMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1dJU2VLZXlfR2xvYmFsX1Jvb3RfR0JfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9PSVNURV9XSVNlS2V5X0dsb2JhbF9Sb290X0dDX0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8xX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8yX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8zX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1NMLmNvbV9FVl9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5X0VDQy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NTTC5jb21fRVZfUm9vdF9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eV9SU0FfUjIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TU0wuY29tX1Jvb3RfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHlfRUNDLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1NMLmNvbV9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5X1JTQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NTTC5jb21fVExTX0VDQ19Sb290X0NBXzIwMjIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TU0wuY29tX1RMU19SU0FfUm9vdF9DQV8yMDIyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1pBRklSX1JPT1RfQ0EyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdGlnb19QdWJsaWNfU2VydmVyX0F1dGhlbnRpY2F0aW9uX1Jvb3RfRTQ2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdGlnb19QdWJsaWNfU2VydmVyX0F1dGhlbnRpY2F0aW9uX1Jvb3RfUjQ2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdXJlU2lnbl9Sb290X0NBMTQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TZWN1cmVTaWduX1Jvb3RfQ0ExNS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NlY3VyaXR5X0NvbW11bmljYXRpb25fRUNDX1Jvb3RDQTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TZWN1cml0eV9Db21tdW5pY2F0aW9uX1Jvb3RDQTIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TdGFyZmllbGRfUm9vdF9DZXJ0aWZpY2F0ZV9BdXRob3JpdHlfLV9HMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1N0YXJmaWVsZF9TZXJ2aWNlc19Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8tX0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU3dpc3NTaWduX1JTQV9UTFNfUm9vdF9DQV8yMDIyXy1fMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1QtVGVsZVNlY19HbG9iYWxSb290X0NsYXNzXzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ULVRlbGVTZWNfR2xvYmFsUm9vdF9DbGFzc18zLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFVCSVRBS19LYW11X1NNX1NTTF9Lb2tfU2VydGlmaWthc2lfLV9TdXJ1bV8xLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFdDQV9DWUJFUl9Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFdDQV9HbG9iYWxfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RXQ0FfUm9vdF9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RlbGVrb21fU2VjdXJpdHlfVExTX0VDQ19Sb290XzIwMjAuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9UZWxla29tX1NlY3VyaXR5X1RMU19SU0FfUm9vdF8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVGVsaWFfUm9vdF9DQV92Mi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9HbG9iYWxfUm9vdF9DQV9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9HbG9iYWxfUm9vdF9DQV9HNC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9UTFNfRUNDX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9UcnVzdEFzaWFfVExTX1JTQV9Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVHVuVHJ1c3RfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1VDQV9FeHRlbmRlZF9WYWxpZGF0aW9uX1Jvb3QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9VQ0FfR2xvYmFsX0cyX1Jvb3QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9VU0VSVHJ1c3RfRUNDX0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVVNFUlRydXN0X1JTQV9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL2NlcnRTSUdOX1Jvb3RfQ0FfRzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lLVN6aWdub19Sb290X0NBXzIwMTcuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lLVN6aWdub19UTFNfUm9vdF9DQV8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvZVBLSV9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvZW1TaWduX0VDQ19Sb290X0NBXy1fQzMuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lbVNpZ25fRUNDX1Jvb3RfQ0FfLV9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL2VtU2lnbl9Sb290X0NBXy1fQzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lbVNpZ25fUm9vdF9DQV8tX0cxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvdlRydXNfRUNDX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS92VHJ1c19Sb290X0NBLmNydCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiY2EtY2VydGlmaWNhdGVzLWJ1bmRsZUAyMDI2MDYxMS1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJjYS1jZXJ0aWZpY2F0ZXMtYnVuZGxlIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9jYS1jZXJ0aWZpY2F0ZXMtYnVuZGxlQDIwMjYwNjExLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMjAzMzdjMmVhMjhiZWYyOCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyMDI2MDYxMS1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiY2EtY2VydGlmaWNhdGVzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIwMjYwNjExLXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1QTC0yLjAiLAogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmM5NTM0YTAzNzUwYmRmYWUzNDFmMTA5NjkwMTYwOTBmYzExZmViYmQiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL3NzbC9jZXJ0LnBlbSIsCiAgICAgICAgICAgICJldGMvc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiLAogICAgICAgICAgICAiZXRjL3NzbDEuMS9jZXJ0LnBlbSIsCiAgICAgICAgICAgICJldGMvc3NsMS4xL2NlcnRzIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJnZGJtQDEuMjYtcjAiLAogICAgICAgICAgIk5hbWUiOiAiZ2RibSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvZ2RibUAxLjI2LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNWViMWEzZjg2MjYyY2E3NyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjI2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJnZGJtIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMjYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTMuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo2MTk0OTNkODEyNGZlNDlhOGVlMWQ4ZjdhMTM3MmNmN2UzOTc3MzM3IiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliZ2RibS5zby42IiwKICAgICAgICAgICAgInVzci9saWIvbGliZ2RibS5zby42LjAuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdkYm1fY29tcGF0LnNvLjQiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnZGJtX2NvbXBhdC5zby40LjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAia2V5dXRpbHMtbGlic0AxLjYuMy1yNCIsCiAgICAgICAgICAiTmFtZSI6ICJrZXl1dGlscy1saWJzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9rZXl1dGlscy1saWJzQDEuNi4zLXI0P2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiYTFhMjkxMjBlYjM0MjAzMiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjYuMy1yNCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAia2V5dXRpbHMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS42LjMtcjQiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJMR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpiNzMzMWM5NmYwNzdmYzM1MjJlZTQzNjFhNDQxZDEwOTcyMDRjZDkwIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlia2V5dXRpbHMuc28uMSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtleXV0aWxzLnNvLjEuMTAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImtyYjUtY29uZkAxLjAtcjIiLAogICAgICAgICAgIk5hbWUiOiAia3JiNS1jb25mIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9rcmI1LWNvbmZAMS4wLXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZTdjZjk0YmE4YjZkYmMzMyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjAtcjIiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImtyYjUtY29uZiIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjAtcjIiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjQwYTExZTA2OTBhNTllMTEwMzY3YjYyYTgwNjYxMDI0ZTk5NDJhMmQiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL2tyYjUuY29uZiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAia3JiNS1saWJzQDEuMjIuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJrcmI1LWxpYnMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2tyYjUtbGlic0AxLjIyLjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICI5NThmOGI0YTRmMDg3ZGFjIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMjIuMi1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAia3JiNSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjIyLjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJrZXl1dGlscy1saWJzQDEuNi4zLXI0IiwKICAgICAgICAgICAgImtyYjUtY29uZkAxLjAtcjIiLAogICAgICAgICAgICAibGliY29tX2VyckAxLjQ3LjQtcjAiLAogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJsaWJzc2wzQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnZlcnRvQDAuMy4yLXIyIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6ZWYwMjM0NmUyMWI4MTdmZjM3OWU0NjAxZTViMWZjOTc2MGU1ZTMxYSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdzc2FwaV9rcmI1LnNvLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnc3NhcGlfa3JiNS5zby4yLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnc3NycGMuc28uNCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdzc3JwYy5zby40LjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJrNWNyeXB0by5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvbGliazVjcnlwdG8uc28uMy4xIiwKICAgICAgICAgICAgInVzci9saWIvbGlia2FkbTVjbG50X21pdC5zby4xMiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01Y2xudF9taXQuc28uMTIuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01c3J2X21pdC5zby4xMiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01c3J2X21pdC5zby4xMi4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia2RiNS5zby4xMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtkYjUuc28uMTAuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtyYWQuc28uMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtyYWQuc28uMC4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNS5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNS5zby4zLjMiLAogICAgICAgICAgICAidXNyL2xpYi9saWJrcmI1c3VwcG9ydC5zby4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNXN1cHBvcnQuc28uMC4xIiwKICAgICAgICAgICAgInVzci9saWIva3JiNS9wbHVnaW5zL2tkYi9kYjIuc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvcHJlYXV0aC9vdHAuc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvcHJlYXV0aC9zcGFrZS5zbyIsCiAgICAgICAgICAgICJ1c3IvbGliL2tyYjUvcGx1Z2lucy9wcmVhdXRoL3Rlc3Quc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvdGxzL2s1dGxzLnNvIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJhcGtAMy4wLjYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGliYXBrIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJhcGtAMy4wLjYtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJhMzViOGI5YjMyMTk1MTNhIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuMC42LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJhcGstdG9vbHMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy4wLjYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJ6bGliQDEuMy4yLXIwIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjUyM2E4ZjU4MTA0NTg5Zjc0Zjc0M2Q1MDFjODFiZjY1MTcxNTUzNzgiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJhcGsuc28uMy4wLjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYmJ6MkAxLjAuOC1yNiIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJiejIiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYmJ6MkAxLjAuOC1yNj9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjQ4ZTE3NTM5NDA0ZTJkNTYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4wLjgtcjYiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImJ6aXAyIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMC44LXI2IiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgImJ6aXAtMi0xLjAuNiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTowODU2NmJhNWM3YWY5N2MyNTQ3NGJlOGIyNGU4YjQ4ZjAxMTZiNjdkIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliYnoyLnNvLjEiLAogICAgICAgICAgICAidXNyL2xpYi9saWJiejIuc28uMS4wLjgiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYmNvbV9lcnJAMS40Ny40LXIwIiwKICAgICAgICAgICJOYW1lIjogImxpYmNvbV9lcnIiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYmNvbV9lcnJAMS40Ny40LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiM2ZjMzVhM2Y2NmQxOTJhZiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjQ3LjQtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImUyZnNwcm9ncyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjQ3LjQtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJMR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiLAogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjRiOWZiNTg5OWVhMGIxYzBjZmJiMmEyYzU5NTI3MDQ0MzdkNGVjZWYiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJjb21fZXJyLnNvLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJjb21fZXJyLnNvLjIuMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJjcnlwdG8zIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJjcnlwdG8zQDMuNS44LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNDI5OWJiYTJiYTljOTZhYSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjUuOC1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAib3BlbnNzbCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjUuOC1yMCIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJBcGFjaGUtMi4wIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjFiM2I5ZmMwYzEzNmY0OTM2OTMyYmNiMmVjMjE0OTlmMGFlNWRmZDMiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL3NzbC9jdF9sb2dfbGlzdC5jbmYiLAogICAgICAgICAgICAiZXRjL3NzbC9jdF9sb2dfbGlzdC5jbmYuZGlzdCIsCiAgICAgICAgICAgICJldGMvc3NsL29wZW5zc2wuY25mIiwKICAgICAgICAgICAgImV0Yy9zc2wvb3BlbnNzbC5jbmYuZGlzdCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmNyeXB0by5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL2FmYWxnLnNvIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL2NhcGkuc28iLAogICAgICAgICAgICAidXNyL2xpYi9lbmdpbmVzLTMvbG9hZGVyX2F0dGljLnNvIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL3BhZGxvY2suc28iLAogICAgICAgICAgICAidXNyL2xpYi9vc3NsLW1vZHVsZXMvbGVnYWN5LnNvIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJmZmlAMy41LjItcjEiLAogICAgICAgICAgIk5hbWUiOiAibGliZmZpIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJmZmlAMy41LjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkM2VhYTkyMTI4N2IxY2NkIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuNS4yLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJsaWJmZmkiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy41LjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjJmN2IyNjFmN2ZjZWNjNGVlYmQ4YjMzMGU3ZjZmYjgwNzEzYmZlM2EiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJmZmkuc28uOCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmZmaS5zby44LjIuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGliaW50bEAxLjAtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGliaW50bCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGliaW50bEAxLjAtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIyNWMxODgwOGQ4ZmM4N2UwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMC1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiZ2V0dGV4dCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjAtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTEdQTC0yLjEtb3ItbGF0ZXIiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiQ2FybG8gTGFuZG1ldGVyIFx1MDAzY2NsYW5kbWV0ZXJAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjI4MmQ2NjQyY2NhYzg3MjM3ZTQzYTg2NDE1OWQ3M2NmNWFiZTc1NTAiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJpbnRsLnNvLjgiLAogICAgICAgICAgICAidXNyL2xpYi9saWJpbnRsLnNvLjguNC42IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJOYW1lIjogImxpYm5jdXJzZXN3IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZTg5MzlmNDVlMjE5MWJjYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJuY3Vyc2VzLXRlcm1pbmZvLWJhc2VANi42X3AyMDI2MDUxNi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo5ZjMxOGU2ZTMyNGQ2ODI3Mjc0ODI5MTk0Y2Y2YWM2YWZiYWRlZDEyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlibmN1cnNlc3cuc28uNiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYm5jdXJzZXN3LnNvLjYuNiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlibnNsQDIuMC4xLXIyIiwKICAgICAgICAgICJOYW1lIjogImxpYm5zbCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGlibnNsQDIuMC4xLXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiM2Q4OTNjNjBkNDFkYTY3YiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyLjAuMS1yMiIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibGlibnNsIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIuMC4xLXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkxHUEwtMi4wLW9yLWxhdGVyIgogICAgICAgICAgXSwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJpbnRsQDEuMC1yMCIsCiAgICAgICAgICAgICJsaWJ0aXJwY0AxLjMuNS1yMSIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjUxOTRhZGJmMjY1NjBiNTJiZTMxODQ4MWE3YWYyOTRhYjA1ZmQ3OTUiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJuc2wuc28uMyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYm5zbC5zby4zLjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlicGFuZWx3QDYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGlicGFuZWx3IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJwYW5lbHdANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImVmMWFkOWJiMjU2YjM3MyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibGlibmN1cnNlc3dANi42X3AyMDI2MDUxNi1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIiwKICAgICAgICAgICAgIm5jdXJzZXMtdGVybWluZm8tYmFzZUA2LjZfcDIwMjYwNTE2LXIwIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjE0OWJkYzQzNDIzMmVkMTFmYzViYjk3NWJhNTE5YTA3MTU0YTZmNTYiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJwYW5lbHcuc28uNiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnBhbmVsdy5zby42LjYiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGlic3NsMyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGlic3NsM0AzLjUuOC1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImYyOTBhYjU5Yjg4YjFjNGEiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMy41LjgtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogIm9wZW5zc2wiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy41LjgtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQXBhY2hlLTIuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjVmOWIxZTU1ZDgyMTk1M2QyZTJiMWRiMzIyZGFkNzBhM2I1MDQxZWEiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJzc2wuc28uMyIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlidGlycGNAMS4zLjUtcjEiLAogICAgICAgICAgIk5hbWUiOiAibGlidGlycGMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjQDEuMy41LXIxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNDcxYzhkOTU1Y2EwM2JlNSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjMuNS1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibGlidGlycGMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zLjUtcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJrcmI1LWxpYnNAMS4yMi4yLXIxIiwKICAgICAgICAgICAgImxpYnRpcnBjLWNvbmZAMS4zLjUtcjEiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpjMzI4NjViZDg2YThiODgyOWQxNTIyNzljYWJiYzVhYzZkNDMwZWIyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlidGlycGMuc28uMyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnRpcnBjLnNvLjMuMC4wIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJ0aXJwYy1jb25mQDEuMy41LXIxIiwKICAgICAgICAgICJOYW1lIjogImxpYnRpcnBjLWNvbmYiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjLWNvbmZAMS4zLjUtcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIzNDM3MzkyYzE0YWFkMzNmIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMy41LXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJsaWJ0aXJwYyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjMuNS1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MGMxN2Q5OTg4ZGM5ODZjOTBlMjJmNzk3NzhkZjA0N2VjYTk5NzNmZiIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvYmluZHJlc3Zwb3J0LmJsYWNrbGlzdCIsCiAgICAgICAgICAgICJldGMvbmV0Y29uZmlnIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJ1dWlkQDIuNDIuMy1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJ1dWlkIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJ1dWlkQDIuNDIuMy1yMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImM0NDRlOWNkZDFiZGRhNDAiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi40Mi4zLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJ1dGlsLWxpbnV4IiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIuNDIuMy1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjpmMGZlM2UwOGFiMDQ2YzBjNWUyOWQzNGVlNzNiYzhjN2UwMzM5OGViODkxZTQ0OThlMGE2NzA4OGE1ZWEzZTg2IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZjliNGE4YTQxMmEwYzA3YTQ4OWU0NmZiNWRiNDFmOWQwZGM4NGQ0ZWMzOGE0ZTJjNmFiOTUzMWY0NGUwZDlmMSIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OGYwNDFlZjYzN2FkNzVmMzgxY2MwYzAzNGYyYWZiYmIwMzAzMjY0ZSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnV1aWQuc28uMSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnV1aWQuc28uMS4zLjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYnZlcnRvQDAuMy4yLXIyIiwKICAgICAgICAgICJOYW1lIjogImxpYnZlcnRvIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJ2ZXJ0b0AwLjMuMi1yMj9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjlkZjQzMjFhMjgzYTZjZjYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMC4zLjItcjIiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImxpYnZlcnRvIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjAuMy4yLXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJGcmFuY2VzY28gQ29saXN0YSBcdTAwM2NmY29saXN0YUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NzMyMzMwNTkzMzgxNDJlNGFjNmQ4ZmI4YmIwMDc0ZTkzZGE3NWRjMSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnZlcnRvLnNvLjEiLAogICAgICAgICAgICAidXNyL2xpYi9saWJ2ZXJ0by5zby4xLjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAiTmFtZSI6ICJtdXNsIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWY4Y2I0NGJlZmU1MDNkNCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjIuNi1yMiIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibXVzbCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjIuNi1yMiIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MGY3ZTU4MjdlNGUxYTczNjMxYmVkYTI3Yjc4NDMxYThiYTI0MGUwNSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJsaWIvbGQtbXVzbC14ODZfNjQuc28uMSIsCiAgICAgICAgICAgICJsaWIvbGliYy5tdXNsLXg4Nl82NC5zby4xIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJtdXNsLXV0aWxzQDEuMi42LXIyIiwKICAgICAgICAgICJOYW1lIjogIm11c2wtdXRpbHMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL211c2wtdXRpbHNAMS4yLjYtcjI/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICI0NDk3NDgyZWMxZDk0M2UxIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMi42LXIyIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJtdXNsIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMi42LXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIsCiAgICAgICAgICAgICJCU0QtMi1DbGF1c2UiLAogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJzY2FuZWxmQDEuMy45LXIxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjc1YWRhM2M0OGQ2M2VjNWQ4N2M0MmZkZjkzNGEzZmRkMTEyOThkYzUiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAic2Jpbi9sZGNvbmZpZyIsCiAgICAgICAgICAgICJ1c3IvYmluL2dldGNvbmYiLAogICAgICAgICAgICAidXNyL2Jpbi9nZXRlbnQiLAogICAgICAgICAgICAidXNyL2Jpbi9pY29udiIsCiAgICAgICAgICAgICJ1c3IvYmluL2xkZCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibmN1cnNlcy10ZXJtaW5mby1iYXNlQDYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibmN1cnNlcy10ZXJtaW5mby1iYXNlIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9uY3Vyc2VzLXRlcm1pbmZvLWJhc2VANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImU3ZmFjNWM2YTZlOWFlOCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo5ZDU1MWQ4MjhlOWM4ZWU1MmM1ODAxYzFkNjA0NjgyOGViZjE1NzUyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9hL2FsYWNyaXR0eSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vYS9hbnNpIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9kL2R1bWIiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2cvZ25vbWUiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2cvZ25vbWUtMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2sva29uc29sZSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vay9rb25zb2xlLTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9rL2tvbnNvbGUtbGludXgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2wvbGludXgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3AvcHV0dHkiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3AvcHV0dHktMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Ivcnh2dCIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vci9yeHZ0LTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9zL3NjcmVlbiIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zY3JlZW4tMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMC42IiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9zL3N0LTAuNyIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC0wLjgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMC44LjUiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC1kaXJlY3QiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3VuIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby90L3Rlcm1pbmF0b3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3kiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMC42LjEiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMS4wLjAiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMS44LjEiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdG11eCIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vdC90bXV4LTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MTAwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MTAyIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MjAwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MjIwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0NTIiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3YvdnRlIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0ZS0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS1jb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS14ZnJlZTg2IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJyZWFkbGluZUA4LjMuMy1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJyZWFkbGluZSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvcmVhZGxpbmVAOC4zLjMtcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJmNTAwNTg3ODFjOTNlMWYyIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjguMy4zLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJyZWFkbGluZSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICI4LjMuMy1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMy4wLW9yLWxhdGVyIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogInFhcWxhbmQgXHUwMDNjcWFxQHFhcS5sYW5kXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OTQ1YjE2ZTM3OGJjMDBlNDRkODlkNGRlODEyNGJiYTc2NDdmZGY0ZCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvaW5wdXRyYyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnJlYWRsaW5lLnNvLjgiLAogICAgICAgICAgICAidXNyL2xpYi9saWJyZWFkbGluZS5zby44LjMiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNjYW5lbGZAMS4zLjktcjEiLAogICAgICAgICAgIk5hbWUiOiAic2NhbmVsZiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvc2NhbmVsZkAxLjMuOS1yMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjkzNjM5NDY1N2ExNjI2ZmIiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zLjktcjEiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInBheC11dGlscyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjMuOS1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MDEzZjkwM2QwYmEyMTk2NzNhZWJiZGQwNGY3NGJiNWVkODJiMDFmMCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvYmluL3NjYW5lbGYiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNxbGl0ZS1saWJzQDMuNTMuNC1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJzcWxpdGUtbGlicyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvc3FsaXRlLWxpYnNAMy41My40LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiOGIxMGFlZTJjY2MxOTJkZSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjUzLjQtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInNxbGl0ZSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjUzLjQtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiYmxlc3NpbmciCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiSmluZ3l1biBIdWEgXHUwMDNjaHVhamluZ3l1bkBsb29uZ3Nvbi5jblx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpmNzYzMGNlYjM3YzIzMmI2NjA5ODYxYWVhYjZjZGI5Y2QxMjBlNmZhIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlic3FsaXRlMy5zby4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlic3FsaXRlMy5zby4zLjUzLjQiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNzbF9jbGllbnRAMS4zNy4wLXIzMSIsCiAgICAgICAgICAiTmFtZSI6ICJzc2xfY2xpZW50IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9zc2xfY2xpZW50QDEuMzcuMC1yMzE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkNDJlMzFmMTVhNGNlNDdhIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMzcuMC1yMzEiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImJ1c3lib3giLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zNy4wLXIzMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiU8O2cmVuIFRlbXBlbCBcdTAwM2Nzb2VyZW4rYWxwaW5lQHNvZXJlbi10ZW1wZWwubmV0XHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpjMjIwZjRhNTEyNWEzMTNhZjczM2U5OGRlZjk0MTMyYmIxZTlkNDBkIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9iaW4vc3NsX2NsaWVudCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAidHpkYXRhQDIwMjZjLXIwIiwKICAgICAgICAgICJOYW1lIjogInR6ZGF0YSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvdHpkYXRhQDIwMjZjLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNTJjNmI1MGVmZjYyOWY5ZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyMDI2Yy1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAidHpkYXRhIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIwMjZjLXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIlB1YmxpYy1Eb21haW4iCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo0NzM5M2I2NjhjZTUzNWQwNmU4OTY3OTE3ZDQyNGMxNzdlMmVjY2NhZTgzODU2ZDQ4YjJlOTkxNjRmOGNjNmNiIiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NjFmNzU0NGVjZDhkZDYzZWFjMjNmZTNlNjQ1NzAyZmRhOTJlZjAyYSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ0VUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DU1Q2Q0RUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DdWJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FRVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0VTVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRVNUNUVEVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRWd5cHQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0VpcmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0ZhY3RvcnkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0dCIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HQi1FaXJlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HTVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0dNVCswIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HTVQtMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vR01UMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vR3JlZW53aWNoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9IU1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0hvbmdrb25nIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9JY2VsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9JcmFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Jc3JhZWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0phbWFpY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0phcGFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Ld2FqYWxlaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0xpYnlhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NRVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL01TVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTVNUN01EVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTloiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL05aLUNIQVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL05hdmFqbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUFJDIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QU1Q4UERUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Qb2xhbmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BvcnR1Z2FsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9ST0MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1JPSyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vU2luZ2Fwb3JlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9UdXJrZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VDVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVRDIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Vbml2ZXJzYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1ctU1UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1dFVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vWnVsdSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vaXNvMzE2Ni50YWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL2xlYXAtc2Vjb25kcy5saXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9wb3NpeHJ1bGVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby96b25lLnRhYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vem9uZTE5NzAudGFiIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQWJpZGphbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0FjY3JhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQWRkaXNfQWJhYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9BbGdpZXJzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQXNtYXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQXNtZXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFtYWtvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFuZ3VpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFuanVsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmlzc2F1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmxhbnR5cmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9CcmF6emF2aWxsZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0J1anVtYnVyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0NhaXJvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQ2FzYWJsYW5jYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0NldXRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQ29uYWtyeSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0Rha2FyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRGFyX2VzX1NhbGFhbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0RqaWJvdXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRG91YWxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRWxfQWFpdW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9GcmVldG93biIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0dhYm9yb25lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSGFyYXJlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSm9oYW5uZXNidXJnIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSnViYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0thbXBhbGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9LaGFydG91bSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0tpZ2FsaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0tpbnNoYXNhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9MaWJyZXZpbGxlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTG9tZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0x1YW5kYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0x1YnVtYmFzaGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9MdXNha2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYWxhYm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYXB1dG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYXNlcnUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYmFiYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTW9nYWRpc2h1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTW9ucm92aWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9OYWlyb2JpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTmRqYW1lbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9OaWFtZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9Ob3Vha2Nob3R0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvT3VhZ2Fkb3Vnb3UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9Qb3J0by1Ob3ZvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvU2FvX1RvbWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9UaW1idWt0dSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL1RyaXBvbGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9UdW5pcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL1dpbmRob2VrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FkYWsiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQW5jaG9yYWdlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FuZ3VpbGxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FudGlndWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJhZ3VhaW5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FydWJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FzdW5jaW9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0F0aWtva2FuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0F0a2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFoaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFoaWFfQmFuZGVyYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFyYmFkb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmVsZW0iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmVsaXplIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0JsYW5jLVNhYmxvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Cb2FfVmlzdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQm9nb3RhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0JvaXNlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0J1ZW5vc19BaXJlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYW1icmlkZ2VfQmF5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0NhbXBvX0dyYW5kZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYW5jdW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2FyYWNhcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYXRhbWFyY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2F5ZW5uZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYXltYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2hpY2FnbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DaGlodWFodWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2l1ZGFkX0p1YXJleiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Db3JhbF9IYXJib3VyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0NvcmRvYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ29zdGFfUmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Db3loYWlxdWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ3Jlc3RvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DdWlhYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ3VyYWNhbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9EYW5tYXJrc2hhdm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvRGF3c29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0Rhd3Nvbl9DcmVlayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9EZW52ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvRGV0cm9pdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Eb21pbmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FZG1vbnRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FaXJ1bmVwZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FbF9TYWx2YWRvciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FbnNlbmFkYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Gb3J0X05lbHNvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Gb3J0X1dheW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0ZvcnRhbGV6YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HbGFjZV9CYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR29kdGhhYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Hb29zZV9CYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR3JhbmRfVHVyayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HcmVuYWRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0d1YWRlbG91cGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR3VhdGVtYWxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0d1YXlhcXVpbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HdXlhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSGFsaWZheCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9IYXZhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSGVybW9zaWxsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9JbmRpYW5hcG9saXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW51dmlrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0lxYWx1aXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSmFtYWljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9KdWp1eSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9KdW5lYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvS25veF9JTiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9LcmFsZW5kaWprIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xhX1BheiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9MaW1hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xvdWlzdmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTG93ZXJfUHJpbmNlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYWNlaW8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWFuYWd1YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYW5hdXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWFyaWdvdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYXJ0aW5pcXVlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01hdGFtb3JvcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYXphdGxhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZW5kb3phIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01lbm9taW5lZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZXJpZGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWV0bGFrYXRsYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZXhpY29fQ2l0eSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NaXF1ZWxvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Nb25jdG9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRlcnJleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Nb250ZXZpZGVvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRyZWFsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRzZXJyYXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTmFzc2F1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05ld19Zb3JrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05pcGlnb24iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTm9tZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ob3JvbmhhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL051dWsiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvT2ppbmFnYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QYW5hbWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUGFuZ25pcnR1bmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUGFyYW1hcmlibyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QaG9lbml4IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1BvcnQtYXUtUHJpbmNlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1BvcnRfb2ZfU3BhaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUG9ydG9fQWNyZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Qb3J0b19WZWxobyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QdWVydG9fUmljbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QdW50YV9BcmVuYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmFpbnlfUml2ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmFua2luX0lubGV0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1JlY2lmZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9SZWdpbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmVzb2x1dGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmlvX0JyYW5jbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Sb3NhcmlvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1NhbnRhX0lzYWJlbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50YXJlbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50aWFnbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50b19Eb21pbmdvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1Nhb19QYXVsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TY29yZXNieXN1bmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU2hpcHJvY2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU2l0a2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU3RfQmFydGhlbGVteSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9Kb2hucyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9LaXR0cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9MdWNpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9UaG9tYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU3RfVmluY2VudCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Td2lmdF9DdXJyZW50IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RlZ3VjaWdhbHBhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RodWxlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RodW5kZXJfQmF5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RpanVhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvVG9yb250byIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ub3J0b2xhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1ZhbmNvdXZlciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9WaXJnaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvV2hpdGVob3JzZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9XaW5uaXBlZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9ZYWt1dGF0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1llbGxvd2tuaWZlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0NhdGFtYXJjYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvQ29tb2RSaXZhZGF2aWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0p1anV5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9MYV9SaW9qYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvTWVuZG96YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvUmlvX0dhbGxlZ29zIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9TYWx0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvU2FuX0p1YW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9UdWN1bWFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9Vc2h1YWlhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvS25veCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9JbmRpYW5hL01hcmVuZ28iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9QZXRlcnNidXJnIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvVGVsbF9DaXR5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvVmV2YXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9XaW5hbWFjIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvS2VudHVja3kvTW9udGljZWxsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ob3J0aF9EYWtvdGEvQmV1bGFoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTm9ydGhfRGFrb3RhL05ld19TYWxlbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9DYXNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9EYXZpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9NYWNxdWFyaWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvTWF3c29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbnRhcmN0aWNhL01jTXVyZG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvUGFsbWVyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbnRhcmN0aWNhL1JvdGhlcmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvU291dGhfUG9sZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9TeW93YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9Ucm9sbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9Wb3N0b2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FyY3RpYy9Mb25neWVhcmJ5ZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQWRlbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9BbG1hdHkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQW1tYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQW5hZHlyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0FxdGF1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0FxdG9iZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Bc2hnYWJhdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Bc2hraGFiYWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQXR5cmF1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0JhZ2hkYWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmFocmFpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CYWt1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0Jhbmdrb2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmFybmF1bCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CZWlydXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmlzaGtlayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CcnVuZWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2FsY3V0dGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2hpdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2hvaWJhbHNhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9DaG9uZ3FpbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2h1bmdraW5nIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0NvbG9tYm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGFjY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGFtYXNjdXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGhha2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGlsaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9EdWJhaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9EdXNoYW5iZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9GYW1hZ3VzdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvR2F6YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9IYXJiaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSGVicm9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0hvX0NoaV9NaW5oIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0hvbmdfS29uZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Ib3ZkIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0lya3V0c2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSXN0YW5idWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSmFrYXJ0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9KYXlhcHVyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9KZXJ1c2FsZW0iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FidWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FtY2hhdGthIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0thcmFjaGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FzaGdhciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LYXRobWFuZHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2F0bWFuZHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2hhbmR5Z2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS29sa2F0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LcmFzbm95YXJzayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LdWFsYV9MdW1wdXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS3VjaGluZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LdXdhaXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFjYW8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFjYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFnYWRhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9NYWthc3NhciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9NYW5pbGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTXVzY2F0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL05pY29zaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTm92b2t1em5ldHNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL05vdm9zaWJpcnNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL09tc2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvT3JhbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9QaG5vbV9QZW5oIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1BvbnRpYW5hayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9QeW9uZ3lhbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUWF0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUW9zdGFuYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUXl6eWxvcmRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Jhbmdvb24iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUml5YWRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1NhaWdvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9TYWtoYWxpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9TYW1hcmthbmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2VvdWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2hhbmdoYWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2luZ2Fwb3JlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1NyZWRuZWtvbHltc2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVGFpcGVpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Rhc2hrZW50IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RiaWxpc2kiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVGVocmFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RlbF9Bdml2IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RoaW1idSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9UaGltcGh1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Rva3lvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RvbXNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1VqdW5nX1BhbmRhbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVWxhYW5iYWF0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVWxhbl9CYXRvciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9VcnVtcWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVXN0LU5lcmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVmllbnRpYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1ZsYWRpdm9zdG9rIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1lha3V0c2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvWWFuZ29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1lla2F0ZXJpbmJ1cmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvWWVyZXZhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvQXpvcmVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9CZXJtdWRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9DYW5hcnkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0NhcGVfVmVyZGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0ZhZXJvZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvRmFyb2UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0phbl9NYXllbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvTWFkZWlyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvUmV5a2phdmlrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9Tb3V0aF9HZW9yZ2lhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9TdF9IZWxlbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL1N0YW5sZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9BQ1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9BZGVsYWlkZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0JyaXNiYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvQnJva2VuX0hpbGwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9DYW5iZXJyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0N1cnJpZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0RhcndpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0V1Y2xhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvSG9iYXJ0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvTEhJIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvTGluZGVtYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9Mb3JkX0hvd2UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9NZWxib3VybmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9OU1ciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9Ob3J0aCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1BlcnRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvUXVlZW5zbGFuZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1NvdXRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvU3lkbmV5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvVGFzbWFuaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9WaWN0b3JpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1dlc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9ZYW5jb3dpbm5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9CcmF6aWwvQWNyZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQnJhemlsL0RlTm9yb25oYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQnJhemlsL0Vhc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0JyYXppbC9XZXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvQXRsYW50aWMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0NhbmFkYS9DZW50cmFsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvRWFzdGVybiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL01vdW50YWluIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvTmV3Zm91bmRsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvUGFjaWZpYyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL1Nhc2thdGNoZXdhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL1l1a29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DaGlsZS9Db250aW5lbnRhbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2hpbGUvRWFzdGVySXNsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrMSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrNCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCs1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzYiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrNyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCs4IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC0xIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEwIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTExIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTE0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtMyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC00IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtNiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC03IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTgiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtOSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVDAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HcmVlbndpY2giLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9VQ1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9VVEMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9Vbml2ZXJzYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9adWx1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQW1zdGVyZGFtIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQW5kb3JyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0FzdHJha2hhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0F0aGVucyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JlbGZhc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9CZWxncmFkZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JlcmxpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JyYXRpc2xhdmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9CcnVzc2VscyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0J1Y2hhcmVzdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0J1ZGFwZXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQnVzaW5nZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9DaGlzaW5hdSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0NvcGVuaGFnZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9EdWJsaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9HaWJyYWx0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9HdWVybnNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0hlbHNpbmtpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvSXNsZV9vZl9NYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Jc3RhbmJ1bCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0plcnNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0thbGluaW5ncmFkIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvS2lldiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0tpcm92IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvS3lpdiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xpc2JvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xqdWJsamFuYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xvbmRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0x1eGVtYm91cmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9NYWRyaWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9NYWx0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL01hcmllaGFtbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL01pbnNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTW9uYWNvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTW9zY293IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTmljb3NpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL09zbG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9QYXJpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1BvZGdvcmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1ByYWd1ZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1JpZ2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Sb21lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FtYXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FuX01hcmlubyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1NhcmFqZXZvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FyYXRvdiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1NpbWZlcm9wb2wiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Ta29wamUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Tb2ZpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1N0b2NraG9sbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1RhbGxpbm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9UaXJhbmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9UaXJhc3BvbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1VseWFub3ZzayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1V6aGdvcm9kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmFkdXoiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9WYXRpY2FuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmllbm5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmlsbml1cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1ZvbGdvZ3JhZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1dhcnNhdyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1phZ3JlYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1phcG9yb3poeWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9adXJpY2giLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9BbnRhbmFuYXJpdm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9DaGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9DaHJpc3RtYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9Db2NvcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL0NvbW9ybyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL0tlcmd1ZWxlbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01haGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9NYWxkaXZlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01hdXJpdGl1cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01heW90dGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9SZXVuaW9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NZXhpY28vQmFqYU5vcnRlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NZXhpY28vQmFqYVN1ciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTWV4aWNvL0dlbmVyYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvQXBpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9BdWNrbGFuZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Cb3VnYWludmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvQ2hhdGhhbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9DaHV1ayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9FYXN0ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRWZhdGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRW5kZXJidXJ5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0Zha2FvZm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRmlqaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9GdW5hZnV0aSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HYWxhcGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvR2FtYmllciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HdWFkYWxjYW5hbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HdWFtIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0hvbm9sdWx1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0pvaG5zdG9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0thbnRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9LaXJpdGltYXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0tvc3JhZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ld2FqYWxlaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTWFqdXJvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL01hcnF1ZXNhcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9NaWR3YXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTmF1cnUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTml1ZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ob3Jmb2xrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL05vdW1lYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9QYWdvX1BhZ28iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUGFsYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUGl0Y2Fpcm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUG9obnBlaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Qb25hcGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUG9ydF9Nb3Jlc2J5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1Jhcm90b25nYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9TYWlwYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvU2Ftb2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvVGFoaXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1RhcmF3YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ub25nYXRhcHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvVHJ1ayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9XYWtlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1dhbGxpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9ZYXAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0FsYXNrYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvQWxldXRpYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0FyaXpvbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0NlbnRyYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0Vhc3QtSW5kaWFuYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvRWFzdGVybiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvSGF3YWlpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9JbmRpYW5hLVN0YXJrZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvTWljaGlnYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL01vdW50YWluIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9QYWNpZmljIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9TYW1vYSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAieHotbGlic0A1LjguMy1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJ4ei1saWJzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS94ei1saWJzQDUuOC4zLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWFlNjU4YTVmMTMyYTA5MSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI1LjguMy1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAieHoiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiNS44LjMtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICIwQlNEIiwKICAgICAgICAgICAgIlB1YmxpYy1Eb21haW4iLAogICAgICAgICAgICAiTEdQTC0yLjEtb3ItbGF0ZXIiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NGM5MmM1YmUwYzViZWY0MDRlOTNjODgwZWJhOTAzN2E5YjE0NzM0NyIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmx6bWEuc28uNSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmx6bWEuc28uNS44LjMiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInpsaWJAMS4zLjItcjAiLAogICAgICAgICAgIk5hbWUiOiAiemxpYiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImUzNzA1NGEyOTgyZDZjMTYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInpsaWIiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWmxpYiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpkZDRjM2QxMDJhY2FlZjJhNzFhMTQ5NTk1MWQ1NWZhYmM4NjgwNjEzIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliei5zby4xIiwKICAgICAgICAgICAgInVzci9saWIvbGliei5zby4xLjMuMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfQogICAgICBdLAogICAgICAiVnVsbmVyYWJpbGl0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJWdWxuZXJhYmlsaXR5SUQiOiAiQ1ZFLTIwMjYtODUwOTEiLAogICAgICAgICAgIlBrZ0lEIjogInpsaWJAMS4zLjItcjAiLAogICAgICAgICAgIlBrZ05hbWUiOiAiemxpYiIsCiAgICAgICAgICAiUGtnSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImUzNzA1NGEyOTgyZDZjMTYiCiAgICAgICAgICB9LAogICAgICAgICAgIkluc3RhbGxlZFZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkZpeGVkVmVyc2lvbiI6ICIxLjMuMi1yMSIsCiAgICAgICAgICAiU3RhdHVzIjogImZpeGVkIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIlByaW1hcnlVUkwiOiAiaHR0cHM6Ly9hdmQuYXF1YXNlYy5jb20vbnZkL2N2ZS0yMDI2LTg1MDkxIiwKICAgICAgICAgICJEYXRhU291cmNlIjogewogICAgICAgICAgICAiSUQiOiAiYWxwaW5lIiwKICAgICAgICAgICAgIk5hbWUiOiAiQWxwaW5lIFNlY2RiIiwKICAgICAgICAgICAgIlVSTCI6ICJodHRwczovL3NlY2RiLmFscGluZWxpbnV4Lm9yZy8iCiAgICAgICAgICB9LAogICAgICAgICAgIkZpbmdlcnByaW50IjogInNoYTI1NjpkNzNjMDFiMDIwYzU1YWNjMTc0YTNmZGU0N2M4YWY2ZjU2MzhjNThjNzE4OWM4MTdlZGQ2ODYyMDI5ZjZjNWY1IiwKICAgICAgICAgICJUaXRsZSI6ICJ6bGliIHZlcnNpb25zIDEuMy4xLjIgdGhyb3VnaCAxLjMuMiBjb250YWluIGEgaGVhcCBidWZmZXIgb3ZlcmZsb3cgdnVsIC4uLiIsCiAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiemxpYiB2ZXJzaW9ucyAxLjMuMS4yIHRocm91Z2ggMS4zLjIgY29udGFpbiBhIGhlYXAgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGd6X3ZhY2F0ZSgpIGZ1bmN0aW9uIHdoZW4gcHJvY2Vzc2luZyBub24tYmxvY2tpbmcgZ3p3cml0ZSgpIG9wZXJhdGlvbnMgd2l0aCBzdGFsZSBleHRlcm5hbCBidWZmZXIgcG9pbnRlcnMuIEF0dGFja2VycyBjYW4gdHJpZ2dlciB0aGUgb3ZlcmZsb3cgYnkgY2FsbGluZyBnenByaW50ZigpIG9yIGd6dnByaW50ZigpIGFmdGVyIGEgd3JpdGUgc3RhbGwsIGNhdXNpbmcgYW4gdW5jaGVja2VkIG1lbW1vdmUoKSB0byB3cml0ZSBiZXlvbmQgdGhlIGludGVybmFsIGlucHV0IGJ1ZmZlciBib3VuZGFyeS4iLAogICAgICAgICAgIlNldmVyaXR5IjogIk1FRElVTSIsCiAgICAgICAgICAiQ3dlSURzIjogWwogICAgICAgICAgICAiQ1dFLTc4NyIKICAgICAgICAgIF0sCiAgICAgICAgICAiVmVuZG9yU2V2ZXJpdHkiOiB7CiAgICAgICAgICAgICJ1YnVudHUiOiAyCiAgICAgICAgICB9LAogICAgICAgICAgIlJlZmVyZW5jZXMiOiBbCiAgICAgICAgICAgICJodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aGVzbWFydHNoYWRvdy9lMGI5NDgxNzkyYWZiN2MzMWU4NmZlZTFmZjA4NDQ5MCIsCiAgICAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vbWFkbGVyL3psaWIiLAogICAgICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL21hZGxlci96bGliL2Jsb2IvdjEuMy4yL2d6d3JpdGUuYyNMMzkzIiwKICAgICAgICAgICAgImh0dHBzOi8vd3d3LmN2ZS5vcmcvQ1ZFUmVjb3JkP2lkPUNWRS0yMDI2LTg1MDkxIiwKICAgICAgICAgICAgImh0dHBzOi8vd3d3LnZ1bG5jaGVjay5jb20vYWR2aXNvcmllcy96bGliLTEuMy4xLjItdGhyb3VnaC0xLjMuMi1oZWFwLWJ1ZmZlci1vdmVyZmxvdy12aWEtZ3otdmFjYXRlIgogICAgICAgICAgXSwKICAgICAgICAgICJQdWJsaXNoZWREYXRlIjogIjIwMjYtMDktMDNUMTM6MDY6MjAuNTczWiIsCiAgICAgICAgICAiTGFzdE1vZGlmaWVkRGF0ZSI6ICIyMDI2LTA5LTA5VDIwOjQxOjA3LjEyM1oiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiVGFyZ2V0IjogIlB5dGhvbiIsCiAgICAgICJDbGFzcyI6ICJsYW5nLXBrZ3MiLAogICAgICAiVHlwZSI6ICJweXRob24tcGtnIiwKICAgICAgIlBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogIlB5SldUIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS9weWp3dEAyLjE1LjEiLAogICAgICAgICAgICAiVUlEIjogImQzZjVmOWE0MjFiOGFiYzkiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi4xNS4xIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIgogICAgICAgICAgfSwKICAgICAgICAgICJGaWxlUGF0aCI6ICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL3B5and0LTIuMTUuMS5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogImNmZmkiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzpweXBpL2NmZmlAMi4xLjEiLAogICAgICAgICAgICAiVUlEIjogIjIxMDQyZTJmMzdlMzNjMDUiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi4xLjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlULTAiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9jZmZpLTIuMS4xLmRpc3QtaW5mby9NRVRBREFUQSIsCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJweXRob24tcGtnIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIk5hbWUiOiAiY3J5cHRvZ3JhcGh5IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS9jcnlwdG9ncmFwaHlANTAuMC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkY2IzZGY2MzgzZmUyYTYwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjUwLjAuMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJBcGFjaGUtMi4wIE9SIEJTRC0zLUNsYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIgogICAgICAgICAgfSwKICAgICAgICAgICJGaWxlUGF0aCI6ICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL2NyeXB0b2dyYXBoeS01MC4wLjEuZGlzdC1pbmZvL01FVEFEQVRBIiwKICAgICAgICAgICJBbmFseXplZEJ5IjogInB5dGhvbi1wa2ciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiTmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOnB5cGkvaW5mb3JtZWQtZGVjaXNpb25AMC4yLjAiLAogICAgICAgICAgICAiVUlEIjogIjc5ODlmMmFmYWU4ZmY1NjgiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMC4yLjAiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9pbmZvcm1lZF9kZWNpc2lvbi0wLjIuMC5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogInB5Y3BhcnNlciIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOnB5cGkvcHljcGFyc2VyQDMuMCIsCiAgICAgICAgICAgICJVSUQiOiAiZTVhNGQwM2YxNWE2OTVmZiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ODJmZjE3YjU1NWQ5MTA5NmRkMzI4ZWIxZTgyOWRhYWViYTlhNDhkNzc1NzE0M2QwYjk3YzM1YTcyMWY2ZmI4NyIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgICAgICB9LAogICAgICAgICAgIkZpbGVQYXRoIjogIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvcHljcGFyc2VyLTMuMC5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogIndhaXRyZXNzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS93YWl0cmVzc0AzLjAuMiIsCiAgICAgICAgICAgICJVSUQiOiAiODA2ZTIxOGUxYzFlODVmIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuMC4yIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIlpQTC0yLjEiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy93YWl0cmVzcy0zLjAuMi5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9CiAgICAgIF0KICAgIH0KICBdCn0K" + }, + { + "digest": "sha256:a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d", + "media_type": "application/json", + "content_base64": "ewogICIkc2NoZW1hIjogImh0dHA6Ly9jeWNsb25lZHgub3JnL3NjaGVtYS9ib20tMS43LnNjaGVtYS5qc29uIiwKICAiYm9tRm9ybWF0IjogIkN5Y2xvbmVEWCIsCiAgInNwZWNWZXJzaW9uIjogIjEuNyIsCiAgInNlcmlhbE51bWJlciI6ICJ1cm46dXVpZDozZWFhYTk0Yi01MTI5LTQxZjMtODJmMi1mOGY1OGFjNTIzOWEiLAogICJ2ZXJzaW9uIjogMSwKICAibWV0YWRhdGEiOiB7CiAgICAidGltZXN0YW1wIjogIjIwMjYtMTAtMTFUMDE6MjI6MzMrMDA6MDAiLAogICAgInRvb2xzIjogewogICAgICAiY29tcG9uZW50cyI6IFsKICAgICAgICB7CiAgICAgICAgICAidHlwZSI6ICJhcHBsaWNhdGlvbiIsCiAgICAgICAgICAibWFudWZhY3R1cmVyIjogewogICAgICAgICAgICAibmFtZSI6ICJBcXVhIFNlY3VyaXR5IFNvZnR3YXJlIEx0ZC4iCiAgICAgICAgICB9LAogICAgICAgICAgImdyb3VwIjogImFxdWFzZWN1cml0eSIsCiAgICAgICAgICAibmFtZSI6ICJ0cml2eSIsCiAgICAgICAgICAidmVyc2lvbiI6ICIwLjc0LjAiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImNvbXBvbmVudCI6IHsKICAgICAgImJvbS1yZWYiOiAicGtnOm9jaS9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6NzYzYzM2NDAyYzhiZTdjYzRjMWJkMWE2MTYyM2QxYWZmOTExNmQ1MjI0MTg3NzQyNWI0NWE3MDE4Y2MwODgzYT9hcmNoPWFtZDY0JnJlcG9zaXRvcnlfdXJsPWZvcmdlam8uY291bG9tYi5zb2NpYWwlMkZjb3Vsb21iJTJGaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAidHlwZSI6ICJjb250YWluZXIiLAogICAgICAibmFtZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICAgICAicHVybCI6ICJwa2c6b2NpL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhP2FyY2g9YW1kNjQmcmVwb3NpdG9yeV91cmw9Zm9yZ2Vqby5jb3Vsb21iLnNvY2lhbCUyRmNvdWxvbWIlMkZpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjoyMWZmOTE4OGNiMjljYTk1ZmU5YmUxMTM1NWY3MGFiNTU4NmU4NDk5ZTMzYjUyYTI1M2Q5NTNmYjNiNzVhZWEzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6RGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MzYxNDMwYTExMTM5Njk3NDNiOTllMjM3YjIwZjAyM2Q1NDk3NDkzYmNmOTZmYjkxYWY5OWFjMGEwZGJjNGE1OSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjozY2E0YmUyYzZlOWFjMDIyMzcxNTM1NTI1MzcyNTM4MTAwMDQ4NmMyYjQ1YmZjYjIyY2Y1NzFiNmE4NWExMmRkIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjQwOThhZDAzMzUyNTI2M2Y5MmE4YTljNTE4NjU1OTYwMjVkNDcwMThlMDc4YzBiMWY3ZDljZDU2NjNmYzFmZmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6RGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjpjZmM1OTM5Njc0ZDY3ZjYwYjQ0MTFjMjRkZmNkZTU2MjJiNzEyZWViNzM3NmNkMDk0MWEyNzUxZGE4MGE2YjAyIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6RGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZjliNGE4YTQxMmEwYzA3YTQ4OWU0NmZiNWRiNDFmOWQwZGM4NGQ0ZWMzOGE0ZTJjNmFiOTUzMWY0NGUwZDlmMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpJbWFnZUlEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZjM0ZGUyMTM3OWM0ZjUwZWEwMzYxY2ExZDgyOTZjOGU3MmY5ODk0OTlhZDI4ODAxNmI4MTIwNDk5N2FlNDc3OSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYWJlbHM6b3JnLm9wZW5jb250YWluZXJzLmltYWdlLmJhc2UuZGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYWJlbHM6b3JnLm9wZW5jb250YWluZXJzLmltYWdlLnJldmlzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIzZTRiY2IyNmY4ZWVhYThjNjQzNDVjNTY1NDc3YjVhYzhjY2JiMTY4IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxhYmVsczpzb2NpYWwuY291bG9tYi5yZWxlYXNlLnNjb3BlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYWJlbHM6c29jaWFsLmNvdWxvbWIuc291cmNlLnBvbGljeS5zaGEyNTYiLAogICAgICAgICAgInZhbHVlIjogIjlkN2MxYmU0Y2I2MTk5ZDE0ZWYwYWFlYWQ1Zjg1OTUxZjQ1YjBjY2JkN2M4MDBhN2ZkZTkyMmEyNTM1NjZiNjIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UmVmZXJlbmNlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UmVwb0RpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNjaGVtYVZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U2l6ZSIsCiAgICAgICAgICAidmFsdWUiOiAiODgyNTgwNDgiCiAgICAgICAgfQogICAgICBdCiAgICB9CiAgfSwKICAiY29tcG9uZW50cyI6IFsKICAgIHsKICAgICAgImJvbS1yZWYiOiAiNWI3MTI5OWUtM2MwYy00YzRmLWJkMjktODY1ZmIxNGUxNzU4IiwKICAgICAgInR5cGUiOiAib3BlcmF0aW5nLXN5c3RlbSIsCiAgICAgICJuYW1lIjogImFscGluZSIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpDbGFzcyIsCiAgICAgICAgICAidmFsdWUiOiAib3MtcGtncyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS8ucHl0aG9uLXJ1bmRlcHNAMjAyNjA5MDEuMDAxMDI5P2FyY2g9bm9hcmNoJmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgIm5hbWUiOiAiLnB5dGhvbi1ydW5kZXBzIiwKICAgICAgInZlcnNpb24iOiAiMjAyNjA5MDEuMDAxMDI5IiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjUxZDBjMWU3ZDg4YTQxNDM0NTc5OWYwMzA5MTg1YzYyNTAxM2VmMzIiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS8ucHl0aG9uLXJ1bmRlcHNAMjAyNjA5MDEuMDAxMDI5P2FyY2g9bm9hcmNoJmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAiLnB5dGhvbi1ydW5kZXBzQDIwMjYwOTAxLjAwMTAyOSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUtYmFzZWxheW91dC1kYXRhQDMuNy4yLXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImFscGluZS1iYXNlbGF5b3V0LWRhdGEiLAogICAgICAidmVyc2lvbiI6ICIzLjcuMi1yMSIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICJjNmY5YmRlZDE3ZDg0NGI2ZjFiMGJiNTc2NmQyYzM1YzBkNWM4NTA4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLWJhc2VsYXlvdXQtZGF0YUAzLjcuMi1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImFscGluZS1iYXNlbGF5b3V0LWRhdGFAMy43LjItcjEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogImFscGluZS1iYXNlbGF5b3V0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjMuNy4yLXIxIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLWJhc2VsYXlvdXRAMy43LjItcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAiYWxwaW5lLWJhc2VsYXlvdXQiLAogICAgICAidmVyc2lvbiI6ICIzLjcuMi1yMSIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICJmMGZjZmRjMmY0ZGEwNThhZjY0NzNiYzQ1YzRlYWI2MjkxNjIyNWIyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLWJhc2VsYXlvdXRAMy43LjItcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUtYmFzZWxheW91dEAzLjcuMi1yMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lLWJhc2VsYXlvdXQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMy43LjItcjEiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUta2V5c0AyLjYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAiYWxwaW5lLWtleXMiLAogICAgICAidmVyc2lvbiI6ICIyLjYtcjAiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiZDhkNmI4MGU1M2MwNTlhNzdlNDkxNWRhNzhiYTk2NGYzZmZlYTI0MCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIk1JVCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL2FscGluZS1rZXlzQDIuNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImFscGluZS1rZXlzQDIuNi1yMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lLWtleXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMi42LXIwIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLXJlbGVhc2VAMy4yNC4xLXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImFscGluZS1yZWxlYXNlIiwKICAgICAgInZlcnNpb24iOiAiMy4yNC4xLXIwIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogImJjNjkxMmEyNWNkYzc3MzNlMDAzNWVkNTA5ZWNlYWE0MDI2OTQ2ZTMiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJNSVQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUtcmVsZWFzZUAzLjI0LjEtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUtcmVsZWFzZUAzLjI0LjEtcjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogImFscGluZS1iYXNlIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjMuMjQuMS1yMCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL2Fway10b29sc0AzLjAuNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+IgogICAgICB9LAogICAgICAibmFtZSI6ICJhcGstdG9vbHMiLAogICAgICAidmVyc2lvbiI6ICIzLjAuNi1yMCIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICIwNDMzMzM1ODk3OThhMWY1MmUwOWFlNjNmMDI2YzZjOGZhNjc2ZDM0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvYXBrLXRvb2xzQDMuMC42LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAiYXBrLXRvb2xzQDMuMC42LXIwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogImFscGluZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNOYW1lIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhcGstdG9vbHMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMy4wLjYtcjAiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9idXN5Ym94LWJpbnNoQDEuMzcuMC1yMzE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiU8O2cmVuIFRlbXBlbCA8c29lcmVuK2FscGluZUBzb2VyZW4tdGVtcGVsLm5ldD4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImJ1c3lib3gtYmluc2giLAogICAgICAidmVyc2lvbiI6ICIxLjM3LjAtcjMxIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjVjYmQxNGFjYzZmMTgwNGM1YmFjNmM3N2RjMmM0OTJmMDEwYjBmYzciCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9idXN5Ym94LWJpbnNoQDEuMzcuMC1yMzE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJidXN5Ym94LWJpbnNoQDEuMzcuMC1yMzEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogImJ1c3lib3giCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMS4zNy4wLXIzMSIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL2J1c3lib3hAMS4zNy4wLXIzMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJTw7ZyZW4gVGVtcGVsIDxzb2VyZW4rYWxwaW5lQHNvZXJlbi10ZW1wZWwubmV0PiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAiYnVzeWJveCIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMzcuMC1yMzEiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiYjU0MDVlYmMwMmY3ZGQ4YmU5NWI2MjY1YzU0YjI0M2Q1NDU2YWI4ZiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIkdQTC0yLjAtb25seSIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL2J1c3lib3hAMS4zNy4wLXIzMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImJ1c3lib3hAMS4zNy4wLXIzMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAiYnVzeWJveCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIxLjM3LjAtcjMxIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvY2EtY2VydGlmaWNhdGVzLWJ1bmRsZUAyMDI2MDYxMS1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+IgogICAgICB9LAogICAgICAibmFtZSI6ICJjYS1jZXJ0aWZpY2F0ZXMtYnVuZGxlIiwKICAgICAgInZlcnNpb24iOiAiMjAyNjA2MTEtcjAiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiYzk1MzRhMDM3NTBiZGZhZTM0MWYxMDk2OTAxNjA5MGZjMTFmZWJiZCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIk1QTC0yLjAiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIk1JVCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL2NhLWNlcnRpZmljYXRlcy1idW5kbGVAMjAyNjA2MTEtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJjYS1jZXJ0aWZpY2F0ZXMtYnVuZGxlQDIwMjYwNjExLXIwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogImFscGluZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNOYW1lIiwKICAgICAgICAgICJ2YWx1ZSI6ICJjYS1jZXJ0aWZpY2F0ZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMjAyNjA2MTEtcjAiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9jYS1jZXJ0aWZpY2F0ZXNAMjAyNjA2MTEtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAiY2EtY2VydGlmaWNhdGVzIiwKICAgICAgInZlcnNpb24iOiAiMjAyNjA2MTEtcjAiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiOGYyYTA0YWJlYjU0YjMzMWUyOTcwYTBhMGRmZmI3YmQ2YmRkZTU2NyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIk1QTC0yLjAiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIk1JVCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL2NhLWNlcnRpZmljYXRlc0AyMDI2MDYxMS1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjQ3MzkzYjY2OGNlNTM1ZDA2ZTg5Njc5MTdkNDI0YzE3N2UyZWNjY2FlODM4NTZkNDhiMmU5OTE2NGY4Y2M2Y2IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImNhLWNlcnRpZmljYXRlc0AyMDI2MDYxMS1yMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAiY2EtY2VydGlmaWNhdGVzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjIwMjYwNjExLXIwIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvZ2RibUAxLjI2LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImdkYm0iLAogICAgICAidmVyc2lvbiI6ICIxLjI2LXIwIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjYxOTQ5M2Q4MTI0ZmU0OWE4ZWUxZDhmN2ExMzcyY2Y3ZTM5NzczMzciCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJHUEwtMy4wLW9yLWxhdGVyIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvZ2RibUAxLjI2LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAiZ2RibUAxLjI2LXIwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogImFscGluZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNOYW1lIiwKICAgICAgICAgICJ2YWx1ZSI6ICJnZGJtIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjEuMjYtcjAiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9rZXl1dGlscy1saWJzQDEuNi4zLXI0P2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImtleXV0aWxzLWxpYnMiLAogICAgICAidmVyc2lvbiI6ICIxLjYuMy1yNCIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICJiNzMzMWM5NmYwNzdmYzM1MjJlZTQzNjFhNDQxZDEwOTcyMDRjZDkwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiTEdQTC0yLjAtb3ItbGF0ZXIiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9rZXl1dGlscy1saWJzQDEuNi4zLXI0P2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAia2V5dXRpbHMtbGlic0AxLjYuMy1yNCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAia2V5dXRpbHMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMS42LjMtcjQiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9rcmI1LWNvbmZAMS4wLXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImtyYjUtY29uZiIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMC1yMiIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICI0MGExMWUwNjkwYTU5ZTExMDM2N2I2MmE4MDY2MTAyNGU5OTQyYTJkIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiTUlUIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUva3JiNS1jb25mQDEuMC1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImtyYjUtY29uZkAxLjAtcjIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogImtyYjUtY29uZiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIxLjAtcjIiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9rcmI1LWxpYnNAMS4yMi4yLXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImtyYjUtbGlicyIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMjIuMi1yMSIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICJlZjAyMzQ2ZTIxYjgxN2ZmMzc5ZTQ2MDFlNWIxZmM5NzYwZTVlMzFhIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiTUlUIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUva3JiNS1saWJzQDEuMjIuMi1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImtyYjUtbGlic0AxLjIyLjItcjEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogImtyYjUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMS4yMi4yLXIxIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvbGliYXBrQDMuMC42LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImxpYmFwayIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMC42LXIwIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjUyM2E4ZjU4MTA0NTg5Zjc0Zjc0M2Q1MDFjODFiZjY1MTcxNTUzNzgiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9saWJhcGtAMy4wLjYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJsaWJhcGtAMy4wLjYtcjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogImFway10b29scyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIzLjAuNi1yMCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL2xpYmJ6MkAxLjAuOC1yNj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+IgogICAgICB9LAogICAgICAibmFtZSI6ICJsaWJiejIiLAogICAgICAidmVyc2lvbiI6ICIxLjAuOC1yNiIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICIwODU2NmJhNWM3YWY5N2MyNTQ3NGJlOGIyNGU4YjQ4ZjAxMTZiNjdkIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAibmFtZSI6ICJiemlwLTItMS4wLjYiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9saWJiejJAMS4wLjgtcjY/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJsaWJiejJAMS4wLjgtcjYiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogImJ6aXAyIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjEuMC44LXI2IgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvbGliY29tX2VyckAxLjQ3LjQtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAibGliY29tX2VyciIsCiAgICAgICJ2ZXJzaW9uIjogIjEuNDcuNC1yMCIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICI0YjlmYjU4OTllYTBiMWMwY2ZiYjJhMmM1OTUyNzA0NDM3ZDRlY2VmIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiTEdQTC0yLjAtb3ItbGF0ZXIiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIkJTRC0zLUNsYXVzZSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiTUlUIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvbGliY29tX2VyckAxLjQ3LjQtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJsaWJjb21fZXJyQDEuNDcuNC1yMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAiZTJmc3Byb2dzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjEuNDcuNC1yMCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL2xpYmNyeXB0bzNAMy41LjgtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAibGliY3J5cHRvMyIsCiAgICAgICJ2ZXJzaW9uIjogIjMuNS44LXIwIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjFiM2I5ZmMwYzEzNmY0OTM2OTMyYmNiMmVjMjE0OTlmMGFlNWRmZDMiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJBcGFjaGUtMi4wIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvbGliY3J5cHRvM0AzLjUuOC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImxpYmNyeXB0bzNAMy41LjgtcjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogIm9wZW5zc2wiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMy41LjgtcjAiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJmZmlAMy41LjItcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAibGliZmZpIiwKICAgICAgInZlcnNpb24iOiAiMy41LjItcjEiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiMmY3YjI2MWY3ZmNlY2M0ZWViZDhiMzMwZTdmNmZiODA3MTNiZmUzYSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIk1JVCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL2xpYmZmaUAzLjUuMi1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImxpYmZmaUAzLjUuMi1yMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAibGliZmZpIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjMuNS4yLXIxIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvbGliaW50bEAxLjAtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiQ2FybG8gTGFuZG1ldGVyIDxjbGFuZG1ldGVyQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImxpYmludGwiLAogICAgICAidmVyc2lvbiI6ICIxLjAtcjAiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiMjgyZDY2NDJjY2FjODcyMzdlNDNhODY0MTU5ZDczY2Y1YWJlNzU1MCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIkxHUEwtMi4xLW9yLWxhdGVyIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvbGliaW50bEAxLjAtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJsaWJpbnRsQDEuMC1yMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAiZ2V0dGV4dCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIxLjAtcjAiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk1pbGFuIFAuIFN0YW5pxIcgPG1wc0BhcnZhbnRhLm5ldD4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImxpYm5jdXJzZXN3IiwKICAgICAgInZlcnNpb24iOiAiNi42X3AyMDI2MDUxNi1yMCIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICI5ZjMxOGU2ZTMyNGQ2ODI3Mjc0ODI5MTk0Y2Y2YWM2YWZiYWRlZDEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAibmFtZSI6ICJYLTExIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvbGlibmN1cnNlc3dANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImxpYm5jdXJzZXN3QDYuNl9wMjAyNjA1MTYtcjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogIm5jdXJzZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiNi42X3AyMDI2MDUxNi1yMCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL2xpYm5zbEAyLjAuMS1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJuYW1lIjogImxpYm5zbCIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xLXIyIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjUxOTRhZGJmMjY1NjBiNTJiZTMxODQ4MWE3YWYyOTRhYjA1ZmQ3OTUiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJMR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL2xpYm5zbEAyLjAuMS1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImxpYm5zbEAyLjAuMS1yMiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAibGlibnNsIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjIuMC4xLXIyIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvbGlicGFuZWx3QDYuNl9wMjAyNjA1MTYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTWlsYW4gUC4gU3RhbmnEhyA8bXBzQGFydmFudGEubmV0PiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAibGlicGFuZWx3IiwKICAgICAgInZlcnNpb24iOiAiNi42X3AyMDI2MDUxNi1yMCIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICIxNDliZGM0MzQyMzJlZDExZmM1YmI5NzViYTUxOWEwNzE1NGE2ZjU2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAibmFtZSI6ICJYLTExIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvbGlicGFuZWx3QDYuNl9wMjAyNjA1MTYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJsaWJwYW5lbHdANi42X3AyMDI2MDUxNi1yMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAibmN1cnNlcyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICI2LjZfcDIwMjYwNTE2LXIwIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvbGlic3NsM0AzLjUuOC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+IgogICAgICB9LAogICAgICAibmFtZSI6ICJsaWJzc2wzIiwKICAgICAgInZlcnNpb24iOiAiMy41LjgtcjAiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiNWY5YjFlNTVkODIxOTUzZDJlMmIxZGIzMjJkYWQ3MGEzYjUwNDFlYSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIkFwYWNoZS0yLjAiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9saWJzc2wzQDMuNS44LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAibGlic3NsM0AzLjUuOC1yMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAib3BlbnNzbCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIzLjUuOC1yMCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjLWNvbmZAMS4zLjUtcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAibGlidGlycGMtY29uZiIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMy41LXIxIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjBjMTdkOTk4OGRjOTg2YzkwZTIyZjc5Nzc4ZGYwNDdlY2E5OTczZmYiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9saWJ0aXJwYy1jb25mQDEuMy41LXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAibGlidGlycGMtY29uZkAxLjMuNS1yMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAibGlidGlycGMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMS4zLjUtcjEiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJ0aXJwY0AxLjMuNS1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+IgogICAgICB9LAogICAgICAibmFtZSI6ICJsaWJ0aXJwYyIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMy41LXIxIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogImMzMjg2NWJkODZhOGI4ODI5ZDE1MjI3OWNhYmJjNWFjNmQ0MzBlYjIiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9saWJ0aXJwY0AxLjMuNS1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogImxpYnRpcnBjQDEuMy41LXIxIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogImFscGluZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNOYW1lIiwKICAgICAgICAgICJ2YWx1ZSI6ICJsaWJ0aXJwYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIxLjMuNS1yMSIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL2xpYnV1aWRAMi40Mi4zLXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImxpYnV1aWQiLAogICAgICAidmVyc2lvbiI6ICIyLjQyLjMtcjEiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiOGYwNDFlZjYzN2FkNzVmMzgxY2MwYzAzNGYyYWZiYmIwMzAzMjY0ZSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIkJTRC0zLUNsYXVzZSIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL2xpYnV1aWRAMi40Mi4zLXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjpmOWI0YThhNDEyYTBjMDdhNDg5ZTQ2ZmI1ZGI0MWY5ZDBkYzg0ZDRlYzM4YTRlMmM2YWI5NTMxZjQ0ZTBkOWYxIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZjBmZTNlMDhhYjA0NmMwYzVlMjlkMzRlZTczYmM4YzdlMDMzOThlYjg5MWU0NDk4ZTBhNjcwODhhNWVhM2U4NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAibGlidXVpZEAyLjQyLjMtcjEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogInV0aWwtbGludXgiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMi40Mi4zLXIxIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvbGlidmVydG9AMC4zLjItcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiRnJhbmNlc2NvIENvbGlzdGEgPGZjb2xpc3RhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogImxpYnZlcnRvIiwKICAgICAgInZlcnNpb24iOiAiMC4zLjItcjIiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiNzMyMzMwNTkzMzgxNDJlNGFjNmQ4ZmI4YmIwMDc0ZTkzZGE3NWRjMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIk1JVCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL2xpYnZlcnRvQDAuMy4yLXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAibGlidmVydG9AMC4zLjItcjIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogImxpYnZlcnRvIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjAuMy4yLXIyIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvbXVzbC11dGlsc0AxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+IgogICAgICB9LAogICAgICAibmFtZSI6ICJtdXNsLXV0aWxzIiwKICAgICAgInZlcnNpb24iOiAiMS4yLjYtcjIiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiNzVhZGEzYzQ4ZDYzZWM1ZDg3YzQyZmRmOTM0YTNmZGQxMTI5OGRjNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIk1JVCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiQlNELTItQ2xhdXNlIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJHUEwtMi4wLW9yLWxhdGVyIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvbXVzbC11dGlsc0AxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogIm11c2wtdXRpbHNAMS4yLjYtcjIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogIm11c2wiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMS4yLjYtcjIiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogIm11c2wiLAogICAgICAidmVyc2lvbiI6ICIxLjIuNi1yMiIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICIwZjdlNTgyN2U0ZTFhNzM2MzFiZWRhMjdiNzg0MzFhOGJhMjQwZTA1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiTUlUIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogIm11c2xAMS4yLjYtcjIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogIm11c2wiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiMS4yLjYtcjIiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9uY3Vyc2VzLXRlcm1pbmZvLWJhc2VANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJNaWxhbiBQLiBTdGFuacSHIDxtcHNAYXJ2YW50YS5uZXQ+IgogICAgICB9LAogICAgICAibmFtZSI6ICJuY3Vyc2VzLXRlcm1pbmZvLWJhc2UiLAogICAgICAidmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjlkNTUxZDgyOGU5YzhlZTUyYzU4MDFjMWQ2MDQ2ODI4ZWJmMTU3NTIiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJuYW1lIjogIlgtMTEiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS9uY3Vyc2VzLXRlcm1pbmZvLWJhc2VANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogIm5jdXJzZXMtdGVybWluZm8tYmFzZUA2LjZfcDIwMjYwNTE2LXIwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogImFscGluZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNOYW1lIiwKICAgICAgICAgICJ2YWx1ZSI6ICJuY3Vyc2VzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjYuNl9wMjAyNjA1MTYtcjAiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9yZWFkbGluZUA4LjMuMy1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJxYXFsYW5kIDxxYXFAcWFxLmxhbmQ+IgogICAgICB9LAogICAgICAibmFtZSI6ICJyZWFkbGluZSIsCiAgICAgICJ2ZXJzaW9uIjogIjguMy4zLXIxIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjk0NWIxNmUzNzhiYzAwZTQ0ZDg5ZDRkZTgxMjRiYmE3NjQ3ZmRmNGQiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJHUEwtMy4wLW9yLWxhdGVyIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvcmVhZGxpbmVAOC4zLjMtcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJyZWFkbGluZUA4LjMuMy1yMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAicmVhZGxpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjVmVyc2lvbiIsCiAgICAgICAgICAidmFsdWUiOiAiOC4zLjMtcjEiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6YXBrL2FscGluZS9zY2FuZWxmQDEuMy45LXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogInNjYW5lbGYiLAogICAgICAidmVyc2lvbiI6ICIxLjMuOS1yMSIsCiAgICAgICJoYXNoZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImFsZyI6ICJTSEEtMSIsCiAgICAgICAgICAiY29udGVudCI6ICIwMTNmOTAzZDBiYTIxOTY3M2FlYmJkZDA0Zjc0YmI1ZWQ4MmIwMWYwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUvc2NhbmVsZkAxLjMuOS1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogInNjYW5lbGZAMS4zLjktcjEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogInBheC11dGlscyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIxLjMuOS1yMSIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL3NxbGl0ZS1saWJzQDMuNTMuNC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJKaW5neXVuIEh1YSA8aHVhamluZ3l1bkBsb29uZ3Nvbi5jbj4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogInNxbGl0ZS1saWJzIiwKICAgICAgInZlcnNpb24iOiAiMy41My40LXIwIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogImY3NjMwY2ViMzdjMjMyYjY2MDk4NjFhZWFiNmNkYjljZDEyMGU2ZmEiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJibGVzc2luZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL3NxbGl0ZS1saWJzQDMuNTMuNC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogInNxbGl0ZS1saWJzQDMuNTMuNC1yMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAic3FsaXRlIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjMuNTMuNC1yMCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL3NzbF9jbGllbnRAMS4zNy4wLXIzMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJTw7ZyZW4gVGVtcGVsIDxzb2VyZW4rYWxwaW5lQHNvZXJlbi10ZW1wZWwubmV0PiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAic3NsX2NsaWVudCIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMzcuMC1yMzEiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiYzIyMGY0YTUxMjVhMzEzYWY3MzNlOThkZWY5NDEzMmJiMWU5ZDQwZCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIkdQTC0yLjAtb25seSIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzphcGsvYWxwaW5lL3NzbF9jbGllbnRAMS4zNy4wLXIzMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogInNzbF9jbGllbnRAMS4zNy4wLXIzMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAiYnVzeWJveCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIxLjM3LjAtcjMxIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvdHpkYXRhQDIwMjZjLXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgInN1cHBsaWVyIjogewogICAgICAgICJuYW1lIjogIk5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4iCiAgICAgIH0sCiAgICAgICJuYW1lIjogInR6ZGF0YSIsCiAgICAgICJ2ZXJzaW9uIjogIjIwMjZjLXIwIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjYxZjc1NDRlY2Q4ZGQ2M2VhYzIzZmUzZTY0NTcwMmZkYTkyZWYwMmEiCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJuYW1lIjogIlB1YmxpYy1Eb21haW4iCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS90emRhdGFAMjAyNmMtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjNjYTRiZTJjNmU5YWMwMjIzNzE1MzU1MjUzNzI1MzgxMDAwNDg2YzJiNDViZmNiMjJjZjU3MWI2YTg1YTEyZGQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo0NzM5M2I2NjhjZTUzNWQwNmU4OTY3OTE3ZDQyNGMxNzdlMmVjY2NhZTgzODU2ZDQ4YjJlOTkxNjRmOGNjNmNiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ0lEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJ0emRhdGFAMjAyNmMtcjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogInR6ZGF0YSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIyMDI2Yy1yMCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzphcGsvYWxwaW5lL3h6LWxpYnNANS44LjMtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAic3VwcGxpZXIiOiB7CiAgICAgICAgIm5hbWUiOiAiTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPiIKICAgICAgfSwKICAgICAgIm5hbWUiOiAieHotbGlicyIsCiAgICAgICJ2ZXJzaW9uIjogIjUuOC4zLXIwIiwKICAgICAgImhhc2hlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiYWxnIjogIlNIQS0xIiwKICAgICAgICAgICJjb250ZW50IjogIjRjOTJjNWJlMGM1YmVmNDA0ZTkzYzg4MGViYTkwMzdhOWIxNDczNDciCiAgICAgICAgfQogICAgICBdLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJHUEwtMi4wLW9yLWxhdGVyIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICIwQlNEIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJuYW1lIjogIlB1YmxpYy1Eb21haW4iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIkxHUEwtMi4xLW9yLWxhdGVyIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOmFway9hbHBpbmUveHotbGlic0A1LjguMy1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnSUQiLAogICAgICAgICAgInZhbHVlIjogInh6LWxpYnNANS44LjMtcjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAiYWxwaW5lIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY05hbWUiLAogICAgICAgICAgInZhbHVlIjogInh6IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlNyY1ZlcnNpb24iLAogICAgICAgICAgInZhbHVlIjogIjUuOC4zLXIwIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImJvbS1yZWYiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICJzdXBwbGllciI6IHsKICAgICAgICAibmFtZSI6ICJOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+IgogICAgICB9LAogICAgICAibmFtZSI6ICJ6bGliIiwKICAgICAgInZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAiaGFzaGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJhbGciOiAiU0hBLTEiLAogICAgICAgICAgImNvbnRlbnQiOiAiZGQ0YzNkMTAyYWNhZWYyYTcxYTE0OTU5NTFkNTVmYWJjODY4MDYxMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibGljZW5zZSI6IHsKICAgICAgICAgICAgImlkIjogIlpsaWIiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6YXBrL2FscGluZS96bGliQDEuMy4yLXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWZmSUQiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlnZXN0IiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dJRCIsCiAgICAgICAgICAidmFsdWUiOiAiemxpYkAxLjMuMi1yMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpQa2dUeXBlIiwKICAgICAgICAgICJ2YWx1ZSI6ICJhbHBpbmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6U3JjTmFtZSIsCiAgICAgICAgICAidmFsdWUiOiAiemxpYiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpTcmNWZXJzaW9uIiwKICAgICAgICAgICJ2YWx1ZSI6ICIxLjMuMi1yMCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzpweXBpL2NmZmlAMi4xLjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgIm5hbWUiOiAiY2ZmaSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiTUlULTAiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6cHlwaS9jZmZpQDIuMS4xIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkZpbGVQYXRoIiwKICAgICAgICAgICJ2YWx1ZSI6ICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL2NmZmktMi4xLjEuZGlzdC1pbmZvL01FVEFEQVRBIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAicHl0aG9uLXBrZyIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzpweXBpL2NyeXB0b2dyYXBoeUA1MC4wLjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgIm5hbWUiOiAiY3J5cHRvZ3JhcGh5IiwKICAgICAgInZlcnNpb24iOiAiNTAuMC4xIiwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJleHByZXNzaW9uIjogIkFwYWNoZS0yLjAgT1IgQlNELTMtQ2xhdXNlIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOnB5cGkvY3J5cHRvZ3JhcGh5QDUwLjAuMSIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpGaWxlUGF0aCIsCiAgICAgICAgICAidmFsdWUiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9jcnlwdG9ncmFwaHktNTAuMC4xLmRpc3QtaW5mby9NRVRBREFUQSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogInB5dGhvbi1wa2ciCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6cHlwaS9pbmZvcm1lZC1kZWNpc2lvbkAwLjIuMCIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKICAgICAgInB1cmwiOiAicGtnOnB5cGkvaW5mb3JtZWQtZGVjaXNpb25AMC4yLjAiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6RmlsZVBhdGgiLAogICAgICAgICAgInZhbHVlIjogIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvaW5mb3JtZWRfZGVjaXNpb24tMC4yLjAuZGlzdC1pbmZvL01FVEFEQVRBIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkxheWVyRGlmZklEIiwKICAgICAgICAgICJ2YWx1ZSI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZ2VzdCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6UGtnVHlwZSIsCiAgICAgICAgICAidmFsdWUiOiAicHl0aG9uLXBrZyIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJib20tcmVmIjogInBrZzpweXBpL3B5Y3BhcnNlckAzLjAiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgIm5hbWUiOiAicHljcGFyc2VyIiwKICAgICAgInZlcnNpb24iOiAiMy4wIiwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1cmwiOiAicGtnOnB5cGkvcHljcGFyc2VyQDMuMCIsCiAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpGaWxlUGF0aCIsCiAgICAgICAgICAidmFsdWUiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9weWNwYXJzZXItMy4wLmRpc3QtaW5mby9NRVRBREFUQSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogInB5dGhvbi1wa2ciCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6cHlwaS9weWp3dEAyLjE1LjEiLAogICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgIm5hbWUiOiAiUHlKV1QiLAogICAgICAidmVyc2lvbiI6ICIyLjE1LjEiLAogICAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImxpY2Vuc2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJNSVQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAicHVybCI6ICJwa2c6cHlwaS9weWp3dEAyLjE1LjEiLAogICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6RmlsZVBhdGgiLAogICAgICAgICAgInZhbHVlIjogIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvcHlqd3QtMi4xNS4xLmRpc3QtaW5mby9NRVRBREFUQSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogInB5dGhvbi1wa2ciCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiYm9tLXJlZiI6ICJwa2c6cHlwaS93YWl0cmVzc0AzLjAuMiIsCiAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAibmFtZSI6ICJ3YWl0cmVzcyIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKICAgICAgImxpY2Vuc2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAiaWQiOiAiWlBMLTIuMSIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwdXJsIjogInBrZzpweXBpL3dhaXRyZXNzQDMuMC4yIiwKICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OkZpbGVQYXRoIiwKICAgICAgICAgICJ2YWx1ZSI6ICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL3dhaXRyZXNzLTMuMC4yLmRpc3QtaW5mby9NRVRBREFUQSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImFxdWFzZWN1cml0eTp0cml2eTpMYXllckRpZmZJRCIsCiAgICAgICAgICAidmFsdWUiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJhcXVhc2VjdXJpdHk6dHJpdnk6TGF5ZXJEaWdlc3QiLAogICAgICAgICAgInZhbHVlIjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYXF1YXNlY3VyaXR5OnRyaXZ5OlBrZ1R5cGUiLAogICAgICAgICAgInZhbHVlIjogInB5dGhvbi1wa2ciCiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXSwKICAiZGVwZW5kZW5jaWVzIjogWwogICAgewogICAgICAicmVmIjogIjViNzEyOTllLTNjMGMtNGM0Zi1iZDI5LTg2NWZiMTRlMTc1OCIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lLy5weXRob24tcnVuZGVwc0AyMDI2MDkwMS4wMDEwMjk/YXJjaD1ub2FyY2gmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2FscGluZS1iYXNlbGF5b3V0QDMuNy4yLXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9hbHBpbmUtcmVsZWFzZUAzLjI0LjEtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2Fway10b29sc0AzLjAuNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvY2EtY2VydGlmaWNhdGVzQDIwMjYwNjExLXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9tdXNsLXV0aWxzQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9zc2xfY2xpZW50QDEuMzcuMC1yMzE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL3R6ZGF0YUAyMDI2Yy1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lLy5weXRob24tcnVuZGVwc0AyMDI2MDkwMS4wMDEwMjk/YXJjaD1ub2FyY2gmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2dkYm1AMS4yNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbGliYnoyQDEuMC44LXI2P2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9saWJjcnlwdG8zQDMuNS44LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9saWJmZmlAMy41LjItcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYm5jdXJzZXN3QDYuNl9wMjAyNjA1MTYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYm5zbEAyLjAuMS1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbGlicGFuZWx3QDYuNl9wMjAyNjA1MTYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYnNzbDNAMy41LjgtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjQDEuMy41LXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9saWJ1dWlkQDIuNDIuMy1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvcmVhZGxpbmVAOC4zLjMtcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL3NxbGl0ZS1saWJzQDMuNTMuNC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUveHotbGlic0A1LjguMy1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL2FscGluZS1iYXNlbGF5b3V0LWRhdGFAMy43LjItcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUtYmFzZWxheW91dEAzLjcuMi1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvYWxwaW5lLWJhc2VsYXlvdXQtZGF0YUAzLjcuMi1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvYnVzeWJveC1iaW5zaEAxLjM3LjAtcjMxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLWtleXNAMi42LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogW10KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLXJlbGVhc2VAMy4yNC4xLXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogWwogICAgICAgICJwa2c6YXBrL2FscGluZS9hbHBpbmUta2V5c0AyLjYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9hcGstdG9vbHNAMy4wLjYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2NhLWNlcnRpZmljYXRlcy1idW5kbGVAMjAyNjA2MTEtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYmFwa0AzLjAuNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbGliY3J5cHRvM0AzLjUuOC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL2J1c3lib3gtYmluc2hAMS4zNy4wLXIzMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvYnVzeWJveEAxLjM3LjAtcjMxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvYnVzeWJveEAxLjM3LjAtcjMxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogWwogICAgICAgICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvY2EtY2VydGlmaWNhdGVzLWJ1bmRsZUAyMDI2MDYxMS1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFtdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL2NhLWNlcnRpZmljYXRlc0AyMDI2MDYxMS1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvYnVzeWJveC1iaW5zaEAxLjM3LjAtcjMxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9saWJjcnlwdG8zQDMuNS44LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvZ2RibUAxLjI2LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogWwogICAgICAgICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUva2V5dXRpbHMtbGlic0AxLjYuMy1yND9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL2tyYjUtY29uZkAxLjAtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9rcmI1LWxpYnNAMS4yMi4yLXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogWwogICAgICAgICJwa2c6YXBrL2FscGluZS9rZXl1dGlscy1saWJzQDEuNi4zLXI0P2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9rcmI1LWNvbmZAMS4wLXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9saWJjb21fZXJyQDEuNDcuNC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbGliY3J5cHRvM0AzLjUuOC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbGlic3NsM0AzLjUuOC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbGlidmVydG9AMC4zLjItcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJhcGtAMy4wLjYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYmNyeXB0bzNAMy41LjgtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYnNzbDNAMy41LjgtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL3psaWJAMS4zLjItcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJiejJAMS4wLjgtcjY/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJjb21fZXJyQDEuNDcuNC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL2xpYmNyeXB0bzNAMy41LjgtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJmZmlAMy41LjItcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJpbnRsQDEuMC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL2xpYm5jdXJzZXN3QDYuNl9wMjAyNjA1MTYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL25jdXJzZXMtdGVybWluZm8tYmFzZUA2LjZfcDIwMjYwNTE2LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvbGlibnNsQDIuMC4xLXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogWwogICAgICAgICJwa2c6YXBrL2FscGluZS9saWJpbnRsQDEuMC1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbGlidGlycGNAMS4zLjUtcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJwYW5lbHdANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvbGlibmN1cnNlc3dANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbmN1cnNlcy10ZXJtaW5mby1iYXNlQDYuNl9wMjAyNjA1MTYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJzc2wzQDMuNS44LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogWwogICAgICAgICJwa2c6YXBrL2FscGluZS9saWJjcnlwdG8zQDMuNS44LXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvbGlidGlycGMtY29uZkAxLjMuNS1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFtdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjQDEuMy41LXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogWwogICAgICAgICJwa2c6YXBrL2FscGluZS9rcmI1LWxpYnNAMS4yMi4yLXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9saWJ0aXJwYy1jb25mQDEuMy41LXIxP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAgICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvbGlidXVpZEAyLjQyLjMtcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9saWJ2ZXJ0b0AwLjMuMi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL211c2wtdXRpbHNAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL3NjYW5lbGZAMS4zLjktcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogW10KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvbmN1cnNlcy10ZXJtaW5mby1iYXNlQDYuNl9wMjAyNjA1MTYtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9yZWFkbGluZUA4LjMuMy1yMT9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvbGlibmN1cnNlc3dANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzphcGsvYWxwaW5lL3NjYW5lbGZAMS4zLjktcjE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9zcWxpdGUtbGlic0AzLjUzLjQtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS9zc2xfY2xpZW50QDEuMzcuMC1yMzE/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYmNyeXB0bzNAMy41LjgtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL2xpYnNzbDNAMy41LjgtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgInBrZzphcGsvYWxwaW5lL211c2xAMS4yLjYtcjI/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS90emRhdGFAMjAyNmMtcjA/YXJjaD14ODZfNjQmZGlzdHJvPTMuMjQuMSIsCiAgICAgICJkZXBlbmRzT24iOiBbXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6YXBrL2FscGluZS94ei1saWJzQDUuOC4zLXIwP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiLAogICAgICAiZGVwZW5kc09uIjogWwogICAgICAgICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0JmRpc3Rybz0zLjI0LjEiCiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAicGtnOmFway9hbHBpbmUvbXVzbEAxLjIuNi1yMj9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIgogICAgICBdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzpvY2kvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2E/YXJjaD1hbWQ2NCZyZXBvc2l0b3J5X3VybD1mb3JnZWpvLmNvdWxvbWIuc29jaWFsJTJGY291bG9tYiUyRmluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgImRlcGVuZHNPbiI6IFsKICAgICAgICAiNWI3MTI5OWUtM2MwYy00YzRmLWJkMjktODY1ZmIxNGUxNzU4IiwKICAgICAgICAicGtnOnB5cGkvY2ZmaUAyLjEuMSIsCiAgICAgICAgInBrZzpweXBpL2NyeXB0b2dyYXBoeUA1MC4wLjEiLAogICAgICAgICJwa2c6cHlwaS9pbmZvcm1lZC1kZWNpc2lvbkAwLjIuMCIsCiAgICAgICAgInBrZzpweXBpL3B5Y3BhcnNlckAzLjAiLAogICAgICAgICJwa2c6cHlwaS9weWp3dEAyLjE1LjEiLAogICAgICAgICJwa2c6cHlwaS93YWl0cmVzc0AzLjAuMiIKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6cHlwaS9jZmZpQDIuMS4xIiwKICAgICAgImRlcGVuZHNPbiI6IFtdCiAgICB9LAogICAgewogICAgICAicmVmIjogInBrZzpweXBpL2NyeXB0b2dyYXBoeUA1MC4wLjEiLAogICAgICAiZGVwZW5kc09uIjogW10KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOnB5cGkvaW5mb3JtZWQtZGVjaXNpb25AMC4yLjAiLAogICAgICAiZGVwZW5kc09uIjogW10KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOnB5cGkvcHljcGFyc2VyQDMuMCIsCiAgICAgICJkZXBlbmRzT24iOiBbXQogICAgfSwKICAgIHsKICAgICAgInJlZiI6ICJwa2c6cHlwaS9weWp3dEAyLjE1LjEiLAogICAgICAiZGVwZW5kc09uIjogW10KICAgIH0sCiAgICB7CiAgICAgICJyZWYiOiAicGtnOnB5cGkvd2FpdHJlc3NAMy4wLjIiLAogICAgICAiZGVwZW5kc09uIjogW10KICAgIH0KICBdLAogICJ2dWxuZXJhYmlsaXRpZXMiOiBbCiAgICB7CiAgICAgICJpZCI6ICJDVkUtMjAyNi04NTA5MSIsCiAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgIm5hbWUiOiAiYWxwaW5lIiwKICAgICAgICAidXJsIjogImh0dHBzOi8vc2VjZGIuYWxwaW5lbGludXgub3JnLyIKICAgICAgfSwKICAgICAgInJhdGluZ3MiOiBbCiAgICAgICAgewogICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgIm5hbWUiOiAidWJ1bnR1IgogICAgICAgICAgfSwKICAgICAgICAgICJzZXZlcml0eSI6ICJtZWRpdW0iCiAgICAgICAgfQogICAgICBdLAogICAgICAiY3dlcyI6IFsKICAgICAgICA3ODcKICAgICAgXSwKICAgICAgImRlc2NyaXB0aW9uIjogInpsaWIgdmVyc2lvbnMgMS4zLjEuMiB0aHJvdWdoIDEuMy4yIGNvbnRhaW4gYSBoZWFwIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIHRoZSBnel92YWNhdGUoKSBmdW5jdGlvbiB3aGVuIHByb2Nlc3Npbmcgbm9uLWJsb2NraW5nIGd6d3JpdGUoKSBvcGVyYXRpb25zIHdpdGggc3RhbGUgZXh0ZXJuYWwgYnVmZmVyIHBvaW50ZXJzLiBBdHRhY2tlcnMgY2FuIHRyaWdnZXIgdGhlIG92ZXJmbG93IGJ5IGNhbGxpbmcgZ3pwcmludGYoKSBvciBnenZwcmludGYoKSBhZnRlciBhIHdyaXRlIHN0YWxsLCBjYXVzaW5nIGFuIHVuY2hlY2tlZCBtZW1tb3ZlKCkgdG8gd3JpdGUgYmV5b25kIHRoZSBpbnRlcm5hbCBpbnB1dCBidWZmZXIgYm91bmRhcnkuIiwKICAgICAgInJlY29tbWVuZGF0aW9uIjogIlVwZ3JhZGUgemxpYiB0byB2ZXJzaW9uIDEuMy4yLXIxIiwKICAgICAgImFkdmlzb3JpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgInVybCI6ICJodHRwczovL2F2ZC5hcXVhc2VjLmNvbS9udmQvY3ZlLTIwMjYtODUwOTEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RoZXNtYXJ0c2hhZG93L2UwYjk0ODE3OTJhZmI3YzMxZTg2ZmVlMWZmMDg0NDkwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbWFkbGVyL3psaWIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tYWRsZXIvemxpYi9ibG9iL3YxLjMuMi9nendyaXRlLmMjTDM5MyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cuY3ZlLm9yZy9DVkVSZWNvcmQ/aWQ9Q1ZFLTIwMjYtODUwOTEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnZ1bG5jaGVjay5jb20vYWR2aXNvcmllcy96bGliLTEuMy4xLjItdGhyb3VnaC0xLjMuMi1oZWFwLWJ1ZmZlci1vdmVyZmxvdy12aWEtZ3otdmFjYXRlIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInB1Ymxpc2hlZCI6ICIyMDI2LTA5LTAzVDEzOjA2OjIwKzAwOjAwIiwKICAgICAgInVwZGF0ZWQiOiAiMjAyNi0wOS0wOVQyMDo0MTowNyswMDowMCIsCiAgICAgICJhZmZlY3RzIjogWwogICAgICAgIHsKICAgICAgICAgICJyZWYiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NCZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICJ2ZXJzaW9ucyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMy4yLXIwIiwKICAgICAgICAgICAgICAic3RhdHVzIjogImFmZmVjdGVkIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXQp9Cg==" + }, + { + "digest": "sha256:a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad", + "media_type": "text/plain", + "content_base64": "aW1wb3J0IGNvcHksanNvbix0aW1lCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLHRpbWV6b25lCmZyb20gaW5mb3JtZWRfZGVjaXNpb24ucG9saWN5IGltcG9ydCBQb2xpY3lDbGllbnQsQ09OVFJBQ1Qsc3VibWl0dGVkX2RpZ2VzdApwaW49J3NoYTI1NjonKydiJyo2NApyZXE9eydpZCc6J2ltYWdlLXB1cnBvc2UtZml4dHVyZScsJ3RlbmFudCc6J3RlbmFudDpwbGF0Zm9ybScsJ3N1YmplY3QnOnsnaWQnOidzeW50aGV0aWMnLCd0eXBlJzonc2VydmljZScsJ3RlbmFudCc6J3RlbmFudDpwbGF0Zm9ybSd9LCdyZXNvdXJjZSc6eydpZCc6J21lbW86Zml4dHVyZScsJ3R5cGUnOidtZW1vJywnc3lzdGVtJzonaW5mb3JtZWQtZGVjaXNpb24nLCd0ZW5hbnQnOid0ZW5hbnQ6cGxhdGZvcm0nfSwnYWN0aW9uJzoncmVnaXN0ZXInLCdjb250ZXh0Jzp7fX0KY2xhc3MgVHJhbnNwb3J0OgogZGVmIHJlcXVlc3Qoc2VsZiwqYXJncywqKmt3YXJncyk6CiAgbm93PXRpbWUudGltZSgpOyBzdGFtcD1sYW1iZGEgdDpkYXRldGltZS5mcm9tdGltZXN0YW1wKHQsdGltZXpvbmUudXRjKS5pc29mb3JtYXQoKQogIGI9eyoqY29weS5kZWVwY29weSh7azpyZXFba10gZm9yIGsgaW4gKCd0ZW5hbnQnLCdzdWJqZWN0JywnYWN0aW9uJywncmVzb3VyY2UnLCdjb250ZXh0Jyl9KSwncmVxdWVzdF9kaWdlc3QnOidzaGEyNTY6JysnZScqNjQsJ3N1Ym1pdHRlZF9yZXF1ZXN0X2RpZ2VzdCc6c3VibWl0dGVkX2RpZ2VzdChyZXEpfQogIGlmIHNlbGYucHVycG9zZSE9J0FCU0VOVCc6YlsncHVycG9zZSddPXNlbGYucHVycG9zZQogIGQ9eydpZCc6J3N5bnRoZXRpYy1kZWNpc2lvbicsJ2NvbnRyYWN0X3ZlcnNpb24nOkNPTlRSQUNULCdyZXF1ZXN0X2lkJzpyZXFbJ2lkJ10sJ2VmZmVjdCc6J2FsbG93JywnbWF0Y2hlZF9wb2xpY3lfdmVyc2lvbic6J3YxJywnc3ViamVjdCc6cmVxWydzdWJqZWN0J10sJ3Jlc291cmNlJzpyZXFbJ3Jlc291cmNlJ10sJ2JpbmRpbmcnOmIsJ2xpZmV0aW1lJzp7J2tpbmQnOid0dGwnLCdub3RfYmVmb3JlJzpzdGFtcChub3ctMSksJ2V4cGlyZXNfYXQnOnN0YW1wKG5vdys2MCl9LCdwcm92ZW5hbmNlJzp7J3BvbGljeV9wYWNrYWdlJzonZml4dHVyZScsJ3BvbGljeV92ZXJzaW9uJzondjEnLCdwb2xpY3lfcGFja2FnZV9kaWdlc3QnOnBpbiwncmVnaXN0cnlfc25hcHNob3RfZGlnZXN0Jzonc2hhMjU2OicrJ2MnKjY0LCdldmFsdWF0b3InOidmbGV4LWF1dGgvZml4dHVyZScsJ2RlY2lzaW9uX3RpbWUnOnN0YW1wKG5vdyl9fQogIHJldHVybiAyMDAsZApjaGVja3M9W10KZm9yIHB1cnBvc2UgaW4gKCdBQlNFTlQnLCcnLCdyZWFkYmFjaycsJ2VuZm9yY2VtZW50JywndW5rbm93bicsTm9uZSxGYWxzZSwwLFtdLHt9KToKIHQ9VHJhbnNwb3J0KCk7dC5wdXJwb3NlPXB1cnBvc2UKIGM9UG9saWN5Q2xpZW50KCdodHRwczovL2ZpeHR1cmUuaW52YWxpZCcsbGFtYmRhOidzeW50aGV0aWMtb25seScscGFja2FnZT0nZml4dHVyZScsdmVyc2lvbj0ndjEnLHBhY2thZ2VfZGlnZXN0PXBpbix0cmFuc3BvcnQ9dCkKIG89Yy5jaGVjayhyZXEpCiBpZiBwdXJwb3NlIGluICgnQUJTRU5UJywnJyk6YXNzZXJ0IG8ub3V0Y29tZT09J2FsbG93JztvLnJlcXVpcmVfY3VycmVudCh0aW1lLnRpbWUoKSkKIGVsc2U6YXNzZXJ0IG8ub3V0Y29tZT09J2ludmFsaWRfZGVjaXNpb24nIGFuZCBvLmRlY2lzaW9uX2pzb24gaXMgTm9uZQogY2hlY2tzLmFwcGVuZChzdHIocHVycG9zZSkpCnByaW50KGpzb24uZHVtcHMoeydpbnN0YWxsZWRfaW1hZ2VfcHVycG9zZV92YXJpYW50cyc6bGVuKGNoZWNrcyksJ2JpbmRpbmdfZm9ybXNfYWxsb3dlZCc6MiwnYWR2aXNvcnlfb3JfbWFsZm9ybWVkX3JlZnVzZWQnOjgsJ3N5bnRoZXRpY19vbmx5JzpUcnVlLCduYXRpdmVfcHJvdmlkZXInOkZhbHNlfSkpCg==" + }, + { + "digest": "sha256:aa9758d4de587d14c6ce0fdaccd84002c5c5099425b9169ca7c972a86e9d3dec", + "media_type": "text/markdown", + "content_base64": "IyBQcm90ZWN0ZWQgbmF0aXZlIGJhY2t1cC9yZXN0b3JlIGFuZCBpbWFnZS1vbmx5IHJlbGVhc2UgcHJvdG9jb2wKClByZXBhcmVkIHByb3RvY29sIGZvciBgSU5GRC1XUC0wMDA5LVQwNC9wdXJwb3NlLW92ZXJsYXktdjFgLiBObyBhY3R1YWwgbmF0aXZlIGJhY2t1cCwgZGF0YSBleHBvcnQsIHJlc3RvcmUsIHdvcmtsb2FkIGNoYW5nZSBvciBhcHByb3ZhbCBpcyByZWNvcmRlZCBoZXJlLiBDYW5kaWRhdGUgcmVnaXN0cnkgaW1hZ2UgaWRlbnRpdHkgcmVtYWlucyBhIHByZXJlcXVpc2l0ZTsgb25seSBhZnRlciBhY3R1YWwgYXJ0aWZhY3QgcHJvb2YgbWF5IHRoZSBmb3VuZGVyIGFwcHJvdmUgb25lIGV4YWN0IGNvbmRpdGlvbmFsIHByb3RvY29sL3JvbGxvdXQgcGFja2V0LiBUaGUgY29uZmlnLW9ubHk3ZGI4NDg1IGFwcHJvdmFsIGlzIG91dHNpZGUgdGhpcyBzY29wZS4KCiMjIFByZWNvbmRpdGlvbnMgYW5kIHByb3RlY3RlZCBjdXN0b2R5CgpGcmVlemUgZXhhY3QgY2FuZGlkYXRlIGFuZCBwcmlvcjdmNWM2Y2IgaW1hZ2UgZGlnZXN0cywgc291cmNlL2luc3RhbGxlZCBwb2xpY3kgaGFzaGVzLCBjdXJyZW50IG1hbnVhbGx5IG1hbmFnZWQgQXJnbyBBcHBsaWNhdGlvbi9yZXZpc2lvbiwgcnVudGltZSBDb25maWdNYXA2YzIyMTg3OGQwNTEsIERlcGxveW1lbnQgVUlEL3RlbXBsYXRlL3NwZWMsIHNjaGVtYTUsIHBvbGljeSBwYWNrYWdlIHBpbnMsIGRhdGFiYXNlIHBhdGggYC9kYXRhL3ByaXZhdGUvcmV2aWV3LnNxbGl0ZWAsIFBWQyBiaW5kaW5nLCByZXBsaWNhczEvUmVjcmVhdGUgYW5kIHN0YWJsZSBrZXlzIGZvciBpbnRlbmRlZCB2ZXJpZmljYXRpb24uIENvbmZpcm0gbm8gY29uY3VycmVudCB3cml0ZXIgb3IgY3VzdG9keSBjaGFuZ2UuIFVzZSBmaXhlZCBtZXRhZGF0YTsgbmV2ZXIgZmV0Y2ggU2VjcmV0IG9iamVjdHMgb3IgdG9rZW4gdmFsdWVzLiBBIGNoYW5nZWQgaW1hZ2UvY29uZmlnL3NjaGVtYS9vd25lciBpbnZhbGlkYXRlcyB0aGUgcGFja2V0LiBGcmVzaCByZXNvdXJjZXMvaGVhZHJvb20gYW5kIGV4YWN0IHNvdXJjZS9uYXRpdmUgc2VydmVyLWRyeS1ydW4vZGlmZiByZW1haW4gcmVxdWlyZWQuCgpCYWNrdXBzIGFyZSBwcml2YXRlIGV2aWRlbmNlIGNvbnRhaW5pbmcgcmVhbCBkZWNpc2lvbiByZWNvcmRzLCBub3QgbG9ncyBvciBwYWNrZXQgYXR0YWNobWVudHMuIEFsbG9jYXRlIGEgdW5pcXVlIGJhY2t1cCBkaXJlY3RvcnkgdW5kZXIgZXhpc3RpbmcgcHJvdGVjdGVkIFBWQyBjdXN0b2R5LCBvd25lZDEwMDAxLCBtb2RlMDcwMCwgc25hcHNob3QgZmlsZTA2MDAsIG5vIHN5bWxpbmsvaGFyZGxpbmsvcmV1c2VkIG91dHB1dCBwYXRoLiBBbiBvZmYtY2x1c3RlciBjb3B5IGJlbG9uZ3Mgb25seSBpbiB0aGUgYWxyZWFkeSBlc3RhYmxpc2hlZCBpZ25vcmVkIGAucHJpdmF0ZS1iYWNrdXBzLzx1bmlxdWUtdHJpYWwtZGlyZWN0b3J5PmAgY3VzdG9keSB3aXRoMDcwMC8wNjAwIHBlcm1pc3Npb25zOyBubyBHaXQsIFN0YXRlSHViLCBwdWJsaWMgb2JqZWN0IHN0b3JlIG9yIHRlcm1pbmFsLWNvbnRlbnQgZHVtcC4gUmVjb3JkIG9ubHkgc2NoZW1hLCBpbnRlZ3JpdHkgcGFzcy9mYWlsLCBib3VuZGVkIHRhYmxlL3N0YXRlIGNvdW50cyBhbmQgcHJvdGVjdGVkIHJlY2VpcHQgaWRlbnRpZmllcjsgcmV0YWluIGJ5dGUgZGlnZXN0cyBpbiBwcm90ZWN0ZWQgY3VzdG9keSBpZiBuZWVkZWQgZm9yIGludGVybmFsIGNvcHkgaWRlbnRpdHkuIE5vIGNyZWRlbnRpYWwsIHJlY29yZCBwYXlsb2FkIG9yIHRva2VuIGZpbmdlcnByaW50IGVudGVycyBwdWJsaWMgZXZpZGVuY2UuCgojIyBBcHByb3ZlZCBvbmxpbmUgY29tcGF0aWJpbGl0eSBkcmlsbAoKV2l0aGluIHRoZSBleHBsaWNpdCBmb3VuZGVyLWFwcHJvdmVkIGFjdGlvbiwgcnVuIHRoZSBleGlzdGluZyBiYXNlIGltYWdlJ3MgYGluZm9ybWVkLWRlY2lzaW9uLWFkbWluIGJhY2t1cCAtLWRiIC9kYXRhL3ByaXZhdGUvcmV2aWV3LnNxbGl0ZSAtLW91dHB1dCA8bmV3LXByaXZhdGUtc25hcHNob3Q+YCBpbiB0aGUgYWN0dWFsIHNlcnZpbmcgd29ya2xvYWQuIFRoaXMgdXNlcyBTUUxpdGUncyBiYWNrdXAgQVBJIGZvciBhIHRyYW5zYWN0aW9uYWxseSBjb25zaXN0ZW50IHNuYXBzaG90OyBjb3B5aW5nIGEgbGl2ZSBtYWluIGRhdGFiYXNlIHdoaWxlIGlnbm9yaW5nIFdBTCBpcyBwcm9oaWJpdGVkLiBTdXBwcmVzcyByYXcgZmFpbHVyZXMvb3V0cHV0IGFuZCByZXRhaW4gb25seSBzYW5pdGl6ZWQgc3RhdHVzLiBPYnNlcnZlIHNjaGVtYS9pbnRlZ3JpdHkgYW5kIGNvdW50LW9ubHkgbWV0YWRhdGEgZnJvbSB0aGUgcmVzdWx0aW5nIHNuYXBzaG90LCBub3QgcmVjb3JkIGNvbnRlbnQuCgpUcmFuc2ZlciB0aGF0IGNvbnNpc3RlbnQgc25hcHNob3Qgb25seSBpbnRvIHByb3RlY3RlZCBvZmYtY2x1c3RlciBjdXN0b2R5IHRocm91Z2ggdGhlIGV4aXN0aW5nIGF1dGhvcml6ZWQgb3BlcmF0b3IgbGFuZS4gVGhlIGNvcHkgaXMgcmVhbCBwcm9kdWN0aW9uIGRhdGEgZXZlbiBpbiBidWlsZCBtb2RlLiBWZXJpZnkgcHJpdmF0ZSBwZXJtaXNzaW9ucywgdW5pcXVlIGlkZW50aXR5IGFuZCBwcm90ZWN0ZWQgaW50ZXJuYWwgZGlnZXN0IGFncmVlbWVudC4gRG8gbm90IGV4cG9ydCBtb3VudGVkIHdvcmtsb2FkIGNyZWRlbnRpYWxzIG9yIGRpcmVjdG9yeSB0cmVlczsgY29weSBvbmx5IHRoZSBleGFjdCBzbmFwc2hvdC4KCkNyZWF0ZSBhIHNlcGFyYXRlIHByaXZhdGUgZGlzcG9zYWJsZSByZXN0b3JlIHZvbHVtZS9kaXJlY3Rvcnk7IHJldGFpbiB0aGUgb3JpZ2luYWwgc25hcHNob3QgdW5jaGFuZ2VkLiBSdW4gdGhlIGV4YWN0IHB1Ymxpc2hlZCBjYW5kaWRhdGUgd2l0aCBuZXR3b3JrIGRpc2FibGVkLCBubyBwcm9kdWN0aW9uIENvbmZpZ01hcC90b2tlbiBtb3VudHMsIHJlYWQtb25seSBpbWFnZSBhbmQgb25seSB0aGF0IGlzb2xhdGVkIHZvbHVtZSB3cml0YWJsZS4gT3ZlcnJpZGUgdGhlIHNlcnZpY2UgZW50cnlwb2ludCB3aXRoIHRoZSBvd25lcidzIGNvdW50LW9ubHkgYWRtaW5pc3RyYXRpdmUgaW5zcGVjdGlvbi9pbnRlZ3JpdHkgY2hlY2s7IGRvIG5vdCBzdGFydCBIVFRQIGxpc3RlbmVycywgYXVkaXQgZGVsaXZlcnksIHJlcXVlc3RlciBleGNoYW5nZXMgb3IgYXBwcm92YWwgb3BlcmF0aW9ucy4gVGhlIGN1cnJlbnQgY2FuZGlkYXRlIGNoYW5nZXMgcG9saWN5LnB5IG9ubHkgYW5kIHJldGFpbnMgdGhlIHNjaGVtYS9zdG9yZSBtb2R1bGUgYnl0ZXM7IHN0aWxsIHByb3ZlIHNjaGVtYTUsIFNRTGl0ZSBpbnRlZ3JpdHkgYW5kIGV4YWN0IGJvdW5kZWQgY291bnRzIGJlZm9yZS9hZnRlciBvcGVuaW5nIHRoZSByZXN0b3JlZCBjb3B5LiBSZWZ1c2UgYW55IG1pZ3JhdGlvbi9kb3duZ3JhZGUsIGxvc3QvY2hhbmdlZCBjb3VudHMsIHVuZXhwZWN0ZWQgd3JpdGUgY2xhc3Mgb3IgdW5rbm93biBvdXRjb21lLiBLZWVwIHBlbmRpbmcvdW5jZXJ0YWluIHN1Ym1pc3Npb24gYW5kIG91dGJveCBzdGF0ZXM7IG5ldmVyIHJlcGxheSwgZGlzY2FyZCBvciBtYXJrIHRoZW0gZGVsaXZlcmVkIHRvIGdyZWVuIHRoZSBkcmlsbC4gQ2xlYW51cCBvbmx5IHRoZSBkaXNwb3NhYmxlIGNvcHkvdm9sdW1lIGFmdGVyIHZlcmlmaWVkIHJlY2VpcHQ7IHJldGFpbiB0aGUgb3JpZ2luYWwgcHJvdGVjdGVkIGJhY2t1cCBmb3IgdGhlIGFwcHJvdmVkIHJlY292ZXJ5IGludGVydmFsLgoKVGhpcyBzdGVwIGlzIGFjdHVhbCBuYXRpdmUtZGF0YSBjb21wYXRpYmlsaXR5IGV2aWRlbmNlIG9uY2UgcGVyZm9ybWVkLiBJdHMgcHJldmlvdXMgc3ludGhldGljIGZpeHR1cmUgY2hlY2tzIHJlbWFpbiBtZWNoYW5pc20gZXZpZGVuY2UgYW5kIGNhbm5vdCBiZSByZW5hbWVkIG5hdGl2ZSBzdWNjZXNzLiBBIGZhaWxlZCBkcmlsbCBzdG9wcyByb2xsb3V0IGFuZCByZW1haW5zIGEgZmFpbGVkL3VudmVyaWZpZWQgb3V0Y29tZSBpbiB0aGUgc2FtZSB0cmlhbC4KCiMjIEZyZXNoIGN1dG92ZXIgc25hcHNob3QgYW5kIHNpbmdsZS13cml0ZXIgcm9sbG91dAoKQWZ0ZXIgc3VjY2Vzc2Z1bCBhY3R1YWwtZGF0YSBjb21wYXRpYmlsaXR5IGNoZWNrcywgY3JlYXRlIGFub3RoZXIgdW5pcXVlIFNRTGl0ZS1jb25zaXN0ZW50IG9ubGluZSBzbmFwc2hvdCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGltYWdlIGN1dG92ZXIsIHJldGFpbmluZyBpdHMgcG9pbnQtaW4tdGltZSBzY2hlbWEvaW50ZWdyaXR5L2NvdW50IHJlY2VpcHQuIFRoaXMgaXMgYW4gb25saW5lIHRyYW5zYWN0aW9uYWwgc25hcHNob3QsIG5vdCBhIGNsYWltIHRoYXQgZGlzcGF0Y2hlcnMgb3IgaHVtYW4gd3JpdGVzIHdlcmUgcXVpZXNjZWQuIEV2ZXJ5IGxhdGVyIGNvbW1pdHRlZCByZWNvcmQgcmVtYWlucyBpbiB0aGUgbGl2ZSBkYXRhYmFzZTsgc2FtZS1zY2hlbWEgcm9sbGJhY2sgcmV0YWlucyB0aGF0IGRhdGFiYXNlIGFuZCBuZXZlciByZXN0b3JlcyB0aGUgZWFybGllciBzbmFwc2hvdCBvdmVyIGl0LiBUaGUgbmFycm93IGltYWdlLW9ubHkgdXBkYXRlIGRvZXMgbm90IG5lZWQgZGlzcGF0Y2hlci9jb25maWd1cmF0aW9uL1BWQy90ZW1wb3JhcnktcG9kIGNoYW5nZXMgb3IgYSBzY2hlbWEgY3V0b3Zlci4gSWYgZnJlc2ggdmVyaWZpY2F0aW9uIHNob3dzIGEgbWlncmF0aW9uIG9yIGFueSBkYXRhLXJlc3RvcmF0aW9uIHJlcXVpcmVtZW50LCBzdG9wIGFuZCByZWZpbmUgdGhlIHByb3Bvc2FsIHJhdGhlciB0aGFuIGFwcGx5aW5nIHRoaXMgcHJvdG9jb2wuCgpUaGUgZXhpc3RpbmcgUmVjcmVhdGUgcm9sbG91dCBkcmFpbnMvc3RvcHMgdGhlIHNpbmdsZSBvbGQgd3JpdGVyIGJlZm9yZSBzdGFydGluZyB0aGUgbmV3IGltYWdlIG9uIHRoZSBzYW1lIFBWQzsgdGhlIGluaGVyaXRlZCBzaW5nbGUtd3JpdGVyIGxvY2sgaW5kZXBlbmRlbnRseSByZWZ1c2VzIGNvbmN1cnJlbnQgc2VydmluZyBwcm9jZXNzZXMuIERvIG5vdCBhZGQgYW4gYWRtaW4gcG9kLCBzY2FsZS10by16ZXJvLCBkaXNwYXRjaGVyIHN0b3AsIG5ldHdvcmstcG9saWN5IHJld3JpdGUgb3Igc25hcHNob3Qgb3ZlcndyaXRlIGFzIGFuIGltcHJvdmlzZWQgaW1hZ2Utb25seSBzdGVwLiBUaGUgZXhpc3Rpbmcgb3duZXIgYWRtaW4gYmFja3VwIG9wZXJhdGlvbiBydW5zIGluc2lkZSB0aGUgYWRtaXR0ZWQgc2VydmluZyB3b3JrbG9hZCwgYW5kIGl0cyBzZXBhcmF0ZSBwcm90ZWN0ZWQgcmVzdG9yZSBkcmlsbCBydW5zIG9mZi1jbHVzdGVyIHdpdGggbmV0d29yayBkaXNhYmxlZCBhbmQgbm8gd29ya2xvYWQgY3JlZGVudGlhbHMuIFRob3NlIGV4YWN0IGN1c3RvZHkgb3BlcmF0aW9ucyBtdXN0IGJlIGVudW1lcmF0ZWQgaW4gdGhlIGZvdW5kZXIgcGFja2V0IGFsb25nc2lkZSB0aGUgb25lIERlcGxveW1lbnQgaW1hZ2UgY2hhbmdlLgoKT25jZSBiYWNrdXAvY29tcGF0aWJpbGl0eS9wcmVmbGlnaHQgZ2F0ZXMgcGFzcywgbWFudWFsbHkgcGluIHRoZSBleGlzdGluZyBBcmdvIEFwcGxpY2F0aW9uIHRvIHRoZSBleGFjdCByZXZpZXdlZCBzb3VyY2UgcmV2aXNpb24gYW5kIHN5bmMgb25seSBEZXBsb3ltZW50L2luZm9ybWVkLWRlY2lzaW9uIHdpdGggcHJ1bmUgZmFsc2UsIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW1tdXRhYmxlIHJ1bnRpbWUgQ29uZmlnTWFwIGFuZCBhbGwgb3RoZXIgcmVzb3VyY2VzLiBUaGUgc291cmNlIHBhdGNoIGNoYW5nZXMgb25seSB0aGUgaW1hZ2UgaW4gYWRtaXNzaW9uL3JlbmRlcmVkIERlcGxveW1lbnQ7IG5vIFNlY3JldCwgUFZDLCBwb2xpY3ksIGRhdGFiYXNlIG9yIGRpc3BhdGNoZXIgY2hhbmdlIGlzIGluY2x1ZGVkIHVubGVzcyBzZXBhcmF0ZWx5IGVudW1lcmF0ZWQgaW4gdGhlIGZpbmFsIHByb3Bvc2FsLiBPYnNlcnZlIGZpdmUtbWludXRlIHJlYWRpbmVzcyBhbmQgZXhhY3QgaW1hZ2UvY29uZmlnL3NjaGVtYS9waW5zLiBWZXJpZnkgbmF0aXZlIGxpZmVjeWNsZSBiaW5kaW5nIHVzaW5nIHN0YWJsZSBrZXlzIGFuZCBhbiBpc29sYXRlZCBpbnN0YWxsZWQtY2xpZW50IHByb2JlIGJhc2VkIG9uIGEgcmVhbCBwcm92aWRlciByZXNwb25zZSBjb250YW1pbmF0ZWQgd2l0aCBhZHZpc29yeSBwdXJwb3NlOyBwcm92ZSByZWZ1c2FsIGJlZm9yZSBhbnkgd3JpdGUuIERvIG5vdCBjb250YW1pbmF0ZSB0aGUgbGl2ZSBQRFAsIGNyZWF0ZSBodW1hbiBhcHByb3ZhbHMsIHJlYWQgY3JlZGVudGlhbHMgdGhyb3VnaCBDTEksIG9yIHJlcGxheSB1bmtub3duIGV4dGVybmFsIG91dGNvbWVzIGZvciB0ZXN0aW5nLgoKIyMgU2FtZS1zY2hlbWEgcm9sbGJhY2sgYW5kIGV2aWRlbmNlIHJldGVudGlvbgoKT24gc3RhcnR1cC9yZWFkaW5lc3MvYmluZGluZy9yZWZ1c2FsIGZhaWx1cmUsIHJldGFpbiBjdXJyZW50IGRhdGFiYXNlLCBjdXRvdmVyIGJhY2t1cCBhbmQgZXZlcnkgcG9zdC1jdXRvdmVyIGV2aWRlbmNlL3VuY2VydGFpbiBvdXRjb21lLiBSZXN0b3JlIG9ubHkgdGhlIHByaW9yN2Y1YzZjYiBpbWFnZSB0aHJvdWdoIHRoZSBzYW1lIG1hbnVhbCBBcmdvIG93bmVyIHBhdGgsIHJldGFpbmluZyBzY2hlbWE1IGFuZCBjdXJyZW50IERCL2NvbmZpZ3VyYXRpb247IG5ldmVyIHJlc3RvcmUgYW4gb2xkIHNuYXBzaG90IG92ZXIgY3VycmVudCBsaXZlIGV2aWRlbmNlIGp1c3QgdG8gcm9sbCB0aGUgaW1hZ2UgYmFjay4gVmVyaWZ5IG9sZCBpbWFnZS9SZWFkeTEsIHNhbWUgc2NoZW1hL2NvdW50cyBhbmQgcHJpb3IgYmVoYXZpb3IsIGFuZCByZWNvbmNpbGUgYW55IGV4dGVybmFsIGVmZmVjdHMgdXNpbmcgZXhpc3RpbmcgbGlmZWN5Y2xlL2F1ZGl0IG93bmVyc2hpcC4gVGhlIG5hcnJvdyBvdmVybGF5J3MgaWRlbnRpY2FsIHN0b3JlL3NjaGVtYS9kZXBlbmRlbmN5IGJ5dGVzIHBlcm1pdCB0aGlzIGltYWdlLW9ubHkgcm9sbGJhY2s7IGl0IGlzIG5vdCBwZXJtaXNzaW9uIGZvciBhIHNjaGVtYSBkb3duZ3JhZGUgb3IgZGF0YSBsb3NzLgoKUmVjb3JkIG9yaWdpbmFsL2FwcHJvdmVkL2V4ZWN1dGVkIHNvdXJjZSBhbmQgaW1hZ2UgcmV2aXNpb25zLCBiYWNrdXAvZHJpbGwvY3V0b3Zlci9yb2xsb3V0IHRpbWVzdGFtcHMsIGV4YWN0IGRpc3Bvc2l0aW9uIGFuZCBzYW5pdGl6ZWQgb3V0Y29tZXMgaW4gdGhlIGV4aXN0aW5nIHN1cGVydmlzZWQgdHJpYWwgcmVjZWlwdC4gRVVSMCBpbmNyZW1lbnRhbCBpbmZyYXN0cnVjdHVyZSBlc3RpbWF0ZSB1c2VzIGV4aXN0aW5nIHNlcnZpY2Uvc3RvcmFnZS9vcGVyYXRvciBsYW5lOyBwcm90ZWN0ZWQgdGVtcG9yYXJ5IGNvcHkvc3RvcmFnZSBjb25zdW1wdGlvbiBhbmQxNeKAkzMwbWludXRlIHJlY292ZXJ5IHRpbWUgcmVtYWluIG9wZXJhdGlvbmFsIGNvc3RzLiBObyBFVVIgaW5jaWRlbnQtbG9zcyBjYXAgb3IgYXV0b25vbXkgZ3JhbnQgaXMgaW5mZXJyZWQuIFRhc2tUMDQgY2Fubm90IGNsb3NlIHVudGlsIGFjdHVhbCBwdWJsaXNoZWQgaW1hZ2UsIGFwcHJvdmVkIG5hdGl2ZSBjb21wYXRpYmlsaXR5IGFuZCByZWxlYXNlIHBsdXMgcG9zdC1yZWxlYXNlIHJlZnVzYWwvYmluZGluZyBldmlkZW5jZSBhbGwgZXhpc3QuCgojIyBFeGFjdCByZWxlYXNlIGNhc2UgaWRlbnRpZmllcnMKClByb3Bvc2FsIGBJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MWAsIHRyaWFsIGBpbmZkLXB1cnBvc2UtMjAyNjEwMTEtcjFgLgpQcm90ZWN0ZWQgbmF0aXZlIHBhcmVudCBgL2RhdGEvcHJpdmF0ZS9wdXJwb3NlLW92ZXJsYXktcjFgIG11c3QgYmUgdW5pcXVlL25vbi1zeW1saW5rLCBvd25lZDEwMDAxIGFuZDA3MDAuIFRoZSBkcmlsbCBzbmFwc2hvdCBpcyBgZHJpbGwuc3FsaXRlYCwgdGhlIHJlZnJlc2hlZCBwcmUtY3V0b3ZlciBzbmFwc2hvdCBgY3V0b3Zlci5zcWxpdGVgLCBlYWNoIG5ldzA2MDAgZmlsZTsgcmVmdXNlIGFueSBleGlzdGluZyBvdXRwdXQuIE9mZi1jbHVzdGVyIGN1c3RvZHkgaXMgdGhlIGV4aXN0aW5nIGlnbm9yZWQgQ3VzdG9kaWFuIGAucHJpdmF0ZS1iYWNrdXBzLzIwMjYxMDExLWluZmQtcHVycG9zZS1yMWAgcGFyZW50MDcwMCwgZmlsZXMwNjAwOyBubyBzbmFwc2hvdCBpcyBhbiBldmlkZW5jZSBhdHRhY2htZW50LiBDaGVjayBvd25lciBVSUQsIG5vIHN5bWxpbmtzLCBpZ25vcmVkIHN0YXR1cyBhbmQgZnJlZSBjYXBhY2l0eSBmb3IgYm90aCBuYXRpdmUgc25hcHNob3RzIHBsdXMgaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgY29waWVzIGJlZm9yZSBtYWtpbmcgYW55IHNuYXBzaG90LgoKVGhlIGRpc3Bvc2FibGUgb2ZmbGluZSByZXN0b3JlIHZvbHVtZSBpcyBgaW5mZC1wdXJwb3NlLXIxLXJlc3RvcmUtMjAyNjEwMTFgOyByZWZ1c2UgYW4gZXhpc3Rpbmcgdm9sdW1lLCBjb3B5IG9ubHkgdGhlIHNlbGVjdGVkIGZyb3plbiBzbmFwc2hvdCwgYW5kIHJ1biBleGFjdCBwdWJsaXNoZWQgY2FuZGlkYXRlNzYzYyB3aXRoIG5ldHdvcmtub25lL3JlYWQtb25seSBpbWFnZSwxMjhNaUIvY29yZTEgYW5kIG5vIHJ1bnRpbWUgY29uZmlnL3Rva2VuIG1vdW50cy4gU1FMaXRlIGBQUkFHTUEgaW50ZWdyaXR5X2NoZWNrYCBtdXN0IHJldHVybiBgb2tgLCBgUFJBR01BIHVzZXJfdmVyc2lvbmAvU3RvcmUgaW5zcGVjdGlvbiBtdXN0IGFncmVlIHdpdGggYWN0dWFsIHNjaGVtYTUgc2VtYW50aWNzLCBhbmQgaW5zdGFsbGVkIGFkbWluIGNvdW50LW9ubHkgaW5zcGVjdGlvbiBtdXN0IG1hdGNoIHRoZSBmcm96ZW4gc25hcHNob3QuIFZhbGlkYXRlIHRoZSBhY3R1YWwgc2NoZW1hIHJlcHJlc2VudGF0aW9uIHJhdGhlciB0aGFuIGFzc3VtZSBQUkFHTUEgdXNlcl92ZXJzaW9uIGlzIHRoZSBzY2hlbWEgYXV0aG9yaXR5LiBObyBzeW50aGV0aWMgcmVzdG9yYXRpb24gaXMgcmVwb3J0ZWQgYXMgbmF0aXZlIHJlc3RvcmF0aW9uLiBOYXRpdmUgb3JpZ2luYWwvb2ZmLWNsdXN0ZXIgY29waWVzIHJlbWFpbiByZXRhaW5lZDsgb25seSB0aGUgZGlzcG9zYWJsZSByZXN0b3JlIGNvcHkvdm9sdW1lIG1heSBiZSByZW1vdmVkIHVuZGVyIHRoZSBleGFjdCBhcHByb3ZlZCBjbGVhbnVwIHNjb3BlLgo=" + }, + { + "digest": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101", + "media_type": "application/json", + "content_base64": "ewogICJpZCI6ICJJTkZELVJJU0stMjAyNjEwMTEtWkxJQi04NTA5MSIsCiAgImtpbmQiOiAib3duZXItdnVsbmVyYWJpbGl0eS1mb2xsb3ctdGhyb3VnaCIsCiAgIm93bmVyIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAidGFzayI6ICJJTkZELVdQLTAwMDktVDA1IiwKICAic3RhdHVzIjogIm9wZW4iLAogICJjcmVhdGVkIjogIjIwMjYtMTAtMTEiLAogICJyZXZpZXdfZHVlIjogIjIwMjYtMTAtMTgiLAogICJmaW5kaW5nIjogIkNWRS0yMDI2LTg1MDkxIiwKICAic2Nhbm5lcl9zZXZlcml0eSI6ICJNRURJVU0iLAogICJlc3RhdGVfcmlza19ncmFkZSI6IG51bGwsCiAgImFmZmVjdGVkX3BhY2thZ2UiOiAiemxpYiIsCiAgImluc3RhbGxlZCI6ICIxLjMuMi1yMCIsCiAgImZpeGVkIjogIjEuMy4yLXIxIiwKICAiYWN0dWFsX2N1cnJlbnRfYmFzZV9hbmRfY2FuZGlkYXRlX2ZpbmRpbmdzX2lkZW50aWNhbCI6IHRydWUsCiAgInNvdXJjZV9ldmlkZW5jZSI6ICJzZWN1cml0eS1zdW1tYXJ5Lmpzb24sIHRyaXZ5LWZ1bGwuanNvbiwgYmFzZS10cml2eS1mdWxsLmpzb24iLAogICJodW1hbl90ZW1wb3JhcnlfZGlzcG9zaXRpb24iOiAicGVuZGluZyIsCiAgImZvbGxvd190aHJvdWdoIjogIlByZXBhcmUgYSBzZXBhcmF0ZWx5IHNvdXJjZS1ib3VuZCBvZmZpY2lhbC1iYXNlL2RlcGVuZGVuY3kgcmVmcmVzaCB0aHJvdWdoIG5vcm1hbCBvd25lciBDSSwgdmVyaWZ5IGZ1bGwgc2NhbiBhbmQgcnVudGltZSBjb21wYXRpYmlsaXR5LCBvYnRhaW4gZGlzdGluY3QgbmF0aXZlIHJlbGVhc2UgYXBwcm92YWwgYmVmb3JlIHVwZGF0aW5nIHRoaXMgd29ya2xvYWQiLAogICJtYW51YWxfcmV2aWV3X2V4cGlyeSI6ICJEdWUgZGF0ZSByZXF1aXJlcyBvd25lciByZXZpZXcvZXNjYWxhdGlvbiBpZiB1bnJlc29sdmVkOyBubyBhdXRvbWF0aWMgcm9sbGJhY2svY29udHJvbGxlciBpcyBpbnN0YWxsZWQiLAogICJjbG9zZV9jb25kaXRpb24iOiAiVmVyaWZpZWQgaW5zdGFsbGVkIG5hdGl2ZSBmaXhlZCBwYWNrYWdlIGFuZCBmdWxsIHVuZmlsdGVyZWQgcmVzY2FuOyBwcmVzZXJ2ZSBvcmlnaW5hbCBkZXRlY3Rpb24gYW5kIGFueSBodW1hbiBkaXNwb3NpdGlvbiIKfQo=" + }, + { + "digest": "sha256:eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262", + "media_type": "application/json", + "content_base64": "ewogICJjYXB0dXJlZF9hdCI6ICIyMDI2LTEwLTExVDAxOjI1OjM4Ljc5MzU1NSswMDowMCIsCiAgIm5hdGl2ZV93b3JrbG9hZF9jaGFuZ2VkIjogZmFsc2UsCiAgIm5hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZCI6IGZhbHNlLAogICJhcmdvIjogewogICAgInVpZCI6ICI0OTk4NjhmMi1lYWJjLTRkZjQtYWUzMS1iODljZTU4ZDc1MGQiLAogICAgInJlcG9VUkwiOiAiaHR0cHM6Ly9mb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb24uZ2l0IiwKICAgICJ0YXJnZXRSZXZpc2lvbiI6ICI3ZGI4NDg1ZmZlY2RlYmZhYmQ3N2E5ZGFlYzA4NTU1M2M3NGJmMGJmIiwKICAgICJwYXRoIjogImRlcGxveS9saWZlY3ljbGUiLAogICAgImRlc3RpbmF0aW9uIjogewogICAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgInNlcnZlciI6ICJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiCiAgICB9LAogICAgImF1dG9tYXRlZCI6IGZhbHNlLAogICAgInN5bmMiOiB7CiAgICAgICJjb21wYXJlZFRvIjogewogICAgICAgICJkZXN0aW5hdGlvbiI6IHsKICAgICAgICAgICJuYW1lc3BhY2UiOiAiaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAgICAgInNlcnZlciI6ICJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiCiAgICAgICAgfSwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgInBhdGgiOiAiZGVwbG95L2xpZmVjeWNsZSIsCiAgICAgICAgICAicmVwb1VSTCI6ICJodHRwczovL2Zvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbi5naXQiLAogICAgICAgICAgInRhcmdldFJldmlzaW9uIjogIjdkYjg0ODVmZmVjZGViZmFiZDc3YTlkYWVjMDg1NTUzYzc0YmYwYmYiCiAgICAgICAgfQogICAgICB9LAogICAgICAicmV2aXNpb24iOiAiN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZiIsCiAgICAgICJzdGF0dXMiOiAiT3V0T2ZTeW5jIgogICAgfSwKICAgICJoZWFsdGgiOiB7CiAgICAgICJsYXN0VHJhbnNpdGlvblRpbWUiOiAiMjAyNi0xMC0xMFQyMzoxNDo1MloiLAogICAgICAic3RhdHVzIjogIkhlYWx0aHkiCiAgICB9CiAgfSwKICAibGl2ZV9yZWFkeV9yZXBsaWNhcyI6IDEsCiAgImFkbWl0dGVkX3VpZCI6ICJhNTg4ZTEwYS05MGQyLTQ4ODMtOTc1ZS02ZGQ4YjhmZWNhOTIiLAogICJzZXJ2ZXJfZHJ5X3J1bl9wYXNzZWQiOiB0cnVlLAogICJhZG1pdHRlZF9zcGVjX2V4YWN0bHlfbGl2ZV9wbHVzX2ltYWdlIjogdHJ1ZSwKICAiY2xpZW50X2RpZmZfZXhpdCI6IDEsCiAgImNsaWVudF9kaWZmX3NoYTI1NiI6ICJhNGJjMDI0YThjZWM2NThmODM1Mjg1ZWQ1MTk2NGUyZTA4NGVkYmFmMTAzZDQ1YTQ4Yjg5YzA5NTBiY2QzZTdkIiwKICAibm9kZV9hbGxvY2F0ZWRfcmVzb3VyY2VzIjogIihUb3RhbCBsaW1pdHMgbWF5IGJlIG92ZXIgMTAwIHBlcmNlbnQsIGkuZS4sIG92ZXJjb21taXR0ZWQuKVxuICBSZXNvdXJjZSAgICAgICAgICAgUmVxdWVzdHMgICAgICBMaW1pdHNcbiAgLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tICAgICAgLS0tLS0tXG4gIGNwdSAgICAgICAgICAgICAgICAzNDYwbSAoODYlKSAgIDM2MjAwbSAoOTA1JSlcbiAgbWVtb3J5ICAgICAgICAgICAgIDk0NzJNaSAoNTklKSAgMzI4OThNaSAoMjA1JSlcbiAgZXBoZW1lcmFsLXN0b3JhZ2UgIDAgKDAlKSAgICAgICAgMCAoMCUpXG4gIGh1Z2VwYWdlcy0xR2kgICAgICAwICgwJSkgICAgICAgIDAgKDAlKVxuICBodWdlcGFnZXMtMk1pICAgICAgMCAoMCUpICAgICAgICAwICgwJSkiLAogICJhbGxfY2hlY2tzX3Bhc3MiOiB0cnVlCn0K" + }, + { + "digest": "sha256:d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362", + "media_type": "application/json", + "content_base64": "ewogICJhcGlWZXJzaW9uIjogImFwcHMvdjEiLAogICJraW5kIjogIkRlcGxveW1lbnQiLAogICJtZXRhZGF0YSI6IHsKICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgImFyZ29jZC5hcmdvcHJvai5pby90cmFja2luZy1pZCI6ICJpbmZvcm1lZC1kZWNpc2lvbjphcHBzL0RlcGxveW1lbnQ6aW5mb3JtZWQtZGVjaXNpb24vaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAiaW5mb3JtZWQtZGVjaXNpb24uY291bG9tYi5zb2NpYWwvYWRtaXNzaW9uIjogImFwcHJvdmVkOyBJTkZELVdQLTAwMDcgY3V0b3ZlciIKICAgIH0sCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICJ1aWQiOiAiYTU4OGUxMGEtOTBkMi00ODgzLTk3NWUtNmRkOGI4ZmVjYTkyIgogIH0sCiAgInNwZWMiOiB7CiAgICAicHJvZ3Jlc3NEZWFkbGluZVNlY29uZHMiOiA2MDAsCiAgICAicmVwbGljYXMiOiAxLAogICAgInJldmlzaW9uSGlzdG9yeUxpbWl0IjogMTAsCiAgICAic2VsZWN0b3IiOiB7CiAgICAgICJtYXRjaExhYmVscyI6IHsKICAgICAgICAiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIKICAgICAgfQogICAgfSwKICAgICJzdHJhdGVneSI6IHsKICAgICAgInR5cGUiOiAiUmVjcmVhdGUiCiAgICB9LAogICAgInRlbXBsYXRlIjogewogICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgImFubm90YXRpb25zIjogewogICAgICAgICAgImluZm9ybWVkLWRlY2lzaW9uLmNvdWxvbWIuc29jaWFsL2FkbWlzc2lvbiI6ICJhcHByb3ZlZDsgSU5GRC1XUC0wMDA3IGN1dG92ZXIiCiAgICAgICAgfSwKICAgICAgICAibGFiZWxzIjogewogICAgICAgICAgImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6ICJyZXZpZXciLAogICAgICAgICAgImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24iCiAgICAgICAgfQogICAgICB9LAogICAgICAic3BlYyI6IHsKICAgICAgICAiYXV0b21vdW50U2VydmljZUFjY291bnRUb2tlbiI6IGZhbHNlLAogICAgICAgICJjb250YWluZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZW52IjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIklORkRfS0VZQ0FQRV9JU1NVRVIiLAogICAgICAgICAgICAgICAgInZhbHVlIjogImh0dHBzOi8va2MuY291bG9tYi5zb2NpYWwiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJJTkZEX0NPTlRBSU5FUl9DT05GSUciLAogICAgICAgICAgICAgICAgInZhbHVlIjogIi9jb25maWd1cmF0aW9uL3J1bnRpbWUuanNvbiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMiLAogICAgICAgICAgICAiaW1hZ2VQdWxsUG9saWN5IjogIklmTm90UHJlc2VudCIsCiAgICAgICAgICAgICJsaXZlbmVzc1Byb2JlIjogewogICAgICAgICAgICAgICJmYWlsdXJlVGhyZXNob2xkIjogMywKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiLAogICAgICAgICAgICAgICAgInNjaGVtZSI6ICJIVFRQIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAic3VjY2Vzc1RocmVzaG9sZCI6IDEsCiAgICAgICAgICAgICAgInRpbWVvdXRTZWNvbmRzIjogMgogICAgICAgICAgICB9LAogICAgICAgICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICAgICAgICJwb3J0cyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY29udGFpbmVyUG9ydCI6IDgwODAsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJodHRwIiwKICAgICAgICAgICAgICAgICJwcm90b2NvbCI6ICJUQ1AiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY29udGFpbmVyUG9ydCI6IDgwODEsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZCIsCiAgICAgICAgICAgICAgICAicHJvdG9jb2wiOiAiVENQIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInJlYWRpbmVzc1Byb2JlIjogewogICAgICAgICAgICAgICJmYWlsdXJlVGhyZXNob2xkIjogMywKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiLAogICAgICAgICAgICAgICAgInNjaGVtZSI6ICJIVFRQIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAic3VjY2Vzc1RocmVzaG9sZCI6IDEsCiAgICAgICAgICAgICAgInRpbWVvdXRTZWNvbmRzIjogMgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVzb3VyY2VzIjogewogICAgICAgICAgICAgICJsaW1pdHMiOiB7CiAgICAgICAgICAgICAgICAiY3B1IjogIjUwMG0iLAogICAgICAgICAgICAgICAgIm1lbW9yeSI6ICIyNTZNaSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJyZXF1ZXN0cyI6IHsKICAgICAgICAgICAgICAgICJjcHUiOiAiNW0iLAogICAgICAgICAgICAgICAgIm1lbW9yeSI6ICI2NE1pIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInNlY3VyaXR5Q29udGV4dCI6IHsKICAgICAgICAgICAgICAiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjogZmFsc2UsCiAgICAgICAgICAgICAgImNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgICAgICJkcm9wIjogWwogICAgICAgICAgICAgICAgICAiQUxMIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdGFydHVwUHJvYmUiOiB7CiAgICAgICAgICAgICAgImZhaWx1cmVUaHJlc2hvbGQiOiAxMiwKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiLAogICAgICAgICAgICAgICAgInNjaGVtZSI6ICJIVFRQIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAic3VjY2Vzc1RocmVzaG9sZCI6IDEsCiAgICAgICAgICAgICAgInRpbWVvdXRTZWNvbmRzIjogMgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGVybWluYXRpb25NZXNzYWdlUGF0aCI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJ0ZXJtaW5hdGlvbk1lc3NhZ2VQb2xpY3kiOiAiRmlsZSIsCiAgICAgICAgICAgICJ2b2x1bWVNb3VudHMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvZGF0YSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJkYXRhIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvcnVuL2luZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInJ1bnRpbWUiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi90bXAiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAidG1wIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvY29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJjb25maWd1cmF0aW9uIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9wb2xpY3kiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiY2FsbGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9hdWRpdCIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24va3ViZXJuZXRlcyIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJrdWJlcm5ldGVzLWFwaSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi93b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24vcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInNpdHRpbmctcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkbnNQb2xpY3kiOiAiQ2x1c3RlckZpcnN0IiwKICAgICAgICAicmVzdGFydFBvbGljeSI6ICJBbHdheXMiLAogICAgICAgICJzY2hlZHVsZXJOYW1lIjogImRlZmF1bHQtc2NoZWR1bGVyIiwKICAgICAgICAic2VjdXJpdHlDb250ZXh0IjogewogICAgICAgICAgImZzR3JvdXAiOiAxMDAwMSwKICAgICAgICAgICJmc0dyb3VwQ2hhbmdlUG9saWN5IjogIk9uUm9vdE1pc21hdGNoIiwKICAgICAgICAgICJydW5Bc0dyb3VwIjogMTAwMDEsCiAgICAgICAgICAicnVuQXNOb25Sb290IjogdHJ1ZSwKICAgICAgICAgICJydW5Bc1VzZXIiOiAxMDAwMSwKICAgICAgICAgICJzZWNjb21wUHJvZmlsZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiUnVudGltZURlZmF1bHQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAic2VydmljZUFjY291bnQiOiAicmV2aWV3IiwKICAgICAgICAic2VydmljZUFjY291bnROYW1lIjogInJldmlldyIsCiAgICAgICAgInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjogNDUsCiAgICAgICAgInZvbHVtZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImRhdGEiLAogICAgICAgICAgICAicGVyc2lzdGVudFZvbHVtZUNsYWltIjogewogICAgICAgICAgICAgICJjbGFpbU5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tZGF0YSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImVtcHR5RGlyIjogewogICAgICAgICAgICAgICJtZWRpdW0iOiAiTWVtb3J5IiwKICAgICAgICAgICAgICAic2l6ZUxpbWl0IjogIjE2TWkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogInJ1bnRpbWUiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZW1wdHlEaXIiOiB7CiAgICAgICAgICAgICAgIm1lZGl1bSI6ICJNZW1vcnkiLAogICAgICAgICAgICAgICJzaXplTGltaXQiOiAiMTZNaSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAidG1wIgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyOTIsCiAgICAgICAgICAgICAgIm5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tcnVudGltZS02YzIyMTg3OGQwNTEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogImNvbmZpZ3VyYXRpb24iCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJjYWxsZXIiLAogICAgICAgICAgICAicHJvamVjdGVkIjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI4OCwKICAgICAgICAgICAgICAic291cmNlcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgInNlcnZpY2VBY2NvdW50VG9rZW4iOiB7CiAgICAgICAgICAgICAgICAgICAgImF1ZGllbmNlIjogImZsZXgtYXV0aCIsCiAgICAgICAgICAgICAgICAgICAgImV4cGlyYXRpb25TZWNvbmRzIjogMzYwMCwKICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJ0b2tlbiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiYXVkaXQiLAogICAgICAgICAgICAic2VjcmV0IjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI4OCwKICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJrZXkiOiAidG9rZW4iLAogICAgICAgICAgICAgICAgICAicGF0aCI6ICJ0b2tlbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJzZWNyZXROYW1lIjogImluZm9ybWVkLWRlY2lzaW9uLWF1ZGl0IgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJrdWJlcm5ldGVzLWFwaSIsCiAgICAgICAgICAgICJwcm9qZWN0ZWQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJzb3VyY2VzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAic2VydmljZUFjY291bnRUb2tlbiI6IHsKICAgICAgICAgICAgICAgICAgICAiZXhwaXJhdGlvblNlY29uZHMiOiA2MDAsCiAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAidG9rZW4iCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJjb25maWdNYXAiOiB7CiAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAia2V5IjogImNhLmNydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImNhLmNydCIKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogImt1YmUtcm9vdC1jYS5jcnQiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjb25maWdNYXAiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjkyLAogICAgICAgICAgICAgICJuYW1lIjogImluZm9ybWVkLWRlY2lzaW9uLXdvcmtsb2FkLXJlZ2lzdHJ5IgogICAgICAgICAgICB9LAogICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZC1yZWdpc3RyeSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInNpdHRpbmctcmVxdWVzdGVyIiwKICAgICAgICAgICAgInNlY3JldCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyODgsCiAgICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAia2V5IjogImNsaWVudC1zZWNyZXQiLAogICAgICAgICAgICAgICAgICAicGF0aCI6ICJjbGllbnQtc2VjcmV0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm9wdGlvbmFsIjogZmFsc2UsCiAgICAgICAgICAgICAgInNlY3JldE5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tc2l0dGluZy1yZXF1ZXN0ZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9Cn0K" + }, + { + "digest": "sha256:830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1", + "media_type": "text/plain", + "content_base64": "IiIiUmVhZC1vbmx5IGV4YWN0IERlcGxveW1lbnQgYW5kIGFkbWlzc2lvbiBib3VuZGFyaWVzOyBubyBtdXRhdGlvbiBhdXRob3JpdHkuIiIiCmltcG9ydCBjb3B5CgpCQVNFID0gJ2Zvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MycKQ0FORElEQVRFID0gJ2Zvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6NzYzYzM2NDAyYzhiZTdjYzRjMWJkMWE2MTYyM2QxYWZmOTExNmQ1MjI0MTg3NzQyNWI0NWE3MDE4Y2MwODgzYScKCgpkZWYgcHJvamVjdGlvbih2YWx1ZSk6CiAgICB2YWx1ZSA9IGNvcHkuZGVlcGNvcHkodmFsdWUpCiAgICB2YWx1ZS5wb3AoJ3N0YXR1cycsIE5vbmUpCiAgICBmb3Iga2V5IGluICgncmVzb3VyY2VWZXJzaW9uJywgJ2dlbmVyYXRpb24nLCAnY3JlYXRpb25UaW1lc3RhbXAnLCAnbWFuYWdlZEZpZWxkcycpOgogICAgICAgIHZhbHVlWydtZXRhZGF0YSddLnBvcChrZXksIE5vbmUpCiAgICBmb3Iga2V5IGluICgna3ViZWN0bC5rdWJlcm5ldGVzLmlvL2xhc3QtYXBwbGllZC1jb25maWd1cmF0aW9uJywgJ2RlcGxveW1lbnQua3ViZXJuZXRlcy5pby9yZXZpc2lvbicpOgogICAgICAgIHZhbHVlWydtZXRhZGF0YSddLmdldCgnYW5ub3RhdGlvbnMnLCB7fSkucG9wKGtleSwgTm9uZSkKICAgIHJldHVybiB2YWx1ZQoKCmRlZiBjaGVja19jdXJyZW50KGN1cnJlbnQsIHNlYWxlZCk6CiAgICBpZiBwcm9qZWN0aW9uKGN1cnJlbnQpICE9IHNlYWxlZDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzZWFsZWQgbGl2ZSBVSUQgb3IgY29uZmlndXJhdGlvbiBjaGFuZ2VkJykKCgpkZWYgY2hlY2tfYWRtaXR0ZWQoYWRtaXR0ZWQsIHNlYWxlZCk6CiAgICBleHBlY3RlZCA9IGNvcHkuZGVlcGNvcHkoc2VhbGVkKQogICAgY29udGFpbmVycyA9IGV4cGVjdGVkWydzcGVjJ11bJ3RlbXBsYXRlJ11bJ3NwZWMnXVsnY29udGFpbmVycyddCiAgICBpZiBsZW4oY29udGFpbmVycykgIT0gMSBvciBjb250YWluZXJzWzBdWyduYW1lJ10gIT0gJ2luZm9ybWVkLWRlY2lzaW9uJyBvciBjb250YWluZXJzWzBdWydpbWFnZSddICE9IEJBU0U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5leHBlY3RlZCBiYXNlbGluZSBjb250YWluZXIgaWRlbnRpdHknKQogICAgY29udGFpbmVyc1swXVsnaW1hZ2UnXSA9IENBTkRJREFURQogICAgaWYgcHJvamVjdGlvbihhZG1pdHRlZCkgIT0gZXhwZWN0ZWQ6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYWRtaXNzaW9uIGNoYW5nZWQgY29uZmlndXJhdGlvbiBiZXlvbmQgdGhlIHNvbGUgaW1hZ2UgcGluJykKCgpkZWYgdHJhbnNwb3J0X3Jlc3VsdChleGl0X2NvZGUsIG91dHB1dCk6CiAgICBpbXBvcnQganNvbgogICAgdHJ5OgogICAgICAgIHZhbHVlID0ganNvbi5sb2FkcyhvdXRwdXQpCiAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgcmV0dXJuIHsnYWxsX2NoZWNrc19wYXNzJzogRmFsc2UsICdyZWFzb24nOiAnaW52YWxpZCB0cmFuc3BvcnQgcmVzdWx0J30KICAgIGlmIGV4aXRfY29kZSAhPSAwIG9yIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KSBvciB2YWx1ZS5nZXQoJ2FsbF9jaGVja3NfcGFzcycpIGlzIG5vdCBUcnVlOgogICAgICAgIHJldHVybiB7J2FsbF9jaGVja3NfcGFzcyc6IEZhbHNlLCAncmVhc29uJzogJ3JlYWQtb25seSBwcmVmbGlnaHQgcmVmdXNlZCd9CiAgICByZXR1cm4gdmFsdWUK" + }, + { + "digest": "sha256:c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834", + "media_type": "text/plain", + "content_base64": "IiIiUmVhZC1vbmx5IHJlZnJlc2g7IGV4YWN0IG9yaWdpbmFsIGNhcHR1cmUgcmVtYWlucyBpbW11dGFibGU7IG5ldmVyIGV4ZWN1dGUgY3V0b3Zlci4iIiIKaW1wb3J0IGFyZ3BhcnNlLGhhc2hsaWIsanNvbixzdWJwcm9jZXNzLHN5cwpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBjaGFuZ2VfZ3VhcmQgaW1wb3J0IHRyYW5zcG9ydF9yZXN1bHQKUk9PVD1QYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50CnA9YXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKTtwLmFkZF9hcmd1bWVudCgnLS1yZWNlaXB0LW91dHB1dCcsdHlwZT1QYXRoLHJlcXVpcmVkPVRydWUpO3AuYWRkX2FyZ3VtZW50KCctLXNvdXJjZS1yb290Jyx0eXBlPVBhdGgsZGVmYXVsdD1QYXRoKCcvaG9tZS93b3JzY2gvaW5mb3JtZWQtZGVjaXNpb24nKSk7YT1wLnBhcnNlX2FyZ3MoKQpvdXQ9YS5yZWNlaXB0X291dHB1dC5yZXNvbHZlKCkKaWYgbm90IGEucmVjZWlwdF9vdXRwdXQuaXNfYWJzb2x1dGUoKSBvciBvdXQ9PVJPT1Qgb3IgUk9PVCBpbiBvdXQucGFyZW50cyBvciBvdXQ9PWEuc291cmNlX3Jvb3QucmVzb2x2ZSgpIG9yIGEuc291cmNlX3Jvb3QucmVzb2x2ZSgpIGluIG91dC5wYXJlbnRzIG9yIG91dC5leGlzdHMoKToKIHJhaXNlIFN5c3RlbUV4aXQoJ3VuaXF1ZSBleGVjdXRpb24gcmVjZWlwdCBtdXN0IGJlIG91dHNpZGUgdGhlIHNlYWxlZCBwYWNrZXQnKQppbnB1dHM9anNvbi5sb2FkcygoUk9PVC8ncHJlZmxpZ2h0LWlucHV0cy5qc29uJykucmVhZF90ZXh0KCkpCmZvciByZWxhdGl2ZSxkaWdlc3QgaW4gaW5wdXRzWydwYWNrZXRfZmlsZXMnXS5pdGVtcygpOgogcGF0aD1ST09UL3JlbGF0aXZlCiBpZiBwYXRoLmlzX3N5bWxpbmsoKSBvciBoYXNobGliLnNoYTI1NihwYXRoLnJlYWRfYnl0ZXMoKSkuaGV4ZGlnZXN0KCkhPWRpZ2VzdDpyYWlzZSBTeXN0ZW1FeGl0KCdzZWFsZWQgaGVscGVyL2lucHV0IGJ5dGVzIGNoYW5nZWQnKQpmb3IgcmVsYXRpdmUsZGlnZXN0IGluIGlucHV0c1snb3duZXJfc291cmNlX2ZpbGVzJ10uaXRlbXMoKToKIHBhdGg9YS5zb3VyY2Vfcm9vdC9yZWxhdGl2ZQogaWYgcGF0aC5pc19zeW1saW5rKCkgb3IgaGFzaGxpYi5zaGEyNTYocGF0aC5yZWFkX2J5dGVzKCkpLmhleGRpZ2VzdCgpIT1kaWdlc3Q6cmFpc2UgU3lzdGVtRXhpdCgnb3duZXIgc291cmNlIGJ5dGVzIGNoYW5nZWQnKQpwcm9ncmFtPSJpbXBvcnQgc3VicHJvY2Vzcyxqc29uLGhhc2hsaWIsZGF0ZXRpbWUsc3lzLGNvcHkscmVcbmNhbmRpZGF0ZT1qc29uLmxvYWRzKENBTkRJREFURV9MSVRFUkFMKVxuc2VhbGVkX2Jhc2VsaW5lPWpzb24ubG9hZHMoU0VBTEVEX0xJVEVSQUwpXG5leGVjKEdVQVJEX0xJVEVSQUwpXG5kZWYgcnVuKGFyZ3MsZGF0YT1Ob25lKTpcbiBwPXN1YnByb2Nlc3MucnVuKGFyZ3MsaW5wdXQ9ZGF0YSx0ZXh0PVRydWUsY2FwdHVyZV9vdXRwdXQ9VHJ1ZSlcbiBpZiBwLnJldHVybmNvZGU6IHJhaXNlIFZhbHVlRXJyb3IoJ3JlYWQtb25seSBjb21tYW5kIGZhaWxlZDogJythcmdzWzFdKycgJythcmdzWzJdKVxuIHJldHVybiBwLnN0ZG91dFxubGl2ZT1qc29uLmxvYWRzKHJ1bihbJ2t1YmVjdGwnLCdnZXQnLCdkZXBsb3ltZW50JywnaW5mb3JtZWQtZGVjaXNpb24nLCctbicsJ2luZm9ybWVkLWRlY2lzaW9uJywnLW8nLCdqc29uJ10pKVxuY2hlY2tfY3VycmVudChsaXZlLHNlYWxlZF9iYXNlbGluZSlcbnNwZWM9bGl2ZVsnc3BlYyddOyBjcz1zcGVjWyd0ZW1wbGF0ZSddWydzcGVjJ11bJ2NvbnRhaW5lcnMnXTthc3NlcnQgbGVuKGNzKT09MSBhbmQgY3NbMF1bJ25hbWUnXT09J2luZm9ybWVkLWRlY2lzaW9uJ1xuZXhwZWN0ZWRfZW52PXsnSU5GRF9LRVlDQVBFX0lTU1VFUic6J2h0dHBzOi8va2MuY291bG9tYi5zb2NpYWwnLCdJTkZEX0NPTlRBSU5FUl9DT05GSUcnOicvY29uZmlndXJhdGlvbi9ydW50aW1lLmpzb24nfVxuYXNzZXJ0IGNzWzBdLmdldCgnZW52Jyk9PVt7J25hbWUnOidJTkZEX0tFWUNBUEVfSVNTVUVSJywndmFsdWUnOmV4cGVjdGVkX2VudlsnSU5GRF9LRVlDQVBFX0lTU1VFUiddfSx7J25hbWUnOidJTkZEX0NPTlRBSU5FUl9DT05GSUcnLCd2YWx1ZSc6ZXhwZWN0ZWRfZW52WydJTkZEX0NPTlRBSU5FUl9DT05GSUcnXX1dXG5hc3NlcnQgY3NbMF1bJ2ltYWdlJ109PSdmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMnXG5hc3NlcnQgc3BlY1sncmVwbGljYXMnXT09MSBhbmQgc3BlY1snc3RyYXRlZ3knXT09eyd0eXBlJzonUmVjcmVhdGUnfVxuYXNzZXJ0IG5leHQodiBmb3IgdiBpbiBzcGVjWyd0ZW1wbGF0ZSddWydzcGVjJ11bJ3ZvbHVtZXMnXSBpZiB2WyduYW1lJ109PSdjb25maWd1cmF0aW9uJylbJ2NvbmZpZ01hcCddWyduYW1lJ109PSdpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MSdcbmFzc2VydCBsaXZlWydzdGF0dXMnXS5nZXQoJ3JlYWR5UmVwbGljYXMnKT09MSBhbmQgbGl2ZVsnc3RhdHVzJ10uZ2V0KCd1cGRhdGVkUmVwbGljYXMnKT09MVxuc2VhbGVkPXsnYXBpVmVyc2lvbic6bGl2ZVsnYXBpVmVyc2lvbiddLCdraW5kJzpsaXZlWydraW5kJ10sJ21ldGFkYXRhJzp7azpjb3B5LmRlZXBjb3B5KHYpIGZvciBrLHYgaW4gbGl2ZVsnbWV0YWRhdGEnXS5pdGVtcygpIGlmIGsgbm90IGluICgncmVzb3VyY2VWZXJzaW9uJywnZ2VuZXJhdGlvbicsJ2NyZWF0aW9uVGltZXN0YW1wJywnbWFuYWdlZEZpZWxkcycpfSwnc3BlYyc6Y29weS5kZWVwY29weShzcGVjKX1cbmZvciBrZXkgaW4gKCdrdWJlY3RsLmt1YmVybmV0ZXMuaW8vbGFzdC1hcHBsaWVkLWNvbmZpZ3VyYXRpb24nLCdkZXBsb3ltZW50Lmt1YmVybmV0ZXMuaW8vcmV2aXNpb24nKTpzZWFsZWRbJ21ldGFkYXRhJ10uZ2V0KCdhbm5vdGF0aW9ucycse30pLnBvcChrZXksTm9uZSlcbmFkbWl0dGVkPWpzb24ubG9hZHMocnVuKFsna3ViZWN0bCcsJ2FwcGx5JywnLS1kcnktcnVuPXNlcnZlcicsJy1mJywnLScsJy1vJywnanNvbiddLGpzb24uZHVtcHMoY2FuZGlkYXRlKSkpXG5jaGVja19hZG1pdHRlZChhZG1pdHRlZCxzZWFsZWRfYmFzZWxpbmUpXG5hcHA9anNvbi5sb2FkcyhydW4oWydrdWJlY3RsJywnZ2V0JywnYXBwbGljYXRpb24nLCdpbmZvcm1lZC1kZWNpc2lvbicsJy1uJywnYXJnb2NkJywnLW8nLCdqc29uJ10pKVxuYXNzZXJ0IGFwcFsnc3BlYyddWydzb3VyY2UnXVsncGF0aCddPT0nZGVwbG95L2xpZmVjeWNsZScgYW5kIG5vdCBhcHBbJ3NwZWMnXS5nZXQoJ3N5bmNQb2xpY3knLHt9KS5nZXQoJ2F1dG9tYXRlZCcpXG5hcmdvPXsndWlkJzphcHBbJ21ldGFkYXRhJ11bJ3VpZCddLCdyZXBvVVJMJzphcHBbJ3NwZWMnXVsnc291cmNlJ11bJ3JlcG9VUkwnXSwndGFyZ2V0UmV2aXNpb24nOmFwcFsnc3BlYyddWydzb3VyY2UnXVsndGFyZ2V0UmV2aXNpb24nXSwncGF0aCc6YXBwWydzcGVjJ11bJ3NvdXJjZSddWydwYXRoJ10sJ2Rlc3RpbmF0aW9uJzphcHBbJ3NwZWMnXVsnZGVzdGluYXRpb24nXSwnYXV0b21hdGVkJzpGYWxzZSwnc3luYyc6YXBwLmdldCgnc3RhdHVzJyx7fSkuZ2V0KCdzeW5jJyksJ2hlYWx0aCc6YXBwLmdldCgnc3RhdHVzJyx7fSkuZ2V0KCdoZWFsdGgnKX1cbmV4cGVjdGVkX2FyZ289anNvbi5sb2FkcyhBUkdPX0xJVEVSQUwpXG5mb3Iga2V5IGluICgndWlkJywncmVwb1VSTCcsJ3RhcmdldFJldmlzaW9uJywncGF0aCcsJ2Rlc3RpbmF0aW9uJywnYXV0b21hdGVkJyk6XG4gYXNzZXJ0IGFyZ29ba2V5XT09ZXhwZWN0ZWRfYXJnb1trZXldXG5hc3NlcnQgYXJnb1snaGVhbHRoJ11bJ3N0YXR1cyddPT0nSGVhbHRoeSdcbmRpZmY9c3VicHJvY2Vzcy5ydW4oWydrdWJlY3RsJywnZGlmZicsJy1mJywnLSddLGlucHV0PWpzb24uZHVtcHMoY2FuZGlkYXRlKSx0ZXh0PVRydWUsY2FwdHVyZV9vdXRwdXQ9VHJ1ZSk7YXNzZXJ0IGRpZmYucmV0dXJuY29kZSBpbiAoMCwxKVxuIyBEaWZmIGNhbiBjb250YWluIG9ubHkgbm9uc2VjcmV0IERlcGxveW1lbnQgcmVmZXJlbmNlczsgcHJlc2VydmUgZGlnZXN0IHJhdGhlciB0aGFuIHJhdyBzdGRvdXQuXG5ub2RlPXJ1bihbJ2t1YmVjdGwnLCdkZXNjcmliZScsJ25vZGUnXSk7YWxsb2NhdGVkPXJlLnNlYXJjaChyJ0FsbG9jYXRlZCByZXNvdXJjZXM6Lio/Q1BVIFJlcXVlc3RzfEFsbG9jYXRlZCByZXNvdXJjZXM6Jyxub2RlLHJlLlMpXG5zZWN0aW9uPW5vZGUuc3BsaXQoJ0FsbG9jYXRlZCByZXNvdXJjZXM6JylbMV0uc3BsaXQoJ0V2ZW50czonKVswXSBpZiAnQWxsb2NhdGVkIHJlc291cmNlczonIGluIG5vZGUgZWxzZSAnJ1xubm9kZXM9anNvbi5sb2FkcyhydW4oWydrdWJlY3RsJywnZ2V0Jywnbm9kZXMnLCctbycsJ2pzb24nXSkpWydpdGVtcyddO2Fzc2VydCBsZW4obm9kZXMpPT0xXG5hbGxvYz1ub2Rlc1swXVsnc3RhdHVzJ11bJ2FsbG9jYXRhYmxlJ107Y3B1PWFsbG9jWydjcHUnXTtjcHVfbT1pbnQoY3B1WzotMV0pIGlmIGNwdS5lbmRzd2l0aCgnbScpIGVsc2UgaW50KGNwdSkqMTAwMFxucmVxdWVzdGVkPWludChyZS5zZWFyY2gocidjcHVcXHMrKFxcZCspbScsc2VjdGlvbikuZ3JvdXAoMSkpO2Fzc2VydCByZXF1ZXN0ZWQ8PWNwdV9tXG5yZWNlaXB0PXsnbm9kZV9hbGxvY2F0YWJsZV9jcHVfbSc6Y3B1X20sJ25vZGVfcmVxdWVzdGVkX2NwdV9tJzpyZXF1ZXN0ZWQsJ2NhcHR1cmVkX2F0JzpkYXRldGltZS5kYXRldGltZS5ub3coZGF0ZXRpbWUudGltZXpvbmUudXRjKS5pc29mb3JtYXQoKSwnbmF0aXZlX3dvcmtsb2FkX2NoYW5nZWQnOkZhbHNlLCduYXRpdmVfYmFja3VwX3Jlc3RvcmVfZXhlY3V0ZWQnOkZhbHNlLCdhcmdvJzphcmdvLCdsaXZlX3JlYWR5X3JlcGxpY2FzJzoxLCdhZG1pdHRlZF91aWQnOmFkbWl0dGVkWydtZXRhZGF0YSddWyd1aWQnXSwnc2VydmVyX2RyeV9ydW5fcGFzc2VkJzpUcnVlLCdhZG1pdHRlZF9zcGVjX2V4YWN0bHlfbGl2ZV9wbHVzX2ltYWdlJzpUcnVlLCdjbGllbnRfZGlmZl9leGl0JzpkaWZmLnJldHVybmNvZGUsJ2NsaWVudF9kaWZmX3NoYTI1Nic6aGFzaGxpYi5zaGEyNTYoZGlmZi5zdGRvdXQuZW5jb2RlKCkpLmhleGRpZ2VzdCgpLCdub2RlX2FsbG9jYXRlZF9yZXNvdXJjZXMnOnNlY3Rpb24uc3RyaXAoKSwnYWxsX2NoZWNrc19wYXNzJzpUcnVlfVxucHJpbnQoanNvbi5kdW1wcyhyZWNlaXB0KSlcbiIKZm9yIG1hcmtlcix2YWx1ZSBpbiBbKCdDQU5ESURBVEVfTElURVJBTCcsKFJPT1QvJ2NhbmRpZGF0ZS1kZXBsb3ltZW50Lmpzb24nKS5yZWFkX3RleHQoKSksKCdTRUFMRURfTElURVJBTCcsKFJPT1QvJ3NlYWxlZC1saXZlLWRlcGxveW1lbnQuanNvbicpLnJlYWRfdGV4dCgpKSwoJ0dVQVJEX0xJVEVSQUwnLChST09ULydjaGFuZ2VfZ3VhcmQucHknKS5yZWFkX3RleHQoKSksKCdBUkdPX0xJVEVSQUwnLGpzb24uZHVtcHMoanNvbi5sb2FkcygoUk9PVC8nbmF0aXZlLXByZWZsaWdodC5qc29uJykucmVhZF90ZXh0KCkpWydhcmdvJ10pKV06CiBwcm9ncmFtPXByb2dyYW0ucmVwbGFjZShtYXJrZXIscmVwcih2YWx1ZSkpCnByb2dyYW09J2ltcG9ydCB0cmFjZWJhY2ssanNvblxudHJ5OlxuJysnJy5qb2luKCcgICAgJytsaW5lKydcbicgZm9yIGxpbmUgaW4gcHJvZ3JhbS5zcGxpdGxpbmVzKCkpKyJleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgIHByaW50KGpzb24uZHVtcHMoeydhbGxfY2hlY2tzX3Bhc3MnOkZhbHNlLCdleGNlcHRpb25fdHlwZSc6dHlwZShlcnJvcikuX19uYW1lX18sJ2V4Y2VwdGlvbl9saW5lJzp0cmFjZWJhY2suZXh0cmFjdF90YihlcnJvci5fX3RyYWNlYmFja19fKVstMV0ubGluZW5vfSkpXG4iCnI9c3VicHJvY2Vzcy5ydW4oWydzc2gnLCdyYWlsaWFuY2UwMScsJ3B5dGhvbjMgLSddLGlucHV0PXByb2dyYW0sdGV4dD1UcnVlLGNhcHR1cmVfb3V0cHV0PVRydWUpCnJlc3VsdD10cmFuc3BvcnRfcmVzdWx0KHIucmV0dXJuY29kZSxyLnN0ZG91dCk7cmVzdWx0WydzZWFsZWRfcHJlZmxpZ2h0X2lucHV0c19zaGEyNTYnXT1oYXNobGliLnNoYTI1NigoUk9PVC8ncHJlZmxpZ2h0LWlucHV0cy5qc29uJykucmVhZF9ieXRlcygpKS5oZXhkaWdlc3QoKTtyZXN1bHRbJ2ZyZXNoX2V4ZWN1dGlvbl9yZWNlaXB0J109VHJ1ZQpvdXQud3JpdGVfdGV4dChqc29uLmR1bXBzKHJlc3VsdCxpbmRlbnQ9MikrJ1xuJyk7cHJpbnQoanNvbi5kdW1wcyhyZXN1bHQsaW5kZW50PTIpKTtzeXMuZXhpdCgwIGlmIHJlc3VsdC5nZXQoJ2FsbF9jaGVja3NfcGFzcycpIGlzIFRydWUgZWxzZSAxKQo=" + }, + { + "digest": "sha256:0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944", + "media_type": "application/json", + "content_base64": "ewogICJwYWNrZXRfZmlsZXMiOiB7CiAgICAiY2hhbmdlX2d1YXJkLnB5IjogIjgzMGY3NzcxYjVjN2QwYTI4NTE5NzNhYTY1YTAxYzZhYjQwYjg2NTcwZjA5MzNkOGFlYmI4OWY5NjY1Y2E3ZTEiLAogICAgInByZWZsaWdodC5weSI6ICJjMjA2YTFhOWI5ZDIzMmM2NTZjNmQ1N2ZiOTI0NzU0OWVlZmExM2IyNzVhNWRhNGQzOWI0NWE2Yzk5MDJjODM0IiwKICAgICJjYW5kaWRhdGUtZGVwbG95bWVudC5qc29uIjogIjcyMmE4ZTJkYzUyYmVjMjE3YmY5NjBlMjNiMmZkZGZjN2FjMjdkMzQzYWM4NzQzNzkwZTMxODNkYjgxYTZhMGUiLAogICAgInJvbGxiYWNrLWRlcGxveW1lbnQuanNvbiI6ICIzOWIzZjQzYmI4NGVmNDkyMWNjM2ExZmJjZGM0NDQ2MTA3NDFlZDg4MDkxNDlkOGY4ZjE3ZWQ4MDVmMjYyMTIxIiwKICAgICJzZWFsZWQtbGl2ZS1kZXBsb3ltZW50Lmpzb24iOiAiZDE4ZDI3MDYzZDA2ZjUzNWFlODg0ZWEwMWY5Njc0N2ZlMzAxNjg1NTE4YWI5NGIxY2JhMDcyYTFlMTUxOTM2MiIsCiAgICAibmF0aXZlLXByZWZsaWdodC5qc29uIjogImViNWY0MWFlZmI5NzY2NmJiMGMxMjc5NjE3ZTk1YTdjMDUwMTdhNjA5NDE1NjI0ZGFlZTcyNGM0OGI5MGQyNjIiCiAgfSwKICAib3duZXJfc291cmNlX2ZpbGVzIjogewogICAgImRlcGxveS9saWZlY3ljbGUvYWRtaXNzaW9uLmNhbmRpZGF0ZS5qc29uIjogIjkyMzgyYTU2YjM0OWMzYjg5NWU1ODA2ZTk3NTA4MjUyN2JiOTlkMWEwMDExNDBlNjlkODU3ZTViMDM5MWZhNTUiLAogICAgImRlcGxveS9saWZlY3ljbGUvc2VydmljZS5jYW5kaWRhdGUuanNvbiI6ICIzOGI3OGI5Y2JlZTVhZGU3NzUwYTU4ZDUxNTZjYTRjNTc3MzM1MmU5NDdhY2IzMDRlZTcxNGI1OWU3NDljZWI0IgogIH0KfQo=" + }, + { + "digest": "sha256:aa1d494e42491f0619f731a836c597df9178409887d734c166a8df81f8807a27", + "media_type": "application/json", + "content_base64": "ewogICJub2RlX2FsbG9jYXRhYmxlX2NwdV9tIjogNDAwMCwKICAibm9kZV9yZXF1ZXN0ZWRfY3B1X20iOiAzNDYwLAogICJjYXB0dXJlZF9hdCI6ICIyMDI2LTEwLTExVDAxOjMwOjMzLjY3NDM2MCswMDowMCIsCiAgIm5hdGl2ZV93b3JrbG9hZF9jaGFuZ2VkIjogZmFsc2UsCiAgIm5hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZCI6IGZhbHNlLAogICJhcmdvIjogewogICAgInVpZCI6ICI0OTk4NjhmMi1lYWJjLTRkZjQtYWUzMS1iODljZTU4ZDc1MGQiLAogICAgInJlcG9VUkwiOiAiaHR0cHM6Ly9mb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb24uZ2l0IiwKICAgICJ0YXJnZXRSZXZpc2lvbiI6ICI3ZGI4NDg1ZmZlY2RlYmZhYmQ3N2E5ZGFlYzA4NTU1M2M3NGJmMGJmIiwKICAgICJwYXRoIjogImRlcGxveS9saWZlY3ljbGUiLAogICAgImRlc3RpbmF0aW9uIjogewogICAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgInNlcnZlciI6ICJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiCiAgICB9LAogICAgImF1dG9tYXRlZCI6IGZhbHNlLAogICAgInN5bmMiOiB7CiAgICAgICJjb21wYXJlZFRvIjogewogICAgICAgICJkZXN0aW5hdGlvbiI6IHsKICAgICAgICAgICJuYW1lc3BhY2UiOiAiaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAgICAgInNlcnZlciI6ICJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiCiAgICAgICAgfSwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgInBhdGgiOiAiZGVwbG95L2xpZmVjeWNsZSIsCiAgICAgICAgICAicmVwb1VSTCI6ICJodHRwczovL2Zvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbi5naXQiLAogICAgICAgICAgInRhcmdldFJldmlzaW9uIjogIjdkYjg0ODVmZmVjZGViZmFiZDc3YTlkYWVjMDg1NTUzYzc0YmYwYmYiCiAgICAgICAgfQogICAgICB9LAogICAgICAicmV2aXNpb24iOiAiN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZiIsCiAgICAgICJzdGF0dXMiOiAiT3V0T2ZTeW5jIgogICAgfSwKICAgICJoZWFsdGgiOiB7CiAgICAgICJsYXN0VHJhbnNpdGlvblRpbWUiOiAiMjAyNi0xMC0xMFQyMzoxNDo1MloiLAogICAgICAic3RhdHVzIjogIkhlYWx0aHkiCiAgICB9CiAgfSwKICAibGl2ZV9yZWFkeV9yZXBsaWNhcyI6IDEsCiAgImFkbWl0dGVkX3VpZCI6ICJhNTg4ZTEwYS05MGQyLTQ4ODMtOTc1ZS02ZGQ4YjhmZWNhOTIiLAogICJzZXJ2ZXJfZHJ5X3J1bl9wYXNzZWQiOiB0cnVlLAogICJhZG1pdHRlZF9zcGVjX2V4YWN0bHlfbGl2ZV9wbHVzX2ltYWdlIjogdHJ1ZSwKICAiY2xpZW50X2RpZmZfZXhpdCI6IDEsCiAgImNsaWVudF9kaWZmX3NoYTI1NiI6ICIwNTA2ODI1YjQwOGJiMmM3YjlkY2IwMGE1ZWU2NTVkYzllYzIzYjA5YjMwOGQ0MmJiMDEzZDcyNjcyZjhmNDE1IiwKICAibm9kZV9hbGxvY2F0ZWRfcmVzb3VyY2VzIjogIihUb3RhbCBsaW1pdHMgbWF5IGJlIG92ZXIgMTAwIHBlcmNlbnQsIGkuZS4sIG92ZXJjb21taXR0ZWQuKVxuICBSZXNvdXJjZSAgICAgICAgICAgUmVxdWVzdHMgICAgICBMaW1pdHNcbiAgLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tICAgICAgLS0tLS0tXG4gIGNwdSAgICAgICAgICAgICAgICAzNDYwbSAoODYlKSAgIDM2MjAwbSAoOTA1JSlcbiAgbWVtb3J5ICAgICAgICAgICAgIDk0NzJNaSAoNTklKSAgMzI4OThNaSAoMjA1JSlcbiAgZXBoZW1lcmFsLXN0b3JhZ2UgIDAgKDAlKSAgICAgICAgMCAoMCUpXG4gIGh1Z2VwYWdlcy0xR2kgICAgICAwICgwJSkgICAgICAgIDAgKDAlKVxuICBodWdlcGFnZXMtMk1pICAgICAgMCAoMCUpICAgICAgICAwICgwJSkiLAogICJhbGxfY2hlY2tzX3Bhc3MiOiB0cnVlLAogICJzZWFsZWRfcHJlZmxpZ2h0X2lucHV0c19zaGEyNTYiOiAiMGJiZGFmNTY0NTlhYWVmM2MzNWQ3YjFiZjNhZDIwYmU2MjYwZjA0N2RmNmRkMWM1ZWI2MGFjMTc5NzE1MDk0NCIsCiAgImZyZXNoX2V4ZWN1dGlvbl9yZWNlaXB0IjogdHJ1ZQp9Cg==" + } + ] + }, + "publish": { + "version": 1, + "audience": { + "subjects": [], + "groups": [ + "net-kingdom-admins" + ] + } + }, + "review": { + "version": 1, + "options": { + "submitter": "state-hub", + "memo_class": "decision-record", + "review_group": "net-kingdom-admins", + "approval_intent": { + "action": "administer", + "principal": "informed-decision", + "purpose": "Approve exact image-only purpose overlay release plus protected native evidence backup/restore gates and explicit inherited fixable-medium owner follow-through; no unrelated grant.", + "target": { + "id": "INFD-WP-0009-T04/purpose-overlay-v1", + "type": "runtime-change", + "system": "railiance01" + } + } + } + } + } +] diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json new file mode 100644 index 0000000..18fb63c --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json @@ -0,0 +1,141 @@ +{ + "id": "infd-20261011-purpose-overlay-r1", + "version": 1, + "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", + "requested_act": "approve", + "binding_level": "organizational", + "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Protected real-data backup/restore and fresh sealed-source/UID/configuration gates required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "binding": { + "principal": { + "id": "pending-human-session", + "kind": "person", + "display_name": "Founder review" + }, + "target": { + "kind": "environment", + "id": "realm:kubernetes/railiance01/informed-decision", + "label": "Informed Decision image-only purpose hardening on railiance01", + "environment": "production" + }, + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedpreflight+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + }, + "step_kind": "approve", + "packet": [ + { + "item_id": "decision-packet-md", + "label": "decision-packet.md", + "hash": "sha256:7f6d8987f65dff479eeead67b7ca940ef44c22c1cdbdd6ca33fd732b824c8f02" + }, + { + "item_id": "proposal-json", + "label": "proposal.json", + "hash": "sha256:08c5573eaad05efd24b6df6737d33e7189543eb621f21704e38bab4326094914" + }, + { + "item_id": "candidate-admission-json", + "label": "candidate-admission.json", + "hash": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "item_id": "rollback-admission-json", + "label": "rollback-admission.json", + "hash": "sha256:22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "item_id": "candidate-deployment-json", + "label": "candidate-deployment.json", + "hash": "sha256:722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "item_id": "rollback-deployment-json", + "label": "rollback-deployment.json", + "hash": "sha256:39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "item_id": "published-verification-json", + "label": "published-verification.json", + "hash": "sha256:e304dd29571bf7d7b9f1db2ade0163dd39cfec012a5ce6986139f019f37e65a2" + }, + { + "item_id": "registry-proof-json", + "label": "registry-proof.json", + "hash": "sha256:5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "item_id": "security-summary-json", + "label": "security-summary.json", + "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "item_id": "trivy-full-json", + "label": "trivy-full.json", + "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "item_id": "sbom-cdx-json", + "label": "sbom.cdx.json", + "hash": "sha256:a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + { + "item_id": "check-installed-py", + "label": "check_installed.py", + "hash": "sha256:a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + { + "item_id": "native-backup-restore-protocol-md", + "label": "native-backup-restore-protocol.md", + "hash": "sha256:aa9758d4de587d14c6ce0fdaccd84002c5c5099425b9169ca7c972a86e9d3dec" + }, + { + "item_id": "inherited-vulnerability-follow-through-json", + "label": "inherited-vulnerability-follow-through.json", + "hash": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "item_id": "native-preflight-json", + "label": "native-preflight.json", + "hash": "sha256:eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "item_id": "sealed-live-deployment-json", + "label": "sealed-live-deployment.json", + "hash": "sha256:d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "item_id": "change-guard-py", + "label": "change_guard.py", + "hash": "sha256:830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1" + }, + { + "item_id": "preflight-py", + "label": "preflight.py", + "hash": "sha256:c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834" + }, + { + "item_id": "preflight-inputs-json", + "label": "preflight-inputs.json", + "hash": "sha256:0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944" + }, + { + "item_id": "fresh-preflight-validation-json", + "label": "fresh-preflight-validation.json", + "hash": "sha256:aa1d494e42491f0619f731a836c597df9178409887d734c166a8df81f8807a27" + } + ], + "highlights": [ + { + "id": "native-custody-rollout-and-known-medium", + "item_id": "decision-packet-md", + "note": "Protected real-data snapshot/restore and a brief Recreate restart require this separate native approval. Actual scan has one fixable inherited MEDIUM, not zero CVEs; exact owner follow-through due2026-10-18 is manual, with no automatic controller. Rollback preserves latestschema5DB and allnew/uncertain evidence. Synthetic transport tests are not native PDP authority proof.", + "required_ack": true, + "severity": "warning", + "locator": { + "kind": "section", + "heading": "Requested decision" + } + } + ], + "sealed": false, + "approval_id": null, + "approval_binding_digest": null +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md new file mode 100644 index 0000000..6e1f547 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md @@ -0,0 +1,40 @@ +# Protected native backup/restore and image-only release protocol + +Prepared protocol for `INFD-WP-0009-T04/purpose-overlay-v1`. No actual native backup, data export, restore, workload change or approval is recorded here. Candidate registry image identity remains a prerequisite; only after actual artifact proof may the founder approve one exact conditional protocol/rollout packet. The config-only7db8485 approval is outside this scope. + +## Preconditions and protected custody + +Freeze exact candidate and prior7f5c6cb image digests, source/installed policy hashes, current manually managed Argo Application/revision, runtime ConfigMap6c221878d051, Deployment UID/template/spec, schema5, policy package pins, database path `/data/private/review.sqlite`, PVC binding, replicas1/Recreate and stable keys for intended verification. Confirm no concurrent writer or custody change. Use fixed metadata; never fetch Secret objects or token values. A changed image/config/schema/owner invalidates the packet. Fresh resources/headroom and exact source/native server-dry-run/diff remain required. + +Backups are private evidence containing real decision records, not logs or packet attachments. Allocate a unique backup directory under existing protected PVC custody, owned10001, mode0700, snapshot file0600, no symlink/hardlink/reused output path. An off-cluster copy belongs only in the already established ignored `.private-backups/` custody with0700/0600 permissions; no Git, StateHub, public object store or terminal-content dump. Record only schema, integrity pass/fail, bounded table/state counts and protected receipt identifier; retain byte digests in protected custody if needed for internal copy identity. No credential, record payload or token fingerprint enters public evidence. + +## Approved online compatibility drill + +Within the explicit founder-approved action, run the existing base image's `informed-decision-admin backup --db /data/private/review.sqlite --output ` in the actual serving workload. This uses SQLite's backup API for a transactionally consistent snapshot; copying a live main database while ignoring WAL is prohibited. Suppress raw failures/output and retain only sanitized status. Observe schema/integrity and count-only metadata from the resulting snapshot, not record content. + +Transfer that consistent snapshot only into protected off-cluster custody through the existing authorized operator lane. The copy is real production data even in build mode. Verify private permissions, unique identity and protected internal digest agreement. Do not export mounted workload credentials or directory trees; copy only the exact snapshot. + +Create a separate private disposable restore volume/directory; retain the original snapshot unchanged. Run the exact published candidate with network disabled, no production ConfigMap/token mounts, read-only image and only that isolated volume writable. Override the service entrypoint with the owner's count-only administrative inspection/integrity check; do not start HTTP listeners, audit delivery, requester exchanges or approval operations. The current candidate changes policy.py only and retains the schema/store module bytes; still prove schema5, SQLite integrity and exact bounded counts before/after opening the restored copy. Refuse any migration/downgrade, lost/changed counts, unexpected write class or unknown outcome. Keep pending/uncertain submission and outbox states; never replay, discard or mark them delivered to green the drill. Cleanup only the disposable copy/volume after verified receipt; retain the original protected backup for the approved recovery interval. + +This step is actual native-data compatibility evidence once performed. Its previous synthetic fixture checks remain mechanism evidence and cannot be renamed native success. A failed drill stops rollout and remains a failed/unverified outcome in the same trial. + +## Fresh cutover snapshot and single-writer rollout + +After successful actual-data compatibility checks, create another unique SQLite-consistent online snapshot immediately before the image cutover, retaining its point-in-time schema/integrity/count receipt. This is an online transactional snapshot, not a claim that dispatchers or human writes were quiesced. Every later committed record remains in the live database; same-schema rollback retains that database and never restores the earlier snapshot over it. The narrow image-only update does not need dispatcher/configuration/PVC/temporary-pod changes or a schema cutover. If fresh verification shows a migration or any data-restoration requirement, stop and refine the proposal rather than applying this protocol. + +The existing Recreate rollout drains/stops the single old writer before starting the new image on the same PVC; the inherited single-writer lock independently refuses concurrent serving processes. Do not add an admin pod, scale-to-zero, dispatcher stop, network-policy rewrite or snapshot overwrite as an improvised image-only step. The existing owner admin backup operation runs inside the admitted serving workload, and its separate protected restore drill runs off-cluster with network disabled and no workload credentials. Those exact custody operations must be enumerated in the founder packet alongside the one Deployment image change. + +Once backup/compatibility/preflight gates pass, manually pin the existing Argo Application to the exact reviewed source revision and sync only Deployment/informed-decision with prune false, keeping the current immutable runtime ConfigMap and all other resources. The source patch changes only the image in admission/rendered Deployment; no Secret, PVC, policy, database or dispatcher change is included unless separately enumerated in the final proposal. Observe five-minute readiness and exact image/config/schema/pins. Verify native lifecycle binding using stable keys and an isolated installed-client probe based on a real provider response contaminated with advisory purpose; prove refusal before any write. Do not contaminate the live PDP, create human approvals, read credentials through CLI, or replay unknown external outcomes for testing. + +## Same-schema rollback and evidence retention + +On startup/readiness/binding/refusal failure, retain current database, cutover backup and every post-cutover evidence/uncertain outcome. Restore only the prior7f5c6cb image through the same manual Argo owner path, retaining schema5 and current DB/configuration; never restore an old snapshot over current live evidence just to roll the image back. Verify old image/Ready1, same schema/counts and prior behavior, and reconcile any external effects using existing lifecycle/audit ownership. The narrow overlay's identical store/schema/dependency bytes permit this image-only rollback; it is not permission for a schema downgrade or data loss. + +Record original/approved/executed source and image revisions, backup/drill/cutover/rollout timestamps, exact disposition and sanitized outcomes in the existing supervised trial receipt. EUR0 incremental infrastructure estimate uses existing service/storage/operator lane; protected temporary copy/storage consumption and15–30minute recovery time remain operational costs. No EUR incident-loss cap or autonomy grant is inferred. TaskT04 cannot close until actual published image, approved native compatibility and release plus post-release refusal/binding evidence all exist. + +## Exact release case identifiers + +Proposal `INFD-WP-0009-T04/purpose-overlay-v1`, trial `infd-purpose-20261011-r1`. +Protected native parent `/data/private/purpose-overlay-r1` must be unique/non-symlink, owned10001 and0700. The drill snapshot is `drill.sqlite`, the refreshed pre-cutover snapshot `cutover.sqlite`, each new0600 file; refuse any existing output. Off-cluster custody is the existing ignored Custodian `.private-backups/20261011-infd-purpose-r1` parent0700, files0600; no snapshot is an evidence attachment. Check owner UID, no symlinks, ignored status and free capacity for both native snapshots plus independently protected copies before making any snapshot. + +The disposable offline restore volume is `infd-purpose-r1-restore-20261011`; refuse an existing volume, copy only the selected frozen snapshot, and run exact published candidate763c with networknone/read-only image,128MiB/core1 and no runtime config/token mounts. SQLite `PRAGMA integrity_check` must return `ok`, `PRAGMA user_version`/Store inspection must agree with actual schema5 semantics, and installed admin count-only inspection must match the frozen snapshot. Validate the actual schema representation rather than assume PRAGMA user_version is the schema authority. No synthetic restoration is reported as native restoration. Native original/off-cluster copies remain retained; only the disposable restore copy/volume may be removed under the exact approved cleanup scope. diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json new file mode 100644 index 0000000..09fed88 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json @@ -0,0 +1,5 @@ +{ + "all_checks_pass": false, + "transport_exit": 1, + "stderr_sha256": "d9ea0351e38468c65d13bd68ece0c8e27acb654380ffee23111f76655edf8c49" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json new file mode 100644 index 0000000..973ff50 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json @@ -0,0 +1,9 @@ +{ + "all_checks_pass": false, + "metadata_diff": { + "category": "annotations", + "changed_keys": [ + "argocd.argoproj.io/tracking-id" + ] + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json new file mode 100644 index 0000000..10603b4 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json @@ -0,0 +1,43 @@ +{ + "captured_at": "2026-10-11T01:25:38.793555+00:00", + "native_workload_changed": false, + "native_backup_restore_executed": false, + "argo": { + "uid": "499868f2-eabc-4df4-ae31-b89ce58d750d", + "repoURL": "https://forgejo.coulomb.social/coulomb/informed-decision.git", + "targetRevision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "path": "deploy/lifecycle", + "destination": { + "namespace": "informed-decision", + "server": "https://kubernetes.default.svc" + }, + "automated": false, + "sync": { + "comparedTo": { + "destination": { + "namespace": "informed-decision", + "server": "https://kubernetes.default.svc" + }, + "source": { + "path": "deploy/lifecycle", + "repoURL": "https://forgejo.coulomb.social/coulomb/informed-decision.git", + "targetRevision": "7db8485ffecdebfabd77a9daec085553c74bf0bf" + } + }, + "revision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "status": "OutOfSync" + }, + "health": { + "lastTransitionTime": "2026-10-10T23:14:52Z", + "status": "Healthy" + } + }, + "live_ready_replicas": 1, + "admitted_uid": "a588e10a-90d2-4883-975e-6dd8b8feca92", + "server_dry_run_passed": true, + "admitted_spec_exactly_live_plus_image": true, + "client_diff_exit": 1, + "client_diff_sha256": "a4bc024a8cec658f835285ed51964e2e084edbaf103d45a48b89c0950bcd3e7d", + "node_allocated_resources": "(Total limits may be over 100 percent, i.e., overcommitted.)\n Resource Requests Limits\n -------- -------- ------\n cpu 3460m (86%) 36200m (905%)\n memory 9472Mi (59%) 32898Mi (205%)\n ephemeral-storage 0 (0%) 0 (0%)\n hugepages-1Gi 0 (0%) 0 (0%)\n hugepages-2Mi 0 (0%) 0 (0%)", + "all_checks_pass": true +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json new file mode 100644 index 0000000..5ab98df --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json @@ -0,0 +1,14 @@ +{ + "packet_files": { + "change_guard.py": "830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1", + "preflight.py": "c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834", + "candidate-deployment.json": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e", + "rollback-deployment.json": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121", + "sealed-live-deployment.json": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362", + "native-preflight.json": "eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + "owner_source_files": { + "deploy/lifecycle/admission.candidate.json": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55", + "deploy/lifecycle/service.candidate.json": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4" + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py new file mode 100644 index 0000000..8e1b0a1 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py @@ -0,0 +1,23 @@ +"""Read-only refresh; exact original capture remains immutable; never execute cutover.""" +import argparse,hashlib,json,subprocess,sys +from pathlib import Path +from change_guard import transport_result +ROOT=Path(__file__).resolve().parent +p=argparse.ArgumentParser();p.add_argument('--receipt-output',type=Path,required=True);p.add_argument('--source-root',type=Path,default=Path('/home/worsch/informed-decision'));a=p.parse_args() +out=a.receipt_output.resolve() +if not a.receipt_output.is_absolute() or out==ROOT or ROOT in out.parents or out==a.source_root.resolve() or a.source_root.resolve() in out.parents or out.exists(): + raise SystemExit('unique execution receipt must be outside the sealed packet') +inputs=json.loads((ROOT/'preflight-inputs.json').read_text()) +for relative,digest in inputs['packet_files'].items(): + path=ROOT/relative + if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest()!=digest:raise SystemExit('sealed helper/input bytes changed') +for relative,digest in inputs['owner_source_files'].items(): + path=a.source_root/relative + if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest()!=digest:raise SystemExit('owner source bytes changed') +program="import subprocess,json,hashlib,datetime,sys,copy,re\ncandidate=json.loads(CANDIDATE_LITERAL)\nsealed_baseline=json.loads(SEALED_LITERAL)\nexec(GUARD_LITERAL)\ndef run(args,data=None):\n p=subprocess.run(args,input=data,text=True,capture_output=True)\n if p.returncode: raise ValueError('read-only command failed: '+args[1]+' '+args[2])\n return p.stdout\nlive=json.loads(run(['kubectl','get','deployment','informed-decision','-n','informed-decision','-o','json']))\ncheck_current(live,sealed_baseline)\nspec=live['spec']; cs=spec['template']['spec']['containers'];assert len(cs)==1 and cs[0]['name']=='informed-decision'\nexpected_env={'INFD_KEYCAPE_ISSUER':'https://kc.coulomb.social','INFD_CONTAINER_CONFIG':'/configuration/runtime.json'}\nassert cs[0].get('env')==[{'name':'INFD_KEYCAPE_ISSUER','value':expected_env['INFD_KEYCAPE_ISSUER']},{'name':'INFD_CONTAINER_CONFIG','value':expected_env['INFD_CONTAINER_CONFIG']}]\nassert cs[0]['image']=='forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173'\nassert spec['replicas']==1 and spec['strategy']=={'type':'Recreate'}\nassert next(v for v in spec['template']['spec']['volumes'] if v['name']=='configuration')['configMap']['name']=='informed-decision-runtime-6c221878d051'\nassert live['status'].get('readyReplicas')==1 and live['status'].get('updatedReplicas')==1\nsealed={'apiVersion':live['apiVersion'],'kind':live['kind'],'metadata':{k:copy.deepcopy(v) for k,v in live['metadata'].items() if k not in ('resourceVersion','generation','creationTimestamp','managedFields')},'spec':copy.deepcopy(spec)}\nfor key in ('kubectl.kubernetes.io/last-applied-configuration','deployment.kubernetes.io/revision'):sealed['metadata'].get('annotations',{}).pop(key,None)\nadmitted=json.loads(run(['kubectl','apply','--dry-run=server','-f','-','-o','json'],json.dumps(candidate)))\ncheck_admitted(admitted,sealed_baseline)\napp=json.loads(run(['kubectl','get','application','informed-decision','-n','argocd','-o','json']))\nassert app['spec']['source']['path']=='deploy/lifecycle' and not app['spec'].get('syncPolicy',{}).get('automated')\nargo={'uid':app['metadata']['uid'],'repoURL':app['spec']['source']['repoURL'],'targetRevision':app['spec']['source']['targetRevision'],'path':app['spec']['source']['path'],'destination':app['spec']['destination'],'automated':False,'sync':app.get('status',{}).get('sync'),'health':app.get('status',{}).get('health')}\nexpected_argo=json.loads(ARGO_LITERAL)\nfor key in ('uid','repoURL','targetRevision','path','destination','automated'):\n assert argo[key]==expected_argo[key]\nassert argo['health']['status']=='Healthy'\ndiff=subprocess.run(['kubectl','diff','-f','-'],input=json.dumps(candidate),text=True,capture_output=True);assert diff.returncode in (0,1)\n# Diff can contain only nonsecret Deployment references; preserve digest rather than raw stdout.\nnode=run(['kubectl','describe','node']);allocated=re.search(r'Allocated resources:.*?CPU Requests|Allocated resources:',node,re.S)\nsection=node.split('Allocated resources:')[1].split('Events:')[0] if 'Allocated resources:' in node else ''\nnodes=json.loads(run(['kubectl','get','nodes','-o','json']))['items'];assert len(nodes)==1\nalloc=nodes[0]['status']['allocatable'];cpu=alloc['cpu'];cpu_m=int(cpu[:-1]) if cpu.endswith('m') else int(cpu)*1000\nrequested=int(re.search(r'cpu\\s+(\\d+)m',section).group(1));assert requested<=cpu_m\nreceipt={'node_allocatable_cpu_m':cpu_m,'node_requested_cpu_m':requested,'captured_at':datetime.datetime.now(datetime.timezone.utc).isoformat(),'native_workload_changed':False,'native_backup_restore_executed':False,'argo':argo,'live_ready_replicas':1,'admitted_uid':admitted['metadata']['uid'],'server_dry_run_passed':True,'admitted_spec_exactly_live_plus_image':True,'client_diff_exit':diff.returncode,'client_diff_sha256':hashlib.sha256(diff.stdout.encode()).hexdigest(),'node_allocated_resources':section.strip(),'all_checks_pass':True}\nprint(json.dumps(receipt))\n" +for marker,value in [('CANDIDATE_LITERAL',(ROOT/'candidate-deployment.json').read_text()),('SEALED_LITERAL',(ROOT/'sealed-live-deployment.json').read_text()),('GUARD_LITERAL',(ROOT/'change_guard.py').read_text()),('ARGO_LITERAL',json.dumps(json.loads((ROOT/'native-preflight.json').read_text())['argo']))]: + program=program.replace(marker,repr(value)) +program='import traceback,json\ntry:\n'+''.join(' '+line+'\n' for line in program.splitlines())+"except Exception as error:\n print(json.dumps({'all_checks_pass':False,'exception_type':type(error).__name__,'exception_line':traceback.extract_tb(error.__traceback__)[-1].lineno}))\n" +r=subprocess.run(['ssh','railiance01','python3 -'],input=program,text=True,capture_output=True) +result=transport_result(r.returncode,r.stdout);result['sealed_preflight_inputs_sha256']=hashlib.sha256((ROOT/'preflight-inputs.json').read_bytes()).hexdigest();result['fresh_execution_receipt']=True +out.write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2));sys.exit(0 if result.get('all_checks_pass') is True else 1) diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json new file mode 100644 index 0000000..88a7f6c --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json @@ -0,0 +1,50 @@ +{ + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "trial_id": "infd-purpose-20261011-r1", + "state": "prepared-unapproved", + "target": "realm:kubernetes/railiance01/informed-decision", + "authority": "ADMINISTER; activation APPROVED only upon exact founder disposition", + "candidate_image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "published_source_revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "prior_image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "prior_argo_revision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "native_object": { + "apiVersion": "apps/v1", + "kind": "Deployment", + "namespace": "informed-decision", + "name": "informed-decision", + "uid": "a588e10a-90d2-4883-975e-6dd8b8feca92" + }, + "argo_application_uid": "499868f2-eabc-4df4-ae31-b89ce58d750d", + "source_gate": "Exact committed owner source must contain the two approved candidate file hashes in preflight-inputs.json; source preparation is not native approval", + "sync_scope": [ + "apps:Deployment:informed-decision" + ], + "prune": false, + "automated_sync": false, + "runtime_configmap": "informed-decision-runtime-6c221878d051", + "schema": 5, + "requested_operations": [ + "Protected SQLite-consistent native backup and independently protected off-cluster custody", + "Offline restore/integrity/count comparison on a private disposable volume with exact candidate, no runtime tokens/config/network", + "Refresh a consistent pre-cutover snapshot, retain private copies and count-only/hash receipts", + "Pin existing manual Argo Application to exact approved owner source and manually sync only existing Deployment image", + "Verify health/readiness/image/module/installed fail-closed purpose checks and retained schema/count evidence; recover to prior same-schema image if needed" + ], + "execute_by": "2026-10-12T23:59:59Z", + "temporary_vulnerability_review_due": "2026-10-18", + "known_scan_findings": "0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, actual currentbase+candidate findings identical", + "vulnerability_record": "INFD-RISK-20261011-ZLIB-85091 / INFD-WP-0009-T05", + "cost_estimate_EUR": 0, + "cost_limits": "No new recurring infrastructure; private backup storage and attended engineering/recovery time unpriced, not an autopilot cost grant", + "risk_estimates": [ + "Brief Recreate service interruption; no concurrent new writer/surge", + "Private evidence snapshot custody and disposal errors; no snapshots/tokens in public evidence", + "Candidate purpose refusal may expose callers relying on advisory results as binding", + "Inherited known fixable MEDIUM remains until separately approved owner remediation", + "Existing Argo OutOfSync baseline is retained; no whole-app sync or unrelated repairs permitted" + ], + "rollback": "Manual Argo source pin back to7db8485 and scoped Deployment-only sync to7f5c image; retain current schema5 database and all post-cutover evidence, never restore older snapshot over live writes", + "native_executed": false, + "human_approval": false +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json new file mode 100644 index 0000000..1350c06 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json @@ -0,0 +1,58 @@ +{ + "proposal": "INFD-WP-0009-T04/purpose-overlay-v1", + "observed_at": "2026-10-11T01:24:01.985128+00:00", + "native_owner_publication_job": { + "id": 11484, + "name": "publish-candidate", + "head_branch": "main", + "head_sha": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "run_number": 3, + "event": "push", + "display_title": "Prepare readable overlay context with the admitted legacy builder", + "status": "success", + "workflow_id": "purpose-overlay-image.yaml", + "url": "https://forgejo.coulomb.social/coulomb/informed-decision/actions/runs/3", + "created_at": "2026-10-11T01:20:59Z", + "updated_at": "2026-10-11T01:21:08Z", + "run_started_at": "2026-10-11T01:20:59Z" + }, + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "source_revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "policy_sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62", + "registry_proof_sha256": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213", + "source_render_change_only": "Deployment/informed-decision spec.template.spec.containers[0].image", + "runtime_configmap_unchanged": "informed-decision-runtime-6c221878d051", + "installed_image_execution": { + "immutable_registry_artifact_pulled_anonymously": true, + "UID": 10001, + "GID": 10001, + "policy_file_UID": 0, + "policy_file_mode": "0644", + "purpose_variants": 10, + "binding_forms_allowed": 2, + "advisory_or_malformed_refused": 8, + "network": "none", + "read_only": true, + "synthetic_transport": true, + "native_PDP_test": false + }, + "scan_summary_sha256": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44", + "historical_failed_runs_retained": [ + "f66de505/task11482/run1", + "acecad887/task11483/run2" + ], + "native_hosting_changed": false, + "native_backup_restore_executed": false, + "human_approval": false, + "evidence_file_sha256": { + "image-manifest.json": "978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb", + "image-config.json": "4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10", + "base-image-config.json": "b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00", + "registry-proof.json": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213", + "trivy-full.json": "f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e", + "sbom.cdx.json": "a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d", + "base-trivy-full.json": "d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80", + "check_installed.py": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad", + "verify_registry.py": "413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4" + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json new file mode 100644 index 0000000..918ff6d --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json @@ -0,0 +1,47 @@ +{ + "image_digest": "sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "source_revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "base_image_digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "base_layer_bytes_identical": true, + "layer_media_type_conversion": "OCI gzip to Docker gzip, same digest and size", + "base_runtime_config_semantics_identical": true, + "legacy_builder_config_additions": { + "Hostname": "", + "Domainname": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Cmd": null, + "Volumes": null, + "OnBuild": null, + "Image": "sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883" + }, + "base_rootfs_prefix_identical": true, + "overlay_regular_files": [ + "opt/venv/lib/python3.12/site-packages/informed_decision/policy.py" + ], + "overlay_directories": [ + "opt", + "opt/venv", + "opt/venv/lib", + "opt/venv/lib/python3.12", + "opt/venv/lib/python3.12/site-packages", + "opt/venv/lib/python3.12/site-packages/informed_decision" + ], + "policy_sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62", + "policy_mode": "0644", + "base_user": "10001:10001", + "source_scope_labels": { + "org.opencontainers.image.revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "org.opencontainers.image.base.digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "social.coulomb.source.policy.sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62", + "social.coulomb.release.scope": "INFD-WP-0009-T04/purpose-overlay-v1" + }, + "registry_read_route": "anonymous public scoped bearer challenge, no token retention", + "image_executed": false, + "native_workload_changed": false, + "native_backup_restore_executed": false +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json new file mode 100644 index 0000000..a474665 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json @@ -0,0 +1,52 @@ +{ + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "policy": { + "origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080", + "package": "informed-decision.compact-sitting", + "version": "v13", + "package_digest": "sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873", + "pod_name": "flex-auth-informed-decision-sitting" + }, + "keycape_egress_ips": [ + "92.205.62.239" + ], + "storage_class": "local-path", + "ordinary_approval_ids": [ + "2ce76d7f-01c3-4b63-8476-8d1230679769", + "c2af4bcf-15b4-4305-aac1-acc7e4dcb099", + "dc22666a-d5d7-46bc-9490-ebe9fe09dc38" + ], + "lifecycle_policy": { + "package": "informed-decision.lifecycle", + "version": "v2", + "package_digest": "sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c", + "origin": "http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080", + "pod_name": "flex-auth-informed-decision-lifecycle" + }, + "lifecycle_delivery": true, + "intake_attributes": true, + "intake_delivery": { + "hub_origin": "http://state-hub.state-hub.svc.cluster.local:8000" + }, + "workload_api": { + "registries_configmap": "informed-decision-workload-registry", + "peers": [ + { + "namespace": "state-hub", + "app": "state-hub" + } + ], + "api_egress": [ + { + "ip": "10.43.0.1", + "port": 443 + }, + { + "ip": "92.205.62.239", + "port": 6443 + } + ], + "intake": true, + "lifecycle": true + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json new file mode 100644 index 0000000..7459f8f --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json @@ -0,0 +1,267 @@ +{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover", + "argocd.argoproj.io/tracking-id": "informed-decision:apps/Deployment:informed-decision/informed-decision" + }, + "name": "informed-decision", + "namespace": "informed-decision" + }, + "spec": { + "progressDeadlineSeconds": 600, + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision" + } + }, + "strategy": { + "type": "Recreate" + }, + "template": { + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "labels": { + "app.kubernetes.io/component": "review", + "app.kubernetes.io/name": "informed-decision" + } + }, + "spec": { + "automountServiceAccountToken": false, + "containers": [ + { + "env": [ + { + "name": "INFD_KEYCAPE_ISSUER", + "value": "https://kc.coulomb.social" + }, + { + "name": "INFD_CONTAINER_CONFIG", + "value": "/configuration/runtime.json" + } + ], + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "livenessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "name": "informed-decision", + "ports": [ + { + "containerPort": 8080, + "name": "http" + }, + { + "containerPort": 8081, + "name": "workload" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "resources": { + "limits": { + "cpu": "500m", + "memory": "256Mi" + }, + "requests": { + "cpu": "5m", + "memory": "64Mi" + } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true + }, + "startupProbe": { + "failureThreshold": 12, + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "volumeMounts": [ + { + "mountPath": "/data", + "name": "data" + }, + { + "mountPath": "/run/informed-decision", + "name": "runtime" + }, + { + "mountPath": "/tmp", + "name": "tmp" + }, + { + "mountPath": "/configuration", + "name": "configuration", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/policy", + "name": "caller", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/audit", + "name": "audit", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/kubernetes", + "name": "kubernetes-api", + "readOnly": true + }, + { + "mountPath": "/workload-registry", + "name": "workload-registry", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/requester", + "name": "sitting-requester", + "readOnly": true + } + ] + } + ], + "securityContext": { + "fsGroup": 10001, + "fsGroupChangePolicy": "OnRootMismatch", + "runAsGroup": 10001, + "runAsNonRoot": true, + "runAsUser": 10001, + "seccompProfile": { + "type": "RuntimeDefault" + } + }, + "serviceAccountName": "review", + "terminationGracePeriodSeconds": 45, + "volumes": [ + { + "name": "data", + "persistentVolumeClaim": { + "claimName": "informed-decision-data" + } + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "runtime" + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "tmp" + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-runtime-6c221878d051" + }, + "name": "configuration" + }, + { + "name": "caller", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "audience": "flex-auth", + "expirationSeconds": 3600, + "path": "token" + } + } + ] + } + }, + { + "name": "audit", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "token", + "path": "token" + } + ], + "secretName": "informed-decision-audit" + } + }, + { + "name": "kubernetes-api", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "expirationSeconds": 600, + "path": "token" + } + }, + { + "configMap": { + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ], + "name": "kube-root-ca.crt" + } + } + ] + } + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-workload-registry" + }, + "name": "workload-registry" + }, + { + "name": "sitting-requester", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "client-secret", + "path": "client-secret" + } + ], + "optional": false, + "secretName": "informed-decision-sitting-requester" + } + } + ] + } + } + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json new file mode 100644 index 0000000..89f9039 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json @@ -0,0 +1,2560 @@ +{ + "$schema": "http://cyclonedx.org/schema/bom-1.7.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.7", + "serialNumber": "urn:uuid:3eaaa94b-5129-41f3-82f2-f8f58ac5239a", + "version": 1, + "metadata": { + "timestamp": "2026-10-11T01:22:33+00:00", + "tools": { + "components": [ + { + "type": "application", + "manufacturer": { + "name": "Aqua Security Software Ltd." + }, + "group": "aquasecurity", + "name": "trivy", + "version": "0.74.0" + } + ] + }, + "component": { + "bom-ref": "pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision", + "type": "container", + "name": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "purl": "pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision", + "properties": [ + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + { + "name": "aquasecurity:trivy:ImageID", + "value": "sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779" + }, + { + "name": "aquasecurity:trivy:Labels:org.opencontainers.image.base.digest", + "value": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173" + }, + { + "name": "aquasecurity:trivy:Labels:org.opencontainers.image.revision", + "value": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168" + }, + { + "name": "aquasecurity:trivy:Labels:social.coulomb.release.scope", + "value": "INFD-WP-0009-T04/purpose-overlay-v1" + }, + { + "name": "aquasecurity:trivy:Labels:social.coulomb.source.policy.sha256", + "value": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62" + }, + { + "name": "aquasecurity:trivy:Reference", + "value": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a" + }, + { + "name": "aquasecurity:trivy:RepoDigest", + "value": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a" + }, + { + "name": "aquasecurity:trivy:SchemaVersion", + "value": "2" + }, + { + "name": "aquasecurity:trivy:Size", + "value": "88258048" + } + ] + } + }, + "components": [ + { + "bom-ref": "5b71299e-3c0c-4c4f-bd29-865fb14e1758", + "type": "operating-system", + "name": "alpine", + "version": "3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:Class", + "value": "os-pkgs" + }, + { + "name": "aquasecurity:trivy:Type", + "value": "alpine" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1", + "type": "library", + "name": ".python-rundeps", + "version": "20260901.001029", + "hashes": [ + { + "alg": "SHA-1", + "content": "51d0c1e7d88a414345799f0309185c625013ef32" + } + ], + "purl": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": ".python-rundeps@20260901.001029" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "alpine-baselayout-data", + "version": "3.7.2-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "alpine-baselayout-data@3.7.2-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "alpine-baselayout" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.7.2-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "alpine-baselayout", + "version": "3.7.2-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "f0fcfdc2f4da058af6473bc45c4eab62916225b2" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "alpine-baselayout@3.7.2-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "alpine-baselayout" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.7.2-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "alpine-keys", + "version": "2.6-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "d8d6b80e53c059a77e4915da78ba964f3ffea240" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "alpine-keys@2.6-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "alpine-keys" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "2.6-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "alpine-release", + "version": "3.24.1-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "bc6912a25cdc7733e0035ed509eceaa4026946e3" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "alpine-release@3.24.1-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "alpine-base" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.24.1-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "apk-tools", + "version": "3.0.6-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "043333589798a1f52e09ae63f026c6c8fa676d34" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "apk-tools@3.0.6-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "apk-tools" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.0.6-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Sören Tempel " + }, + "name": "busybox-binsh", + "version": "1.37.0-r31", + "hashes": [ + { + "alg": "SHA-1", + "content": "5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "busybox-binsh@1.37.0-r31" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "busybox" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.37.0-r31" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Sören Tempel " + }, + "name": "busybox", + "version": "1.37.0-r31", + "hashes": [ + { + "alg": "SHA-1", + "content": "b5405ebc02f7dd8be95b6265c54b243d5456ab8f" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "busybox@1.37.0-r31" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "busybox" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.37.0-r31" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "ca-certificates-bundle", + "version": "20260611-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "c9534a03750bdfae341f10969016090fc11febbd" + } + ], + "licenses": [ + { + "license": { + "id": "MPL-2.0" + } + }, + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "ca-certificates-bundle@20260611-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ca-certificates" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "20260611-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "ca-certificates", + "version": "20260611-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "8f2a04abeb54b331e2970a0a0dffb7bd6bdde567" + } + ], + "licenses": [ + { + "license": { + "id": "MPL-2.0" + } + }, + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "ca-certificates@20260611-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ca-certificates" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "20260611-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "gdbm", + "version": "1.26-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "619493d8124fe49a8ee1d8f7a1372cf7e3977337" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-3.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "gdbm@1.26-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "gdbm" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.26-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "keyutils-libs", + "version": "1.6.3-r4", + "hashes": [ + { + "alg": "SHA-1", + "content": "b7331c96f077fc3522ee4361a441d1097204cd90" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-or-later" + } + }, + { + "license": { + "id": "LGPL-2.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "keyutils-libs@1.6.3-r4" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "keyutils" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.6.3-r4" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "krb5-conf", + "version": "1.0-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "40a11e0690a59e110367b62a80661024e9942a2d" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "krb5-conf@1.0-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "krb5-conf" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.0-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "krb5-libs", + "version": "1.22.2-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "ef02346e21b817ff379e4601e5b1fc9760e5e31a" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "krb5-libs@1.22.2-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "krb5" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.22.2-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libapk", + "version": "3.0.6-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "523a8f58104589f74f743d501c81bf6517155378" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libapk@3.0.6-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "apk-tools" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.0.6-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libbz2", + "version": "1.0.8-r6", + "hashes": [ + { + "alg": "SHA-1", + "content": "08566ba5c7af97c25474be8b24e8b48f0116b67d" + } + ], + "licenses": [ + { + "license": { + "name": "bzip-2-1.0.6" + } + } + ], + "purl": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libbz2@1.0.8-r6" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "bzip2" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.0.8-r6" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libcom_err", + "version": "1.47.4-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-or-later" + } + }, + { + "license": { + "id": "LGPL-2.0-or-later" + } + }, + { + "license": { + "id": "BSD-3-Clause" + } + }, + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libcom_err@1.47.4-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "e2fsprogs" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.47.4-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libcrypto3", + "version": "3.5.8-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "purl": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libcrypto3@3.5.8-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "openssl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.5.8-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libffi", + "version": "3.5.2-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libffi@3.5.2-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libffi" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.5.2-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Carlo Landmeter " + }, + "name": "libintl", + "version": "1.0-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "282d6642ccac87237e43a864159d73cf5abe7550" + } + ], + "licenses": [ + { + "license": { + "id": "LGPL-2.1-or-later" + } + } + ], + "purl": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libintl@1.0-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "gettext" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.0-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Milan P. Stanić " + }, + "name": "libncursesw", + "version": "6.6_p20260516-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "9f318e6e324d6827274829194cf6ac6afbaded12" + } + ], + "licenses": [ + { + "license": { + "name": "X-11" + } + } + ], + "purl": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libncursesw@6.6_p20260516-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ncurses" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "6.6_p20260516-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "name": "libnsl", + "version": "2.0.1-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "5194adbf26560b52be318481a7af294ab05fd795" + } + ], + "licenses": [ + { + "license": { + "id": "LGPL-2.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libnsl@2.0.1-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libnsl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "2.0.1-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Milan P. Stanić " + }, + "name": "libpanelw", + "version": "6.6_p20260516-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "149bdc434232ed11fc5bb975ba519a07154a6f56" + } + ], + "licenses": [ + { + "license": { + "name": "X-11" + } + } + ], + "purl": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libpanelw@6.6_p20260516-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ncurses" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "6.6_p20260516-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libssl3", + "version": "3.5.8-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "5f9b1e55d821953d2e2b1db322dad70a3b5041ea" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "purl": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libssl3@3.5.8-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "openssl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.5.8-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libtirpc-conf", + "version": "1.3.5-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "0c17d9988dc986c90e22f79778df047eca9973ff" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "purl": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libtirpc-conf@1.3.5-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libtirpc" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.3.5-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libtirpc", + "version": "1.3.5-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "c32865bd86a8b8829d152279cabbc5ac6d430eb2" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "purl": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libtirpc@1.3.5-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libtirpc" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.3.5-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libuuid", + "version": "2.42.3-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "8f041ef637ad75f381cc0c034f2afbbb0303264e" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "purl": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libuuid@2.42.3-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "util-linux" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "2.42.3-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Francesco Colista " + }, + "name": "libverto", + "version": "0.3.2-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "73233059338142e4ac6d8fb8bb0074e93da75dc1" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libverto@0.3.2-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libverto" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "0.3.2-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "musl-utils", + "version": "1.2.6-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "75ada3c48d63ec5d87c42fdf934a3fdd11298dc5" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "id": "BSD-2-Clause" + } + }, + { + "license": { + "id": "GPL-2.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "musl-utils@1.2.6-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "musl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.2.6-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "musl", + "version": "1.2.6-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "0f7e5827e4e1a73631beda27b78431a8ba240e05" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "musl@1.2.6-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "musl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.2.6-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Milan P. Stanić " + }, + "name": "ncurses-terminfo-base", + "version": "6.6_p20260516-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "9d551d828e9c8ee52c5801c1d6046828ebf15752" + } + ], + "licenses": [ + { + "license": { + "name": "X-11" + } + } + ], + "purl": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "ncurses-terminfo-base@6.6_p20260516-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ncurses" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "6.6_p20260516-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "qaqland " + }, + "name": "readline", + "version": "8.3.3-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "945b16e378bc00e44d89d4de8124bba7647fdf4d" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-3.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "readline@8.3.3-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "readline" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "8.3.3-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "scanelf", + "version": "1.3.9-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "013f903d0ba219673aebbdd04f74bb5ed82b01f0" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "scanelf@1.3.9-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "pax-utils" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.3.9-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Jingyun Hua " + }, + "name": "sqlite-libs", + "version": "3.53.4-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "f7630ceb37c232b6609861aeab6cdb9cd120e6fa" + } + ], + "licenses": [ + { + "license": { + "id": "blessing" + } + } + ], + "purl": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "sqlite-libs@3.53.4-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "sqlite" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.53.4-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Sören Tempel " + }, + "name": "ssl_client", + "version": "1.37.0-r31", + "hashes": [ + { + "alg": "SHA-1", + "content": "c220f4a5125a313af733e98def94132bb1e9d40d" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "ssl_client@1.37.0-r31" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "busybox" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.37.0-r31" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "tzdata", + "version": "2026c-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "61f7544ecd8dd63eac23fe3e645702fda92ef02a" + } + ], + "licenses": [ + { + "license": { + "name": "Public-Domain" + } + } + ], + "purl": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "tzdata@2026c-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "tzdata" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "2026c-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "xz-libs", + "version": "5.8.3-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "4c92c5be0c5bef404e93c880eba9037a9b147347" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-or-later" + } + }, + { + "license": { + "id": "0BSD" + } + }, + { + "license": { + "name": "Public-Domain" + } + }, + { + "license": { + "id": "LGPL-2.1-or-later" + } + } + ], + "purl": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "xz-libs@5.8.3-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "xz" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "5.8.3-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "zlib", + "version": "1.3.2-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "dd4c3d102acaef2a71a1495951d55fabc8680613" + } + ], + "licenses": [ + { + "license": { + "id": "Zlib" + } + } + ], + "purl": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "zlib@1.3.2-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "zlib" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.3.2-r0" + } + ] + }, + { + "bom-ref": "pkg:pypi/cffi@2.1.1", + "type": "library", + "name": "cffi", + "version": "2.1.1", + "licenses": [ + { + "license": { + "id": "MIT-0" + } + } + ], + "purl": "pkg:pypi/cffi@2.1.1", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/cryptography@50.0.1", + "type": "library", + "name": "cryptography", + "version": "50.0.1", + "licenses": [ + { + "expression": "Apache-2.0 OR BSD-3-Clause" + } + ], + "purl": "pkg:pypi/cryptography@50.0.1", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/informed-decision@0.2.0", + "type": "library", + "name": "informed-decision", + "version": "0.2.0", + "purl": "pkg:pypi/informed-decision@0.2.0", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/pycparser@3.0", + "type": "library", + "name": "pycparser", + "version": "3.0", + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "purl": "pkg:pypi/pycparser@3.0", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/pyjwt@2.15.1", + "type": "library", + "name": "PyJWT", + "version": "2.15.1", + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:pypi/pyjwt@2.15.1", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/waitress@3.0.2", + "type": "library", + "name": "waitress", + "version": "3.0.2", + "licenses": [ + { + "license": { + "id": "ZPL-2.1" + } + } + ], + "purl": "pkg:pypi/waitress@3.0.2", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + } + ], + "dependencies": [ + { + "ref": "5b71299e-3c0c-4c4f-bd29-865fb14e1758", + "dependsOn": [ + "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1", + "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision", + "dependsOn": [ + "5b71299e-3c0c-4c4f-bd29-865fb14e1758", + "pkg:pypi/cffi@2.1.1", + "pkg:pypi/cryptography@50.0.1", + "pkg:pypi/informed-decision@0.2.0", + "pkg:pypi/pycparser@3.0", + "pkg:pypi/pyjwt@2.15.1", + "pkg:pypi/waitress@3.0.2" + ] + }, + { + "ref": "pkg:pypi/cffi@2.1.1", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/cryptography@50.0.1", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/informed-decision@0.2.0", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/pycparser@3.0", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/pyjwt@2.15.1", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/waitress@3.0.2", + "dependsOn": [] + } + ], + "vulnerabilities": [ + { + "id": "CVE-2026-85091", + "source": { + "name": "alpine", + "url": "https://secdb.alpinelinux.org/" + }, + "ratings": [ + { + "source": { + "name": "ubuntu" + }, + "severity": "medium" + } + ], + "cwes": [ + 787 + ], + "description": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.", + "recommendation": "Upgrade zlib to version 1.3.2-r1", + "advisories": [ + { + "url": "https://avd.aquasec.com/nvd/cve-2026-85091" + }, + { + "url": "https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490" + }, + { + "url": "https://github.com/madler/zlib" + }, + { + "url": "https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393" + }, + { + "url": "https://www.cve.org/CVERecord?id=CVE-2026-85091" + }, + { + "url": "https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate" + } + ], + "published": "2026-09-03T13:06:20+00:00", + "updated": "2026-09-09T20:41:07+00:00", + "affects": [ + { + "ref": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1", + "versions": [ + { + "version": "1.3.2-r0", + "status": "affected" + } + ] + } + ] + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json new file mode 100644 index 0000000..f6f812d --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json @@ -0,0 +1,286 @@ +{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "annotations": { + "argocd.argoproj.io/tracking-id": "informed-decision:apps/Deployment:informed-decision/informed-decision", + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "name": "informed-decision", + "namespace": "informed-decision", + "uid": "a588e10a-90d2-4883-975e-6dd8b8feca92" + }, + "spec": { + "progressDeadlineSeconds": 600, + "replicas": 1, + "revisionHistoryLimit": 10, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision" + } + }, + "strategy": { + "type": "Recreate" + }, + "template": { + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "labels": { + "app.kubernetes.io/component": "review", + "app.kubernetes.io/name": "informed-decision" + } + }, + "spec": { + "automountServiceAccountToken": false, + "containers": [ + { + "env": [ + { + "name": "INFD_KEYCAPE_ISSUER", + "value": "https://kc.coulomb.social" + }, + { + "name": "INFD_CONTAINER_CONFIG", + "value": "/configuration/runtime.json" + } + ], + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 3, + "httpGet": { + "path": "/healthz", + "port": "http", + "scheme": "HTTP" + }, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 2 + }, + "name": "informed-decision", + "ports": [ + { + "containerPort": 8080, + "name": "http", + "protocol": "TCP" + }, + { + "containerPort": 8081, + "name": "workload", + "protocol": "TCP" + } + ], + "readinessProbe": { + "failureThreshold": 3, + "httpGet": { + "path": "/healthz", + "port": "http", + "scheme": "HTTP" + }, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 2 + }, + "resources": { + "limits": { + "cpu": "500m", + "memory": "256Mi" + }, + "requests": { + "cpu": "5m", + "memory": "64Mi" + } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true + }, + "startupProbe": { + "failureThreshold": 12, + "httpGet": { + "path": "/healthz", + "port": "http", + "scheme": "HTTP" + }, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 2 + }, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/data", + "name": "data" + }, + { + "mountPath": "/run/informed-decision", + "name": "runtime" + }, + { + "mountPath": "/tmp", + "name": "tmp" + }, + { + "mountPath": "/configuration", + "name": "configuration", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/policy", + "name": "caller", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/audit", + "name": "audit", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/kubernetes", + "name": "kubernetes-api", + "readOnly": true + }, + { + "mountPath": "/workload-registry", + "name": "workload-registry", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/requester", + "name": "sitting-requester", + "readOnly": true + } + ] + } + ], + "dnsPolicy": "ClusterFirst", + "restartPolicy": "Always", + "schedulerName": "default-scheduler", + "securityContext": { + "fsGroup": 10001, + "fsGroupChangePolicy": "OnRootMismatch", + "runAsGroup": 10001, + "runAsNonRoot": true, + "runAsUser": 10001, + "seccompProfile": { + "type": "RuntimeDefault" + } + }, + "serviceAccount": "review", + "serviceAccountName": "review", + "terminationGracePeriodSeconds": 45, + "volumes": [ + { + "name": "data", + "persistentVolumeClaim": { + "claimName": "informed-decision-data" + } + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "runtime" + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "tmp" + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-runtime-6c221878d051" + }, + "name": "configuration" + }, + { + "name": "caller", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "audience": "flex-auth", + "expirationSeconds": 3600, + "path": "token" + } + } + ] + } + }, + { + "name": "audit", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "token", + "path": "token" + } + ], + "secretName": "informed-decision-audit" + } + }, + { + "name": "kubernetes-api", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "expirationSeconds": 600, + "path": "token" + } + }, + { + "configMap": { + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ], + "name": "kube-root-ca.crt" + } + } + ] + } + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-workload-registry" + }, + "name": "workload-registry" + }, + { + "name": "sitting-requester", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "client-secret", + "path": "client-secret" + } + ], + "optional": false, + "secretName": "informed-decision-sitting-requester" + } + } + ] + } + } + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json new file mode 100644 index 0000000..48926d3 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json @@ -0,0 +1,35 @@ +{ + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "source_revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "scanner": "aquasec/trivy@sha256:62b1e65e8869bc4b4c6aa4fa2b21595256c7c2f6018a9d9ad61caf87187c1969", + "version": "0.74.0", + "db_metadata": { + "Version": 2, + "NextUpdate": "2026-10-11T18:59:50.889010572Z", + "UpdatedAt": "2026-10-10T18:59:50.889010923Z", + "DownloadedAt": "2026-10-10T23:32:32.380033131Z" + }, + "suppression": false, + "ignore_unfixed": false, + "severity_filter": null, + "package_count": 44, + "findings_by_severity": { + "MEDIUM": 1 + }, + "findings": [ + { + "id": "CVE-2026-85091", + "package": "zlib", + "installed": "1.3.2-r0", + "fixed": "1.3.2-r1", + "severity": "MEDIUM" + } + ], + "coverage_limits": [ + "Alpine3.24 absent scanner EOL list; OS detector ran against Alpine3.24 repository on38OS packages", + "Known findings asof pinnedDB, not claim absence of unknown vulnerabilities" + ], + "high_critical": 0, + "same_scanner_actual_base_scan_findings_identical": true, + "base_scan_file": "base-trivy-full.json" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py new file mode 100644 index 0000000..a5b72d6 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py @@ -0,0 +1,66 @@ +import copy +import json +import unittest +from pathlib import Path +from change_guard import CANDIDATE, check_current, check_admitted, transport_result + +ROOT = Path(__file__).parent + + +class ExactDeploymentBoundary(unittest.TestCase): + def setUp(self): + self.sealed = json.loads((ROOT / 'sealed-live-deployment.json').read_text()) + self.admitted = copy.deepcopy(self.sealed) + self.admitted['spec']['template']['spec']['containers'][0]['image'] = CANDIDATE + + def test_only_expected_image_is_accepted(self): + check_current(self.sealed, self.sealed) + check_admitted(self.admitted, self.sealed) + + def test_bookkeeping_is_ignored(self): + value = copy.deepcopy(self.admitted) + value['status'] = {'readyReplicas': 0} + value['metadata']['generation'] = 100 + value['metadata']['resourceVersion'] = 'changed' + value['metadata']['annotations']['kubectl.kubernetes.io/last-applied-configuration'] = 'server bookkeeping' + check_admitted(value, self.sealed) + + def test_unrelated_drift_and_recreated_uid_are_refused(self): + mutators = [ + lambda v: v['metadata'].update(uid='recreated'), + lambda v: v['metadata'].update(finalizers=['new']), + lambda v: v['metadata'].update(ownerReferences=[{'uid': 'new'}]), + lambda v: v['spec']['template']['spec'].update(hostNetwork=True), + lambda v: v['spec']['template']['spec'].update(serviceAccountName='other'), + lambda v: v['spec']['template']['spec'].update(automountServiceAccountToken=True), + lambda v: v['spec']['template']['spec']['containers'][0].update(env=[]), + lambda v: v['spec']['template']['spec']['containers'][0]['securityContext'].update(privileged=True), + lambda v: v['spec'].update(replicas=2), + lambda v: v['spec'].update(strategy={'type': 'RollingUpdate'}), + ] + for mutate in mutators: + with self.subTest(mutate=mutate): + current = copy.deepcopy(self.sealed) + mutate(current) + with self.assertRaises(ValueError): + check_current(current, self.sealed) + admitted = copy.deepcopy(self.admitted) + mutate(admitted) + with self.assertRaises(ValueError): + check_admitted(admitted, self.sealed) + + def test_unexpected_image_is_refused(self): + value = copy.deepcopy(self.admitted) + value['spec']['template']['spec']['containers'][0]['image'] = 'other' + with self.assertRaises(ValueError): + check_admitted(value, self.sealed) + + def test_malformed_successful_transport_is_refused(self): + for output in ('banner', '{}', '[]', '{"all_checks_pass": "true"}', '{"all_checks_pass": false}'): + self.assertIs(transport_result(0, output)['all_checks_pass'], False) + self.assertIs(transport_result(1, '{"all_checks_pass":true}')['all_checks_pass'], False) + self.assertIs(transport_result(0, '{"all_checks_pass":true}')['all_checks_pass'], True) + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json new file mode 100644 index 0000000..a9e3b58 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json @@ -0,0 +1,2391 @@ +{ + "SchemaVersion": 2, + "Trivy": { + "Version": "0.74.0" + }, + "ReportID": "01a1288d-8df1-73fb-9313-3642dd64ba72", + "CreatedAt": "2026-10-11T01:22:07.985264404Z", + "ArtifactID": "sha256:40f873b8d6345341e2f661a5038c092d186e2831dc60b61704a419a1f4f77ef6", + "ArtifactName": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "ArtifactType": "container_image", + "Metadata": { + "Size": 88258048, + "OS": { + "Family": "alpine", + "Name": "3.24.1" + }, + "ImageID": "sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779", + "DiffIDs": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02", + "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + ], + "RepoDigests": [ + "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a" + ], + "Reference": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "ImageConfig": { + "architecture": "amd64", + "created": "2026-10-11T01:21:04.787527697Z", + "docker_version": "27.5.1", + "history": [ + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "CMD [\"/bin/sh\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV LANG=C.UTF-8", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "RUN /bin/sh -c set -eux; \tapk add --no-cache \t\tca-certificates \t\ttzdata \t; # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_VERSION=3.12.14", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:10:30.672225972Z", + "created_by": "RUN /bin/sh -c set -eux; \t\tapk add --no-cache --virtual .build-deps \t\tbluez-dev \t\tbzip2-dev \t\tdpkg-dev dpkg \t\tfindutils \t\tg++ \t\tgcc \t\tgdbm-dev \t\tgnupg \t\tlibc-dev \t\tlibffi-dev \t\tlibnsl-dev \t\tlibtirpc-dev \t\tlinux-headers \t\tmake \t\tncurses-dev \t\topenssl-dev \t\tpax-utils \t\treadline-dev \t\tsqlite-dev \t\ttar \t\ttcl-dev \t\ttk \t\ttk-dev \t\tutil-linux-dev \t\txz \t\txz-dev \t\tzlib-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \techo \"$PYTHON_SHA256 *python.tar.xz\" | sha256sum -c -; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t$(test \"${gnuArch%%-*}\" != 'riscv64' \u0026\u0026 echo '--with-lto') \t\t--with-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"-DTHREAD_STACK_SIZE=0x100000\"; \tLDFLAGS=\"${LDFLAGS:-} -Wl,--strip-all\"; \tarch=\"$(apk --print-arch)\"; \tcase \"$arch\" in \t\tx86_64|aarch64) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\"; \t\t\t;; \t\tx86) \t\t\t;; \t\t*) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\"; \t\t\t;; \tesac; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\$\\$ORIGIN/../lib'\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \t\t| tr ',' '\\n' \t\t| sort -u \t\t| awk 'system(\"[ -e /usr/local/lib/\" $1 \" ]\") == 0 { next } { print \"so:\" $1 }' \t\t| xargs -rt apk add --no-network --virtual .python-rundeps \t; \tapk del --no-network .build-deps; \t\texport PYTHONDONTWRITEBYTECODE=1; \tpython3 --version; \tpip3 --version # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "RUN /bin/sh -c set -eux; \tfor src in idle3 pip3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "CMD [\"python3\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "RUN /bin/sh -c apk add --no-cache 'libuuid\u003e=2.42.3-r1' \u0026\u0026 addgroup -S -g 10001 informed \u0026\u0026 adduser -S -u 10001 -G informed -H informed # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:55.351944978+02:00", + "created_by": "COPY /opt/venv /opt/venv # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.462092072+02:00", + "created_by": "RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "WORKDIR /app", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "USER 10001:10001", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "EXPOSE [8080/tcp 8081/tcp]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "ENTRYPOINT [\"informed-decision-container\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-11T01:15:11.991443676Z", + "created_by": "/bin/sh -c #(nop) ARG SOURCE_REVISION", + "empty_layer": true + }, + { + "created": "2026-10-11T01:21:04.716126392Z", + "created_by": "/bin/sh -c #(nop) LABEL org.opencontainers.image.revision=3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168 org.opencontainers.image.base.digest=sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 social.coulomb.source.policy.sha256=9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62 social.coulomb.release.scope=INFD-WP-0009-T04/purpose-overlay-v1", + "empty_layer": true + }, + { + "created": "2026-10-11T01:21:04.787527697Z", + "created_by": "/bin/sh -c #(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py " + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02", + "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + ] + }, + "config": { + "Entrypoint": [ + "informed-decision-container" + ], + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "Image": "sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883", + "Labels": { + "org.opencontainers.image.base.digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "org.opencontainers.image.revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "social.coulomb.release.scope": "INFD-WP-0009-T04/purpose-overlay-v1", + "social.coulomb.source.policy.sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62" + }, + "User": "10001:10001", + "WorkingDir": "/app", + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + } + } + }, + "Layers": [ + { + "Size": 8697856, + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "Size": 1538048, + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "Size": 47150592, + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "Size": 5120, + "Digest": "sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b", + "DiffID": "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe" + }, + { + "Size": 131584, + "Digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86", + "DiffID": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + { + "Size": 30705664, + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "Size": 12288, + "Digest": "sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f", + "DiffID": "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59" + }, + { + "Size": 1536, + "Digest": "sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3", + "DiffID": "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + }, + { + "Size": 15360, + "Digest": "sha256:cfee29c2f8119d2a39714ecbe5095a2dc1c986054f2e1fe0a6565163242417e3", + "DiffID": "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + } + ] + }, + "Results": [ + { + "Target": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a (alpine 3.24.1)", + "Class": "os-pkgs", + "Type": "alpine", + "Packages": [ + { + "ID": ".python-rundeps@20260901.001029", + "Name": ".python-rundeps", + "Identifier": { + "PURL": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch\u0026distro=3.24.1", + "UID": "4e26c99fecac1e97" + }, + "Version": "20260901.001029", + "Arch": "noarch", + "DependsOn": [ + "gdbm@1.26-r0", + "libbz2@1.0.8-r6", + "libcrypto3@3.5.8-r0", + "libffi@3.5.2-r1", + "libncursesw@6.6_p20260516-r0", + "libnsl@2.0.1-r2", + "libpanelw@6.6_p20260516-r0", + "libssl3@3.5.8-r0", + "libtirpc@1.3.5-r1", + "libuuid@2.42.3-r1", + "musl@1.2.6-r2", + "readline@8.3.3-r1", + "sqlite-libs@3.53.4-r0", + "xz-libs@5.8.3-r0", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:51d0c1e7d88a414345799f0309185c625013ef32", + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-baselayout@3.7.2-r1", + "Name": "alpine-baselayout", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "1b9c543300f8073e" + }, + "Version": "3.7.2-r1", + "Arch": "x86_64", + "SrcName": "alpine-baselayout", + "SrcVersion": "3.7.2-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "alpine-baselayout-data@3.7.2-r1", + "busybox-binsh@1.37.0-r31" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:f0fcfdc2f4da058af6473bc45c4eab62916225b2", + "InstalledFiles": [ + "etc/motd", + "etc/crontabs/root", + "etc/modprobe.d/aliases.conf", + "etc/modprobe.d/blacklist.conf", + "etc/modprobe.d/i386.conf", + "etc/profile.d/20locale.sh", + "etc/profile.d/README", + "etc/profile.d/color_prompt.sh.disabled", + "usr/lib/sysctl.d/00-alpine.conf", + "var/lock", + "var/run", + "var/spool/mail", + "var/spool/cron/crontabs" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-baselayout-data@3.7.2-r1", + "Name": "alpine-baselayout-data", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "fcc3cd90122d8aa7" + }, + "Version": "3.7.2-r1", + "Arch": "x86_64", + "SrcName": "alpine-baselayout", + "SrcVersion": "3.7.2-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508", + "InstalledFiles": [ + "etc/fstab", + "etc/group", + "etc/hostname", + "etc/hosts", + "etc/inittab", + "etc/modules", + "etc/mtab", + "etc/nsswitch.conf", + "etc/passwd", + "etc/profile", + "etc/protocols", + "etc/services", + "etc/shadow", + "etc/shells", + "etc/sysctl.conf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-keys@2.6-r0", + "Name": "alpine-keys", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "cb1f6c8fa74713e0" + }, + "Version": "2.6-r0", + "Arch": "x86_64", + "SrcName": "alpine-keys", + "SrcVersion": "2.6-r0", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:d8d6b80e53c059a77e4915da78ba964f3ffea240", + "InstalledFiles": [ + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub", + "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", + "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub", + "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub", + "usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub", + "usr/share/apk/keys/loongarch64/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub", + "usr/share/apk/keys/mips64/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", + "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", + "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub", + "usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub", + "usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub", + "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", + "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-release@3.24.1-r0", + "Name": "alpine-release", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "6cfad6f36e1f31aa" + }, + "Version": "3.24.1-r0", + "Arch": "x86_64", + "SrcName": "alpine-base", + "SrcVersion": "3.24.1-r0", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "alpine-keys@2.6-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:bc6912a25cdc7733e0035ed509eceaa4026946e3", + "InstalledFiles": [ + "etc/alpine-release", + "etc/issue", + "etc/os-release", + "etc/secfixes.d/alpine", + "usr/lib/os-release" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "apk-tools@3.0.6-r0", + "Name": "apk-tools", + "Identifier": { + "PURL": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "cb2633c883b17a04" + }, + "Version": "3.0.6-r0", + "Arch": "x86_64", + "SrcName": "apk-tools", + "SrcVersion": "3.0.6-r0", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "ca-certificates-bundle@20260611-r0", + "libapk@3.0.6-r0", + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:043333589798a1f52e09ae63f026c6c8fa676d34", + "InstalledFiles": [ + "sbin/apk" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "busybox@1.37.0-r31", + "Name": "busybox", + "Identifier": { + "PURL": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "771020c43c8440bf" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:b5405ebc02f7dd8be95b6265c54b243d5456ab8f", + "InstalledFiles": [ + "bin/busybox", + "etc/securetty", + "etc/busybox-paths.d/busybox", + "etc/logrotate.d/acpid", + "etc/network/if-up.d/dad", + "etc/udhcpc/udhcpc.conf", + "usr/share/udhcpc/default.script" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "busybox-binsh@1.37.0-r31", + "Name": "busybox-binsh", + "Identifier": { + "PURL": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "1ec8a3d5d2b63297" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "busybox@1.37.0-r31" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7", + "InstalledFiles": [ + "bin/sh" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ca-certificates@20260611-r0", + "Name": "ca-certificates", + "Identifier": { + "PURL": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "2a3c316ee83c6198" + }, + "Version": "20260611-r0", + "Arch": "x86_64", + "SrcName": "ca-certificates", + "SrcVersion": "20260611-r0", + "Licenses": [ + "MPL-2.0", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "busybox-binsh@1.37.0-r31", + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + "Digest": "sha1:8f2a04abeb54b331e2970a0a0dffb7bd6bdde567", + "InstalledFiles": [ + "etc/ca-certificates.conf", + "etc/apk/protected_paths.d/ca-certificates.list", + "etc/ca-certificates/update.d/certhash", + "usr/bin/c_rehash", + "usr/sbin/update-ca-certificates", + "usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt", + "usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt", + "usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt", + "usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_ECC_TLS_2021.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_RSA_TLS_2021.crt", + "usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt", + "usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA1.crt", + "usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA2.crt", + "usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt", + "usr/share/ca-certificates/mozilla/CA_Disig_Root_R2.crt", + "usr/share/ca-certificates/mozilla/CFCA_EV_ROOT.crt", + "usr/share/ca-certificates/mozilla/COMODO_ECC_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/COMODO_RSA_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/Certainly_Root_E1.crt", + "usr/share/ca-certificates/mozilla/Certainly_Root_R1.crt", + "usr/share/ca-certificates/mozilla/Certigna_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_EC-384_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA_2.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Root_CA.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_1_2020.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_2_2023.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_1_2020.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_2_2023.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G2.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G3.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G2.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G3.crt", + "usr/share/ca-certificates/mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt", + "usr/share/ca-certificates/mozilla/DigiCert_TLS_RSA4096_Root_G5.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Trusted_Root_G4.crt", + "usr/share/ca-certificates/mozilla/GDCA_TrustAUTH_R5_ROOT.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R1.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R3.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R4.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R4.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R5.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R3.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R6.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_E46.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_R46.crt", + "usr/share/ca-certificates/mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/HARICA_TLS_ECC_Root_CA_2021.crt", + "usr/share/ca-certificates/mozilla/HARICA_TLS_RSA_Root_CA_2021.crt", + "usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt", + "usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt", + "usr/share/ca-certificates/mozilla/HiPKI_Root_CA_-_G1.crt", + "usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt", + "usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt", + "usr/share/ca-certificates/mozilla/ISRG_Root_X2.crt", + "usr/share/ca-certificates/mozilla/IdenTrust_Commercial_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/IdenTrust_Public_Sector_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/Izenpe.com.crt", + "usr/share/ca-certificates/mozilla/Microsec_e-Szigno_Root_CA_2009.crt", + "usr/share/ca-certificates/mozilla/Microsoft_ECC_Root_Certificate_Authority_2017.crt", + "usr/share/ca-certificates/mozilla/Microsoft_RSA_Root_Certificate_Authority_2017.crt", + "usr/share/ca-certificates/mozilla/NAVER_Global_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt", + "usr/share/ca-certificates/mozilla/OISTE_Server_Root_ECC_G1.crt", + "usr/share/ca-certificates/mozilla/OISTE_Server_Root_RSA_G1.crt", + "usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GB_CA.crt", + "usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GC_CA.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_1_G3.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_2_G3.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_3_G3.crt", + "usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_ECC.crt", + "usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_RSA_R2.crt", + "usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_ECC.crt", + "usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_RSA.crt", + "usr/share/ca-certificates/mozilla/SSL.com_TLS_ECC_Root_CA_2022.crt", + "usr/share/ca-certificates/mozilla/SSL.com_TLS_RSA_Root_CA_2022.crt", + "usr/share/ca-certificates/mozilla/SZAFIR_ROOT_CA2.crt", + "usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_E46.crt", + "usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_R46.crt", + "usr/share/ca-certificates/mozilla/SecureSign_Root_CA14.crt", + "usr/share/ca-certificates/mozilla/SecureSign_Root_CA15.crt", + "usr/share/ca-certificates/mozilla/Security_Communication_ECC_RootCA1.crt", + "usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt", + "usr/share/ca-certificates/mozilla/Starfield_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/SwissSign_RSA_TLS_Root_CA_2022_-_1.crt", + "usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_2.crt", + "usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_3.crt", + "usr/share/ca-certificates/mozilla/TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.crt", + "usr/share/ca-certificates/mozilla/TWCA_CYBER_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TWCA_Global_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TWCA_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/Telekom_Security_TLS_ECC_Root_2020.crt", + "usr/share/ca-certificates/mozilla/Telekom_Security_TLS_RSA_Root_2023.crt", + "usr/share/ca-certificates/mozilla/Telia_Root_CA_v2.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G3.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G4.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_TLS_ECC_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_TLS_RSA_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TunTrust_Root_CA.crt", + "usr/share/ca-certificates/mozilla/UCA_Extended_Validation_Root.crt", + "usr/share/ca-certificates/mozilla/UCA_Global_G2_Root.crt", + "usr/share/ca-certificates/mozilla/USERTrust_ECC_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/USERTrust_RSA_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/certSIGN_Root_CA_G2.crt", + "usr/share/ca-certificates/mozilla/e-Szigno_Root_CA_2017.crt", + "usr/share/ca-certificates/mozilla/e-Szigno_TLS_Root_CA_2023.crt", + "usr/share/ca-certificates/mozilla/ePKI_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_C3.crt", + "usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_G3.crt", + "usr/share/ca-certificates/mozilla/emSign_Root_CA_-_C1.crt", + "usr/share/ca-certificates/mozilla/emSign_Root_CA_-_G1.crt", + "usr/share/ca-certificates/mozilla/vTrus_ECC_Root_CA.crt", + "usr/share/ca-certificates/mozilla/vTrus_Root_CA.crt" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ca-certificates-bundle@20260611-r0", + "Name": "ca-certificates-bundle", + "Identifier": { + "PURL": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "20337c2ea28bef28" + }, + "Version": "20260611-r0", + "Arch": "x86_64", + "SrcName": "ca-certificates", + "SrcVersion": "20260611-r0", + "Licenses": [ + "MPL-2.0", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c9534a03750bdfae341f10969016090fc11febbd", + "InstalledFiles": [ + "etc/ssl/cert.pem", + "etc/ssl/certs/ca-certificates.crt", + "etc/ssl1.1/cert.pem", + "etc/ssl1.1/certs" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "gdbm@1.26-r0", + "Name": "gdbm", + "Identifier": { + "PURL": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "5eb1a3f86262ca77" + }, + "Version": "1.26-r0", + "Arch": "x86_64", + "SrcName": "gdbm", + "SrcVersion": "1.26-r0", + "Licenses": [ + "GPL-3.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:619493d8124fe49a8ee1d8f7a1372cf7e3977337", + "InstalledFiles": [ + "usr/lib/libgdbm.so.6", + "usr/lib/libgdbm.so.6.0.0", + "usr/lib/libgdbm_compat.so.4", + "usr/lib/libgdbm_compat.so.4.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "keyutils-libs@1.6.3-r4", + "Name": "keyutils-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64\u0026distro=3.24.1", + "UID": "a1a29120eb342032" + }, + "Version": "1.6.3-r4", + "Arch": "x86_64", + "SrcName": "keyutils", + "SrcVersion": "1.6.3-r4", + "Licenses": [ + "GPL-2.0-or-later", + "LGPL-2.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:b7331c96f077fc3522ee4361a441d1097204cd90", + "InstalledFiles": [ + "usr/lib/libkeyutils.so.1", + "usr/lib/libkeyutils.so.1.10" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "krb5-conf@1.0-r2", + "Name": "krb5-conf", + "Identifier": { + "PURL": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "e7cf94ba8b6dbc33" + }, + "Version": "1.0-r2", + "Arch": "x86_64", + "SrcName": "krb5-conf", + "SrcVersion": "1.0-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:40a11e0690a59e110367b62a80661024e9942a2d", + "InstalledFiles": [ + "etc/krb5.conf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "krb5-libs@1.22.2-r1", + "Name": "krb5-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "958f8b4a4f087dac" + }, + "Version": "1.22.2-r1", + "Arch": "x86_64", + "SrcName": "krb5", + "SrcVersion": "1.22.2-r1", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "keyutils-libs@1.6.3-r4", + "krb5-conf@1.0-r2", + "libcom_err@1.47.4-r0", + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "libverto@0.3.2-r2", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:ef02346e21b817ff379e4601e5b1fc9760e5e31a", + "InstalledFiles": [ + "usr/lib/libgssapi_krb5.so.2", + "usr/lib/libgssapi_krb5.so.2.2", + "usr/lib/libgssrpc.so.4", + "usr/lib/libgssrpc.so.4.2", + "usr/lib/libk5crypto.so.3", + "usr/lib/libk5crypto.so.3.1", + "usr/lib/libkadm5clnt_mit.so.12", + "usr/lib/libkadm5clnt_mit.so.12.0", + "usr/lib/libkadm5srv_mit.so.12", + "usr/lib/libkadm5srv_mit.so.12.0", + "usr/lib/libkdb5.so.10", + "usr/lib/libkdb5.so.10.0", + "usr/lib/libkrad.so.0", + "usr/lib/libkrad.so.0.0", + "usr/lib/libkrb5.so.3", + "usr/lib/libkrb5.so.3.3", + "usr/lib/libkrb5support.so.0", + "usr/lib/libkrb5support.so.0.1", + "usr/lib/krb5/plugins/kdb/db2.so", + "usr/lib/krb5/plugins/preauth/otp.so", + "usr/lib/krb5/plugins/preauth/spake.so", + "usr/lib/krb5/plugins/preauth/test.so", + "usr/lib/krb5/plugins/tls/k5tls.so" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libapk@3.0.6-r0", + "Name": "libapk", + "Identifier": { + "PURL": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "a35b8b9b3219513a" + }, + "Version": "3.0.6-r0", + "Arch": "x86_64", + "SrcName": "apk-tools", + "SrcVersion": "3.0.6-r0", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "musl@1.2.6-r2", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:523a8f58104589f74f743d501c81bf6517155378", + "InstalledFiles": [ + "usr/lib/libapk.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libbz2@1.0.8-r6", + "Name": "libbz2", + "Identifier": { + "PURL": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64\u0026distro=3.24.1", + "UID": "48e17539404e2d56" + }, + "Version": "1.0.8-r6", + "Arch": "x86_64", + "SrcName": "bzip2", + "SrcVersion": "1.0.8-r6", + "Licenses": [ + "bzip-2-1.0.6" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:08566ba5c7af97c25474be8b24e8b48f0116b67d", + "InstalledFiles": [ + "usr/lib/libbz2.so.1", + "usr/lib/libbz2.so.1.0.8" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libcom_err@1.47.4-r0", + "Name": "libcom_err", + "Identifier": { + "PURL": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "3fc35a3f66d192af" + }, + "Version": "1.47.4-r0", + "Arch": "x86_64", + "SrcName": "e2fsprogs", + "SrcVersion": "1.47.4-r0", + "Licenses": [ + "GPL-2.0-or-later", + "LGPL-2.0-or-later", + "BSD-3-Clause", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef", + "InstalledFiles": [ + "usr/lib/libcom_err.so.2", + "usr/lib/libcom_err.so.2.1" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libcrypto3@3.5.8-r0", + "Name": "libcrypto3", + "Identifier": { + "PURL": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "4299bba2ba9c96aa" + }, + "Version": "3.5.8-r0", + "Arch": "x86_64", + "SrcName": "openssl", + "SrcVersion": "3.5.8-r0", + "Licenses": [ + "Apache-2.0" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3", + "InstalledFiles": [ + "etc/ssl/ct_log_list.cnf", + "etc/ssl/ct_log_list.cnf.dist", + "etc/ssl/openssl.cnf", + "etc/ssl/openssl.cnf.dist", + "usr/lib/libcrypto.so.3", + "usr/lib/engines-3/afalg.so", + "usr/lib/engines-3/capi.so", + "usr/lib/engines-3/loader_attic.so", + "usr/lib/engines-3/padlock.so", + "usr/lib/ossl-modules/legacy.so" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libffi@3.5.2-r1", + "Name": "libffi", + "Identifier": { + "PURL": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "d3eaa921287b1ccd" + }, + "Version": "3.5.2-r1", + "Arch": "x86_64", + "SrcName": "libffi", + "SrcVersion": "3.5.2-r1", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a", + "InstalledFiles": [ + "usr/lib/libffi.so.8", + "usr/lib/libffi.so.8.2.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libintl@1.0-r0", + "Name": "libintl", + "Identifier": { + "PURL": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "25c18808d8fc87e0" + }, + "Version": "1.0-r0", + "Arch": "x86_64", + "SrcName": "gettext", + "SrcVersion": "1.0-r0", + "Licenses": [ + "LGPL-2.1-or-later" + ], + "Maintainer": "Carlo Landmeter \u003cclandmeter@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:282d6642ccac87237e43a864159d73cf5abe7550", + "InstalledFiles": [ + "usr/lib/libintl.so.8", + "usr/lib/libintl.so.8.4.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libncursesw@6.6_p20260516-r0", + "Name": "libncursesw", + "Identifier": { + "PURL": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e8939f45e2191bcc" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "DependsOn": [ + "musl@1.2.6-r2", + "ncurses-terminfo-base@6.6_p20260516-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:9f318e6e324d6827274829194cf6ac6afbaded12", + "InstalledFiles": [ + "usr/lib/libncursesw.so.6", + "usr/lib/libncursesw.so.6.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libnsl@2.0.1-r2", + "Name": "libnsl", + "Identifier": { + "PURL": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "3d893c60d41da67b" + }, + "Version": "2.0.1-r2", + "Arch": "x86_64", + "SrcName": "libnsl", + "SrcVersion": "2.0.1-r2", + "Licenses": [ + "LGPL-2.0-or-later" + ], + "DependsOn": [ + "libintl@1.0-r0", + "libtirpc@1.3.5-r1", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:5194adbf26560b52be318481a7af294ab05fd795", + "InstalledFiles": [ + "usr/lib/libnsl.so.3", + "usr/lib/libnsl.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libpanelw@6.6_p20260516-r0", + "Name": "libpanelw", + "Identifier": { + "PURL": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "ef1ad9bb256b373" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "DependsOn": [ + "libncursesw@6.6_p20260516-r0", + "musl@1.2.6-r2", + "ncurses-terminfo-base@6.6_p20260516-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:149bdc434232ed11fc5bb975ba519a07154a6f56", + "InstalledFiles": [ + "usr/lib/libpanelw.so.6", + "usr/lib/libpanelw.so.6.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libssl3@3.5.8-r0", + "Name": "libssl3", + "Identifier": { + "PURL": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "f290ab59b88b1c4a" + }, + "Version": "3.5.8-r0", + "Arch": "x86_64", + "SrcName": "openssl", + "SrcVersion": "3.5.8-r0", + "Licenses": [ + "Apache-2.0" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:5f9b1e55d821953d2e2b1db322dad70a3b5041ea", + "InstalledFiles": [ + "usr/lib/libssl.so.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libtirpc@1.3.5-r1", + "Name": "libtirpc", + "Identifier": { + "PURL": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "471c8d955ca03be5" + }, + "Version": "1.3.5-r1", + "Arch": "x86_64", + "SrcName": "libtirpc", + "SrcVersion": "1.3.5-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "krb5-libs@1.22.2-r1", + "libtirpc-conf@1.3.5-r1", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:c32865bd86a8b8829d152279cabbc5ac6d430eb2", + "InstalledFiles": [ + "usr/lib/libtirpc.so.3", + "usr/lib/libtirpc.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libtirpc-conf@1.3.5-r1", + "Name": "libtirpc-conf", + "Identifier": { + "PURL": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "3437392c14aad33f" + }, + "Version": "1.3.5-r1", + "Arch": "x86_64", + "SrcName": "libtirpc", + "SrcVersion": "1.3.5-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:0c17d9988dc986c90e22f79778df047eca9973ff", + "InstalledFiles": [ + "etc/bindresvport.blacklist", + "etc/netconfig" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libuuid@2.42.3-r1", + "Name": "libuuid", + "Identifier": { + "PURL": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "c444e9cdd1bdda40" + }, + "Version": "2.42.3-r1", + "Arch": "x86_64", + "SrcName": "util-linux", + "SrcVersion": "2.42.3-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86", + "DiffID": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + "Digest": "sha1:8f041ef637ad75f381cc0c034f2afbbb0303264e", + "InstalledFiles": [ + "usr/lib/libuuid.so.1", + "usr/lib/libuuid.so.1.3.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libverto@0.3.2-r2", + "Name": "libverto", + "Identifier": { + "PURL": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "9df4321a283a6cf6" + }, + "Version": "0.3.2-r2", + "Arch": "x86_64", + "SrcName": "libverto", + "SrcVersion": "0.3.2-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Francesco Colista \u003cfcolista@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:73233059338142e4ac6d8fb8bb0074e93da75dc1", + "InstalledFiles": [ + "usr/lib/libverto.so.1", + "usr/lib/libverto.so.1.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "musl@1.2.6-r2", + "Name": "musl", + "Identifier": { + "PURL": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "1f8cb44befe503d4" + }, + "Version": "1.2.6-r2", + "Arch": "x86_64", + "SrcName": "musl", + "SrcVersion": "1.2.6-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:0f7e5827e4e1a73631beda27b78431a8ba240e05", + "InstalledFiles": [ + "lib/ld-musl-x86_64.so.1", + "lib/libc.musl-x86_64.so.1" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "musl-utils@1.2.6-r2", + "Name": "musl-utils", + "Identifier": { + "PURL": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "4497482ec1d943e1" + }, + "Version": "1.2.6-r2", + "Arch": "x86_64", + "SrcName": "musl", + "SrcVersion": "1.2.6-r2", + "Licenses": [ + "MIT", + "BSD-2-Clause", + "GPL-2.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2", + "scanelf@1.3.9-r1" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:75ada3c48d63ec5d87c42fdf934a3fdd11298dc5", + "InstalledFiles": [ + "sbin/ldconfig", + "usr/bin/getconf", + "usr/bin/getent", + "usr/bin/iconv", + "usr/bin/ldd" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ncurses-terminfo-base@6.6_p20260516-r0", + "Name": "ncurses-terminfo-base", + "Identifier": { + "PURL": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e7fac5c6a6e9ae8" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:9d551d828e9c8ee52c5801c1d6046828ebf15752", + "InstalledFiles": [ + "etc/terminfo/a/alacritty", + "etc/terminfo/a/ansi", + "etc/terminfo/d/dumb", + "etc/terminfo/g/gnome", + "etc/terminfo/g/gnome-256color", + "etc/terminfo/k/konsole", + "etc/terminfo/k/konsole-256color", + "etc/terminfo/k/konsole-linux", + "etc/terminfo/l/linux", + "etc/terminfo/p/putty", + "etc/terminfo/p/putty-256color", + "etc/terminfo/r/rxvt", + "etc/terminfo/r/rxvt-256color", + "etc/terminfo/s/screen", + "etc/terminfo/s/screen-256color", + "etc/terminfo/s/st-0.6", + "etc/terminfo/s/st-0.7", + "etc/terminfo/s/st-0.8", + "etc/terminfo/s/st-0.8.5", + "etc/terminfo/s/st-16color", + "etc/terminfo/s/st-256color", + "etc/terminfo/s/st-direct", + "etc/terminfo/s/sun", + "etc/terminfo/t/terminator", + "etc/terminfo/t/terminology", + "etc/terminfo/t/terminology-0.6.1", + "etc/terminfo/t/terminology-1.0.0", + "etc/terminfo/t/terminology-1.8.1", + "etc/terminfo/t/tmux", + "etc/terminfo/t/tmux-256color", + "etc/terminfo/v/vt100", + "etc/terminfo/v/vt102", + "etc/terminfo/v/vt200", + "etc/terminfo/v/vt220", + "etc/terminfo/v/vt52", + "etc/terminfo/v/vte", + "etc/terminfo/v/vte-256color", + "etc/terminfo/x/xterm", + "etc/terminfo/x/xterm-256color", + "etc/terminfo/x/xterm-color", + "etc/terminfo/x/xterm-xfree86" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "readline@8.3.3-r1", + "Name": "readline", + "Identifier": { + "PURL": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "f50058781c93e1f2" + }, + "Version": "8.3.3-r1", + "Arch": "x86_64", + "SrcName": "readline", + "SrcVersion": "8.3.3-r1", + "Licenses": [ + "GPL-3.0-or-later" + ], + "Maintainer": "qaqland \u003cqaq@qaq.land\u003e", + "DependsOn": [ + "libncursesw@6.6_p20260516-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:945b16e378bc00e44d89d4de8124bba7647fdf4d", + "InstalledFiles": [ + "etc/inputrc", + "usr/lib/libreadline.so.8", + "usr/lib/libreadline.so.8.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "scanelf@1.3.9-r1", + "Name": "scanelf", + "Identifier": { + "PURL": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "936394657a1626fb" + }, + "Version": "1.3.9-r1", + "Arch": "x86_64", + "SrcName": "pax-utils", + "SrcVersion": "1.3.9-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:013f903d0ba219673aebbdd04f74bb5ed82b01f0", + "InstalledFiles": [ + "usr/bin/scanelf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "sqlite-libs@3.53.4-r0", + "Name": "sqlite-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "8b10aee2ccc192de" + }, + "Version": "3.53.4-r0", + "Arch": "x86_64", + "SrcName": "sqlite", + "SrcVersion": "3.53.4-r0", + "Licenses": [ + "blessing" + ], + "Maintainer": "Jingyun Hua \u003chuajingyun@loongson.cn\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:f7630ceb37c232b6609861aeab6cdb9cd120e6fa", + "InstalledFiles": [ + "usr/lib/libsqlite3.so.0", + "usr/lib/libsqlite3.so.3.53.4" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ssl_client@1.37.0-r31", + "Name": "ssl_client", + "Identifier": { + "PURL": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "d42e31f15a4ce47a" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c220f4a5125a313af733e98def94132bb1e9d40d", + "InstalledFiles": [ + "usr/bin/ssl_client" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "tzdata@2026c-r0", + "Name": "tzdata", + "Identifier": { + "PURL": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "52c6b50eff629f9d" + }, + "Version": "2026c-r0", + "Arch": "x86_64", + "SrcName": "tzdata", + "SrcVersion": "2026c-r0", + "Licenses": [ + "Public-Domain" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + "Digest": "sha1:61f7544ecd8dd63eac23fe3e645702fda92ef02a", + "InstalledFiles": [ + "usr/share/zoneinfo/CET", + "usr/share/zoneinfo/CST6CDT", + "usr/share/zoneinfo/Cuba", + "usr/share/zoneinfo/EET", + "usr/share/zoneinfo/EST", + "usr/share/zoneinfo/EST5EDT", + "usr/share/zoneinfo/Egypt", + "usr/share/zoneinfo/Eire", + "usr/share/zoneinfo/Factory", + "usr/share/zoneinfo/GB", + "usr/share/zoneinfo/GB-Eire", + "usr/share/zoneinfo/GMT", + "usr/share/zoneinfo/GMT+0", + "usr/share/zoneinfo/GMT-0", + "usr/share/zoneinfo/GMT0", + "usr/share/zoneinfo/Greenwich", + "usr/share/zoneinfo/HST", + "usr/share/zoneinfo/Hongkong", + "usr/share/zoneinfo/Iceland", + "usr/share/zoneinfo/Iran", + "usr/share/zoneinfo/Israel", + "usr/share/zoneinfo/Jamaica", + "usr/share/zoneinfo/Japan", + "usr/share/zoneinfo/Kwajalein", + "usr/share/zoneinfo/Libya", + "usr/share/zoneinfo/MET", + "usr/share/zoneinfo/MST", + "usr/share/zoneinfo/MST7MDT", + "usr/share/zoneinfo/NZ", + "usr/share/zoneinfo/NZ-CHAT", + "usr/share/zoneinfo/Navajo", + "usr/share/zoneinfo/PRC", + "usr/share/zoneinfo/PST8PDT", + "usr/share/zoneinfo/Poland", + "usr/share/zoneinfo/Portugal", + "usr/share/zoneinfo/ROC", + "usr/share/zoneinfo/ROK", + "usr/share/zoneinfo/Singapore", + "usr/share/zoneinfo/Turkey", + "usr/share/zoneinfo/UCT", + "usr/share/zoneinfo/UTC", + "usr/share/zoneinfo/Universal", + "usr/share/zoneinfo/W-SU", + "usr/share/zoneinfo/WET", + "usr/share/zoneinfo/Zulu", + "usr/share/zoneinfo/iso3166.tab", + "usr/share/zoneinfo/leap-seconds.list", + "usr/share/zoneinfo/posixrules", + "usr/share/zoneinfo/zone.tab", + "usr/share/zoneinfo/zone1970.tab", + "usr/share/zoneinfo/Africa/Abidjan", + "usr/share/zoneinfo/Africa/Accra", + "usr/share/zoneinfo/Africa/Addis_Ababa", + "usr/share/zoneinfo/Africa/Algiers", + "usr/share/zoneinfo/Africa/Asmara", + "usr/share/zoneinfo/Africa/Asmera", + "usr/share/zoneinfo/Africa/Bamako", + "usr/share/zoneinfo/Africa/Bangui", + "usr/share/zoneinfo/Africa/Banjul", + "usr/share/zoneinfo/Africa/Bissau", + "usr/share/zoneinfo/Africa/Blantyre", + "usr/share/zoneinfo/Africa/Brazzaville", + "usr/share/zoneinfo/Africa/Bujumbura", + "usr/share/zoneinfo/Africa/Cairo", + "usr/share/zoneinfo/Africa/Casablanca", + "usr/share/zoneinfo/Africa/Ceuta", + "usr/share/zoneinfo/Africa/Conakry", + "usr/share/zoneinfo/Africa/Dakar", + "usr/share/zoneinfo/Africa/Dar_es_Salaam", + "usr/share/zoneinfo/Africa/Djibouti", + "usr/share/zoneinfo/Africa/Douala", + "usr/share/zoneinfo/Africa/El_Aaiun", + "usr/share/zoneinfo/Africa/Freetown", + "usr/share/zoneinfo/Africa/Gaborone", + "usr/share/zoneinfo/Africa/Harare", + "usr/share/zoneinfo/Africa/Johannesburg", + "usr/share/zoneinfo/Africa/Juba", + "usr/share/zoneinfo/Africa/Kampala", + "usr/share/zoneinfo/Africa/Khartoum", + "usr/share/zoneinfo/Africa/Kigali", + "usr/share/zoneinfo/Africa/Kinshasa", + "usr/share/zoneinfo/Africa/Lagos", + "usr/share/zoneinfo/Africa/Libreville", + "usr/share/zoneinfo/Africa/Lome", + "usr/share/zoneinfo/Africa/Luanda", + "usr/share/zoneinfo/Africa/Lubumbashi", + "usr/share/zoneinfo/Africa/Lusaka", + "usr/share/zoneinfo/Africa/Malabo", + "usr/share/zoneinfo/Africa/Maputo", + "usr/share/zoneinfo/Africa/Maseru", + "usr/share/zoneinfo/Africa/Mbabane", + "usr/share/zoneinfo/Africa/Mogadishu", + "usr/share/zoneinfo/Africa/Monrovia", + "usr/share/zoneinfo/Africa/Nairobi", + "usr/share/zoneinfo/Africa/Ndjamena", + "usr/share/zoneinfo/Africa/Niamey", + "usr/share/zoneinfo/Africa/Nouakchott", + "usr/share/zoneinfo/Africa/Ouagadougou", + "usr/share/zoneinfo/Africa/Porto-Novo", + "usr/share/zoneinfo/Africa/Sao_Tome", + "usr/share/zoneinfo/Africa/Timbuktu", + "usr/share/zoneinfo/Africa/Tripoli", + "usr/share/zoneinfo/Africa/Tunis", + "usr/share/zoneinfo/Africa/Windhoek", + "usr/share/zoneinfo/America/Adak", + "usr/share/zoneinfo/America/Anchorage", + "usr/share/zoneinfo/America/Anguilla", + "usr/share/zoneinfo/America/Antigua", + "usr/share/zoneinfo/America/Araguaina", + "usr/share/zoneinfo/America/Aruba", + "usr/share/zoneinfo/America/Asuncion", + "usr/share/zoneinfo/America/Atikokan", + "usr/share/zoneinfo/America/Atka", + "usr/share/zoneinfo/America/Bahia", + "usr/share/zoneinfo/America/Bahia_Banderas", + "usr/share/zoneinfo/America/Barbados", + "usr/share/zoneinfo/America/Belem", + "usr/share/zoneinfo/America/Belize", + "usr/share/zoneinfo/America/Blanc-Sablon", + "usr/share/zoneinfo/America/Boa_Vista", + "usr/share/zoneinfo/America/Bogota", + "usr/share/zoneinfo/America/Boise", + "usr/share/zoneinfo/America/Buenos_Aires", + "usr/share/zoneinfo/America/Cambridge_Bay", + "usr/share/zoneinfo/America/Campo_Grande", + "usr/share/zoneinfo/America/Cancun", + "usr/share/zoneinfo/America/Caracas", + "usr/share/zoneinfo/America/Catamarca", + "usr/share/zoneinfo/America/Cayenne", + "usr/share/zoneinfo/America/Cayman", + "usr/share/zoneinfo/America/Chicago", + "usr/share/zoneinfo/America/Chihuahua", + "usr/share/zoneinfo/America/Ciudad_Juarez", + "usr/share/zoneinfo/America/Coral_Harbour", + "usr/share/zoneinfo/America/Cordoba", + "usr/share/zoneinfo/America/Costa_Rica", + "usr/share/zoneinfo/America/Coyhaique", + "usr/share/zoneinfo/America/Creston", + "usr/share/zoneinfo/America/Cuiaba", + "usr/share/zoneinfo/America/Curacao", + "usr/share/zoneinfo/America/Danmarkshavn", + "usr/share/zoneinfo/America/Dawson", + "usr/share/zoneinfo/America/Dawson_Creek", + "usr/share/zoneinfo/America/Denver", + "usr/share/zoneinfo/America/Detroit", + "usr/share/zoneinfo/America/Dominica", + "usr/share/zoneinfo/America/Edmonton", + "usr/share/zoneinfo/America/Eirunepe", + "usr/share/zoneinfo/America/El_Salvador", + "usr/share/zoneinfo/America/Ensenada", + "usr/share/zoneinfo/America/Fort_Nelson", + "usr/share/zoneinfo/America/Fort_Wayne", + "usr/share/zoneinfo/America/Fortaleza", + "usr/share/zoneinfo/America/Glace_Bay", + "usr/share/zoneinfo/America/Godthab", + "usr/share/zoneinfo/America/Goose_Bay", + "usr/share/zoneinfo/America/Grand_Turk", + "usr/share/zoneinfo/America/Grenada", + "usr/share/zoneinfo/America/Guadeloupe", + "usr/share/zoneinfo/America/Guatemala", + "usr/share/zoneinfo/America/Guayaquil", + "usr/share/zoneinfo/America/Guyana", + "usr/share/zoneinfo/America/Halifax", + "usr/share/zoneinfo/America/Havana", + "usr/share/zoneinfo/America/Hermosillo", + "usr/share/zoneinfo/America/Indianapolis", + "usr/share/zoneinfo/America/Inuvik", + "usr/share/zoneinfo/America/Iqaluit", + "usr/share/zoneinfo/America/Jamaica", + "usr/share/zoneinfo/America/Jujuy", + "usr/share/zoneinfo/America/Juneau", + "usr/share/zoneinfo/America/Knox_IN", + "usr/share/zoneinfo/America/Kralendijk", + "usr/share/zoneinfo/America/La_Paz", + "usr/share/zoneinfo/America/Lima", + "usr/share/zoneinfo/America/Los_Angeles", + "usr/share/zoneinfo/America/Louisville", + "usr/share/zoneinfo/America/Lower_Princes", + "usr/share/zoneinfo/America/Maceio", + "usr/share/zoneinfo/America/Managua", + "usr/share/zoneinfo/America/Manaus", + "usr/share/zoneinfo/America/Marigot", + "usr/share/zoneinfo/America/Martinique", + "usr/share/zoneinfo/America/Matamoros", + "usr/share/zoneinfo/America/Mazatlan", + "usr/share/zoneinfo/America/Mendoza", + "usr/share/zoneinfo/America/Menominee", + "usr/share/zoneinfo/America/Merida", + "usr/share/zoneinfo/America/Metlakatla", + "usr/share/zoneinfo/America/Mexico_City", + "usr/share/zoneinfo/America/Miquelon", + "usr/share/zoneinfo/America/Moncton", + "usr/share/zoneinfo/America/Monterrey", + "usr/share/zoneinfo/America/Montevideo", + "usr/share/zoneinfo/America/Montreal", + "usr/share/zoneinfo/America/Montserrat", + "usr/share/zoneinfo/America/Nassau", + "usr/share/zoneinfo/America/New_York", + "usr/share/zoneinfo/America/Nipigon", + "usr/share/zoneinfo/America/Nome", + "usr/share/zoneinfo/America/Noronha", + "usr/share/zoneinfo/America/Nuuk", + "usr/share/zoneinfo/America/Ojinaga", + "usr/share/zoneinfo/America/Panama", + "usr/share/zoneinfo/America/Pangnirtung", + "usr/share/zoneinfo/America/Paramaribo", + "usr/share/zoneinfo/America/Phoenix", + "usr/share/zoneinfo/America/Port-au-Prince", + "usr/share/zoneinfo/America/Port_of_Spain", + "usr/share/zoneinfo/America/Porto_Acre", + "usr/share/zoneinfo/America/Porto_Velho", + "usr/share/zoneinfo/America/Puerto_Rico", + "usr/share/zoneinfo/America/Punta_Arenas", + "usr/share/zoneinfo/America/Rainy_River", + "usr/share/zoneinfo/America/Rankin_Inlet", + "usr/share/zoneinfo/America/Recife", + "usr/share/zoneinfo/America/Regina", + "usr/share/zoneinfo/America/Resolute", + "usr/share/zoneinfo/America/Rio_Branco", + "usr/share/zoneinfo/America/Rosario", + "usr/share/zoneinfo/America/Santa_Isabel", + "usr/share/zoneinfo/America/Santarem", + "usr/share/zoneinfo/America/Santiago", + "usr/share/zoneinfo/America/Santo_Domingo", + "usr/share/zoneinfo/America/Sao_Paulo", + "usr/share/zoneinfo/America/Scoresbysund", + "usr/share/zoneinfo/America/Shiprock", + "usr/share/zoneinfo/America/Sitka", + "usr/share/zoneinfo/America/St_Barthelemy", + "usr/share/zoneinfo/America/St_Johns", + "usr/share/zoneinfo/America/St_Kitts", + "usr/share/zoneinfo/America/St_Lucia", + "usr/share/zoneinfo/America/St_Thomas", + "usr/share/zoneinfo/America/St_Vincent", + "usr/share/zoneinfo/America/Swift_Current", + "usr/share/zoneinfo/America/Tegucigalpa", + "usr/share/zoneinfo/America/Thule", + "usr/share/zoneinfo/America/Thunder_Bay", + "usr/share/zoneinfo/America/Tijuana", + "usr/share/zoneinfo/America/Toronto", + "usr/share/zoneinfo/America/Tortola", + "usr/share/zoneinfo/America/Vancouver", + "usr/share/zoneinfo/America/Virgin", + "usr/share/zoneinfo/America/Whitehorse", + "usr/share/zoneinfo/America/Winnipeg", + "usr/share/zoneinfo/America/Yakutat", + "usr/share/zoneinfo/America/Yellowknife", + "usr/share/zoneinfo/America/Argentina/Buenos_Aires", + "usr/share/zoneinfo/America/Argentina/Catamarca", + "usr/share/zoneinfo/America/Argentina/ComodRivadavia", + "usr/share/zoneinfo/America/Argentina/Cordoba", + "usr/share/zoneinfo/America/Argentina/Jujuy", + "usr/share/zoneinfo/America/Argentina/La_Rioja", + "usr/share/zoneinfo/America/Argentina/Mendoza", + "usr/share/zoneinfo/America/Argentina/Rio_Gallegos", + "usr/share/zoneinfo/America/Argentina/Salta", + "usr/share/zoneinfo/America/Argentina/San_Juan", + "usr/share/zoneinfo/America/Argentina/San_Luis", + "usr/share/zoneinfo/America/Argentina/Tucuman", + "usr/share/zoneinfo/America/Argentina/Ushuaia", + "usr/share/zoneinfo/America/Indiana/Indianapolis", + "usr/share/zoneinfo/America/Indiana/Knox", + "usr/share/zoneinfo/America/Indiana/Marengo", + "usr/share/zoneinfo/America/Indiana/Petersburg", + "usr/share/zoneinfo/America/Indiana/Tell_City", + "usr/share/zoneinfo/America/Indiana/Vevay", + "usr/share/zoneinfo/America/Indiana/Vincennes", + "usr/share/zoneinfo/America/Indiana/Winamac", + "usr/share/zoneinfo/America/Kentucky/Louisville", + "usr/share/zoneinfo/America/Kentucky/Monticello", + "usr/share/zoneinfo/America/North_Dakota/Beulah", + "usr/share/zoneinfo/America/North_Dakota/Center", + "usr/share/zoneinfo/America/North_Dakota/New_Salem", + "usr/share/zoneinfo/Antarctica/Casey", + "usr/share/zoneinfo/Antarctica/Davis", + "usr/share/zoneinfo/Antarctica/DumontDUrville", + "usr/share/zoneinfo/Antarctica/Macquarie", + "usr/share/zoneinfo/Antarctica/Mawson", + "usr/share/zoneinfo/Antarctica/McMurdo", + "usr/share/zoneinfo/Antarctica/Palmer", + "usr/share/zoneinfo/Antarctica/Rothera", + "usr/share/zoneinfo/Antarctica/South_Pole", + "usr/share/zoneinfo/Antarctica/Syowa", + "usr/share/zoneinfo/Antarctica/Troll", + "usr/share/zoneinfo/Antarctica/Vostok", + "usr/share/zoneinfo/Arctic/Longyearbyen", + "usr/share/zoneinfo/Asia/Aden", + "usr/share/zoneinfo/Asia/Almaty", + "usr/share/zoneinfo/Asia/Amman", + "usr/share/zoneinfo/Asia/Anadyr", + "usr/share/zoneinfo/Asia/Aqtau", + "usr/share/zoneinfo/Asia/Aqtobe", + "usr/share/zoneinfo/Asia/Ashgabat", + "usr/share/zoneinfo/Asia/Ashkhabad", + "usr/share/zoneinfo/Asia/Atyrau", + "usr/share/zoneinfo/Asia/Baghdad", + "usr/share/zoneinfo/Asia/Bahrain", + "usr/share/zoneinfo/Asia/Baku", + "usr/share/zoneinfo/Asia/Bangkok", + "usr/share/zoneinfo/Asia/Barnaul", + "usr/share/zoneinfo/Asia/Beirut", + "usr/share/zoneinfo/Asia/Bishkek", + "usr/share/zoneinfo/Asia/Brunei", + "usr/share/zoneinfo/Asia/Calcutta", + "usr/share/zoneinfo/Asia/Chita", + "usr/share/zoneinfo/Asia/Choibalsan", + "usr/share/zoneinfo/Asia/Chongqing", + "usr/share/zoneinfo/Asia/Chungking", + "usr/share/zoneinfo/Asia/Colombo", + "usr/share/zoneinfo/Asia/Dacca", + "usr/share/zoneinfo/Asia/Damascus", + "usr/share/zoneinfo/Asia/Dhaka", + "usr/share/zoneinfo/Asia/Dili", + "usr/share/zoneinfo/Asia/Dubai", + "usr/share/zoneinfo/Asia/Dushanbe", + "usr/share/zoneinfo/Asia/Famagusta", + "usr/share/zoneinfo/Asia/Gaza", + "usr/share/zoneinfo/Asia/Harbin", + "usr/share/zoneinfo/Asia/Hebron", + "usr/share/zoneinfo/Asia/Ho_Chi_Minh", + "usr/share/zoneinfo/Asia/Hong_Kong", + "usr/share/zoneinfo/Asia/Hovd", + "usr/share/zoneinfo/Asia/Irkutsk", + "usr/share/zoneinfo/Asia/Istanbul", + "usr/share/zoneinfo/Asia/Jakarta", + "usr/share/zoneinfo/Asia/Jayapura", + "usr/share/zoneinfo/Asia/Jerusalem", + "usr/share/zoneinfo/Asia/Kabul", + "usr/share/zoneinfo/Asia/Kamchatka", + "usr/share/zoneinfo/Asia/Karachi", + "usr/share/zoneinfo/Asia/Kashgar", + "usr/share/zoneinfo/Asia/Kathmandu", + "usr/share/zoneinfo/Asia/Katmandu", + "usr/share/zoneinfo/Asia/Khandyga", + "usr/share/zoneinfo/Asia/Kolkata", + "usr/share/zoneinfo/Asia/Krasnoyarsk", + "usr/share/zoneinfo/Asia/Kuala_Lumpur", + "usr/share/zoneinfo/Asia/Kuching", + "usr/share/zoneinfo/Asia/Kuwait", + "usr/share/zoneinfo/Asia/Macao", + "usr/share/zoneinfo/Asia/Macau", + "usr/share/zoneinfo/Asia/Magadan", + "usr/share/zoneinfo/Asia/Makassar", + "usr/share/zoneinfo/Asia/Manila", + "usr/share/zoneinfo/Asia/Muscat", + "usr/share/zoneinfo/Asia/Nicosia", + "usr/share/zoneinfo/Asia/Novokuznetsk", + "usr/share/zoneinfo/Asia/Novosibirsk", + "usr/share/zoneinfo/Asia/Omsk", + "usr/share/zoneinfo/Asia/Oral", + "usr/share/zoneinfo/Asia/Phnom_Penh", + "usr/share/zoneinfo/Asia/Pontianak", + "usr/share/zoneinfo/Asia/Pyongyang", + "usr/share/zoneinfo/Asia/Qatar", + "usr/share/zoneinfo/Asia/Qostanay", + "usr/share/zoneinfo/Asia/Qyzylorda", + "usr/share/zoneinfo/Asia/Rangoon", + "usr/share/zoneinfo/Asia/Riyadh", + "usr/share/zoneinfo/Asia/Saigon", + "usr/share/zoneinfo/Asia/Sakhalin", + "usr/share/zoneinfo/Asia/Samarkand", + "usr/share/zoneinfo/Asia/Seoul", + "usr/share/zoneinfo/Asia/Shanghai", + "usr/share/zoneinfo/Asia/Singapore", + "usr/share/zoneinfo/Asia/Srednekolymsk", + "usr/share/zoneinfo/Asia/Taipei", + "usr/share/zoneinfo/Asia/Tashkent", + "usr/share/zoneinfo/Asia/Tbilisi", + "usr/share/zoneinfo/Asia/Tehran", + "usr/share/zoneinfo/Asia/Tel_Aviv", + "usr/share/zoneinfo/Asia/Thimbu", + "usr/share/zoneinfo/Asia/Thimphu", + "usr/share/zoneinfo/Asia/Tokyo", + "usr/share/zoneinfo/Asia/Tomsk", + "usr/share/zoneinfo/Asia/Ujung_Pandang", + "usr/share/zoneinfo/Asia/Ulaanbaatar", + "usr/share/zoneinfo/Asia/Ulan_Bator", + "usr/share/zoneinfo/Asia/Urumqi", + "usr/share/zoneinfo/Asia/Ust-Nera", + "usr/share/zoneinfo/Asia/Vientiane", + "usr/share/zoneinfo/Asia/Vladivostok", + "usr/share/zoneinfo/Asia/Yakutsk", + "usr/share/zoneinfo/Asia/Yangon", + "usr/share/zoneinfo/Asia/Yekaterinburg", + "usr/share/zoneinfo/Asia/Yerevan", + "usr/share/zoneinfo/Atlantic/Azores", + "usr/share/zoneinfo/Atlantic/Bermuda", + "usr/share/zoneinfo/Atlantic/Canary", + "usr/share/zoneinfo/Atlantic/Cape_Verde", + "usr/share/zoneinfo/Atlantic/Faeroe", + "usr/share/zoneinfo/Atlantic/Faroe", + "usr/share/zoneinfo/Atlantic/Jan_Mayen", + "usr/share/zoneinfo/Atlantic/Madeira", + "usr/share/zoneinfo/Atlantic/Reykjavik", + "usr/share/zoneinfo/Atlantic/South_Georgia", + "usr/share/zoneinfo/Atlantic/St_Helena", + "usr/share/zoneinfo/Atlantic/Stanley", + "usr/share/zoneinfo/Australia/ACT", + "usr/share/zoneinfo/Australia/Adelaide", + "usr/share/zoneinfo/Australia/Brisbane", + "usr/share/zoneinfo/Australia/Broken_Hill", + "usr/share/zoneinfo/Australia/Canberra", + "usr/share/zoneinfo/Australia/Currie", + "usr/share/zoneinfo/Australia/Darwin", + "usr/share/zoneinfo/Australia/Eucla", + "usr/share/zoneinfo/Australia/Hobart", + "usr/share/zoneinfo/Australia/LHI", + "usr/share/zoneinfo/Australia/Lindeman", + "usr/share/zoneinfo/Australia/Lord_Howe", + "usr/share/zoneinfo/Australia/Melbourne", + "usr/share/zoneinfo/Australia/NSW", + "usr/share/zoneinfo/Australia/North", + "usr/share/zoneinfo/Australia/Perth", + "usr/share/zoneinfo/Australia/Queensland", + "usr/share/zoneinfo/Australia/South", + "usr/share/zoneinfo/Australia/Sydney", + "usr/share/zoneinfo/Australia/Tasmania", + "usr/share/zoneinfo/Australia/Victoria", + "usr/share/zoneinfo/Australia/West", + "usr/share/zoneinfo/Australia/Yancowinna", + "usr/share/zoneinfo/Brazil/Acre", + "usr/share/zoneinfo/Brazil/DeNoronha", + "usr/share/zoneinfo/Brazil/East", + "usr/share/zoneinfo/Brazil/West", + "usr/share/zoneinfo/Canada/Atlantic", + "usr/share/zoneinfo/Canada/Central", + "usr/share/zoneinfo/Canada/Eastern", + "usr/share/zoneinfo/Canada/Mountain", + "usr/share/zoneinfo/Canada/Newfoundland", + "usr/share/zoneinfo/Canada/Pacific", + "usr/share/zoneinfo/Canada/Saskatchewan", + "usr/share/zoneinfo/Canada/Yukon", + "usr/share/zoneinfo/Chile/Continental", + "usr/share/zoneinfo/Chile/EasterIsland", + "usr/share/zoneinfo/Etc/GMT", + "usr/share/zoneinfo/Etc/GMT+0", + "usr/share/zoneinfo/Etc/GMT+1", + "usr/share/zoneinfo/Etc/GMT+10", + "usr/share/zoneinfo/Etc/GMT+11", + "usr/share/zoneinfo/Etc/GMT+12", + "usr/share/zoneinfo/Etc/GMT+2", + "usr/share/zoneinfo/Etc/GMT+3", + "usr/share/zoneinfo/Etc/GMT+4", + "usr/share/zoneinfo/Etc/GMT+5", + "usr/share/zoneinfo/Etc/GMT+6", + "usr/share/zoneinfo/Etc/GMT+7", + "usr/share/zoneinfo/Etc/GMT+8", + "usr/share/zoneinfo/Etc/GMT+9", + "usr/share/zoneinfo/Etc/GMT-0", + "usr/share/zoneinfo/Etc/GMT-1", + "usr/share/zoneinfo/Etc/GMT-10", + "usr/share/zoneinfo/Etc/GMT-11", + "usr/share/zoneinfo/Etc/GMT-12", + "usr/share/zoneinfo/Etc/GMT-13", + "usr/share/zoneinfo/Etc/GMT-14", + "usr/share/zoneinfo/Etc/GMT-2", + "usr/share/zoneinfo/Etc/GMT-3", + "usr/share/zoneinfo/Etc/GMT-4", + "usr/share/zoneinfo/Etc/GMT-5", + "usr/share/zoneinfo/Etc/GMT-6", + "usr/share/zoneinfo/Etc/GMT-7", + "usr/share/zoneinfo/Etc/GMT-8", + "usr/share/zoneinfo/Etc/GMT-9", + "usr/share/zoneinfo/Etc/GMT0", + "usr/share/zoneinfo/Etc/Greenwich", + "usr/share/zoneinfo/Etc/UCT", + "usr/share/zoneinfo/Etc/UTC", + "usr/share/zoneinfo/Etc/Universal", + "usr/share/zoneinfo/Etc/Zulu", + "usr/share/zoneinfo/Europe/Amsterdam", + "usr/share/zoneinfo/Europe/Andorra", + "usr/share/zoneinfo/Europe/Astrakhan", + "usr/share/zoneinfo/Europe/Athens", + "usr/share/zoneinfo/Europe/Belfast", + "usr/share/zoneinfo/Europe/Belgrade", + "usr/share/zoneinfo/Europe/Berlin", + "usr/share/zoneinfo/Europe/Bratislava", + "usr/share/zoneinfo/Europe/Brussels", + "usr/share/zoneinfo/Europe/Bucharest", + "usr/share/zoneinfo/Europe/Budapest", + "usr/share/zoneinfo/Europe/Busingen", + "usr/share/zoneinfo/Europe/Chisinau", + "usr/share/zoneinfo/Europe/Copenhagen", + "usr/share/zoneinfo/Europe/Dublin", + "usr/share/zoneinfo/Europe/Gibraltar", + "usr/share/zoneinfo/Europe/Guernsey", + "usr/share/zoneinfo/Europe/Helsinki", + "usr/share/zoneinfo/Europe/Isle_of_Man", + "usr/share/zoneinfo/Europe/Istanbul", + "usr/share/zoneinfo/Europe/Jersey", + "usr/share/zoneinfo/Europe/Kaliningrad", + "usr/share/zoneinfo/Europe/Kiev", + "usr/share/zoneinfo/Europe/Kirov", + "usr/share/zoneinfo/Europe/Kyiv", + "usr/share/zoneinfo/Europe/Lisbon", + "usr/share/zoneinfo/Europe/Ljubljana", + "usr/share/zoneinfo/Europe/London", + "usr/share/zoneinfo/Europe/Luxembourg", + "usr/share/zoneinfo/Europe/Madrid", + "usr/share/zoneinfo/Europe/Malta", + "usr/share/zoneinfo/Europe/Mariehamn", + "usr/share/zoneinfo/Europe/Minsk", + "usr/share/zoneinfo/Europe/Monaco", + "usr/share/zoneinfo/Europe/Moscow", + "usr/share/zoneinfo/Europe/Nicosia", + "usr/share/zoneinfo/Europe/Oslo", + "usr/share/zoneinfo/Europe/Paris", + "usr/share/zoneinfo/Europe/Podgorica", + "usr/share/zoneinfo/Europe/Prague", + "usr/share/zoneinfo/Europe/Riga", + "usr/share/zoneinfo/Europe/Rome", + "usr/share/zoneinfo/Europe/Samara", + "usr/share/zoneinfo/Europe/San_Marino", + "usr/share/zoneinfo/Europe/Sarajevo", + "usr/share/zoneinfo/Europe/Saratov", + "usr/share/zoneinfo/Europe/Simferopol", + "usr/share/zoneinfo/Europe/Skopje", + "usr/share/zoneinfo/Europe/Sofia", + "usr/share/zoneinfo/Europe/Stockholm", + "usr/share/zoneinfo/Europe/Tallinn", + "usr/share/zoneinfo/Europe/Tirane", + "usr/share/zoneinfo/Europe/Tiraspol", + "usr/share/zoneinfo/Europe/Ulyanovsk", + "usr/share/zoneinfo/Europe/Uzhgorod", + "usr/share/zoneinfo/Europe/Vaduz", + "usr/share/zoneinfo/Europe/Vatican", + "usr/share/zoneinfo/Europe/Vienna", + "usr/share/zoneinfo/Europe/Vilnius", + "usr/share/zoneinfo/Europe/Volgograd", + "usr/share/zoneinfo/Europe/Warsaw", + "usr/share/zoneinfo/Europe/Zagreb", + "usr/share/zoneinfo/Europe/Zaporozhye", + "usr/share/zoneinfo/Europe/Zurich", + "usr/share/zoneinfo/Indian/Antananarivo", + "usr/share/zoneinfo/Indian/Chagos", + "usr/share/zoneinfo/Indian/Christmas", + "usr/share/zoneinfo/Indian/Cocos", + "usr/share/zoneinfo/Indian/Comoro", + "usr/share/zoneinfo/Indian/Kerguelen", + "usr/share/zoneinfo/Indian/Mahe", + "usr/share/zoneinfo/Indian/Maldives", + "usr/share/zoneinfo/Indian/Mauritius", + "usr/share/zoneinfo/Indian/Mayotte", + "usr/share/zoneinfo/Indian/Reunion", + "usr/share/zoneinfo/Mexico/BajaNorte", + "usr/share/zoneinfo/Mexico/BajaSur", + "usr/share/zoneinfo/Mexico/General", + "usr/share/zoneinfo/Pacific/Apia", + "usr/share/zoneinfo/Pacific/Auckland", + "usr/share/zoneinfo/Pacific/Bougainville", + "usr/share/zoneinfo/Pacific/Chatham", + "usr/share/zoneinfo/Pacific/Chuuk", + "usr/share/zoneinfo/Pacific/Easter", + "usr/share/zoneinfo/Pacific/Efate", + "usr/share/zoneinfo/Pacific/Enderbury", + "usr/share/zoneinfo/Pacific/Fakaofo", + "usr/share/zoneinfo/Pacific/Fiji", + "usr/share/zoneinfo/Pacific/Funafuti", + "usr/share/zoneinfo/Pacific/Galapagos", + "usr/share/zoneinfo/Pacific/Gambier", + "usr/share/zoneinfo/Pacific/Guadalcanal", + "usr/share/zoneinfo/Pacific/Guam", + "usr/share/zoneinfo/Pacific/Honolulu", + "usr/share/zoneinfo/Pacific/Johnston", + "usr/share/zoneinfo/Pacific/Kanton", + "usr/share/zoneinfo/Pacific/Kiritimati", + "usr/share/zoneinfo/Pacific/Kosrae", + "usr/share/zoneinfo/Pacific/Kwajalein", + "usr/share/zoneinfo/Pacific/Majuro", + "usr/share/zoneinfo/Pacific/Marquesas", + "usr/share/zoneinfo/Pacific/Midway", + "usr/share/zoneinfo/Pacific/Nauru", + "usr/share/zoneinfo/Pacific/Niue", + "usr/share/zoneinfo/Pacific/Norfolk", + "usr/share/zoneinfo/Pacific/Noumea", + "usr/share/zoneinfo/Pacific/Pago_Pago", + "usr/share/zoneinfo/Pacific/Palau", + "usr/share/zoneinfo/Pacific/Pitcairn", + "usr/share/zoneinfo/Pacific/Pohnpei", + "usr/share/zoneinfo/Pacific/Ponape", + "usr/share/zoneinfo/Pacific/Port_Moresby", + "usr/share/zoneinfo/Pacific/Rarotonga", + "usr/share/zoneinfo/Pacific/Saipan", + "usr/share/zoneinfo/Pacific/Samoa", + "usr/share/zoneinfo/Pacific/Tahiti", + "usr/share/zoneinfo/Pacific/Tarawa", + "usr/share/zoneinfo/Pacific/Tongatapu", + "usr/share/zoneinfo/Pacific/Truk", + "usr/share/zoneinfo/Pacific/Wake", + "usr/share/zoneinfo/Pacific/Wallis", + "usr/share/zoneinfo/Pacific/Yap", + "usr/share/zoneinfo/US/Alaska", + "usr/share/zoneinfo/US/Aleutian", + "usr/share/zoneinfo/US/Arizona", + "usr/share/zoneinfo/US/Central", + "usr/share/zoneinfo/US/East-Indiana", + "usr/share/zoneinfo/US/Eastern", + "usr/share/zoneinfo/US/Hawaii", + "usr/share/zoneinfo/US/Indiana-Starke", + "usr/share/zoneinfo/US/Michigan", + "usr/share/zoneinfo/US/Mountain", + "usr/share/zoneinfo/US/Pacific", + "usr/share/zoneinfo/US/Samoa" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "xz-libs@5.8.3-r0", + "Name": "xz-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "1ae658a5f132a091" + }, + "Version": "5.8.3-r0", + "Arch": "x86_64", + "SrcName": "xz", + "SrcVersion": "5.8.3-r0", + "Licenses": [ + "GPL-2.0-or-later", + "0BSD", + "Public-Domain", + "LGPL-2.1-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:4c92c5be0c5bef404e93c880eba9037a9b147347", + "InstalledFiles": [ + "usr/lib/liblzma.so.5", + "usr/lib/liblzma.so.5.8.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "zlib@1.3.2-r0", + "Name": "zlib", + "Identifier": { + "PURL": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e37054a2982d6c16" + }, + "Version": "1.3.2-r0", + "Arch": "x86_64", + "SrcName": "zlib", + "SrcVersion": "1.3.2-r0", + "Licenses": [ + "Zlib" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:dd4c3d102acaef2a71a1495951d55fabc8680613", + "InstalledFiles": [ + "usr/lib/libz.so.1", + "usr/lib/libz.so.1.3.2" + ], + "AnalyzedBy": "apk" + } + ], + "Vulnerabilities": [ + { + "VulnerabilityID": "CVE-2026-85091", + "PkgID": "zlib@1.3.2-r0", + "PkgName": "zlib", + "PkgIdentifier": { + "PURL": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e37054a2982d6c16" + }, + "InstalledVersion": "1.3.2-r0", + "FixedVersion": "1.3.2-r1", + "Status": "fixed", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "PrimaryURL": "https://avd.aquasec.com/nvd/cve-2026-85091", + "DataSource": { + "ID": "alpine", + "Name": "Alpine Secdb", + "URL": "https://secdb.alpinelinux.org/" + }, + "Fingerprint": "sha256:d73c01b020c55acc174a3fde47c8af6f5638c58c7189c817edd6862029f6c5f5", + "Title": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vul ...", + "Description": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.", + "Severity": "MEDIUM", + "CweIDs": [ + "CWE-787" + ], + "VendorSeverity": { + "ubuntu": 2 + }, + "References": [ + "https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490", + "https://github.com/madler/zlib", + "https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393", + "https://www.cve.org/CVERecord?id=CVE-2026-85091", + "https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate" + ], + "PublishedDate": "2026-09-03T13:06:20.573Z", + "LastModifiedDate": "2026-09-09T20:41:07.123Z" + } + ] + }, + { + "Target": "Python", + "Class": "lang-pkgs", + "Type": "python-pkg", + "Packages": [ + { + "Name": "PyJWT", + "Identifier": { + "PURL": "pkg:pypi/pyjwt@2.15.1", + "UID": "d3f5f9a421b8abc9" + }, + "Version": "2.15.1", + "Licenses": [ + "MIT" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "cffi", + "Identifier": { + "PURL": "pkg:pypi/cffi@2.1.1", + "UID": "21042e2f37e33c05" + }, + "Version": "2.1.1", + "Licenses": [ + "MIT-0" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "cryptography", + "Identifier": { + "PURL": "pkg:pypi/cryptography@50.0.1", + "UID": "dcb3df6383fe2a60" + }, + "Version": "50.0.1", + "Licenses": [ + "Apache-2.0 OR BSD-3-Clause" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "informed-decision", + "Identifier": { + "PURL": "pkg:pypi/informed-decision@0.2.0", + "UID": "7989f2afae8ff568" + }, + "Version": "0.2.0", + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "pycparser", + "Identifier": { + "PURL": "pkg:pypi/pycparser@3.0", + "UID": "e5a4d03f15a695ff" + }, + "Version": "3.0", + "Licenses": [ + "BSD-3-Clause" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "waitress", + "Identifier": { + "PURL": "pkg:pypi/waitress@3.0.2", + "UID": "806e218e1c1e85f" + }, + "Version": "3.0.2", + "Licenses": [ + "ZPL-2.1" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + } + ] + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json new file mode 100644 index 0000000..b3cca7c --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json @@ -0,0 +1,20 @@ +{ + "intake_valid_offline": true, + "typed_memo_valid": true, + "lifecycle_documents_valid": 20, + "packet_actual_file_bytes_verified": true, + "submission_digest": "sha256:ac41c8aea7bb008e17f50dc0bab4aad584aef1e461222967ac98d74c7bd28af7", + "offline_constructed_grant": "state-hub/decision-record/net-kingdom-admins", + "deployed_submitter_admission_verified": false, + "human_approval": false, + "live_submitted": false, + "native_backup_restore_executed": false, + "native_workload_changed": false, + "packet_bytes_total": 249719, + "guard_tests": 5, + "guard_drift_negative_assertions": 20, + "transport_negative_cases": 6, + "fresh_readonly_preflight_all_checks_pass": true, + "fresh_readonly_capture": "2026-10-11T01:30:33Z", + "original_capture_bytes_preserved": true +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py new file mode 100644 index 0000000..75c837a --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py @@ -0,0 +1,125 @@ +"""Read a public policy image without executing it or retaining registry tokens.""" +import argparse +import hashlib +import io +import json +from pathlib import Path, PurePosixPath +import re +import tarfile +import urllib.error +import urllib.parse +import urllib.request + +ORIGIN = 'https://forgejo.coulomb.social' +BASE = ORIGIN + '/v2/coulomb/informed-decision/' +LIMIT = 300 * 1024 * 1024 +class NoRedirect(urllib.request.HTTPRedirectHandler): + def redirect_request(self, request, response, code, message, headers, new_url): + raise ValueError('registry redirects refused') +OPENER = urllib.request.build_opener(NoRedirect()) + + +def fetch(url, accept=None): + parsed_url = urllib.parse.urlparse(url) + if parsed_url.scheme != 'https' or parsed_url.netloc != 'forgejo.coulomb.social': + raise ValueError('unexpected registry origin') + headers = {'Accept': accept} if accept else {} + try: + response = OPENER.open(urllib.request.Request(url, headers=headers), timeout=30) + except urllib.error.HTTPError as error: + if error.code != 401: + raise + fields = dict(re.findall(r'(\w+)="([^"]*)"', error.headers.get('WWW-Authenticate', ''))) + realm = fields['realm'] + parsed = urllib.parse.urlparse(realm) + if parsed.scheme != 'https' or parsed.netloc != 'forgejo.coulomb.social': + raise ValueError('unexpected registry challenge origin') + query = urllib.parse.urlencode({k: fields[k] for k in ('service', 'scope') if k in fields}) + with OPENER.open(realm + '?' + query, timeout=30) as auth: + token = json.load(auth)['token'] + headers['Authorization'] = 'Bearer ' + token + response = OPENER.open(urllib.request.Request(url, headers=headers), timeout=60) + with response: + body = response.read(LIMIT + 1) + if len(body) > LIMIT: + raise ValueError('registry artifact exceeds local verification bound') + return body + + +def sha(data): + return hashlib.sha256(data).hexdigest() + + +def blob(descriptor): + digest = descriptor['digest'] + if not re.fullmatch(r'sha256:[a-f0-9]{64}', digest): + raise ValueError('unknown image digest') + data = fetch(BASE + 'blobs/' + digest) + if 'sha256:' + sha(data) != digest or len(data) != descriptor['size']: + raise ValueError('image blob hash or size mismatch') + return data + + +def manifest(digest): + raw = fetch(BASE + 'manifests/' + digest, 'application/vnd.oci.image.index.v1+json, application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.oci.image.manifest.v1+json, application/vnd.docker.distribution.manifest.v2+json') + if 'sha256:' + sha(raw) != digest: + raise ValueError('manifest digest mismatch') + value = json.loads(raw) + if 'manifests' in value: + selected = [d for d in value['manifests'] if d.get('platform',{}).get('os') == 'linux' and d.get('platform',{}).get('architecture') == 'amd64'] + if len(selected) != 1: + raise ValueError('one linux/amd64 platform required') + child, config, layerlist = manifest(selected[0]['digest']) + return child, config, layerlist + return value, json.loads(blob(value['config'])), value['layers'] + +def main(): + p = argparse.ArgumentParser(); p.add_argument('--digest',required=True);p.add_argument('--revision',required=True);p.add_argument('--output',type=Path,required=True);a=p.parse_args() + if not re.fullmatch(r'sha256:[a-f0-9]{64}',a.digest) or not re.fullmatch(r'[a-f0-9]{40}',a.revision): + raise ValueError('exact immutable revision and image required') + base_digest='sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173' + m,c,l=manifest(a.digest);bm,bc,bl=manifest(base_digest) + allowed_media={'application/vnd.docker.image.rootfs.diff.tar.gzip','application/vnd.oci.image.layer.v1.tar+gzip'} + if any(d['mediaType'] not in allowed_media for d in l+bl): raise ValueError('unsupported layer encoding') + if [(d['digest'],d['size']) for d in l[:-1]] != [(d['digest'],d['size']) for d in bl] or len(l) != len(bl)+1: + raise ValueError('candidate must retain all base descriptors plus exactly one layer') + for key in ('architecture','os'): + if c[key] != bc[key]: raise ValueError('platform changed') + if c['rootfs']['diff_ids'][:-1] != bc['rootfs']['diff_ids'] or len(c['rootfs']['diff_ids']) != len(bc['rootfs']['diff_ids'])+1: + raise ValueError('base rootfs changed') + defaults={'Hostname':'','Domainname':'','AttachStdin':False,'AttachStdout':False,'AttachStderr':False,'Tty':False,'OpenStdin':False,'StdinOnce':False,'Cmd':None,'Volumes':None,'OnBuild':None} + extra_defaults={} + for key,value in defaults.items(): + if key not in bc['config'] and key in c['config']: + if c['config'][key] != value: raise ValueError('legacy builder runtime default changed') + extra_defaults[key]=value + if 'Image' in c['config'] and 'Image' not in bc['config']: + if not re.fullmatch(r'sha256:[a-f0-9]{64}',c['config']['Image']):raise ValueError('unexpected legacy builder parent-image metadata') + extra_defaults['Image']=c['config']['Image'] + actual_config={k:v for k,v in c['config'].items() if k != 'Labels' and k not in extra_defaults} + base_config={k:v for k,v in bc['config'].items() if k != 'Labels'} + if actual_config != base_config: raise ValueError('runtime image config changed') + labels=c['config']['Labels']; expected={'org.opencontainers.image.revision':a.revision,'org.opencontainers.image.base.digest':base_digest,'social.coulomb.source.policy.sha256':'9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62','social.coulomb.release.scope':'INFD-WP-0009-T04/purpose-overlay-v1'} + for k,v in expected.items(): + if labels.get(k)!=v:raise ValueError('exact source/scope label mismatch') + if {k:v for k,v in labels.items() if k not in expected} != {k:v for k,v in bc['config'].get('Labels',{}).items() if k not in expected}: + raise ValueError('unrelated labels changed') + files=[]; dirs=[];content=None + with tarfile.open(fileobj=io.BytesIO(blob(l[-1])),mode='r:*') as archive: + for item in archive: + path=PurePosixPath(item.name.removeprefix('./')) + if path.is_absolute() or '..' in path.parts or any(p.startswith('.wh.') for p in path.parts):raise ValueError('unsafe overlay entry') + if item.isdir(): + allowed_dirs={'opt','opt/venv','opt/venv/lib','opt/venv/lib/python3.12','opt/venv/lib/python3.12/site-packages','opt/venv/lib/python3.12/site-packages/informed_decision'} + if str(path) not in allowed_dirs: raise ValueError('unexpected overlay directory') + dirs.append(str(path));continue + if not item.isfile():raise ValueError('unexpected overlay link or device') + files.append(str(path)) + if str(path)!='opt/venv/lib/python3.12/site-packages/informed_decision/policy.py' or item.mode!=0o644 or item.uid!=0 or item.gid!=0 or item.size>100000:raise ValueError('unexpected overlay file metadata') + content=archive.extractfile(item).read() + if len(files)!=1 or sha(content)!=expected['social.coulomb.source.policy.sha256']:raise ValueError('single installed source file not exact') + a.output.mkdir(parents=True,exist_ok=True) + (a.output/'image-manifest.json').write_text(json.dumps(m,indent=2)+'\n');(a.output/'image-config.json').write_text(json.dumps(c,indent=2)+'\n');(a.output/'base-image-config.json').write_text(json.dumps(bc,indent=2)+'\n') + receipt={'image_digest':a.digest,'source_revision':a.revision,'base_image_digest':base_digest,'base_layer_bytes_identical':True,'layer_media_type_conversion':'OCI gzip to Docker gzip, same digest and size','base_runtime_config_semantics_identical':True,'legacy_builder_config_additions':extra_defaults,'base_rootfs_prefix_identical':True,'overlay_regular_files':files,'overlay_directories':dirs,'policy_sha256':sha(content),'policy_mode':'0644','base_user':bc['config'].get('User'),'source_scope_labels':expected,'registry_read_route':'anonymous public scoped bearer challenge, no token retention','image_executed':False,'native_workload_changed':False,'native_backup_restore_executed':False} + (a.output/'registry-proof.json').write_text(json.dumps(receipt,indent=2)+'\n');print(json.dumps(receipt,sort_keys=True)) +if __name__=='__main__': main() diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt new file mode 100644 index 0000000..3217325 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt @@ -0,0 +1,153 @@ +--- +id: INFD-WP-0009 +type: workplan +title: "Repair lifecycle consumer pin after Access Engine v2 policy release" +domain: infotech +repo: informed-decision +status: active +owner: codex +topic_slug: netkingdom +created: "2026-10-10" +updated: "2026-10-11" +flavor: implementation +depends_on: [] +related: + - FLEX-WP-0035 + - INFD-WP-0007 +state_hub_workstream_id: "77eaeabf-0644-595f-b3d5-1168e6a294c4" +--- + +## Diagnose and prepare exact config repair + +```task +id: INFD-WP-0009-T01 +status: done +priority: high +state_hub_task_id: "5c30c308-8fe2-5956-b0c1-66c80bcb07e9" +``` + +Native State Hub lifecycle submission returns HTTP 503 `invalid_decision`. +The service remains Ready but its configured lifecycle package is v1/cee6a79; +Access Engine lifecycle provider now runs v2/da01e045 after FLEX-WP-0035. +The envelope contract remains `flex-auth.decision-record.v1`; this is a policy +pin mismatch, not an envelope compatibility migration. Keep exact package, +version and digest enforcement. Source preparation and regression evidence are +in `docs/evidence/2026-10-10-lifecycle-consumer-pin-repair.md`. + +## Release and verify the config-only repair + +```task +id: INFD-WP-0009-T02 +status: done +priority: high +needs_human: false +state_hub_task_id: "1e6684d7-7676-5c70-b701-9dad124b4f07" +``` + +Apply only the reviewed immutable runtime ConfigMap and Deployment reference +through the existing owner GitOps path after exact scoped supervisor approval. +Image, schema, credentials, audience and review policy remain pinned. Retain +server dry-run/diff, readiness and native State Hub register/publish receipts; +retry with stable write keys, do not infer success from readiness. Root agent +owns live evidence and approval recording. This is a repair of the shipped +initial lifecycle, separate from INFD-WP-0008 expansion. + +**Verified 2026-10-11:** founder approved exact config-only revision +`7db8485ffecdebfabd77a9daec085553c74bf0bf`. Manual Argo Application operation +synced only `informed-decision-runtime-6c221878d051` and Deployment, prune false. +Application Succeeded/Healthy; generation24 observed24 Ready1; `/readyz`200; +consumer v2/da01e045 and unchanged image7f5c6cb verified. Native lifecycle +registration and publication succeeded (events28/29). A later review request +rejected packet validation; this separate caller error does not undo verified +authoring. Custodian evidence records original approval, execution and rollback: +`docs/evidence/2026-10-10-security-consolidation/infd-pin-repair-preflight.json`. + +## Explicitly reject advisory purpose at consumer boundary + +```task +id: INFD-WP-0009-T03 +status: done +priority: medium +state_hub_task_id: "ee798d7d-5e60-5247-9c9b-285a7f65cf11" +``` + +PolicyClient now validates binding purpose: absent or exact empty string only; +readback and malformed purposes are refused. Nine purpose variants and a real +provider response contamination test preserve the binding, pin, expiry and +obligations gates. This task covers source implementation and regression tests. +The current runtime image lacks this patch. Service build/native release belongs +to T04, separate from the config-only T02 repair. + + +## Release the advisory-purpose source correction + +```task +id: INFD-WP-0009-T04 +status: progress +priority: medium +state_hub_task_id: "0e1bb868-7bc2-5d4d-953c-e0edaf660ad0" +``` + +Build and scan a new service image including T03, retain provenance and backup +compatibility evidence, prepare a separate scoped image proposal, and verify +native binding/refusal after the owner's approved release. Do not fold an image +change into the config-only T02 proposal. Current runtime 7f5c6cb remains exact. + +**Historical local preparation 2026-10-11:** narrow single-module image overlay on immutable running +7f5c6cb; exact source policy SHA-256 9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62. +Local image/index b8b58944786015a5375304241c149d1dab885eb539d6d8945f56b01a3c2bc821 +is built and retained, unpublished and undeployed. Base layer prefix and runtime +configuration are preserved; installed-image 10 purpose variants pass; 13 +container checks include restart and synthetic consistent backup/restore. A +fresh Trivy database scan has zero HIGH/CRITICAL findings, with its Alpine EOL +warning retained. See `docs/evidence/2026-10-11-purpose-hardening/README.md`. +Remaining gates: source-bound registry publication and exact digest verification, +fresh native snapshot/restore compatibility, owner GitOps server dry-run/diff, +separate scoped supervisor approval and native post-release binding/refusal. +No release approval or actual production-data restore is inferred from fixtures. + +**Publication and release preparation 2026-10-11:** actual owner CI +task11484/run3 succeeds at source3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168, +publishing immutable image763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a. +The failed run1/f66 and run2/ace are retained as refinements in the same trial. +Anonymous registry readback proves all8base compressed blobs/rootfs unchanged +plus only policy.py; legacy media-type/default-config serialization differences +are explicit. Pulled published artifact UID10001/GID10001, installed mode0644 +and exactpolicy hash, all10purpose forms pass. Full pinned scanner/DB covers +44packages: 0HIGH/CRITICAL, 1fixableMEDIUM CVE-2026-85091 in zlib1.3.2-r0, +identical actual current-base scan. This is not a zero-CVE release or estate +risk grade. T05 and INFD-RISK-20261011-ZLIB-85091 are live owner follow-through. + +The exact separate20document informed-decision packet is prepared and +offline typed/intake validated, with no submission or founder disposition +claimed. Source candidates differ solely in Deploymentimage and retain +ConfigMap6c221878d051/schema5/PVC/identity/policy pins. Fresh read-only +serverdryrun/clientdiff pass with sealedUID/fullconfiguration; existingmanual +Argo remains Healthy/OutOfSync at7db8485, not whole-app reconciled. +Remaining gates: independent owner review, actual founder native approval, +fresh protected native consistent snapshot/off-cluster custody/offline restore, +refresh preflight, exact owner-source pin/Deployment-only manual sync and +verified native installed purpose/refusal/lifecycle behavior. Synthetic native +placement checks are not new provider authorization evidence. Runtime remains7f5c. + +Evidence: `docs/evidence/2026-10-11-purpose-image-release/`. + +## Resolve inherited published-image zlib finding + +```task +id: INFD-WP-0009-T05 +status: todo +priority: medium +``` + +Owner follow-through `INFD-RISK-20261011-ZLIB-85091` tracks actual published +base and purpose-overlay scan finding CVE-2026-85091: zlib 1.3.2-r0, fixed +1.3.2-r1, scanner MEDIUM; this is not an estate risk grade. Prepare and verify a +separate source-bound base/dependency refresh, then obtain distinct native +release approval before changing the workload. Review due 2026-10-18; the date +is a manual owner follow-up, with no automatic expiry/rollback controller. +T04 cannot be treated as a zero-CVE release or silently include the base fix. +Preserve the original detection, pending founder disposition and remediation +evidence. Close only after actual installed-package proof and full rescan. + +Evidence: `docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json`. diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json new file mode 100644 index 0000000..80d54ba --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json @@ -0,0 +1,261 @@ +{ + "kind": "informed-decision.memo-intake", + "version": 1, + "idempotency_key": "infd-20261011-purpose-overlay-r1-v1", + "memo_class": "decision-record", + "review_group": "net-kingdom-admins", + "drafted_by": "custodian-codex", + "approval_intent": { + "action": "administer", + "principal": "informed-decision", + "purpose": "Approve exact image-only purpose overlay release plus protected native evidence backup/restore gates and explicit inherited fixable-medium owner follow-through; no unrelated grant.", + "target": { + "id": "INFD-WP-0009-T04/purpose-overlay-v1", + "type": "runtime-change", + "system": "railiance01" + } + }, + "memo": { + "id": "infd-20261011-purpose-overlay-r1", + "version": 1, + "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", + "requested_act": "approve", + "binding_level": "organizational", + "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Before ANY admin/Store, readonly schema5/integrity/count gate; protected backup/restore, sealedDeployment+actualCM/PVC identities and unoptimizedpreflight required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "binding": { + "principal": { + "id": "pending-human-session", + "kind": "person", + "display_name": "Founder review" + }, + "target": { + "kind": "environment", + "id": "realm:kubernetes/railiance01/informed-decision", + "label": "Informed Decision image-only purpose hardening on railiance01", + "environment": "production" + }, + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedCM/PVC/Deploymentpreflight+pre-openreadonlyschema5+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + }, + "step_kind": "approve", + "packet": [ + { + "item_id": "decision-packet-md", + "label": "decision-packet.md", + "hash": "sha256:23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1" + }, + { + "item_id": "proposal-json", + "label": "proposal.json", + "hash": "sha256:a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82" + }, + { + "item_id": "candidate-admission-json", + "label": "candidate-admission.json", + "hash": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "item_id": "rollback-admission-json", + "label": "rollback-admission.json", + "hash": "sha256:22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "item_id": "candidate-deployment-json", + "label": "candidate-deployment.json", + "hash": "sha256:722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "item_id": "rollback-deployment-json", + "label": "rollback-deployment.json", + "hash": "sha256:39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "item_id": "published-verification-json", + "label": "published-verification.json", + "hash": "sha256:8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2" + }, + { + "item_id": "registry-proof-json", + "label": "registry-proof.json", + "hash": "sha256:5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "item_id": "security-summary-json", + "label": "security-summary.json", + "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "item_id": "trivy-full-json", + "label": "trivy-full.json", + "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "item_id": "sqlite-readonly-py", + "label": "sqlite_readonly.py", + "hash": "sha256:eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38" + }, + { + "item_id": "sealed-native-dependencies-json", + "label": "sealed-native-dependencies.json", + "hash": "sha256:042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369" + }, + { + "item_id": "native-backup-restore-protocol-md", + "label": "native-backup-restore-protocol.md", + "hash": "sha256:2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc" + }, + { + "item_id": "inherited-vulnerability-follow-through-json", + "label": "inherited-vulnerability-follow-through.json", + "hash": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "item_id": "native-preflight-json", + "label": "native-preflight.json", + "hash": "sha256:eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "item_id": "sealed-live-deployment-json", + "label": "sealed-live-deployment.json", + "hash": "sha256:d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "item_id": "change-guard-py", + "label": "change_guard.py", + "hash": "sha256:f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be" + }, + { + "item_id": "preflight-py", + "label": "preflight.py", + "hash": "sha256:6b4c65f708238c9a9d17fd065876c7a00e1f1745926f990a1dd5e667298340cd" + }, + { + "item_id": "preflight-inputs-json", + "label": "preflight-inputs.json", + "hash": "sha256:756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06" + }, + { + "item_id": "fresh-preflight-validation-json", + "label": "fresh-preflight-validation.json", + "hash": "sha256:2ec324aa8e3f97753b3ed87bca80820feb5e542dc0a4799aa848ec77ea92feb7" + } + ], + "highlights": [ + { + "id": "native-custody-rollout-and-known-medium", + "item_id": "decision-packet-md", + "note": "Protected real-data snapshot/restore and a brief Recreate restart require this separate native approval. Actual scan has one fixable inherited MEDIUM, not zero CVEs; exact owner follow-through due2026-10-18 is manual, with no automatic controller. Rollback preserves latestschema5DB and allnew/uncertain evidence. Synthetic transport tests are not native PDP authority proof. Admin can migrate oldschemas: readonlyschema5/integrity/count check must precede every native/offline Store/admin open. ActualCM/PVC UID/custody drift and optimizedPython stop the operation.", + "required_ack": true, + "severity": "warning", + "locator": { + "kind": "section", + "heading": "Requested decision" + } + } + ], + "sealed": false, + "approval_id": null, + "approval_binding_digest": null + }, + "packet": [ + { + "item_id": "decision-packet-md", + "media_type": "text/markdown", + "content": "# Informed Decision purpose overlay release\n\n## Requested decision\n\nApprove the exact purpose-only image rollout and protected real-data backup/restore protocol for the existing Informed Decision service on railiance01. This request is separate from the already approved config-only repair. Only the existing Deployment image changes through the owner's manual Argo workflow, with prune disabled. Runtime ConfigMap `informed-decision-runtime-6c221878d051`, schema5, PVC, credentials, audience, policies, registries, access, replica1 and Recreate strategy remain fixed. Execute by 2026-10-12T23:59:59Z, after refreshed sealed-source/UID/configuration checks and backup/restore gates. Expiry stops authorization for an unstarted release; it does not install a controller or automatically roll back an already released image.\n\n## Artifact and known finding\n\nActual owner CI task11484/run3 published immutable image `sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a` from source `3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168`. Anonymous registry verification preserves all eight base compressed blobs/rootfs layers and adds only policy.py with exact source hash and mode0644. Legacy-builder media-type/default config serialization differences are recorded; the runtime semantics remain unchanged. Pulled published image executes as UID10001/GID10001 and passes ten installed checks: two supported binding forms, eight advisory/malformed refusals. Tests use synthetic transport and do not claim new native PDP authorization proof. The two failed CI attempts remain in the same trial history.\n\nActual unfiltered pinned scanner/DB evidence covers44packages: zero HIGH/CRITICAL, **one fixable MEDIUM**, CVE-2026-85091, zlib1.3.2-r0 fixed in1.3.2-r1. Actual current-base scan has the identical finding. Approving this packet explicitly permits this inherited finding during this narrow purpose release; it is not a RiskNexus estate risk grade or zero-CVE claim. Owner record INFD-RISK-20261011-ZLIB-85091 and live task INFD-WP-0009-T05 require separate base refresh and native approval, reviewed by2026-10-18. That review date is manual follow-through, with no auto-controller claim. Scanner notes Alpine3.24 absent EOL list; OS vulnerability detection ran against38OSpackages. Unknown vulnerabilities remain outside snapshot knowledge.\n\n## Native baseline and gates\n\nOriginal read-only capture01:25:38Z: existing Deployment UIDa588e10a, Ready1, image7f5c, unchanged runtime6c; native admission preserves the full configuration plus exactly the proposed image. Clientdiff returns1. Requests3460/4000mCPU86%, memory9472Mi59%; refresh before release. Existing Argo Application UID499868f2 is manual, target7db8485, Healthy with pre-existing OutOfSync status. Do not treat a scoped Deployment release as full-app reconciliation. Preserve its tracking-id; no unrelated resource sync/prune/adoption.\n\nThe refined read-only helper binds original source/helper/render/baseline hashes and actual immutable ConfigMap/PVC UIDs, runtime-data checksum and bound volume identity, explicitly refuses optimized interpreters, checks exact fresh live UID/configuration and admission, and writes a separate execution receipt outside this sealed packet. Failed initial raw Kustomize metadata check is retained: direct kubectl apply would drop Argo tracking-id. The reviewed selected Deployment explicitly retains that existing ID, matching Argo ownership. Any unrelated drift, different UID, altered admission, unavailable protected backup capacity, uncertain backup, restore mismatch or unhealthy baseline stops the release.\n\n## Protected backup and release\n\nBefore **any** native source or offline-restored Store/admin open, use the attached stdlib SQLite mode=ro/query_only checker to require schema5, integrity=ok and count-only baseline. The admin automatically migrates oldschemas, so a post-open report alone cannot prove no migration. Refuse other schemas before admin. Then use the existing owner admin's SQLite backup API, not a raw copy of the live database/WAL. Protect directories0700/files0600, owned by10001. Retain independently protected off-cluster snapshot custody and only count/hash receipts. No database contents, caller tokens, requester Secret or runtime credential files enter Git, State Hub, logs or this packet. Native backup and offline real-data restore have not yet occurred. Use an isolated private disposable copy, networknone and no runtime config/token mounts, run the pre-open checker and exact offline `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite` after it passes, comparing frozen snapshot counts without service startup, then clean only the disposable restored copy. Retain the original snapshot. The attached protocol binds case-specific paths and fail-closed capacity/custody checks.\n\nRefresh a consistent online snapshot immediately before image-only cutover. This protocol does not assert traffic/dispatcher quiescence. Current and candidate share schema5 and unchanged store code; rollback retains the latest live database and all new/uncertain evidence. Stop the old writer before the new one with existing Recreate and single-writer lock. Do not restore an older snapshot over later writes, discard unresolved external effects, scale other workloads, change policies/identity/custody, or create human dispositions to make checks green.\n\nPin the existing Application to the exact owner commit containing the approved candidate source hashes, and manually sync only Deployment/informed-decision with prune=false. Verify actualimage/module/mode/UID, health/readiness and installed purpose refusals on the real placement; explicitly distinguish synthetic-transport checks from actual provider evidence. Existing native binding/lifecycle behavior must remain available. If unhealthy or verification fails, return Application source to7db8485 and scoped-sync prior same-schema image7f5c, preserving current evidence database; retain failed outcomes. Any data recovery beyond this same-schema image rollback is a separate founder decision.\n\n## Alternatives and estimates\n\nProceed with this narrow release plus explicit inherited-medium follow-through, or defer and prepare a separate base/dependency refresh before any release. No additional recurring hosting is proposed: estimated incremental infrastructure EUR0, with private storage and attended engineering/recovery time unpriced. Risks include a brief Recreate interruption, private backup custody errors, caller refusal when advisory responses were improperly treated as binding, and the disclosed inherited finding. This decision does not promote agent autonomy or grant unrelated work.\n\n## Independent review refinements\n\nThe initial36path/20document packet at manifest7c6738b3 and submissionac41c8ae is preserved in source preparation evidence, with the failed/conditional review. Independent Platform review identified admin auto-migration, optimization bypass, and actual same-name ConfigMap/PVC replacement gaps. The amended packet adds pre-open stdlib read-only schema/integrity/count gates, explicit local/remote optimization refusal, and independently sealed actual native config/PVC custody checks. These are refinements in the same proposal/trial, with no original or amended founder approval claimed.\n" + }, + { + "item_id": "proposal-json", + "media_type": "application/json", + "content": "{\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"trial_id\": \"infd-purpose-20261011-r1\",\n \"state\": \"prepared-unapproved\",\n \"target\": \"realm:kubernetes/railiance01/informed-decision\",\n \"authority\": \"ADMINISTER; activation APPROVED only upon exact founder disposition\",\n \"candidate_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"published_source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"prior_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"prior_argo_revision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"native_object\": {\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"namespace\": \"informed-decision\",\n \"name\": \"informed-decision\",\n \"uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\"\n },\n \"argo_application_uid\": \"499868f2-eabc-4df4-ae31-b89ce58d750d\",\n \"source_gate\": \"Exact committed owner source must contain the two approved candidate file hashes in preflight-inputs.json; source preparation is not native approval\",\n \"sync_scope\": [\n \"apps:Deployment:informed-decision\"\n ],\n \"prune\": false,\n \"automated_sync\": false,\n \"runtime_configmap\": \"informed-decision-runtime-6c221878d051\",\n \"schema\": 5,\n \"requested_operations\": [\n \"Protected SQLite-consistent native backup and independently protected off-cluster custody\",\n \"Offline restore/integrity/count comparison on a private disposable volume with exact candidate, no runtime tokens/config/network\",\n \"Refresh a consistent pre-cutover snapshot, retain private copies and count-only/hash receipts\",\n \"Pin existing manual Argo Application to exact approved owner source and manually sync only existing Deployment image\",\n \"Verify health/readiness/image/module/installed fail-closed purpose checks and retained schema/count evidence; recover to prior same-schema image if needed\"\n ],\n \"execute_by\": \"2026-10-12T23:59:59Z\",\n \"temporary_vulnerability_review_due\": \"2026-10-18\",\n \"known_scan_findings\": \"0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, actual currentbase+candidate findings identical\",\n \"vulnerability_record\": \"INFD-RISK-20261011-ZLIB-85091 / INFD-WP-0009-T05\",\n \"cost_estimate_EUR\": 0,\n \"cost_limits\": \"No new recurring infrastructure; private backup storage and attended engineering/recovery time unpriced, not an autopilot cost grant\",\n \"risk_estimates\": [\n \"Brief Recreate service interruption; no concurrent new writer/surge\",\n \"Private evidence snapshot custody and disposal errors; no snapshots/tokens in public evidence\",\n \"Candidate purpose refusal may expose callers relying on advisory results as binding\",\n \"Inherited known fixable MEDIUM remains until separately approved owner remediation\",\n \"Existing Argo OutOfSync baseline is retained; no whole-app sync or unrelated repairs permitted\"\n ],\n \"rollback\": \"Manual Argo source pin back to7db8485 and scoped Deployment-only sync to7f5c image; retain current schema5 database and all post-cutover evidence, never restore older snapshot over live writes\",\n \"native_executed\": false,\n \"human_approval\": false,\n \"refinement_of_manifest\": \"7c6738b39ea8e54e61c8ed625e94ad0b2755e672e1576efcdf84a1d665ac3300\",\n \"mandatory_pre_open_gate\": \"stdlibSQLite mode=ro/query_only: schema5+integrity+count baseline before ANY Store/admin on native source or restoredcopy; refuseoldschemas without migration\",\n \"optimized_interpreters\": \"local+remote explicitlyrefused beforeassert gates\",\n \"native_dependency_gate\": \"sealed actualCM UID/immutable/canonicaldatahash+PVC UID/fullspec/Bound/volumeName, no rawCMdata orSecret reads\",\n \"live_counts\": \"Frozen snapshot/clone exactcounter equality; postcutover/rollback livecounterchanges may reflect legitimate concurrentcommits/state transitions, latestDB alwaysretained\"\n}\n" + }, + { + "item_id": "candidate-admission-json", + "media_type": "application/json", + "content": "{\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"policy\": {\n \"origin\": \"http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080\",\n \"package\": \"informed-decision.compact-sitting\",\n \"version\": \"v13\",\n \"package_digest\": \"sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873\",\n \"pod_name\": \"flex-auth-informed-decision-sitting\"\n },\n \"keycape_egress_ips\": [\n \"92.205.62.239\"\n ],\n \"storage_class\": \"local-path\",\n \"ordinary_approval_ids\": [\n \"2ce76d7f-01c3-4b63-8476-8d1230679769\",\n \"c2af4bcf-15b4-4305-aac1-acc7e4dcb099\",\n \"dc22666a-d5d7-46bc-9490-ebe9fe09dc38\"\n ],\n \"lifecycle_policy\": {\n \"package\": \"informed-decision.lifecycle\",\n \"version\": \"v2\",\n \"package_digest\": \"sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c\",\n \"origin\": \"http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080\",\n \"pod_name\": \"flex-auth-informed-decision-lifecycle\"\n },\n \"lifecycle_delivery\": true,\n \"intake_attributes\": true,\n \"intake_delivery\": {\n \"hub_origin\": \"http://state-hub.state-hub.svc.cluster.local:8000\"\n },\n \"workload_api\": {\n \"registries_configmap\": \"informed-decision-workload-registry\",\n \"peers\": [\n {\n \"namespace\": \"state-hub\",\n \"app\": \"state-hub\"\n }\n ],\n \"api_egress\": [\n {\n \"ip\": \"10.43.0.1\",\n \"port\": 443\n },\n {\n \"ip\": \"92.205.62.239\",\n \"port\": 6443\n }\n ],\n \"intake\": true,\n \"lifecycle\": true\n }\n}\n" + }, + { + "item_id": "rollback-admission-json", + "media_type": "application/json", + "content": "{\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"policy\": {\n \"origin\": \"http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080\",\n \"package\": \"informed-decision.compact-sitting\",\n \"version\": \"v13\",\n \"package_digest\": \"sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873\",\n \"pod_name\": \"flex-auth-informed-decision-sitting\"\n },\n \"keycape_egress_ips\": [\n \"92.205.62.239\"\n ],\n \"storage_class\": \"local-path\",\n \"ordinary_approval_ids\": [\n \"2ce76d7f-01c3-4b63-8476-8d1230679769\",\n \"c2af4bcf-15b4-4305-aac1-acc7e4dcb099\",\n \"dc22666a-d5d7-46bc-9490-ebe9fe09dc38\"\n ],\n \"lifecycle_policy\": {\n \"package\": \"informed-decision.lifecycle\",\n \"version\": \"v2\",\n \"package_digest\": \"sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c\",\n \"origin\": \"http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080\",\n \"pod_name\": \"flex-auth-informed-decision-lifecycle\"\n },\n \"lifecycle_delivery\": true,\n \"intake_attributes\": true,\n \"intake_delivery\": {\n \"hub_origin\": \"http://state-hub.state-hub.svc.cluster.local:8000\"\n },\n \"workload_api\": {\n \"registries_configmap\": \"informed-decision-workload-registry\",\n \"peers\": [\n {\n \"namespace\": \"state-hub\",\n \"app\": \"state-hub\"\n }\n ],\n \"api_egress\": [\n {\n \"ip\": \"10.43.0.1\",\n \"port\": 443\n },\n {\n \"ip\": \"92.205.62.239\",\n \"port\": 6443\n }\n ],\n \"intake\": true,\n \"lifecycle\": true\n }\n}\n" + }, + { + "item_id": "candidate-deployment-json", + "media_type": "application/json", + "content": "{\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\",\n \"argocd.argoproj.io/tracking-id\": \"informed-decision:apps/Deployment:informed-decision/informed-decision\"\n },\n \"name\": \"informed-decision\",\n \"namespace\": \"informed-decision\"\n },\n \"spec\": {\n \"progressDeadlineSeconds\": 600,\n \"replicas\": 1,\n \"selector\": {\n \"matchLabels\": {\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"strategy\": {\n \"type\": \"Recreate\"\n },\n \"template\": {\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"labels\": {\n \"app.kubernetes.io/component\": \"review\",\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"spec\": {\n \"automountServiceAccountToken\": false,\n \"containers\": [\n {\n \"env\": [\n {\n \"name\": \"INFD_KEYCAPE_ISSUER\",\n \"value\": \"https://kc.coulomb.social\"\n },\n {\n \"name\": \"INFD_CONTAINER_CONFIG\",\n \"value\": \"/configuration/runtime.json\"\n }\n ],\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"livenessProbe\": {\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"name\": \"informed-decision\",\n \"ports\": [\n {\n \"containerPort\": 8080,\n \"name\": \"http\"\n },\n {\n \"containerPort\": 8081,\n \"name\": \"workload\"\n }\n ],\n \"readinessProbe\": {\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"resources\": {\n \"limits\": {\n \"cpu\": \"500m\",\n \"memory\": \"256Mi\"\n },\n \"requests\": {\n \"cpu\": \"5m\",\n \"memory\": \"64Mi\"\n }\n },\n \"securityContext\": {\n \"allowPrivilegeEscalation\": false,\n \"capabilities\": {\n \"drop\": [\n \"ALL\"\n ]\n },\n \"readOnlyRootFilesystem\": true\n },\n \"startupProbe\": {\n \"failureThreshold\": 12,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"volumeMounts\": [\n {\n \"mountPath\": \"/data\",\n \"name\": \"data\"\n },\n {\n \"mountPath\": \"/run/informed-decision\",\n \"name\": \"runtime\"\n },\n {\n \"mountPath\": \"/tmp\",\n \"name\": \"tmp\"\n },\n {\n \"mountPath\": \"/configuration\",\n \"name\": \"configuration\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/policy\",\n \"name\": \"caller\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/audit\",\n \"name\": \"audit\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/kubernetes\",\n \"name\": \"kubernetes-api\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/workload-registry\",\n \"name\": \"workload-registry\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/requester\",\n \"name\": \"sitting-requester\",\n \"readOnly\": true\n }\n ]\n }\n ],\n \"securityContext\": {\n \"fsGroup\": 10001,\n \"fsGroupChangePolicy\": \"OnRootMismatch\",\n \"runAsGroup\": 10001,\n \"runAsNonRoot\": true,\n \"runAsUser\": 10001,\n \"seccompProfile\": {\n \"type\": \"RuntimeDefault\"\n }\n },\n \"serviceAccountName\": \"review\",\n \"terminationGracePeriodSeconds\": 45,\n \"volumes\": [\n {\n \"name\": \"data\",\n \"persistentVolumeClaim\": {\n \"claimName\": \"informed-decision-data\"\n }\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"runtime\"\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"tmp\"\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-runtime-6c221878d051\"\n },\n \"name\": \"configuration\"\n },\n {\n \"name\": \"caller\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"audience\": \"flex-auth\",\n \"expirationSeconds\": 3600,\n \"path\": \"token\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"audit\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"token\",\n \"path\": \"token\"\n }\n ],\n \"secretName\": \"informed-decision-audit\"\n }\n },\n {\n \"name\": \"kubernetes-api\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"expirationSeconds\": 600,\n \"path\": \"token\"\n }\n },\n {\n \"configMap\": {\n \"items\": [\n {\n \"key\": \"ca.crt\",\n \"path\": \"ca.crt\"\n }\n ],\n \"name\": \"kube-root-ca.crt\"\n }\n }\n ]\n }\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-workload-registry\"\n },\n \"name\": \"workload-registry\"\n },\n {\n \"name\": \"sitting-requester\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"client-secret\",\n \"path\": \"client-secret\"\n }\n ],\n \"optional\": false,\n \"secretName\": \"informed-decision-sitting-requester\"\n }\n }\n ]\n }\n }\n }\n}\n" + }, + { + "item_id": "rollback-deployment-json", + "media_type": "application/json", + "content": "{\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\",\n \"argocd.argoproj.io/tracking-id\": \"informed-decision:apps/Deployment:informed-decision/informed-decision\"\n },\n \"name\": \"informed-decision\",\n \"namespace\": \"informed-decision\"\n },\n \"spec\": {\n \"progressDeadlineSeconds\": 600,\n \"replicas\": 1,\n \"selector\": {\n \"matchLabels\": {\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"strategy\": {\n \"type\": \"Recreate\"\n },\n \"template\": {\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"labels\": {\n \"app.kubernetes.io/component\": \"review\",\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"spec\": {\n \"automountServiceAccountToken\": false,\n \"containers\": [\n {\n \"env\": [\n {\n \"name\": \"INFD_KEYCAPE_ISSUER\",\n \"value\": \"https://kc.coulomb.social\"\n },\n {\n \"name\": \"INFD_CONTAINER_CONFIG\",\n \"value\": \"/configuration/runtime.json\"\n }\n ],\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"livenessProbe\": {\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"name\": \"informed-decision\",\n \"ports\": [\n {\n \"containerPort\": 8080,\n \"name\": \"http\"\n },\n {\n \"containerPort\": 8081,\n \"name\": \"workload\"\n }\n ],\n \"readinessProbe\": {\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"resources\": {\n \"limits\": {\n \"cpu\": \"500m\",\n \"memory\": \"256Mi\"\n },\n \"requests\": {\n \"cpu\": \"5m\",\n \"memory\": \"64Mi\"\n }\n },\n \"securityContext\": {\n \"allowPrivilegeEscalation\": false,\n \"capabilities\": {\n \"drop\": [\n \"ALL\"\n ]\n },\n \"readOnlyRootFilesystem\": true\n },\n \"startupProbe\": {\n \"failureThreshold\": 12,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\"\n },\n \"periodSeconds\": 10,\n \"timeoutSeconds\": 2\n },\n \"volumeMounts\": [\n {\n \"mountPath\": \"/data\",\n \"name\": \"data\"\n },\n {\n \"mountPath\": \"/run/informed-decision\",\n \"name\": \"runtime\"\n },\n {\n \"mountPath\": \"/tmp\",\n \"name\": \"tmp\"\n },\n {\n \"mountPath\": \"/configuration\",\n \"name\": \"configuration\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/policy\",\n \"name\": \"caller\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/audit\",\n \"name\": \"audit\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/kubernetes\",\n \"name\": \"kubernetes-api\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/workload-registry\",\n \"name\": \"workload-registry\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/requester\",\n \"name\": \"sitting-requester\",\n \"readOnly\": true\n }\n ]\n }\n ],\n \"securityContext\": {\n \"fsGroup\": 10001,\n \"fsGroupChangePolicy\": \"OnRootMismatch\",\n \"runAsGroup\": 10001,\n \"runAsNonRoot\": true,\n \"runAsUser\": 10001,\n \"seccompProfile\": {\n \"type\": \"RuntimeDefault\"\n }\n },\n \"serviceAccountName\": \"review\",\n \"terminationGracePeriodSeconds\": 45,\n \"volumes\": [\n {\n \"name\": \"data\",\n \"persistentVolumeClaim\": {\n \"claimName\": \"informed-decision-data\"\n }\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"runtime\"\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"tmp\"\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-runtime-6c221878d051\"\n },\n \"name\": \"configuration\"\n },\n {\n \"name\": \"caller\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"audience\": \"flex-auth\",\n \"expirationSeconds\": 3600,\n \"path\": \"token\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"audit\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"token\",\n \"path\": \"token\"\n }\n ],\n \"secretName\": \"informed-decision-audit\"\n }\n },\n {\n \"name\": \"kubernetes-api\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"expirationSeconds\": 600,\n \"path\": \"token\"\n }\n },\n {\n \"configMap\": {\n \"items\": [\n {\n \"key\": \"ca.crt\",\n \"path\": \"ca.crt\"\n }\n ],\n \"name\": \"kube-root-ca.crt\"\n }\n }\n ]\n }\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-workload-registry\"\n },\n \"name\": \"workload-registry\"\n },\n {\n \"name\": \"sitting-requester\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"client-secret\",\n \"path\": \"client-secret\"\n }\n ],\n \"optional\": false,\n \"secretName\": \"informed-decision-sitting-requester\"\n }\n }\n ]\n }\n }\n }\n}\n" + }, + { + "item_id": "published-verification-json", + "media_type": "application/json", + "content": "{\n \"proposal\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"observed_at\": \"2026-10-11T01:24:01.985128+00:00\",\n \"native_owner_publication_job\": {\n \"id\": 11484,\n \"name\": \"publish-candidate\",\n \"head_branch\": \"main\",\n \"head_sha\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"run_number\": 3,\n \"event\": \"push\",\n \"display_title\": \"Prepare readable overlay context with the admitted legacy builder\",\n \"status\": \"success\",\n \"workflow_id\": \"purpose-overlay-image.yaml\",\n \"url\": \"https://forgejo.coulomb.social/coulomb/informed-decision/actions/runs/3\",\n \"created_at\": \"2026-10-11T01:20:59Z\",\n \"updated_at\": \"2026-10-11T01:21:08Z\",\n \"run_started_at\": \"2026-10-11T01:20:59Z\"\n },\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"policy_sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\",\n \"registry_proof_sha256\": \"5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213\",\n \"source_render_change_only\": \"Deployment/informed-decision spec.template.spec.containers[0].image\",\n \"runtime_configmap_unchanged\": \"informed-decision-runtime-6c221878d051\",\n \"installed_image_execution\": {\n \"immutable_registry_artifact_pulled_anonymously\": true,\n \"UID\": 10001,\n \"GID\": 10001,\n \"policy_file_UID\": 0,\n \"policy_file_mode\": \"0644\",\n \"purpose_variants\": 10,\n \"binding_forms_allowed\": 2,\n \"advisory_or_malformed_refused\": 8,\n \"network\": \"none\",\n \"read_only\": true,\n \"synthetic_transport\": true,\n \"native_PDP_test\": false\n },\n \"scan_summary_sha256\": \"0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44\",\n \"historical_failed_runs_retained\": [\n \"f66de505/task11482/run1\",\n \"acecad887/task11483/run2\"\n ],\n \"native_hosting_changed\": false,\n \"native_backup_restore_executed\": false,\n \"human_approval\": false,\n \"evidence_file_sha256\": {\n \"image-manifest.json\": \"978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb\",\n \"image-config.json\": \"4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10\",\n \"base-image-config.json\": \"b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00\",\n \"registry-proof.json\": \"5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213\",\n \"trivy-full.json\": \"f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e\",\n \"sbom.cdx.json\": \"a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d\",\n \"base-trivy-full.json\": \"d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80\",\n \"check_installed.py\": \"a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad\",\n \"verify_registry.py\": \"413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4\",\n \"sqlite_readonly.py\": \"eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38\",\n \"sealed-native-dependencies.json\": \"042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369\",\n \"review-refinement.json\": \"ea62845cee5ee6f4f6cb7f5dcd0af601ba29a21c8ff80efbbc02ad16e35bea75\",\n \"test_change_guard.py\": \"da5350437357ba329236cc137610c03856f38f836ddf2856025bc12011fad07f\",\n \"test_sqlite_readonly.py\": \"c7a91d0c6a373d738c88bb817d9bfb2ff8a179bc61b93063b89677b566520323\",\n \"test_preflight_optimization.py\": \"a0c4fa18c5d6c21476a06c6d05fe7656259d204299138851599e9214d911206d\"\n }\n}\n" + }, + { + "item_id": "registry-proof-json", + "media_type": "application/json", + "content": "{\n \"image_digest\": \"sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"base_image_digest\": \"sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"base_layer_bytes_identical\": true,\n \"layer_media_type_conversion\": \"OCI gzip to Docker gzip, same digest and size\",\n \"base_runtime_config_semantics_identical\": true,\n \"legacy_builder_config_additions\": {\n \"Hostname\": \"\",\n \"Domainname\": \"\",\n \"AttachStdin\": false,\n \"AttachStdout\": false,\n \"AttachStderr\": false,\n \"Tty\": false,\n \"OpenStdin\": false,\n \"StdinOnce\": false,\n \"Cmd\": null,\n \"Volumes\": null,\n \"OnBuild\": null,\n \"Image\": \"sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883\"\n },\n \"base_rootfs_prefix_identical\": true,\n \"overlay_regular_files\": [\n \"opt/venv/lib/python3.12/site-packages/informed_decision/policy.py\"\n ],\n \"overlay_directories\": [\n \"opt\",\n \"opt/venv\",\n \"opt/venv/lib\",\n \"opt/venv/lib/python3.12\",\n \"opt/venv/lib/python3.12/site-packages\",\n \"opt/venv/lib/python3.12/site-packages/informed_decision\"\n ],\n \"policy_sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\",\n \"policy_mode\": \"0644\",\n \"base_user\": \"10001:10001\",\n \"source_scope_labels\": {\n \"org.opencontainers.image.revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"org.opencontainers.image.base.digest\": \"sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"social.coulomb.source.policy.sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\",\n \"social.coulomb.release.scope\": \"INFD-WP-0009-T04/purpose-overlay-v1\"\n },\n \"registry_read_route\": \"anonymous public scoped bearer challenge, no token retention\",\n \"image_executed\": false,\n \"native_workload_changed\": false,\n \"native_backup_restore_executed\": false\n}\n" + }, + { + "item_id": "security-summary-json", + "media_type": "application/json", + "content": "{\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"scanner\": \"aquasec/trivy@sha256:62b1e65e8869bc4b4c6aa4fa2b21595256c7c2f6018a9d9ad61caf87187c1969\",\n \"version\": \"0.74.0\",\n \"db_metadata\": {\n \"Version\": 2,\n \"NextUpdate\": \"2026-10-11T18:59:50.889010572Z\",\n \"UpdatedAt\": \"2026-10-10T18:59:50.889010923Z\",\n \"DownloadedAt\": \"2026-10-10T23:32:32.380033131Z\"\n },\n \"suppression\": false,\n \"ignore_unfixed\": false,\n \"severity_filter\": null,\n \"package_count\": 44,\n \"findings_by_severity\": {\n \"MEDIUM\": 1\n },\n \"findings\": [\n {\n \"id\": \"CVE-2026-85091\",\n \"package\": \"zlib\",\n \"installed\": \"1.3.2-r0\",\n \"fixed\": \"1.3.2-r1\",\n \"severity\": \"MEDIUM\"\n }\n ],\n \"coverage_limits\": [\n \"Alpine3.24 absent scanner EOL list; OS detector ran against Alpine3.24 repository on38OS packages\",\n \"Known findings asof pinnedDB, not claim absence of unknown vulnerabilities\"\n ],\n \"high_critical\": 0,\n \"same_scanner_actual_base_scan_findings_identical\": true,\n \"base_scan_file\": \"base-trivy-full.json\"\n}\n" + }, + { + "item_id": "trivy-full-json", + "media_type": "application/json", + "content": "{\n \"SchemaVersion\": 2,\n \"Trivy\": {\n \"Version\": \"0.74.0\"\n },\n \"ReportID\": \"01a1288d-8df1-73fb-9313-3642dd64ba72\",\n \"CreatedAt\": \"2026-10-11T01:22:07.985264404Z\",\n \"ArtifactID\": \"sha256:40f873b8d6345341e2f661a5038c092d186e2831dc60b61704a419a1f4f77ef6\",\n \"ArtifactName\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"ArtifactType\": \"container_image\",\n \"Metadata\": {\n \"Size\": 88258048,\n \"OS\": {\n \"Family\": \"alpine\",\n \"Name\": \"3.24.1\"\n },\n \"ImageID\": \"sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779\",\n \"DiffIDs\": [\n \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\",\n \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\",\n \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\",\n \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\",\n \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\",\n \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\",\n \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\",\n \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\",\n \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n ],\n \"RepoDigests\": [\n \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\"\n ],\n \"Reference\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"ImageConfig\": {\n \"architecture\": \"amd64\",\n \"created\": \"2026-10-11T01:21:04.787527697Z\",\n \"docker_version\": \"27.5.1\",\n \"history\": [\n {\n \"created\": \"2026-06-16T00:01:29.967161902Z\",\n \"created_by\": \"ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-06-16T00:01:29.967161902Z\",\n \"created_by\": \"CMD [\\\"/bin/sh\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV LANG=C.UTF-8\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\tapk add --no-cache \\t\\tca-certificates \\t\\ttzdata \\t; # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PYTHON_VERSION=3.12.14\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:10:30.672225972Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\t\\tapk add --no-cache --virtual .build-deps \\t\\tbluez-dev \\t\\tbzip2-dev \\t\\tdpkg-dev dpkg \\t\\tfindutils \\t\\tg++ \\t\\tgcc \\t\\tgdbm-dev \\t\\tgnupg \\t\\tlibc-dev \\t\\tlibffi-dev \\t\\tlibnsl-dev \\t\\tlibtirpc-dev \\t\\tlinux-headers \\t\\tmake \\t\\tncurses-dev \\t\\topenssl-dev \\t\\tpax-utils \\t\\treadline-dev \\t\\tsqlite-dev \\t\\ttar \\t\\ttcl-dev \\t\\ttk \\t\\ttk-dev \\t\\tutil-linux-dev \\t\\txz \\t\\txz-dev \\t\\tzlib-dev \\t; \\t\\twget -O python.tar.xz \\\"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\\\"; \\techo \\\"$PYTHON_SHA256 *python.tar.xz\\\" | sha256sum -c -; \\twget -O python.tar.xz.asc \\\"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\\\"; \\tGNUPGHOME=\\\"$(mktemp -d)\\\"; export GNUPGHOME; \\tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \\\"$GPG_KEY\\\"; \\tgpg --batch --verify python.tar.xz.asc python.tar.xz; \\tgpgconf --kill all; \\trm -rf \\\"$GNUPGHOME\\\" python.tar.xz.asc; \\tmkdir -p /usr/src/python; \\ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \\trm python.tar.xz; \\t\\tcd /usr/src/python; \\tgnuArch=\\\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\\\"; \\t./configure \\t\\t--build=\\\"$gnuArch\\\" \\t\\t--enable-loadable-sqlite-extensions \\t\\t--enable-option-checking=fatal \\t\\t--enable-shared \\t\\t$(test \\\"${gnuArch%%-*}\\\" != 'riscv64' \\u0026\\u0026 echo '--with-lto') \\t\\t--with-ensurepip \\t; \\tnproc=\\\"$(nproc)\\\"; \\tEXTRA_CFLAGS=\\\"-DTHREAD_STACK_SIZE=0x100000\\\"; \\tLDFLAGS=\\\"${LDFLAGS:-} -Wl,--strip-all\\\"; \\tarch=\\\"$(apk --print-arch)\\\"; \\tcase \\\"$arch\\\" in \\t\\tx86_64|aarch64) \\t\\t\\tEXTRA_CFLAGS=\\\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\\\"; \\t\\t\\t;; \\t\\tx86) \\t\\t\\t;; \\t\\t*) \\t\\t\\tEXTRA_CFLAGS=\\\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\\\"; \\t\\t\\t;; \\tesac; \\tmake -j \\\"$nproc\\\" \\t\\t\\\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\\\" \\t\\t\\\"LDFLAGS=${LDFLAGS:-}\\\" \\t; \\trm python; \\tmake -j \\\"$nproc\\\" \\t\\t\\\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\\\" \\t\\t\\\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\\\$\\\\$ORIGIN/../lib'\\\" \\t\\tpython \\t; \\tmake install; \\t\\tcd /; \\trm -rf /usr/src/python; \\t\\tfind /usr/local -depth \\t\\t\\\\( \\t\\t\\t\\\\( -type d -a \\\\( -name test -o -name tests -o -name idle_test \\\\) \\\\) \\t\\t\\t-o \\\\( -type f -a \\\\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\\\) \\\\) \\t\\t\\\\) -exec rm -rf '{}' + \\t; \\t\\tfind /usr/local -type f -executable -not \\\\( -name '*tkinter*' \\\\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \\t\\t| tr ',' '\\\\n' \\t\\t| sort -u \\t\\t| awk 'system(\\\"[ -e /usr/local/lib/\\\" $1 \\\" ]\\\") == 0 { next } { print \\\"so:\\\" $1 }' \\t\\t| xargs -rt apk add --no-network --virtual .python-rundeps \\t; \\tapk del --no-network .build-deps; \\t\\texport PYTHONDONTWRITEBYTECODE=1; \\tpython3 --version; \\tpip3 --version # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:10:30.782726003Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\tfor src in idle3 pip3 pydoc3 python3 python3-config; do \\t\\tdst=\\\"$(echo \\\"$src\\\" | tr -d 3)\\\"; \\t\\t[ -s \\\"/usr/local/bin/$src\\\" ]; \\t\\t[ ! -e \\\"/usr/local/bin/$dst\\\" ]; \\t\\tln -svT \\\"$src\\\" \\\"/usr/local/bin/$dst\\\"; \\tdone # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:10:30.782726003Z\",\n \"created_by\": \"CMD [\\\"python3\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-11T00:49:47.962156876+02:00\",\n \"created_by\": \"ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-11T00:49:47.962156876+02:00\",\n \"created_by\": \"RUN /bin/sh -c apk add --no-cache 'libuuid\\u003e=2.42.3-r1' \\u0026\\u0026 addgroup -S -g 10001 informed \\u0026\\u0026 adduser -S -u 10001 -G informed -H informed # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:55.351944978+02:00\",\n \"created_by\": \"COPY /opt/venv /opt/venv # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.462092072+02:00\",\n \"created_by\": \"RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"WORKDIR /app\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"USER 10001:10001\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"EXPOSE [8080/tcp 8081/tcp]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"ENTRYPOINT [\\\"informed-decision-container\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:15:11.991443676Z\",\n \"created_by\": \"/bin/sh -c #(nop) ARG SOURCE_REVISION\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:21:04.716126392Z\",\n \"created_by\": \"/bin/sh -c #(nop) LABEL org.opencontainers.image.revision=3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168 org.opencontainers.image.base.digest=sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 social.coulomb.source.policy.sha256=9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62 social.coulomb.release.scope=INFD-WP-0009-T04/purpose-overlay-v1\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:21:04.787527697Z\",\n \"created_by\": \"/bin/sh -c #(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py \"\n }\n ],\n \"os\": \"linux\",\n \"rootfs\": {\n \"type\": \"layers\",\n \"diff_ids\": [\n \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\",\n \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\",\n \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\",\n \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\",\n \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\",\n \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\",\n \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\",\n \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\",\n \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n ]\n },\n \"config\": {\n \"Entrypoint\": [\n \"informed-decision-container\"\n ],\n \"Env\": [\n \"PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"LANG=C.UTF-8\",\n \"GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305\",\n \"PYTHON_VERSION=3.12.14\",\n \"PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a\",\n \"PYTHONDONTWRITEBYTECODE=1\",\n \"PYTHONUNBUFFERED=1\"\n ],\n \"Image\": \"sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883\",\n \"Labels\": {\n \"org.opencontainers.image.base.digest\": \"sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"org.opencontainers.image.revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"social.coulomb.release.scope\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"social.coulomb.source.policy.sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\"\n },\n \"User\": \"10001:10001\",\n \"WorkingDir\": \"/app\",\n \"ExposedPorts\": {\n \"8080/tcp\": {},\n \"8081/tcp\": {}\n }\n }\n },\n \"Layers\": [\n {\n \"Size\": 8697856,\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"Size\": 1538048,\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n {\n \"Size\": 47150592,\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"Size\": 5120,\n \"Digest\": \"sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b\",\n \"DiffID\": \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\"\n },\n {\n \"Size\": 131584,\n \"Digest\": \"sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86\",\n \"DiffID\": \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\"\n },\n {\n \"Size\": 30705664,\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"Size\": 12288,\n \"Digest\": \"sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f\",\n \"DiffID\": \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\"\n },\n {\n \"Size\": 1536,\n \"Digest\": \"sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3\",\n \"DiffID\": \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\"\n },\n {\n \"Size\": 15360,\n \"Digest\": \"sha256:cfee29c2f8119d2a39714ecbe5095a2dc1c986054f2e1fe0a6565163242417e3\",\n \"DiffID\": \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n }\n ]\n },\n \"Results\": [\n {\n \"Target\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a (alpine 3.24.1)\",\n \"Class\": \"os-pkgs\",\n \"Type\": \"alpine\",\n \"Packages\": [\n {\n \"ID\": \".python-rundeps@20260901.001029\",\n \"Name\": \".python-rundeps\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch\\u0026distro=3.24.1\",\n \"UID\": \"4e26c99fecac1e97\"\n },\n \"Version\": \"20260901.001029\",\n \"Arch\": \"noarch\",\n \"DependsOn\": [\n \"gdbm@1.26-r0\",\n \"libbz2@1.0.8-r6\",\n \"libcrypto3@3.5.8-r0\",\n \"libffi@3.5.2-r1\",\n \"libncursesw@6.6_p20260516-r0\",\n \"libnsl@2.0.1-r2\",\n \"libpanelw@6.6_p20260516-r0\",\n \"libssl3@3.5.8-r0\",\n \"libtirpc@1.3.5-r1\",\n \"libuuid@2.42.3-r1\",\n \"musl@1.2.6-r2\",\n \"readline@8.3.3-r1\",\n \"sqlite-libs@3.53.4-r0\",\n \"xz-libs@5.8.3-r0\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:51d0c1e7d88a414345799f0309185c625013ef32\",\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-baselayout@3.7.2-r1\",\n \"Name\": \"alpine-baselayout\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1b9c543300f8073e\"\n },\n \"Version\": \"3.7.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-baselayout\",\n \"SrcVersion\": \"3.7.2-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"alpine-baselayout-data@3.7.2-r1\",\n \"busybox-binsh@1.37.0-r31\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:f0fcfdc2f4da058af6473bc45c4eab62916225b2\",\n \"InstalledFiles\": [\n \"etc/motd\",\n \"etc/crontabs/root\",\n \"etc/modprobe.d/aliases.conf\",\n \"etc/modprobe.d/blacklist.conf\",\n \"etc/modprobe.d/i386.conf\",\n \"etc/profile.d/20locale.sh\",\n \"etc/profile.d/README\",\n \"etc/profile.d/color_prompt.sh.disabled\",\n \"usr/lib/sysctl.d/00-alpine.conf\",\n \"var/lock\",\n \"var/run\",\n \"var/spool/mail\",\n \"var/spool/cron/crontabs\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-baselayout-data@3.7.2-r1\",\n \"Name\": \"alpine-baselayout-data\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"fcc3cd90122d8aa7\"\n },\n \"Version\": \"3.7.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-baselayout\",\n \"SrcVersion\": \"3.7.2-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508\",\n \"InstalledFiles\": [\n \"etc/fstab\",\n \"etc/group\",\n \"etc/hostname\",\n \"etc/hosts\",\n \"etc/inittab\",\n \"etc/modules\",\n \"etc/mtab\",\n \"etc/nsswitch.conf\",\n \"etc/passwd\",\n \"etc/profile\",\n \"etc/protocols\",\n \"etc/services\",\n \"etc/shadow\",\n \"etc/shells\",\n \"etc/sysctl.conf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-keys@2.6-r0\",\n \"Name\": \"alpine-keys\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"cb1f6c8fa74713e0\"\n },\n \"Version\": \"2.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-keys\",\n \"SrcVersion\": \"2.6-r0\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:d8d6b80e53c059a77e4915da78ba964f3ffea240\",\n \"InstalledFiles\": [\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub\",\n \"usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub\",\n \"usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub\",\n \"usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub\",\n \"usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub\",\n \"usr/share/apk/keys/loongarch64/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub\",\n \"usr/share/apk/keys/mips64/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub\",\n \"usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub\",\n \"usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub\",\n \"usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub\",\n \"usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub\",\n \"usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub\",\n \"usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-release@3.24.1-r0\",\n \"Name\": \"alpine-release\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"6cfad6f36e1f31aa\"\n },\n \"Version\": \"3.24.1-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-base\",\n \"SrcVersion\": \"3.24.1-r0\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"alpine-keys@2.6-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:bc6912a25cdc7733e0035ed509eceaa4026946e3\",\n \"InstalledFiles\": [\n \"etc/alpine-release\",\n \"etc/issue\",\n \"etc/os-release\",\n \"etc/secfixes.d/alpine\",\n \"usr/lib/os-release\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"apk-tools@3.0.6-r0\",\n \"Name\": \"apk-tools\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"cb2633c883b17a04\"\n },\n \"Version\": \"3.0.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"apk-tools\",\n \"SrcVersion\": \"3.0.6-r0\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"ca-certificates-bundle@20260611-r0\",\n \"libapk@3.0.6-r0\",\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:043333589798a1f52e09ae63f026c6c8fa676d34\",\n \"InstalledFiles\": [\n \"sbin/apk\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"busybox@1.37.0-r31\",\n \"Name\": \"busybox\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"771020c43c8440bf\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:b5405ebc02f7dd8be95b6265c54b243d5456ab8f\",\n \"InstalledFiles\": [\n \"bin/busybox\",\n \"etc/securetty\",\n \"etc/busybox-paths.d/busybox\",\n \"etc/logrotate.d/acpid\",\n \"etc/network/if-up.d/dad\",\n \"etc/udhcpc/udhcpc.conf\",\n \"usr/share/udhcpc/default.script\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"busybox-binsh@1.37.0-r31\",\n \"Name\": \"busybox-binsh\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1ec8a3d5d2b63297\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"busybox@1.37.0-r31\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7\",\n \"InstalledFiles\": [\n \"bin/sh\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ca-certificates@20260611-r0\",\n \"Name\": \"ca-certificates\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"2a3c316ee83c6198\"\n },\n \"Version\": \"20260611-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ca-certificates\",\n \"SrcVersion\": \"20260611-r0\",\n \"Licenses\": [\n \"MPL-2.0\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"busybox-binsh@1.37.0-r31\",\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n \"Digest\": \"sha1:8f2a04abeb54b331e2970a0a0dffb7bd6bdde567\",\n \"InstalledFiles\": [\n \"etc/ca-certificates.conf\",\n \"etc/apk/protected_paths.d/ca-certificates.list\",\n \"etc/ca-certificates/update.d/certhash\",\n \"usr/bin/c_rehash\",\n \"usr/sbin/update-ca-certificates\",\n \"usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt\",\n \"usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt\",\n \"usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt\",\n \"usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_ECC_TLS_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_RSA_TLS_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt\",\n \"usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA1.crt\",\n \"usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA2.crt\",\n \"usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/CA_Disig_Root_R2.crt\",\n \"usr/share/ca-certificates/mozilla/CFCA_EV_ROOT.crt\",\n \"usr/share/ca-certificates/mozilla/COMODO_ECC_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/COMODO_RSA_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/Certainly_Root_E1.crt\",\n \"usr/share/ca-certificates/mozilla/Certainly_Root_R1.crt\",\n \"usr/share/ca-certificates/mozilla/Certigna_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_EC-384_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA_2.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_1_2020.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_2_2023.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_1_2020.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_2_2023.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G2.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G3.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G2.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G3.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_TLS_RSA4096_Root_G5.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Trusted_Root_G4.crt\",\n \"usr/share/ca-certificates/mozilla/GDCA_TrustAUTH_R5_ROOT.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R1.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R3.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R4.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R4.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R5.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R3.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R6.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_E46.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_R46.crt\",\n \"usr/share/ca-certificates/mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/HARICA_TLS_ECC_Root_CA_2021.crt\",\n \"usr/share/ca-certificates/mozilla/HARICA_TLS_RSA_Root_CA_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt\",\n \"usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt\",\n \"usr/share/ca-certificates/mozilla/HiPKI_Root_CA_-_G1.crt\",\n \"usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt\",\n \"usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt\",\n \"usr/share/ca-certificates/mozilla/ISRG_Root_X2.crt\",\n \"usr/share/ca-certificates/mozilla/IdenTrust_Commercial_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/IdenTrust_Public_Sector_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/Izenpe.com.crt\",\n \"usr/share/ca-certificates/mozilla/Microsec_e-Szigno_Root_CA_2009.crt\",\n \"usr/share/ca-certificates/mozilla/Microsoft_ECC_Root_Certificate_Authority_2017.crt\",\n \"usr/share/ca-certificates/mozilla/Microsoft_RSA_Root_Certificate_Authority_2017.crt\",\n \"usr/share/ca-certificates/mozilla/NAVER_Global_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/NetLock_Arany_=Class_Gold=_F\u0151tan\u00fas\u00edtv\u00e1ny.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_Server_Root_ECC_G1.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_Server_Root_RSA_G1.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GB_CA.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GC_CA.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_1_G3.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_2_G3.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_3_G3.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_ECC.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_RSA_R2.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_ECC.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_RSA.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_TLS_ECC_Root_CA_2022.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_TLS_RSA_Root_CA_2022.crt\",\n \"usr/share/ca-certificates/mozilla/SZAFIR_ROOT_CA2.crt\",\n \"usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_E46.crt\",\n \"usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_R46.crt\",\n \"usr/share/ca-certificates/mozilla/SecureSign_Root_CA14.crt\",\n \"usr/share/ca-certificates/mozilla/SecureSign_Root_CA15.crt\",\n \"usr/share/ca-certificates/mozilla/Security_Communication_ECC_RootCA1.crt\",\n \"usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt\",\n \"usr/share/ca-certificates/mozilla/Starfield_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/SwissSign_RSA_TLS_Root_CA_2022_-_1.crt\",\n \"usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_2.crt\",\n \"usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_3.crt\",\n \"usr/share/ca-certificates/mozilla/TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_CYBER_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_Global_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/Telekom_Security_TLS_ECC_Root_2020.crt\",\n \"usr/share/ca-certificates/mozilla/Telekom_Security_TLS_RSA_Root_2023.crt\",\n \"usr/share/ca-certificates/mozilla/Telia_Root_CA_v2.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G3.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G4.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_TLS_ECC_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_TLS_RSA_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TunTrust_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/UCA_Extended_Validation_Root.crt\",\n \"usr/share/ca-certificates/mozilla/UCA_Global_G2_Root.crt\",\n \"usr/share/ca-certificates/mozilla/USERTrust_ECC_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/USERTrust_RSA_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/certSIGN_Root_CA_G2.crt\",\n \"usr/share/ca-certificates/mozilla/e-Szigno_Root_CA_2017.crt\",\n \"usr/share/ca-certificates/mozilla/e-Szigno_TLS_Root_CA_2023.crt\",\n \"usr/share/ca-certificates/mozilla/ePKI_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_C3.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_G3.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_Root_CA_-_C1.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_Root_CA_-_G1.crt\",\n \"usr/share/ca-certificates/mozilla/vTrus_ECC_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/vTrus_Root_CA.crt\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ca-certificates-bundle@20260611-r0\",\n \"Name\": \"ca-certificates-bundle\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"20337c2ea28bef28\"\n },\n \"Version\": \"20260611-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ca-certificates\",\n \"SrcVersion\": \"20260611-r0\",\n \"Licenses\": [\n \"MPL-2.0\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c9534a03750bdfae341f10969016090fc11febbd\",\n \"InstalledFiles\": [\n \"etc/ssl/cert.pem\",\n \"etc/ssl/certs/ca-certificates.crt\",\n \"etc/ssl1.1/cert.pem\",\n \"etc/ssl1.1/certs\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"gdbm@1.26-r0\",\n \"Name\": \"gdbm\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"5eb1a3f86262ca77\"\n },\n \"Version\": \"1.26-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"gdbm\",\n \"SrcVersion\": \"1.26-r0\",\n \"Licenses\": [\n \"GPL-3.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:619493d8124fe49a8ee1d8f7a1372cf7e3977337\",\n \"InstalledFiles\": [\n \"usr/lib/libgdbm.so.6\",\n \"usr/lib/libgdbm.so.6.0.0\",\n \"usr/lib/libgdbm_compat.so.4\",\n \"usr/lib/libgdbm_compat.so.4.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"keyutils-libs@1.6.3-r4\",\n \"Name\": \"keyutils-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"a1a29120eb342032\"\n },\n \"Version\": \"1.6.3-r4\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"keyutils\",\n \"SrcVersion\": \"1.6.3-r4\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"LGPL-2.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:b7331c96f077fc3522ee4361a441d1097204cd90\",\n \"InstalledFiles\": [\n \"usr/lib/libkeyutils.so.1\",\n \"usr/lib/libkeyutils.so.1.10\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"krb5-conf@1.0-r2\",\n \"Name\": \"krb5-conf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e7cf94ba8b6dbc33\"\n },\n \"Version\": \"1.0-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"krb5-conf\",\n \"SrcVersion\": \"1.0-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:40a11e0690a59e110367b62a80661024e9942a2d\",\n \"InstalledFiles\": [\n \"etc/krb5.conf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"krb5-libs@1.22.2-r1\",\n \"Name\": \"krb5-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"958f8b4a4f087dac\"\n },\n \"Version\": \"1.22.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"krb5\",\n \"SrcVersion\": \"1.22.2-r1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"keyutils-libs@1.6.3-r4\",\n \"krb5-conf@1.0-r2\",\n \"libcom_err@1.47.4-r0\",\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"libverto@0.3.2-r2\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:ef02346e21b817ff379e4601e5b1fc9760e5e31a\",\n \"InstalledFiles\": [\n \"usr/lib/libgssapi_krb5.so.2\",\n \"usr/lib/libgssapi_krb5.so.2.2\",\n \"usr/lib/libgssrpc.so.4\",\n \"usr/lib/libgssrpc.so.4.2\",\n \"usr/lib/libk5crypto.so.3\",\n \"usr/lib/libk5crypto.so.3.1\",\n \"usr/lib/libkadm5clnt_mit.so.12\",\n \"usr/lib/libkadm5clnt_mit.so.12.0\",\n \"usr/lib/libkadm5srv_mit.so.12\",\n \"usr/lib/libkadm5srv_mit.so.12.0\",\n \"usr/lib/libkdb5.so.10\",\n \"usr/lib/libkdb5.so.10.0\",\n \"usr/lib/libkrad.so.0\",\n \"usr/lib/libkrad.so.0.0\",\n \"usr/lib/libkrb5.so.3\",\n \"usr/lib/libkrb5.so.3.3\",\n \"usr/lib/libkrb5support.so.0\",\n \"usr/lib/libkrb5support.so.0.1\",\n \"usr/lib/krb5/plugins/kdb/db2.so\",\n \"usr/lib/krb5/plugins/preauth/otp.so\",\n \"usr/lib/krb5/plugins/preauth/spake.so\",\n \"usr/lib/krb5/plugins/preauth/test.so\",\n \"usr/lib/krb5/plugins/tls/k5tls.so\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libapk@3.0.6-r0\",\n \"Name\": \"libapk\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"a35b8b9b3219513a\"\n },\n \"Version\": \"3.0.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"apk-tools\",\n \"SrcVersion\": \"3.0.6-r0\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"musl@1.2.6-r2\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:523a8f58104589f74f743d501c81bf6517155378\",\n \"InstalledFiles\": [\n \"usr/lib/libapk.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libbz2@1.0.8-r6\",\n \"Name\": \"libbz2\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"48e17539404e2d56\"\n },\n \"Version\": \"1.0.8-r6\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"bzip2\",\n \"SrcVersion\": \"1.0.8-r6\",\n \"Licenses\": [\n \"bzip-2-1.0.6\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:08566ba5c7af97c25474be8b24e8b48f0116b67d\",\n \"InstalledFiles\": [\n \"usr/lib/libbz2.so.1\",\n \"usr/lib/libbz2.so.1.0.8\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libcom_err@1.47.4-r0\",\n \"Name\": \"libcom_err\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3fc35a3f66d192af\"\n },\n \"Version\": \"1.47.4-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"e2fsprogs\",\n \"SrcVersion\": \"1.47.4-r0\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"LGPL-2.0-or-later\",\n \"BSD-3-Clause\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef\",\n \"InstalledFiles\": [\n \"usr/lib/libcom_err.so.2\",\n \"usr/lib/libcom_err.so.2.1\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libcrypto3@3.5.8-r0\",\n \"Name\": \"libcrypto3\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"4299bba2ba9c96aa\"\n },\n \"Version\": \"3.5.8-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"openssl\",\n \"SrcVersion\": \"3.5.8-r0\",\n \"Licenses\": [\n \"Apache-2.0\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3\",\n \"InstalledFiles\": [\n \"etc/ssl/ct_log_list.cnf\",\n \"etc/ssl/ct_log_list.cnf.dist\",\n \"etc/ssl/openssl.cnf\",\n \"etc/ssl/openssl.cnf.dist\",\n \"usr/lib/libcrypto.so.3\",\n \"usr/lib/engines-3/afalg.so\",\n \"usr/lib/engines-3/capi.so\",\n \"usr/lib/engines-3/loader_attic.so\",\n \"usr/lib/engines-3/padlock.so\",\n \"usr/lib/ossl-modules/legacy.so\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libffi@3.5.2-r1\",\n \"Name\": \"libffi\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"d3eaa921287b1ccd\"\n },\n \"Version\": \"3.5.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libffi\",\n \"SrcVersion\": \"3.5.2-r1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a\",\n \"InstalledFiles\": [\n \"usr/lib/libffi.so.8\",\n \"usr/lib/libffi.so.8.2.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libintl@1.0-r0\",\n \"Name\": \"libintl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libintl@1.0-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"25c18808d8fc87e0\"\n },\n \"Version\": \"1.0-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"gettext\",\n \"SrcVersion\": \"1.0-r0\",\n \"Licenses\": [\n \"LGPL-2.1-or-later\"\n ],\n \"Maintainer\": \"Carlo Landmeter \\u003cclandmeter@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:282d6642ccac87237e43a864159d73cf5abe7550\",\n \"InstalledFiles\": [\n \"usr/lib/libintl.so.8\",\n \"usr/lib/libintl.so.8.4.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libncursesw@6.6_p20260516-r0\",\n \"Name\": \"libncursesw\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e8939f45e2191bcc\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\",\n \"ncurses-terminfo-base@6.6_p20260516-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:9f318e6e324d6827274829194cf6ac6afbaded12\",\n \"InstalledFiles\": [\n \"usr/lib/libncursesw.so.6\",\n \"usr/lib/libncursesw.so.6.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libnsl@2.0.1-r2\",\n \"Name\": \"libnsl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3d893c60d41da67b\"\n },\n \"Version\": \"2.0.1-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libnsl\",\n \"SrcVersion\": \"2.0.1-r2\",\n \"Licenses\": [\n \"LGPL-2.0-or-later\"\n ],\n \"DependsOn\": [\n \"libintl@1.0-r0\",\n \"libtirpc@1.3.5-r1\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:5194adbf26560b52be318481a7af294ab05fd795\",\n \"InstalledFiles\": [\n \"usr/lib/libnsl.so.3\",\n \"usr/lib/libnsl.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libpanelw@6.6_p20260516-r0\",\n \"Name\": \"libpanelw\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"ef1ad9bb256b373\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"DependsOn\": [\n \"libncursesw@6.6_p20260516-r0\",\n \"musl@1.2.6-r2\",\n \"ncurses-terminfo-base@6.6_p20260516-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:149bdc434232ed11fc5bb975ba519a07154a6f56\",\n \"InstalledFiles\": [\n \"usr/lib/libpanelw.so.6\",\n \"usr/lib/libpanelw.so.6.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libssl3@3.5.8-r0\",\n \"Name\": \"libssl3\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"f290ab59b88b1c4a\"\n },\n \"Version\": \"3.5.8-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"openssl\",\n \"SrcVersion\": \"3.5.8-r0\",\n \"Licenses\": [\n \"Apache-2.0\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:5f9b1e55d821953d2e2b1db322dad70a3b5041ea\",\n \"InstalledFiles\": [\n \"usr/lib/libssl.so.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libtirpc@1.3.5-r1\",\n \"Name\": \"libtirpc\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"471c8d955ca03be5\"\n },\n \"Version\": \"1.3.5-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libtirpc\",\n \"SrcVersion\": \"1.3.5-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"krb5-libs@1.22.2-r1\",\n \"libtirpc-conf@1.3.5-r1\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:c32865bd86a8b8829d152279cabbc5ac6d430eb2\",\n \"InstalledFiles\": [\n \"usr/lib/libtirpc.so.3\",\n \"usr/lib/libtirpc.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libtirpc-conf@1.3.5-r1\",\n \"Name\": \"libtirpc-conf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3437392c14aad33f\"\n },\n \"Version\": \"1.3.5-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libtirpc\",\n \"SrcVersion\": \"1.3.5-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:0c17d9988dc986c90e22f79778df047eca9973ff\",\n \"InstalledFiles\": [\n \"etc/bindresvport.blacklist\",\n \"etc/netconfig\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libuuid@2.42.3-r1\",\n \"Name\": \"libuuid\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"c444e9cdd1bdda40\"\n },\n \"Version\": \"2.42.3-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"util-linux\",\n \"SrcVersion\": \"2.42.3-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86\",\n \"DiffID\": \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\"\n },\n \"Digest\": \"sha1:8f041ef637ad75f381cc0c034f2afbbb0303264e\",\n \"InstalledFiles\": [\n \"usr/lib/libuuid.so.1\",\n \"usr/lib/libuuid.so.1.3.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libverto@0.3.2-r2\",\n \"Name\": \"libverto\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"9df4321a283a6cf6\"\n },\n \"Version\": \"0.3.2-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libverto\",\n \"SrcVersion\": \"0.3.2-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Francesco Colista \\u003cfcolista@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:73233059338142e4ac6d8fb8bb0074e93da75dc1\",\n \"InstalledFiles\": [\n \"usr/lib/libverto.so.1\",\n \"usr/lib/libverto.so.1.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"musl@1.2.6-r2\",\n \"Name\": \"musl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1f8cb44befe503d4\"\n },\n \"Version\": \"1.2.6-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"musl\",\n \"SrcVersion\": \"1.2.6-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:0f7e5827e4e1a73631beda27b78431a8ba240e05\",\n \"InstalledFiles\": [\n \"lib/ld-musl-x86_64.so.1\",\n \"lib/libc.musl-x86_64.so.1\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"musl-utils@1.2.6-r2\",\n \"Name\": \"musl-utils\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"4497482ec1d943e1\"\n },\n \"Version\": \"1.2.6-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"musl\",\n \"SrcVersion\": \"1.2.6-r2\",\n \"Licenses\": [\n \"MIT\",\n \"BSD-2-Clause\",\n \"GPL-2.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\",\n \"scanelf@1.3.9-r1\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:75ada3c48d63ec5d87c42fdf934a3fdd11298dc5\",\n \"InstalledFiles\": [\n \"sbin/ldconfig\",\n \"usr/bin/getconf\",\n \"usr/bin/getent\",\n \"usr/bin/iconv\",\n \"usr/bin/ldd\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ncurses-terminfo-base@6.6_p20260516-r0\",\n \"Name\": \"ncurses-terminfo-base\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e7fac5c6a6e9ae8\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:9d551d828e9c8ee52c5801c1d6046828ebf15752\",\n \"InstalledFiles\": [\n \"etc/terminfo/a/alacritty\",\n \"etc/terminfo/a/ansi\",\n \"etc/terminfo/d/dumb\",\n \"etc/terminfo/g/gnome\",\n \"etc/terminfo/g/gnome-256color\",\n \"etc/terminfo/k/konsole\",\n \"etc/terminfo/k/konsole-256color\",\n \"etc/terminfo/k/konsole-linux\",\n \"etc/terminfo/l/linux\",\n \"etc/terminfo/p/putty\",\n \"etc/terminfo/p/putty-256color\",\n \"etc/terminfo/r/rxvt\",\n \"etc/terminfo/r/rxvt-256color\",\n \"etc/terminfo/s/screen\",\n \"etc/terminfo/s/screen-256color\",\n \"etc/terminfo/s/st-0.6\",\n \"etc/terminfo/s/st-0.7\",\n \"etc/terminfo/s/st-0.8\",\n \"etc/terminfo/s/st-0.8.5\",\n \"etc/terminfo/s/st-16color\",\n \"etc/terminfo/s/st-256color\",\n \"etc/terminfo/s/st-direct\",\n \"etc/terminfo/s/sun\",\n \"etc/terminfo/t/terminator\",\n \"etc/terminfo/t/terminology\",\n \"etc/terminfo/t/terminology-0.6.1\",\n \"etc/terminfo/t/terminology-1.0.0\",\n \"etc/terminfo/t/terminology-1.8.1\",\n \"etc/terminfo/t/tmux\",\n \"etc/terminfo/t/tmux-256color\",\n \"etc/terminfo/v/vt100\",\n \"etc/terminfo/v/vt102\",\n \"etc/terminfo/v/vt200\",\n \"etc/terminfo/v/vt220\",\n \"etc/terminfo/v/vt52\",\n \"etc/terminfo/v/vte\",\n \"etc/terminfo/v/vte-256color\",\n \"etc/terminfo/x/xterm\",\n \"etc/terminfo/x/xterm-256color\",\n \"etc/terminfo/x/xterm-color\",\n \"etc/terminfo/x/xterm-xfree86\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"readline@8.3.3-r1\",\n \"Name\": \"readline\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"f50058781c93e1f2\"\n },\n \"Version\": \"8.3.3-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"readline\",\n \"SrcVersion\": \"8.3.3-r1\",\n \"Licenses\": [\n \"GPL-3.0-or-later\"\n ],\n \"Maintainer\": \"qaqland \\u003cqaq@qaq.land\\u003e\",\n \"DependsOn\": [\n \"libncursesw@6.6_p20260516-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:945b16e378bc00e44d89d4de8124bba7647fdf4d\",\n \"InstalledFiles\": [\n \"etc/inputrc\",\n \"usr/lib/libreadline.so.8\",\n \"usr/lib/libreadline.so.8.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"scanelf@1.3.9-r1\",\n \"Name\": \"scanelf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"936394657a1626fb\"\n },\n \"Version\": \"1.3.9-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"pax-utils\",\n \"SrcVersion\": \"1.3.9-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:013f903d0ba219673aebbdd04f74bb5ed82b01f0\",\n \"InstalledFiles\": [\n \"usr/bin/scanelf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"sqlite-libs@3.53.4-r0\",\n \"Name\": \"sqlite-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"8b10aee2ccc192de\"\n },\n \"Version\": \"3.53.4-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"sqlite\",\n \"SrcVersion\": \"3.53.4-r0\",\n \"Licenses\": [\n \"blessing\"\n ],\n \"Maintainer\": \"Jingyun Hua \\u003chuajingyun@loongson.cn\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:f7630ceb37c232b6609861aeab6cdb9cd120e6fa\",\n \"InstalledFiles\": [\n \"usr/lib/libsqlite3.so.0\",\n \"usr/lib/libsqlite3.so.3.53.4\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ssl_client@1.37.0-r31\",\n \"Name\": \"ssl_client\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"d42e31f15a4ce47a\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c220f4a5125a313af733e98def94132bb1e9d40d\",\n \"InstalledFiles\": [\n \"usr/bin/ssl_client\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"tzdata@2026c-r0\",\n \"Name\": \"tzdata\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"52c6b50eff629f9d\"\n },\n \"Version\": \"2026c-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"tzdata\",\n \"SrcVersion\": \"2026c-r0\",\n \"Licenses\": [\n \"Public-Domain\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n \"Digest\": \"sha1:61f7544ecd8dd63eac23fe3e645702fda92ef02a\",\n \"InstalledFiles\": [\n \"usr/share/zoneinfo/CET\",\n \"usr/share/zoneinfo/CST6CDT\",\n \"usr/share/zoneinfo/Cuba\",\n \"usr/share/zoneinfo/EET\",\n \"usr/share/zoneinfo/EST\",\n \"usr/share/zoneinfo/EST5EDT\",\n \"usr/share/zoneinfo/Egypt\",\n \"usr/share/zoneinfo/Eire\",\n \"usr/share/zoneinfo/Factory\",\n \"usr/share/zoneinfo/GB\",\n \"usr/share/zoneinfo/GB-Eire\",\n \"usr/share/zoneinfo/GMT\",\n \"usr/share/zoneinfo/GMT+0\",\n \"usr/share/zoneinfo/GMT-0\",\n \"usr/share/zoneinfo/GMT0\",\n \"usr/share/zoneinfo/Greenwich\",\n \"usr/share/zoneinfo/HST\",\n \"usr/share/zoneinfo/Hongkong\",\n \"usr/share/zoneinfo/Iceland\",\n \"usr/share/zoneinfo/Iran\",\n \"usr/share/zoneinfo/Israel\",\n \"usr/share/zoneinfo/Jamaica\",\n \"usr/share/zoneinfo/Japan\",\n \"usr/share/zoneinfo/Kwajalein\",\n \"usr/share/zoneinfo/Libya\",\n \"usr/share/zoneinfo/MET\",\n \"usr/share/zoneinfo/MST\",\n \"usr/share/zoneinfo/MST7MDT\",\n \"usr/share/zoneinfo/NZ\",\n \"usr/share/zoneinfo/NZ-CHAT\",\n \"usr/share/zoneinfo/Navajo\",\n \"usr/share/zoneinfo/PRC\",\n \"usr/share/zoneinfo/PST8PDT\",\n \"usr/share/zoneinfo/Poland\",\n \"usr/share/zoneinfo/Portugal\",\n \"usr/share/zoneinfo/ROC\",\n \"usr/share/zoneinfo/ROK\",\n \"usr/share/zoneinfo/Singapore\",\n \"usr/share/zoneinfo/Turkey\",\n \"usr/share/zoneinfo/UCT\",\n \"usr/share/zoneinfo/UTC\",\n \"usr/share/zoneinfo/Universal\",\n \"usr/share/zoneinfo/W-SU\",\n \"usr/share/zoneinfo/WET\",\n \"usr/share/zoneinfo/Zulu\",\n \"usr/share/zoneinfo/iso3166.tab\",\n \"usr/share/zoneinfo/leap-seconds.list\",\n \"usr/share/zoneinfo/posixrules\",\n \"usr/share/zoneinfo/zone.tab\",\n \"usr/share/zoneinfo/zone1970.tab\",\n \"usr/share/zoneinfo/Africa/Abidjan\",\n \"usr/share/zoneinfo/Africa/Accra\",\n \"usr/share/zoneinfo/Africa/Addis_Ababa\",\n \"usr/share/zoneinfo/Africa/Algiers\",\n \"usr/share/zoneinfo/Africa/Asmara\",\n \"usr/share/zoneinfo/Africa/Asmera\",\n \"usr/share/zoneinfo/Africa/Bamako\",\n \"usr/share/zoneinfo/Africa/Bangui\",\n \"usr/share/zoneinfo/Africa/Banjul\",\n \"usr/share/zoneinfo/Africa/Bissau\",\n \"usr/share/zoneinfo/Africa/Blantyre\",\n \"usr/share/zoneinfo/Africa/Brazzaville\",\n \"usr/share/zoneinfo/Africa/Bujumbura\",\n \"usr/share/zoneinfo/Africa/Cairo\",\n \"usr/share/zoneinfo/Africa/Casablanca\",\n \"usr/share/zoneinfo/Africa/Ceuta\",\n \"usr/share/zoneinfo/Africa/Conakry\",\n \"usr/share/zoneinfo/Africa/Dakar\",\n \"usr/share/zoneinfo/Africa/Dar_es_Salaam\",\n \"usr/share/zoneinfo/Africa/Djibouti\",\n \"usr/share/zoneinfo/Africa/Douala\",\n \"usr/share/zoneinfo/Africa/El_Aaiun\",\n \"usr/share/zoneinfo/Africa/Freetown\",\n \"usr/share/zoneinfo/Africa/Gaborone\",\n \"usr/share/zoneinfo/Africa/Harare\",\n \"usr/share/zoneinfo/Africa/Johannesburg\",\n \"usr/share/zoneinfo/Africa/Juba\",\n \"usr/share/zoneinfo/Africa/Kampala\",\n \"usr/share/zoneinfo/Africa/Khartoum\",\n \"usr/share/zoneinfo/Africa/Kigali\",\n \"usr/share/zoneinfo/Africa/Kinshasa\",\n \"usr/share/zoneinfo/Africa/Lagos\",\n \"usr/share/zoneinfo/Africa/Libreville\",\n \"usr/share/zoneinfo/Africa/Lome\",\n \"usr/share/zoneinfo/Africa/Luanda\",\n \"usr/share/zoneinfo/Africa/Lubumbashi\",\n \"usr/share/zoneinfo/Africa/Lusaka\",\n \"usr/share/zoneinfo/Africa/Malabo\",\n \"usr/share/zoneinfo/Africa/Maputo\",\n \"usr/share/zoneinfo/Africa/Maseru\",\n \"usr/share/zoneinfo/Africa/Mbabane\",\n \"usr/share/zoneinfo/Africa/Mogadishu\",\n \"usr/share/zoneinfo/Africa/Monrovia\",\n \"usr/share/zoneinfo/Africa/Nairobi\",\n \"usr/share/zoneinfo/Africa/Ndjamena\",\n \"usr/share/zoneinfo/Africa/Niamey\",\n \"usr/share/zoneinfo/Africa/Nouakchott\",\n \"usr/share/zoneinfo/Africa/Ouagadougou\",\n \"usr/share/zoneinfo/Africa/Porto-Novo\",\n \"usr/share/zoneinfo/Africa/Sao_Tome\",\n \"usr/share/zoneinfo/Africa/Timbuktu\",\n \"usr/share/zoneinfo/Africa/Tripoli\",\n \"usr/share/zoneinfo/Africa/Tunis\",\n \"usr/share/zoneinfo/Africa/Windhoek\",\n \"usr/share/zoneinfo/America/Adak\",\n \"usr/share/zoneinfo/America/Anchorage\",\n \"usr/share/zoneinfo/America/Anguilla\",\n \"usr/share/zoneinfo/America/Antigua\",\n \"usr/share/zoneinfo/America/Araguaina\",\n \"usr/share/zoneinfo/America/Aruba\",\n \"usr/share/zoneinfo/America/Asuncion\",\n \"usr/share/zoneinfo/America/Atikokan\",\n \"usr/share/zoneinfo/America/Atka\",\n \"usr/share/zoneinfo/America/Bahia\",\n \"usr/share/zoneinfo/America/Bahia_Banderas\",\n \"usr/share/zoneinfo/America/Barbados\",\n \"usr/share/zoneinfo/America/Belem\",\n \"usr/share/zoneinfo/America/Belize\",\n \"usr/share/zoneinfo/America/Blanc-Sablon\",\n \"usr/share/zoneinfo/America/Boa_Vista\",\n \"usr/share/zoneinfo/America/Bogota\",\n \"usr/share/zoneinfo/America/Boise\",\n \"usr/share/zoneinfo/America/Buenos_Aires\",\n \"usr/share/zoneinfo/America/Cambridge_Bay\",\n \"usr/share/zoneinfo/America/Campo_Grande\",\n \"usr/share/zoneinfo/America/Cancun\",\n \"usr/share/zoneinfo/America/Caracas\",\n \"usr/share/zoneinfo/America/Catamarca\",\n \"usr/share/zoneinfo/America/Cayenne\",\n \"usr/share/zoneinfo/America/Cayman\",\n \"usr/share/zoneinfo/America/Chicago\",\n \"usr/share/zoneinfo/America/Chihuahua\",\n \"usr/share/zoneinfo/America/Ciudad_Juarez\",\n \"usr/share/zoneinfo/America/Coral_Harbour\",\n \"usr/share/zoneinfo/America/Cordoba\",\n \"usr/share/zoneinfo/America/Costa_Rica\",\n \"usr/share/zoneinfo/America/Coyhaique\",\n \"usr/share/zoneinfo/America/Creston\",\n \"usr/share/zoneinfo/America/Cuiaba\",\n \"usr/share/zoneinfo/America/Curacao\",\n \"usr/share/zoneinfo/America/Danmarkshavn\",\n \"usr/share/zoneinfo/America/Dawson\",\n \"usr/share/zoneinfo/America/Dawson_Creek\",\n \"usr/share/zoneinfo/America/Denver\",\n \"usr/share/zoneinfo/America/Detroit\",\n \"usr/share/zoneinfo/America/Dominica\",\n \"usr/share/zoneinfo/America/Edmonton\",\n \"usr/share/zoneinfo/America/Eirunepe\",\n \"usr/share/zoneinfo/America/El_Salvador\",\n \"usr/share/zoneinfo/America/Ensenada\",\n \"usr/share/zoneinfo/America/Fort_Nelson\",\n \"usr/share/zoneinfo/America/Fort_Wayne\",\n \"usr/share/zoneinfo/America/Fortaleza\",\n \"usr/share/zoneinfo/America/Glace_Bay\",\n \"usr/share/zoneinfo/America/Godthab\",\n \"usr/share/zoneinfo/America/Goose_Bay\",\n \"usr/share/zoneinfo/America/Grand_Turk\",\n \"usr/share/zoneinfo/America/Grenada\",\n \"usr/share/zoneinfo/America/Guadeloupe\",\n \"usr/share/zoneinfo/America/Guatemala\",\n \"usr/share/zoneinfo/America/Guayaquil\",\n \"usr/share/zoneinfo/America/Guyana\",\n \"usr/share/zoneinfo/America/Halifax\",\n \"usr/share/zoneinfo/America/Havana\",\n \"usr/share/zoneinfo/America/Hermosillo\",\n \"usr/share/zoneinfo/America/Indianapolis\",\n \"usr/share/zoneinfo/America/Inuvik\",\n \"usr/share/zoneinfo/America/Iqaluit\",\n \"usr/share/zoneinfo/America/Jamaica\",\n \"usr/share/zoneinfo/America/Jujuy\",\n \"usr/share/zoneinfo/America/Juneau\",\n \"usr/share/zoneinfo/America/Knox_IN\",\n \"usr/share/zoneinfo/America/Kralendijk\",\n \"usr/share/zoneinfo/America/La_Paz\",\n \"usr/share/zoneinfo/America/Lima\",\n \"usr/share/zoneinfo/America/Los_Angeles\",\n \"usr/share/zoneinfo/America/Louisville\",\n \"usr/share/zoneinfo/America/Lower_Princes\",\n \"usr/share/zoneinfo/America/Maceio\",\n \"usr/share/zoneinfo/America/Managua\",\n \"usr/share/zoneinfo/America/Manaus\",\n \"usr/share/zoneinfo/America/Marigot\",\n \"usr/share/zoneinfo/America/Martinique\",\n \"usr/share/zoneinfo/America/Matamoros\",\n \"usr/share/zoneinfo/America/Mazatlan\",\n \"usr/share/zoneinfo/America/Mendoza\",\n \"usr/share/zoneinfo/America/Menominee\",\n \"usr/share/zoneinfo/America/Merida\",\n \"usr/share/zoneinfo/America/Metlakatla\",\n \"usr/share/zoneinfo/America/Mexico_City\",\n \"usr/share/zoneinfo/America/Miquelon\",\n \"usr/share/zoneinfo/America/Moncton\",\n \"usr/share/zoneinfo/America/Monterrey\",\n \"usr/share/zoneinfo/America/Montevideo\",\n \"usr/share/zoneinfo/America/Montreal\",\n \"usr/share/zoneinfo/America/Montserrat\",\n \"usr/share/zoneinfo/America/Nassau\",\n \"usr/share/zoneinfo/America/New_York\",\n \"usr/share/zoneinfo/America/Nipigon\",\n \"usr/share/zoneinfo/America/Nome\",\n \"usr/share/zoneinfo/America/Noronha\",\n \"usr/share/zoneinfo/America/Nuuk\",\n \"usr/share/zoneinfo/America/Ojinaga\",\n \"usr/share/zoneinfo/America/Panama\",\n \"usr/share/zoneinfo/America/Pangnirtung\",\n \"usr/share/zoneinfo/America/Paramaribo\",\n \"usr/share/zoneinfo/America/Phoenix\",\n \"usr/share/zoneinfo/America/Port-au-Prince\",\n \"usr/share/zoneinfo/America/Port_of_Spain\",\n \"usr/share/zoneinfo/America/Porto_Acre\",\n \"usr/share/zoneinfo/America/Porto_Velho\",\n \"usr/share/zoneinfo/America/Puerto_Rico\",\n \"usr/share/zoneinfo/America/Punta_Arenas\",\n \"usr/share/zoneinfo/America/Rainy_River\",\n \"usr/share/zoneinfo/America/Rankin_Inlet\",\n \"usr/share/zoneinfo/America/Recife\",\n \"usr/share/zoneinfo/America/Regina\",\n \"usr/share/zoneinfo/America/Resolute\",\n \"usr/share/zoneinfo/America/Rio_Branco\",\n \"usr/share/zoneinfo/America/Rosario\",\n \"usr/share/zoneinfo/America/Santa_Isabel\",\n \"usr/share/zoneinfo/America/Santarem\",\n \"usr/share/zoneinfo/America/Santiago\",\n \"usr/share/zoneinfo/America/Santo_Domingo\",\n \"usr/share/zoneinfo/America/Sao_Paulo\",\n \"usr/share/zoneinfo/America/Scoresbysund\",\n \"usr/share/zoneinfo/America/Shiprock\",\n \"usr/share/zoneinfo/America/Sitka\",\n \"usr/share/zoneinfo/America/St_Barthelemy\",\n \"usr/share/zoneinfo/America/St_Johns\",\n \"usr/share/zoneinfo/America/St_Kitts\",\n \"usr/share/zoneinfo/America/St_Lucia\",\n \"usr/share/zoneinfo/America/St_Thomas\",\n \"usr/share/zoneinfo/America/St_Vincent\",\n \"usr/share/zoneinfo/America/Swift_Current\",\n \"usr/share/zoneinfo/America/Tegucigalpa\",\n \"usr/share/zoneinfo/America/Thule\",\n \"usr/share/zoneinfo/America/Thunder_Bay\",\n \"usr/share/zoneinfo/America/Tijuana\",\n \"usr/share/zoneinfo/America/Toronto\",\n \"usr/share/zoneinfo/America/Tortola\",\n \"usr/share/zoneinfo/America/Vancouver\",\n \"usr/share/zoneinfo/America/Virgin\",\n \"usr/share/zoneinfo/America/Whitehorse\",\n \"usr/share/zoneinfo/America/Winnipeg\",\n \"usr/share/zoneinfo/America/Yakutat\",\n \"usr/share/zoneinfo/America/Yellowknife\",\n \"usr/share/zoneinfo/America/Argentina/Buenos_Aires\",\n \"usr/share/zoneinfo/America/Argentina/Catamarca\",\n \"usr/share/zoneinfo/America/Argentina/ComodRivadavia\",\n \"usr/share/zoneinfo/America/Argentina/Cordoba\",\n \"usr/share/zoneinfo/America/Argentina/Jujuy\",\n \"usr/share/zoneinfo/America/Argentina/La_Rioja\",\n \"usr/share/zoneinfo/America/Argentina/Mendoza\",\n \"usr/share/zoneinfo/America/Argentina/Rio_Gallegos\",\n \"usr/share/zoneinfo/America/Argentina/Salta\",\n \"usr/share/zoneinfo/America/Argentina/San_Juan\",\n \"usr/share/zoneinfo/America/Argentina/San_Luis\",\n \"usr/share/zoneinfo/America/Argentina/Tucuman\",\n \"usr/share/zoneinfo/America/Argentina/Ushuaia\",\n \"usr/share/zoneinfo/America/Indiana/Indianapolis\",\n \"usr/share/zoneinfo/America/Indiana/Knox\",\n \"usr/share/zoneinfo/America/Indiana/Marengo\",\n \"usr/share/zoneinfo/America/Indiana/Petersburg\",\n \"usr/share/zoneinfo/America/Indiana/Tell_City\",\n \"usr/share/zoneinfo/America/Indiana/Vevay\",\n \"usr/share/zoneinfo/America/Indiana/Vincennes\",\n \"usr/share/zoneinfo/America/Indiana/Winamac\",\n \"usr/share/zoneinfo/America/Kentucky/Louisville\",\n \"usr/share/zoneinfo/America/Kentucky/Monticello\",\n \"usr/share/zoneinfo/America/North_Dakota/Beulah\",\n \"usr/share/zoneinfo/America/North_Dakota/Center\",\n \"usr/share/zoneinfo/America/North_Dakota/New_Salem\",\n \"usr/share/zoneinfo/Antarctica/Casey\",\n \"usr/share/zoneinfo/Antarctica/Davis\",\n \"usr/share/zoneinfo/Antarctica/DumontDUrville\",\n \"usr/share/zoneinfo/Antarctica/Macquarie\",\n \"usr/share/zoneinfo/Antarctica/Mawson\",\n \"usr/share/zoneinfo/Antarctica/McMurdo\",\n \"usr/share/zoneinfo/Antarctica/Palmer\",\n \"usr/share/zoneinfo/Antarctica/Rothera\",\n \"usr/share/zoneinfo/Antarctica/South_Pole\",\n \"usr/share/zoneinfo/Antarctica/Syowa\",\n \"usr/share/zoneinfo/Antarctica/Troll\",\n \"usr/share/zoneinfo/Antarctica/Vostok\",\n \"usr/share/zoneinfo/Arctic/Longyearbyen\",\n \"usr/share/zoneinfo/Asia/Aden\",\n \"usr/share/zoneinfo/Asia/Almaty\",\n \"usr/share/zoneinfo/Asia/Amman\",\n \"usr/share/zoneinfo/Asia/Anadyr\",\n \"usr/share/zoneinfo/Asia/Aqtau\",\n \"usr/share/zoneinfo/Asia/Aqtobe\",\n \"usr/share/zoneinfo/Asia/Ashgabat\",\n \"usr/share/zoneinfo/Asia/Ashkhabad\",\n \"usr/share/zoneinfo/Asia/Atyrau\",\n \"usr/share/zoneinfo/Asia/Baghdad\",\n \"usr/share/zoneinfo/Asia/Bahrain\",\n \"usr/share/zoneinfo/Asia/Baku\",\n \"usr/share/zoneinfo/Asia/Bangkok\",\n \"usr/share/zoneinfo/Asia/Barnaul\",\n \"usr/share/zoneinfo/Asia/Beirut\",\n \"usr/share/zoneinfo/Asia/Bishkek\",\n \"usr/share/zoneinfo/Asia/Brunei\",\n \"usr/share/zoneinfo/Asia/Calcutta\",\n \"usr/share/zoneinfo/Asia/Chita\",\n \"usr/share/zoneinfo/Asia/Choibalsan\",\n \"usr/share/zoneinfo/Asia/Chongqing\",\n \"usr/share/zoneinfo/Asia/Chungking\",\n \"usr/share/zoneinfo/Asia/Colombo\",\n \"usr/share/zoneinfo/Asia/Dacca\",\n \"usr/share/zoneinfo/Asia/Damascus\",\n \"usr/share/zoneinfo/Asia/Dhaka\",\n \"usr/share/zoneinfo/Asia/Dili\",\n \"usr/share/zoneinfo/Asia/Dubai\",\n \"usr/share/zoneinfo/Asia/Dushanbe\",\n \"usr/share/zoneinfo/Asia/Famagusta\",\n \"usr/share/zoneinfo/Asia/Gaza\",\n \"usr/share/zoneinfo/Asia/Harbin\",\n \"usr/share/zoneinfo/Asia/Hebron\",\n \"usr/share/zoneinfo/Asia/Ho_Chi_Minh\",\n \"usr/share/zoneinfo/Asia/Hong_Kong\",\n \"usr/share/zoneinfo/Asia/Hovd\",\n \"usr/share/zoneinfo/Asia/Irkutsk\",\n \"usr/share/zoneinfo/Asia/Istanbul\",\n \"usr/share/zoneinfo/Asia/Jakarta\",\n \"usr/share/zoneinfo/Asia/Jayapura\",\n \"usr/share/zoneinfo/Asia/Jerusalem\",\n \"usr/share/zoneinfo/Asia/Kabul\",\n \"usr/share/zoneinfo/Asia/Kamchatka\",\n \"usr/share/zoneinfo/Asia/Karachi\",\n \"usr/share/zoneinfo/Asia/Kashgar\",\n \"usr/share/zoneinfo/Asia/Kathmandu\",\n \"usr/share/zoneinfo/Asia/Katmandu\",\n \"usr/share/zoneinfo/Asia/Khandyga\",\n \"usr/share/zoneinfo/Asia/Kolkata\",\n \"usr/share/zoneinfo/Asia/Krasnoyarsk\",\n \"usr/share/zoneinfo/Asia/Kuala_Lumpur\",\n \"usr/share/zoneinfo/Asia/Kuching\",\n \"usr/share/zoneinfo/Asia/Kuwait\",\n \"usr/share/zoneinfo/Asia/Macao\",\n \"usr/share/zoneinfo/Asia/Macau\",\n \"usr/share/zoneinfo/Asia/Magadan\",\n \"usr/share/zoneinfo/Asia/Makassar\",\n \"usr/share/zoneinfo/Asia/Manila\",\n \"usr/share/zoneinfo/Asia/Muscat\",\n \"usr/share/zoneinfo/Asia/Nicosia\",\n \"usr/share/zoneinfo/Asia/Novokuznetsk\",\n \"usr/share/zoneinfo/Asia/Novosibirsk\",\n \"usr/share/zoneinfo/Asia/Omsk\",\n \"usr/share/zoneinfo/Asia/Oral\",\n \"usr/share/zoneinfo/Asia/Phnom_Penh\",\n \"usr/share/zoneinfo/Asia/Pontianak\",\n \"usr/share/zoneinfo/Asia/Pyongyang\",\n \"usr/share/zoneinfo/Asia/Qatar\",\n \"usr/share/zoneinfo/Asia/Qostanay\",\n \"usr/share/zoneinfo/Asia/Qyzylorda\",\n \"usr/share/zoneinfo/Asia/Rangoon\",\n \"usr/share/zoneinfo/Asia/Riyadh\",\n \"usr/share/zoneinfo/Asia/Saigon\",\n \"usr/share/zoneinfo/Asia/Sakhalin\",\n \"usr/share/zoneinfo/Asia/Samarkand\",\n \"usr/share/zoneinfo/Asia/Seoul\",\n \"usr/share/zoneinfo/Asia/Shanghai\",\n \"usr/share/zoneinfo/Asia/Singapore\",\n \"usr/share/zoneinfo/Asia/Srednekolymsk\",\n \"usr/share/zoneinfo/Asia/Taipei\",\n \"usr/share/zoneinfo/Asia/Tashkent\",\n \"usr/share/zoneinfo/Asia/Tbilisi\",\n \"usr/share/zoneinfo/Asia/Tehran\",\n \"usr/share/zoneinfo/Asia/Tel_Aviv\",\n \"usr/share/zoneinfo/Asia/Thimbu\",\n \"usr/share/zoneinfo/Asia/Thimphu\",\n \"usr/share/zoneinfo/Asia/Tokyo\",\n \"usr/share/zoneinfo/Asia/Tomsk\",\n \"usr/share/zoneinfo/Asia/Ujung_Pandang\",\n \"usr/share/zoneinfo/Asia/Ulaanbaatar\",\n \"usr/share/zoneinfo/Asia/Ulan_Bator\",\n \"usr/share/zoneinfo/Asia/Urumqi\",\n \"usr/share/zoneinfo/Asia/Ust-Nera\",\n \"usr/share/zoneinfo/Asia/Vientiane\",\n \"usr/share/zoneinfo/Asia/Vladivostok\",\n \"usr/share/zoneinfo/Asia/Yakutsk\",\n \"usr/share/zoneinfo/Asia/Yangon\",\n \"usr/share/zoneinfo/Asia/Yekaterinburg\",\n \"usr/share/zoneinfo/Asia/Yerevan\",\n \"usr/share/zoneinfo/Atlantic/Azores\",\n \"usr/share/zoneinfo/Atlantic/Bermuda\",\n \"usr/share/zoneinfo/Atlantic/Canary\",\n \"usr/share/zoneinfo/Atlantic/Cape_Verde\",\n \"usr/share/zoneinfo/Atlantic/Faeroe\",\n \"usr/share/zoneinfo/Atlantic/Faroe\",\n \"usr/share/zoneinfo/Atlantic/Jan_Mayen\",\n \"usr/share/zoneinfo/Atlantic/Madeira\",\n \"usr/share/zoneinfo/Atlantic/Reykjavik\",\n \"usr/share/zoneinfo/Atlantic/South_Georgia\",\n \"usr/share/zoneinfo/Atlantic/St_Helena\",\n \"usr/share/zoneinfo/Atlantic/Stanley\",\n \"usr/share/zoneinfo/Australia/ACT\",\n \"usr/share/zoneinfo/Australia/Adelaide\",\n \"usr/share/zoneinfo/Australia/Brisbane\",\n \"usr/share/zoneinfo/Australia/Broken_Hill\",\n \"usr/share/zoneinfo/Australia/Canberra\",\n \"usr/share/zoneinfo/Australia/Currie\",\n \"usr/share/zoneinfo/Australia/Darwin\",\n \"usr/share/zoneinfo/Australia/Eucla\",\n \"usr/share/zoneinfo/Australia/Hobart\",\n \"usr/share/zoneinfo/Australia/LHI\",\n \"usr/share/zoneinfo/Australia/Lindeman\",\n \"usr/share/zoneinfo/Australia/Lord_Howe\",\n \"usr/share/zoneinfo/Australia/Melbourne\",\n \"usr/share/zoneinfo/Australia/NSW\",\n \"usr/share/zoneinfo/Australia/North\",\n \"usr/share/zoneinfo/Australia/Perth\",\n \"usr/share/zoneinfo/Australia/Queensland\",\n \"usr/share/zoneinfo/Australia/South\",\n \"usr/share/zoneinfo/Australia/Sydney\",\n \"usr/share/zoneinfo/Australia/Tasmania\",\n \"usr/share/zoneinfo/Australia/Victoria\",\n \"usr/share/zoneinfo/Australia/West\",\n \"usr/share/zoneinfo/Australia/Yancowinna\",\n \"usr/share/zoneinfo/Brazil/Acre\",\n \"usr/share/zoneinfo/Brazil/DeNoronha\",\n \"usr/share/zoneinfo/Brazil/East\",\n \"usr/share/zoneinfo/Brazil/West\",\n \"usr/share/zoneinfo/Canada/Atlantic\",\n \"usr/share/zoneinfo/Canada/Central\",\n \"usr/share/zoneinfo/Canada/Eastern\",\n \"usr/share/zoneinfo/Canada/Mountain\",\n \"usr/share/zoneinfo/Canada/Newfoundland\",\n \"usr/share/zoneinfo/Canada/Pacific\",\n \"usr/share/zoneinfo/Canada/Saskatchewan\",\n \"usr/share/zoneinfo/Canada/Yukon\",\n \"usr/share/zoneinfo/Chile/Continental\",\n \"usr/share/zoneinfo/Chile/EasterIsland\",\n \"usr/share/zoneinfo/Etc/GMT\",\n \"usr/share/zoneinfo/Etc/GMT+0\",\n \"usr/share/zoneinfo/Etc/GMT+1\",\n \"usr/share/zoneinfo/Etc/GMT+10\",\n \"usr/share/zoneinfo/Etc/GMT+11\",\n \"usr/share/zoneinfo/Etc/GMT+12\",\n \"usr/share/zoneinfo/Etc/GMT+2\",\n \"usr/share/zoneinfo/Etc/GMT+3\",\n \"usr/share/zoneinfo/Etc/GMT+4\",\n \"usr/share/zoneinfo/Etc/GMT+5\",\n \"usr/share/zoneinfo/Etc/GMT+6\",\n \"usr/share/zoneinfo/Etc/GMT+7\",\n \"usr/share/zoneinfo/Etc/GMT+8\",\n \"usr/share/zoneinfo/Etc/GMT+9\",\n \"usr/share/zoneinfo/Etc/GMT-0\",\n \"usr/share/zoneinfo/Etc/GMT-1\",\n \"usr/share/zoneinfo/Etc/GMT-10\",\n \"usr/share/zoneinfo/Etc/GMT-11\",\n \"usr/share/zoneinfo/Etc/GMT-12\",\n \"usr/share/zoneinfo/Etc/GMT-13\",\n \"usr/share/zoneinfo/Etc/GMT-14\",\n \"usr/share/zoneinfo/Etc/GMT-2\",\n \"usr/share/zoneinfo/Etc/GMT-3\",\n \"usr/share/zoneinfo/Etc/GMT-4\",\n \"usr/share/zoneinfo/Etc/GMT-5\",\n \"usr/share/zoneinfo/Etc/GMT-6\",\n \"usr/share/zoneinfo/Etc/GMT-7\",\n \"usr/share/zoneinfo/Etc/GMT-8\",\n \"usr/share/zoneinfo/Etc/GMT-9\",\n \"usr/share/zoneinfo/Etc/GMT0\",\n \"usr/share/zoneinfo/Etc/Greenwich\",\n \"usr/share/zoneinfo/Etc/UCT\",\n \"usr/share/zoneinfo/Etc/UTC\",\n \"usr/share/zoneinfo/Etc/Universal\",\n \"usr/share/zoneinfo/Etc/Zulu\",\n \"usr/share/zoneinfo/Europe/Amsterdam\",\n \"usr/share/zoneinfo/Europe/Andorra\",\n \"usr/share/zoneinfo/Europe/Astrakhan\",\n \"usr/share/zoneinfo/Europe/Athens\",\n \"usr/share/zoneinfo/Europe/Belfast\",\n \"usr/share/zoneinfo/Europe/Belgrade\",\n \"usr/share/zoneinfo/Europe/Berlin\",\n \"usr/share/zoneinfo/Europe/Bratislava\",\n \"usr/share/zoneinfo/Europe/Brussels\",\n \"usr/share/zoneinfo/Europe/Bucharest\",\n \"usr/share/zoneinfo/Europe/Budapest\",\n \"usr/share/zoneinfo/Europe/Busingen\",\n \"usr/share/zoneinfo/Europe/Chisinau\",\n \"usr/share/zoneinfo/Europe/Copenhagen\",\n \"usr/share/zoneinfo/Europe/Dublin\",\n \"usr/share/zoneinfo/Europe/Gibraltar\",\n \"usr/share/zoneinfo/Europe/Guernsey\",\n \"usr/share/zoneinfo/Europe/Helsinki\",\n \"usr/share/zoneinfo/Europe/Isle_of_Man\",\n \"usr/share/zoneinfo/Europe/Istanbul\",\n \"usr/share/zoneinfo/Europe/Jersey\",\n \"usr/share/zoneinfo/Europe/Kaliningrad\",\n \"usr/share/zoneinfo/Europe/Kiev\",\n \"usr/share/zoneinfo/Europe/Kirov\",\n \"usr/share/zoneinfo/Europe/Kyiv\",\n \"usr/share/zoneinfo/Europe/Lisbon\",\n \"usr/share/zoneinfo/Europe/Ljubljana\",\n \"usr/share/zoneinfo/Europe/London\",\n \"usr/share/zoneinfo/Europe/Luxembourg\",\n \"usr/share/zoneinfo/Europe/Madrid\",\n \"usr/share/zoneinfo/Europe/Malta\",\n \"usr/share/zoneinfo/Europe/Mariehamn\",\n \"usr/share/zoneinfo/Europe/Minsk\",\n \"usr/share/zoneinfo/Europe/Monaco\",\n \"usr/share/zoneinfo/Europe/Moscow\",\n \"usr/share/zoneinfo/Europe/Nicosia\",\n \"usr/share/zoneinfo/Europe/Oslo\",\n \"usr/share/zoneinfo/Europe/Paris\",\n \"usr/share/zoneinfo/Europe/Podgorica\",\n \"usr/share/zoneinfo/Europe/Prague\",\n \"usr/share/zoneinfo/Europe/Riga\",\n \"usr/share/zoneinfo/Europe/Rome\",\n \"usr/share/zoneinfo/Europe/Samara\",\n \"usr/share/zoneinfo/Europe/San_Marino\",\n \"usr/share/zoneinfo/Europe/Sarajevo\",\n \"usr/share/zoneinfo/Europe/Saratov\",\n \"usr/share/zoneinfo/Europe/Simferopol\",\n \"usr/share/zoneinfo/Europe/Skopje\",\n \"usr/share/zoneinfo/Europe/Sofia\",\n \"usr/share/zoneinfo/Europe/Stockholm\",\n \"usr/share/zoneinfo/Europe/Tallinn\",\n \"usr/share/zoneinfo/Europe/Tirane\",\n \"usr/share/zoneinfo/Europe/Tiraspol\",\n \"usr/share/zoneinfo/Europe/Ulyanovsk\",\n \"usr/share/zoneinfo/Europe/Uzhgorod\",\n \"usr/share/zoneinfo/Europe/Vaduz\",\n \"usr/share/zoneinfo/Europe/Vatican\",\n \"usr/share/zoneinfo/Europe/Vienna\",\n \"usr/share/zoneinfo/Europe/Vilnius\",\n \"usr/share/zoneinfo/Europe/Volgograd\",\n \"usr/share/zoneinfo/Europe/Warsaw\",\n \"usr/share/zoneinfo/Europe/Zagreb\",\n \"usr/share/zoneinfo/Europe/Zaporozhye\",\n \"usr/share/zoneinfo/Europe/Zurich\",\n \"usr/share/zoneinfo/Indian/Antananarivo\",\n \"usr/share/zoneinfo/Indian/Chagos\",\n \"usr/share/zoneinfo/Indian/Christmas\",\n \"usr/share/zoneinfo/Indian/Cocos\",\n \"usr/share/zoneinfo/Indian/Comoro\",\n \"usr/share/zoneinfo/Indian/Kerguelen\",\n \"usr/share/zoneinfo/Indian/Mahe\",\n \"usr/share/zoneinfo/Indian/Maldives\",\n \"usr/share/zoneinfo/Indian/Mauritius\",\n \"usr/share/zoneinfo/Indian/Mayotte\",\n \"usr/share/zoneinfo/Indian/Reunion\",\n \"usr/share/zoneinfo/Mexico/BajaNorte\",\n \"usr/share/zoneinfo/Mexico/BajaSur\",\n \"usr/share/zoneinfo/Mexico/General\",\n \"usr/share/zoneinfo/Pacific/Apia\",\n \"usr/share/zoneinfo/Pacific/Auckland\",\n \"usr/share/zoneinfo/Pacific/Bougainville\",\n \"usr/share/zoneinfo/Pacific/Chatham\",\n \"usr/share/zoneinfo/Pacific/Chuuk\",\n \"usr/share/zoneinfo/Pacific/Easter\",\n \"usr/share/zoneinfo/Pacific/Efate\",\n \"usr/share/zoneinfo/Pacific/Enderbury\",\n \"usr/share/zoneinfo/Pacific/Fakaofo\",\n \"usr/share/zoneinfo/Pacific/Fiji\",\n \"usr/share/zoneinfo/Pacific/Funafuti\",\n \"usr/share/zoneinfo/Pacific/Galapagos\",\n \"usr/share/zoneinfo/Pacific/Gambier\",\n \"usr/share/zoneinfo/Pacific/Guadalcanal\",\n \"usr/share/zoneinfo/Pacific/Guam\",\n \"usr/share/zoneinfo/Pacific/Honolulu\",\n \"usr/share/zoneinfo/Pacific/Johnston\",\n \"usr/share/zoneinfo/Pacific/Kanton\",\n \"usr/share/zoneinfo/Pacific/Kiritimati\",\n \"usr/share/zoneinfo/Pacific/Kosrae\",\n \"usr/share/zoneinfo/Pacific/Kwajalein\",\n \"usr/share/zoneinfo/Pacific/Majuro\",\n \"usr/share/zoneinfo/Pacific/Marquesas\",\n \"usr/share/zoneinfo/Pacific/Midway\",\n \"usr/share/zoneinfo/Pacific/Nauru\",\n \"usr/share/zoneinfo/Pacific/Niue\",\n \"usr/share/zoneinfo/Pacific/Norfolk\",\n \"usr/share/zoneinfo/Pacific/Noumea\",\n \"usr/share/zoneinfo/Pacific/Pago_Pago\",\n \"usr/share/zoneinfo/Pacific/Palau\",\n \"usr/share/zoneinfo/Pacific/Pitcairn\",\n \"usr/share/zoneinfo/Pacific/Pohnpei\",\n \"usr/share/zoneinfo/Pacific/Ponape\",\n \"usr/share/zoneinfo/Pacific/Port_Moresby\",\n \"usr/share/zoneinfo/Pacific/Rarotonga\",\n \"usr/share/zoneinfo/Pacific/Saipan\",\n \"usr/share/zoneinfo/Pacific/Samoa\",\n \"usr/share/zoneinfo/Pacific/Tahiti\",\n \"usr/share/zoneinfo/Pacific/Tarawa\",\n \"usr/share/zoneinfo/Pacific/Tongatapu\",\n \"usr/share/zoneinfo/Pacific/Truk\",\n \"usr/share/zoneinfo/Pacific/Wake\",\n \"usr/share/zoneinfo/Pacific/Wallis\",\n \"usr/share/zoneinfo/Pacific/Yap\",\n \"usr/share/zoneinfo/US/Alaska\",\n \"usr/share/zoneinfo/US/Aleutian\",\n \"usr/share/zoneinfo/US/Arizona\",\n \"usr/share/zoneinfo/US/Central\",\n \"usr/share/zoneinfo/US/East-Indiana\",\n \"usr/share/zoneinfo/US/Eastern\",\n \"usr/share/zoneinfo/US/Hawaii\",\n \"usr/share/zoneinfo/US/Indiana-Starke\",\n \"usr/share/zoneinfo/US/Michigan\",\n \"usr/share/zoneinfo/US/Mountain\",\n \"usr/share/zoneinfo/US/Pacific\",\n \"usr/share/zoneinfo/US/Samoa\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"xz-libs@5.8.3-r0\",\n \"Name\": \"xz-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1ae658a5f132a091\"\n },\n \"Version\": \"5.8.3-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"xz\",\n \"SrcVersion\": \"5.8.3-r0\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"0BSD\",\n \"Public-Domain\",\n \"LGPL-2.1-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:4c92c5be0c5bef404e93c880eba9037a9b147347\",\n \"InstalledFiles\": [\n \"usr/lib/liblzma.so.5\",\n \"usr/lib/liblzma.so.5.8.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"zlib@1.3.2-r0\",\n \"Name\": \"zlib\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e37054a2982d6c16\"\n },\n \"Version\": \"1.3.2-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"zlib\",\n \"SrcVersion\": \"1.3.2-r0\",\n \"Licenses\": [\n \"Zlib\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:dd4c3d102acaef2a71a1495951d55fabc8680613\",\n \"InstalledFiles\": [\n \"usr/lib/libz.so.1\",\n \"usr/lib/libz.so.1.3.2\"\n ],\n \"AnalyzedBy\": \"apk\"\n }\n ],\n \"Vulnerabilities\": [\n {\n \"VulnerabilityID\": \"CVE-2026-85091\",\n \"PkgID\": \"zlib@1.3.2-r0\",\n \"PkgName\": \"zlib\",\n \"PkgIdentifier\": {\n \"PURL\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e37054a2982d6c16\"\n },\n \"InstalledVersion\": \"1.3.2-r0\",\n \"FixedVersion\": \"1.3.2-r1\",\n \"Status\": \"fixed\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"PrimaryURL\": \"https://avd.aquasec.com/nvd/cve-2026-85091\",\n \"DataSource\": {\n \"ID\": \"alpine\",\n \"Name\": \"Alpine Secdb\",\n \"URL\": \"https://secdb.alpinelinux.org/\"\n },\n \"Fingerprint\": \"sha256:d73c01b020c55acc174a3fde47c8af6f5638c58c7189c817edd6862029f6c5f5\",\n \"Title\": \"zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vul ...\",\n \"Description\": \"zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.\",\n \"Severity\": \"MEDIUM\",\n \"CweIDs\": [\n \"CWE-787\"\n ],\n \"VendorSeverity\": {\n \"ubuntu\": 2\n },\n \"References\": [\n \"https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490\",\n \"https://github.com/madler/zlib\",\n \"https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393\",\n \"https://www.cve.org/CVERecord?id=CVE-2026-85091\",\n \"https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate\"\n ],\n \"PublishedDate\": \"2026-09-03T13:06:20.573Z\",\n \"LastModifiedDate\": \"2026-09-09T20:41:07.123Z\"\n }\n ]\n },\n {\n \"Target\": \"Python\",\n \"Class\": \"lang-pkgs\",\n \"Type\": \"python-pkg\",\n \"Packages\": [\n {\n \"Name\": \"PyJWT\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/pyjwt@2.15.1\",\n \"UID\": \"d3f5f9a421b8abc9\"\n },\n \"Version\": \"2.15.1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"cffi\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/cffi@2.1.1\",\n \"UID\": \"21042e2f37e33c05\"\n },\n \"Version\": \"2.1.1\",\n \"Licenses\": [\n \"MIT-0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"cryptography\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/cryptography@50.0.1\",\n \"UID\": \"dcb3df6383fe2a60\"\n },\n \"Version\": \"50.0.1\",\n \"Licenses\": [\n \"Apache-2.0 OR BSD-3-Clause\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"informed-decision\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/informed-decision@0.2.0\",\n \"UID\": \"7989f2afae8ff568\"\n },\n \"Version\": \"0.2.0\",\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"pycparser\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/pycparser@3.0\",\n \"UID\": \"e5a4d03f15a695ff\"\n },\n \"Version\": \"3.0\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"waitress\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/waitress@3.0.2\",\n \"UID\": \"806e218e1c1e85f\"\n },\n \"Version\": \"3.0.2\",\n \"Licenses\": [\n \"ZPL-2.1\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n }\n ]\n }\n ]\n}\n" + }, + { + "item_id": "sqlite-readonly-py", + "media_type": "text/plain", + "content": "\"\"\"Pre-open schema/integrity/count proof; stdlib only, never constructs Store.\"\"\"\nimport argparse\nimport json\nfrom pathlib import Path\nimport sqlite3\n\n\ndef inspect_readonly(path):\n path = Path(path)\n if not path.is_file() or path.is_symlink():\n raise ValueError('existing nonsymlink private database required')\n with sqlite3.connect(path.resolve().as_uri() + '?mode=ro', uri=True, timeout=5) as db:\n db.execute('PRAGMA query_only=ON')\n db.execute('BEGIN')\n version = db.execute('PRAGMA user_version').fetchone()[0]\n if version != 5:\n raise ValueError('pre-open database is not schema5; refuse migration')\n if db.execute('PRAGMA integrity_check').fetchall() != [('ok',)]:\n raise ValueError('read-only integrity check refused')\n lifecycle = {name: db.execute('SELECT COUNT(*) FROM ' + table).fetchone()[0]\n for name, table in (('records', 'lifecycle_records'),\n ('events', 'lifecycle_events'),\n ('pending', 'lifecycle_pending'))}\n result = {'schema_version': version, 'lifecycle': lifecycle,\n 'outbox': dict(db.execute('SELECT state,COUNT(*) FROM outbox GROUP BY state')),\n 'submissions': dict(db.execute('SELECT state,COUNT(*) FROM submissions GROUP BY state')),\n 'integrity': 'ok', 'read_only_pre_open': True, 'store_constructed': False}\n db.rollback()\n return result\n\n\nif __name__ == '__main__':\n parser = argparse.ArgumentParser(description=__doc__)\n parser.add_argument('--db', type=Path, required=True)\n args = parser.parse_args()\n try:\n print(json.dumps(inspect_readonly(args.db), sort_keys=True))\n except Exception:\n raise SystemExit('read-only schema5/integrity/count gate refused; no Store/admin open') from None\n" + }, + { + "item_id": "sealed-native-dependencies-json", + "media_type": "application/json", + "content": "{\n \"configmap\": {\n \"apiVersion\": \"v1\",\n \"immutable\": true,\n \"kind\": \"ConfigMap\",\n \"metadata\": {\n \"annotations\": {\n \"argocd.argoproj.io/tracking-id\": \"informed-decision:/ConfigMap:informed-decision/informed-decision-runtime-6c221878d051\",\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"name\": \"informed-decision-runtime-6c221878d051\",\n \"namespace\": \"informed-decision\",\n \"uid\": \"90113d2d-54d9-4e82-b1d3-90b49ebed2b5\"\n },\n \"canonical_data_sha256\": \"8ec462d12347548f506eeebf1e3c7cc47648019c8a783804d09bcc79b0f22af6\"\n },\n \"pvc\": {\n \"apiVersion\": \"v1\",\n \"kind\": \"PersistentVolumeClaim\",\n \"metadata\": {\n \"annotations\": {\n \"argocd.argoproj.io/tracking-id\": \"informed-decision:/PersistentVolumeClaim:informed-decision/informed-decision-data\",\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\",\n \"pv.kubernetes.io/bind-completed\": \"yes\",\n \"pv.kubernetes.io/bound-by-controller\": \"yes\",\n \"volume.beta.kubernetes.io/storage-provisioner\": \"rancher.io/local-path\",\n \"volume.kubernetes.io/selected-node\": \"239.62.205.92.host.secureserver.net\",\n \"volume.kubernetes.io/storage-provisioner\": \"rancher.io/local-path\"\n },\n \"finalizers\": [\n \"kubernetes.io/pvc-protection\"\n ],\n \"name\": \"informed-decision-data\",\n \"namespace\": \"informed-decision\",\n \"uid\": \"d80b25b1-141a-441b-b205-98fa2fd98b7c\"\n },\n \"spec\": {\n \"accessModes\": [\n \"ReadWriteOnce\"\n ],\n \"resources\": {\n \"requests\": {\n \"storage\": \"1Gi\"\n }\n },\n \"storageClassName\": \"local-path\",\n \"volumeMode\": \"Filesystem\",\n \"volumeName\": \"pvc-d80b25b1-141a-441b-b205-98fa2fd98b7c\"\n }\n },\n \"pvc_phase\": \"Bound\"\n}\n" + }, + { + "item_id": "native-backup-restore-protocol-md", + "media_type": "text/markdown", + "content": "# Protected native backup/restore and image-only release protocol\n\nPrepared protocol for `INFD-WP-0009-T04/purpose-overlay-v1`. No actual native backup, data export, restore, workload change or approval is recorded here. Candidate registry image identity remains a prerequisite; only after actual artifact proof may the founder approve one exact conditional protocol/rollout packet. The config-only7db8485 approval is outside this scope.\n\n## Preconditions and protected custody\n\nFreeze exact candidate and prior7f5c6cb image digests, source/installed policy hashes, current manually managed Argo Application/revision, runtime ConfigMap6c221878d051, Deployment UID/template/spec, schema5, policy package pins, database path `/data/private/review.sqlite`, PVC binding, replicas1/Recreate and stable keys for intended verification. Confirm no concurrent writer or custody change. Use fixed metadata; never fetch Secret objects or token values. A changed image/config/schema/owner invalidates the packet. Fresh resources/headroom and exact source/native server-dry-run/diff remain required.\n\nBackups are private evidence containing real decision records, not logs or packet attachments. Allocate a unique backup directory under existing protected PVC custody, owned10001, mode0700, snapshot file0600, no symlink/hardlink/reused output path. An off-cluster copy belongs only in the already established ignored `.private-backups/` custody with0700/0600 permissions; no Git, StateHub, public object store or terminal-content dump. Record only schema, integrity pass/fail, bounded table/state counts and protected receipt identifier; retain byte digests in protected custody if needed for internal copy identity. No credential, record payload or token fingerprint enters public evidence.\n\n## Approved online compatibility drill\n\nWithin the explicit founder-approved action, run the existing base image's `informed-decision-admin backup --db /data/private/review.sqlite --output ` in the actual serving workload. This uses SQLite's backup API for a transactionally consistent snapshot; copying a live main database while ignoring WAL is prohibited. Suppress raw failures/output and retain only sanitized status. Observe schema/integrity and count-only metadata from the resulting snapshot, not record content.\n\nTransfer that consistent snapshot only into protected off-cluster custody through the existing authorized operator lane. The copy is real production data even in build mode. Verify private permissions, unique identity and protected internal digest agreement. Do not export mounted workload credentials or directory trees; copy only the exact snapshot.\n\nCreate a separate private disposable restore volume/directory; retain the original snapshot unchanged. Run the exact published candidate with network disabled, no production ConfigMap/token mounts, read-only image and only that isolated volume writable. Override the service entrypoint with the owner's count-only administrative inspection/integrity check; do not start HTTP listeners, audit delivery, requester exchanges or approval operations. The current candidate changes policy.py only and retains the schema/store module bytes; still prove schema5, SQLite integrity and exact bounded counts before/after opening the restored copy. Refuse any migration/downgrade, lost/changed counts, unexpected write class or unknown outcome. Keep pending/uncertain submission and outbox states; never replay, discard or mark them delivered to green the drill. Cleanup only the disposable copy/volume after verified receipt; retain the original protected backup for the approved recovery interval.\n\nThis step is actual native-data compatibility evidence once performed. Its previous synthetic fixture checks remain mechanism evidence and cannot be renamed native success. A failed drill stops rollout and remains a failed/unverified outcome in the same trial.\n\n## Fresh cutover snapshot and single-writer rollout\n\nAfter successful actual-data compatibility checks, create another unique SQLite-consistent online snapshot immediately before the image cutover, retaining its point-in-time schema/integrity/count receipt. This is an online transactional snapshot, not a claim that dispatchers or human writes were quiesced. Every later committed record remains in the live database; same-schema rollback retains that database and never restores the earlier snapshot over it. The narrow image-only update does not need dispatcher/configuration/PVC/temporary-pod changes or a schema cutover. If fresh verification shows a migration or any data-restoration requirement, stop and refine the proposal rather than applying this protocol.\n\nThe existing Recreate rollout drains/stops the single old writer before starting the new image on the same PVC; the inherited single-writer lock independently refuses concurrent serving processes. Do not add an admin pod, scale-to-zero, dispatcher stop, network-policy rewrite or snapshot overwrite as an improvised image-only step. The existing owner admin backup operation runs inside the admitted serving workload, and its separate protected restore drill runs off-cluster with network disabled and no workload credentials. Those exact custody operations must be enumerated in the founder packet alongside the one Deployment image change.\n\nOnce backup/compatibility/preflight gates pass, manually pin the existing Argo Application to the exact reviewed source revision and sync only Deployment/informed-decision with prune false, keeping the current immutable runtime ConfigMap and all other resources. The source patch changes only the image in admission/rendered Deployment; no Secret, PVC, policy, database or dispatcher change is included unless separately enumerated in the final proposal. Observe five-minute readiness and exact image/config/schema/pins. Verify native lifecycle binding using stable keys and an isolated installed-client probe based on a real provider response contaminated with advisory purpose; prove refusal before any write. Do not contaminate the live PDP, create human approvals, read credentials through CLI, or replay unknown external outcomes for testing.\n\n## Same-schema rollback and evidence retention\n\nOn startup/readiness/binding/refusal failure, retain current database, cutover backup and every post-cutover evidence/uncertain outcome. Restore only the prior7f5c6cb image through the same manual Argo owner path, retaining schema5 and current DB/configuration; never restore an old snapshot over current live evidence just to roll the image back. Verify old image/Ready1, same schema/counts and prior behavior, and reconcile any external effects using existing lifecycle/audit ownership. The narrow overlay's identical store/schema/dependency bytes permit this image-only rollback; it is not permission for a schema downgrade or data loss.\n\nRecord original/approved/executed source and image revisions, backup/drill/cutover/rollout timestamps, exact disposition and sanitized outcomes in the existing supervised trial receipt. EUR0 incremental infrastructure estimate uses existing service/storage/operator lane; protected temporary copy/storage consumption and15\u201330minute recovery time remain operational costs. No EUR incident-loss cap or autonomy grant is inferred. TaskT04 cannot close until actual published image, approved native compatibility and release plus post-release refusal/binding evidence all exist.\n\n## Exact release case identifiers\n\nProposal `INFD-WP-0009-T04/purpose-overlay-v1`, trial `infd-purpose-20261011-r1`.\nProtected native parent `/data/private/purpose-overlay-r1` must be unique/non-symlink, owned10001 and0700. The drill snapshot is `drill.sqlite`, the refreshed pre-cutover snapshot `cutover.sqlite`, each new0600 file; refuse any existing output. Off-cluster custody is the existing ignored Custodian `.private-backups/20261011-infd-purpose-r1` parent0700, files0600; no snapshot is an evidence attachment. Check owner UID, no symlinks, ignored status and free capacity for both native snapshots plus independently protected copies before making any snapshot.\n\nThe disposable offline restore volume is `infd-purpose-r1-restore-20261011`; refuse an existing volume, copy only the selected frozen snapshot, and run exact published candidate763c with networknone/read-only image,128MiB/core1 and no runtime config/token mounts. SQLite `PRAGMA integrity_check` must return `ok`, `PRAGMA user_version`/Store inspection must agree with actual schema5 semantics, and installed admin count-only inspection must match the frozen snapshot. Validate the actual schema representation rather than assume PRAGMA user_version is the schema authority. No synthetic restoration is reported as native restoration. Native original/off-cluster copies remain retained; only the disposable restore copy/volume may be removed under the exact approved cleanup scope.\n\n## Mandatory pre-open schema gate and offline command\n\n`informed-decision-admin inspect` and `backup` construct Store, which can migrate schemas1\u20134 to5. Therefore **before any Store/admin open**, run the exact attached stdlib-only `sqlite_readonly.py` against the native source database using SQLite URI mode=ro, query_only and one read transaction. Require PRAGMA user_version5, integrity_check=ok and retain count-only baseline. Refuse any other/unknown schema or incomplete integrity/count check before constructing Store; do not infer no migration from a post-open admin report. This native gate has not been executed in this source-preparation stage. Repeat before each native backup/admin operation.\n\nAfter copying the selected consistent snapshot to the isolated restored private path `/restore/review.sqlite`, run the same read-only checker **before** any offline candidate admin/Store opens that copy. Frozen snapshot and restored-copy schema/integrity/count reports must agree exactly; the copied main-file digest must match the selected closed snapshot. Reject oldschema fixtures rather than allow migration. Only after this pre-open gate may the offline candidate admin inspect run.\n\nOffline command vectors use exactimage `forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a`, `--network none --read-only --cpus 1 --memory 128m`, private restored volume mounted at `/restore`, and **no runtime config/credential/token mounts**. First override entrypoint to `python`, arguments `- --db /restore/review.sqlite`, streaming only the verified attached checker on stdin. Then override entrypoint to **`informed-decision-admin`**, arguments **`inspect --db /restore/review.sqlite`**. This does not start `informed-decision-container`, the HTTP service, dispatcher or delivery workers. Compare the admin's schema/lifecycle/outbox/submission counters to the frozen pre-open snapshot report; integrity and migration-free pre-open proof come from the stdlib checker, not admin output alone.\n\nLive reads and online snapshots may legitimately differ because reviews, intake and delivery can commit concurrently. Exact counter equality is required between the frozen selected snapshot and its offline restored clone; it is **not** required between a running post-cutover/rollback database and an earlier snapshot. Live count changes must be accounted for as legitimate committed records/state transitions; preserve all current and uncertain entries. Do not discard new commits or restore the old snapshot to force equality. Same-schema image rollback keeps the current live DB, followed by read-only schema5/integrity and count-only health checks; any unexplained evidence loss or required data recovery stops and requires a separate founder decision.\n\nThe fresh preflight also independently reads the actual immutable nonsecret ConfigMap and bound PVC: compares sealed UIDs/fullmetadata/PVCspec+volumeName and canonical runtime data checksum, returning no raw runtime data. Same-name deletion/recreation or content/custody drift stops before admission. Secret values remain excluded. Both local and remote optimized Python interpreters are explicitly refused before assertion-based gates.\n" + }, + { + "item_id": "inherited-vulnerability-follow-through-json", + "media_type": "application/json", + "content": "{\n \"id\": \"INFD-RISK-20261011-ZLIB-85091\",\n \"kind\": \"owner-vulnerability-follow-through\",\n \"owner\": \"informed-decision\",\n \"task\": \"INFD-WP-0009-T05\",\n \"status\": \"open\",\n \"created\": \"2026-10-11\",\n \"review_due\": \"2026-10-18\",\n \"finding\": \"CVE-2026-85091\",\n \"scanner_severity\": \"MEDIUM\",\n \"estate_risk_grade\": null,\n \"affected_package\": \"zlib\",\n \"installed\": \"1.3.2-r0\",\n \"fixed\": \"1.3.2-r1\",\n \"actual_current_base_and_candidate_findings_identical\": true,\n \"source_evidence\": \"security-summary.json, trivy-full.json, base-trivy-full.json\",\n \"human_temporary_disposition\": \"pending\",\n \"follow_through\": \"Prepare a separately source-bound official-base/dependency refresh through normal owner CI, verify full scan and runtime compatibility, obtain distinct native release approval before updating this workload\",\n \"manual_review_expiry\": \"Due date requires owner review/escalation if unresolved; no automatic rollback/controller is installed\",\n \"close_condition\": \"Verified installed native fixed package and full unfiltered rescan; preserve original detection and any human disposition\"\n}\n" + }, + { + "item_id": "native-preflight-json", + "media_type": "application/json", + "content": "{\n \"captured_at\": \"2026-10-11T01:25:38.793555+00:00\",\n \"native_workload_changed\": false,\n \"native_backup_restore_executed\": false,\n \"argo\": {\n \"uid\": \"499868f2-eabc-4df4-ae31-b89ce58d750d\",\n \"repoURL\": \"https://forgejo.coulomb.social/coulomb/informed-decision.git\",\n \"targetRevision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"path\": \"deploy/lifecycle\",\n \"destination\": {\n \"namespace\": \"informed-decision\",\n \"server\": \"https://kubernetes.default.svc\"\n },\n \"automated\": false,\n \"sync\": {\n \"comparedTo\": {\n \"destination\": {\n \"namespace\": \"informed-decision\",\n \"server\": \"https://kubernetes.default.svc\"\n },\n \"source\": {\n \"path\": \"deploy/lifecycle\",\n \"repoURL\": \"https://forgejo.coulomb.social/coulomb/informed-decision.git\",\n \"targetRevision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\"\n }\n },\n \"revision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"status\": \"OutOfSync\"\n },\n \"health\": {\n \"lastTransitionTime\": \"2026-10-10T23:14:52Z\",\n \"status\": \"Healthy\"\n }\n },\n \"live_ready_replicas\": 1,\n \"admitted_uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\",\n \"server_dry_run_passed\": true,\n \"admitted_spec_exactly_live_plus_image\": true,\n \"client_diff_exit\": 1,\n \"client_diff_sha256\": \"a4bc024a8cec658f835285ed51964e2e084edbaf103d45a48b89c0950bcd3e7d\",\n \"node_allocated_resources\": \"(Total limits may be over 100 percent, i.e., overcommitted.)\\n Resource Requests Limits\\n -------- -------- ------\\n cpu 3460m (86%) 36200m (905%)\\n memory 9472Mi (59%) 32898Mi (205%)\\n ephemeral-storage 0 (0%) 0 (0%)\\n hugepages-1Gi 0 (0%) 0 (0%)\\n hugepages-2Mi 0 (0%) 0 (0%)\",\n \"all_checks_pass\": true\n}\n" + }, + { + "item_id": "sealed-live-deployment-json", + "media_type": "application/json", + "content": "{\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"metadata\": {\n \"annotations\": {\n \"argocd.argoproj.io/tracking-id\": \"informed-decision:apps/Deployment:informed-decision/informed-decision\",\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"name\": \"informed-decision\",\n \"namespace\": \"informed-decision\",\n \"uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\"\n },\n \"spec\": {\n \"progressDeadlineSeconds\": 600,\n \"replicas\": 1,\n \"revisionHistoryLimit\": 10,\n \"selector\": {\n \"matchLabels\": {\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"strategy\": {\n \"type\": \"Recreate\"\n },\n \"template\": {\n \"metadata\": {\n \"annotations\": {\n \"informed-decision.coulomb.social/admission\": \"approved; INFD-WP-0007 cutover\"\n },\n \"labels\": {\n \"app.kubernetes.io/component\": \"review\",\n \"app.kubernetes.io/name\": \"informed-decision\"\n }\n },\n \"spec\": {\n \"automountServiceAccountToken\": false,\n \"containers\": [\n {\n \"env\": [\n {\n \"name\": \"INFD_KEYCAPE_ISSUER\",\n \"value\": \"https://kc.coulomb.social\"\n },\n {\n \"name\": \"INFD_CONTAINER_CONFIG\",\n \"value\": \"/configuration/runtime.json\"\n }\n ],\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"imagePullPolicy\": \"IfNotPresent\",\n \"livenessProbe\": {\n \"failureThreshold\": 3,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\",\n \"scheme\": \"HTTP\"\n },\n \"periodSeconds\": 10,\n \"successThreshold\": 1,\n \"timeoutSeconds\": 2\n },\n \"name\": \"informed-decision\",\n \"ports\": [\n {\n \"containerPort\": 8080,\n \"name\": \"http\",\n \"protocol\": \"TCP\"\n },\n {\n \"containerPort\": 8081,\n \"name\": \"workload\",\n \"protocol\": \"TCP\"\n }\n ],\n \"readinessProbe\": {\n \"failureThreshold\": 3,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\",\n \"scheme\": \"HTTP\"\n },\n \"periodSeconds\": 10,\n \"successThreshold\": 1,\n \"timeoutSeconds\": 2\n },\n \"resources\": {\n \"limits\": {\n \"cpu\": \"500m\",\n \"memory\": \"256Mi\"\n },\n \"requests\": {\n \"cpu\": \"5m\",\n \"memory\": \"64Mi\"\n }\n },\n \"securityContext\": {\n \"allowPrivilegeEscalation\": false,\n \"capabilities\": {\n \"drop\": [\n \"ALL\"\n ]\n },\n \"readOnlyRootFilesystem\": true\n },\n \"startupProbe\": {\n \"failureThreshold\": 12,\n \"httpGet\": {\n \"path\": \"/healthz\",\n \"port\": \"http\",\n \"scheme\": \"HTTP\"\n },\n \"periodSeconds\": 10,\n \"successThreshold\": 1,\n \"timeoutSeconds\": 2\n },\n \"terminationMessagePath\": \"/dev/termination-log\",\n \"terminationMessagePolicy\": \"File\",\n \"volumeMounts\": [\n {\n \"mountPath\": \"/data\",\n \"name\": \"data\"\n },\n {\n \"mountPath\": \"/run/informed-decision\",\n \"name\": \"runtime\"\n },\n {\n \"mountPath\": \"/tmp\",\n \"name\": \"tmp\"\n },\n {\n \"mountPath\": \"/configuration\",\n \"name\": \"configuration\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/policy\",\n \"name\": \"caller\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/audit\",\n \"name\": \"audit\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/kubernetes\",\n \"name\": \"kubernetes-api\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/workload-registry\",\n \"name\": \"workload-registry\",\n \"readOnly\": true\n },\n {\n \"mountPath\": \"/var/run/secrets/informed-decision/requester\",\n \"name\": \"sitting-requester\",\n \"readOnly\": true\n }\n ]\n }\n ],\n \"dnsPolicy\": \"ClusterFirst\",\n \"restartPolicy\": \"Always\",\n \"schedulerName\": \"default-scheduler\",\n \"securityContext\": {\n \"fsGroup\": 10001,\n \"fsGroupChangePolicy\": \"OnRootMismatch\",\n \"runAsGroup\": 10001,\n \"runAsNonRoot\": true,\n \"runAsUser\": 10001,\n \"seccompProfile\": {\n \"type\": \"RuntimeDefault\"\n }\n },\n \"serviceAccount\": \"review\",\n \"serviceAccountName\": \"review\",\n \"terminationGracePeriodSeconds\": 45,\n \"volumes\": [\n {\n \"name\": \"data\",\n \"persistentVolumeClaim\": {\n \"claimName\": \"informed-decision-data\"\n }\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"runtime\"\n },\n {\n \"emptyDir\": {\n \"medium\": \"Memory\",\n \"sizeLimit\": \"16Mi\"\n },\n \"name\": \"tmp\"\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-runtime-6c221878d051\"\n },\n \"name\": \"configuration\"\n },\n {\n \"name\": \"caller\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"audience\": \"flex-auth\",\n \"expirationSeconds\": 3600,\n \"path\": \"token\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"audit\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"token\",\n \"path\": \"token\"\n }\n ],\n \"secretName\": \"informed-decision-audit\"\n }\n },\n {\n \"name\": \"kubernetes-api\",\n \"projected\": {\n \"defaultMode\": 288,\n \"sources\": [\n {\n \"serviceAccountToken\": {\n \"expirationSeconds\": 600,\n \"path\": \"token\"\n }\n },\n {\n \"configMap\": {\n \"items\": [\n {\n \"key\": \"ca.crt\",\n \"path\": \"ca.crt\"\n }\n ],\n \"name\": \"kube-root-ca.crt\"\n }\n }\n ]\n }\n },\n {\n \"configMap\": {\n \"defaultMode\": 292,\n \"name\": \"informed-decision-workload-registry\"\n },\n \"name\": \"workload-registry\"\n },\n {\n \"name\": \"sitting-requester\",\n \"secret\": {\n \"defaultMode\": 288,\n \"items\": [\n {\n \"key\": \"client-secret\",\n \"path\": \"client-secret\"\n }\n ],\n \"optional\": false,\n \"secretName\": \"informed-decision-sitting-requester\"\n }\n }\n ]\n }\n }\n }\n}\n" + }, + { + "item_id": "change-guard-py", + "media_type": "text/plain", + "content": "\"\"\"Read-only exact Deployment and admission boundaries; no mutation authority.\"\"\"\nimport copy\nimport hashlib\nimport json\n\nBASE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173'\nCANDIDATE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a'\n\n\ndef dependency_projection(configmap, pvc):\n if (configmap.get('kind') != 'ConfigMap' or configmap.get('immutable') is not True\n or configmap['metadata']['namespace'] != 'informed-decision'\n or configmap['metadata']['name'] != 'informed-decision-runtime-6c221878d051'\n or set(configmap.get('data', {})) != {'runtime.json'}\n or configmap.get('binaryData')):\n raise ValueError('unexpected immutable runtime config identity')\n if (pvc.get('kind') != 'PersistentVolumeClaim'\n or pvc['metadata']['namespace'] != 'informed-decision'\n or pvc['metadata']['name'] != 'informed-decision-data'\n or pvc.get('status', {}).get('phase') != 'Bound'\n or not pvc.get('spec', {}).get('volumeName')):\n raise ValueError('unexpected bound PVC custody')\n config = projection(configmap)\n config.pop('data')\n config['canonical_data_sha256'] = hashlib.sha256(json.dumps(\n configmap['data'], sort_keys=True, separators=(',', ':')).encode()).hexdigest()\n return {'configmap': config, 'pvc': projection(pvc), 'pvc_phase': 'Bound'}\n\n\ndef check_dependencies(configmap, pvc, sealed):\n if dependency_projection(configmap, pvc) != sealed:\n raise ValueError('runtime config or PVC identity/custody changed')\n\n\ndef projection(value):\n value = copy.deepcopy(value)\n value.pop('status', None)\n for key in ('resourceVersion', 'generation', 'creationTimestamp', 'managedFields'):\n value['metadata'].pop(key, None)\n for key in ('kubectl.kubernetes.io/last-applied-configuration', 'deployment.kubernetes.io/revision'):\n value['metadata'].get('annotations', {}).pop(key, None)\n return value\n\n\ndef check_current(current, sealed):\n if projection(current) != sealed:\n raise ValueError('sealed live UID or configuration changed')\n\n\ndef check_admitted(admitted, sealed):\n expected = copy.deepcopy(sealed)\n containers = expected['spec']['template']['spec']['containers']\n if len(containers) != 1 or containers[0]['name'] != 'informed-decision' or containers[0]['image'] != BASE:\n raise ValueError('unexpected baseline container identity')\n containers[0]['image'] = CANDIDATE\n if projection(admitted) != expected:\n raise ValueError('admission changed configuration beyond the sole image pin')\n\n\ndef transport_result(exit_code, output):\n import json\n try:\n value = json.loads(output)\n except (ValueError, TypeError):\n return {'all_checks_pass': False, 'reason': 'invalid transport result'}\n if exit_code != 0 or not isinstance(value, dict) or value.get('all_checks_pass') is not True:\n return {'all_checks_pass': False, 'reason': 'read-only preflight refused'}\n return value\n" + }, + { + "item_id": "preflight-py", + "media_type": "text/plain", + "content": "\"\"\"Read-only refresh; exact original capture remains immutable; never execute cutover.\"\"\"\nimport argparse,hashlib,json,subprocess,sys\nfrom pathlib import Path\nif sys.flags.optimize:\n raise SystemExit(\"optimized interpreter refused before source/transport execution\")\nROOT=Path(__file__).resolve().parent\np=argparse.ArgumentParser();p.add_argument('--receipt-output',type=Path,required=True);p.add_argument('--source-root',type=Path,default=Path('/home/worsch/informed-decision'));a=p.parse_args()\nout=a.receipt_output.resolve()\nif not a.receipt_output.is_absolute() or out==ROOT or ROOT in out.parents or out==a.source_root.resolve() or a.source_root.resolve() in out.parents or out.exists():\n raise SystemExit('unique execution receipt must be outside the sealed packet')\ninputs=json.loads((ROOT/'preflight-inputs.json').read_text())\nfor relative,digest in inputs['packet_files'].items():\n path=ROOT/relative\n if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest()!=digest:raise SystemExit('sealed helper/input bytes changed')\nfor relative,digest in inputs['owner_source_files'].items():\n path=a.source_root/relative\n if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest()!=digest:raise SystemExit('owner source bytes changed')\nfrom change_guard import transport_result\nprogram='import subprocess,json,hashlib,datetime,sys,copy,re\\nif sys.flags.optimize:raise RuntimeError(\"optimized interpreter refused\")\\ncandidate=json.loads(CANDIDATE_LITERAL)\\nsealed_dependencies=json.loads(DEPENDENCIES_LITERAL)\\nsealed_baseline=json.loads(SEALED_LITERAL)\\nexec(GUARD_LITERAL)\\ndef run(args,data=None):\\n p=subprocess.run(args,input=data,text=True,capture_output=True)\\n if p.returncode: raise ValueError(\\'read-only command failed: \\'+args[1]+\\' \\'+args[2])\\n return p.stdout\\nlive=json.loads(run([\\'kubectl\\',\\'get\\',\\'deployment\\',\\'informed-decision\\',\\'-n\\',\\'informed-decision\\',\\'-o\\',\\'json\\']))\\ncm=json.loads(run([\\'kubectl\\',\\'get\\',\\'configmap\\',\\'informed-decision-runtime-6c221878d051\\',\\'-n\\',\\'informed-decision\\',\\'-o\\',\\'json\\']))\\npvc=json.loads(run([\\'kubectl\\',\\'get\\',\\'pvc\\',\\'informed-decision-data\\',\\'-n\\',\\'informed-decision\\',\\'-o\\',\\'json\\']))\\ncheck_dependencies(cm,pvc,sealed_dependencies)\\ncheck_current(live,sealed_baseline)\\nspec=live[\\'spec\\']; cs=spec[\\'template\\'][\\'spec\\'][\\'containers\\'];assert len(cs)==1 and cs[0][\\'name\\']==\\'informed-decision\\'\\nexpected_env={\\'INFD_KEYCAPE_ISSUER\\':\\'https://kc.coulomb.social\\',\\'INFD_CONTAINER_CONFIG\\':\\'/configuration/runtime.json\\'}\\nassert cs[0].get(\\'env\\')==[{\\'name\\':\\'INFD_KEYCAPE_ISSUER\\',\\'value\\':expected_env[\\'INFD_KEYCAPE_ISSUER\\']},{\\'name\\':\\'INFD_CONTAINER_CONFIG\\',\\'value\\':expected_env[\\'INFD_CONTAINER_CONFIG\\']}]\\nassert cs[0][\\'image\\']==\\'forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\\'\\nassert spec[\\'replicas\\']==1 and spec[\\'strategy\\']=={\\'type\\':\\'Recreate\\'}\\nassert next(v for v in spec[\\'template\\'][\\'spec\\'][\\'volumes\\'] if v[\\'name\\']==\\'configuration\\')[\\'configMap\\'][\\'name\\']==\\'informed-decision-runtime-6c221878d051\\'\\nassert live[\\'status\\'].get(\\'readyReplicas\\')==1 and live[\\'status\\'].get(\\'updatedReplicas\\')==1\\nsealed={\\'apiVersion\\':live[\\'apiVersion\\'],\\'kind\\':live[\\'kind\\'],\\'metadata\\':{k:copy.deepcopy(v) for k,v in live[\\'metadata\\'].items() if k not in (\\'resourceVersion\\',\\'generation\\',\\'creationTimestamp\\',\\'managedFields\\')},\\'spec\\':copy.deepcopy(spec)}\\nfor key in (\\'kubectl.kubernetes.io/last-applied-configuration\\',\\'deployment.kubernetes.io/revision\\'):sealed[\\'metadata\\'].get(\\'annotations\\',{}).pop(key,None)\\nadmitted=json.loads(run([\\'kubectl\\',\\'apply\\',\\'--dry-run=server\\',\\'-f\\',\\'-\\',\\'-o\\',\\'json\\'],json.dumps(candidate)))\\ncheck_admitted(admitted,sealed_baseline)\\napp=json.loads(run([\\'kubectl\\',\\'get\\',\\'application\\',\\'informed-decision\\',\\'-n\\',\\'argocd\\',\\'-o\\',\\'json\\']))\\nassert app[\\'spec\\'][\\'source\\'][\\'path\\']==\\'deploy/lifecycle\\' and not app[\\'spec\\'].get(\\'syncPolicy\\',{}).get(\\'automated\\')\\nargo={\\'uid\\':app[\\'metadata\\'][\\'uid\\'],\\'repoURL\\':app[\\'spec\\'][\\'source\\'][\\'repoURL\\'],\\'targetRevision\\':app[\\'spec\\'][\\'source\\'][\\'targetRevision\\'],\\'path\\':app[\\'spec\\'][\\'source\\'][\\'path\\'],\\'destination\\':app[\\'spec\\'][\\'destination\\'],\\'automated\\':False,\\'sync\\':app.get(\\'status\\',{}).get(\\'sync\\'),\\'health\\':app.get(\\'status\\',{}).get(\\'health\\')}\\nexpected_argo=json.loads(ARGO_LITERAL)\\nfor key in (\\'uid\\',\\'repoURL\\',\\'targetRevision\\',\\'path\\',\\'destination\\',\\'automated\\'):\\n assert argo[key]==expected_argo[key]\\nassert argo[\\'health\\'][\\'status\\']==\\'Healthy\\'\\ndiff=subprocess.run([\\'kubectl\\',\\'diff\\',\\'-f\\',\\'-\\'],input=json.dumps(candidate),text=True,capture_output=True);assert diff.returncode in (0,1)\\n# Diff can contain only nonsecret Deployment references; preserve digest rather than raw stdout.\\nnode=run([\\'kubectl\\',\\'describe\\',\\'node\\']);allocated=re.search(r\\'Allocated resources:.*?CPU Requests|Allocated resources:\\',node,re.S)\\nsection=node.split(\\'Allocated resources:\\')[1].split(\\'Events:\\')[0] if \\'Allocated resources:\\' in node else \\'\\'\\nnodes=json.loads(run([\\'kubectl\\',\\'get\\',\\'nodes\\',\\'-o\\',\\'json\\']))[\\'items\\'];assert len(nodes)==1\\nalloc=nodes[0][\\'status\\'][\\'allocatable\\'];cpu=alloc[\\'cpu\\'];cpu_m=int(cpu[:-1]) if cpu.endswith(\\'m\\') else int(cpu)*1000\\nrequested=int(re.search(r\\'cpu\\\\s+(\\\\d+)m\\',section).group(1));assert requested<=cpu_m\\nreceipt={\\'node_allocatable_cpu_m\\':cpu_m,\\'node_requested_cpu_m\\':requested,\\'captured_at\\':datetime.datetime.now(datetime.timezone.utc).isoformat(),\\'native_workload_changed\\':False,\\'native_backup_restore_executed\\':False,\\'argo\\':argo,\\'native_dependencies_checked\\':True,\\'configmap_uid\\':cm[\\'metadata\\'][\\'uid\\'],\\'pvc_uid\\':pvc[\\'metadata\\'][\\'uid\\'],\\'live_ready_replicas\\':1,\\'admitted_uid\\':admitted[\\'metadata\\'][\\'uid\\'],\\'server_dry_run_passed\\':True,\\'admitted_spec_exactly_live_plus_image\\':True,\\'client_diff_exit\\':diff.returncode,\\'client_diff_sha256\\':hashlib.sha256(diff.stdout.encode()).hexdigest(),\\'node_allocated_resources\\':section.strip(),\\'all_checks_pass\\':True}\\nprint(json.dumps(receipt))\\n'\nfor marker,value in [('DEPENDENCIES_LITERAL',(ROOT/'sealed-native-dependencies.json').read_text()),('CANDIDATE_LITERAL',(ROOT/'candidate-deployment.json').read_text()),('SEALED_LITERAL',(ROOT/'sealed-live-deployment.json').read_text()),('GUARD_LITERAL',(ROOT/'change_guard.py').read_text()),('ARGO_LITERAL',json.dumps(json.loads((ROOT/'native-preflight.json').read_text())['argo']))]:\n program=program.replace(marker,repr(value))\nprogram='import traceback,json\\ntry:\\n'+''.join(' '+line+'\\n' for line in program.splitlines())+\"except Exception as error:\\n print(json.dumps({'all_checks_pass':False,'exception_type':type(error).__name__,'exception_line':traceback.extract_tb(error.__traceback__)[-1].lineno}))\\n\"\nr=subprocess.run(['ssh','railiance01','python3 -'],input=program,text=True,capture_output=True)\nresult=transport_result(r.returncode,r.stdout);result['sealed_preflight_inputs_sha256']=hashlib.sha256((ROOT/'preflight-inputs.json').read_bytes()).hexdigest();result['fresh_execution_receipt']=True\nout.write_text(json.dumps(result,indent=2)+'\\n');print(json.dumps(result,indent=2));sys.exit(0 if result.get('all_checks_pass') is True else 1)\n" + }, + { + "item_id": "preflight-inputs-json", + "media_type": "application/json", + "content": "{\n \"packet_files\": {\n \"change_guard.py\": \"f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be\",\n \"preflight.py\": \"6b4c65f708238c9a9d17fd065876c7a00e1f1745926f990a1dd5e667298340cd\",\n \"candidate-deployment.json\": \"722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e\",\n \"rollback-deployment.json\": \"39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121\",\n \"sealed-live-deployment.json\": \"d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362\",\n \"native-preflight.json\": \"eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262\",\n \"sealed-native-dependencies.json\": \"042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369\",\n \"sqlite_readonly.py\": \"eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38\"\n },\n \"owner_source_files\": {\n \"deploy/lifecycle/admission.candidate.json\": \"92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55\",\n \"deploy/lifecycle/service.candidate.json\": \"38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4\"\n }\n}\n" + }, + { + "item_id": "fresh-preflight-validation-json", + "media_type": "application/json", + "content": "{\n \"node_allocatable_cpu_m\": 4000,\n \"node_requested_cpu_m\": 3460,\n \"captured_at\": \"2026-10-11T01:39:14.234277+00:00\",\n \"native_workload_changed\": false,\n \"native_backup_restore_executed\": false,\n \"argo\": {\n \"uid\": \"499868f2-eabc-4df4-ae31-b89ce58d750d\",\n \"repoURL\": \"https://forgejo.coulomb.social/coulomb/informed-decision.git\",\n \"targetRevision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"path\": \"deploy/lifecycle\",\n \"destination\": {\n \"namespace\": \"informed-decision\",\n \"server\": \"https://kubernetes.default.svc\"\n },\n \"automated\": false,\n \"sync\": {\n \"comparedTo\": {\n \"destination\": {\n \"namespace\": \"informed-decision\",\n \"server\": \"https://kubernetes.default.svc\"\n },\n \"source\": {\n \"path\": \"deploy/lifecycle\",\n \"repoURL\": \"https://forgejo.coulomb.social/coulomb/informed-decision.git\",\n \"targetRevision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\"\n }\n },\n \"revision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"status\": \"OutOfSync\"\n },\n \"health\": {\n \"lastTransitionTime\": \"2026-10-10T23:14:52Z\",\n \"status\": \"Healthy\"\n }\n },\n \"native_dependencies_checked\": true,\n \"configmap_uid\": \"90113d2d-54d9-4e82-b1d3-90b49ebed2b5\",\n \"pvc_uid\": \"d80b25b1-141a-441b-b205-98fa2fd98b7c\",\n \"live_ready_replicas\": 1,\n \"admitted_uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\",\n \"server_dry_run_passed\": true,\n \"admitted_spec_exactly_live_plus_image\": true,\n \"client_diff_exit\": 1,\n \"client_diff_sha256\": \"840769c7d2a9c1655c40a3259f833d1fc8f69950ceb3bedb707a955fed711566\",\n \"node_allocated_resources\": \"(Total limits may be over 100 percent, i.e., overcommitted.)\\n Resource Requests Limits\\n -------- -------- ------\\n cpu 3460m (86%) 36200m (905%)\\n memory 9472Mi (59%) 32898Mi (205%)\\n ephemeral-storage 0 (0%) 0 (0%)\\n hugepages-1Gi 0 (0%) 0 (0%)\\n hugepages-2Mi 0 (0%) 0 (0%)\",\n \"all_checks_pass\": true,\n \"sealed_preflight_inputs_sha256\": \"756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06\",\n \"fresh_execution_receipt\": true\n}\n" + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json new file mode 100644 index 0000000..cc6f5d7 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json @@ -0,0 +1,277 @@ +[ + { + "id": "infd-20261011-purpose-overlay-r1", + "register": { + "memo": { + "id": "infd-20261011-purpose-overlay-r1", + "version": 1, + "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", + "requested_act": "approve", + "binding_level": "organizational", + "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Before ANY admin/Store, readonly schema5/integrity/count gate; protected backup/restore, sealedDeployment+actualCM/PVC identities and unoptimizedpreflight required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "binding": { + "principal": { + "id": "pending-human-session", + "kind": "person", + "display_name": "Founder review" + }, + "target": { + "kind": "environment", + "id": "realm:kubernetes/railiance01/informed-decision", + "label": "Informed Decision image-only purpose hardening on railiance01", + "environment": "production" + }, + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedCM/PVC/Deploymentpreflight+pre-openreadonlyschema5+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + }, + "step_kind": "approve", + "packet": [ + { + "item_id": "decision-packet-md", + "label": "decision-packet.md", + "hash": "sha256:23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1" + }, + { + "item_id": "proposal-json", + "label": "proposal.json", + "hash": "sha256:a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82" + }, + { + "item_id": "candidate-admission-json", + "label": "candidate-admission.json", + "hash": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "item_id": "rollback-admission-json", + "label": "rollback-admission.json", + "hash": "sha256:22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "item_id": "candidate-deployment-json", + "label": "candidate-deployment.json", + "hash": "sha256:722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "item_id": "rollback-deployment-json", + "label": "rollback-deployment.json", + "hash": "sha256:39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "item_id": "published-verification-json", + "label": "published-verification.json", + "hash": "sha256:8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2" + }, + { + "item_id": "registry-proof-json", + "label": "registry-proof.json", + "hash": "sha256:5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "item_id": "security-summary-json", + "label": "security-summary.json", + "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "item_id": "trivy-full-json", + "label": "trivy-full.json", + "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "item_id": "sqlite-readonly-py", + "label": "sqlite_readonly.py", + "hash": "sha256:eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38" + }, + { + "item_id": "sealed-native-dependencies-json", + "label": "sealed-native-dependencies.json", + "hash": "sha256:042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369" + }, + { + "item_id": "native-backup-restore-protocol-md", + "label": "native-backup-restore-protocol.md", + "hash": "sha256:2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc" + }, + { + "item_id": "inherited-vulnerability-follow-through-json", + "label": "inherited-vulnerability-follow-through.json", + "hash": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "item_id": "native-preflight-json", + "label": "native-preflight.json", + "hash": "sha256:eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "item_id": "sealed-live-deployment-json", + "label": "sealed-live-deployment.json", + "hash": "sha256:d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "item_id": "change-guard-py", + "label": "change_guard.py", + "hash": "sha256:f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be" + }, + { + "item_id": "preflight-py", + "label": "preflight.py", + "hash": "sha256:6b4c65f708238c9a9d17fd065876c7a00e1f1745926f990a1dd5e667298340cd" + }, + { + "item_id": "preflight-inputs-json", + "label": "preflight-inputs.json", + "hash": "sha256:756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06" + }, + { + "item_id": "fresh-preflight-validation-json", + "label": "fresh-preflight-validation.json", + "hash": "sha256:2ec324aa8e3f97753b3ed87bca80820feb5e542dc0a4799aa848ec77ea92feb7" + } + ], + "highlights": [ + { + "id": "native-custody-rollout-and-known-medium", + "item_id": "decision-packet-md", + "note": "Protected real-data snapshot/restore and a brief Recreate restart require this separate native approval. Actual scan has one fixable inherited MEDIUM, not zero CVEs; exact owner follow-through due2026-10-18 is manual, with no automatic controller. Rollback preserves latestschema5DB and allnew/uncertain evidence. Synthetic transport tests are not native PDP authority proof. Admin can migrate oldschemas: readonlyschema5/integrity/count check must precede every native/offline Store/admin open. ActualCM/PVC UID/custody drift and optimizedPython stop the operation.", + "required_ack": true, + "severity": "warning", + "locator": { + "kind": "section", + "heading": "Requested decision" + } + } + ], + "sealed": false, + "approval_id": null, + "approval_binding_digest": null + }, + "documents": [ + { + "digest": "sha256:23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1", + "media_type": "text/markdown", + "content_base64": "IyBJbmZvcm1lZCBEZWNpc2lvbiBwdXJwb3NlIG92ZXJsYXkgcmVsZWFzZQoKIyMgUmVxdWVzdGVkIGRlY2lzaW9uCgpBcHByb3ZlIHRoZSBleGFjdCBwdXJwb3NlLW9ubHkgaW1hZ2Ugcm9sbG91dCBhbmQgcHJvdGVjdGVkIHJlYWwtZGF0YSBiYWNrdXAvcmVzdG9yZSBwcm90b2NvbCBmb3IgdGhlIGV4aXN0aW5nIEluZm9ybWVkIERlY2lzaW9uIHNlcnZpY2Ugb24gcmFpbGlhbmNlMDEuIFRoaXMgcmVxdWVzdCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBhbHJlYWR5IGFwcHJvdmVkIGNvbmZpZy1vbmx5IHJlcGFpci4gT25seSB0aGUgZXhpc3RpbmcgRGVwbG95bWVudCBpbWFnZSBjaGFuZ2VzIHRocm91Z2ggdGhlIG93bmVyJ3MgbWFudWFsIEFyZ28gd29ya2Zsb3csIHdpdGggcHJ1bmUgZGlzYWJsZWQuIFJ1bnRpbWUgQ29uZmlnTWFwIGBpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MWAsIHNjaGVtYTUsIFBWQywgY3JlZGVudGlhbHMsIGF1ZGllbmNlLCBwb2xpY2llcywgcmVnaXN0cmllcywgYWNjZXNzLCByZXBsaWNhMSBhbmQgUmVjcmVhdGUgc3RyYXRlZ3kgcmVtYWluIGZpeGVkLiBFeGVjdXRlIGJ5IDIwMjYtMTAtMTJUMjM6NTk6NTlaLCBhZnRlciByZWZyZXNoZWQgc2VhbGVkLXNvdXJjZS9VSUQvY29uZmlndXJhdGlvbiBjaGVja3MgYW5kIGJhY2t1cC9yZXN0b3JlIGdhdGVzLiBFeHBpcnkgc3RvcHMgYXV0aG9yaXphdGlvbiBmb3IgYW4gdW5zdGFydGVkIHJlbGVhc2U7IGl0IGRvZXMgbm90IGluc3RhbGwgYSBjb250cm9sbGVyIG9yIGF1dG9tYXRpY2FsbHkgcm9sbCBiYWNrIGFuIGFscmVhZHkgcmVsZWFzZWQgaW1hZ2UuCgojIyBBcnRpZmFjdCBhbmQga25vd24gZmluZGluZwoKQWN0dWFsIG93bmVyIENJIHRhc2sxMTQ4NC9ydW4zIHB1Ymxpc2hlZCBpbW11dGFibGUgaW1hZ2UgYHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhYCBmcm9tIHNvdXJjZSBgM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OGAuIEFub255bW91cyByZWdpc3RyeSB2ZXJpZmljYXRpb24gcHJlc2VydmVzIGFsbCBlaWdodCBiYXNlIGNvbXByZXNzZWQgYmxvYnMvcm9vdGZzIGxheWVycyBhbmQgYWRkcyBvbmx5IHBvbGljeS5weSB3aXRoIGV4YWN0IHNvdXJjZSBoYXNoIGFuZCBtb2RlMDY0NC4gTGVnYWN5LWJ1aWxkZXIgbWVkaWEtdHlwZS9kZWZhdWx0IGNvbmZpZyBzZXJpYWxpemF0aW9uIGRpZmZlcmVuY2VzIGFyZSByZWNvcmRlZDsgdGhlIHJ1bnRpbWUgc2VtYW50aWNzIHJlbWFpbiB1bmNoYW5nZWQuIFB1bGxlZCBwdWJsaXNoZWQgaW1hZ2UgZXhlY3V0ZXMgYXMgVUlEMTAwMDEvR0lEMTAwMDEgYW5kIHBhc3NlcyB0ZW4gaW5zdGFsbGVkIGNoZWNrczogdHdvIHN1cHBvcnRlZCBiaW5kaW5nIGZvcm1zLCBlaWdodCBhZHZpc29yeS9tYWxmb3JtZWQgcmVmdXNhbHMuIFRlc3RzIHVzZSBzeW50aGV0aWMgdHJhbnNwb3J0IGFuZCBkbyBub3QgY2xhaW0gbmV3IG5hdGl2ZSBQRFAgYXV0aG9yaXphdGlvbiBwcm9vZi4gVGhlIHR3byBmYWlsZWQgQ0kgYXR0ZW1wdHMgcmVtYWluIGluIHRoZSBzYW1lIHRyaWFsIGhpc3RvcnkuCgpBY3R1YWwgdW5maWx0ZXJlZCBwaW5uZWQgc2Nhbm5lci9EQiBldmlkZW5jZSBjb3ZlcnM0NHBhY2thZ2VzOiB6ZXJvIEhJR0gvQ1JJVElDQUwsICoqb25lIGZpeGFibGUgTUVESVVNKiosIENWRS0yMDI2LTg1MDkxLCB6bGliMS4zLjItcjAgZml4ZWQgaW4xLjMuMi1yMS4gQWN0dWFsIGN1cnJlbnQtYmFzZSBzY2FuIGhhcyB0aGUgaWRlbnRpY2FsIGZpbmRpbmcuIEFwcHJvdmluZyB0aGlzIHBhY2tldCBleHBsaWNpdGx5IHBlcm1pdHMgdGhpcyBpbmhlcml0ZWQgZmluZGluZyBkdXJpbmcgdGhpcyBuYXJyb3cgcHVycG9zZSByZWxlYXNlOyBpdCBpcyBub3QgYSBSaXNrTmV4dXMgZXN0YXRlIHJpc2sgZ3JhZGUgb3IgemVyby1DVkUgY2xhaW0uIE93bmVyIHJlY29yZCBJTkZELVJJU0stMjAyNjEwMTEtWkxJQi04NTA5MSBhbmQgbGl2ZSB0YXNrIElORkQtV1AtMDAwOS1UMDUgcmVxdWlyZSBzZXBhcmF0ZSBiYXNlIHJlZnJlc2ggYW5kIG5hdGl2ZSBhcHByb3ZhbCwgcmV2aWV3ZWQgYnkyMDI2LTEwLTE4LiBUaGF0IHJldmlldyBkYXRlIGlzIG1hbnVhbCBmb2xsb3ctdGhyb3VnaCwgd2l0aCBubyBhdXRvLWNvbnRyb2xsZXIgY2xhaW0uIFNjYW5uZXIgbm90ZXMgQWxwaW5lMy4yNCBhYnNlbnQgRU9MIGxpc3Q7IE9TIHZ1bG5lcmFiaWxpdHkgZGV0ZWN0aW9uIHJhbiBhZ2FpbnN0MzhPU3BhY2thZ2VzLiBVbmtub3duIHZ1bG5lcmFiaWxpdGllcyByZW1haW4gb3V0c2lkZSBzbmFwc2hvdCBrbm93bGVkZ2UuCgojIyBOYXRpdmUgYmFzZWxpbmUgYW5kIGdhdGVzCgpPcmlnaW5hbCByZWFkLW9ubHkgY2FwdHVyZTAxOjI1OjM4WjogZXhpc3RpbmcgRGVwbG95bWVudCBVSURhNTg4ZTEwYSwgUmVhZHkxLCBpbWFnZTdmNWMsIHVuY2hhbmdlZCBydW50aW1lNmM7IG5hdGl2ZSBhZG1pc3Npb24gcHJlc2VydmVzIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gcGx1cyBleGFjdGx5IHRoZSBwcm9wb3NlZCBpbWFnZS4gQ2xpZW50ZGlmZiByZXR1cm5zMS4gUmVxdWVzdHMzNDYwLzQwMDBtQ1BVODYlLCBtZW1vcnk5NDcyTWk1OSU7IHJlZnJlc2ggYmVmb3JlIHJlbGVhc2UuIEV4aXN0aW5nIEFyZ28gQXBwbGljYXRpb24gVUlENDk5ODY4ZjIgaXMgbWFudWFsLCB0YXJnZXQ3ZGI4NDg1LCBIZWFsdGh5IHdpdGggcHJlLWV4aXN0aW5nIE91dE9mU3luYyBzdGF0dXMuIERvIG5vdCB0cmVhdCBhIHNjb3BlZCBEZXBsb3ltZW50IHJlbGVhc2UgYXMgZnVsbC1hcHAgcmVjb25jaWxpYXRpb24uIFByZXNlcnZlIGl0cyB0cmFja2luZy1pZDsgbm8gdW5yZWxhdGVkIHJlc291cmNlIHN5bmMvcHJ1bmUvYWRvcHRpb24uCgpUaGUgcmVmaW5lZCByZWFkLW9ubHkgaGVscGVyIGJpbmRzIG9yaWdpbmFsIHNvdXJjZS9oZWxwZXIvcmVuZGVyL2Jhc2VsaW5lIGhhc2hlcyBhbmQgYWN0dWFsIGltbXV0YWJsZSBDb25maWdNYXAvUFZDIFVJRHMsIHJ1bnRpbWUtZGF0YSBjaGVja3N1bSBhbmQgYm91bmQgdm9sdW1lIGlkZW50aXR5LCBleHBsaWNpdGx5IHJlZnVzZXMgb3B0aW1pemVkIGludGVycHJldGVycywgY2hlY2tzIGV4YWN0IGZyZXNoIGxpdmUgVUlEL2NvbmZpZ3VyYXRpb24gYW5kIGFkbWlzc2lvbiwgYW5kIHdyaXRlcyBhIHNlcGFyYXRlIGV4ZWN1dGlvbiByZWNlaXB0IG91dHNpZGUgdGhpcyBzZWFsZWQgcGFja2V0LiBGYWlsZWQgaW5pdGlhbCByYXcgS3VzdG9taXplIG1ldGFkYXRhIGNoZWNrIGlzIHJldGFpbmVkOiBkaXJlY3Qga3ViZWN0bCBhcHBseSB3b3VsZCBkcm9wIEFyZ28gdHJhY2tpbmctaWQuIFRoZSByZXZpZXdlZCBzZWxlY3RlZCBEZXBsb3ltZW50IGV4cGxpY2l0bHkgcmV0YWlucyB0aGF0IGV4aXN0aW5nIElELCBtYXRjaGluZyBBcmdvIG93bmVyc2hpcC4gQW55IHVucmVsYXRlZCBkcmlmdCwgZGlmZmVyZW50IFVJRCwgYWx0ZXJlZCBhZG1pc3Npb24sIHVuYXZhaWxhYmxlIHByb3RlY3RlZCBiYWNrdXAgY2FwYWNpdHksIHVuY2VydGFpbiBiYWNrdXAsIHJlc3RvcmUgbWlzbWF0Y2ggb3IgdW5oZWFsdGh5IGJhc2VsaW5lIHN0b3BzIHRoZSByZWxlYXNlLgoKIyMgUHJvdGVjdGVkIGJhY2t1cCBhbmQgcmVsZWFzZQoKQmVmb3JlICoqYW55KiogbmF0aXZlIHNvdXJjZSBvciBvZmZsaW5lLXJlc3RvcmVkIFN0b3JlL2FkbWluIG9wZW4sIHVzZSB0aGUgYXR0YWNoZWQgc3RkbGliIFNRTGl0ZSBtb2RlPXJvL3F1ZXJ5X29ubHkgY2hlY2tlciB0byByZXF1aXJlIHNjaGVtYTUsIGludGVncml0eT1vayBhbmQgY291bnQtb25seSBiYXNlbGluZS4gVGhlIGFkbWluIGF1dG9tYXRpY2FsbHkgbWlncmF0ZXMgb2xkc2NoZW1hcywgc28gYSBwb3N0LW9wZW4gcmVwb3J0IGFsb25lIGNhbm5vdCBwcm92ZSBubyBtaWdyYXRpb24uIFJlZnVzZSBvdGhlciBzY2hlbWFzIGJlZm9yZSBhZG1pbi4gVGhlbiB1c2UgdGhlIGV4aXN0aW5nIG93bmVyIGFkbWluJ3MgU1FMaXRlIGJhY2t1cCBBUEksIG5vdCBhIHJhdyBjb3B5IG9mIHRoZSBsaXZlIGRhdGFiYXNlL1dBTC4gUHJvdGVjdCBkaXJlY3RvcmllczA3MDAvZmlsZXMwNjAwLCBvd25lZCBieTEwMDAxLiBSZXRhaW4gaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgb2ZmLWNsdXN0ZXIgc25hcHNob3QgY3VzdG9keSBhbmQgb25seSBjb3VudC9oYXNoIHJlY2VpcHRzLiBObyBkYXRhYmFzZSBjb250ZW50cywgY2FsbGVyIHRva2VucywgcmVxdWVzdGVyIFNlY3JldCBvciBydW50aW1lIGNyZWRlbnRpYWwgZmlsZXMgZW50ZXIgR2l0LCBTdGF0ZSBIdWIsIGxvZ3Mgb3IgdGhpcyBwYWNrZXQuIE5hdGl2ZSBiYWNrdXAgYW5kIG9mZmxpbmUgcmVhbC1kYXRhIHJlc3RvcmUgaGF2ZSBub3QgeWV0IG9jY3VycmVkLiBVc2UgYW4gaXNvbGF0ZWQgcHJpdmF0ZSBkaXNwb3NhYmxlIGNvcHksIG5ldHdvcmtub25lIGFuZCBubyBydW50aW1lIGNvbmZpZy90b2tlbiBtb3VudHMsIHJ1biB0aGUgcHJlLW9wZW4gY2hlY2tlciBhbmQgZXhhY3Qgb2ZmbGluZSBgLS1lbnRyeXBvaW50IGluZm9ybWVkLWRlY2lzaW9uLWFkbWluIGluc3BlY3QgLS1kYiAvcmVzdG9yZS9yZXZpZXcuc3FsaXRlYCBhZnRlciBpdCBwYXNzZXMsIGNvbXBhcmluZyBmcm96ZW4gc25hcHNob3QgY291bnRzIHdpdGhvdXQgc2VydmljZSBzdGFydHVwLCB0aGVuIGNsZWFuIG9ubHkgdGhlIGRpc3Bvc2FibGUgcmVzdG9yZWQgY29weS4gUmV0YWluIHRoZSBvcmlnaW5hbCBzbmFwc2hvdC4gVGhlIGF0dGFjaGVkIHByb3RvY29sIGJpbmRzIGNhc2Utc3BlY2lmaWMgcGF0aHMgYW5kIGZhaWwtY2xvc2VkIGNhcGFjaXR5L2N1c3RvZHkgY2hlY2tzLgoKUmVmcmVzaCBhIGNvbnNpc3RlbnQgb25saW5lIHNuYXBzaG90IGltbWVkaWF0ZWx5IGJlZm9yZSBpbWFnZS1vbmx5IGN1dG92ZXIuIFRoaXMgcHJvdG9jb2wgZG9lcyBub3QgYXNzZXJ0IHRyYWZmaWMvZGlzcGF0Y2hlciBxdWllc2NlbmNlLiBDdXJyZW50IGFuZCBjYW5kaWRhdGUgc2hhcmUgc2NoZW1hNSBhbmQgdW5jaGFuZ2VkIHN0b3JlIGNvZGU7IHJvbGxiYWNrIHJldGFpbnMgdGhlIGxhdGVzdCBsaXZlIGRhdGFiYXNlIGFuZCBhbGwgbmV3L3VuY2VydGFpbiBldmlkZW5jZS4gU3RvcCB0aGUgb2xkIHdyaXRlciBiZWZvcmUgdGhlIG5ldyBvbmUgd2l0aCBleGlzdGluZyBSZWNyZWF0ZSBhbmQgc2luZ2xlLXdyaXRlciBsb2NrLiBEbyBub3QgcmVzdG9yZSBhbiBvbGRlciBzbmFwc2hvdCBvdmVyIGxhdGVyIHdyaXRlcywgZGlzY2FyZCB1bnJlc29sdmVkIGV4dGVybmFsIGVmZmVjdHMsIHNjYWxlIG90aGVyIHdvcmtsb2FkcywgY2hhbmdlIHBvbGljaWVzL2lkZW50aXR5L2N1c3RvZHksIG9yIGNyZWF0ZSBodW1hbiBkaXNwb3NpdGlvbnMgdG8gbWFrZSBjaGVja3MgZ3JlZW4uCgpQaW4gdGhlIGV4aXN0aW5nIEFwcGxpY2F0aW9uIHRvIHRoZSBleGFjdCBvd25lciBjb21taXQgY29udGFpbmluZyB0aGUgYXBwcm92ZWQgY2FuZGlkYXRlIHNvdXJjZSBoYXNoZXMsIGFuZCBtYW51YWxseSBzeW5jIG9ubHkgRGVwbG95bWVudC9pbmZvcm1lZC1kZWNpc2lvbiB3aXRoIHBydW5lPWZhbHNlLiBWZXJpZnkgYWN0dWFsaW1hZ2UvbW9kdWxlL21vZGUvVUlELCBoZWFsdGgvcmVhZGluZXNzIGFuZCBpbnN0YWxsZWQgcHVycG9zZSByZWZ1c2FscyBvbiB0aGUgcmVhbCBwbGFjZW1lbnQ7IGV4cGxpY2l0bHkgZGlzdGluZ3Vpc2ggc3ludGhldGljLXRyYW5zcG9ydCBjaGVja3MgZnJvbSBhY3R1YWwgcHJvdmlkZXIgZXZpZGVuY2UuIEV4aXN0aW5nIG5hdGl2ZSBiaW5kaW5nL2xpZmVjeWNsZSBiZWhhdmlvciBtdXN0IHJlbWFpbiBhdmFpbGFibGUuIElmIHVuaGVhbHRoeSBvciB2ZXJpZmljYXRpb24gZmFpbHMsIHJldHVybiBBcHBsaWNhdGlvbiBzb3VyY2UgdG83ZGI4NDg1IGFuZCBzY29wZWQtc3luYyBwcmlvciBzYW1lLXNjaGVtYSBpbWFnZTdmNWMsIHByZXNlcnZpbmcgY3VycmVudCBldmlkZW5jZSBkYXRhYmFzZTsgcmV0YWluIGZhaWxlZCBvdXRjb21lcy4gQW55IGRhdGEgcmVjb3ZlcnkgYmV5b25kIHRoaXMgc2FtZS1zY2hlbWEgaW1hZ2Ugcm9sbGJhY2sgaXMgYSBzZXBhcmF0ZSBmb3VuZGVyIGRlY2lzaW9uLgoKIyMgQWx0ZXJuYXRpdmVzIGFuZCBlc3RpbWF0ZXMKClByb2NlZWQgd2l0aCB0aGlzIG5hcnJvdyByZWxlYXNlIHBsdXMgZXhwbGljaXQgaW5oZXJpdGVkLW1lZGl1bSBmb2xsb3ctdGhyb3VnaCwgb3IgZGVmZXIgYW5kIHByZXBhcmUgYSBzZXBhcmF0ZSBiYXNlL2RlcGVuZGVuY3kgcmVmcmVzaCBiZWZvcmUgYW55IHJlbGVhc2UuIE5vIGFkZGl0aW9uYWwgcmVjdXJyaW5nIGhvc3RpbmcgaXMgcHJvcG9zZWQ6IGVzdGltYXRlZCBpbmNyZW1lbnRhbCBpbmZyYXN0cnVjdHVyZSBFVVIwLCB3aXRoIHByaXZhdGUgc3RvcmFnZSBhbmQgYXR0ZW5kZWQgZW5naW5lZXJpbmcvcmVjb3ZlcnkgdGltZSB1bnByaWNlZC4gUmlza3MgaW5jbHVkZSBhIGJyaWVmIFJlY3JlYXRlIGludGVycnVwdGlvbiwgcHJpdmF0ZSBiYWNrdXAgY3VzdG9keSBlcnJvcnMsIGNhbGxlciByZWZ1c2FsIHdoZW4gYWR2aXNvcnkgcmVzcG9uc2VzIHdlcmUgaW1wcm9wZXJseSB0cmVhdGVkIGFzIGJpbmRpbmcsIGFuZCB0aGUgZGlzY2xvc2VkIGluaGVyaXRlZCBmaW5kaW5nLiBUaGlzIGRlY2lzaW9uIGRvZXMgbm90IHByb21vdGUgYWdlbnQgYXV0b25vbXkgb3IgZ3JhbnQgdW5yZWxhdGVkIHdvcmsuCgojIyBJbmRlcGVuZGVudCByZXZpZXcgcmVmaW5lbWVudHMKClRoZSBpbml0aWFsMzZwYXRoLzIwZG9jdW1lbnQgcGFja2V0IGF0IG1hbmlmZXN0N2M2NzM4YjMgYW5kIHN1Ym1pc3Npb25hYzQxYzhhZSBpcyBwcmVzZXJ2ZWQgaW4gc291cmNlIHByZXBhcmF0aW9uIGV2aWRlbmNlLCB3aXRoIHRoZSBmYWlsZWQvY29uZGl0aW9uYWwgcmV2aWV3LiBJbmRlcGVuZGVudCBQbGF0Zm9ybSByZXZpZXcgaWRlbnRpZmllZCBhZG1pbiBhdXRvLW1pZ3JhdGlvbiwgb3B0aW1pemF0aW9uIGJ5cGFzcywgYW5kIGFjdHVhbCBzYW1lLW5hbWUgQ29uZmlnTWFwL1BWQyByZXBsYWNlbWVudCBnYXBzLiBUaGUgYW1lbmRlZCBwYWNrZXQgYWRkcyBwcmUtb3BlbiBzdGRsaWIgcmVhZC1vbmx5IHNjaGVtYS9pbnRlZ3JpdHkvY291bnQgZ2F0ZXMsIGV4cGxpY2l0IGxvY2FsL3JlbW90ZSBvcHRpbWl6YXRpb24gcmVmdXNhbCwgYW5kIGluZGVwZW5kZW50bHkgc2VhbGVkIGFjdHVhbCBuYXRpdmUgY29uZmlnL1BWQyBjdXN0b2R5IGNoZWNrcy4gVGhlc2UgYXJlIHJlZmluZW1lbnRzIGluIHRoZSBzYW1lIHByb3Bvc2FsL3RyaWFsLCB3aXRoIG5vIG9yaWdpbmFsIG9yIGFtZW5kZWQgZm91bmRlciBhcHByb3ZhbCBjbGFpbWVkLgo=" + }, + { + "digest": "sha256:a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82", + "media_type": "application/json", + "content_base64": "ewogICJwcm9wb3NhbF9pZCI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIsCiAgInRyaWFsX2lkIjogImluZmQtcHVycG9zZS0yMDI2MTAxMS1yMSIsCiAgInN0YXRlIjogInByZXBhcmVkLXVuYXBwcm92ZWQiLAogICJ0YXJnZXQiOiAicmVhbG06a3ViZXJuZXRlcy9yYWlsaWFuY2UwMS9pbmZvcm1lZC1kZWNpc2lvbiIsCiAgImF1dGhvcml0eSI6ICJBRE1JTklTVEVSOyBhY3RpdmF0aW9uIEFQUFJPVkVEIG9ubHkgdXBvbiBleGFjdCBmb3VuZGVyIGRpc3Bvc2l0aW9uIiwKICAiY2FuZGlkYXRlX2ltYWdlIjogImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6NzYzYzM2NDAyYzhiZTdjYzRjMWJkMWE2MTYyM2QxYWZmOTExNmQ1MjI0MTg3NzQyNWI0NWE3MDE4Y2MwODgzYSIsCiAgInB1Ymxpc2hlZF9zb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInByaW9yX2ltYWdlIjogImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MyIsCiAgInByaW9yX2FyZ29fcmV2aXNpb24iOiAiN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZiIsCiAgIm5hdGl2ZV9vYmplY3QiOiB7CiAgICAiYXBpVmVyc2lvbiI6ICJhcHBzL3YxIiwKICAgICJraW5kIjogIkRlcGxveW1lbnQiLAogICAgIm5hbWVzcGFjZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAidWlkIjogImE1ODhlMTBhLTkwZDItNDg4My05NzVlLTZkZDhiOGZlY2E5MiIKICB9LAogICJhcmdvX2FwcGxpY2F0aW9uX3VpZCI6ICI0OTk4NjhmMi1lYWJjLTRkZjQtYWUzMS1iODljZTU4ZDc1MGQiLAogICJzb3VyY2VfZ2F0ZSI6ICJFeGFjdCBjb21taXR0ZWQgb3duZXIgc291cmNlIG11c3QgY29udGFpbiB0aGUgdHdvIGFwcHJvdmVkIGNhbmRpZGF0ZSBmaWxlIGhhc2hlcyBpbiBwcmVmbGlnaHQtaW5wdXRzLmpzb247IHNvdXJjZSBwcmVwYXJhdGlvbiBpcyBub3QgbmF0aXZlIGFwcHJvdmFsIiwKICAic3luY19zY29wZSI6IFsKICAgICJhcHBzOkRlcGxveW1lbnQ6aW5mb3JtZWQtZGVjaXNpb24iCiAgXSwKICAicHJ1bmUiOiBmYWxzZSwKICAiYXV0b21hdGVkX3N5bmMiOiBmYWxzZSwKICAicnVudGltZV9jb25maWdtYXAiOiAiaW5mb3JtZWQtZGVjaXNpb24tcnVudGltZS02YzIyMTg3OGQwNTEiLAogICJzY2hlbWEiOiA1LAogICJyZXF1ZXN0ZWRfb3BlcmF0aW9ucyI6IFsKICAgICJQcm90ZWN0ZWQgU1FMaXRlLWNvbnNpc3RlbnQgbmF0aXZlIGJhY2t1cCBhbmQgaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgb2ZmLWNsdXN0ZXIgY3VzdG9keSIsCiAgICAiT2ZmbGluZSByZXN0b3JlL2ludGVncml0eS9jb3VudCBjb21wYXJpc29uIG9uIGEgcHJpdmF0ZSBkaXNwb3NhYmxlIHZvbHVtZSB3aXRoIGV4YWN0IGNhbmRpZGF0ZSwgbm8gcnVudGltZSB0b2tlbnMvY29uZmlnL25ldHdvcmsiLAogICAgIlJlZnJlc2ggYSBjb25zaXN0ZW50IHByZS1jdXRvdmVyIHNuYXBzaG90LCByZXRhaW4gcHJpdmF0ZSBjb3BpZXMgYW5kIGNvdW50LW9ubHkvaGFzaCByZWNlaXB0cyIsCiAgICAiUGluIGV4aXN0aW5nIG1hbnVhbCBBcmdvIEFwcGxpY2F0aW9uIHRvIGV4YWN0IGFwcHJvdmVkIG93bmVyIHNvdXJjZSBhbmQgbWFudWFsbHkgc3luYyBvbmx5IGV4aXN0aW5nIERlcGxveW1lbnQgaW1hZ2UiLAogICAgIlZlcmlmeSBoZWFsdGgvcmVhZGluZXNzL2ltYWdlL21vZHVsZS9pbnN0YWxsZWQgZmFpbC1jbG9zZWQgcHVycG9zZSBjaGVja3MgYW5kIHJldGFpbmVkIHNjaGVtYS9jb3VudCBldmlkZW5jZTsgcmVjb3ZlciB0byBwcmlvciBzYW1lLXNjaGVtYSBpbWFnZSBpZiBuZWVkZWQiCiAgXSwKICAiZXhlY3V0ZV9ieSI6ICIyMDI2LTEwLTEyVDIzOjU5OjU5WiIsCiAgInRlbXBvcmFyeV92dWxuZXJhYmlsaXR5X3Jldmlld19kdWUiOiAiMjAyNi0xMC0xOCIsCiAgImtub3duX3NjYW5fZmluZGluZ3MiOiAiMEhJR0gvQ1JJVElDQUwsMWZpeGFibGUgaW5oZXJpdGVkTUVESVVNIHpsaWIsIGFjdHVhbCBjdXJyZW50YmFzZStjYW5kaWRhdGUgZmluZGluZ3MgaWRlbnRpY2FsIiwKICAidnVsbmVyYWJpbGl0eV9yZWNvcmQiOiAiSU5GRC1SSVNLLTIwMjYxMDExLVpMSUItODUwOTEgLyBJTkZELVdQLTAwMDktVDA1IiwKICAiY29zdF9lc3RpbWF0ZV9FVVIiOiAwLAogICJjb3N0X2xpbWl0cyI6ICJObyBuZXcgcmVjdXJyaW5nIGluZnJhc3RydWN0dXJlOyBwcml2YXRlIGJhY2t1cCBzdG9yYWdlIGFuZCBhdHRlbmRlZCBlbmdpbmVlcmluZy9yZWNvdmVyeSB0aW1lIHVucHJpY2VkLCBub3QgYW4gYXV0b3BpbG90IGNvc3QgZ3JhbnQiLAogICJyaXNrX2VzdGltYXRlcyI6IFsKICAgICJCcmllZiBSZWNyZWF0ZSBzZXJ2aWNlIGludGVycnVwdGlvbjsgbm8gY29uY3VycmVudCBuZXcgd3JpdGVyL3N1cmdlIiwKICAgICJQcml2YXRlIGV2aWRlbmNlIHNuYXBzaG90IGN1c3RvZHkgYW5kIGRpc3Bvc2FsIGVycm9yczsgbm8gc25hcHNob3RzL3Rva2VucyBpbiBwdWJsaWMgZXZpZGVuY2UiLAogICAgIkNhbmRpZGF0ZSBwdXJwb3NlIHJlZnVzYWwgbWF5IGV4cG9zZSBjYWxsZXJzIHJlbHlpbmcgb24gYWR2aXNvcnkgcmVzdWx0cyBhcyBiaW5kaW5nIiwKICAgICJJbmhlcml0ZWQga25vd24gZml4YWJsZSBNRURJVU0gcmVtYWlucyB1bnRpbCBzZXBhcmF0ZWx5IGFwcHJvdmVkIG93bmVyIHJlbWVkaWF0aW9uIiwKICAgICJFeGlzdGluZyBBcmdvIE91dE9mU3luYyBiYXNlbGluZSBpcyByZXRhaW5lZDsgbm8gd2hvbGUtYXBwIHN5bmMgb3IgdW5yZWxhdGVkIHJlcGFpcnMgcGVybWl0dGVkIgogIF0sCiAgInJvbGxiYWNrIjogIk1hbnVhbCBBcmdvIHNvdXJjZSBwaW4gYmFjayB0bzdkYjg0ODUgYW5kIHNjb3BlZCBEZXBsb3ltZW50LW9ubHkgc3luYyB0bzdmNWMgaW1hZ2U7IHJldGFpbiBjdXJyZW50IHNjaGVtYTUgZGF0YWJhc2UgYW5kIGFsbCBwb3N0LWN1dG92ZXIgZXZpZGVuY2UsIG5ldmVyIHJlc3RvcmUgb2xkZXIgc25hcHNob3Qgb3ZlciBsaXZlIHdyaXRlcyIsCiAgIm5hdGl2ZV9leGVjdXRlZCI6IGZhbHNlLAogICJodW1hbl9hcHByb3ZhbCI6IGZhbHNlLAogICJyZWZpbmVtZW50X29mX21hbmlmZXN0IjogIjdjNjczOGIzOWVhOGU1NGU2MWM4ZWQ2MjVlOTRhZDBiMjc1NWU2NzJlMTU3NmVmY2RmODRhMWQ2NjVhYzMzMDAiLAogICJtYW5kYXRvcnlfcHJlX29wZW5fZ2F0ZSI6ICJzdGRsaWJTUUxpdGUgbW9kZT1yby9xdWVyeV9vbmx5OiBzY2hlbWE1K2ludGVncml0eStjb3VudCBiYXNlbGluZSBiZWZvcmUgQU5ZIFN0b3JlL2FkbWluIG9uIG5hdGl2ZSBzb3VyY2Ugb3IgcmVzdG9yZWRjb3B5OyByZWZ1c2VvbGRzY2hlbWFzIHdpdGhvdXQgbWlncmF0aW9uIiwKICAib3B0aW1pemVkX2ludGVycHJldGVycyI6ICJsb2NhbCtyZW1vdGUgZXhwbGljaXRseXJlZnVzZWQgYmVmb3JlYXNzZXJ0IGdhdGVzIiwKICAibmF0aXZlX2RlcGVuZGVuY3lfZ2F0ZSI6ICJzZWFsZWQgYWN0dWFsQ00gVUlEL2ltbXV0YWJsZS9jYW5vbmljYWxkYXRhaGFzaCtQVkMgVUlEL2Z1bGxzcGVjL0JvdW5kL3ZvbHVtZU5hbWUsIG5vIHJhd0NNZGF0YSBvclNlY3JldCByZWFkcyIsCiAgImxpdmVfY291bnRzIjogIkZyb3plbiBzbmFwc2hvdC9jbG9uZSBleGFjdGNvdW50ZXIgZXF1YWxpdHk7IHBvc3RjdXRvdmVyL3JvbGxiYWNrIGxpdmVjb3VudGVyY2hhbmdlcyBtYXkgcmVmbGVjdCBsZWdpdGltYXRlIGNvbmN1cnJlbnRjb21taXRzL3N0YXRlIHRyYW5zaXRpb25zLCBsYXRlc3REQiBhbHdheXNyZXRhaW5lZCIKfQo=" + }, + { + "digest": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55", + "media_type": "application/json", + "content_base64": "ewogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJwb2xpY3kiOiB7CiAgICAib3JpZ2luIjogImh0dHA6Ly9mbGV4LWF1dGgtaW5mb3JtZWQtZGVjaXNpb24tc2l0dGluZy5mbGV4LWF1dGguc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MCIsCiAgICAicGFja2FnZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi5jb21wYWN0LXNpdHRpbmciLAogICAgInZlcnNpb24iOiAidjEzIiwKICAgICJwYWNrYWdlX2RpZ2VzdCI6ICJzaGEyNTY6MzFiZTU5ODVjMGMxZTZiMGMzYTAzOWVkNzMxMGQxZTk0ZGFmNTIzYTk0ZjZkOTI2ZTZlOGQ3NTlkMzcxMTg3MyIsCiAgICAicG9kX25hbWUiOiAiZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLXNpdHRpbmciCiAgfSwKICAia2V5Y2FwZV9lZ3Jlc3NfaXBzIjogWwogICAgIjkyLjIwNS42Mi4yMzkiCiAgXSwKICAic3RvcmFnZV9jbGFzcyI6ICJsb2NhbC1wYXRoIiwKICAib3JkaW5hcnlfYXBwcm92YWxfaWRzIjogWwogICAgIjJjZTc2ZDdmLTAxYzMtNGI2My04NDc2LThkMTIzMDY3OTc2OSIsCiAgICAiYzJhZjRiY2YtMTViNC00MzA1LWFhYzEtYWNjN2U0ZGNiMDk5IiwKICAgICJkYzIyNjY2YS1kNWQ3LTQ2YmMtOTQ5MC1lYmU5ZmUwOWRjMzgiCiAgXSwKICAibGlmZWN5Y2xlX3BvbGljeSI6IHsKICAgICJwYWNrYWdlIjogImluZm9ybWVkLWRlY2lzaW9uLmxpZmVjeWNsZSIsCiAgICAidmVyc2lvbiI6ICJ2MiIsCiAgICAicGFja2FnZV9kaWdlc3QiOiAic2hhMjU2OmRhMDFlMDQ1ZmMxMDhhZGVjNmI0ODllNWQ1MWY3ZTU3MzY2NzkzMDE2YzVhNjQ3NzY5NjM3ODBhNmFhZTQ1N2MiLAogICAgIm9yaWdpbiI6ICJodHRwOi8vZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLWxpZmVjeWNsZS5mbGV4LWF1dGguc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MCIsCiAgICAicG9kX25hbWUiOiAiZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLWxpZmVjeWNsZSIKICB9LAogICJsaWZlY3ljbGVfZGVsaXZlcnkiOiB0cnVlLAogICJpbnRha2VfYXR0cmlidXRlcyI6IHRydWUsCiAgImludGFrZV9kZWxpdmVyeSI6IHsKICAgICJodWJfb3JpZ2luIjogImh0dHA6Ly9zdGF0ZS1odWIuc3RhdGUtaHViLnN2Yy5jbHVzdGVyLmxvY2FsOjgwMDAiCiAgfSwKICAid29ya2xvYWRfYXBpIjogewogICAgInJlZ2lzdHJpZXNfY29uZmlnbWFwIjogImluZm9ybWVkLWRlY2lzaW9uLXdvcmtsb2FkLXJlZ2lzdHJ5IiwKICAgICJwZWVycyI6IFsKICAgICAgewogICAgICAgICJuYW1lc3BhY2UiOiAic3RhdGUtaHViIiwKICAgICAgICAiYXBwIjogInN0YXRlLWh1YiIKICAgICAgfQogICAgXSwKICAgICJhcGlfZWdyZXNzIjogWwogICAgICB7CiAgICAgICAgImlwIjogIjEwLjQzLjAuMSIsCiAgICAgICAgInBvcnQiOiA0NDMKICAgICAgfSwKICAgICAgewogICAgICAgICJpcCI6ICI5Mi4yMDUuNjIuMjM5IiwKICAgICAgICAicG9ydCI6IDY0NDMKICAgICAgfQogICAgXSwKICAgICJpbnRha2UiOiB0cnVlLAogICAgImxpZmVjeWNsZSI6IHRydWUKICB9Cn0K" + }, + { + "digest": "sha256:22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50", + "media_type": "application/json", + "content_base64": "ewogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMiLAogICJwb2xpY3kiOiB7CiAgICAib3JpZ2luIjogImh0dHA6Ly9mbGV4LWF1dGgtaW5mb3JtZWQtZGVjaXNpb24tc2l0dGluZy5mbGV4LWF1dGguc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MCIsCiAgICAicGFja2FnZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi5jb21wYWN0LXNpdHRpbmciLAogICAgInZlcnNpb24iOiAidjEzIiwKICAgICJwYWNrYWdlX2RpZ2VzdCI6ICJzaGEyNTY6MzFiZTU5ODVjMGMxZTZiMGMzYTAzOWVkNzMxMGQxZTk0ZGFmNTIzYTk0ZjZkOTI2ZTZlOGQ3NTlkMzcxMTg3MyIsCiAgICAicG9kX25hbWUiOiAiZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLXNpdHRpbmciCiAgfSwKICAia2V5Y2FwZV9lZ3Jlc3NfaXBzIjogWwogICAgIjkyLjIwNS42Mi4yMzkiCiAgXSwKICAic3RvcmFnZV9jbGFzcyI6ICJsb2NhbC1wYXRoIiwKICAib3JkaW5hcnlfYXBwcm92YWxfaWRzIjogWwogICAgIjJjZTc2ZDdmLTAxYzMtNGI2My04NDc2LThkMTIzMDY3OTc2OSIsCiAgICAiYzJhZjRiY2YtMTViNC00MzA1LWFhYzEtYWNjN2U0ZGNiMDk5IiwKICAgICJkYzIyNjY2YS1kNWQ3LTQ2YmMtOTQ5MC1lYmU5ZmUwOWRjMzgiCiAgXSwKICAibGlmZWN5Y2xlX3BvbGljeSI6IHsKICAgICJwYWNrYWdlIjogImluZm9ybWVkLWRlY2lzaW9uLmxpZmVjeWNsZSIsCiAgICAidmVyc2lvbiI6ICJ2MiIsCiAgICAicGFja2FnZV9kaWdlc3QiOiAic2hhMjU2OmRhMDFlMDQ1ZmMxMDhhZGVjNmI0ODllNWQ1MWY3ZTU3MzY2NzkzMDE2YzVhNjQ3NzY5NjM3ODBhNmFhZTQ1N2MiLAogICAgIm9yaWdpbiI6ICJodHRwOi8vZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLWxpZmVjeWNsZS5mbGV4LWF1dGguc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MCIsCiAgICAicG9kX25hbWUiOiAiZmxleC1hdXRoLWluZm9ybWVkLWRlY2lzaW9uLWxpZmVjeWNsZSIKICB9LAogICJsaWZlY3ljbGVfZGVsaXZlcnkiOiB0cnVlLAogICJpbnRha2VfYXR0cmlidXRlcyI6IHRydWUsCiAgImludGFrZV9kZWxpdmVyeSI6IHsKICAgICJodWJfb3JpZ2luIjogImh0dHA6Ly9zdGF0ZS1odWIuc3RhdGUtaHViLnN2Yy5jbHVzdGVyLmxvY2FsOjgwMDAiCiAgfSwKICAid29ya2xvYWRfYXBpIjogewogICAgInJlZ2lzdHJpZXNfY29uZmlnbWFwIjogImluZm9ybWVkLWRlY2lzaW9uLXdvcmtsb2FkLXJlZ2lzdHJ5IiwKICAgICJwZWVycyI6IFsKICAgICAgewogICAgICAgICJuYW1lc3BhY2UiOiAic3RhdGUtaHViIiwKICAgICAgICAiYXBwIjogInN0YXRlLWh1YiIKICAgICAgfQogICAgXSwKICAgICJhcGlfZWdyZXNzIjogWwogICAgICB7CiAgICAgICAgImlwIjogIjEwLjQzLjAuMSIsCiAgICAgICAgInBvcnQiOiA0NDMKICAgICAgfSwKICAgICAgewogICAgICAgICJpcCI6ICI5Mi4yMDUuNjIuMjM5IiwKICAgICAgICAicG9ydCI6IDY0NDMKICAgICAgfQogICAgXSwKICAgICJpbnRha2UiOiB0cnVlLAogICAgImxpZmVjeWNsZSI6IHRydWUKICB9Cn0K" + }, + { + "digest": "sha256:722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e", + "media_type": "application/json", + "content_base64": "ewogICJhcGlWZXJzaW9uIjogImFwcHMvdjEiLAogICJraW5kIjogIkRlcGxveW1lbnQiLAogICJtZXRhZGF0YSI6IHsKICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgImluZm9ybWVkLWRlY2lzaW9uLmNvdWxvbWIuc29jaWFsL2FkbWlzc2lvbiI6ICJhcHByb3ZlZDsgSU5GRC1XUC0wMDA3IGN1dG92ZXIiLAogICAgICAiYXJnb2NkLmFyZ29wcm9qLmlvL3RyYWNraW5nLWlkIjogImluZm9ybWVkLWRlY2lzaW9uOmFwcHMvRGVwbG95bWVudDppbmZvcm1lZC1kZWNpc2lvbi9pbmZvcm1lZC1kZWNpc2lvbiIKICAgIH0sCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIgogIH0sCiAgInNwZWMiOiB7CiAgICAicHJvZ3Jlc3NEZWFkbGluZVNlY29uZHMiOiA2MDAsCiAgICAicmVwbGljYXMiOiAxLAogICAgInNlbGVjdG9yIjogewogICAgICAibWF0Y2hMYWJlbHMiOiB7CiAgICAgICAgImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24iCiAgICAgIH0KICAgIH0sCiAgICAic3RyYXRlZ3kiOiB7CiAgICAgICJ0eXBlIjogIlJlY3JlYXRlIgogICAgfSwKICAgICJ0ZW1wbGF0ZSI6IHsKICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi5jb3Vsb21iLnNvY2lhbC9hZG1pc3Npb24iOiAiYXBwcm92ZWQ7IElORkQtV1AtMDAwNyBjdXRvdmVyIgogICAgICAgIH0sCiAgICAgICAgImxhYmVscyI6IHsKICAgICAgICAgICJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQiOiAicmV2aWV3IiwKICAgICAgICAgICJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjogImluZm9ybWVkLWRlY2lzaW9uIgogICAgICAgIH0KICAgICAgfSwKICAgICAgInNwZWMiOiB7CiAgICAgICAgImF1dG9tb3VudFNlcnZpY2VBY2NvdW50VG9rZW4iOiBmYWxzZSwKICAgICAgICAiY29udGFpbmVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImVudiI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJJTkZEX0tFWUNBUEVfSVNTVUVSIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJodHRwczovL2tjLmNvdWxvbWIuc29jaWFsIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiSU5GRF9DT05UQUlORVJfQ09ORklHIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIvY29uZmlndXJhdGlvbi9ydW50aW1lLmpzb24iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW1hZ2UiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIiwKICAgICAgICAgICAgImxpdmVuZXNzUHJvYmUiOiB7CiAgICAgICAgICAgICAgImh0dHBHZXQiOiB7CiAgICAgICAgICAgICAgICAicGF0aCI6ICIvaGVhbHRoeiIsCiAgICAgICAgICAgICAgICAicG9ydCI6ICJodHRwIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAidGltZW91dFNlY29uZHMiOiAyCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgInBvcnRzIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJjb250YWluZXJQb3J0IjogODA4MCwKICAgICAgICAgICAgICAgICJuYW1lIjogImh0dHAiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY29udGFpbmVyUG9ydCI6IDgwODEsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJyZWFkaW5lc3NQcm9iZSI6IHsKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAicGVyaW9kU2Vjb25kcyI6IDEwLAogICAgICAgICAgICAgICJ0aW1lb3V0U2Vjb25kcyI6IDIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlc291cmNlcyI6IHsKICAgICAgICAgICAgICAibGltaXRzIjogewogICAgICAgICAgICAgICAgImNwdSI6ICI1MDBtIiwKICAgICAgICAgICAgICAgICJtZW1vcnkiOiAiMjU2TWkiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAicmVxdWVzdHMiOiB7CiAgICAgICAgICAgICAgICAiY3B1IjogIjVtIiwKICAgICAgICAgICAgICAgICJtZW1vcnkiOiAiNjRNaSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzZWN1cml0eUNvbnRleHQiOiB7CiAgICAgICAgICAgICAgImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6IGZhbHNlLAogICAgICAgICAgICAgICJjYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICAgICAiZHJvcCI6IFsKICAgICAgICAgICAgICAgICAgIkFMTCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJyZWFkT25seVJvb3RGaWxlc3lzdGVtIjogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3RhcnR1cFByb2JlIjogewogICAgICAgICAgICAgICJmYWlsdXJlVGhyZXNob2xkIjogMTIsCiAgICAgICAgICAgICAgImh0dHBHZXQiOiB7CiAgICAgICAgICAgICAgICAicGF0aCI6ICIvaGVhbHRoeiIsCiAgICAgICAgICAgICAgICAicG9ydCI6ICJodHRwIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAidGltZW91dFNlY29uZHMiOiAyCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ2b2x1bWVNb3VudHMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvZGF0YSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJkYXRhIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvcnVuL2luZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInJ1bnRpbWUiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi90bXAiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAidG1wIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvY29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJjb25maWd1cmF0aW9uIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9wb2xpY3kiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiY2FsbGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9hdWRpdCIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24va3ViZXJuZXRlcyIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJrdWJlcm5ldGVzLWFwaSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi93b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24vcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInNpdHRpbmctcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzZWN1cml0eUNvbnRleHQiOiB7CiAgICAgICAgICAiZnNHcm91cCI6IDEwMDAxLAogICAgICAgICAgImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiAiT25Sb290TWlzbWF0Y2giLAogICAgICAgICAgInJ1bkFzR3JvdXAiOiAxMDAwMSwKICAgICAgICAgICJydW5Bc05vblJvb3QiOiB0cnVlLAogICAgICAgICAgInJ1bkFzVXNlciI6IDEwMDAxLAogICAgICAgICAgInNlY2NvbXBQcm9maWxlIjogewogICAgICAgICAgICAidHlwZSI6ICJSdW50aW1lRGVmYXVsdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJzZXJ2aWNlQWNjb3VudE5hbWUiOiAicmV2aWV3IiwKICAgICAgICAidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOiA0NSwKICAgICAgICAidm9sdW1lcyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZGF0YSIsCiAgICAgICAgICAgICJwZXJzaXN0ZW50Vm9sdW1lQ2xhaW0iOiB7CiAgICAgICAgICAgICAgImNsYWltTmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1kYXRhIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZW1wdHlEaXIiOiB7CiAgICAgICAgICAgICAgIm1lZGl1bSI6ICJNZW1vcnkiLAogICAgICAgICAgICAgICJzaXplTGltaXQiOiAiMTZNaSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAicnVudGltZSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJlbXB0eURpciI6IHsKICAgICAgICAgICAgICAibWVkaXVtIjogIk1lbW9yeSIsCiAgICAgICAgICAgICAgInNpemVMaW1pdCI6ICIxNk1pIgogICAgICAgICAgICB9LAogICAgICAgICAgICAibmFtZSI6ICJ0bXAiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY29uZmlnTWFwIjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI5MiwKICAgICAgICAgICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAiY29uZmlndXJhdGlvbiIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImNhbGxlciIsCiAgICAgICAgICAgICJwcm9qZWN0ZWQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJzb3VyY2VzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAic2VydmljZUFjY291bnRUb2tlbiI6IHsKICAgICAgICAgICAgICAgICAgICAiYXVkaWVuY2UiOiAiZmxleC1hdXRoIiwKICAgICAgICAgICAgICAgICAgICAiZXhwaXJhdGlvblNlY29uZHMiOiAzNjAwLAogICAgICAgICAgICAgICAgICAgICJwYXRoIjogInRva2VuIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICJzZWNyZXQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgImtleSI6ICJ0b2tlbiIsCiAgICAgICAgICAgICAgICAgICJwYXRoIjogInRva2VuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgInNlY3JldE5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tYXVkaXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImt1YmVybmV0ZXMtYXBpIiwKICAgICAgICAgICAgInByb2plY3RlZCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyODgsCiAgICAgICAgICAgICAgInNvdXJjZXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJzZXJ2aWNlQWNjb3VudFRva2VuIjogewogICAgICAgICAgICAgICAgICAgICJleHBpcmF0aW9uU2Vjb25kcyI6IDYwMCwKICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJ0b2tlbiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJrZXkiOiAiY2EuY3J0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiY2EuY3J0IgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAia3ViZS1yb290LWNhLmNydCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyOTIsCiAgICAgICAgICAgICAgIm5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24td29ya2xvYWQtcmVnaXN0cnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogIndvcmtsb2FkLXJlZ2lzdHJ5IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2l0dGluZy1yZXF1ZXN0ZXIiLAogICAgICAgICAgICAic2VjcmV0IjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI4OCwKICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJrZXkiOiAiY2xpZW50LXNlY3JldCIsCiAgICAgICAgICAgICAgICAgICJwYXRoIjogImNsaWVudC1zZWNyZXQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAib3B0aW9uYWwiOiBmYWxzZSwKICAgICAgICAgICAgICAic2VjcmV0TmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1zaXR0aW5nLXJlcXVlc3RlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgfQogIH0KfQo=" + }, + { + "digest": "sha256:39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121", + "media_type": "application/json", + "content_base64": "ewogICJhcGlWZXJzaW9uIjogImFwcHMvdjEiLAogICJraW5kIjogIkRlcGxveW1lbnQiLAogICJtZXRhZGF0YSI6IHsKICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgImluZm9ybWVkLWRlY2lzaW9uLmNvdWxvbWIuc29jaWFsL2FkbWlzc2lvbiI6ICJhcHByb3ZlZDsgSU5GRC1XUC0wMDA3IGN1dG92ZXIiLAogICAgICAiYXJnb2NkLmFyZ29wcm9qLmlvL3RyYWNraW5nLWlkIjogImluZm9ybWVkLWRlY2lzaW9uOmFwcHMvRGVwbG95bWVudDppbmZvcm1lZC1kZWNpc2lvbi9pbmZvcm1lZC1kZWNpc2lvbiIKICAgIH0sCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIgogIH0sCiAgInNwZWMiOiB7CiAgICAicHJvZ3Jlc3NEZWFkbGluZVNlY29uZHMiOiA2MDAsCiAgICAicmVwbGljYXMiOiAxLAogICAgInNlbGVjdG9yIjogewogICAgICAibWF0Y2hMYWJlbHMiOiB7CiAgICAgICAgImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24iCiAgICAgIH0KICAgIH0sCiAgICAic3RyYXRlZ3kiOiB7CiAgICAgICJ0eXBlIjogIlJlY3JlYXRlIgogICAgfSwKICAgICJ0ZW1wbGF0ZSI6IHsKICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi5jb3Vsb21iLnNvY2lhbC9hZG1pc3Npb24iOiAiYXBwcm92ZWQ7IElORkQtV1AtMDAwNyBjdXRvdmVyIgogICAgICAgIH0sCiAgICAgICAgImxhYmVscyI6IHsKICAgICAgICAgICJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQiOiAicmV2aWV3IiwKICAgICAgICAgICJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjogImluZm9ybWVkLWRlY2lzaW9uIgogICAgICAgIH0KICAgICAgfSwKICAgICAgInNwZWMiOiB7CiAgICAgICAgImF1dG9tb3VudFNlcnZpY2VBY2NvdW50VG9rZW4iOiBmYWxzZSwKICAgICAgICAiY29udGFpbmVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImVudiI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJJTkZEX0tFWUNBUEVfSVNTVUVSIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJodHRwczovL2tjLmNvdWxvbWIuc29jaWFsIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiSU5GRF9DT05UQUlORVJfQ09ORklHIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIvY29uZmlndXJhdGlvbi9ydW50aW1lLmpzb24iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW1hZ2UiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3ZjVjNmNiMjljOWY3MGEwMjZiZmUzMGU3MjkzNDI3NGRkYzY5MjYxNjc2Y2Y2ZDQ3NmY4MWRkMzI4MTJkMTczIiwKICAgICAgICAgICAgImxpdmVuZXNzUHJvYmUiOiB7CiAgICAgICAgICAgICAgImh0dHBHZXQiOiB7CiAgICAgICAgICAgICAgICAicGF0aCI6ICIvaGVhbHRoeiIsCiAgICAgICAgICAgICAgICAicG9ydCI6ICJodHRwIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAidGltZW91dFNlY29uZHMiOiAyCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgInBvcnRzIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJjb250YWluZXJQb3J0IjogODA4MCwKICAgICAgICAgICAgICAgICJuYW1lIjogImh0dHAiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY29udGFpbmVyUG9ydCI6IDgwODEsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJyZWFkaW5lc3NQcm9iZSI6IHsKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAicGVyaW9kU2Vjb25kcyI6IDEwLAogICAgICAgICAgICAgICJ0aW1lb3V0U2Vjb25kcyI6IDIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlc291cmNlcyI6IHsKICAgICAgICAgICAgICAibGltaXRzIjogewogICAgICAgICAgICAgICAgImNwdSI6ICI1MDBtIiwKICAgICAgICAgICAgICAgICJtZW1vcnkiOiAiMjU2TWkiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAicmVxdWVzdHMiOiB7CiAgICAgICAgICAgICAgICAiY3B1IjogIjVtIiwKICAgICAgICAgICAgICAgICJtZW1vcnkiOiAiNjRNaSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzZWN1cml0eUNvbnRleHQiOiB7CiAgICAgICAgICAgICAgImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6IGZhbHNlLAogICAgICAgICAgICAgICJjYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICAgICAiZHJvcCI6IFsKICAgICAgICAgICAgICAgICAgIkFMTCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJyZWFkT25seVJvb3RGaWxlc3lzdGVtIjogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3RhcnR1cFByb2JlIjogewogICAgICAgICAgICAgICJmYWlsdXJlVGhyZXNob2xkIjogMTIsCiAgICAgICAgICAgICAgImh0dHBHZXQiOiB7CiAgICAgICAgICAgICAgICAicGF0aCI6ICIvaGVhbHRoeiIsCiAgICAgICAgICAgICAgICAicG9ydCI6ICJodHRwIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAidGltZW91dFNlY29uZHMiOiAyCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ2b2x1bWVNb3VudHMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvZGF0YSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJkYXRhIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvcnVuL2luZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInJ1bnRpbWUiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi90bXAiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAidG1wIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvY29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJjb25maWd1cmF0aW9uIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9wb2xpY3kiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiY2FsbGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9hdWRpdCIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24va3ViZXJuZXRlcyIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJrdWJlcm5ldGVzLWFwaSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi93b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24vcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInNpdHRpbmctcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzZWN1cml0eUNvbnRleHQiOiB7CiAgICAgICAgICAiZnNHcm91cCI6IDEwMDAxLAogICAgICAgICAgImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiAiT25Sb290TWlzbWF0Y2giLAogICAgICAgICAgInJ1bkFzR3JvdXAiOiAxMDAwMSwKICAgICAgICAgICJydW5Bc05vblJvb3QiOiB0cnVlLAogICAgICAgICAgInJ1bkFzVXNlciI6IDEwMDAxLAogICAgICAgICAgInNlY2NvbXBQcm9maWxlIjogewogICAgICAgICAgICAidHlwZSI6ICJSdW50aW1lRGVmYXVsdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJzZXJ2aWNlQWNjb3VudE5hbWUiOiAicmV2aWV3IiwKICAgICAgICAidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOiA0NSwKICAgICAgICAidm9sdW1lcyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZGF0YSIsCiAgICAgICAgICAgICJwZXJzaXN0ZW50Vm9sdW1lQ2xhaW0iOiB7CiAgICAgICAgICAgICAgImNsYWltTmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1kYXRhIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZW1wdHlEaXIiOiB7CiAgICAgICAgICAgICAgIm1lZGl1bSI6ICJNZW1vcnkiLAogICAgICAgICAgICAgICJzaXplTGltaXQiOiAiMTZNaSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAicnVudGltZSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJlbXB0eURpciI6IHsKICAgICAgICAgICAgICAibWVkaXVtIjogIk1lbW9yeSIsCiAgICAgICAgICAgICAgInNpemVMaW1pdCI6ICIxNk1pIgogICAgICAgICAgICB9LAogICAgICAgICAgICAibmFtZSI6ICJ0bXAiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY29uZmlnTWFwIjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI5MiwKICAgICAgICAgICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAiY29uZmlndXJhdGlvbiIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImNhbGxlciIsCiAgICAgICAgICAgICJwcm9qZWN0ZWQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJzb3VyY2VzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAic2VydmljZUFjY291bnRUb2tlbiI6IHsKICAgICAgICAgICAgICAgICAgICAiYXVkaWVuY2UiOiAiZmxleC1hdXRoIiwKICAgICAgICAgICAgICAgICAgICAiZXhwaXJhdGlvblNlY29uZHMiOiAzNjAwLAogICAgICAgICAgICAgICAgICAgICJwYXRoIjogInRva2VuIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICJzZWNyZXQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgImtleSI6ICJ0b2tlbiIsCiAgICAgICAgICAgICAgICAgICJwYXRoIjogInRva2VuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgInNlY3JldE5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tYXVkaXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImt1YmVybmV0ZXMtYXBpIiwKICAgICAgICAgICAgInByb2plY3RlZCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyODgsCiAgICAgICAgICAgICAgInNvdXJjZXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJzZXJ2aWNlQWNjb3VudFRva2VuIjogewogICAgICAgICAgICAgICAgICAgICJleHBpcmF0aW9uU2Vjb25kcyI6IDYwMCwKICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJ0b2tlbiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJrZXkiOiAiY2EuY3J0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiY2EuY3J0IgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAia3ViZS1yb290LWNhLmNydCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyOTIsCiAgICAgICAgICAgICAgIm5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24td29ya2xvYWQtcmVnaXN0cnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogIndvcmtsb2FkLXJlZ2lzdHJ5IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2l0dGluZy1yZXF1ZXN0ZXIiLAogICAgICAgICAgICAic2VjcmV0IjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI4OCwKICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJrZXkiOiAiY2xpZW50LXNlY3JldCIsCiAgICAgICAgICAgICAgICAgICJwYXRoIjogImNsaWVudC1zZWNyZXQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAib3B0aW9uYWwiOiBmYWxzZSwKICAgICAgICAgICAgICAic2VjcmV0TmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1zaXR0aW5nLXJlcXVlc3RlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgfQogIH0KfQo=" + }, + { + "digest": "sha256:8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2", + "media_type": "application/json", + "content_base64": "ewogICJwcm9wb3NhbCI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIsCiAgIm9ic2VydmVkX2F0IjogIjIwMjYtMTAtMTFUMDE6MjQ6MDEuOTg1MTI4KzAwOjAwIiwKICAibmF0aXZlX293bmVyX3B1YmxpY2F0aW9uX2pvYiI6IHsKICAgICJpZCI6IDExNDg0LAogICAgIm5hbWUiOiAicHVibGlzaC1jYW5kaWRhdGUiLAogICAgImhlYWRfYnJhbmNoIjogIm1haW4iLAogICAgImhlYWRfc2hhIjogIjNlNGJjYjI2ZjhlZWFhOGM2NDM0NWM1NjU0NzdiNWFjOGNjYmIxNjgiLAogICAgInJ1bl9udW1iZXIiOiAzLAogICAgImV2ZW50IjogInB1c2giLAogICAgImRpc3BsYXlfdGl0bGUiOiAiUHJlcGFyZSByZWFkYWJsZSBvdmVybGF5IGNvbnRleHQgd2l0aCB0aGUgYWRtaXR0ZWQgbGVnYWN5IGJ1aWxkZXIiLAogICAgInN0YXR1cyI6ICJzdWNjZXNzIiwKICAgICJ3b3JrZmxvd19pZCI6ICJwdXJwb3NlLW92ZXJsYXktaW1hZ2UueWFtbCIsCiAgICAidXJsIjogImh0dHBzOi8vZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uL2FjdGlvbnMvcnVucy8zIiwKICAgICJjcmVhdGVkX2F0IjogIjIwMjYtMTAtMTFUMDE6MjA6NTlaIiwKICAgICJ1cGRhdGVkX2F0IjogIjIwMjYtMTAtMTFUMDE6MjE6MDhaIiwKICAgICJydW5fc3RhcnRlZF9hdCI6ICIyMDI2LTEwLTExVDAxOjIwOjU5WiIKICB9LAogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJzb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInBvbGljeV9zaGEyNTYiOiAiOWQ3YzFiZTRjYjYxOTlkMTRlZjBhYWVhZDVmODU5NTFmNDViMGNjYmQ3YzgwMGE3ZmRlOTIyYTI1MzU2NmI2MiIsCiAgInJlZ2lzdHJ5X3Byb29mX3NoYTI1NiI6ICI1YWEyYzFmNzgwYzQ3ZjYyZmE5YjU5ZGE5NTQzZDgyYzA3YWZhMDJiMWQ5NDZlNjE0NGI4YTA0MmVmODZmMjEzIiwKICAic291cmNlX3JlbmRlcl9jaGFuZ2Vfb25seSI6ICJEZXBsb3ltZW50L2luZm9ybWVkLWRlY2lzaW9uIHNwZWMudGVtcGxhdGUuc3BlYy5jb250YWluZXJzWzBdLmltYWdlIiwKICAicnVudGltZV9jb25maWdtYXBfdW5jaGFuZ2VkIjogImluZm9ybWVkLWRlY2lzaW9uLXJ1bnRpbWUtNmMyMjE4NzhkMDUxIiwKICAiaW5zdGFsbGVkX2ltYWdlX2V4ZWN1dGlvbiI6IHsKICAgICJpbW11dGFibGVfcmVnaXN0cnlfYXJ0aWZhY3RfcHVsbGVkX2Fub255bW91c2x5IjogdHJ1ZSwKICAgICJVSUQiOiAxMDAwMSwKICAgICJHSUQiOiAxMDAwMSwKICAgICJwb2xpY3lfZmlsZV9VSUQiOiAwLAogICAgInBvbGljeV9maWxlX21vZGUiOiAiMDY0NCIsCiAgICAicHVycG9zZV92YXJpYW50cyI6IDEwLAogICAgImJpbmRpbmdfZm9ybXNfYWxsb3dlZCI6IDIsCiAgICAiYWR2aXNvcnlfb3JfbWFsZm9ybWVkX3JlZnVzZWQiOiA4LAogICAgIm5ldHdvcmsiOiAibm9uZSIsCiAgICAicmVhZF9vbmx5IjogdHJ1ZSwKICAgICJzeW50aGV0aWNfdHJhbnNwb3J0IjogdHJ1ZSwKICAgICJuYXRpdmVfUERQX3Rlc3QiOiBmYWxzZQogIH0sCiAgInNjYW5fc3VtbWFyeV9zaGEyNTYiOiAiMGVlNTY0MDBkYzcwM2Y3Yzk5NjhjMmEwYTNlYTAzOTBkODM2MmY4ZDBiYmY4MDAyYTJiZDdmYTU4ZjE5Y2I0NCIsCiAgImhpc3RvcmljYWxfZmFpbGVkX3J1bnNfcmV0YWluZWQiOiBbCiAgICAiZjY2ZGU1MDUvdGFzazExNDgyL3J1bjEiLAogICAgImFjZWNhZDg4Ny90YXNrMTE0ODMvcnVuMiIKICBdLAogICJuYXRpdmVfaG9zdGluZ19jaGFuZ2VkIjogZmFsc2UsCiAgIm5hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZCI6IGZhbHNlLAogICJodW1hbl9hcHByb3ZhbCI6IGZhbHNlLAogICJldmlkZW5jZV9maWxlX3NoYTI1NiI6IHsKICAgICJpbWFnZS1tYW5pZmVzdC5qc29uIjogIjk3OGM1NzVkM2M3YmYwZGUzOWRiZTRlOTU2N2MzOWNkMzZmNzBiN2U1NWJjMTczNTdiZGIwM2ZiM2I5NmIwZmIiLAogICAgImltYWdlLWNvbmZpZy5qc29uIjogIjRhZDcyNDljNzVmZDlmYzAzOWNlYjE4Njc3MjQxOWUxY2JhNWZkOTc1OWM0MDQ1NTY0NTljODBhMmQyODVkMTAiLAogICAgImJhc2UtaW1hZ2UtY29uZmlnLmpzb24iOiAiYjcwNmM5MjA5ZTMyNGYzOWE4NmZmY2RhMmEzZTlkOTRjOTI2NDk3MzlhZDViMjFmZTQ2MTEwMDZlMzZmNmYwMCIsCiAgICAicmVnaXN0cnktcHJvb2YuanNvbiI6ICI1YWEyYzFmNzgwYzQ3ZjYyZmE5YjU5ZGE5NTQzZDgyYzA3YWZhMDJiMWQ5NDZlNjE0NGI4YTA0MmVmODZmMjEzIiwKICAgICJ0cml2eS1mdWxsLmpzb24iOiAiZjM4YThmN2U2YzQxOWVlZDkxNTRkNzc2MmY5MzJiOWRlYjY2ODBhNjIyMjQ3YjA4MTk2Yjc0NThiODkzNDM0ZSIsCiAgICAic2JvbS5jZHguanNvbiI6ICJhNDI1Mjk1MWUyMDI3NDcyYzI2ZDg2NzljYjU0M2UzMDk4MzE4MDgwOWQ2ZGQzYzdjOTRiODgzZDYyODAzZTVkIiwKICAgICJiYXNlLXRyaXZ5LWZ1bGwuanNvbiI6ICJkNDRjNTU1YWVjYmIxYTQ1MThmNDEyN2Q0ODAxNWVhNDU5MzI1YzkzZThiMDM3MTkxMGE1NWRlNDcyOTNjYTgwIiwKICAgICJjaGVja19pbnN0YWxsZWQucHkiOiAiYTM0YTUxYmU5YzlmMmIxNmEwNmE4ODE3M2I1YzZjNDkyYzk5NTdmZTAyMWNmNDEyYTg2YTE3Mzc3MzA2NDBhZCIsCiAgICAidmVyaWZ5X3JlZ2lzdHJ5LnB5IjogIjQxM2Y1NzVjMjFhMmJkMThhMzY5NmY4ZjJkOTM5ZWVhZGM1MmQ3NmYyODJjNDI4MTNmNzZiYjBlM2VlOGEyYTQiLAogICAgInNxbGl0ZV9yZWFkb25seS5weSI6ICJlZWY1M2RkMjMzZWVlNzRjMTdmMjA4MjNiZDdmNTc4N2M2MGNhZDc5YWM2NDgwMjFjOTQ3OTY0M2M2Y2U5ZTM4IiwKICAgICJzZWFsZWQtbmF0aXZlLWRlcGVuZGVuY2llcy5qc29uIjogIjA0MjMyN2EwMzZlZDI1NGNmOTVkYmViMGMwNTZhYzI1YjAzYTZhODQ0Yjk1YTMzMmM5OTJkZjI5NDM2OTEzNjkiLAogICAgInJldmlldy1yZWZpbmVtZW50Lmpzb24iOiAiZWE2Mjg0NWNlZTVlZTZmNGY2Y2I3ZjVkY2QwYWY2MDFiYTI5YTIxYzhmZjgwZWZiYmMwMmFkMTZlMzViZWE3NSIsCiAgICAidGVzdF9jaGFuZ2VfZ3VhcmQucHkiOiAiZGE1MzUwNDM3MzU3YmEzMjkyMzZjYzEzNzYxMGMwMzg1NmYzOGY4MzZkZGYyODU2MDI1YmMxMjAxMWZhZDA3ZiIsCiAgICAidGVzdF9zcWxpdGVfcmVhZG9ubHkucHkiOiAiYzdhOTFkMGM2YTM3M2Q3MzhjODhiYjgxN2Q5YmZiMmZmOGExNzliYzYxYjkzMDYzYjg5Njc3YjU2NjUyMDMyMyIsCiAgICAidGVzdF9wcmVmbGlnaHRfb3B0aW1pemF0aW9uLnB5IjogImEwYzRmYTE4YzVkNmMyMTQ3NmEwNmM2ZDA1ZmU3NjU2MjU5ZDIwNDI5OTEzODg1MTU5OWU5MjE0ZDkxMTIwNmQiCiAgfQp9Cg==" + }, + { + "digest": "sha256:5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213", + "media_type": "application/json", + "content_base64": "ewogICJpbWFnZV9kaWdlc3QiOiAic2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJzb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgImJhc2VfaW1hZ2VfZGlnZXN0IjogInNoYTI1Njo3ZjVjNmNiMjljOWY3MGEwMjZiZmUzMGU3MjkzNDI3NGRkYzY5MjYxNjc2Y2Y2ZDQ3NmY4MWRkMzI4MTJkMTczIiwKICAiYmFzZV9sYXllcl9ieXRlc19pZGVudGljYWwiOiB0cnVlLAogICJsYXllcl9tZWRpYV90eXBlX2NvbnZlcnNpb24iOiAiT0NJIGd6aXAgdG8gRG9ja2VyIGd6aXAsIHNhbWUgZGlnZXN0IGFuZCBzaXplIiwKICAiYmFzZV9ydW50aW1lX2NvbmZpZ19zZW1hbnRpY3NfaWRlbnRpY2FsIjogdHJ1ZSwKICAibGVnYWN5X2J1aWxkZXJfY29uZmlnX2FkZGl0aW9ucyI6IHsKICAgICJIb3N0bmFtZSI6ICIiLAogICAgIkRvbWFpbm5hbWUiOiAiIiwKICAgICJBdHRhY2hTdGRpbiI6IGZhbHNlLAogICAgIkF0dGFjaFN0ZG91dCI6IGZhbHNlLAogICAgIkF0dGFjaFN0ZGVyciI6IGZhbHNlLAogICAgIlR0eSI6IGZhbHNlLAogICAgIk9wZW5TdGRpbiI6IGZhbHNlLAogICAgIlN0ZGluT25jZSI6IGZhbHNlLAogICAgIkNtZCI6IG51bGwsCiAgICAiVm9sdW1lcyI6IG51bGwsCiAgICAiT25CdWlsZCI6IG51bGwsCiAgICAiSW1hZ2UiOiAic2hhMjU2OjkwZjE1NzRmOWVkYTM1ZmE2Y2I5NzI5NjFiZWIyN2E3Y2I5MDRjMzY1NjBlMzgxOTMwYjBlMTQwNjVjMjM4ODMiCiAgfSwKICAiYmFzZV9yb290ZnNfcHJlZml4X2lkZW50aWNhbCI6IHRydWUsCiAgIm92ZXJsYXlfcmVndWxhcl9maWxlcyI6IFsKICAgICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL2luZm9ybWVkX2RlY2lzaW9uL3BvbGljeS5weSIKICBdLAogICJvdmVybGF5X2RpcmVjdG9yaWVzIjogWwogICAgIm9wdCIsCiAgICAib3B0L3ZlbnYiLAogICAgIm9wdC92ZW52L2xpYiIsCiAgICAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIiLAogICAgIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMiLAogICAgIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvaW5mb3JtZWRfZGVjaXNpb24iCiAgXSwKICAicG9saWN5X3NoYTI1NiI6ICI5ZDdjMWJlNGNiNjE5OWQxNGVmMGFhZWFkNWY4NTk1MWY0NWIwY2NiZDdjODAwYTdmZGU5MjJhMjUzNTY2YjYyIiwKICAicG9saWN5X21vZGUiOiAiMDY0NCIsCiAgImJhc2VfdXNlciI6ICIxMDAwMToxMDAwMSIsCiAgInNvdXJjZV9zY29wZV9sYWJlbHMiOiB7CiAgICAib3JnLm9wZW5jb250YWluZXJzLmltYWdlLnJldmlzaW9uIjogIjNlNGJjYjI2ZjhlZWFhOGM2NDM0NWM1NjU0NzdiNWFjOGNjYmIxNjgiLAogICAgIm9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5iYXNlLmRpZ2VzdCI6ICJzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MyIsCiAgICAic29jaWFsLmNvdWxvbWIuc291cmNlLnBvbGljeS5zaGEyNTYiOiAiOWQ3YzFiZTRjYjYxOTlkMTRlZjBhYWVhZDVmODU5NTFmNDViMGNjYmQ3YzgwMGE3ZmRlOTIyYTI1MzU2NmI2MiIsCiAgICAic29jaWFsLmNvdWxvbWIucmVsZWFzZS5zY29wZSI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIKICB9LAogICJyZWdpc3RyeV9yZWFkX3JvdXRlIjogImFub255bW91cyBwdWJsaWMgc2NvcGVkIGJlYXJlciBjaGFsbGVuZ2UsIG5vIHRva2VuIHJldGVudGlvbiIsCiAgImltYWdlX2V4ZWN1dGVkIjogZmFsc2UsCiAgIm5hdGl2ZV93b3JrbG9hZF9jaGFuZ2VkIjogZmFsc2UsCiAgIm5hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZCI6IGZhbHNlCn0K" + }, + { + "digest": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44", + "media_type": "application/json", + "content_base64": "ewogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJzb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInNjYW5uZXIiOiAiYXF1YXNlYy90cml2eUBzaGEyNTY6NjJiMWU2NWU4ODY5YmM0YjRjNmFhNGZhMmIyMTU5NTI1NmM3YzJmNjAxOGE5ZDlhZDYxY2FmODcxODdjMTk2OSIsCiAgInZlcnNpb24iOiAiMC43NC4wIiwKICAiZGJfbWV0YWRhdGEiOiB7CiAgICAiVmVyc2lvbiI6IDIsCiAgICAiTmV4dFVwZGF0ZSI6ICIyMDI2LTEwLTExVDE4OjU5OjUwLjg4OTAxMDU3MloiLAogICAgIlVwZGF0ZWRBdCI6ICIyMDI2LTEwLTEwVDE4OjU5OjUwLjg4OTAxMDkyM1oiLAogICAgIkRvd25sb2FkZWRBdCI6ICIyMDI2LTEwLTEwVDIzOjMyOjMyLjM4MDAzMzEzMVoiCiAgfSwKICAic3VwcHJlc3Npb24iOiBmYWxzZSwKICAiaWdub3JlX3VuZml4ZWQiOiBmYWxzZSwKICAic2V2ZXJpdHlfZmlsdGVyIjogbnVsbCwKICAicGFja2FnZV9jb3VudCI6IDQ0LAogICJmaW5kaW5nc19ieV9zZXZlcml0eSI6IHsKICAgICJNRURJVU0iOiAxCiAgfSwKICAiZmluZGluZ3MiOiBbCiAgICB7CiAgICAgICJpZCI6ICJDVkUtMjAyNi04NTA5MSIsCiAgICAgICJwYWNrYWdlIjogInpsaWIiLAogICAgICAiaW5zdGFsbGVkIjogIjEuMy4yLXIwIiwKICAgICAgImZpeGVkIjogIjEuMy4yLXIxIiwKICAgICAgInNldmVyaXR5IjogIk1FRElVTSIKICAgIH0KICBdLAogICJjb3ZlcmFnZV9saW1pdHMiOiBbCiAgICAiQWxwaW5lMy4yNCBhYnNlbnQgc2Nhbm5lciBFT0wgbGlzdDsgT1MgZGV0ZWN0b3IgcmFuIGFnYWluc3QgQWxwaW5lMy4yNCByZXBvc2l0b3J5IG9uMzhPUyBwYWNrYWdlcyIsCiAgICAiS25vd24gZmluZGluZ3MgYXNvZiBwaW5uZWREQiwgbm90IGNsYWltIGFic2VuY2Ugb2YgdW5rbm93biB2dWxuZXJhYmlsaXRpZXMiCiAgXSwKICAiaGlnaF9jcml0aWNhbCI6IDAsCiAgInNhbWVfc2Nhbm5lcl9hY3R1YWxfYmFzZV9zY2FuX2ZpbmRpbmdzX2lkZW50aWNhbCI6IHRydWUsCiAgImJhc2Vfc2Nhbl9maWxlIjogImJhc2UtdHJpdnktZnVsbC5qc29uIgp9Cg==" + }, + { + "digest": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e", + "media_type": "application/json", + "content_base64": "ewogICJTY2hlbWFWZXJzaW9uIjogMiwKICAiVHJpdnkiOiB7CiAgICAiVmVyc2lvbiI6ICIwLjc0LjAiCiAgfSwKICAiUmVwb3J0SUQiOiAiMDFhMTI4OGQtOGRmMS03M2ZiLTkzMTMtMzY0MmRkNjRiYTcyIiwKICAiQ3JlYXRlZEF0IjogIjIwMjYtMTAtMTFUMDE6MjI6MDcuOTg1MjY0NDA0WiIsCiAgIkFydGlmYWN0SUQiOiAic2hhMjU2OjQwZjg3M2I4ZDYzNDUzNDFlMmY2NjFhNTAzOGMwOTJkMTg2ZTI4MzFkYzYwYjYxNzA0YTQxOWExZjRmNzdlZjYiLAogICJBcnRpZmFjdE5hbWUiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIiwKICAiQXJ0aWZhY3RUeXBlIjogImNvbnRhaW5lcl9pbWFnZSIsCiAgIk1ldGFkYXRhIjogewogICAgIlNpemUiOiA4ODI1ODA0OCwKICAgICJPUyI6IHsKICAgICAgIkZhbWlseSI6ICJhbHBpbmUiLAogICAgICAiTmFtZSI6ICIzLjI0LjEiCiAgICB9LAogICAgIkltYWdlSUQiOiAic2hhMjU2OmYzNGRlMjEzNzljNGY1MGVhMDM2MWNhMWQ4Mjk2YzhlNzJmOTg5NDk5YWQyODgwMTZiODEyMDQ5OTdhZTQ3NzkiLAogICAgIkRpZmZJRHMiOiBbCiAgICAgICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIsCiAgICAgICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIsCiAgICAgICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIsCiAgICAgICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIsCiAgICAgICJzaGEyNTY6ZjliNGE4YTQxMmEwYzA3YTQ4OWU0NmZiNWRiNDFmOWQwZGM4NGQ0ZWMzOGE0ZTJjNmFiOTUzMWY0NGUwZDlmMSIsCiAgICAgICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIsCiAgICAgICJzaGEyNTY6MzYxNDMwYTExMTM5Njk3NDNiOTllMjM3YjIwZjAyM2Q1NDk3NDkzYmNmOTZmYjkxYWY5OWFjMGEwZGJjNGE1OSIsCiAgICAgICJzaGEyNTY6Y2ZjNTkzOTY3NGQ2N2Y2MGI0NDExYzI0ZGZjZGU1NjIyYjcxMmVlYjczNzZjZDA5NDFhMjc1MWRhODBhNmIwMiIsCiAgICAgICJzaGEyNTY6MjFmZjkxODhjYjI5Y2E5NWZlOWJlMTEzNTVmNzBhYjU1ODZlODQ5OWUzM2I1MmEyNTNkOTUzZmIzYjc1YWVhMyIKICAgIF0sCiAgICAiUmVwb0RpZ2VzdHMiOiBbCiAgICAgICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiCiAgICBdLAogICAgIlJlZmVyZW5jZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICAgIkltYWdlQ29uZmlnIjogewogICAgICAiYXJjaGl0ZWN0dXJlIjogImFtZDY0IiwKICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0xMVQwMToyMTowNC43ODc1Mjc2OTdaIiwKICAgICAgImRvY2tlcl92ZXJzaW9uIjogIjI3LjUuMSIsCiAgICAgICJoaXN0b3J5IjogWwogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDYtMTZUMDA6MDE6MjkuOTY3MTYxOTAyWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJBREQgYWxwaW5lLW1pbmlyb290ZnMtMy4yNC4xLXg4Nl82NC50YXIuZ3ogLyAjIGJ1aWxka2l0IiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA2LTE2VDAwOjAxOjI5Ljk2NzE2MTkwMloiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiQ01EIFtcIi9iaW4vc2hcIl0iLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBBVEg9L3Vzci9sb2NhbC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0wMVQwMDowNToyNC4yMjQ1NDQ4NDNaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBMQU5HPUMuVVRGLTgiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgc2V0IC1ldXg7IFx0YXBrIGFkZCAtLW5vLWNhY2hlIFx0XHRjYS1jZXJ0aWZpY2F0ZXMgXHRcdHR6ZGF0YSBcdDsgIyBidWlsZGtpdCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0wMVQwMDowNToyNC4yMjQ1NDQ4NDNaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBHUEdfS0VZPTcxNjk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBZVEhPTl9WRVJTSU9OPTMuMTIuMTQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBZVEhPTl9TSEEyNTY9NWM4NDYyYWY1NzkwYmFmNDNhMzIxYTE1NTlkYmUwZGIwNmQxYmU0MzAwZmI4NWZiNTNjNDAwNjA2NjhlNTQ4YSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMDFUMDA6MTA6MzAuNjcyMjI1OTcyWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJSVU4gL2Jpbi9zaCAtYyBzZXQgLWV1eDsgXHRcdGFwayBhZGQgLS1uby1jYWNoZSAtLXZpcnR1YWwgLmJ1aWxkLWRlcHMgXHRcdGJsdWV6LWRldiBcdFx0YnppcDItZGV2IFx0XHRkcGtnLWRldiBkcGtnIFx0XHRmaW5kdXRpbHMgXHRcdGcrKyBcdFx0Z2NjIFx0XHRnZGJtLWRldiBcdFx0Z251cGcgXHRcdGxpYmMtZGV2IFx0XHRsaWJmZmktZGV2IFx0XHRsaWJuc2wtZGV2IFx0XHRsaWJ0aXJwYy1kZXYgXHRcdGxpbnV4LWhlYWRlcnMgXHRcdG1ha2UgXHRcdG5jdXJzZXMtZGV2IFx0XHRvcGVuc3NsLWRldiBcdFx0cGF4LXV0aWxzIFx0XHRyZWFkbGluZS1kZXYgXHRcdHNxbGl0ZS1kZXYgXHRcdHRhciBcdFx0dGNsLWRldiBcdFx0dGsgXHRcdHRrLWRldiBcdFx0dXRpbC1saW51eC1kZXYgXHRcdHh6IFx0XHR4ei1kZXYgXHRcdHpsaWItZGV2IFx0OyBcdFx0d2dldCAtTyBweXRob24udGFyLnh6IFwiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFlUSE9OX1ZFUlNJT04lJVthLXpdKn0vUHl0aG9uLSRQWVRIT05fVkVSU0lPTi50YXIueHpcIjsgXHRlY2hvIFwiJFBZVEhPTl9TSEEyNTYgKnB5dGhvbi50YXIueHpcIiB8IHNoYTI1NnN1bSAtYyAtOyBcdHdnZXQgLU8gcHl0aG9uLnRhci54ei5hc2MgXCJodHRwczovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQWVRIT05fVkVSU0lPTiUlW2Etel0qfS9QeXRob24tJFBZVEhPTl9WRVJTSU9OLnRhci54ei5hc2NcIjsgXHRHTlVQR0hPTUU9XCIkKG1rdGVtcCAtZClcIjsgZXhwb3J0IEdOVVBHSE9NRTsgXHRncGcgLS1iYXRjaCAtLWtleXNlcnZlciBoa3BzOi8va2V5cy5vcGVucGdwLm9yZyAtLXJlY3Yta2V5cyBcIiRHUEdfS0VZXCI7IFx0Z3BnIC0tYmF0Y2ggLS12ZXJpZnkgcHl0aG9uLnRhci54ei5hc2MgcHl0aG9uLnRhci54ejsgXHRncGdjb25mIC0ta2lsbCBhbGw7IFx0cm0gLXJmIFwiJEdOVVBHSE9NRVwiIHB5dGhvbi50YXIueHouYXNjOyBcdG1rZGlyIC1wIC91c3Ivc3JjL3B5dGhvbjsgXHR0YXIgLS1leHRyYWN0IC0tZGlyZWN0b3J5IC91c3Ivc3JjL3B5dGhvbiAtLXN0cmlwLWNvbXBvbmVudHM9MSAtLWZpbGUgcHl0aG9uLnRhci54ejsgXHRybSBweXRob24udGFyLnh6OyBcdFx0Y2QgL3Vzci9zcmMvcHl0aG9uOyBcdGdudUFyY2g9XCIkKGRwa2ctYXJjaGl0ZWN0dXJlIC0tcXVlcnkgREVCX0JVSUxEX0dOVV9UWVBFKVwiOyBcdC4vY29uZmlndXJlIFx0XHQtLWJ1aWxkPVwiJGdudUFyY2hcIiBcdFx0LS1lbmFibGUtbG9hZGFibGUtc3FsaXRlLWV4dGVuc2lvbnMgXHRcdC0tZW5hYmxlLW9wdGlvbi1jaGVja2luZz1mYXRhbCBcdFx0LS1lbmFibGUtc2hhcmVkIFx0XHQkKHRlc3QgXCIke2dudUFyY2glJS0qfVwiICE9ICdyaXNjdjY0JyBcdTAwMjZcdTAwMjYgZWNobyAnLS13aXRoLWx0bycpIFx0XHQtLXdpdGgtZW5zdXJlcGlwIFx0OyBcdG5wcm9jPVwiJChucHJvYylcIjsgXHRFWFRSQV9DRkxBR1M9XCItRFRIUkVBRF9TVEFDS19TSVpFPTB4MTAwMDAwXCI7IFx0TERGTEFHUz1cIiR7TERGTEFHUzotfSAtV2wsLS1zdHJpcC1hbGxcIjsgXHRhcmNoPVwiJChhcGsgLS1wcmludC1hcmNoKVwiOyBcdGNhc2UgXCIkYXJjaFwiIGluIFx0XHR4ODZfNjR8YWFyY2g2NCkgXHRcdFx0RVhUUkFfQ0ZMQUdTPVwiJHtFWFRSQV9DRkxBR1M6LX0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLW1uby1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlclwiOyBcdFx0XHQ7OyBcdFx0eDg2KSBcdFx0XHQ7OyBcdFx0KikgXHRcdFx0RVhUUkFfQ0ZMQUdTPVwiJHtFWFRSQV9DRkxBR1M6LX0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXJcIjsgXHRcdFx0OzsgXHRlc2FjOyBcdG1ha2UgLWogXCIkbnByb2NcIiBcdFx0XCJFWFRSQV9DRkxBR1M9JHtFWFRSQV9DRkxBR1M6LX1cIiBcdFx0XCJMREZMQUdTPSR7TERGTEFHUzotfVwiIFx0OyBcdHJtIHB5dGhvbjsgXHRtYWtlIC1qIFwiJG5wcm9jXCIgXHRcdFwiRVhUUkFfQ0ZMQUdTPSR7RVhUUkFfQ0ZMQUdTOi19XCIgXHRcdFwiTERGTEFHUz0ke0xERkxBR1M6LX0gLVdsLC1ycGF0aD0nXFwkXFwkT1JJR0lOLy4uL2xpYidcIiBcdFx0cHl0aG9uIFx0OyBcdG1ha2UgaW5zdGFsbDsgXHRcdGNkIC87IFx0cm0gLXJmIC91c3Ivc3JjL3B5dGhvbjsgXHRcdGZpbmQgL3Vzci9sb2NhbCAtZGVwdGggXHRcdFxcKCBcdFx0XHRcXCggLXR5cGUgZCAtYSBcXCggLW5hbWUgdGVzdCAtbyAtbmFtZSB0ZXN0cyAtbyAtbmFtZSBpZGxlX3Rlc3QgXFwpIFxcKSBcdFx0XHQtbyBcXCggLXR5cGUgZiAtYSBcXCggLW5hbWUgJyoucHljJyAtbyAtbmFtZSAnKi5weW8nIC1vIC1uYW1lICdsaWJweXRob24qLmEnIFxcKSBcXCkgXHRcdFxcKSAtZXhlYyBybSAtcmYgJ3t9JyArIFx0OyBcdFx0ZmluZCAvdXNyL2xvY2FsIC10eXBlIGYgLWV4ZWN1dGFibGUgLW5vdCBcXCggLW5hbWUgJyp0a2ludGVyKicgXFwpIC1leGVjIHNjYW5lbGYgLS1uZWVkZWQgLS1ub2Jhbm5lciAtLWZvcm1hdCAnJW4jcCcgJ3t9JyAnOycgXHRcdHwgdHIgJywnICdcXG4nIFx0XHR8IHNvcnQgLXUgXHRcdHwgYXdrICdzeXN0ZW0oXCJbIC1lIC91c3IvbG9jYWwvbGliL1wiICQxIFwiIF1cIikgPT0gMCB7IG5leHQgfSB7IHByaW50IFwic286XCIgJDEgfScgXHRcdHwgeGFyZ3MgLXJ0IGFwayBhZGQgLS1uby1uZXR3b3JrIC0tdmlydHVhbCAucHl0aG9uLXJ1bmRlcHMgXHQ7IFx0YXBrIGRlbCAtLW5vLW5ldHdvcmsgLmJ1aWxkLWRlcHM7IFx0XHRleHBvcnQgUFlUSE9ORE9OVFdSSVRFQllURUNPREU9MTsgXHRweXRob24zIC0tdmVyc2lvbjsgXHRwaXAzIC0tdmVyc2lvbiAjIGJ1aWxka2l0IiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjEwOjMwLjc4MjcyNjAwM1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgc2V0IC1ldXg7IFx0Zm9yIHNyYyBpbiBpZGxlMyBwaXAzIHB5ZG9jMyBweXRob24zIHB5dGhvbjMtY29uZmlnOyBkbyBcdFx0ZHN0PVwiJChlY2hvIFwiJHNyY1wiIHwgdHIgLWQgMylcIjsgXHRcdFsgLXMgXCIvdXNyL2xvY2FsL2Jpbi8kc3JjXCIgXTsgXHRcdFsgISAtZSBcIi91c3IvbG9jYWwvYmluLyRkc3RcIiBdOyBcdFx0bG4gLXN2VCBcIiRzcmNcIiBcIi91c3IvbG9jYWwvYmluLyRkc3RcIjsgXHRkb25lICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMDFUMDA6MTA6MzAuNzgyNzI2MDAzWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJDTUQgW1wicHl0aG9uM1wiXSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMTFUMDA6NDk6NDcuOTYyMTU2ODc2KzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBQWVRIT05ET05UV1JJVEVCWVRFQ09ERT0xIFBZVEhPTlVOQlVGRkVSRUQ9MSBQQVRIPS9vcHQvdmVudi9iaW46L3Vzci9sb2NhbC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0xMVQwMDo0OTo0Ny45NjIxNTY4NzYrMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgYXBrIGFkZCAtLW5vLWNhY2hlICdsaWJ1dWlkXHUwMDNlPTIuNDIuMy1yMScgICAgIFx1MDAyNlx1MDAyNiBhZGRncm91cCAtUyAtZyAxMDAwMSBpbmZvcm1lZCAgICAgXHUwMDI2XHUwMDI2IGFkZHVzZXIgLVMgLXUgMTAwMDEgLUcgaW5mb3JtZWQgLUggaW5mb3JtZWQgIyBidWlsZGtpdCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1NS4zNTE5NDQ5NzgrMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiQ09QWSAvb3B0L3ZlbnYgL29wdC92ZW52ICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNDYyMDkyMDcyKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIlJVTiAvYmluL3NoIC1jIHJtIC1yZiAvdXNyL2xvY2FsL2Jpbi9waXAqIC91c3IvbG9jYWwvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9waXAqICAgICAvdXNyL2xvY2FsL2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvc2V0dXB0b29scyogL3Vzci9sb2NhbC9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL3BrZ19yZXNvdXJjZXMgICAgIC9vcHQvdmVudi9iaW4vcGlwKiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9waXAqICAgICAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9zZXR1cHRvb2xzKiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9wa2dfcmVzb3VyY2VzICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNjc1MjE2ODIxKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIldPUktESVIgL2FwcCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1Ni42NzUyMTY4MjErMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiVVNFUiAxMDAwMToxMDAwMSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNjc1MjE2ODIxKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVYUE9TRSBbODA4MC90Y3AgODA4MS90Y3BdIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1Ni42NzUyMTY4MjErMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5UUllQT0lOVCBbXCJpbmZvcm1lZC1kZWNpc2lvbi1jb250YWluZXJcIl0iLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTEwLTExVDAxOjE1OjExLjk5MTQ0MzY3NloiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiL2Jpbi9zaCAtYyAjKG5vcCkgIEFSRyBTT1VSQ0VfUkVWSVNJT04iLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0xMVQwMToyMTowNC43MTYxMjYzOTJaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIi9iaW4vc2ggLWMgIyhub3ApICBMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UucmV2aXNpb249M2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYmFzZS5kaWdlc3Q9c2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMgc29jaWFsLmNvdWxvbWIuc291cmNlLnBvbGljeS5zaGEyNTY9OWQ3YzFiZTRjYjYxOTlkMTRlZjBhYWVhZDVmODU5NTFmNDViMGNjYmQ3YzgwMGE3ZmRlOTIyYTI1MzU2NmI2MiBzb2NpYWwuY291bG9tYi5yZWxlYXNlLnNjb3BlPUlORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMTFUMDE6MjE6MDQuNzg3NTI3Njk3WiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICIvYmluL3NoIC1jICMobm9wKSBDT1BZIGZpbGU6MmJlOWNiMzZlNzI1M2UxNTczMzY3MzM1OWNkYThjYWEyMjk4NmI2ODg4ODIyYTAwOGMxYjM2MGQ5MDk5OTRlMCBpbiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9pbmZvcm1lZF9kZWNpc2lvbi9wb2xpY3kucHkgIgogICAgICAgIH0KICAgICAgXSwKICAgICAgIm9zIjogImxpbnV4IiwKICAgICAgInJvb3RmcyI6IHsKICAgICAgICAidHlwZSI6ICJsYXllcnMiLAogICAgICAgICJkaWZmX2lkcyI6IFsKICAgICAgICAgICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIsCiAgICAgICAgICAic2hhMjU2OjNjYTRiZTJjNmU5YWMwMjIzNzE1MzU1MjUzNzI1MzgxMDAwNDg2YzJiNDViZmNiMjJjZjU3MWI2YTg1YTEyZGQiLAogICAgICAgICAgInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IiwKICAgICAgICAgICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIsCiAgICAgICAgICAic2hhMjU2OmY5YjRhOGE0MTJhMGMwN2E0ODllNDZmYjVkYjQxZjlkMGRjODRkNGVjMzhhNGUyYzZhYjk1MzFmNDRlMGQ5ZjEiLAogICAgICAgICAgInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIiwKICAgICAgICAgICJzaGEyNTY6MzYxNDMwYTExMTM5Njk3NDNiOTllMjM3YjIwZjAyM2Q1NDk3NDkzYmNmOTZmYjkxYWY5OWFjMGEwZGJjNGE1OSIsCiAgICAgICAgICAic2hhMjU2OmNmYzU5Mzk2NzRkNjdmNjBiNDQxMWMyNGRmY2RlNTYyMmI3MTJlZWI3Mzc2Y2QwOTQxYTI3NTFkYTgwYTZiMDIiLAogICAgICAgICAgInNoYTI1NjoyMWZmOTE4OGNiMjljYTk1ZmU5YmUxMTM1NWY3MGFiNTU4NmU4NDk5ZTMzYjUyYTI1M2Q5NTNmYjNiNzVhZWEzIgogICAgICAgIF0KICAgICAgfSwKICAgICAgImNvbmZpZyI6IHsKICAgICAgICAiRW50cnlwb2ludCI6IFsKICAgICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi1jb250YWluZXIiCiAgICAgICAgXSwKICAgICAgICAiRW52IjogWwogICAgICAgICAgIlBBVEg9L29wdC92ZW52L2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgIkxBTkc9Qy5VVEYtOCIsCiAgICAgICAgICAiR1BHX0tFWT03MTY5NjA1RjYyQzc1MTM1NkQwNTRBMjZBODIxRTY4MEU1RkE2MzA1IiwKICAgICAgICAgICJQWVRIT05fVkVSU0lPTj0zLjEyLjE0IiwKICAgICAgICAgICJQWVRIT05fU0hBMjU2PTVjODQ2MmFmNTc5MGJhZjQzYTMyMWExNTU5ZGJlMGRiMDZkMWJlNDMwMGZiODVmYjUzYzQwMDYwNjY4ZTU0OGEiLAogICAgICAgICAgIlBZVEhPTkRPTlRXUklURUJZVEVDT0RFPTEiLAogICAgICAgICAgIlBZVEhPTlVOQlVGRkVSRUQ9MSIKICAgICAgICBdLAogICAgICAgICJJbWFnZSI6ICJzaGEyNTY6OTBmMTU3NGY5ZWRhMzVmYTZjYjk3Mjk2MWJlYjI3YTdjYjkwNGMzNjU2MGUzODE5MzBiMGUxNDA2NWMyMzg4MyIsCiAgICAgICAgIkxhYmVscyI6IHsKICAgICAgICAgICJvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYmFzZS5kaWdlc3QiOiAic2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMiLAogICAgICAgICAgIm9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5yZXZpc2lvbiI6ICIzZTRiY2IyNmY4ZWVhYThjNjQzNDVjNTY1NDc3YjVhYzhjY2JiMTY4IiwKICAgICAgICAgICJzb2NpYWwuY291bG9tYi5yZWxlYXNlLnNjb3BlIjogIklORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxIiwKICAgICAgICAgICJzb2NpYWwuY291bG9tYi5zb3VyY2UucG9saWN5LnNoYTI1NiI6ICI5ZDdjMWJlNGNiNjE5OWQxNGVmMGFhZWFkNWY4NTk1MWY0NWIwY2NiZDdjODAwYTdmZGU5MjJhMjUzNTY2YjYyIgogICAgICAgIH0sCiAgICAgICAgIlVzZXIiOiAiMTAwMDE6MTAwMDEiLAogICAgICAgICJXb3JraW5nRGlyIjogIi9hcHAiLAogICAgICAgICJFeHBvc2VkUG9ydHMiOiB7CiAgICAgICAgICAiODA4MC90Y3AiOiB7fSwKICAgICAgICAgICI4MDgxL3RjcCI6IHt9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkxheWVycyI6IFsKICAgICAgewogICAgICAgICJTaXplIjogODY5Nzg1NiwKICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICB9LAogICAgICB7CiAgICAgICAgIlNpemUiOiAxNTM4MDQ4LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjQ3MzkzYjY2OGNlNTM1ZDA2ZTg5Njc5MTdkNDI0YzE3N2UyZWNjY2FlODM4NTZkNDhiMmU5OTE2NGY4Y2M2Y2IiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjNjYTRiZTJjNmU5YWMwMjIzNzE1MzU1MjUzNzI1MzgxMDAwNDg2YzJiNDViZmNiMjJjZjU3MWI2YTg1YTEyZGQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDQ3MTUwNTkyLAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDUxMjAsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ZWQ2MmM5MWNjZDk0ZTM2YTkyOGU5NmQ3MDRjZmNmMjA4NjEzMDI1OTAyNDVjYzEyYWE4OWExNWE1ZDZiZTI5YiIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIKICAgICAgfSwKICAgICAgewogICAgICAgICJTaXplIjogMTMxNTg0LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OmYwZmUzZTA4YWIwNDZjMGM1ZTI5ZDM0ZWU3M2JjOGM3ZTAzMzk4ZWI4OTFlNDQ5OGUwYTY3MDg4YTVlYTNlODYiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmY5YjRhOGE0MTJhMGMwN2E0ODllNDZmYjVkYjQxZjlkMGRjODRkNGVjMzhhNGUyYzZhYjk1MzFmNDRlMGQ5ZjEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDMwNzA1NjY0LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDEyMjg4LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjE2YTNkYmE2YjcyMGQzMDU5ZWFiOTE4Y2QzNTk2Zjk0MTQ1YWM5Y2Y0ZDQ1NmY5MjVhMjFmMGY3MjUyMjg2M2YiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM2MTQzMGExMTEzOTY5NzQzYjk5ZTIzN2IyMGYwMjNkNTQ5NzQ5M2JjZjk2ZmI5MWFmOTlhYzBhMGRiYzRhNTkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDE1MzYsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ZTczZGQ0NjRmYmZmNTYwN2NjNjJhMWIyYjY2YjBlZWZlNzM3ZGZhZDRkYjhlN2I1OGE0OGNkYTdjMTJkOTRkMyIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6Y2ZjNTkzOTY3NGQ2N2Y2MGI0NDExYzI0ZGZjZGU1NjIyYjcxMmVlYjczNzZjZDA5NDFhMjc1MWRhODBhNmIwMiIKICAgICAgfSwKICAgICAgewogICAgICAgICJTaXplIjogMTUzNjAsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6Y2ZlZTI5YzJmODExOWQyYTM5NzE0ZWNiZTUwOTVhMmRjMWM5ODYwNTRmMmUxZmUwYTY1NjUxNjMyNDI0MTdlMyIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MjFmZjkxODhjYjI5Y2E5NWZlOWJlMTEzNTVmNzBhYjU1ODZlODQ5OWUzM2I1MmEyNTNkOTUzZmIzYjc1YWVhMyIKICAgICAgfQogICAgXQogIH0sCiAgIlJlc3VsdHMiOiBbCiAgICB7CiAgICAgICJUYXJnZXQiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIChhbHBpbmUgMy4yNC4xKSIsCiAgICAgICJDbGFzcyI6ICJvcy1wa2dzIiwKICAgICAgIlR5cGUiOiAiYWxwaW5lIiwKICAgICAgIlBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJJRCI6ICIucHl0aG9uLXJ1bmRlcHNAMjAyNjA5MDEuMDAxMDI5IiwKICAgICAgICAgICJOYW1lIjogIi5weXRob24tcnVuZGVwcyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvLnB5dGhvbi1ydW5kZXBzQDIwMjYwOTAxLjAwMTAyOT9hcmNoPW5vYXJjaFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjRlMjZjOTlmZWNhYzFlOTciCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMjAyNjA5MDEuMDAxMDI5IiwKICAgICAgICAgICJBcmNoIjogIm5vYXJjaCIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiZ2RibUAxLjI2LXIwIiwKICAgICAgICAgICAgImxpYmJ6MkAxLjAuOC1yNiIsCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYmZmaUAzLjUuMi1yMSIsCiAgICAgICAgICAgICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICAgImxpYm5zbEAyLjAuMS1yMiIsCiAgICAgICAgICAgICJsaWJwYW5lbHdANi42X3AyMDI2MDUxNi1yMCIsCiAgICAgICAgICAgICJsaWJzc2wzQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnRpcnBjQDEuMy41LXIxIiwKICAgICAgICAgICAgImxpYnV1aWRAMi40Mi4zLXIxIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiLAogICAgICAgICAgICAicmVhZGxpbmVAOC4zLjMtcjEiLAogICAgICAgICAgICAic3FsaXRlLWxpYnNAMy41My40LXIwIiwKICAgICAgICAgICAgInh6LWxpYnNANS44LjMtcjAiLAogICAgICAgICAgICAiemxpYkAxLjMuMi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo1MWQwYzFlN2Q4OGE0MTQzNDU3OTlmMDMwOTE4NWM2MjUwMTNlZjMyIiwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJhbHBpbmUtYmFzZWxheW91dEAzLjcuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLWJhc2VsYXlvdXRAMy43LjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIxYjljNTQzMzAwZjgwNzNlIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuNy4yLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjcuMi1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImFscGluZS1iYXNlbGF5b3V0LWRhdGFAMy43LjItcjEiLAogICAgICAgICAgICAiYnVzeWJveC1iaW5zaEAxLjM3LjAtcjMxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmYwZmNmZGMyZjRkYTA1OGFmNjQ3M2JjNDVjNGVhYjYyOTE2MjI1YjIiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL21vdGQiLAogICAgICAgICAgICAiZXRjL2Nyb250YWJzL3Jvb3QiLAogICAgICAgICAgICAiZXRjL21vZHByb2JlLmQvYWxpYXNlcy5jb25mIiwKICAgICAgICAgICAgImV0Yy9tb2Rwcm9iZS5kL2JsYWNrbGlzdC5jb25mIiwKICAgICAgICAgICAgImV0Yy9tb2Rwcm9iZS5kL2kzODYuY29uZiIsCiAgICAgICAgICAgICJldGMvcHJvZmlsZS5kLzIwbG9jYWxlLnNoIiwKICAgICAgICAgICAgImV0Yy9wcm9maWxlLmQvUkVBRE1FIiwKICAgICAgICAgICAgImV0Yy9wcm9maWxlLmQvY29sb3JfcHJvbXB0LnNoLmRpc2FibGVkIiwKICAgICAgICAgICAgInVzci9saWIvc3lzY3RsLmQvMDAtYWxwaW5lLmNvbmYiLAogICAgICAgICAgICAidmFyL2xvY2siLAogICAgICAgICAgICAidmFyL3J1biIsCiAgICAgICAgICAgICJ2YXIvc3Bvb2wvbWFpbCIsCiAgICAgICAgICAgICJ2YXIvc3Bvb2wvY3Jvbi9jcm9udGFicyIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYWxwaW5lLWJhc2VsYXlvdXQtZGF0YUAzLjcuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dC1kYXRhIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUtYmFzZWxheW91dC1kYXRhQDMuNy4yLXIxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZmNjM2NkOTAxMjJkOGFhNyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjcuMi1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYWxwaW5lLWJhc2VsYXlvdXQiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy43LjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmM2ZjliZGVkMTdkODQ0YjZmMWIwYmI1NzY2ZDJjMzVjMGQ1Yzg1MDgiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL2ZzdGFiIiwKICAgICAgICAgICAgImV0Yy9ncm91cCIsCiAgICAgICAgICAgICJldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAiZXRjL2hvc3RzIiwKICAgICAgICAgICAgImV0Yy9pbml0dGFiIiwKICAgICAgICAgICAgImV0Yy9tb2R1bGVzIiwKICAgICAgICAgICAgImV0Yy9tdGFiIiwKICAgICAgICAgICAgImV0Yy9uc3N3aXRjaC5jb25mIiwKICAgICAgICAgICAgImV0Yy9wYXNzd2QiLAogICAgICAgICAgICAiZXRjL3Byb2ZpbGUiLAogICAgICAgICAgICAiZXRjL3Byb3RvY29scyIsCiAgICAgICAgICAgICJldGMvc2VydmljZXMiLAogICAgICAgICAgICAiZXRjL3NoYWRvdyIsCiAgICAgICAgICAgICJldGMvc2hlbGxzIiwKICAgICAgICAgICAgImV0Yy9zeXNjdGwuY29uZiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYWxwaW5lLWtleXNAMi42LXIwIiwKICAgICAgICAgICJOYW1lIjogImFscGluZS1rZXlzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUta2V5c0AyLjYtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJjYjFmNmM4ZmE3NDcxM2UwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjIuNi1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYWxwaW5lLWtleXMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMi42LXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpkOGQ2YjgwZTUzYzA1OWE3N2U0OTE1ZGE3OGJhOTY0ZjNmZmVhMjQwIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAiZXRjL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI2MWNlY2IucnNhLnB1YiIsCiAgICAgICAgICAgICJldGMvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTY1ZWU1OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI0M2VmNGIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01MjRkMjdiYi5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNjFjZWNiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTgxOTlkY2MucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01OGNiYjQ3Ni5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTU4ZTRmMTdkLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNWU2OWNhNTAucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MGFjMjA5OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjVlZTU5LnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2NjZlM2YucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhOTcyNC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFiYzIzLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2YWMzYmMucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhZGZlYi5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFlMzUwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2ZGIzMGQucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02NmJhMjBmZS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hYXJjaDY0L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTgxOTlkY2MucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWFyY2g2NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFlMzUwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FybWhmL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI0ZDI3YmIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYXJtaGYvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhOTcyNC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hcm12Ny9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNGQyN2JiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FybXY3L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2YWRmZWIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvbG9vbmdhcmNoNjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02NmJhMjBmZS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9taXBzNjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01ZTY5Y2E1MC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9wcGM2NGxlL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNThjYmI0NzYucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvcHBjNjRsZS9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFiYzIzLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3Jpc2N2NjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MGFjMjA5OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9yaXNjdjY0L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2ZGIzMGQucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvczM5MHgvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01OGU0ZjE3ZC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9zMzkweC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFjM2JjLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNDNlZjRiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjY2ZTNmLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNjFjZWNiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjVlZTU5LnJzYS5wdWIiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImFscGluZS1yZWxlYXNlQDMuMjQuMS1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtcmVsZWFzZSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLXJlbGVhc2VAMy4yNC4xLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNmNmYWQ2ZjM2ZTFmMzFhYSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjI0LjEtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImFscGluZS1iYXNlIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjMuMjQuMS1yMCIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImFscGluZS1rZXlzQDIuNi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpiYzY5MTJhMjVjZGM3NzMzZTAwMzVlZDUwOWVjZWFhNDAyNjk0NmUzIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy9hbHBpbmUtcmVsZWFzZSIsCiAgICAgICAgICAgICJldGMvaXNzdWUiLAogICAgICAgICAgICAiZXRjL29zLXJlbGVhc2UiLAogICAgICAgICAgICAiZXRjL3NlY2ZpeGVzLmQvYWxwaW5lIiwKICAgICAgICAgICAgInVzci9saWIvb3MtcmVsZWFzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYXBrLXRvb2xzQDMuMC42LXIwIiwKICAgICAgICAgICJOYW1lIjogImFway10b29scyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYXBrLXRvb2xzQDMuMC42LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiY2IyNjMzYzg4M2IxN2EwNCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjAuNi1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYXBrLXRvb2xzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjMuMC42LXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkdQTC0yLjAtb25seSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiY2EtY2VydGlmaWNhdGVzLWJ1bmRsZUAyMDI2MDYxMS1yMCIsCiAgICAgICAgICAgICJsaWJhcGtAMy4wLjYtcjAiLAogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIiwKICAgICAgICAgICAgInpsaWJAMS4zLjItcjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MDQzMzMzNTg5Nzk4YTFmNTJlMDlhZTYzZjAyNmM2YzhmYTY3NmQzNCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJzYmluL2FwayIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYnVzeWJveEAxLjM3LjAtcjMxIiwKICAgICAgICAgICJOYW1lIjogImJ1c3lib3giLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2J1c3lib3hAMS4zNy4wLXIzMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjc3MTAyMGM0M2M4NDQwYmYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zNy4wLXIzMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYnVzeWJveCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjM3LjAtcjMxIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkdQTC0yLjAtb25seSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJTw7ZyZW4gVGVtcGVsIFx1MDAzY3NvZXJlbithbHBpbmVAc29lcmVuLXRlbXBlbC5uZXRcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6YjU0MDVlYmMwMmY3ZGQ4YmU5NWI2MjY1YzU0YjI0M2Q1NDU2YWI4ZiIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJiaW4vYnVzeWJveCIsCiAgICAgICAgICAgICJldGMvc2VjdXJldHR5IiwKICAgICAgICAgICAgImV0Yy9idXN5Ym94LXBhdGhzLmQvYnVzeWJveCIsCiAgICAgICAgICAgICJldGMvbG9ncm90YXRlLmQvYWNwaWQiLAogICAgICAgICAgICAiZXRjL25ldHdvcmsvaWYtdXAuZC9kYWQiLAogICAgICAgICAgICAiZXRjL3VkaGNwYy91ZGhjcGMuY29uZiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvdWRoY3BjL2RlZmF1bHQuc2NyaXB0IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJidXN5Ym94LWJpbnNoQDEuMzcuMC1yMzEiLAogICAgICAgICAgIk5hbWUiOiAiYnVzeWJveC1iaW5zaCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYnVzeWJveC1iaW5zaEAxLjM3LjAtcjMxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWVjOGEzZDVkMmI2MzI5NyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjM3LjAtcjMxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJidXN5Ym94IiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMzcuMC1yMzEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIlPDtnJlbiBUZW1wZWwgXHUwMDNjc29lcmVuK2FscGluZUBzb2VyZW4tdGVtcGVsLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiYnVzeWJveEAxLjM3LjAtcjMxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjVjYmQxNGFjYzZmMTgwNGM1YmFjNmM3N2RjMmM0OTJmMDEwYjBmYzciLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiYmluL3NoIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJjYS1jZXJ0aWZpY2F0ZXNAMjAyNjA2MTEtcjAiLAogICAgICAgICAgIk5hbWUiOiAiY2EtY2VydGlmaWNhdGVzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9jYS1jZXJ0aWZpY2F0ZXNAMjAyNjA2MTEtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIyYTNjMzE2ZWU4M2M2MTk4IgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjIwMjYwNjExLXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJjYS1jZXJ0aWZpY2F0ZXMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMjAyNjA2MTEtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTVBMLTIuMCIsCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImJ1c3lib3gtYmluc2hAMS4zNy4wLXIzMSIsCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo0NzM5M2I2NjhjZTUzNWQwNmU4OTY3OTE3ZDQyNGMxNzdlMmVjY2NhZTgzODU2ZDQ4YjJlOTkxNjRmOGNjNmNiIiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OGYyYTA0YWJlYjU0YjMzMWUyOTcwYTBhMGRmZmI3YmQ2YmRkZTU2NyIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvY2EtY2VydGlmaWNhdGVzLmNvbmYiLAogICAgICAgICAgICAiZXRjL2Fway9wcm90ZWN0ZWRfcGF0aHMuZC9jYS1jZXJ0aWZpY2F0ZXMubGlzdCIsCiAgICAgICAgICAgICJldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kL2NlcnRoYXNoIiwKICAgICAgICAgICAgInVzci9iaW4vY19yZWhhc2giLAogICAgICAgICAgICAidXNyL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQUNDVlJBSVoxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQUNfUkFJWl9GTk1ULVJDTS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FDX1JBSVpfRk5NVC1SQ01fU0VSVklET1JFU19TRUdVUk9TLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQU5GX1NlY3VyZV9TZXJ2ZXJfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FjdGFsaXNfQXV0aGVudGljYXRpb25fUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FtYXpvbl9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BbWF6b25fUm9vdF9DQV8yLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQW1hem9uX1Jvb3RfQ0FfMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FtYXpvbl9Sb290X0NBXzQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BdG9zX1RydXN0ZWRSb290XzIwMTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BdG9zX1RydXN0ZWRSb290X1Jvb3RfQ0FfRUNDX1RMU18yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQXRvc19UcnVzdGVkUm9vdF9Sb290X0NBX1JTQV9UTFNfMjAyMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0F1dG9yaWRhZF9kZV9DZXJ0aWZpY2FjaW9uX0Zpcm1hcHJvZmVzaW9uYWxfQ0lGX0E2MjYzNDA2OC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0JKQ0FfR2xvYmFsX1Jvb3RfQ0ExLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQkpDQV9HbG9iYWxfUm9vdF9DQTIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9CdXlwYXNzX0NsYXNzXzJfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0J1eXBhc3NfQ2xhc3NfM19Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ0FfRGlzaWdfUm9vdF9SMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NGQ0FfRVZfUk9PVC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NPTU9ET19FQ0NfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHkuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DT01PRE9fUlNBX0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ2VydGFpbmx5X1Jvb3RfRTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DZXJ0YWlubHlfUm9vdF9SMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnRpZ25hX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DZXJ0dW1fRUMtMzg0X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ2VydHVtX1RydXN0ZWRfTmV0d29ya19DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnR1bV9UcnVzdGVkX05ldHdvcmtfQ0FfMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnR1bV9UcnVzdGVkX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ELVRSVVNUX0JSX1Jvb3RfQ0FfMV8yMDIwLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9CUl9Sb290X0NBXzJfMjAyMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0QtVFJVU1RfRVZfUm9vdF9DQV8xXzIwMjAuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ELVRSVVNUX0VWX1Jvb3RfQ0FfMl8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9Sb290X0NsYXNzXzNfQ0FfMl8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9Sb290X0NsYXNzXzNfQ0FfMl9FVl8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfQXNzdXJlZF9JRF9Sb290X0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfQXNzdXJlZF9JRF9Sb290X0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfR2xvYmFsX1Jvb3RfRzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9EaWdpQ2VydF9HbG9iYWxfUm9vdF9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0RpZ2lDZXJ0X1RMU19FQ0NfUDM4NF9Sb290X0c1LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfVExTX1JTQTQwOTZfUm9vdF9HNS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0RpZ2lDZXJ0X1RydXN0ZWRfUm9vdF9HNC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dEQ0FfVHJ1c3RBVVRIX1I1X1JPT1QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HVFNfUm9vdF9SMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dUU19Sb290X1IzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvR1RTX1Jvb3RfUjQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX0VDQ19Sb290X0NBXy1fUjQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX0VDQ19Sb290X0NBXy1fUjUuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX1Jvb3RfQ0FfLV9SMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dsb2JhbFNpZ25fUm9vdF9DQV8tX1I2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvR2xvYmFsU2lnbl9Sb290X0U0Ni5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dsb2JhbFNpZ25fUm9vdF9SNDYuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9Hb19EYWRkeV9Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8tX0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSEFSSUNBX1RMU19FQ0NfUm9vdF9DQV8yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSEFSSUNBX1RMU19SU0FfUm9vdF9DQV8yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSGVsbGVuaWNfQWNhZGVtaWNfYW5kX1Jlc2VhcmNoX0luc3RpdHV0aW9uc19FQ0NfUm9vdENBXzIwMTUuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9IZWxsZW5pY19BY2FkZW1pY19hbmRfUmVzZWFyY2hfSW5zdGl0dXRpb25zX1Jvb3RDQV8yMDE1LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSGlQS0lfUm9vdF9DQV8tX0cxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSG9uZ2tvbmdfUG9zdF9Sb290X0NBXzMuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JU1JHX1Jvb3RfWDEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JU1JHX1Jvb3RfWDIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JZGVuVHJ1c3RfQ29tbWVyY2lhbF9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JZGVuVHJ1c3RfUHVibGljX1NlY3Rvcl9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JemVucGUuY29tLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zZWNfZS1Temlnbm9fUm9vdF9DQV8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zb2Z0X0VDQ19Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8yMDE3LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zb2Z0X1JTQV9Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8yMDE3LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTkFWRVJfR2xvYmFsX1Jvb3RfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHkuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9OZXRMb2NrX0FyYW55Xz1DbGFzc19Hb2xkPV9GxZF0YW7DunPDrXR2w6FueS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1NlcnZlcl9Sb290X0VDQ19HMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1NlcnZlcl9Sb290X1JTQV9HMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1dJU2VLZXlfR2xvYmFsX1Jvb3RfR0JfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9PSVNURV9XSVNlS2V5X0dsb2JhbF9Sb290X0dDX0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8xX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8yX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8zX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1NMLmNvbV9FVl9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5X0VDQy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NTTC5jb21fRVZfUm9vdF9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eV9SU0FfUjIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TU0wuY29tX1Jvb3RfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHlfRUNDLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1NMLmNvbV9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5X1JTQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NTTC5jb21fVExTX0VDQ19Sb290X0NBXzIwMjIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TU0wuY29tX1RMU19SU0FfUm9vdF9DQV8yMDIyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1pBRklSX1JPT1RfQ0EyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdGlnb19QdWJsaWNfU2VydmVyX0F1dGhlbnRpY2F0aW9uX1Jvb3RfRTQ2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdGlnb19QdWJsaWNfU2VydmVyX0F1dGhlbnRpY2F0aW9uX1Jvb3RfUjQ2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdXJlU2lnbl9Sb290X0NBMTQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TZWN1cmVTaWduX1Jvb3RfQ0ExNS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NlY3VyaXR5X0NvbW11bmljYXRpb25fRUNDX1Jvb3RDQTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TZWN1cml0eV9Db21tdW5pY2F0aW9uX1Jvb3RDQTIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TdGFyZmllbGRfUm9vdF9DZXJ0aWZpY2F0ZV9BdXRob3JpdHlfLV9HMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1N0YXJmaWVsZF9TZXJ2aWNlc19Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8tX0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU3dpc3NTaWduX1JTQV9UTFNfUm9vdF9DQV8yMDIyXy1fMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1QtVGVsZVNlY19HbG9iYWxSb290X0NsYXNzXzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ULVRlbGVTZWNfR2xvYmFsUm9vdF9DbGFzc18zLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFVCSVRBS19LYW11X1NNX1NTTF9Lb2tfU2VydGlmaWthc2lfLV9TdXJ1bV8xLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFdDQV9DWUJFUl9Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFdDQV9HbG9iYWxfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RXQ0FfUm9vdF9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RlbGVrb21fU2VjdXJpdHlfVExTX0VDQ19Sb290XzIwMjAuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9UZWxla29tX1NlY3VyaXR5X1RMU19SU0FfUm9vdF8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVGVsaWFfUm9vdF9DQV92Mi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9HbG9iYWxfUm9vdF9DQV9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9HbG9iYWxfUm9vdF9DQV9HNC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9UTFNfRUNDX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9UcnVzdEFzaWFfVExTX1JTQV9Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVHVuVHJ1c3RfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1VDQV9FeHRlbmRlZF9WYWxpZGF0aW9uX1Jvb3QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9VQ0FfR2xvYmFsX0cyX1Jvb3QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9VU0VSVHJ1c3RfRUNDX0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVVNFUlRydXN0X1JTQV9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL2NlcnRTSUdOX1Jvb3RfQ0FfRzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lLVN6aWdub19Sb290X0NBXzIwMTcuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lLVN6aWdub19UTFNfUm9vdF9DQV8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvZVBLSV9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvZW1TaWduX0VDQ19Sb290X0NBXy1fQzMuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lbVNpZ25fRUNDX1Jvb3RfQ0FfLV9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL2VtU2lnbl9Sb290X0NBXy1fQzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lbVNpZ25fUm9vdF9DQV8tX0cxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvdlRydXNfRUNDX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS92VHJ1c19Sb290X0NBLmNydCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiY2EtY2VydGlmaWNhdGVzLWJ1bmRsZUAyMDI2MDYxMS1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJjYS1jZXJ0aWZpY2F0ZXMtYnVuZGxlIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9jYS1jZXJ0aWZpY2F0ZXMtYnVuZGxlQDIwMjYwNjExLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMjAzMzdjMmVhMjhiZWYyOCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyMDI2MDYxMS1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiY2EtY2VydGlmaWNhdGVzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIwMjYwNjExLXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1QTC0yLjAiLAogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmM5NTM0YTAzNzUwYmRmYWUzNDFmMTA5NjkwMTYwOTBmYzExZmViYmQiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL3NzbC9jZXJ0LnBlbSIsCiAgICAgICAgICAgICJldGMvc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiLAogICAgICAgICAgICAiZXRjL3NzbDEuMS9jZXJ0LnBlbSIsCiAgICAgICAgICAgICJldGMvc3NsMS4xL2NlcnRzIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJnZGJtQDEuMjYtcjAiLAogICAgICAgICAgIk5hbWUiOiAiZ2RibSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvZ2RibUAxLjI2LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNWViMWEzZjg2MjYyY2E3NyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjI2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJnZGJtIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMjYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTMuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo2MTk0OTNkODEyNGZlNDlhOGVlMWQ4ZjdhMTM3MmNmN2UzOTc3MzM3IiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliZ2RibS5zby42IiwKICAgICAgICAgICAgInVzci9saWIvbGliZ2RibS5zby42LjAuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdkYm1fY29tcGF0LnNvLjQiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnZGJtX2NvbXBhdC5zby40LjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAia2V5dXRpbHMtbGlic0AxLjYuMy1yNCIsCiAgICAgICAgICAiTmFtZSI6ICJrZXl1dGlscy1saWJzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9rZXl1dGlscy1saWJzQDEuNi4zLXI0P2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiYTFhMjkxMjBlYjM0MjAzMiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjYuMy1yNCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAia2V5dXRpbHMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS42LjMtcjQiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJMR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpiNzMzMWM5NmYwNzdmYzM1MjJlZTQzNjFhNDQxZDEwOTcyMDRjZDkwIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlia2V5dXRpbHMuc28uMSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtleXV0aWxzLnNvLjEuMTAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImtyYjUtY29uZkAxLjAtcjIiLAogICAgICAgICAgIk5hbWUiOiAia3JiNS1jb25mIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9rcmI1LWNvbmZAMS4wLXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZTdjZjk0YmE4YjZkYmMzMyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjAtcjIiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImtyYjUtY29uZiIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjAtcjIiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjQwYTExZTA2OTBhNTllMTEwMzY3YjYyYTgwNjYxMDI0ZTk5NDJhMmQiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL2tyYjUuY29uZiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAia3JiNS1saWJzQDEuMjIuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJrcmI1LWxpYnMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2tyYjUtbGlic0AxLjIyLjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICI5NThmOGI0YTRmMDg3ZGFjIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMjIuMi1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAia3JiNSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjIyLjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJrZXl1dGlscy1saWJzQDEuNi4zLXI0IiwKICAgICAgICAgICAgImtyYjUtY29uZkAxLjAtcjIiLAogICAgICAgICAgICAibGliY29tX2VyckAxLjQ3LjQtcjAiLAogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJsaWJzc2wzQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnZlcnRvQDAuMy4yLXIyIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6ZWYwMjM0NmUyMWI4MTdmZjM3OWU0NjAxZTViMWZjOTc2MGU1ZTMxYSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdzc2FwaV9rcmI1LnNvLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnc3NhcGlfa3JiNS5zby4yLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnc3NycGMuc28uNCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdzc3JwYy5zby40LjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJrNWNyeXB0by5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvbGliazVjcnlwdG8uc28uMy4xIiwKICAgICAgICAgICAgInVzci9saWIvbGlia2FkbTVjbG50X21pdC5zby4xMiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01Y2xudF9taXQuc28uMTIuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01c3J2X21pdC5zby4xMiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01c3J2X21pdC5zby4xMi4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia2RiNS5zby4xMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtkYjUuc28uMTAuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtyYWQuc28uMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtyYWQuc28uMC4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNS5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNS5zby4zLjMiLAogICAgICAgICAgICAidXNyL2xpYi9saWJrcmI1c3VwcG9ydC5zby4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNXN1cHBvcnQuc28uMC4xIiwKICAgICAgICAgICAgInVzci9saWIva3JiNS9wbHVnaW5zL2tkYi9kYjIuc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvcHJlYXV0aC9vdHAuc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvcHJlYXV0aC9zcGFrZS5zbyIsCiAgICAgICAgICAgICJ1c3IvbGliL2tyYjUvcGx1Z2lucy9wcmVhdXRoL3Rlc3Quc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvdGxzL2s1dGxzLnNvIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJhcGtAMy4wLjYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGliYXBrIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJhcGtAMy4wLjYtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJhMzViOGI5YjMyMTk1MTNhIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuMC42LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJhcGstdG9vbHMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy4wLjYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJ6bGliQDEuMy4yLXIwIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjUyM2E4ZjU4MTA0NTg5Zjc0Zjc0M2Q1MDFjODFiZjY1MTcxNTUzNzgiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJhcGsuc28uMy4wLjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYmJ6MkAxLjAuOC1yNiIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJiejIiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYmJ6MkAxLjAuOC1yNj9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjQ4ZTE3NTM5NDA0ZTJkNTYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4wLjgtcjYiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImJ6aXAyIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMC44LXI2IiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgImJ6aXAtMi0xLjAuNiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTowODU2NmJhNWM3YWY5N2MyNTQ3NGJlOGIyNGU4YjQ4ZjAxMTZiNjdkIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliYnoyLnNvLjEiLAogICAgICAgICAgICAidXNyL2xpYi9saWJiejIuc28uMS4wLjgiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYmNvbV9lcnJAMS40Ny40LXIwIiwKICAgICAgICAgICJOYW1lIjogImxpYmNvbV9lcnIiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYmNvbV9lcnJAMS40Ny40LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiM2ZjMzVhM2Y2NmQxOTJhZiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjQ3LjQtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImUyZnNwcm9ncyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjQ3LjQtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJMR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiLAogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjRiOWZiNTg5OWVhMGIxYzBjZmJiMmEyYzU5NTI3MDQ0MzdkNGVjZWYiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJjb21fZXJyLnNvLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJjb21fZXJyLnNvLjIuMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJjcnlwdG8zIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJjcnlwdG8zQDMuNS44LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNDI5OWJiYTJiYTljOTZhYSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjUuOC1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAib3BlbnNzbCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjUuOC1yMCIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJBcGFjaGUtMi4wIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjFiM2I5ZmMwYzEzNmY0OTM2OTMyYmNiMmVjMjE0OTlmMGFlNWRmZDMiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL3NzbC9jdF9sb2dfbGlzdC5jbmYiLAogICAgICAgICAgICAiZXRjL3NzbC9jdF9sb2dfbGlzdC5jbmYuZGlzdCIsCiAgICAgICAgICAgICJldGMvc3NsL29wZW5zc2wuY25mIiwKICAgICAgICAgICAgImV0Yy9zc2wvb3BlbnNzbC5jbmYuZGlzdCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmNyeXB0by5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL2FmYWxnLnNvIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL2NhcGkuc28iLAogICAgICAgICAgICAidXNyL2xpYi9lbmdpbmVzLTMvbG9hZGVyX2F0dGljLnNvIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL3BhZGxvY2suc28iLAogICAgICAgICAgICAidXNyL2xpYi9vc3NsLW1vZHVsZXMvbGVnYWN5LnNvIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJmZmlAMy41LjItcjEiLAogICAgICAgICAgIk5hbWUiOiAibGliZmZpIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJmZmlAMy41LjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkM2VhYTkyMTI4N2IxY2NkIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuNS4yLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJsaWJmZmkiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy41LjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjJmN2IyNjFmN2ZjZWNjNGVlYmQ4YjMzMGU3ZjZmYjgwNzEzYmZlM2EiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJmZmkuc28uOCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmZmaS5zby44LjIuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGliaW50bEAxLjAtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGliaW50bCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGliaW50bEAxLjAtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIyNWMxODgwOGQ4ZmM4N2UwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMC1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiZ2V0dGV4dCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjAtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTEdQTC0yLjEtb3ItbGF0ZXIiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiQ2FybG8gTGFuZG1ldGVyIFx1MDAzY2NsYW5kbWV0ZXJAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjI4MmQ2NjQyY2NhYzg3MjM3ZTQzYTg2NDE1OWQ3M2NmNWFiZTc1NTAiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJpbnRsLnNvLjgiLAogICAgICAgICAgICAidXNyL2xpYi9saWJpbnRsLnNvLjguNC42IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJOYW1lIjogImxpYm5jdXJzZXN3IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZTg5MzlmNDVlMjE5MWJjYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJuY3Vyc2VzLXRlcm1pbmZvLWJhc2VANi42X3AyMDI2MDUxNi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo5ZjMxOGU2ZTMyNGQ2ODI3Mjc0ODI5MTk0Y2Y2YWM2YWZiYWRlZDEyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlibmN1cnNlc3cuc28uNiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYm5jdXJzZXN3LnNvLjYuNiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlibnNsQDIuMC4xLXIyIiwKICAgICAgICAgICJOYW1lIjogImxpYm5zbCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGlibnNsQDIuMC4xLXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiM2Q4OTNjNjBkNDFkYTY3YiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyLjAuMS1yMiIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibGlibnNsIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIuMC4xLXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkxHUEwtMi4wLW9yLWxhdGVyIgogICAgICAgICAgXSwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJpbnRsQDEuMC1yMCIsCiAgICAgICAgICAgICJsaWJ0aXJwY0AxLjMuNS1yMSIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjUxOTRhZGJmMjY1NjBiNTJiZTMxODQ4MWE3YWYyOTRhYjA1ZmQ3OTUiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJuc2wuc28uMyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYm5zbC5zby4zLjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlicGFuZWx3QDYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGlicGFuZWx3IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJwYW5lbHdANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImVmMWFkOWJiMjU2YjM3MyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibGlibmN1cnNlc3dANi42X3AyMDI2MDUxNi1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIiwKICAgICAgICAgICAgIm5jdXJzZXMtdGVybWluZm8tYmFzZUA2LjZfcDIwMjYwNTE2LXIwIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjE0OWJkYzQzNDIzMmVkMTFmYzViYjk3NWJhNTE5YTA3MTU0YTZmNTYiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJwYW5lbHcuc28uNiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnBhbmVsdy5zby42LjYiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGlic3NsMyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGlic3NsM0AzLjUuOC1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImYyOTBhYjU5Yjg4YjFjNGEiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMy41LjgtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogIm9wZW5zc2wiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy41LjgtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQXBhY2hlLTIuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjVmOWIxZTU1ZDgyMTk1M2QyZTJiMWRiMzIyZGFkNzBhM2I1MDQxZWEiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJzc2wuc28uMyIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlidGlycGNAMS4zLjUtcjEiLAogICAgICAgICAgIk5hbWUiOiAibGlidGlycGMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjQDEuMy41LXIxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNDcxYzhkOTU1Y2EwM2JlNSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjMuNS1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibGlidGlycGMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zLjUtcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJrcmI1LWxpYnNAMS4yMi4yLXIxIiwKICAgICAgICAgICAgImxpYnRpcnBjLWNvbmZAMS4zLjUtcjEiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpjMzI4NjViZDg2YThiODgyOWQxNTIyNzljYWJiYzVhYzZkNDMwZWIyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlidGlycGMuc28uMyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnRpcnBjLnNvLjMuMC4wIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJ0aXJwYy1jb25mQDEuMy41LXIxIiwKICAgICAgICAgICJOYW1lIjogImxpYnRpcnBjLWNvbmYiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjLWNvbmZAMS4zLjUtcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIzNDM3MzkyYzE0YWFkMzNmIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMy41LXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJsaWJ0aXJwYyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjMuNS1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MGMxN2Q5OTg4ZGM5ODZjOTBlMjJmNzk3NzhkZjA0N2VjYTk5NzNmZiIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvYmluZHJlc3Zwb3J0LmJsYWNrbGlzdCIsCiAgICAgICAgICAgICJldGMvbmV0Y29uZmlnIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJ1dWlkQDIuNDIuMy1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJ1dWlkIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJ1dWlkQDIuNDIuMy1yMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImM0NDRlOWNkZDFiZGRhNDAiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi40Mi4zLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJ1dGlsLWxpbnV4IiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIuNDIuMy1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjpmMGZlM2UwOGFiMDQ2YzBjNWUyOWQzNGVlNzNiYzhjN2UwMzM5OGViODkxZTQ0OThlMGE2NzA4OGE1ZWEzZTg2IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZjliNGE4YTQxMmEwYzA3YTQ4OWU0NmZiNWRiNDFmOWQwZGM4NGQ0ZWMzOGE0ZTJjNmFiOTUzMWY0NGUwZDlmMSIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OGYwNDFlZjYzN2FkNzVmMzgxY2MwYzAzNGYyYWZiYmIwMzAzMjY0ZSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnV1aWQuc28uMSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnV1aWQuc28uMS4zLjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYnZlcnRvQDAuMy4yLXIyIiwKICAgICAgICAgICJOYW1lIjogImxpYnZlcnRvIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJ2ZXJ0b0AwLjMuMi1yMj9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjlkZjQzMjFhMjgzYTZjZjYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMC4zLjItcjIiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImxpYnZlcnRvIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjAuMy4yLXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJGcmFuY2VzY28gQ29saXN0YSBcdTAwM2NmY29saXN0YUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NzMyMzMwNTkzMzgxNDJlNGFjNmQ4ZmI4YmIwMDc0ZTkzZGE3NWRjMSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnZlcnRvLnNvLjEiLAogICAgICAgICAgICAidXNyL2xpYi9saWJ2ZXJ0by5zby4xLjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAiTmFtZSI6ICJtdXNsIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWY4Y2I0NGJlZmU1MDNkNCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjIuNi1yMiIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibXVzbCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjIuNi1yMiIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MGY3ZTU4MjdlNGUxYTczNjMxYmVkYTI3Yjc4NDMxYThiYTI0MGUwNSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJsaWIvbGQtbXVzbC14ODZfNjQuc28uMSIsCiAgICAgICAgICAgICJsaWIvbGliYy5tdXNsLXg4Nl82NC5zby4xIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJtdXNsLXV0aWxzQDEuMi42LXIyIiwKICAgICAgICAgICJOYW1lIjogIm11c2wtdXRpbHMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL211c2wtdXRpbHNAMS4yLjYtcjI/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICI0NDk3NDgyZWMxZDk0M2UxIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMi42LXIyIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJtdXNsIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMi42LXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIsCiAgICAgICAgICAgICJCU0QtMi1DbGF1c2UiLAogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJzY2FuZWxmQDEuMy45LXIxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjc1YWRhM2M0OGQ2M2VjNWQ4N2M0MmZkZjkzNGEzZmRkMTEyOThkYzUiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAic2Jpbi9sZGNvbmZpZyIsCiAgICAgICAgICAgICJ1c3IvYmluL2dldGNvbmYiLAogICAgICAgICAgICAidXNyL2Jpbi9nZXRlbnQiLAogICAgICAgICAgICAidXNyL2Jpbi9pY29udiIsCiAgICAgICAgICAgICJ1c3IvYmluL2xkZCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibmN1cnNlcy10ZXJtaW5mby1iYXNlQDYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibmN1cnNlcy10ZXJtaW5mby1iYXNlIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9uY3Vyc2VzLXRlcm1pbmZvLWJhc2VANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImU3ZmFjNWM2YTZlOWFlOCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo5ZDU1MWQ4MjhlOWM4ZWU1MmM1ODAxYzFkNjA0NjgyOGViZjE1NzUyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9hL2FsYWNyaXR0eSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vYS9hbnNpIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9kL2R1bWIiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2cvZ25vbWUiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2cvZ25vbWUtMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2sva29uc29sZSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vay9rb25zb2xlLTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9rL2tvbnNvbGUtbGludXgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2wvbGludXgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3AvcHV0dHkiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3AvcHV0dHktMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Ivcnh2dCIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vci9yeHZ0LTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9zL3NjcmVlbiIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zY3JlZW4tMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMC42IiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9zL3N0LTAuNyIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC0wLjgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMC44LjUiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC1kaXJlY3QiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3VuIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby90L3Rlcm1pbmF0b3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3kiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMC42LjEiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMS4wLjAiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMS44LjEiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdG11eCIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vdC90bXV4LTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MTAwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MTAyIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MjAwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MjIwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0NTIiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3YvdnRlIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0ZS0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS1jb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS14ZnJlZTg2IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJyZWFkbGluZUA4LjMuMy1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJyZWFkbGluZSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvcmVhZGxpbmVAOC4zLjMtcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJmNTAwNTg3ODFjOTNlMWYyIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjguMy4zLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJyZWFkbGluZSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICI4LjMuMy1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMy4wLW9yLWxhdGVyIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogInFhcWxhbmQgXHUwMDNjcWFxQHFhcS5sYW5kXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OTQ1YjE2ZTM3OGJjMDBlNDRkODlkNGRlODEyNGJiYTc2NDdmZGY0ZCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvaW5wdXRyYyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnJlYWRsaW5lLnNvLjgiLAogICAgICAgICAgICAidXNyL2xpYi9saWJyZWFkbGluZS5zby44LjMiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNjYW5lbGZAMS4zLjktcjEiLAogICAgICAgICAgIk5hbWUiOiAic2NhbmVsZiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvc2NhbmVsZkAxLjMuOS1yMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjkzNjM5NDY1N2ExNjI2ZmIiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zLjktcjEiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInBheC11dGlscyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjMuOS1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MDEzZjkwM2QwYmEyMTk2NzNhZWJiZGQwNGY3NGJiNWVkODJiMDFmMCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvYmluL3NjYW5lbGYiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNxbGl0ZS1saWJzQDMuNTMuNC1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJzcWxpdGUtbGlicyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvc3FsaXRlLWxpYnNAMy41My40LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiOGIxMGFlZTJjY2MxOTJkZSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjUzLjQtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInNxbGl0ZSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjUzLjQtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiYmxlc3NpbmciCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiSmluZ3l1biBIdWEgXHUwMDNjaHVhamluZ3l1bkBsb29uZ3Nvbi5jblx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpmNzYzMGNlYjM3YzIzMmI2NjA5ODYxYWVhYjZjZGI5Y2QxMjBlNmZhIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlic3FsaXRlMy5zby4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlic3FsaXRlMy5zby4zLjUzLjQiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNzbF9jbGllbnRAMS4zNy4wLXIzMSIsCiAgICAgICAgICAiTmFtZSI6ICJzc2xfY2xpZW50IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9zc2xfY2xpZW50QDEuMzcuMC1yMzE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkNDJlMzFmMTVhNGNlNDdhIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMzcuMC1yMzEiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImJ1c3lib3giLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zNy4wLXIzMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiU8O2cmVuIFRlbXBlbCBcdTAwM2Nzb2VyZW4rYWxwaW5lQHNvZXJlbi10ZW1wZWwubmV0XHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpjMjIwZjRhNTEyNWEzMTNhZjczM2U5OGRlZjk0MTMyYmIxZTlkNDBkIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9iaW4vc3NsX2NsaWVudCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAidHpkYXRhQDIwMjZjLXIwIiwKICAgICAgICAgICJOYW1lIjogInR6ZGF0YSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvdHpkYXRhQDIwMjZjLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNTJjNmI1MGVmZjYyOWY5ZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyMDI2Yy1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAidHpkYXRhIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIwMjZjLXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIlB1YmxpYy1Eb21haW4iCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo0NzM5M2I2NjhjZTUzNWQwNmU4OTY3OTE3ZDQyNGMxNzdlMmVjY2NhZTgzODU2ZDQ4YjJlOTkxNjRmOGNjNmNiIiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NjFmNzU0NGVjZDhkZDYzZWFjMjNmZTNlNjQ1NzAyZmRhOTJlZjAyYSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ0VUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DU1Q2Q0RUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DdWJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FRVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0VTVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRVNUNUVEVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRWd5cHQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0VpcmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0ZhY3RvcnkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0dCIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HQi1FaXJlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HTVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0dNVCswIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HTVQtMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vR01UMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vR3JlZW53aWNoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9IU1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0hvbmdrb25nIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9JY2VsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9JcmFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Jc3JhZWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0phbWFpY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0phcGFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Ld2FqYWxlaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0xpYnlhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NRVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL01TVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTVNUN01EVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTloiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL05aLUNIQVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL05hdmFqbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUFJDIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QU1Q4UERUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Qb2xhbmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BvcnR1Z2FsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9ST0MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1JPSyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vU2luZ2Fwb3JlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9UdXJrZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VDVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVRDIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Vbml2ZXJzYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1ctU1UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1dFVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vWnVsdSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vaXNvMzE2Ni50YWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL2xlYXAtc2Vjb25kcy5saXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9wb3NpeHJ1bGVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby96b25lLnRhYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vem9uZTE5NzAudGFiIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQWJpZGphbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0FjY3JhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQWRkaXNfQWJhYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9BbGdpZXJzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQXNtYXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQXNtZXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFtYWtvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFuZ3VpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFuanVsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmlzc2F1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmxhbnR5cmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9CcmF6emF2aWxsZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0J1anVtYnVyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0NhaXJvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQ2FzYWJsYW5jYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0NldXRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQ29uYWtyeSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0Rha2FyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRGFyX2VzX1NhbGFhbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0RqaWJvdXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRG91YWxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRWxfQWFpdW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9GcmVldG93biIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0dhYm9yb25lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSGFyYXJlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSm9oYW5uZXNidXJnIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSnViYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0thbXBhbGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9LaGFydG91bSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0tpZ2FsaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0tpbnNoYXNhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9MaWJyZXZpbGxlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTG9tZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0x1YW5kYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0x1YnVtYmFzaGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9MdXNha2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYWxhYm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYXB1dG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYXNlcnUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYmFiYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTW9nYWRpc2h1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTW9ucm92aWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9OYWlyb2JpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTmRqYW1lbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9OaWFtZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9Ob3Vha2Nob3R0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvT3VhZ2Fkb3Vnb3UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9Qb3J0by1Ob3ZvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvU2FvX1RvbWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9UaW1idWt0dSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL1RyaXBvbGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9UdW5pcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL1dpbmRob2VrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FkYWsiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQW5jaG9yYWdlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FuZ3VpbGxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FudGlndWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJhZ3VhaW5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FydWJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FzdW5jaW9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0F0aWtva2FuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0F0a2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFoaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFoaWFfQmFuZGVyYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFyYmFkb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmVsZW0iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmVsaXplIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0JsYW5jLVNhYmxvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Cb2FfVmlzdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQm9nb3RhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0JvaXNlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0J1ZW5vc19BaXJlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYW1icmlkZ2VfQmF5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0NhbXBvX0dyYW5kZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYW5jdW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2FyYWNhcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYXRhbWFyY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2F5ZW5uZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYXltYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2hpY2FnbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DaGlodWFodWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2l1ZGFkX0p1YXJleiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Db3JhbF9IYXJib3VyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0NvcmRvYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ29zdGFfUmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Db3loYWlxdWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ3Jlc3RvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DdWlhYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ3VyYWNhbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9EYW5tYXJrc2hhdm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvRGF3c29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0Rhd3Nvbl9DcmVlayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9EZW52ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvRGV0cm9pdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Eb21pbmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FZG1vbnRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FaXJ1bmVwZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FbF9TYWx2YWRvciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FbnNlbmFkYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Gb3J0X05lbHNvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Gb3J0X1dheW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0ZvcnRhbGV6YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HbGFjZV9CYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR29kdGhhYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Hb29zZV9CYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR3JhbmRfVHVyayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HcmVuYWRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0d1YWRlbG91cGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR3VhdGVtYWxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0d1YXlhcXVpbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HdXlhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSGFsaWZheCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9IYXZhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSGVybW9zaWxsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9JbmRpYW5hcG9saXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW51dmlrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0lxYWx1aXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSmFtYWljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9KdWp1eSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9KdW5lYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvS25veF9JTiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9LcmFsZW5kaWprIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xhX1BheiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9MaW1hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xvdWlzdmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTG93ZXJfUHJpbmNlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYWNlaW8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWFuYWd1YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYW5hdXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWFyaWdvdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYXJ0aW5pcXVlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01hdGFtb3JvcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYXphdGxhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZW5kb3phIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01lbm9taW5lZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZXJpZGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWV0bGFrYXRsYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZXhpY29fQ2l0eSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NaXF1ZWxvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Nb25jdG9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRlcnJleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Nb250ZXZpZGVvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRyZWFsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRzZXJyYXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTmFzc2F1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05ld19Zb3JrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05pcGlnb24iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTm9tZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ob3JvbmhhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL051dWsiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvT2ppbmFnYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QYW5hbWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUGFuZ25pcnR1bmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUGFyYW1hcmlibyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QaG9lbml4IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1BvcnQtYXUtUHJpbmNlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1BvcnRfb2ZfU3BhaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUG9ydG9fQWNyZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Qb3J0b19WZWxobyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QdWVydG9fUmljbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QdW50YV9BcmVuYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmFpbnlfUml2ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmFua2luX0lubGV0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1JlY2lmZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9SZWdpbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmVzb2x1dGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmlvX0JyYW5jbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Sb3NhcmlvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1NhbnRhX0lzYWJlbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50YXJlbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50aWFnbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50b19Eb21pbmdvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1Nhb19QYXVsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TY29yZXNieXN1bmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU2hpcHJvY2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU2l0a2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU3RfQmFydGhlbGVteSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9Kb2hucyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9LaXR0cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9MdWNpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9UaG9tYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU3RfVmluY2VudCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Td2lmdF9DdXJyZW50IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RlZ3VjaWdhbHBhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RodWxlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RodW5kZXJfQmF5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RpanVhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvVG9yb250byIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ub3J0b2xhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1ZhbmNvdXZlciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9WaXJnaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvV2hpdGVob3JzZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9XaW5uaXBlZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9ZYWt1dGF0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1llbGxvd2tuaWZlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0NhdGFtYXJjYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvQ29tb2RSaXZhZGF2aWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0p1anV5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9MYV9SaW9qYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvTWVuZG96YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvUmlvX0dhbGxlZ29zIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9TYWx0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvU2FuX0p1YW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9UdWN1bWFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9Vc2h1YWlhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvS25veCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9JbmRpYW5hL01hcmVuZ28iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9QZXRlcnNidXJnIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvVGVsbF9DaXR5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvVmV2YXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9XaW5hbWFjIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvS2VudHVja3kvTW9udGljZWxsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ob3J0aF9EYWtvdGEvQmV1bGFoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTm9ydGhfRGFrb3RhL05ld19TYWxlbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9DYXNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9EYXZpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9NYWNxdWFyaWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvTWF3c29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbnRhcmN0aWNhL01jTXVyZG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvUGFsbWVyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbnRhcmN0aWNhL1JvdGhlcmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvU291dGhfUG9sZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9TeW93YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9Ucm9sbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9Wb3N0b2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FyY3RpYy9Mb25neWVhcmJ5ZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQWRlbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9BbG1hdHkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQW1tYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQW5hZHlyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0FxdGF1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0FxdG9iZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Bc2hnYWJhdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Bc2hraGFiYWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQXR5cmF1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0JhZ2hkYWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmFocmFpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CYWt1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0Jhbmdrb2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmFybmF1bCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CZWlydXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmlzaGtlayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CcnVuZWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2FsY3V0dGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2hpdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2hvaWJhbHNhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9DaG9uZ3FpbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2h1bmdraW5nIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0NvbG9tYm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGFjY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGFtYXNjdXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGhha2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGlsaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9EdWJhaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9EdXNoYW5iZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9GYW1hZ3VzdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvR2F6YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9IYXJiaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSGVicm9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0hvX0NoaV9NaW5oIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0hvbmdfS29uZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Ib3ZkIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0lya3V0c2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSXN0YW5idWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSmFrYXJ0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9KYXlhcHVyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9KZXJ1c2FsZW0iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FidWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FtY2hhdGthIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0thcmFjaGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FzaGdhciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LYXRobWFuZHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2F0bWFuZHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2hhbmR5Z2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS29sa2F0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LcmFzbm95YXJzayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LdWFsYV9MdW1wdXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS3VjaGluZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LdXdhaXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFjYW8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFjYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFnYWRhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9NYWthc3NhciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9NYW5pbGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTXVzY2F0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL05pY29zaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTm92b2t1em5ldHNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL05vdm9zaWJpcnNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL09tc2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvT3JhbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9QaG5vbV9QZW5oIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1BvbnRpYW5hayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9QeW9uZ3lhbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUWF0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUW9zdGFuYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUXl6eWxvcmRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Jhbmdvb24iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUml5YWRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1NhaWdvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9TYWtoYWxpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9TYW1hcmthbmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2VvdWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2hhbmdoYWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2luZ2Fwb3JlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1NyZWRuZWtvbHltc2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVGFpcGVpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Rhc2hrZW50IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RiaWxpc2kiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVGVocmFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RlbF9Bdml2IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RoaW1idSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9UaGltcGh1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Rva3lvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RvbXNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1VqdW5nX1BhbmRhbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVWxhYW5iYWF0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVWxhbl9CYXRvciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9VcnVtcWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVXN0LU5lcmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVmllbnRpYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1ZsYWRpdm9zdG9rIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1lha3V0c2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvWWFuZ29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1lla2F0ZXJpbmJ1cmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvWWVyZXZhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvQXpvcmVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9CZXJtdWRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9DYW5hcnkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0NhcGVfVmVyZGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0ZhZXJvZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvRmFyb2UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0phbl9NYXllbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvTWFkZWlyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvUmV5a2phdmlrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9Tb3V0aF9HZW9yZ2lhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9TdF9IZWxlbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL1N0YW5sZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9BQ1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9BZGVsYWlkZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0JyaXNiYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvQnJva2VuX0hpbGwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9DYW5iZXJyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0N1cnJpZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0RhcndpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0V1Y2xhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvSG9iYXJ0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvTEhJIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvTGluZGVtYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9Mb3JkX0hvd2UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9NZWxib3VybmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9OU1ciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9Ob3J0aCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1BlcnRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvUXVlZW5zbGFuZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1NvdXRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvU3lkbmV5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvVGFzbWFuaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9WaWN0b3JpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1dlc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9ZYW5jb3dpbm5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9CcmF6aWwvQWNyZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQnJhemlsL0RlTm9yb25oYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQnJhemlsL0Vhc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0JyYXppbC9XZXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvQXRsYW50aWMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0NhbmFkYS9DZW50cmFsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvRWFzdGVybiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL01vdW50YWluIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvTmV3Zm91bmRsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvUGFjaWZpYyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL1Nhc2thdGNoZXdhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL1l1a29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DaGlsZS9Db250aW5lbnRhbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2hpbGUvRWFzdGVySXNsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrMSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrNCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCs1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzYiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrNyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCs4IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC0xIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEwIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTExIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTE0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtMyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC00IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtNiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC03IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTgiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtOSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVDAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HcmVlbndpY2giLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9VQ1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9VVEMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9Vbml2ZXJzYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9adWx1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQW1zdGVyZGFtIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQW5kb3JyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0FzdHJha2hhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0F0aGVucyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JlbGZhc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9CZWxncmFkZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JlcmxpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JyYXRpc2xhdmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9CcnVzc2VscyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0J1Y2hhcmVzdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0J1ZGFwZXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQnVzaW5nZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9DaGlzaW5hdSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0NvcGVuaGFnZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9EdWJsaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9HaWJyYWx0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9HdWVybnNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0hlbHNpbmtpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvSXNsZV9vZl9NYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Jc3RhbmJ1bCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0plcnNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0thbGluaW5ncmFkIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvS2lldiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0tpcm92IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvS3lpdiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xpc2JvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xqdWJsamFuYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xvbmRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0x1eGVtYm91cmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9NYWRyaWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9NYWx0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL01hcmllaGFtbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL01pbnNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTW9uYWNvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTW9zY293IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTmljb3NpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL09zbG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9QYXJpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1BvZGdvcmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1ByYWd1ZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1JpZ2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Sb21lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FtYXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FuX01hcmlubyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1NhcmFqZXZvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FyYXRvdiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1NpbWZlcm9wb2wiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Ta29wamUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Tb2ZpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1N0b2NraG9sbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1RhbGxpbm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9UaXJhbmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9UaXJhc3BvbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1VseWFub3ZzayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1V6aGdvcm9kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmFkdXoiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9WYXRpY2FuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmllbm5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmlsbml1cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1ZvbGdvZ3JhZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1dhcnNhdyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1phZ3JlYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1phcG9yb3poeWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9adXJpY2giLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9BbnRhbmFuYXJpdm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9DaGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9DaHJpc3RtYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9Db2NvcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL0NvbW9ybyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL0tlcmd1ZWxlbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01haGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9NYWxkaXZlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01hdXJpdGl1cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01heW90dGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9SZXVuaW9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NZXhpY28vQmFqYU5vcnRlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NZXhpY28vQmFqYVN1ciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTWV4aWNvL0dlbmVyYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvQXBpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9BdWNrbGFuZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Cb3VnYWludmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvQ2hhdGhhbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9DaHV1ayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9FYXN0ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRWZhdGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRW5kZXJidXJ5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0Zha2FvZm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRmlqaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9GdW5hZnV0aSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HYWxhcGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvR2FtYmllciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HdWFkYWxjYW5hbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HdWFtIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0hvbm9sdWx1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0pvaG5zdG9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0thbnRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9LaXJpdGltYXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0tvc3JhZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ld2FqYWxlaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTWFqdXJvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL01hcnF1ZXNhcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9NaWR3YXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTmF1cnUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTml1ZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ob3Jmb2xrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL05vdW1lYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9QYWdvX1BhZ28iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUGFsYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUGl0Y2Fpcm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUG9obnBlaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Qb25hcGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUG9ydF9Nb3Jlc2J5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1Jhcm90b25nYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9TYWlwYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvU2Ftb2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvVGFoaXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1RhcmF3YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ub25nYXRhcHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvVHJ1ayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9XYWtlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1dhbGxpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9ZYXAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0FsYXNrYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvQWxldXRpYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0FyaXpvbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0NlbnRyYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0Vhc3QtSW5kaWFuYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvRWFzdGVybiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvSGF3YWlpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9JbmRpYW5hLVN0YXJrZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvTWljaGlnYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL01vdW50YWluIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9QYWNpZmljIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9TYW1vYSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAieHotbGlic0A1LjguMy1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJ4ei1saWJzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS94ei1saWJzQDUuOC4zLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWFlNjU4YTVmMTMyYTA5MSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI1LjguMy1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAieHoiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiNS44LjMtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICIwQlNEIiwKICAgICAgICAgICAgIlB1YmxpYy1Eb21haW4iLAogICAgICAgICAgICAiTEdQTC0yLjEtb3ItbGF0ZXIiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NGM5MmM1YmUwYzViZWY0MDRlOTNjODgwZWJhOTAzN2E5YjE0NzM0NyIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmx6bWEuc28uNSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmx6bWEuc28uNS44LjMiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInpsaWJAMS4zLjItcjAiLAogICAgICAgICAgIk5hbWUiOiAiemxpYiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImUzNzA1NGEyOTgyZDZjMTYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInpsaWIiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWmxpYiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpkZDRjM2QxMDJhY2FlZjJhNzFhMTQ5NTk1MWQ1NWZhYmM4NjgwNjEzIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliei5zby4xIiwKICAgICAgICAgICAgInVzci9saWIvbGliei5zby4xLjMuMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfQogICAgICBdLAogICAgICAiVnVsbmVyYWJpbGl0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJWdWxuZXJhYmlsaXR5SUQiOiAiQ1ZFLTIwMjYtODUwOTEiLAogICAgICAgICAgIlBrZ0lEIjogInpsaWJAMS4zLjItcjAiLAogICAgICAgICAgIlBrZ05hbWUiOiAiemxpYiIsCiAgICAgICAgICAiUGtnSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImUzNzA1NGEyOTgyZDZjMTYiCiAgICAgICAgICB9LAogICAgICAgICAgIkluc3RhbGxlZFZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkZpeGVkVmVyc2lvbiI6ICIxLjMuMi1yMSIsCiAgICAgICAgICAiU3RhdHVzIjogImZpeGVkIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIlByaW1hcnlVUkwiOiAiaHR0cHM6Ly9hdmQuYXF1YXNlYy5jb20vbnZkL2N2ZS0yMDI2LTg1MDkxIiwKICAgICAgICAgICJEYXRhU291cmNlIjogewogICAgICAgICAgICAiSUQiOiAiYWxwaW5lIiwKICAgICAgICAgICAgIk5hbWUiOiAiQWxwaW5lIFNlY2RiIiwKICAgICAgICAgICAgIlVSTCI6ICJodHRwczovL3NlY2RiLmFscGluZWxpbnV4Lm9yZy8iCiAgICAgICAgICB9LAogICAgICAgICAgIkZpbmdlcnByaW50IjogInNoYTI1NjpkNzNjMDFiMDIwYzU1YWNjMTc0YTNmZGU0N2M4YWY2ZjU2MzhjNThjNzE4OWM4MTdlZGQ2ODYyMDI5ZjZjNWY1IiwKICAgICAgICAgICJUaXRsZSI6ICJ6bGliIHZlcnNpb25zIDEuMy4xLjIgdGhyb3VnaCAxLjMuMiBjb250YWluIGEgaGVhcCBidWZmZXIgb3ZlcmZsb3cgdnVsIC4uLiIsCiAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiemxpYiB2ZXJzaW9ucyAxLjMuMS4yIHRocm91Z2ggMS4zLjIgY29udGFpbiBhIGhlYXAgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGd6X3ZhY2F0ZSgpIGZ1bmN0aW9uIHdoZW4gcHJvY2Vzc2luZyBub24tYmxvY2tpbmcgZ3p3cml0ZSgpIG9wZXJhdGlvbnMgd2l0aCBzdGFsZSBleHRlcm5hbCBidWZmZXIgcG9pbnRlcnMuIEF0dGFja2VycyBjYW4gdHJpZ2dlciB0aGUgb3ZlcmZsb3cgYnkgY2FsbGluZyBnenByaW50ZigpIG9yIGd6dnByaW50ZigpIGFmdGVyIGEgd3JpdGUgc3RhbGwsIGNhdXNpbmcgYW4gdW5jaGVja2VkIG1lbW1vdmUoKSB0byB3cml0ZSBiZXlvbmQgdGhlIGludGVybmFsIGlucHV0IGJ1ZmZlciBib3VuZGFyeS4iLAogICAgICAgICAgIlNldmVyaXR5IjogIk1FRElVTSIsCiAgICAgICAgICAiQ3dlSURzIjogWwogICAgICAgICAgICAiQ1dFLTc4NyIKICAgICAgICAgIF0sCiAgICAgICAgICAiVmVuZG9yU2V2ZXJpdHkiOiB7CiAgICAgICAgICAgICJ1YnVudHUiOiAyCiAgICAgICAgICB9LAogICAgICAgICAgIlJlZmVyZW5jZXMiOiBbCiAgICAgICAgICAgICJodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aGVzbWFydHNoYWRvdy9lMGI5NDgxNzkyYWZiN2MzMWU4NmZlZTFmZjA4NDQ5MCIsCiAgICAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vbWFkbGVyL3psaWIiLAogICAgICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL21hZGxlci96bGliL2Jsb2IvdjEuMy4yL2d6d3JpdGUuYyNMMzkzIiwKICAgICAgICAgICAgImh0dHBzOi8vd3d3LmN2ZS5vcmcvQ1ZFUmVjb3JkP2lkPUNWRS0yMDI2LTg1MDkxIiwKICAgICAgICAgICAgImh0dHBzOi8vd3d3LnZ1bG5jaGVjay5jb20vYWR2aXNvcmllcy96bGliLTEuMy4xLjItdGhyb3VnaC0xLjMuMi1oZWFwLWJ1ZmZlci1vdmVyZmxvdy12aWEtZ3otdmFjYXRlIgogICAgICAgICAgXSwKICAgICAgICAgICJQdWJsaXNoZWREYXRlIjogIjIwMjYtMDktMDNUMTM6MDY6MjAuNTczWiIsCiAgICAgICAgICAiTGFzdE1vZGlmaWVkRGF0ZSI6ICIyMDI2LTA5LTA5VDIwOjQxOjA3LjEyM1oiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiVGFyZ2V0IjogIlB5dGhvbiIsCiAgICAgICJDbGFzcyI6ICJsYW5nLXBrZ3MiLAogICAgICAiVHlwZSI6ICJweXRob24tcGtnIiwKICAgICAgIlBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogIlB5SldUIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS9weWp3dEAyLjE1LjEiLAogICAgICAgICAgICAiVUlEIjogImQzZjVmOWE0MjFiOGFiYzkiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi4xNS4xIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIgogICAgICAgICAgfSwKICAgICAgICAgICJGaWxlUGF0aCI6ICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL3B5and0LTIuMTUuMS5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogImNmZmkiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzpweXBpL2NmZmlAMi4xLjEiLAogICAgICAgICAgICAiVUlEIjogIjIxMDQyZTJmMzdlMzNjMDUiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi4xLjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlULTAiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9jZmZpLTIuMS4xLmRpc3QtaW5mby9NRVRBREFUQSIsCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJweXRob24tcGtnIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIk5hbWUiOiAiY3J5cHRvZ3JhcGh5IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS9jcnlwdG9ncmFwaHlANTAuMC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkY2IzZGY2MzgzZmUyYTYwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjUwLjAuMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJBcGFjaGUtMi4wIE9SIEJTRC0zLUNsYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIgogICAgICAgICAgfSwKICAgICAgICAgICJGaWxlUGF0aCI6ICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL2NyeXB0b2dyYXBoeS01MC4wLjEuZGlzdC1pbmZvL01FVEFEQVRBIiwKICAgICAgICAgICJBbmFseXplZEJ5IjogInB5dGhvbi1wa2ciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiTmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOnB5cGkvaW5mb3JtZWQtZGVjaXNpb25AMC4yLjAiLAogICAgICAgICAgICAiVUlEIjogIjc5ODlmMmFmYWU4ZmY1NjgiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMC4yLjAiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9pbmZvcm1lZF9kZWNpc2lvbi0wLjIuMC5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogInB5Y3BhcnNlciIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOnB5cGkvcHljcGFyc2VyQDMuMCIsCiAgICAgICAgICAgICJVSUQiOiAiZTVhNGQwM2YxNWE2OTVmZiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ODJmZjE3YjU1NWQ5MTA5NmRkMzI4ZWIxZTgyOWRhYWViYTlhNDhkNzc1NzE0M2QwYjk3YzM1YTcyMWY2ZmI4NyIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgICAgICB9LAogICAgICAgICAgIkZpbGVQYXRoIjogIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvcHljcGFyc2VyLTMuMC5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogIndhaXRyZXNzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS93YWl0cmVzc0AzLjAuMiIsCiAgICAgICAgICAgICJVSUQiOiAiODA2ZTIxOGUxYzFlODVmIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuMC4yIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIlpQTC0yLjEiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy93YWl0cmVzcy0zLjAuMi5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9CiAgICAgIF0KICAgIH0KICBdCn0K" + }, + { + "digest": "sha256:eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38", + "media_type": "text/plain", + "content_base64": "IiIiUHJlLW9wZW4gc2NoZW1hL2ludGVncml0eS9jb3VudCBwcm9vZjsgc3RkbGliIG9ubHksIG5ldmVyIGNvbnN0cnVjdHMgU3RvcmUuIiIiCmltcG9ydCBhcmdwYXJzZQppbXBvcnQganNvbgpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKaW1wb3J0IHNxbGl0ZTMKCgpkZWYgaW5zcGVjdF9yZWFkb25seShwYXRoKToKICAgIHBhdGggPSBQYXRoKHBhdGgpCiAgICBpZiBub3QgcGF0aC5pc19maWxlKCkgb3IgcGF0aC5pc19zeW1saW5rKCk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXhpc3Rpbmcgbm9uc3ltbGluayBwcml2YXRlIGRhdGFiYXNlIHJlcXVpcmVkJykKICAgIHdpdGggc3FsaXRlMy5jb25uZWN0KHBhdGgucmVzb2x2ZSgpLmFzX3VyaSgpICsgJz9tb2RlPXJvJywgdXJpPVRydWUsIHRpbWVvdXQ9NSkgYXMgZGI6CiAgICAgICAgZGIuZXhlY3V0ZSgnUFJBR01BIHF1ZXJ5X29ubHk9T04nKQogICAgICAgIGRiLmV4ZWN1dGUoJ0JFR0lOJykKICAgICAgICB2ZXJzaW9uID0gZGIuZXhlY3V0ZSgnUFJBR01BIHVzZXJfdmVyc2lvbicpLmZldGNob25lKClbMF0KICAgICAgICBpZiB2ZXJzaW9uICE9IDU6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3ByZS1vcGVuIGRhdGFiYXNlIGlzIG5vdCBzY2hlbWE1OyByZWZ1c2UgbWlncmF0aW9uJykKICAgICAgICBpZiBkYi5leGVjdXRlKCdQUkFHTUEgaW50ZWdyaXR5X2NoZWNrJykuZmV0Y2hhbGwoKSAhPSBbKCdvaycsKV06CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3JlYWQtb25seSBpbnRlZ3JpdHkgY2hlY2sgcmVmdXNlZCcpCiAgICAgICAgbGlmZWN5Y2xlID0ge25hbWU6IGRiLmV4ZWN1dGUoJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcgKyB0YWJsZSkuZmV0Y2hvbmUoKVswXQogICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSwgdGFibGUgaW4gKCgncmVjb3JkcycsICdsaWZlY3ljbGVfcmVjb3JkcycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZXZlbnRzJywgJ2xpZmVjeWNsZV9ldmVudHMnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3BlbmRpbmcnLCAnbGlmZWN5Y2xlX3BlbmRpbmcnKSl9CiAgICAgICAgcmVzdWx0ID0geydzY2hlbWFfdmVyc2lvbic6IHZlcnNpb24sICdsaWZlY3ljbGUnOiBsaWZlY3ljbGUsCiAgICAgICAgICAgICAgICAgICdvdXRib3gnOiBkaWN0KGRiLmV4ZWN1dGUoJ1NFTEVDVCBzdGF0ZSxDT1VOVCgqKSBGUk9NIG91dGJveCBHUk9VUCBCWSBzdGF0ZScpKSwKICAgICAgICAgICAgICAgICAgJ3N1Ym1pc3Npb25zJzogZGljdChkYi5leGVjdXRlKCdTRUxFQ1Qgc3RhdGUsQ09VTlQoKikgRlJPTSBzdWJtaXNzaW9ucyBHUk9VUCBCWSBzdGF0ZScpKSwKICAgICAgICAgICAgICAgICAgJ2ludGVncml0eSc6ICdvaycsICdyZWFkX29ubHlfcHJlX29wZW4nOiBUcnVlLCAnc3RvcmVfY29uc3RydWN0ZWQnOiBGYWxzZX0KICAgICAgICBkYi5yb2xsYmFjaygpCiAgICByZXR1cm4gcmVzdWx0CgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPV9fZG9jX18pCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRiJywgdHlwZT1QYXRoLCByZXF1aXJlZD1UcnVlKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIHRyeToKICAgICAgICBwcmludChqc29uLmR1bXBzKGluc3BlY3RfcmVhZG9ubHkoYXJncy5kYiksIHNvcnRfa2V5cz1UcnVlKSkKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgncmVhZC1vbmx5IHNjaGVtYTUvaW50ZWdyaXR5L2NvdW50IGdhdGUgcmVmdXNlZDsgbm8gU3RvcmUvYWRtaW4gb3BlbicpIGZyb20gTm9uZQo=" + }, + { + "digest": "sha256:042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369", + "media_type": "application/json", + "content_base64": "ewogICJjb25maWdtYXAiOiB7CiAgICAiYXBpVmVyc2lvbiI6ICJ2MSIsCiAgICAiaW1tdXRhYmxlIjogdHJ1ZSwKICAgICJraW5kIjogIkNvbmZpZ01hcCIsCiAgICAibWV0YWRhdGEiOiB7CiAgICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgICAiYXJnb2NkLmFyZ29wcm9qLmlvL3RyYWNraW5nLWlkIjogImluZm9ybWVkLWRlY2lzaW9uOi9Db25maWdNYXA6aW5mb3JtZWQtZGVjaXNpb24vaW5mb3JtZWQtZGVjaXNpb24tcnVudGltZS02YzIyMTg3OGQwNTEiLAogICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi5jb3Vsb21iLnNvY2lhbC9hZG1pc3Npb24iOiAiYXBwcm92ZWQ7IElORkQtV1AtMDAwNyBjdXRvdmVyIgogICAgICB9LAogICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MSIsCiAgICAgICJuYW1lc3BhY2UiOiAiaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAidWlkIjogIjkwMTEzZDJkLTU0ZDktNGU4Mi1iMWQzLTkwYjQ5ZWJlZDJiNSIKICAgIH0sCiAgICAiY2Fub25pY2FsX2RhdGFfc2hhMjU2IjogIjhlYzQ2MmQxMjM0NzU0OGY1MDZlZWViZjFlM2M3Y2M0NzY0ODAxOWM4YTc4MzgwNGQwOWJjYzc5YjBmMjJhZjYiCiAgfSwKICAicHZjIjogewogICAgImFwaVZlcnNpb24iOiAidjEiLAogICAgImtpbmQiOiAiUGVyc2lzdGVudFZvbHVtZUNsYWltIiwKICAgICJtZXRhZGF0YSI6IHsKICAgICAgImFubm90YXRpb25zIjogewogICAgICAgICJhcmdvY2QuYXJnb3Byb2ouaW8vdHJhY2tpbmctaWQiOiAiaW5mb3JtZWQtZGVjaXNpb246L1BlcnNpc3RlbnRWb2x1bWVDbGFpbTppbmZvcm1lZC1kZWNpc2lvbi9pbmZvcm1lZC1kZWNpc2lvbi1kYXRhIiwKICAgICAgICAiaW5mb3JtZWQtZGVjaXNpb24uY291bG9tYi5zb2NpYWwvYWRtaXNzaW9uIjogImFwcHJvdmVkOyBJTkZELVdQLTAwMDcgY3V0b3ZlciIsCiAgICAgICAgInB2Lmt1YmVybmV0ZXMuaW8vYmluZC1jb21wbGV0ZWQiOiAieWVzIiwKICAgICAgICAicHYua3ViZXJuZXRlcy5pby9ib3VuZC1ieS1jb250cm9sbGVyIjogInllcyIsCiAgICAgICAgInZvbHVtZS5iZXRhLmt1YmVybmV0ZXMuaW8vc3RvcmFnZS1wcm92aXNpb25lciI6ICJyYW5jaGVyLmlvL2xvY2FsLXBhdGgiLAogICAgICAgICJ2b2x1bWUua3ViZXJuZXRlcy5pby9zZWxlY3RlZC1ub2RlIjogIjIzOS42Mi4yMDUuOTIuaG9zdC5zZWN1cmVzZXJ2ZXIubmV0IiwKICAgICAgICAidm9sdW1lLmt1YmVybmV0ZXMuaW8vc3RvcmFnZS1wcm92aXNpb25lciI6ICJyYW5jaGVyLmlvL2xvY2FsLXBhdGgiCiAgICAgIH0sCiAgICAgICJmaW5hbGl6ZXJzIjogWwogICAgICAgICJrdWJlcm5ldGVzLmlvL3B2Yy1wcm90ZWN0aW9uIgogICAgICBdLAogICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1kYXRhIiwKICAgICAgIm5hbWVzcGFjZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICJ1aWQiOiAiZDgwYjI1YjEtMTQxYS00NDFiLWIyMDUtOThmYTJmZDk4YjdjIgogICAgfSwKICAgICJzcGVjIjogewogICAgICAiYWNjZXNzTW9kZXMiOiBbCiAgICAgICAgIlJlYWRXcml0ZU9uY2UiCiAgICAgIF0sCiAgICAgICJyZXNvdXJjZXMiOiB7CiAgICAgICAgInJlcXVlc3RzIjogewogICAgICAgICAgInN0b3JhZ2UiOiAiMUdpIgogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VDbGFzc05hbWUiOiAibG9jYWwtcGF0aCIsCiAgICAgICJ2b2x1bWVNb2RlIjogIkZpbGVzeXN0ZW0iLAogICAgICAidm9sdW1lTmFtZSI6ICJwdmMtZDgwYjI1YjEtMTQxYS00NDFiLWIyMDUtOThmYTJmZDk4YjdjIgogICAgfQogIH0sCiAgInB2Y19waGFzZSI6ICJCb3VuZCIKfQo=" + }, + { + "digest": "sha256:2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc", + "media_type": "text/markdown", + "content_base64": "IyBQcm90ZWN0ZWQgbmF0aXZlIGJhY2t1cC9yZXN0b3JlIGFuZCBpbWFnZS1vbmx5IHJlbGVhc2UgcHJvdG9jb2wKClByZXBhcmVkIHByb3RvY29sIGZvciBgSU5GRC1XUC0wMDA5LVQwNC9wdXJwb3NlLW92ZXJsYXktdjFgLiBObyBhY3R1YWwgbmF0aXZlIGJhY2t1cCwgZGF0YSBleHBvcnQsIHJlc3RvcmUsIHdvcmtsb2FkIGNoYW5nZSBvciBhcHByb3ZhbCBpcyByZWNvcmRlZCBoZXJlLiBDYW5kaWRhdGUgcmVnaXN0cnkgaW1hZ2UgaWRlbnRpdHkgcmVtYWlucyBhIHByZXJlcXVpc2l0ZTsgb25seSBhZnRlciBhY3R1YWwgYXJ0aWZhY3QgcHJvb2YgbWF5IHRoZSBmb3VuZGVyIGFwcHJvdmUgb25lIGV4YWN0IGNvbmRpdGlvbmFsIHByb3RvY29sL3JvbGxvdXQgcGFja2V0LiBUaGUgY29uZmlnLW9ubHk3ZGI4NDg1IGFwcHJvdmFsIGlzIG91dHNpZGUgdGhpcyBzY29wZS4KCiMjIFByZWNvbmRpdGlvbnMgYW5kIHByb3RlY3RlZCBjdXN0b2R5CgpGcmVlemUgZXhhY3QgY2FuZGlkYXRlIGFuZCBwcmlvcjdmNWM2Y2IgaW1hZ2UgZGlnZXN0cywgc291cmNlL2luc3RhbGxlZCBwb2xpY3kgaGFzaGVzLCBjdXJyZW50IG1hbnVhbGx5IG1hbmFnZWQgQXJnbyBBcHBsaWNhdGlvbi9yZXZpc2lvbiwgcnVudGltZSBDb25maWdNYXA2YzIyMTg3OGQwNTEsIERlcGxveW1lbnQgVUlEL3RlbXBsYXRlL3NwZWMsIHNjaGVtYTUsIHBvbGljeSBwYWNrYWdlIHBpbnMsIGRhdGFiYXNlIHBhdGggYC9kYXRhL3ByaXZhdGUvcmV2aWV3LnNxbGl0ZWAsIFBWQyBiaW5kaW5nLCByZXBsaWNhczEvUmVjcmVhdGUgYW5kIHN0YWJsZSBrZXlzIGZvciBpbnRlbmRlZCB2ZXJpZmljYXRpb24uIENvbmZpcm0gbm8gY29uY3VycmVudCB3cml0ZXIgb3IgY3VzdG9keSBjaGFuZ2UuIFVzZSBmaXhlZCBtZXRhZGF0YTsgbmV2ZXIgZmV0Y2ggU2VjcmV0IG9iamVjdHMgb3IgdG9rZW4gdmFsdWVzLiBBIGNoYW5nZWQgaW1hZ2UvY29uZmlnL3NjaGVtYS9vd25lciBpbnZhbGlkYXRlcyB0aGUgcGFja2V0LiBGcmVzaCByZXNvdXJjZXMvaGVhZHJvb20gYW5kIGV4YWN0IHNvdXJjZS9uYXRpdmUgc2VydmVyLWRyeS1ydW4vZGlmZiByZW1haW4gcmVxdWlyZWQuCgpCYWNrdXBzIGFyZSBwcml2YXRlIGV2aWRlbmNlIGNvbnRhaW5pbmcgcmVhbCBkZWNpc2lvbiByZWNvcmRzLCBub3QgbG9ncyBvciBwYWNrZXQgYXR0YWNobWVudHMuIEFsbG9jYXRlIGEgdW5pcXVlIGJhY2t1cCBkaXJlY3RvcnkgdW5kZXIgZXhpc3RpbmcgcHJvdGVjdGVkIFBWQyBjdXN0b2R5LCBvd25lZDEwMDAxLCBtb2RlMDcwMCwgc25hcHNob3QgZmlsZTA2MDAsIG5vIHN5bWxpbmsvaGFyZGxpbmsvcmV1c2VkIG91dHB1dCBwYXRoLiBBbiBvZmYtY2x1c3RlciBjb3B5IGJlbG9uZ3Mgb25seSBpbiB0aGUgYWxyZWFkeSBlc3RhYmxpc2hlZCBpZ25vcmVkIGAucHJpdmF0ZS1iYWNrdXBzLzx1bmlxdWUtdHJpYWwtZGlyZWN0b3J5PmAgY3VzdG9keSB3aXRoMDcwMC8wNjAwIHBlcm1pc3Npb25zOyBubyBHaXQsIFN0YXRlSHViLCBwdWJsaWMgb2JqZWN0IHN0b3JlIG9yIHRlcm1pbmFsLWNvbnRlbnQgZHVtcC4gUmVjb3JkIG9ubHkgc2NoZW1hLCBpbnRlZ3JpdHkgcGFzcy9mYWlsLCBib3VuZGVkIHRhYmxlL3N0YXRlIGNvdW50cyBhbmQgcHJvdGVjdGVkIHJlY2VpcHQgaWRlbnRpZmllcjsgcmV0YWluIGJ5dGUgZGlnZXN0cyBpbiBwcm90ZWN0ZWQgY3VzdG9keSBpZiBuZWVkZWQgZm9yIGludGVybmFsIGNvcHkgaWRlbnRpdHkuIE5vIGNyZWRlbnRpYWwsIHJlY29yZCBwYXlsb2FkIG9yIHRva2VuIGZpbmdlcnByaW50IGVudGVycyBwdWJsaWMgZXZpZGVuY2UuCgojIyBBcHByb3ZlZCBvbmxpbmUgY29tcGF0aWJpbGl0eSBkcmlsbAoKV2l0aGluIHRoZSBleHBsaWNpdCBmb3VuZGVyLWFwcHJvdmVkIGFjdGlvbiwgcnVuIHRoZSBleGlzdGluZyBiYXNlIGltYWdlJ3MgYGluZm9ybWVkLWRlY2lzaW9uLWFkbWluIGJhY2t1cCAtLWRiIC9kYXRhL3ByaXZhdGUvcmV2aWV3LnNxbGl0ZSAtLW91dHB1dCA8bmV3LXByaXZhdGUtc25hcHNob3Q+YCBpbiB0aGUgYWN0dWFsIHNlcnZpbmcgd29ya2xvYWQuIFRoaXMgdXNlcyBTUUxpdGUncyBiYWNrdXAgQVBJIGZvciBhIHRyYW5zYWN0aW9uYWxseSBjb25zaXN0ZW50IHNuYXBzaG90OyBjb3B5aW5nIGEgbGl2ZSBtYWluIGRhdGFiYXNlIHdoaWxlIGlnbm9yaW5nIFdBTCBpcyBwcm9oaWJpdGVkLiBTdXBwcmVzcyByYXcgZmFpbHVyZXMvb3V0cHV0IGFuZCByZXRhaW4gb25seSBzYW5pdGl6ZWQgc3RhdHVzLiBPYnNlcnZlIHNjaGVtYS9pbnRlZ3JpdHkgYW5kIGNvdW50LW9ubHkgbWV0YWRhdGEgZnJvbSB0aGUgcmVzdWx0aW5nIHNuYXBzaG90LCBub3QgcmVjb3JkIGNvbnRlbnQuCgpUcmFuc2ZlciB0aGF0IGNvbnNpc3RlbnQgc25hcHNob3Qgb25seSBpbnRvIHByb3RlY3RlZCBvZmYtY2x1c3RlciBjdXN0b2R5IHRocm91Z2ggdGhlIGV4aXN0aW5nIGF1dGhvcml6ZWQgb3BlcmF0b3IgbGFuZS4gVGhlIGNvcHkgaXMgcmVhbCBwcm9kdWN0aW9uIGRhdGEgZXZlbiBpbiBidWlsZCBtb2RlLiBWZXJpZnkgcHJpdmF0ZSBwZXJtaXNzaW9ucywgdW5pcXVlIGlkZW50aXR5IGFuZCBwcm90ZWN0ZWQgaW50ZXJuYWwgZGlnZXN0IGFncmVlbWVudC4gRG8gbm90IGV4cG9ydCBtb3VudGVkIHdvcmtsb2FkIGNyZWRlbnRpYWxzIG9yIGRpcmVjdG9yeSB0cmVlczsgY29weSBvbmx5IHRoZSBleGFjdCBzbmFwc2hvdC4KCkNyZWF0ZSBhIHNlcGFyYXRlIHByaXZhdGUgZGlzcG9zYWJsZSByZXN0b3JlIHZvbHVtZS9kaXJlY3Rvcnk7IHJldGFpbiB0aGUgb3JpZ2luYWwgc25hcHNob3QgdW5jaGFuZ2VkLiBSdW4gdGhlIGV4YWN0IHB1Ymxpc2hlZCBjYW5kaWRhdGUgd2l0aCBuZXR3b3JrIGRpc2FibGVkLCBubyBwcm9kdWN0aW9uIENvbmZpZ01hcC90b2tlbiBtb3VudHMsIHJlYWQtb25seSBpbWFnZSBhbmQgb25seSB0aGF0IGlzb2xhdGVkIHZvbHVtZSB3cml0YWJsZS4gT3ZlcnJpZGUgdGhlIHNlcnZpY2UgZW50cnlwb2ludCB3aXRoIHRoZSBvd25lcidzIGNvdW50LW9ubHkgYWRtaW5pc3RyYXRpdmUgaW5zcGVjdGlvbi9pbnRlZ3JpdHkgY2hlY2s7IGRvIG5vdCBzdGFydCBIVFRQIGxpc3RlbmVycywgYXVkaXQgZGVsaXZlcnksIHJlcXVlc3RlciBleGNoYW5nZXMgb3IgYXBwcm92YWwgb3BlcmF0aW9ucy4gVGhlIGN1cnJlbnQgY2FuZGlkYXRlIGNoYW5nZXMgcG9saWN5LnB5IG9ubHkgYW5kIHJldGFpbnMgdGhlIHNjaGVtYS9zdG9yZSBtb2R1bGUgYnl0ZXM7IHN0aWxsIHByb3ZlIHNjaGVtYTUsIFNRTGl0ZSBpbnRlZ3JpdHkgYW5kIGV4YWN0IGJvdW5kZWQgY291bnRzIGJlZm9yZS9hZnRlciBvcGVuaW5nIHRoZSByZXN0b3JlZCBjb3B5LiBSZWZ1c2UgYW55IG1pZ3JhdGlvbi9kb3duZ3JhZGUsIGxvc3QvY2hhbmdlZCBjb3VudHMsIHVuZXhwZWN0ZWQgd3JpdGUgY2xhc3Mgb3IgdW5rbm93biBvdXRjb21lLiBLZWVwIHBlbmRpbmcvdW5jZXJ0YWluIHN1Ym1pc3Npb24gYW5kIG91dGJveCBzdGF0ZXM7IG5ldmVyIHJlcGxheSwgZGlzY2FyZCBvciBtYXJrIHRoZW0gZGVsaXZlcmVkIHRvIGdyZWVuIHRoZSBkcmlsbC4gQ2xlYW51cCBvbmx5IHRoZSBkaXNwb3NhYmxlIGNvcHkvdm9sdW1lIGFmdGVyIHZlcmlmaWVkIHJlY2VpcHQ7IHJldGFpbiB0aGUgb3JpZ2luYWwgcHJvdGVjdGVkIGJhY2t1cCBmb3IgdGhlIGFwcHJvdmVkIHJlY292ZXJ5IGludGVydmFsLgoKVGhpcyBzdGVwIGlzIGFjdHVhbCBuYXRpdmUtZGF0YSBjb21wYXRpYmlsaXR5IGV2aWRlbmNlIG9uY2UgcGVyZm9ybWVkLiBJdHMgcHJldmlvdXMgc3ludGhldGljIGZpeHR1cmUgY2hlY2tzIHJlbWFpbiBtZWNoYW5pc20gZXZpZGVuY2UgYW5kIGNhbm5vdCBiZSByZW5hbWVkIG5hdGl2ZSBzdWNjZXNzLiBBIGZhaWxlZCBkcmlsbCBzdG9wcyByb2xsb3V0IGFuZCByZW1haW5zIGEgZmFpbGVkL3VudmVyaWZpZWQgb3V0Y29tZSBpbiB0aGUgc2FtZSB0cmlhbC4KCiMjIEZyZXNoIGN1dG92ZXIgc25hcHNob3QgYW5kIHNpbmdsZS13cml0ZXIgcm9sbG91dAoKQWZ0ZXIgc3VjY2Vzc2Z1bCBhY3R1YWwtZGF0YSBjb21wYXRpYmlsaXR5IGNoZWNrcywgY3JlYXRlIGFub3RoZXIgdW5pcXVlIFNRTGl0ZS1jb25zaXN0ZW50IG9ubGluZSBzbmFwc2hvdCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGltYWdlIGN1dG92ZXIsIHJldGFpbmluZyBpdHMgcG9pbnQtaW4tdGltZSBzY2hlbWEvaW50ZWdyaXR5L2NvdW50IHJlY2VpcHQuIFRoaXMgaXMgYW4gb25saW5lIHRyYW5zYWN0aW9uYWwgc25hcHNob3QsIG5vdCBhIGNsYWltIHRoYXQgZGlzcGF0Y2hlcnMgb3IgaHVtYW4gd3JpdGVzIHdlcmUgcXVpZXNjZWQuIEV2ZXJ5IGxhdGVyIGNvbW1pdHRlZCByZWNvcmQgcmVtYWlucyBpbiB0aGUgbGl2ZSBkYXRhYmFzZTsgc2FtZS1zY2hlbWEgcm9sbGJhY2sgcmV0YWlucyB0aGF0IGRhdGFiYXNlIGFuZCBuZXZlciByZXN0b3JlcyB0aGUgZWFybGllciBzbmFwc2hvdCBvdmVyIGl0LiBUaGUgbmFycm93IGltYWdlLW9ubHkgdXBkYXRlIGRvZXMgbm90IG5lZWQgZGlzcGF0Y2hlci9jb25maWd1cmF0aW9uL1BWQy90ZW1wb3JhcnktcG9kIGNoYW5nZXMgb3IgYSBzY2hlbWEgY3V0b3Zlci4gSWYgZnJlc2ggdmVyaWZpY2F0aW9uIHNob3dzIGEgbWlncmF0aW9uIG9yIGFueSBkYXRhLXJlc3RvcmF0aW9uIHJlcXVpcmVtZW50LCBzdG9wIGFuZCByZWZpbmUgdGhlIHByb3Bvc2FsIHJhdGhlciB0aGFuIGFwcGx5aW5nIHRoaXMgcHJvdG9jb2wuCgpUaGUgZXhpc3RpbmcgUmVjcmVhdGUgcm9sbG91dCBkcmFpbnMvc3RvcHMgdGhlIHNpbmdsZSBvbGQgd3JpdGVyIGJlZm9yZSBzdGFydGluZyB0aGUgbmV3IGltYWdlIG9uIHRoZSBzYW1lIFBWQzsgdGhlIGluaGVyaXRlZCBzaW5nbGUtd3JpdGVyIGxvY2sgaW5kZXBlbmRlbnRseSByZWZ1c2VzIGNvbmN1cnJlbnQgc2VydmluZyBwcm9jZXNzZXMuIERvIG5vdCBhZGQgYW4gYWRtaW4gcG9kLCBzY2FsZS10by16ZXJvLCBkaXNwYXRjaGVyIHN0b3AsIG5ldHdvcmstcG9saWN5IHJld3JpdGUgb3Igc25hcHNob3Qgb3ZlcndyaXRlIGFzIGFuIGltcHJvdmlzZWQgaW1hZ2Utb25seSBzdGVwLiBUaGUgZXhpc3Rpbmcgb3duZXIgYWRtaW4gYmFja3VwIG9wZXJhdGlvbiBydW5zIGluc2lkZSB0aGUgYWRtaXR0ZWQgc2VydmluZyB3b3JrbG9hZCwgYW5kIGl0cyBzZXBhcmF0ZSBwcm90ZWN0ZWQgcmVzdG9yZSBkcmlsbCBydW5zIG9mZi1jbHVzdGVyIHdpdGggbmV0d29yayBkaXNhYmxlZCBhbmQgbm8gd29ya2xvYWQgY3JlZGVudGlhbHMuIFRob3NlIGV4YWN0IGN1c3RvZHkgb3BlcmF0aW9ucyBtdXN0IGJlIGVudW1lcmF0ZWQgaW4gdGhlIGZvdW5kZXIgcGFja2V0IGFsb25nc2lkZSB0aGUgb25lIERlcGxveW1lbnQgaW1hZ2UgY2hhbmdlLgoKT25jZSBiYWNrdXAvY29tcGF0aWJpbGl0eS9wcmVmbGlnaHQgZ2F0ZXMgcGFzcywgbWFudWFsbHkgcGluIHRoZSBleGlzdGluZyBBcmdvIEFwcGxpY2F0aW9uIHRvIHRoZSBleGFjdCByZXZpZXdlZCBzb3VyY2UgcmV2aXNpb24gYW5kIHN5bmMgb25seSBEZXBsb3ltZW50L2luZm9ybWVkLWRlY2lzaW9uIHdpdGggcHJ1bmUgZmFsc2UsIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW1tdXRhYmxlIHJ1bnRpbWUgQ29uZmlnTWFwIGFuZCBhbGwgb3RoZXIgcmVzb3VyY2VzLiBUaGUgc291cmNlIHBhdGNoIGNoYW5nZXMgb25seSB0aGUgaW1hZ2UgaW4gYWRtaXNzaW9uL3JlbmRlcmVkIERlcGxveW1lbnQ7IG5vIFNlY3JldCwgUFZDLCBwb2xpY3ksIGRhdGFiYXNlIG9yIGRpc3BhdGNoZXIgY2hhbmdlIGlzIGluY2x1ZGVkIHVubGVzcyBzZXBhcmF0ZWx5IGVudW1lcmF0ZWQgaW4gdGhlIGZpbmFsIHByb3Bvc2FsLiBPYnNlcnZlIGZpdmUtbWludXRlIHJlYWRpbmVzcyBhbmQgZXhhY3QgaW1hZ2UvY29uZmlnL3NjaGVtYS9waW5zLiBWZXJpZnkgbmF0aXZlIGxpZmVjeWNsZSBiaW5kaW5nIHVzaW5nIHN0YWJsZSBrZXlzIGFuZCBhbiBpc29sYXRlZCBpbnN0YWxsZWQtY2xpZW50IHByb2JlIGJhc2VkIG9uIGEgcmVhbCBwcm92aWRlciByZXNwb25zZSBjb250YW1pbmF0ZWQgd2l0aCBhZHZpc29yeSBwdXJwb3NlOyBwcm92ZSByZWZ1c2FsIGJlZm9yZSBhbnkgd3JpdGUuIERvIG5vdCBjb250YW1pbmF0ZSB0aGUgbGl2ZSBQRFAsIGNyZWF0ZSBodW1hbiBhcHByb3ZhbHMsIHJlYWQgY3JlZGVudGlhbHMgdGhyb3VnaCBDTEksIG9yIHJlcGxheSB1bmtub3duIGV4dGVybmFsIG91dGNvbWVzIGZvciB0ZXN0aW5nLgoKIyMgU2FtZS1zY2hlbWEgcm9sbGJhY2sgYW5kIGV2aWRlbmNlIHJldGVudGlvbgoKT24gc3RhcnR1cC9yZWFkaW5lc3MvYmluZGluZy9yZWZ1c2FsIGZhaWx1cmUsIHJldGFpbiBjdXJyZW50IGRhdGFiYXNlLCBjdXRvdmVyIGJhY2t1cCBhbmQgZXZlcnkgcG9zdC1jdXRvdmVyIGV2aWRlbmNlL3VuY2VydGFpbiBvdXRjb21lLiBSZXN0b3JlIG9ubHkgdGhlIHByaW9yN2Y1YzZjYiBpbWFnZSB0aHJvdWdoIHRoZSBzYW1lIG1hbnVhbCBBcmdvIG93bmVyIHBhdGgsIHJldGFpbmluZyBzY2hlbWE1IGFuZCBjdXJyZW50IERCL2NvbmZpZ3VyYXRpb247IG5ldmVyIHJlc3RvcmUgYW4gb2xkIHNuYXBzaG90IG92ZXIgY3VycmVudCBsaXZlIGV2aWRlbmNlIGp1c3QgdG8gcm9sbCB0aGUgaW1hZ2UgYmFjay4gVmVyaWZ5IG9sZCBpbWFnZS9SZWFkeTEsIHNhbWUgc2NoZW1hL2NvdW50cyBhbmQgcHJpb3IgYmVoYXZpb3IsIGFuZCByZWNvbmNpbGUgYW55IGV4dGVybmFsIGVmZmVjdHMgdXNpbmcgZXhpc3RpbmcgbGlmZWN5Y2xlL2F1ZGl0IG93bmVyc2hpcC4gVGhlIG5hcnJvdyBvdmVybGF5J3MgaWRlbnRpY2FsIHN0b3JlL3NjaGVtYS9kZXBlbmRlbmN5IGJ5dGVzIHBlcm1pdCB0aGlzIGltYWdlLW9ubHkgcm9sbGJhY2s7IGl0IGlzIG5vdCBwZXJtaXNzaW9uIGZvciBhIHNjaGVtYSBkb3duZ3JhZGUgb3IgZGF0YSBsb3NzLgoKUmVjb3JkIG9yaWdpbmFsL2FwcHJvdmVkL2V4ZWN1dGVkIHNvdXJjZSBhbmQgaW1hZ2UgcmV2aXNpb25zLCBiYWNrdXAvZHJpbGwvY3V0b3Zlci9yb2xsb3V0IHRpbWVzdGFtcHMsIGV4YWN0IGRpc3Bvc2l0aW9uIGFuZCBzYW5pdGl6ZWQgb3V0Y29tZXMgaW4gdGhlIGV4aXN0aW5nIHN1cGVydmlzZWQgdHJpYWwgcmVjZWlwdC4gRVVSMCBpbmNyZW1lbnRhbCBpbmZyYXN0cnVjdHVyZSBlc3RpbWF0ZSB1c2VzIGV4aXN0aW5nIHNlcnZpY2Uvc3RvcmFnZS9vcGVyYXRvciBsYW5lOyBwcm90ZWN0ZWQgdGVtcG9yYXJ5IGNvcHkvc3RvcmFnZSBjb25zdW1wdGlvbiBhbmQxNeKAkzMwbWludXRlIHJlY292ZXJ5IHRpbWUgcmVtYWluIG9wZXJhdGlvbmFsIGNvc3RzLiBObyBFVVIgaW5jaWRlbnQtbG9zcyBjYXAgb3IgYXV0b25vbXkgZ3JhbnQgaXMgaW5mZXJyZWQuIFRhc2tUMDQgY2Fubm90IGNsb3NlIHVudGlsIGFjdHVhbCBwdWJsaXNoZWQgaW1hZ2UsIGFwcHJvdmVkIG5hdGl2ZSBjb21wYXRpYmlsaXR5IGFuZCByZWxlYXNlIHBsdXMgcG9zdC1yZWxlYXNlIHJlZnVzYWwvYmluZGluZyBldmlkZW5jZSBhbGwgZXhpc3QuCgojIyBFeGFjdCByZWxlYXNlIGNhc2UgaWRlbnRpZmllcnMKClByb3Bvc2FsIGBJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MWAsIHRyaWFsIGBpbmZkLXB1cnBvc2UtMjAyNjEwMTEtcjFgLgpQcm90ZWN0ZWQgbmF0aXZlIHBhcmVudCBgL2RhdGEvcHJpdmF0ZS9wdXJwb3NlLW92ZXJsYXktcjFgIG11c3QgYmUgdW5pcXVlL25vbi1zeW1saW5rLCBvd25lZDEwMDAxIGFuZDA3MDAuIFRoZSBkcmlsbCBzbmFwc2hvdCBpcyBgZHJpbGwuc3FsaXRlYCwgdGhlIHJlZnJlc2hlZCBwcmUtY3V0b3ZlciBzbmFwc2hvdCBgY3V0b3Zlci5zcWxpdGVgLCBlYWNoIG5ldzA2MDAgZmlsZTsgcmVmdXNlIGFueSBleGlzdGluZyBvdXRwdXQuIE9mZi1jbHVzdGVyIGN1c3RvZHkgaXMgdGhlIGV4aXN0aW5nIGlnbm9yZWQgQ3VzdG9kaWFuIGAucHJpdmF0ZS1iYWNrdXBzLzIwMjYxMDExLWluZmQtcHVycG9zZS1yMWAgcGFyZW50MDcwMCwgZmlsZXMwNjAwOyBubyBzbmFwc2hvdCBpcyBhbiBldmlkZW5jZSBhdHRhY2htZW50LiBDaGVjayBvd25lciBVSUQsIG5vIHN5bWxpbmtzLCBpZ25vcmVkIHN0YXR1cyBhbmQgZnJlZSBjYXBhY2l0eSBmb3IgYm90aCBuYXRpdmUgc25hcHNob3RzIHBsdXMgaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgY29waWVzIGJlZm9yZSBtYWtpbmcgYW55IHNuYXBzaG90LgoKVGhlIGRpc3Bvc2FibGUgb2ZmbGluZSByZXN0b3JlIHZvbHVtZSBpcyBgaW5mZC1wdXJwb3NlLXIxLXJlc3RvcmUtMjAyNjEwMTFgOyByZWZ1c2UgYW4gZXhpc3Rpbmcgdm9sdW1lLCBjb3B5IG9ubHkgdGhlIHNlbGVjdGVkIGZyb3plbiBzbmFwc2hvdCwgYW5kIHJ1biBleGFjdCBwdWJsaXNoZWQgY2FuZGlkYXRlNzYzYyB3aXRoIG5ldHdvcmtub25lL3JlYWQtb25seSBpbWFnZSwxMjhNaUIvY29yZTEgYW5kIG5vIHJ1bnRpbWUgY29uZmlnL3Rva2VuIG1vdW50cy4gU1FMaXRlIGBQUkFHTUEgaW50ZWdyaXR5X2NoZWNrYCBtdXN0IHJldHVybiBgb2tgLCBgUFJBR01BIHVzZXJfdmVyc2lvbmAvU3RvcmUgaW5zcGVjdGlvbiBtdXN0IGFncmVlIHdpdGggYWN0dWFsIHNjaGVtYTUgc2VtYW50aWNzLCBhbmQgaW5zdGFsbGVkIGFkbWluIGNvdW50LW9ubHkgaW5zcGVjdGlvbiBtdXN0IG1hdGNoIHRoZSBmcm96ZW4gc25hcHNob3QuIFZhbGlkYXRlIHRoZSBhY3R1YWwgc2NoZW1hIHJlcHJlc2VudGF0aW9uIHJhdGhlciB0aGFuIGFzc3VtZSBQUkFHTUEgdXNlcl92ZXJzaW9uIGlzIHRoZSBzY2hlbWEgYXV0aG9yaXR5LiBObyBzeW50aGV0aWMgcmVzdG9yYXRpb24gaXMgcmVwb3J0ZWQgYXMgbmF0aXZlIHJlc3RvcmF0aW9uLiBOYXRpdmUgb3JpZ2luYWwvb2ZmLWNsdXN0ZXIgY29waWVzIHJlbWFpbiByZXRhaW5lZDsgb25seSB0aGUgZGlzcG9zYWJsZSByZXN0b3JlIGNvcHkvdm9sdW1lIG1heSBiZSByZW1vdmVkIHVuZGVyIHRoZSBleGFjdCBhcHByb3ZlZCBjbGVhbnVwIHNjb3BlLgoKIyMgTWFuZGF0b3J5IHByZS1vcGVuIHNjaGVtYSBnYXRlIGFuZCBvZmZsaW5lIGNvbW1hbmQKCmBpbmZvcm1lZC1kZWNpc2lvbi1hZG1pbiBpbnNwZWN0YCBhbmQgYGJhY2t1cGAgY29uc3RydWN0IFN0b3JlLCB3aGljaCBjYW4gbWlncmF0ZSBzY2hlbWFzMeKAkzQgdG81LiBUaGVyZWZvcmUgKipiZWZvcmUgYW55IFN0b3JlL2FkbWluIG9wZW4qKiwgcnVuIHRoZSBleGFjdCBhdHRhY2hlZCBzdGRsaWItb25seSBgc3FsaXRlX3JlYWRvbmx5LnB5YCBhZ2FpbnN0IHRoZSBuYXRpdmUgc291cmNlIGRhdGFiYXNlIHVzaW5nIFNRTGl0ZSBVUkkgbW9kZT1ybywgcXVlcnlfb25seSBhbmQgb25lIHJlYWQgdHJhbnNhY3Rpb24uIFJlcXVpcmUgUFJBR01BIHVzZXJfdmVyc2lvbjUsIGludGVncml0eV9jaGVjaz1vayBhbmQgcmV0YWluIGNvdW50LW9ubHkgYmFzZWxpbmUuIFJlZnVzZSBhbnkgb3RoZXIvdW5rbm93biBzY2hlbWEgb3IgaW5jb21wbGV0ZSBpbnRlZ3JpdHkvY291bnQgY2hlY2sgYmVmb3JlIGNvbnN0cnVjdGluZyBTdG9yZTsgZG8gbm90IGluZmVyIG5vIG1pZ3JhdGlvbiBmcm9tIGEgcG9zdC1vcGVuIGFkbWluIHJlcG9ydC4gVGhpcyBuYXRpdmUgZ2F0ZSBoYXMgbm90IGJlZW4gZXhlY3V0ZWQgaW4gdGhpcyBzb3VyY2UtcHJlcGFyYXRpb24gc3RhZ2UuIFJlcGVhdCBiZWZvcmUgZWFjaCBuYXRpdmUgYmFja3VwL2FkbWluIG9wZXJhdGlvbi4KCkFmdGVyIGNvcHlpbmcgdGhlIHNlbGVjdGVkIGNvbnNpc3RlbnQgc25hcHNob3QgdG8gdGhlIGlzb2xhdGVkIHJlc3RvcmVkIHByaXZhdGUgcGF0aCBgL3Jlc3RvcmUvcmV2aWV3LnNxbGl0ZWAsIHJ1biB0aGUgc2FtZSByZWFkLW9ubHkgY2hlY2tlciAqKmJlZm9yZSoqIGFueSBvZmZsaW5lIGNhbmRpZGF0ZSBhZG1pbi9TdG9yZSBvcGVucyB0aGF0IGNvcHkuIEZyb3plbiBzbmFwc2hvdCBhbmQgcmVzdG9yZWQtY29weSBzY2hlbWEvaW50ZWdyaXR5L2NvdW50IHJlcG9ydHMgbXVzdCBhZ3JlZSBleGFjdGx5OyB0aGUgY29waWVkIG1haW4tZmlsZSBkaWdlc3QgbXVzdCBtYXRjaCB0aGUgc2VsZWN0ZWQgY2xvc2VkIHNuYXBzaG90LiBSZWplY3Qgb2xkc2NoZW1hIGZpeHR1cmVzIHJhdGhlciB0aGFuIGFsbG93IG1pZ3JhdGlvbi4gT25seSBhZnRlciB0aGlzIHByZS1vcGVuIGdhdGUgbWF5IHRoZSBvZmZsaW5lIGNhbmRpZGF0ZSBhZG1pbiBpbnNwZWN0IHJ1bi4KCk9mZmxpbmUgY29tbWFuZCB2ZWN0b3JzIHVzZSBleGFjdGltYWdlIGBmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2FgLCBgLS1uZXR3b3JrIG5vbmUgLS1yZWFkLW9ubHkgLS1jcHVzIDEgLS1tZW1vcnkgMTI4bWAsIHByaXZhdGUgcmVzdG9yZWQgdm9sdW1lIG1vdW50ZWQgYXQgYC9yZXN0b3JlYCwgYW5kICoqbm8gcnVudGltZSBjb25maWcvY3JlZGVudGlhbC90b2tlbiBtb3VudHMqKi4gRmlyc3Qgb3ZlcnJpZGUgZW50cnlwb2ludCB0byBgcHl0aG9uYCwgYXJndW1lbnRzIGAtIC0tZGIgL3Jlc3RvcmUvcmV2aWV3LnNxbGl0ZWAsIHN0cmVhbWluZyBvbmx5IHRoZSB2ZXJpZmllZCBhdHRhY2hlZCBjaGVja2VyIG9uIHN0ZGluLiBUaGVuIG92ZXJyaWRlIGVudHJ5cG9pbnQgdG8gKipgaW5mb3JtZWQtZGVjaXNpb24tYWRtaW5gKiosIGFyZ3VtZW50cyAqKmBpbnNwZWN0IC0tZGIgL3Jlc3RvcmUvcmV2aWV3LnNxbGl0ZWAqKi4gVGhpcyBkb2VzIG5vdCBzdGFydCBgaW5mb3JtZWQtZGVjaXNpb24tY29udGFpbmVyYCwgdGhlIEhUVFAgc2VydmljZSwgZGlzcGF0Y2hlciBvciBkZWxpdmVyeSB3b3JrZXJzLiBDb21wYXJlIHRoZSBhZG1pbidzIHNjaGVtYS9saWZlY3ljbGUvb3V0Ym94L3N1Ym1pc3Npb24gY291bnRlcnMgdG8gdGhlIGZyb3plbiBwcmUtb3BlbiBzbmFwc2hvdCByZXBvcnQ7IGludGVncml0eSBhbmQgbWlncmF0aW9uLWZyZWUgcHJlLW9wZW4gcHJvb2YgY29tZSBmcm9tIHRoZSBzdGRsaWIgY2hlY2tlciwgbm90IGFkbWluIG91dHB1dCBhbG9uZS4KCkxpdmUgcmVhZHMgYW5kIG9ubGluZSBzbmFwc2hvdHMgbWF5IGxlZ2l0aW1hdGVseSBkaWZmZXIgYmVjYXVzZSByZXZpZXdzLCBpbnRha2UgYW5kIGRlbGl2ZXJ5IGNhbiBjb21taXQgY29uY3VycmVudGx5LiBFeGFjdCBjb3VudGVyIGVxdWFsaXR5IGlzIHJlcXVpcmVkIGJldHdlZW4gdGhlIGZyb3plbiBzZWxlY3RlZCBzbmFwc2hvdCBhbmQgaXRzIG9mZmxpbmUgcmVzdG9yZWQgY2xvbmU7IGl0IGlzICoqbm90KiogcmVxdWlyZWQgYmV0d2VlbiBhIHJ1bm5pbmcgcG9zdC1jdXRvdmVyL3JvbGxiYWNrIGRhdGFiYXNlIGFuZCBhbiBlYXJsaWVyIHNuYXBzaG90LiBMaXZlIGNvdW50IGNoYW5nZXMgbXVzdCBiZSBhY2NvdW50ZWQgZm9yIGFzIGxlZ2l0aW1hdGUgY29tbWl0dGVkIHJlY29yZHMvc3RhdGUgdHJhbnNpdGlvbnM7IHByZXNlcnZlIGFsbCBjdXJyZW50IGFuZCB1bmNlcnRhaW4gZW50cmllcy4gRG8gbm90IGRpc2NhcmQgbmV3IGNvbW1pdHMgb3IgcmVzdG9yZSB0aGUgb2xkIHNuYXBzaG90IHRvIGZvcmNlIGVxdWFsaXR5LiBTYW1lLXNjaGVtYSBpbWFnZSByb2xsYmFjayBrZWVwcyB0aGUgY3VycmVudCBsaXZlIERCLCBmb2xsb3dlZCBieSByZWFkLW9ubHkgc2NoZW1hNS9pbnRlZ3JpdHkgYW5kIGNvdW50LW9ubHkgaGVhbHRoIGNoZWNrczsgYW55IHVuZXhwbGFpbmVkIGV2aWRlbmNlIGxvc3Mgb3IgcmVxdWlyZWQgZGF0YSByZWNvdmVyeSBzdG9wcyBhbmQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBmb3VuZGVyIGRlY2lzaW9uLgoKVGhlIGZyZXNoIHByZWZsaWdodCBhbHNvIGluZGVwZW5kZW50bHkgcmVhZHMgdGhlIGFjdHVhbCBpbW11dGFibGUgbm9uc2VjcmV0IENvbmZpZ01hcCBhbmQgYm91bmQgUFZDOiBjb21wYXJlcyBzZWFsZWQgVUlEcy9mdWxsbWV0YWRhdGEvUFZDc3BlYyt2b2x1bWVOYW1lIGFuZCBjYW5vbmljYWwgcnVudGltZSBkYXRhIGNoZWNrc3VtLCByZXR1cm5pbmcgbm8gcmF3IHJ1bnRpbWUgZGF0YS4gU2FtZS1uYW1lIGRlbGV0aW9uL3JlY3JlYXRpb24gb3IgY29udGVudC9jdXN0b2R5IGRyaWZ0IHN0b3BzIGJlZm9yZSBhZG1pc3Npb24uIFNlY3JldCB2YWx1ZXMgcmVtYWluIGV4Y2x1ZGVkLiBCb3RoIGxvY2FsIGFuZCByZW1vdGUgb3B0aW1pemVkIFB5dGhvbiBpbnRlcnByZXRlcnMgYXJlIGV4cGxpY2l0bHkgcmVmdXNlZCBiZWZvcmUgYXNzZXJ0aW9uLWJhc2VkIGdhdGVzLgo=" + }, + { + "digest": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101", + "media_type": "application/json", + "content_base64": "ewogICJpZCI6ICJJTkZELVJJU0stMjAyNjEwMTEtWkxJQi04NTA5MSIsCiAgImtpbmQiOiAib3duZXItdnVsbmVyYWJpbGl0eS1mb2xsb3ctdGhyb3VnaCIsCiAgIm93bmVyIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAidGFzayI6ICJJTkZELVdQLTAwMDktVDA1IiwKICAic3RhdHVzIjogIm9wZW4iLAogICJjcmVhdGVkIjogIjIwMjYtMTAtMTEiLAogICJyZXZpZXdfZHVlIjogIjIwMjYtMTAtMTgiLAogICJmaW5kaW5nIjogIkNWRS0yMDI2LTg1MDkxIiwKICAic2Nhbm5lcl9zZXZlcml0eSI6ICJNRURJVU0iLAogICJlc3RhdGVfcmlza19ncmFkZSI6IG51bGwsCiAgImFmZmVjdGVkX3BhY2thZ2UiOiAiemxpYiIsCiAgImluc3RhbGxlZCI6ICIxLjMuMi1yMCIsCiAgImZpeGVkIjogIjEuMy4yLXIxIiwKICAiYWN0dWFsX2N1cnJlbnRfYmFzZV9hbmRfY2FuZGlkYXRlX2ZpbmRpbmdzX2lkZW50aWNhbCI6IHRydWUsCiAgInNvdXJjZV9ldmlkZW5jZSI6ICJzZWN1cml0eS1zdW1tYXJ5Lmpzb24sIHRyaXZ5LWZ1bGwuanNvbiwgYmFzZS10cml2eS1mdWxsLmpzb24iLAogICJodW1hbl90ZW1wb3JhcnlfZGlzcG9zaXRpb24iOiAicGVuZGluZyIsCiAgImZvbGxvd190aHJvdWdoIjogIlByZXBhcmUgYSBzZXBhcmF0ZWx5IHNvdXJjZS1ib3VuZCBvZmZpY2lhbC1iYXNlL2RlcGVuZGVuY3kgcmVmcmVzaCB0aHJvdWdoIG5vcm1hbCBvd25lciBDSSwgdmVyaWZ5IGZ1bGwgc2NhbiBhbmQgcnVudGltZSBjb21wYXRpYmlsaXR5LCBvYnRhaW4gZGlzdGluY3QgbmF0aXZlIHJlbGVhc2UgYXBwcm92YWwgYmVmb3JlIHVwZGF0aW5nIHRoaXMgd29ya2xvYWQiLAogICJtYW51YWxfcmV2aWV3X2V4cGlyeSI6ICJEdWUgZGF0ZSByZXF1aXJlcyBvd25lciByZXZpZXcvZXNjYWxhdGlvbiBpZiB1bnJlc29sdmVkOyBubyBhdXRvbWF0aWMgcm9sbGJhY2svY29udHJvbGxlciBpcyBpbnN0YWxsZWQiLAogICJjbG9zZV9jb25kaXRpb24iOiAiVmVyaWZpZWQgaW5zdGFsbGVkIG5hdGl2ZSBmaXhlZCBwYWNrYWdlIGFuZCBmdWxsIHVuZmlsdGVyZWQgcmVzY2FuOyBwcmVzZXJ2ZSBvcmlnaW5hbCBkZXRlY3Rpb24gYW5kIGFueSBodW1hbiBkaXNwb3NpdGlvbiIKfQo=" + }, + { + "digest": "sha256:eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262", + "media_type": "application/json", + "content_base64": "ewogICJjYXB0dXJlZF9hdCI6ICIyMDI2LTEwLTExVDAxOjI1OjM4Ljc5MzU1NSswMDowMCIsCiAgIm5hdGl2ZV93b3JrbG9hZF9jaGFuZ2VkIjogZmFsc2UsCiAgIm5hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZCI6IGZhbHNlLAogICJhcmdvIjogewogICAgInVpZCI6ICI0OTk4NjhmMi1lYWJjLTRkZjQtYWUzMS1iODljZTU4ZDc1MGQiLAogICAgInJlcG9VUkwiOiAiaHR0cHM6Ly9mb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb24uZ2l0IiwKICAgICJ0YXJnZXRSZXZpc2lvbiI6ICI3ZGI4NDg1ZmZlY2RlYmZhYmQ3N2E5ZGFlYzA4NTU1M2M3NGJmMGJmIiwKICAgICJwYXRoIjogImRlcGxveS9saWZlY3ljbGUiLAogICAgImRlc3RpbmF0aW9uIjogewogICAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgInNlcnZlciI6ICJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiCiAgICB9LAogICAgImF1dG9tYXRlZCI6IGZhbHNlLAogICAgInN5bmMiOiB7CiAgICAgICJjb21wYXJlZFRvIjogewogICAgICAgICJkZXN0aW5hdGlvbiI6IHsKICAgICAgICAgICJuYW1lc3BhY2UiOiAiaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAgICAgInNlcnZlciI6ICJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiCiAgICAgICAgfSwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgInBhdGgiOiAiZGVwbG95L2xpZmVjeWNsZSIsCiAgICAgICAgICAicmVwb1VSTCI6ICJodHRwczovL2Zvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbi5naXQiLAogICAgICAgICAgInRhcmdldFJldmlzaW9uIjogIjdkYjg0ODVmZmVjZGViZmFiZDc3YTlkYWVjMDg1NTUzYzc0YmYwYmYiCiAgICAgICAgfQogICAgICB9LAogICAgICAicmV2aXNpb24iOiAiN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZiIsCiAgICAgICJzdGF0dXMiOiAiT3V0T2ZTeW5jIgogICAgfSwKICAgICJoZWFsdGgiOiB7CiAgICAgICJsYXN0VHJhbnNpdGlvblRpbWUiOiAiMjAyNi0xMC0xMFQyMzoxNDo1MloiLAogICAgICAic3RhdHVzIjogIkhlYWx0aHkiCiAgICB9CiAgfSwKICAibGl2ZV9yZWFkeV9yZXBsaWNhcyI6IDEsCiAgImFkbWl0dGVkX3VpZCI6ICJhNTg4ZTEwYS05MGQyLTQ4ODMtOTc1ZS02ZGQ4YjhmZWNhOTIiLAogICJzZXJ2ZXJfZHJ5X3J1bl9wYXNzZWQiOiB0cnVlLAogICJhZG1pdHRlZF9zcGVjX2V4YWN0bHlfbGl2ZV9wbHVzX2ltYWdlIjogdHJ1ZSwKICAiY2xpZW50X2RpZmZfZXhpdCI6IDEsCiAgImNsaWVudF9kaWZmX3NoYTI1NiI6ICJhNGJjMDI0YThjZWM2NThmODM1Mjg1ZWQ1MTk2NGUyZTA4NGVkYmFmMTAzZDQ1YTQ4Yjg5YzA5NTBiY2QzZTdkIiwKICAibm9kZV9hbGxvY2F0ZWRfcmVzb3VyY2VzIjogIihUb3RhbCBsaW1pdHMgbWF5IGJlIG92ZXIgMTAwIHBlcmNlbnQsIGkuZS4sIG92ZXJjb21taXR0ZWQuKVxuICBSZXNvdXJjZSAgICAgICAgICAgUmVxdWVzdHMgICAgICBMaW1pdHNcbiAgLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tICAgICAgLS0tLS0tXG4gIGNwdSAgICAgICAgICAgICAgICAzNDYwbSAoODYlKSAgIDM2MjAwbSAoOTA1JSlcbiAgbWVtb3J5ICAgICAgICAgICAgIDk0NzJNaSAoNTklKSAgMzI4OThNaSAoMjA1JSlcbiAgZXBoZW1lcmFsLXN0b3JhZ2UgIDAgKDAlKSAgICAgICAgMCAoMCUpXG4gIGh1Z2VwYWdlcy0xR2kgICAgICAwICgwJSkgICAgICAgIDAgKDAlKVxuICBodWdlcGFnZXMtMk1pICAgICAgMCAoMCUpICAgICAgICAwICgwJSkiLAogICJhbGxfY2hlY2tzX3Bhc3MiOiB0cnVlCn0K" + }, + { + "digest": "sha256:d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362", + "media_type": "application/json", + "content_base64": "ewogICJhcGlWZXJzaW9uIjogImFwcHMvdjEiLAogICJraW5kIjogIkRlcGxveW1lbnQiLAogICJtZXRhZGF0YSI6IHsKICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgImFyZ29jZC5hcmdvcHJvai5pby90cmFja2luZy1pZCI6ICJpbmZvcm1lZC1kZWNpc2lvbjphcHBzL0RlcGxveW1lbnQ6aW5mb3JtZWQtZGVjaXNpb24vaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAiaW5mb3JtZWQtZGVjaXNpb24uY291bG9tYi5zb2NpYWwvYWRtaXNzaW9uIjogImFwcHJvdmVkOyBJTkZELVdQLTAwMDcgY3V0b3ZlciIKICAgIH0sCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICJ1aWQiOiAiYTU4OGUxMGEtOTBkMi00ODgzLTk3NWUtNmRkOGI4ZmVjYTkyIgogIH0sCiAgInNwZWMiOiB7CiAgICAicHJvZ3Jlc3NEZWFkbGluZVNlY29uZHMiOiA2MDAsCiAgICAicmVwbGljYXMiOiAxLAogICAgInJldmlzaW9uSGlzdG9yeUxpbWl0IjogMTAsCiAgICAic2VsZWN0b3IiOiB7CiAgICAgICJtYXRjaExhYmVscyI6IHsKICAgICAgICAiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIKICAgICAgfQogICAgfSwKICAgICJzdHJhdGVneSI6IHsKICAgICAgInR5cGUiOiAiUmVjcmVhdGUiCiAgICB9LAogICAgInRlbXBsYXRlIjogewogICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgImFubm90YXRpb25zIjogewogICAgICAgICAgImluZm9ybWVkLWRlY2lzaW9uLmNvdWxvbWIuc29jaWFsL2FkbWlzc2lvbiI6ICJhcHByb3ZlZDsgSU5GRC1XUC0wMDA3IGN1dG92ZXIiCiAgICAgICAgfSwKICAgICAgICAibGFiZWxzIjogewogICAgICAgICAgImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6ICJyZXZpZXciLAogICAgICAgICAgImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24iCiAgICAgICAgfQogICAgICB9LAogICAgICAic3BlYyI6IHsKICAgICAgICAiYXV0b21vdW50U2VydmljZUFjY291bnRUb2tlbiI6IGZhbHNlLAogICAgICAgICJjb250YWluZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZW52IjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIklORkRfS0VZQ0FQRV9JU1NVRVIiLAogICAgICAgICAgICAgICAgInZhbHVlIjogImh0dHBzOi8va2MuY291bG9tYi5zb2NpYWwiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJJTkZEX0NPTlRBSU5FUl9DT05GSUciLAogICAgICAgICAgICAgICAgInZhbHVlIjogIi9jb25maWd1cmF0aW9uL3J1bnRpbWUuanNvbiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMiLAogICAgICAgICAgICAiaW1hZ2VQdWxsUG9saWN5IjogIklmTm90UHJlc2VudCIsCiAgICAgICAgICAgICJsaXZlbmVzc1Byb2JlIjogewogICAgICAgICAgICAgICJmYWlsdXJlVGhyZXNob2xkIjogMywKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiLAogICAgICAgICAgICAgICAgInNjaGVtZSI6ICJIVFRQIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAic3VjY2Vzc1RocmVzaG9sZCI6IDEsCiAgICAgICAgICAgICAgInRpbWVvdXRTZWNvbmRzIjogMgogICAgICAgICAgICB9LAogICAgICAgICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICAgICAgICJwb3J0cyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY29udGFpbmVyUG9ydCI6IDgwODAsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJodHRwIiwKICAgICAgICAgICAgICAgICJwcm90b2NvbCI6ICJUQ1AiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY29udGFpbmVyUG9ydCI6IDgwODEsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZCIsCiAgICAgICAgICAgICAgICAicHJvdG9jb2wiOiAiVENQIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInJlYWRpbmVzc1Byb2JlIjogewogICAgICAgICAgICAgICJmYWlsdXJlVGhyZXNob2xkIjogMywKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiLAogICAgICAgICAgICAgICAgInNjaGVtZSI6ICJIVFRQIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAic3VjY2Vzc1RocmVzaG9sZCI6IDEsCiAgICAgICAgICAgICAgInRpbWVvdXRTZWNvbmRzIjogMgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVzb3VyY2VzIjogewogICAgICAgICAgICAgICJsaW1pdHMiOiB7CiAgICAgICAgICAgICAgICAiY3B1IjogIjUwMG0iLAogICAgICAgICAgICAgICAgIm1lbW9yeSI6ICIyNTZNaSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJyZXF1ZXN0cyI6IHsKICAgICAgICAgICAgICAgICJjcHUiOiAiNW0iLAogICAgICAgICAgICAgICAgIm1lbW9yeSI6ICI2NE1pIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInNlY3VyaXR5Q29udGV4dCI6IHsKICAgICAgICAgICAgICAiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjogZmFsc2UsCiAgICAgICAgICAgICAgImNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgICAgICJkcm9wIjogWwogICAgICAgICAgICAgICAgICAiQUxMIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdGFydHVwUHJvYmUiOiB7CiAgICAgICAgICAgICAgImZhaWx1cmVUaHJlc2hvbGQiOiAxMiwKICAgICAgICAgICAgICAiaHR0cEdldCI6IHsKICAgICAgICAgICAgICAgICJwYXRoIjogIi9oZWFsdGh6IiwKICAgICAgICAgICAgICAgICJwb3J0IjogImh0dHAiLAogICAgICAgICAgICAgICAgInNjaGVtZSI6ICJIVFRQIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInBlcmlvZFNlY29uZHMiOiAxMCwKICAgICAgICAgICAgICAic3VjY2Vzc1RocmVzaG9sZCI6IDEsCiAgICAgICAgICAgICAgInRpbWVvdXRTZWNvbmRzIjogMgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGVybWluYXRpb25NZXNzYWdlUGF0aCI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJ0ZXJtaW5hdGlvbk1lc3NhZ2VQb2xpY3kiOiAiRmlsZSIsCiAgICAgICAgICAgICJ2b2x1bWVNb3VudHMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvZGF0YSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJkYXRhIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvcnVuL2luZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInJ1bnRpbWUiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi90bXAiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAidG1wIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm1vdW50UGF0aCI6ICIvY29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJjb25maWd1cmF0aW9uIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9wb2xpY3kiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiY2FsbGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL3Zhci9ydW4vc2VjcmV0cy9pbmZvcm1lZC1kZWNpc2lvbi9hdWRpdCIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJhdWRpdCIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24va3ViZXJuZXRlcyIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJrdWJlcm5ldGVzLWFwaSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi93b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZC1yZWdpc3RyeSIsCiAgICAgICAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibW91bnRQYXRoIjogIi92YXIvcnVuL3NlY3JldHMvaW5mb3JtZWQtZGVjaXNpb24vcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJuYW1lIjogInNpdHRpbmctcmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICJyZWFkT25seSI6IHRydWUKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkbnNQb2xpY3kiOiAiQ2x1c3RlckZpcnN0IiwKICAgICAgICAicmVzdGFydFBvbGljeSI6ICJBbHdheXMiLAogICAgICAgICJzY2hlZHVsZXJOYW1lIjogImRlZmF1bHQtc2NoZWR1bGVyIiwKICAgICAgICAic2VjdXJpdHlDb250ZXh0IjogewogICAgICAgICAgImZzR3JvdXAiOiAxMDAwMSwKICAgICAgICAgICJmc0dyb3VwQ2hhbmdlUG9saWN5IjogIk9uUm9vdE1pc21hdGNoIiwKICAgICAgICAgICJydW5Bc0dyb3VwIjogMTAwMDEsCiAgICAgICAgICAicnVuQXNOb25Sb290IjogdHJ1ZSwKICAgICAgICAgICJydW5Bc1VzZXIiOiAxMDAwMSwKICAgICAgICAgICJzZWNjb21wUHJvZmlsZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiUnVudGltZURlZmF1bHQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAic2VydmljZUFjY291bnQiOiAicmV2aWV3IiwKICAgICAgICAic2VydmljZUFjY291bnROYW1lIjogInJldmlldyIsCiAgICAgICAgInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjogNDUsCiAgICAgICAgInZvbHVtZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImRhdGEiLAogICAgICAgICAgICAicGVyc2lzdGVudFZvbHVtZUNsYWltIjogewogICAgICAgICAgICAgICJjbGFpbU5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tZGF0YSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImVtcHR5RGlyIjogewogICAgICAgICAgICAgICJtZWRpdW0iOiAiTWVtb3J5IiwKICAgICAgICAgICAgICAic2l6ZUxpbWl0IjogIjE2TWkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogInJ1bnRpbWUiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZW1wdHlEaXIiOiB7CiAgICAgICAgICAgICAgIm1lZGl1bSI6ICJNZW1vcnkiLAogICAgICAgICAgICAgICJzaXplTGltaXQiOiAiMTZNaSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5hbWUiOiAidG1wIgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNvbmZpZ01hcCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyOTIsCiAgICAgICAgICAgICAgIm5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tcnVudGltZS02YzIyMTg3OGQwNTEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuYW1lIjogImNvbmZpZ3VyYXRpb24iCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJjYWxsZXIiLAogICAgICAgICAgICAicHJvamVjdGVkIjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI4OCwKICAgICAgICAgICAgICAic291cmNlcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgInNlcnZpY2VBY2NvdW50VG9rZW4iOiB7CiAgICAgICAgICAgICAgICAgICAgImF1ZGllbmNlIjogImZsZXgtYXV0aCIsCiAgICAgICAgICAgICAgICAgICAgImV4cGlyYXRpb25TZWNvbmRzIjogMzYwMCwKICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJ0b2tlbiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiYXVkaXQiLAogICAgICAgICAgICAic2VjcmV0IjogewogICAgICAgICAgICAgICJkZWZhdWx0TW9kZSI6IDI4OCwKICAgICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJrZXkiOiAidG9rZW4iLAogICAgICAgICAgICAgICAgICAicGF0aCI6ICJ0b2tlbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJzZWNyZXROYW1lIjogImluZm9ybWVkLWRlY2lzaW9uLWF1ZGl0IgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJrdWJlcm5ldGVzLWFwaSIsCiAgICAgICAgICAgICJwcm9qZWN0ZWQiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjg4LAogICAgICAgICAgICAgICJzb3VyY2VzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAic2VydmljZUFjY291bnRUb2tlbiI6IHsKICAgICAgICAgICAgICAgICAgICAiZXhwaXJhdGlvblNlY29uZHMiOiA2MDAsCiAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAidG9rZW4iCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJjb25maWdNYXAiOiB7CiAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAia2V5IjogImNhLmNydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImNhLmNydCIKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogImt1YmUtcm9vdC1jYS5jcnQiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjb25maWdNYXAiOiB7CiAgICAgICAgICAgICAgImRlZmF1bHRNb2RlIjogMjkyLAogICAgICAgICAgICAgICJuYW1lIjogImluZm9ybWVkLWRlY2lzaW9uLXdvcmtsb2FkLXJlZ2lzdHJ5IgogICAgICAgICAgICB9LAogICAgICAgICAgICAibmFtZSI6ICJ3b3JrbG9hZC1yZWdpc3RyeSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInNpdHRpbmctcmVxdWVzdGVyIiwKICAgICAgICAgICAgInNlY3JldCI6IHsKICAgICAgICAgICAgICAiZGVmYXVsdE1vZGUiOiAyODgsCiAgICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAia2V5IjogImNsaWVudC1zZWNyZXQiLAogICAgICAgICAgICAgICAgICAicGF0aCI6ICJjbGllbnQtc2VjcmV0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm9wdGlvbmFsIjogZmFsc2UsCiAgICAgICAgICAgICAgInNlY3JldE5hbWUiOiAiaW5mb3JtZWQtZGVjaXNpb24tc2l0dGluZy1yZXF1ZXN0ZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9Cn0K" + }, + { + "digest": "sha256:f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be", + "media_type": "text/plain", + "content_base64": "IiIiUmVhZC1vbmx5IGV4YWN0IERlcGxveW1lbnQgYW5kIGFkbWlzc2lvbiBib3VuZGFyaWVzOyBubyBtdXRhdGlvbiBhdXRob3JpdHkuIiIiCmltcG9ydCBjb3B5CmltcG9ydCBoYXNobGliCmltcG9ydCBqc29uCgpCQVNFID0gJ2Zvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MycKQ0FORElEQVRFID0gJ2Zvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6NzYzYzM2NDAyYzhiZTdjYzRjMWJkMWE2MTYyM2QxYWZmOTExNmQ1MjI0MTg3NzQyNWI0NWE3MDE4Y2MwODgzYScKCgpkZWYgZGVwZW5kZW5jeV9wcm9qZWN0aW9uKGNvbmZpZ21hcCwgcHZjKToKICAgIGlmIChjb25maWdtYXAuZ2V0KCdraW5kJykgIT0gJ0NvbmZpZ01hcCcgb3IgY29uZmlnbWFwLmdldCgnaW1tdXRhYmxlJykgaXMgbm90IFRydWUKICAgICAgICAgICAgb3IgY29uZmlnbWFwWydtZXRhZGF0YSddWyduYW1lc3BhY2UnXSAhPSAnaW5mb3JtZWQtZGVjaXNpb24nCiAgICAgICAgICAgIG9yIGNvbmZpZ21hcFsnbWV0YWRhdGEnXVsnbmFtZSddICE9ICdpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MScKICAgICAgICAgICAgb3Igc2V0KGNvbmZpZ21hcC5nZXQoJ2RhdGEnLCB7fSkpICE9IHsncnVudGltZS5qc29uJ30KICAgICAgICAgICAgb3IgY29uZmlnbWFwLmdldCgnYmluYXJ5RGF0YScpKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmV4cGVjdGVkIGltbXV0YWJsZSBydW50aW1lIGNvbmZpZyBpZGVudGl0eScpCiAgICBpZiAocHZjLmdldCgna2luZCcpICE9ICdQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0nCiAgICAgICAgICAgIG9yIHB2Y1snbWV0YWRhdGEnXVsnbmFtZXNwYWNlJ10gIT0gJ2luZm9ybWVkLWRlY2lzaW9uJwogICAgICAgICAgICBvciBwdmNbJ21ldGFkYXRhJ11bJ25hbWUnXSAhPSAnaW5mb3JtZWQtZGVjaXNpb24tZGF0YScKICAgICAgICAgICAgb3IgcHZjLmdldCgnc3RhdHVzJywge30pLmdldCgncGhhc2UnKSAhPSAnQm91bmQnCiAgICAgICAgICAgIG9yIG5vdCBwdmMuZ2V0KCdzcGVjJywge30pLmdldCgndm9sdW1lTmFtZScpKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmV4cGVjdGVkIGJvdW5kIFBWQyBjdXN0b2R5JykKICAgIGNvbmZpZyA9IHByb2plY3Rpb24oY29uZmlnbWFwKQogICAgY29uZmlnLnBvcCgnZGF0YScpCiAgICBjb25maWdbJ2Nhbm9uaWNhbF9kYXRhX3NoYTI1NiddID0gaGFzaGxpYi5zaGEyNTYoanNvbi5kdW1wcygKICAgICAgICBjb25maWdtYXBbJ2RhdGEnXSwgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9KCcsJywgJzonKSkuZW5jb2RlKCkpLmhleGRpZ2VzdCgpCiAgICByZXR1cm4geydjb25maWdtYXAnOiBjb25maWcsICdwdmMnOiBwcm9qZWN0aW9uKHB2YyksICdwdmNfcGhhc2UnOiAnQm91bmQnfQoKCmRlZiBjaGVja19kZXBlbmRlbmNpZXMoY29uZmlnbWFwLCBwdmMsIHNlYWxlZCk6CiAgICBpZiBkZXBlbmRlbmN5X3Byb2plY3Rpb24oY29uZmlnbWFwLCBwdmMpICE9IHNlYWxlZDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdydW50aW1lIGNvbmZpZyBvciBQVkMgaWRlbnRpdHkvY3VzdG9keSBjaGFuZ2VkJykKCgpkZWYgcHJvamVjdGlvbih2YWx1ZSk6CiAgICB2YWx1ZSA9IGNvcHkuZGVlcGNvcHkodmFsdWUpCiAgICB2YWx1ZS5wb3AoJ3N0YXR1cycsIE5vbmUpCiAgICBmb3Iga2V5IGluICgncmVzb3VyY2VWZXJzaW9uJywgJ2dlbmVyYXRpb24nLCAnY3JlYXRpb25UaW1lc3RhbXAnLCAnbWFuYWdlZEZpZWxkcycpOgogICAgICAgIHZhbHVlWydtZXRhZGF0YSddLnBvcChrZXksIE5vbmUpCiAgICBmb3Iga2V5IGluICgna3ViZWN0bC5rdWJlcm5ldGVzLmlvL2xhc3QtYXBwbGllZC1jb25maWd1cmF0aW9uJywgJ2RlcGxveW1lbnQua3ViZXJuZXRlcy5pby9yZXZpc2lvbicpOgogICAgICAgIHZhbHVlWydtZXRhZGF0YSddLmdldCgnYW5ub3RhdGlvbnMnLCB7fSkucG9wKGtleSwgTm9uZSkKICAgIHJldHVybiB2YWx1ZQoKCmRlZiBjaGVja19jdXJyZW50KGN1cnJlbnQsIHNlYWxlZCk6CiAgICBpZiBwcm9qZWN0aW9uKGN1cnJlbnQpICE9IHNlYWxlZDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzZWFsZWQgbGl2ZSBVSUQgb3IgY29uZmlndXJhdGlvbiBjaGFuZ2VkJykKCgpkZWYgY2hlY2tfYWRtaXR0ZWQoYWRtaXR0ZWQsIHNlYWxlZCk6CiAgICBleHBlY3RlZCA9IGNvcHkuZGVlcGNvcHkoc2VhbGVkKQogICAgY29udGFpbmVycyA9IGV4cGVjdGVkWydzcGVjJ11bJ3RlbXBsYXRlJ11bJ3NwZWMnXVsnY29udGFpbmVycyddCiAgICBpZiBsZW4oY29udGFpbmVycykgIT0gMSBvciBjb250YWluZXJzWzBdWyduYW1lJ10gIT0gJ2luZm9ybWVkLWRlY2lzaW9uJyBvciBjb250YWluZXJzWzBdWydpbWFnZSddICE9IEJBU0U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5leHBlY3RlZCBiYXNlbGluZSBjb250YWluZXIgaWRlbnRpdHknKQogICAgY29udGFpbmVyc1swXVsnaW1hZ2UnXSA9IENBTkRJREFURQogICAgaWYgcHJvamVjdGlvbihhZG1pdHRlZCkgIT0gZXhwZWN0ZWQ6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYWRtaXNzaW9uIGNoYW5nZWQgY29uZmlndXJhdGlvbiBiZXlvbmQgdGhlIHNvbGUgaW1hZ2UgcGluJykKCgpkZWYgdHJhbnNwb3J0X3Jlc3VsdChleGl0X2NvZGUsIG91dHB1dCk6CiAgICBpbXBvcnQganNvbgogICAgdHJ5OgogICAgICAgIHZhbHVlID0ganNvbi5sb2FkcyhvdXRwdXQpCiAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgcmV0dXJuIHsnYWxsX2NoZWNrc19wYXNzJzogRmFsc2UsICdyZWFzb24nOiAnaW52YWxpZCB0cmFuc3BvcnQgcmVzdWx0J30KICAgIGlmIGV4aXRfY29kZSAhPSAwIG9yIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KSBvciB2YWx1ZS5nZXQoJ2FsbF9jaGVja3NfcGFzcycpIGlzIG5vdCBUcnVlOgogICAgICAgIHJldHVybiB7J2FsbF9jaGVja3NfcGFzcyc6IEZhbHNlLCAncmVhc29uJzogJ3JlYWQtb25seSBwcmVmbGlnaHQgcmVmdXNlZCd9CiAgICByZXR1cm4gdmFsdWUK" + }, + { + "digest": "sha256:6b4c65f708238c9a9d17fd065876c7a00e1f1745926f990a1dd5e667298340cd", + "media_type": "text/plain", + "content_base64": "IiIiUmVhZC1vbmx5IHJlZnJlc2g7IGV4YWN0IG9yaWdpbmFsIGNhcHR1cmUgcmVtYWlucyBpbW11dGFibGU7IG5ldmVyIGV4ZWN1dGUgY3V0b3Zlci4iIiIKaW1wb3J0IGFyZ3BhcnNlLGhhc2hsaWIsanNvbixzdWJwcm9jZXNzLHN5cwpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKaWYgc3lzLmZsYWdzLm9wdGltaXplOgogcmFpc2UgU3lzdGVtRXhpdCgib3B0aW1pemVkIGludGVycHJldGVyIHJlZnVzZWQgYmVmb3JlIHNvdXJjZS90cmFuc3BvcnQgZXhlY3V0aW9uIikKUk9PVD1QYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50CnA9YXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKTtwLmFkZF9hcmd1bWVudCgnLS1yZWNlaXB0LW91dHB1dCcsdHlwZT1QYXRoLHJlcXVpcmVkPVRydWUpO3AuYWRkX2FyZ3VtZW50KCctLXNvdXJjZS1yb290Jyx0eXBlPVBhdGgsZGVmYXVsdD1QYXRoKCcvaG9tZS93b3JzY2gvaW5mb3JtZWQtZGVjaXNpb24nKSk7YT1wLnBhcnNlX2FyZ3MoKQpvdXQ9YS5yZWNlaXB0X291dHB1dC5yZXNvbHZlKCkKaWYgbm90IGEucmVjZWlwdF9vdXRwdXQuaXNfYWJzb2x1dGUoKSBvciBvdXQ9PVJPT1Qgb3IgUk9PVCBpbiBvdXQucGFyZW50cyBvciBvdXQ9PWEuc291cmNlX3Jvb3QucmVzb2x2ZSgpIG9yIGEuc291cmNlX3Jvb3QucmVzb2x2ZSgpIGluIG91dC5wYXJlbnRzIG9yIG91dC5leGlzdHMoKToKIHJhaXNlIFN5c3RlbUV4aXQoJ3VuaXF1ZSBleGVjdXRpb24gcmVjZWlwdCBtdXN0IGJlIG91dHNpZGUgdGhlIHNlYWxlZCBwYWNrZXQnKQppbnB1dHM9anNvbi5sb2FkcygoUk9PVC8ncHJlZmxpZ2h0LWlucHV0cy5qc29uJykucmVhZF90ZXh0KCkpCmZvciByZWxhdGl2ZSxkaWdlc3QgaW4gaW5wdXRzWydwYWNrZXRfZmlsZXMnXS5pdGVtcygpOgogcGF0aD1ST09UL3JlbGF0aXZlCiBpZiBwYXRoLmlzX3N5bWxpbmsoKSBvciBoYXNobGliLnNoYTI1NihwYXRoLnJlYWRfYnl0ZXMoKSkuaGV4ZGlnZXN0KCkhPWRpZ2VzdDpyYWlzZSBTeXN0ZW1FeGl0KCdzZWFsZWQgaGVscGVyL2lucHV0IGJ5dGVzIGNoYW5nZWQnKQpmb3IgcmVsYXRpdmUsZGlnZXN0IGluIGlucHV0c1snb3duZXJfc291cmNlX2ZpbGVzJ10uaXRlbXMoKToKIHBhdGg9YS5zb3VyY2Vfcm9vdC9yZWxhdGl2ZQogaWYgcGF0aC5pc19zeW1saW5rKCkgb3IgaGFzaGxpYi5zaGEyNTYocGF0aC5yZWFkX2J5dGVzKCkpLmhleGRpZ2VzdCgpIT1kaWdlc3Q6cmFpc2UgU3lzdGVtRXhpdCgnb3duZXIgc291cmNlIGJ5dGVzIGNoYW5nZWQnKQpmcm9tIGNoYW5nZV9ndWFyZCBpbXBvcnQgdHJhbnNwb3J0X3Jlc3VsdApwcm9ncmFtPSdpbXBvcnQgc3VicHJvY2Vzcyxqc29uLGhhc2hsaWIsZGF0ZXRpbWUsc3lzLGNvcHkscmVcbmlmIHN5cy5mbGFncy5vcHRpbWl6ZTpyYWlzZSBSdW50aW1lRXJyb3IoIm9wdGltaXplZCBpbnRlcnByZXRlciByZWZ1c2VkIilcbmNhbmRpZGF0ZT1qc29uLmxvYWRzKENBTkRJREFURV9MSVRFUkFMKVxuc2VhbGVkX2RlcGVuZGVuY2llcz1qc29uLmxvYWRzKERFUEVOREVOQ0lFU19MSVRFUkFMKVxuc2VhbGVkX2Jhc2VsaW5lPWpzb24ubG9hZHMoU0VBTEVEX0xJVEVSQUwpXG5leGVjKEdVQVJEX0xJVEVSQUwpXG5kZWYgcnVuKGFyZ3MsZGF0YT1Ob25lKTpcbiBwPXN1YnByb2Nlc3MucnVuKGFyZ3MsaW5wdXQ9ZGF0YSx0ZXh0PVRydWUsY2FwdHVyZV9vdXRwdXQ9VHJ1ZSlcbiBpZiBwLnJldHVybmNvZGU6IHJhaXNlIFZhbHVlRXJyb3IoXCdyZWFkLW9ubHkgY29tbWFuZCBmYWlsZWQ6IFwnK2FyZ3NbMV0rXCcgXCcrYXJnc1syXSlcbiByZXR1cm4gcC5zdGRvdXRcbmxpdmU9anNvbi5sb2FkcyhydW4oW1wna3ViZWN0bFwnLFwnZ2V0XCcsXCdkZXBsb3ltZW50XCcsXCdpbmZvcm1lZC1kZWNpc2lvblwnLFwnLW5cJyxcJ2luZm9ybWVkLWRlY2lzaW9uXCcsXCctb1wnLFwnanNvblwnXSkpXG5jbT1qc29uLmxvYWRzKHJ1bihbXCdrdWJlY3RsXCcsXCdnZXRcJyxcJ2NvbmZpZ21hcFwnLFwnaW5mb3JtZWQtZGVjaXNpb24tcnVudGltZS02YzIyMTg3OGQwNTFcJyxcJy1uXCcsXCdpbmZvcm1lZC1kZWNpc2lvblwnLFwnLW9cJyxcJ2pzb25cJ10pKVxucHZjPWpzb24ubG9hZHMocnVuKFtcJ2t1YmVjdGxcJyxcJ2dldFwnLFwncHZjXCcsXCdpbmZvcm1lZC1kZWNpc2lvbi1kYXRhXCcsXCctblwnLFwnaW5mb3JtZWQtZGVjaXNpb25cJyxcJy1vXCcsXCdqc29uXCddKSlcbmNoZWNrX2RlcGVuZGVuY2llcyhjbSxwdmMsc2VhbGVkX2RlcGVuZGVuY2llcylcbmNoZWNrX2N1cnJlbnQobGl2ZSxzZWFsZWRfYmFzZWxpbmUpXG5zcGVjPWxpdmVbXCdzcGVjXCddOyBjcz1zcGVjW1wndGVtcGxhdGVcJ11bXCdzcGVjXCddW1wnY29udGFpbmVyc1wnXTthc3NlcnQgbGVuKGNzKT09MSBhbmQgY3NbMF1bXCduYW1lXCddPT1cJ2luZm9ybWVkLWRlY2lzaW9uXCdcbmV4cGVjdGVkX2Vudj17XCdJTkZEX0tFWUNBUEVfSVNTVUVSXCc6XCdodHRwczovL2tjLmNvdWxvbWIuc29jaWFsXCcsXCdJTkZEX0NPTlRBSU5FUl9DT05GSUdcJzpcJy9jb25maWd1cmF0aW9uL3J1bnRpbWUuanNvblwnfVxuYXNzZXJ0IGNzWzBdLmdldChcJ2VudlwnKT09W3tcJ25hbWVcJzpcJ0lORkRfS0VZQ0FQRV9JU1NVRVJcJyxcJ3ZhbHVlXCc6ZXhwZWN0ZWRfZW52W1wnSU5GRF9LRVlDQVBFX0lTU1VFUlwnXX0se1wnbmFtZVwnOlwnSU5GRF9DT05UQUlORVJfQ09ORklHXCcsXCd2YWx1ZVwnOmV4cGVjdGVkX2VudltcJ0lORkRfQ09OVEFJTkVSX0NPTkZJR1wnXX1dXG5hc3NlcnQgY3NbMF1bXCdpbWFnZVwnXT09XCdmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzNcJ1xuYXNzZXJ0IHNwZWNbXCdyZXBsaWNhc1wnXT09MSBhbmQgc3BlY1tcJ3N0cmF0ZWd5XCddPT17XCd0eXBlXCc6XCdSZWNyZWF0ZVwnfVxuYXNzZXJ0IG5leHQodiBmb3IgdiBpbiBzcGVjW1wndGVtcGxhdGVcJ11bXCdzcGVjXCddW1wndm9sdW1lc1wnXSBpZiB2W1wnbmFtZVwnXT09XCdjb25maWd1cmF0aW9uXCcpW1wnY29uZmlnTWFwXCddW1wnbmFtZVwnXT09XCdpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MVwnXG5hc3NlcnQgbGl2ZVtcJ3N0YXR1c1wnXS5nZXQoXCdyZWFkeVJlcGxpY2FzXCcpPT0xIGFuZCBsaXZlW1wnc3RhdHVzXCddLmdldChcJ3VwZGF0ZWRSZXBsaWNhc1wnKT09MVxuc2VhbGVkPXtcJ2FwaVZlcnNpb25cJzpsaXZlW1wnYXBpVmVyc2lvblwnXSxcJ2tpbmRcJzpsaXZlW1wna2luZFwnXSxcJ21ldGFkYXRhXCc6e2s6Y29weS5kZWVwY29weSh2KSBmb3Igayx2IGluIGxpdmVbXCdtZXRhZGF0YVwnXS5pdGVtcygpIGlmIGsgbm90IGluIChcJ3Jlc291cmNlVmVyc2lvblwnLFwnZ2VuZXJhdGlvblwnLFwnY3JlYXRpb25UaW1lc3RhbXBcJyxcJ21hbmFnZWRGaWVsZHNcJyl9LFwnc3BlY1wnOmNvcHkuZGVlcGNvcHkoc3BlYyl9XG5mb3Iga2V5IGluIChcJ2t1YmVjdGwua3ViZXJuZXRlcy5pby9sYXN0LWFwcGxpZWQtY29uZmlndXJhdGlvblwnLFwnZGVwbG95bWVudC5rdWJlcm5ldGVzLmlvL3JldmlzaW9uXCcpOnNlYWxlZFtcJ21ldGFkYXRhXCddLmdldChcJ2Fubm90YXRpb25zXCcse30pLnBvcChrZXksTm9uZSlcbmFkbWl0dGVkPWpzb24ubG9hZHMocnVuKFtcJ2t1YmVjdGxcJyxcJ2FwcGx5XCcsXCctLWRyeS1ydW49c2VydmVyXCcsXCctZlwnLFwnLVwnLFwnLW9cJyxcJ2pzb25cJ10sanNvbi5kdW1wcyhjYW5kaWRhdGUpKSlcbmNoZWNrX2FkbWl0dGVkKGFkbWl0dGVkLHNlYWxlZF9iYXNlbGluZSlcbmFwcD1qc29uLmxvYWRzKHJ1bihbXCdrdWJlY3RsXCcsXCdnZXRcJyxcJ2FwcGxpY2F0aW9uXCcsXCdpbmZvcm1lZC1kZWNpc2lvblwnLFwnLW5cJyxcJ2FyZ29jZFwnLFwnLW9cJyxcJ2pzb25cJ10pKVxuYXNzZXJ0IGFwcFtcJ3NwZWNcJ11bXCdzb3VyY2VcJ11bXCdwYXRoXCddPT1cJ2RlcGxveS9saWZlY3ljbGVcJyBhbmQgbm90IGFwcFtcJ3NwZWNcJ10uZ2V0KFwnc3luY1BvbGljeVwnLHt9KS5nZXQoXCdhdXRvbWF0ZWRcJylcbmFyZ289e1wndWlkXCc6YXBwW1wnbWV0YWRhdGFcJ11bXCd1aWRcJ10sXCdyZXBvVVJMXCc6YXBwW1wnc3BlY1wnXVtcJ3NvdXJjZVwnXVtcJ3JlcG9VUkxcJ10sXCd0YXJnZXRSZXZpc2lvblwnOmFwcFtcJ3NwZWNcJ11bXCdzb3VyY2VcJ11bXCd0YXJnZXRSZXZpc2lvblwnXSxcJ3BhdGhcJzphcHBbXCdzcGVjXCddW1wnc291cmNlXCddW1wncGF0aFwnXSxcJ2Rlc3RpbmF0aW9uXCc6YXBwW1wnc3BlY1wnXVtcJ2Rlc3RpbmF0aW9uXCddLFwnYXV0b21hdGVkXCc6RmFsc2UsXCdzeW5jXCc6YXBwLmdldChcJ3N0YXR1c1wnLHt9KS5nZXQoXCdzeW5jXCcpLFwnaGVhbHRoXCc6YXBwLmdldChcJ3N0YXR1c1wnLHt9KS5nZXQoXCdoZWFsdGhcJyl9XG5leHBlY3RlZF9hcmdvPWpzb24ubG9hZHMoQVJHT19MSVRFUkFMKVxuZm9yIGtleSBpbiAoXCd1aWRcJyxcJ3JlcG9VUkxcJyxcJ3RhcmdldFJldmlzaW9uXCcsXCdwYXRoXCcsXCdkZXN0aW5hdGlvblwnLFwnYXV0b21hdGVkXCcpOlxuIGFzc2VydCBhcmdvW2tleV09PWV4cGVjdGVkX2FyZ29ba2V5XVxuYXNzZXJ0IGFyZ29bXCdoZWFsdGhcJ11bXCdzdGF0dXNcJ109PVwnSGVhbHRoeVwnXG5kaWZmPXN1YnByb2Nlc3MucnVuKFtcJ2t1YmVjdGxcJyxcJ2RpZmZcJyxcJy1mXCcsXCctXCddLGlucHV0PWpzb24uZHVtcHMoY2FuZGlkYXRlKSx0ZXh0PVRydWUsY2FwdHVyZV9vdXRwdXQ9VHJ1ZSk7YXNzZXJ0IGRpZmYucmV0dXJuY29kZSBpbiAoMCwxKVxuIyBEaWZmIGNhbiBjb250YWluIG9ubHkgbm9uc2VjcmV0IERlcGxveW1lbnQgcmVmZXJlbmNlczsgcHJlc2VydmUgZGlnZXN0IHJhdGhlciB0aGFuIHJhdyBzdGRvdXQuXG5ub2RlPXJ1bihbXCdrdWJlY3RsXCcsXCdkZXNjcmliZVwnLFwnbm9kZVwnXSk7YWxsb2NhdGVkPXJlLnNlYXJjaChyXCdBbGxvY2F0ZWQgcmVzb3VyY2VzOi4qP0NQVSBSZXF1ZXN0c3xBbGxvY2F0ZWQgcmVzb3VyY2VzOlwnLG5vZGUscmUuUylcbnNlY3Rpb249bm9kZS5zcGxpdChcJ0FsbG9jYXRlZCByZXNvdXJjZXM6XCcpWzFdLnNwbGl0KFwnRXZlbnRzOlwnKVswXSBpZiBcJ0FsbG9jYXRlZCByZXNvdXJjZXM6XCcgaW4gbm9kZSBlbHNlIFwnXCdcbm5vZGVzPWpzb24ubG9hZHMocnVuKFtcJ2t1YmVjdGxcJyxcJ2dldFwnLFwnbm9kZXNcJyxcJy1vXCcsXCdqc29uXCddKSlbXCdpdGVtc1wnXTthc3NlcnQgbGVuKG5vZGVzKT09MVxuYWxsb2M9bm9kZXNbMF1bXCdzdGF0dXNcJ11bXCdhbGxvY2F0YWJsZVwnXTtjcHU9YWxsb2NbXCdjcHVcJ107Y3B1X209aW50KGNwdVs6LTFdKSBpZiBjcHUuZW5kc3dpdGgoXCdtXCcpIGVsc2UgaW50KGNwdSkqMTAwMFxucmVxdWVzdGVkPWludChyZS5zZWFyY2goclwnY3B1XFxzKyhcXGQrKW1cJyxzZWN0aW9uKS5ncm91cCgxKSk7YXNzZXJ0IHJlcXVlc3RlZDw9Y3B1X21cbnJlY2VpcHQ9e1wnbm9kZV9hbGxvY2F0YWJsZV9jcHVfbVwnOmNwdV9tLFwnbm9kZV9yZXF1ZXN0ZWRfY3B1X21cJzpyZXF1ZXN0ZWQsXCdjYXB0dXJlZF9hdFwnOmRhdGV0aW1lLmRhdGV0aW1lLm5vdyhkYXRldGltZS50aW1lem9uZS51dGMpLmlzb2Zvcm1hdCgpLFwnbmF0aXZlX3dvcmtsb2FkX2NoYW5nZWRcJzpGYWxzZSxcJ25hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZFwnOkZhbHNlLFwnYXJnb1wnOmFyZ28sXCduYXRpdmVfZGVwZW5kZW5jaWVzX2NoZWNrZWRcJzpUcnVlLFwnY29uZmlnbWFwX3VpZFwnOmNtW1wnbWV0YWRhdGFcJ11bXCd1aWRcJ10sXCdwdmNfdWlkXCc6cHZjW1wnbWV0YWRhdGFcJ11bXCd1aWRcJ10sXCdsaXZlX3JlYWR5X3JlcGxpY2FzXCc6MSxcJ2FkbWl0dGVkX3VpZFwnOmFkbWl0dGVkW1wnbWV0YWRhdGFcJ11bXCd1aWRcJ10sXCdzZXJ2ZXJfZHJ5X3J1bl9wYXNzZWRcJzpUcnVlLFwnYWRtaXR0ZWRfc3BlY19leGFjdGx5X2xpdmVfcGx1c19pbWFnZVwnOlRydWUsXCdjbGllbnRfZGlmZl9leGl0XCc6ZGlmZi5yZXR1cm5jb2RlLFwnY2xpZW50X2RpZmZfc2hhMjU2XCc6aGFzaGxpYi5zaGEyNTYoZGlmZi5zdGRvdXQuZW5jb2RlKCkpLmhleGRpZ2VzdCgpLFwnbm9kZV9hbGxvY2F0ZWRfcmVzb3VyY2VzXCc6c2VjdGlvbi5zdHJpcCgpLFwnYWxsX2NoZWNrc19wYXNzXCc6VHJ1ZX1cbnByaW50KGpzb24uZHVtcHMocmVjZWlwdCkpXG4nCmZvciBtYXJrZXIsdmFsdWUgaW4gWygnREVQRU5ERU5DSUVTX0xJVEVSQUwnLChST09ULydzZWFsZWQtbmF0aXZlLWRlcGVuZGVuY2llcy5qc29uJykucmVhZF90ZXh0KCkpLCgnQ0FORElEQVRFX0xJVEVSQUwnLChST09ULydjYW5kaWRhdGUtZGVwbG95bWVudC5qc29uJykucmVhZF90ZXh0KCkpLCgnU0VBTEVEX0xJVEVSQUwnLChST09ULydzZWFsZWQtbGl2ZS1kZXBsb3ltZW50Lmpzb24nKS5yZWFkX3RleHQoKSksKCdHVUFSRF9MSVRFUkFMJywoUk9PVC8nY2hhbmdlX2d1YXJkLnB5JykucmVhZF90ZXh0KCkpLCgnQVJHT19MSVRFUkFMJyxqc29uLmR1bXBzKGpzb24ubG9hZHMoKFJPT1QvJ25hdGl2ZS1wcmVmbGlnaHQuanNvbicpLnJlYWRfdGV4dCgpKVsnYXJnbyddKSldOgogcHJvZ3JhbT1wcm9ncmFtLnJlcGxhY2UobWFya2VyLHJlcHIodmFsdWUpKQpwcm9ncmFtPSdpbXBvcnQgdHJhY2ViYWNrLGpzb25cbnRyeTpcbicrJycuam9pbignICAgICcrbGluZSsnXG4nIGZvciBsaW5lIGluIHByb2dyYW0uc3BsaXRsaW5lcygpKSsiZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICBwcmludChqc29uLmR1bXBzKHsnYWxsX2NoZWNrc19wYXNzJzpGYWxzZSwnZXhjZXB0aW9uX3R5cGUnOnR5cGUoZXJyb3IpLl9fbmFtZV9fLCdleGNlcHRpb25fbGluZSc6dHJhY2ViYWNrLmV4dHJhY3RfdGIoZXJyb3IuX190cmFjZWJhY2tfXylbLTFdLmxpbmVub30pKVxuIgpyPXN1YnByb2Nlc3MucnVuKFsnc3NoJywncmFpbGlhbmNlMDEnLCdweXRob24zIC0nXSxpbnB1dD1wcm9ncmFtLHRleHQ9VHJ1ZSxjYXB0dXJlX291dHB1dD1UcnVlKQpyZXN1bHQ9dHJhbnNwb3J0X3Jlc3VsdChyLnJldHVybmNvZGUsci5zdGRvdXQpO3Jlc3VsdFsnc2VhbGVkX3ByZWZsaWdodF9pbnB1dHNfc2hhMjU2J109aGFzaGxpYi5zaGEyNTYoKFJPT1QvJ3ByZWZsaWdodC1pbnB1dHMuanNvbicpLnJlYWRfYnl0ZXMoKSkuaGV4ZGlnZXN0KCk7cmVzdWx0WydmcmVzaF9leGVjdXRpb25fcmVjZWlwdCddPVRydWUKb3V0LndyaXRlX3RleHQoanNvbi5kdW1wcyhyZXN1bHQsaW5kZW50PTIpKydcbicpO3ByaW50KGpzb24uZHVtcHMocmVzdWx0LGluZGVudD0yKSk7c3lzLmV4aXQoMCBpZiByZXN1bHQuZ2V0KCdhbGxfY2hlY2tzX3Bhc3MnKSBpcyBUcnVlIGVsc2UgMSkK" + }, + { + "digest": "sha256:756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06", + "media_type": "application/json", + "content_base64": "ewogICJwYWNrZXRfZmlsZXMiOiB7CiAgICAiY2hhbmdlX2d1YXJkLnB5IjogImYzNDhlNDQ5YzQ5ZjRkOWU0OWFmOWU4MmUwMTc2NGU3MTk3ODM3ZmQzZGY5ZDc1NmY1ODkxZDliOGQ5YjM4YmUiLAogICAgInByZWZsaWdodC5weSI6ICI2YjRjNjVmNzA4MjM4YzlhOWQxN2ZkMDY1ODc2YzdhMDBlMWYxNzQ1OTI2Zjk5MGExZGQ1ZTY2NzI5ODM0MGNkIiwKICAgICJjYW5kaWRhdGUtZGVwbG95bWVudC5qc29uIjogIjcyMmE4ZTJkYzUyYmVjMjE3YmY5NjBlMjNiMmZkZGZjN2FjMjdkMzQzYWM4NzQzNzkwZTMxODNkYjgxYTZhMGUiLAogICAgInJvbGxiYWNrLWRlcGxveW1lbnQuanNvbiI6ICIzOWIzZjQzYmI4NGVmNDkyMWNjM2ExZmJjZGM0NDQ2MTA3NDFlZDg4MDkxNDlkOGY4ZjE3ZWQ4MDVmMjYyMTIxIiwKICAgICJzZWFsZWQtbGl2ZS1kZXBsb3ltZW50Lmpzb24iOiAiZDE4ZDI3MDYzZDA2ZjUzNWFlODg0ZWEwMWY5Njc0N2ZlMzAxNjg1NTE4YWI5NGIxY2JhMDcyYTFlMTUxOTM2MiIsCiAgICAibmF0aXZlLXByZWZsaWdodC5qc29uIjogImViNWY0MWFlZmI5NzY2NmJiMGMxMjc5NjE3ZTk1YTdjMDUwMTdhNjA5NDE1NjI0ZGFlZTcyNGM0OGI5MGQyNjIiLAogICAgInNlYWxlZC1uYXRpdmUtZGVwZW5kZW5jaWVzLmpzb24iOiAiMDQyMzI3YTAzNmVkMjU0Y2Y5NWRiZWIwYzA1NmFjMjViMDNhNmE4NDRiOTVhMzMyYzk5MmRmMjk0MzY5MTM2OSIsCiAgICAic3FsaXRlX3JlYWRvbmx5LnB5IjogImVlZjUzZGQyMzNlZWU3NGMxN2YyMDgyM2JkN2Y1Nzg3YzYwY2FkNzlhYzY0ODAyMWM5NDc5NjQzYzZjZTllMzgiCiAgfSwKICAib3duZXJfc291cmNlX2ZpbGVzIjogewogICAgImRlcGxveS9saWZlY3ljbGUvYWRtaXNzaW9uLmNhbmRpZGF0ZS5qc29uIjogIjkyMzgyYTU2YjM0OWMzYjg5NWU1ODA2ZTk3NTA4MjUyN2JiOTlkMWEwMDExNDBlNjlkODU3ZTViMDM5MWZhNTUiLAogICAgImRlcGxveS9saWZlY3ljbGUvc2VydmljZS5jYW5kaWRhdGUuanNvbiI6ICIzOGI3OGI5Y2JlZTVhZGU3NzUwYTU4ZDUxNTZjYTRjNTc3MzM1MmU5NDdhY2IzMDRlZTcxNGI1OWU3NDljZWI0IgogIH0KfQo=" + }, + { + "digest": "sha256:2ec324aa8e3f97753b3ed87bca80820feb5e542dc0a4799aa848ec77ea92feb7", + "media_type": "application/json", + "content_base64": "ewogICJub2RlX2FsbG9jYXRhYmxlX2NwdV9tIjogNDAwMCwKICAibm9kZV9yZXF1ZXN0ZWRfY3B1X20iOiAzNDYwLAogICJjYXB0dXJlZF9hdCI6ICIyMDI2LTEwLTExVDAxOjM5OjE0LjIzNDI3NyswMDowMCIsCiAgIm5hdGl2ZV93b3JrbG9hZF9jaGFuZ2VkIjogZmFsc2UsCiAgIm5hdGl2ZV9iYWNrdXBfcmVzdG9yZV9leGVjdXRlZCI6IGZhbHNlLAogICJhcmdvIjogewogICAgInVpZCI6ICI0OTk4NjhmMi1lYWJjLTRkZjQtYWUzMS1iODljZTU4ZDc1MGQiLAogICAgInJlcG9VUkwiOiAiaHR0cHM6Ly9mb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb24uZ2l0IiwKICAgICJ0YXJnZXRSZXZpc2lvbiI6ICI3ZGI4NDg1ZmZlY2RlYmZhYmQ3N2E5ZGFlYzA4NTU1M2M3NGJmMGJmIiwKICAgICJwYXRoIjogImRlcGxveS9saWZlY3ljbGUiLAogICAgImRlc3RpbmF0aW9uIjogewogICAgICAibmFtZXNwYWNlIjogImluZm9ybWVkLWRlY2lzaW9uIiwKICAgICAgInNlcnZlciI6ICJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiCiAgICB9LAogICAgImF1dG9tYXRlZCI6IGZhbHNlLAogICAgInN5bmMiOiB7CiAgICAgICJjb21wYXJlZFRvIjogewogICAgICAgICJkZXN0aW5hdGlvbiI6IHsKICAgICAgICAgICJuYW1lc3BhY2UiOiAiaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAgICAgInNlcnZlciI6ICJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiCiAgICAgICAgfSwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgInBhdGgiOiAiZGVwbG95L2xpZmVjeWNsZSIsCiAgICAgICAgICAicmVwb1VSTCI6ICJodHRwczovL2Zvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbi5naXQiLAogICAgICAgICAgInRhcmdldFJldmlzaW9uIjogIjdkYjg0ODVmZmVjZGViZmFiZDc3YTlkYWVjMDg1NTUzYzc0YmYwYmYiCiAgICAgICAgfQogICAgICB9LAogICAgICAicmV2aXNpb24iOiAiN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZiIsCiAgICAgICJzdGF0dXMiOiAiT3V0T2ZTeW5jIgogICAgfSwKICAgICJoZWFsdGgiOiB7CiAgICAgICJsYXN0VHJhbnNpdGlvblRpbWUiOiAiMjAyNi0xMC0xMFQyMzoxNDo1MloiLAogICAgICAic3RhdHVzIjogIkhlYWx0aHkiCiAgICB9CiAgfSwKICAibmF0aXZlX2RlcGVuZGVuY2llc19jaGVja2VkIjogdHJ1ZSwKICAiY29uZmlnbWFwX3VpZCI6ICI5MDExM2QyZC01NGQ5LTRlODItYjFkMy05MGI0OWViZWQyYjUiLAogICJwdmNfdWlkIjogImQ4MGIyNWIxLTE0MWEtNDQxYi1iMjA1LTk4ZmEyZmQ5OGI3YyIsCiAgImxpdmVfcmVhZHlfcmVwbGljYXMiOiAxLAogICJhZG1pdHRlZF91aWQiOiAiYTU4OGUxMGEtOTBkMi00ODgzLTk3NWUtNmRkOGI4ZmVjYTkyIiwKICAic2VydmVyX2RyeV9ydW5fcGFzc2VkIjogdHJ1ZSwKICAiYWRtaXR0ZWRfc3BlY19leGFjdGx5X2xpdmVfcGx1c19pbWFnZSI6IHRydWUsCiAgImNsaWVudF9kaWZmX2V4aXQiOiAxLAogICJjbGllbnRfZGlmZl9zaGEyNTYiOiAiODQwNzY5YzdkMmE5YzE2NTVjNDBhMzI1OWY4MzNkMWZjOGY2OTk1MGNlYjNiZWRiNzA3YTk1NWZlZDcxMTU2NiIsCiAgIm5vZGVfYWxsb2NhdGVkX3Jlc291cmNlcyI6ICIoVG90YWwgbGltaXRzIG1heSBiZSBvdmVyIDEwMCBwZXJjZW50LCBpLmUuLCBvdmVyY29tbWl0dGVkLilcbiAgUmVzb3VyY2UgICAgICAgICAgIFJlcXVlc3RzICAgICAgTGltaXRzXG4gIC0tLS0tLS0tICAgICAgICAgICAtLS0tLS0tLSAgICAgIC0tLS0tLVxuICBjcHUgICAgICAgICAgICAgICAgMzQ2MG0gKDg2JSkgICAzNjIwMG0gKDkwNSUpXG4gIG1lbW9yeSAgICAgICAgICAgICA5NDcyTWkgKDU5JSkgIDMyODk4TWkgKDIwNSUpXG4gIGVwaGVtZXJhbC1zdG9yYWdlICAwICgwJSkgICAgICAgIDAgKDAlKVxuICBodWdlcGFnZXMtMUdpICAgICAgMCAoMCUpICAgICAgICAwICgwJSlcbiAgaHVnZXBhZ2VzLTJNaSAgICAgIDAgKDAlKSAgICAgICAgMCAoMCUpIiwKICAiYWxsX2NoZWNrc19wYXNzIjogdHJ1ZSwKICAic2VhbGVkX3ByZWZsaWdodF9pbnB1dHNfc2hhMjU2IjogIjc1NmU3MmRhOWVjMzY1NzIyNDI0MjFiZWE4YjZkMjI4NTM5NGUzMzRmOTkxZGI1ZTkwZTliNDA5NTYzYjVmMDYiLAogICJmcmVzaF9leGVjdXRpb25fcmVjZWlwdCI6IHRydWUKfQo=" + } + ] + }, + "publish": { + "version": 1, + "audience": { + "subjects": [], + "groups": [ + "net-kingdom-admins" + ] + } + }, + "review": { + "version": 1, + "options": { + "submitter": "state-hub", + "memo_class": "decision-record", + "review_group": "net-kingdom-admins", + "approval_intent": { + "action": "administer", + "principal": "informed-decision", + "purpose": "Approve exact image-only purpose overlay release plus protected native evidence backup/restore gates and explicit inherited fixable-medium owner follow-through; no unrelated grant.", + "target": { + "id": "INFD-WP-0009-T04/purpose-overlay-v1", + "type": "runtime-change", + "system": "railiance01" + } + } + } + } + } +] diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json new file mode 100644 index 0000000..da273f6 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json @@ -0,0 +1,141 @@ +{ + "id": "infd-20261011-purpose-overlay-r1", + "version": 1, + "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", + "requested_act": "approve", + "binding_level": "organizational", + "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Before ANY admin/Store, readonly schema5/integrity/count gate; protected backup/restore, sealedDeployment+actualCM/PVC identities and unoptimizedpreflight required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "binding": { + "principal": { + "id": "pending-human-session", + "kind": "person", + "display_name": "Founder review" + }, + "target": { + "kind": "environment", + "id": "realm:kubernetes/railiance01/informed-decision", + "label": "Informed Decision image-only purpose hardening on railiance01", + "environment": "production" + }, + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedCM/PVC/Deploymentpreflight+pre-openreadonlyschema5+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + }, + "step_kind": "approve", + "packet": [ + { + "item_id": "decision-packet-md", + "label": "decision-packet.md", + "hash": "sha256:23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1" + }, + { + "item_id": "proposal-json", + "label": "proposal.json", + "hash": "sha256:a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82" + }, + { + "item_id": "candidate-admission-json", + "label": "candidate-admission.json", + "hash": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "item_id": "rollback-admission-json", + "label": "rollback-admission.json", + "hash": "sha256:22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "item_id": "candidate-deployment-json", + "label": "candidate-deployment.json", + "hash": "sha256:722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "item_id": "rollback-deployment-json", + "label": "rollback-deployment.json", + "hash": "sha256:39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "item_id": "published-verification-json", + "label": "published-verification.json", + "hash": "sha256:8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2" + }, + { + "item_id": "registry-proof-json", + "label": "registry-proof.json", + "hash": "sha256:5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "item_id": "security-summary-json", + "label": "security-summary.json", + "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "item_id": "trivy-full-json", + "label": "trivy-full.json", + "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "item_id": "sqlite-readonly-py", + "label": "sqlite_readonly.py", + "hash": "sha256:eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38" + }, + { + "item_id": "sealed-native-dependencies-json", + "label": "sealed-native-dependencies.json", + "hash": "sha256:042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369" + }, + { + "item_id": "native-backup-restore-protocol-md", + "label": "native-backup-restore-protocol.md", + "hash": "sha256:2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc" + }, + { + "item_id": "inherited-vulnerability-follow-through-json", + "label": "inherited-vulnerability-follow-through.json", + "hash": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "item_id": "native-preflight-json", + "label": "native-preflight.json", + "hash": "sha256:eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "item_id": "sealed-live-deployment-json", + "label": "sealed-live-deployment.json", + "hash": "sha256:d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "item_id": "change-guard-py", + "label": "change_guard.py", + "hash": "sha256:f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be" + }, + { + "item_id": "preflight-py", + "label": "preflight.py", + "hash": "sha256:6b4c65f708238c9a9d17fd065876c7a00e1f1745926f990a1dd5e667298340cd" + }, + { + "item_id": "preflight-inputs-json", + "label": "preflight-inputs.json", + "hash": "sha256:756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06" + }, + { + "item_id": "fresh-preflight-validation-json", + "label": "fresh-preflight-validation.json", + "hash": "sha256:2ec324aa8e3f97753b3ed87bca80820feb5e542dc0a4799aa848ec77ea92feb7" + } + ], + "highlights": [ + { + "id": "native-custody-rollout-and-known-medium", + "item_id": "decision-packet-md", + "note": "Protected real-data snapshot/restore and a brief Recreate restart require this separate native approval. Actual scan has one fixable inherited MEDIUM, not zero CVEs; exact owner follow-through due2026-10-18 is manual, with no automatic controller. Rollback preserves latestschema5DB and allnew/uncertain evidence. Synthetic transport tests are not native PDP authority proof. Admin can migrate oldschemas: readonlyschema5/integrity/count check must precede every native/offline Store/admin open. ActualCM/PVC UID/custody drift and optimizedPython stop the operation.", + "required_ack": true, + "severity": "warning", + "locator": { + "kind": "section", + "heading": "Requested decision" + } + } + ], + "sealed": false, + "approval_id": null, + "approval_binding_digest": null +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md new file mode 100644 index 0000000..6a12571 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md @@ -0,0 +1,52 @@ +# Protected native backup/restore and image-only release protocol + +Prepared protocol for `INFD-WP-0009-T04/purpose-overlay-v1`. No actual native backup, data export, restore, workload change or approval is recorded here. Candidate registry image identity remains a prerequisite; only after actual artifact proof may the founder approve one exact conditional protocol/rollout packet. The config-only7db8485 approval is outside this scope. + +## Preconditions and protected custody + +Freeze exact candidate and prior7f5c6cb image digests, source/installed policy hashes, current manually managed Argo Application/revision, runtime ConfigMap6c221878d051, Deployment UID/template/spec, schema5, policy package pins, database path `/data/private/review.sqlite`, PVC binding, replicas1/Recreate and stable keys for intended verification. Confirm no concurrent writer or custody change. Use fixed metadata; never fetch Secret objects or token values. A changed image/config/schema/owner invalidates the packet. Fresh resources/headroom and exact source/native server-dry-run/diff remain required. + +Backups are private evidence containing real decision records, not logs or packet attachments. Allocate a unique backup directory under existing protected PVC custody, owned10001, mode0700, snapshot file0600, no symlink/hardlink/reused output path. An off-cluster copy belongs only in the already established ignored `.private-backups/` custody with0700/0600 permissions; no Git, StateHub, public object store or terminal-content dump. Record only schema, integrity pass/fail, bounded table/state counts and protected receipt identifier; retain byte digests in protected custody if needed for internal copy identity. No credential, record payload or token fingerprint enters public evidence. + +## Approved online compatibility drill + +Within the explicit founder-approved action, run the existing base image's `informed-decision-admin backup --db /data/private/review.sqlite --output ` in the actual serving workload. This uses SQLite's backup API for a transactionally consistent snapshot; copying a live main database while ignoring WAL is prohibited. Suppress raw failures/output and retain only sanitized status. Observe schema/integrity and count-only metadata from the resulting snapshot, not record content. + +Transfer that consistent snapshot only into protected off-cluster custody through the existing authorized operator lane. The copy is real production data even in build mode. Verify private permissions, unique identity and protected internal digest agreement. Do not export mounted workload credentials or directory trees; copy only the exact snapshot. + +Create a separate private disposable restore volume/directory; retain the original snapshot unchanged. Run the exact published candidate with network disabled, no production ConfigMap/token mounts, read-only image and only that isolated volume writable. Override the service entrypoint with the owner's count-only administrative inspection/integrity check; do not start HTTP listeners, audit delivery, requester exchanges or approval operations. The current candidate changes policy.py only and retains the schema/store module bytes; still prove schema5, SQLite integrity and exact bounded counts before/after opening the restored copy. Refuse any migration/downgrade, lost/changed counts, unexpected write class or unknown outcome. Keep pending/uncertain submission and outbox states; never replay, discard or mark them delivered to green the drill. Cleanup only the disposable copy/volume after verified receipt; retain the original protected backup for the approved recovery interval. + +This step is actual native-data compatibility evidence once performed. Its previous synthetic fixture checks remain mechanism evidence and cannot be renamed native success. A failed drill stops rollout and remains a failed/unverified outcome in the same trial. + +## Fresh cutover snapshot and single-writer rollout + +After successful actual-data compatibility checks, create another unique SQLite-consistent online snapshot immediately before the image cutover, retaining its point-in-time schema/integrity/count receipt. This is an online transactional snapshot, not a claim that dispatchers or human writes were quiesced. Every later committed record remains in the live database; same-schema rollback retains that database and never restores the earlier snapshot over it. The narrow image-only update does not need dispatcher/configuration/PVC/temporary-pod changes or a schema cutover. If fresh verification shows a migration or any data-restoration requirement, stop and refine the proposal rather than applying this protocol. + +The existing Recreate rollout drains/stops the single old writer before starting the new image on the same PVC; the inherited single-writer lock independently refuses concurrent serving processes. Do not add an admin pod, scale-to-zero, dispatcher stop, network-policy rewrite or snapshot overwrite as an improvised image-only step. The existing owner admin backup operation runs inside the admitted serving workload, and its separate protected restore drill runs off-cluster with network disabled and no workload credentials. Those exact custody operations must be enumerated in the founder packet alongside the one Deployment image change. + +Once backup/compatibility/preflight gates pass, manually pin the existing Argo Application to the exact reviewed source revision and sync only Deployment/informed-decision with prune false, keeping the current immutable runtime ConfigMap and all other resources. The source patch changes only the image in admission/rendered Deployment; no Secret, PVC, policy, database or dispatcher change is included unless separately enumerated in the final proposal. Observe five-minute readiness and exact image/config/schema/pins. Verify native lifecycle binding using stable keys and an isolated installed-client probe based on a real provider response contaminated with advisory purpose; prove refusal before any write. Do not contaminate the live PDP, create human approvals, read credentials through CLI, or replay unknown external outcomes for testing. + +## Same-schema rollback and evidence retention + +On startup/readiness/binding/refusal failure, retain current database, cutover backup and every post-cutover evidence/uncertain outcome. Restore only the prior7f5c6cb image through the same manual Argo owner path, retaining schema5 and current DB/configuration; never restore an old snapshot over current live evidence just to roll the image back. Verify old image/Ready1, same schema/counts and prior behavior, and reconcile any external effects using existing lifecycle/audit ownership. The narrow overlay's identical store/schema/dependency bytes permit this image-only rollback; it is not permission for a schema downgrade or data loss. + +Record original/approved/executed source and image revisions, backup/drill/cutover/rollout timestamps, exact disposition and sanitized outcomes in the existing supervised trial receipt. EUR0 incremental infrastructure estimate uses existing service/storage/operator lane; protected temporary copy/storage consumption and15–30minute recovery time remain operational costs. No EUR incident-loss cap or autonomy grant is inferred. TaskT04 cannot close until actual published image, approved native compatibility and release plus post-release refusal/binding evidence all exist. + +## Exact release case identifiers + +Proposal `INFD-WP-0009-T04/purpose-overlay-v1`, trial `infd-purpose-20261011-r1`. +Protected native parent `/data/private/purpose-overlay-r1` must be unique/non-symlink, owned10001 and0700. The drill snapshot is `drill.sqlite`, the refreshed pre-cutover snapshot `cutover.sqlite`, each new0600 file; refuse any existing output. Off-cluster custody is the existing ignored Custodian `.private-backups/20261011-infd-purpose-r1` parent0700, files0600; no snapshot is an evidence attachment. Check owner UID, no symlinks, ignored status and free capacity for both native snapshots plus independently protected copies before making any snapshot. + +The disposable offline restore volume is `infd-purpose-r1-restore-20261011`; refuse an existing volume, copy only the selected frozen snapshot, and run exact published candidate763c with networknone/read-only image,128MiB/core1 and no runtime config/token mounts. SQLite `PRAGMA integrity_check` must return `ok`, `PRAGMA user_version`/Store inspection must agree with actual schema5 semantics, and installed admin count-only inspection must match the frozen snapshot. Validate the actual schema representation rather than assume PRAGMA user_version is the schema authority. No synthetic restoration is reported as native restoration. Native original/off-cluster copies remain retained; only the disposable restore copy/volume may be removed under the exact approved cleanup scope. + +## Mandatory pre-open schema gate and offline command + +`informed-decision-admin inspect` and `backup` construct Store, which can migrate schemas1–4 to5. Therefore **before any Store/admin open**, run the exact attached stdlib-only `sqlite_readonly.py` against the native source database using SQLite URI mode=ro, query_only and one read transaction. Require PRAGMA user_version5, integrity_check=ok and retain count-only baseline. Refuse any other/unknown schema or incomplete integrity/count check before constructing Store; do not infer no migration from a post-open admin report. This native gate has not been executed in this source-preparation stage. Repeat before each native backup/admin operation. + +After copying the selected consistent snapshot to the isolated restored private path `/restore/review.sqlite`, run the same read-only checker **before** any offline candidate admin/Store opens that copy. Frozen snapshot and restored-copy schema/integrity/count reports must agree exactly; the copied main-file digest must match the selected closed snapshot. Reject oldschema fixtures rather than allow migration. Only after this pre-open gate may the offline candidate admin inspect run. + +Offline command vectors use exactimage `forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a`, `--network none --read-only --cpus 1 --memory 128m`, private restored volume mounted at `/restore`, and **no runtime config/credential/token mounts**. First override entrypoint to `python`, arguments `- --db /restore/review.sqlite`, streaming only the verified attached checker on stdin. Then override entrypoint to **`informed-decision-admin`**, arguments **`inspect --db /restore/review.sqlite`**. This does not start `informed-decision-container`, the HTTP service, dispatcher or delivery workers. Compare the admin's schema/lifecycle/outbox/submission counters to the frozen pre-open snapshot report; integrity and migration-free pre-open proof come from the stdlib checker, not admin output alone. + +Live reads and online snapshots may legitimately differ because reviews, intake and delivery can commit concurrently. Exact counter equality is required between the frozen selected snapshot and its offline restored clone; it is **not** required between a running post-cutover/rollback database and an earlier snapshot. Live count changes must be accounted for as legitimate committed records/state transitions; preserve all current and uncertain entries. Do not discard new commits or restore the old snapshot to force equality. Same-schema image rollback keeps the current live DB, followed by read-only schema5/integrity and count-only health checks; any unexplained evidence loss or required data recovery stops and requires a separate founder decision. + +The fresh preflight also independently reads the actual immutable nonsecret ConfigMap and bound PVC: compares sealed UIDs/fullmetadata/PVCspec+volumeName and canonical runtime data checksum, returning no raw runtime data. Same-name deletion/recreation or content/custody drift stops before admission. Secret values remain excluded. Both local and remote optimized Python interpreters are explicitly refused before assertion-based gates. diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json new file mode 100644 index 0000000..09fed88 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json @@ -0,0 +1,5 @@ +{ + "all_checks_pass": false, + "transport_exit": 1, + "stderr_sha256": "d9ea0351e38468c65d13bd68ece0c8e27acb654380ffee23111f76655edf8c49" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json new file mode 100644 index 0000000..973ff50 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json @@ -0,0 +1,9 @@ +{ + "all_checks_pass": false, + "metadata_diff": { + "category": "annotations", + "changed_keys": [ + "argocd.argoproj.io/tracking-id" + ] + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json new file mode 100644 index 0000000..10603b4 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json @@ -0,0 +1,43 @@ +{ + "captured_at": "2026-10-11T01:25:38.793555+00:00", + "native_workload_changed": false, + "native_backup_restore_executed": false, + "argo": { + "uid": "499868f2-eabc-4df4-ae31-b89ce58d750d", + "repoURL": "https://forgejo.coulomb.social/coulomb/informed-decision.git", + "targetRevision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "path": "deploy/lifecycle", + "destination": { + "namespace": "informed-decision", + "server": "https://kubernetes.default.svc" + }, + "automated": false, + "sync": { + "comparedTo": { + "destination": { + "namespace": "informed-decision", + "server": "https://kubernetes.default.svc" + }, + "source": { + "path": "deploy/lifecycle", + "repoURL": "https://forgejo.coulomb.social/coulomb/informed-decision.git", + "targetRevision": "7db8485ffecdebfabd77a9daec085553c74bf0bf" + } + }, + "revision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "status": "OutOfSync" + }, + "health": { + "lastTransitionTime": "2026-10-10T23:14:52Z", + "status": "Healthy" + } + }, + "live_ready_replicas": 1, + "admitted_uid": "a588e10a-90d2-4883-975e-6dd8b8feca92", + "server_dry_run_passed": true, + "admitted_spec_exactly_live_plus_image": true, + "client_diff_exit": 1, + "client_diff_sha256": "a4bc024a8cec658f835285ed51964e2e084edbaf103d45a48b89c0950bcd3e7d", + "node_allocated_resources": "(Total limits may be over 100 percent, i.e., overcommitted.)\n Resource Requests Limits\n -------- -------- ------\n cpu 3460m (86%) 36200m (905%)\n memory 9472Mi (59%) 32898Mi (205%)\n ephemeral-storage 0 (0%) 0 (0%)\n hugepages-1Gi 0 (0%) 0 (0%)\n hugepages-2Mi 0 (0%) 0 (0%)", + "all_checks_pass": true +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json new file mode 100644 index 0000000..d7ded46 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json @@ -0,0 +1,16 @@ +{ + "packet_files": { + "change_guard.py": "f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be", + "preflight.py": "6b4c65f708238c9a9d17fd065876c7a00e1f1745926f990a1dd5e667298340cd", + "candidate-deployment.json": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e", + "rollback-deployment.json": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121", + "sealed-live-deployment.json": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362", + "native-preflight.json": "eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262", + "sealed-native-dependencies.json": "042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369", + "sqlite_readonly.py": "eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38" + }, + "owner_source_files": { + "deploy/lifecycle/admission.candidate.json": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55", + "deploy/lifecycle/service.candidate.json": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4" + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py new file mode 100644 index 0000000..e7d6e22 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py @@ -0,0 +1,25 @@ +"""Read-only refresh; exact original capture remains immutable; never execute cutover.""" +import argparse,hashlib,json,subprocess,sys +from pathlib import Path +if sys.flags.optimize: + raise SystemExit("optimized interpreter refused before source/transport execution") +ROOT=Path(__file__).resolve().parent +p=argparse.ArgumentParser();p.add_argument('--receipt-output',type=Path,required=True);p.add_argument('--source-root',type=Path,default=Path('/home/worsch/informed-decision'));a=p.parse_args() +out=a.receipt_output.resolve() +if not a.receipt_output.is_absolute() or out==ROOT or ROOT in out.parents or out==a.source_root.resolve() or a.source_root.resolve() in out.parents or out.exists(): + raise SystemExit('unique execution receipt must be outside the sealed packet') +inputs=json.loads((ROOT/'preflight-inputs.json').read_text()) +for relative,digest in inputs['packet_files'].items(): + path=ROOT/relative + if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest()!=digest:raise SystemExit('sealed helper/input bytes changed') +for relative,digest in inputs['owner_source_files'].items(): + path=a.source_root/relative + if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest()!=digest:raise SystemExit('owner source bytes changed') +from change_guard import transport_result +program='import subprocess,json,hashlib,datetime,sys,copy,re\nif sys.flags.optimize:raise RuntimeError("optimized interpreter refused")\ncandidate=json.loads(CANDIDATE_LITERAL)\nsealed_dependencies=json.loads(DEPENDENCIES_LITERAL)\nsealed_baseline=json.loads(SEALED_LITERAL)\nexec(GUARD_LITERAL)\ndef run(args,data=None):\n p=subprocess.run(args,input=data,text=True,capture_output=True)\n if p.returncode: raise ValueError(\'read-only command failed: \'+args[1]+\' \'+args[2])\n return p.stdout\nlive=json.loads(run([\'kubectl\',\'get\',\'deployment\',\'informed-decision\',\'-n\',\'informed-decision\',\'-o\',\'json\']))\ncm=json.loads(run([\'kubectl\',\'get\',\'configmap\',\'informed-decision-runtime-6c221878d051\',\'-n\',\'informed-decision\',\'-o\',\'json\']))\npvc=json.loads(run([\'kubectl\',\'get\',\'pvc\',\'informed-decision-data\',\'-n\',\'informed-decision\',\'-o\',\'json\']))\ncheck_dependencies(cm,pvc,sealed_dependencies)\ncheck_current(live,sealed_baseline)\nspec=live[\'spec\']; cs=spec[\'template\'][\'spec\'][\'containers\'];assert len(cs)==1 and cs[0][\'name\']==\'informed-decision\'\nexpected_env={\'INFD_KEYCAPE_ISSUER\':\'https://kc.coulomb.social\',\'INFD_CONTAINER_CONFIG\':\'/configuration/runtime.json\'}\nassert cs[0].get(\'env\')==[{\'name\':\'INFD_KEYCAPE_ISSUER\',\'value\':expected_env[\'INFD_KEYCAPE_ISSUER\']},{\'name\':\'INFD_CONTAINER_CONFIG\',\'value\':expected_env[\'INFD_CONTAINER_CONFIG\']}]\nassert cs[0][\'image\']==\'forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\'\nassert spec[\'replicas\']==1 and spec[\'strategy\']=={\'type\':\'Recreate\'}\nassert next(v for v in spec[\'template\'][\'spec\'][\'volumes\'] if v[\'name\']==\'configuration\')[\'configMap\'][\'name\']==\'informed-decision-runtime-6c221878d051\'\nassert live[\'status\'].get(\'readyReplicas\')==1 and live[\'status\'].get(\'updatedReplicas\')==1\nsealed={\'apiVersion\':live[\'apiVersion\'],\'kind\':live[\'kind\'],\'metadata\':{k:copy.deepcopy(v) for k,v in live[\'metadata\'].items() if k not in (\'resourceVersion\',\'generation\',\'creationTimestamp\',\'managedFields\')},\'spec\':copy.deepcopy(spec)}\nfor key in (\'kubectl.kubernetes.io/last-applied-configuration\',\'deployment.kubernetes.io/revision\'):sealed[\'metadata\'].get(\'annotations\',{}).pop(key,None)\nadmitted=json.loads(run([\'kubectl\',\'apply\',\'--dry-run=server\',\'-f\',\'-\',\'-o\',\'json\'],json.dumps(candidate)))\ncheck_admitted(admitted,sealed_baseline)\napp=json.loads(run([\'kubectl\',\'get\',\'application\',\'informed-decision\',\'-n\',\'argocd\',\'-o\',\'json\']))\nassert app[\'spec\'][\'source\'][\'path\']==\'deploy/lifecycle\' and not app[\'spec\'].get(\'syncPolicy\',{}).get(\'automated\')\nargo={\'uid\':app[\'metadata\'][\'uid\'],\'repoURL\':app[\'spec\'][\'source\'][\'repoURL\'],\'targetRevision\':app[\'spec\'][\'source\'][\'targetRevision\'],\'path\':app[\'spec\'][\'source\'][\'path\'],\'destination\':app[\'spec\'][\'destination\'],\'automated\':False,\'sync\':app.get(\'status\',{}).get(\'sync\'),\'health\':app.get(\'status\',{}).get(\'health\')}\nexpected_argo=json.loads(ARGO_LITERAL)\nfor key in (\'uid\',\'repoURL\',\'targetRevision\',\'path\',\'destination\',\'automated\'):\n assert argo[key]==expected_argo[key]\nassert argo[\'health\'][\'status\']==\'Healthy\'\ndiff=subprocess.run([\'kubectl\',\'diff\',\'-f\',\'-\'],input=json.dumps(candidate),text=True,capture_output=True);assert diff.returncode in (0,1)\n# Diff can contain only nonsecret Deployment references; preserve digest rather than raw stdout.\nnode=run([\'kubectl\',\'describe\',\'node\']);allocated=re.search(r\'Allocated resources:.*?CPU Requests|Allocated resources:\',node,re.S)\nsection=node.split(\'Allocated resources:\')[1].split(\'Events:\')[0] if \'Allocated resources:\' in node else \'\'\nnodes=json.loads(run([\'kubectl\',\'get\',\'nodes\',\'-o\',\'json\']))[\'items\'];assert len(nodes)==1\nalloc=nodes[0][\'status\'][\'allocatable\'];cpu=alloc[\'cpu\'];cpu_m=int(cpu[:-1]) if cpu.endswith(\'m\') else int(cpu)*1000\nrequested=int(re.search(r\'cpu\\s+(\\d+)m\',section).group(1));assert requested<=cpu_m\nreceipt={\'node_allocatable_cpu_m\':cpu_m,\'node_requested_cpu_m\':requested,\'captured_at\':datetime.datetime.now(datetime.timezone.utc).isoformat(),\'native_workload_changed\':False,\'native_backup_restore_executed\':False,\'argo\':argo,\'native_dependencies_checked\':True,\'configmap_uid\':cm[\'metadata\'][\'uid\'],\'pvc_uid\':pvc[\'metadata\'][\'uid\'],\'live_ready_replicas\':1,\'admitted_uid\':admitted[\'metadata\'][\'uid\'],\'server_dry_run_passed\':True,\'admitted_spec_exactly_live_plus_image\':True,\'client_diff_exit\':diff.returncode,\'client_diff_sha256\':hashlib.sha256(diff.stdout.encode()).hexdigest(),\'node_allocated_resources\':section.strip(),\'all_checks_pass\':True}\nprint(json.dumps(receipt))\n' +for marker,value in [('DEPENDENCIES_LITERAL',(ROOT/'sealed-native-dependencies.json').read_text()),('CANDIDATE_LITERAL',(ROOT/'candidate-deployment.json').read_text()),('SEALED_LITERAL',(ROOT/'sealed-live-deployment.json').read_text()),('GUARD_LITERAL',(ROOT/'change_guard.py').read_text()),('ARGO_LITERAL',json.dumps(json.loads((ROOT/'native-preflight.json').read_text())['argo']))]: + program=program.replace(marker,repr(value)) +program='import traceback,json\ntry:\n'+''.join(' '+line+'\n' for line in program.splitlines())+"except Exception as error:\n print(json.dumps({'all_checks_pass':False,'exception_type':type(error).__name__,'exception_line':traceback.extract_tb(error.__traceback__)[-1].lineno}))\n" +r=subprocess.run(['ssh','railiance01','python3 -'],input=program,text=True,capture_output=True) +result=transport_result(r.returncode,r.stdout);result['sealed_preflight_inputs_sha256']=hashlib.sha256((ROOT/'preflight-inputs.json').read_bytes()).hexdigest();result['fresh_execution_receipt']=True +out.write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2));sys.exit(0 if result.get('all_checks_pass') is True else 1) diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json new file mode 100644 index 0000000..2f0e2f5 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json @@ -0,0 +1,55 @@ +{ + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "trial_id": "infd-purpose-20261011-r1", + "state": "prepared-unapproved", + "target": "realm:kubernetes/railiance01/informed-decision", + "authority": "ADMINISTER; activation APPROVED only upon exact founder disposition", + "candidate_image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "published_source_revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "prior_image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "prior_argo_revision": "7db8485ffecdebfabd77a9daec085553c74bf0bf", + "native_object": { + "apiVersion": "apps/v1", + "kind": "Deployment", + "namespace": "informed-decision", + "name": "informed-decision", + "uid": "a588e10a-90d2-4883-975e-6dd8b8feca92" + }, + "argo_application_uid": "499868f2-eabc-4df4-ae31-b89ce58d750d", + "source_gate": "Exact committed owner source must contain the two approved candidate file hashes in preflight-inputs.json; source preparation is not native approval", + "sync_scope": [ + "apps:Deployment:informed-decision" + ], + "prune": false, + "automated_sync": false, + "runtime_configmap": "informed-decision-runtime-6c221878d051", + "schema": 5, + "requested_operations": [ + "Protected SQLite-consistent native backup and independently protected off-cluster custody", + "Offline restore/integrity/count comparison on a private disposable volume with exact candidate, no runtime tokens/config/network", + "Refresh a consistent pre-cutover snapshot, retain private copies and count-only/hash receipts", + "Pin existing manual Argo Application to exact approved owner source and manually sync only existing Deployment image", + "Verify health/readiness/image/module/installed fail-closed purpose checks and retained schema/count evidence; recover to prior same-schema image if needed" + ], + "execute_by": "2026-10-12T23:59:59Z", + "temporary_vulnerability_review_due": "2026-10-18", + "known_scan_findings": "0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, actual currentbase+candidate findings identical", + "vulnerability_record": "INFD-RISK-20261011-ZLIB-85091 / INFD-WP-0009-T05", + "cost_estimate_EUR": 0, + "cost_limits": "No new recurring infrastructure; private backup storage and attended engineering/recovery time unpriced, not an autopilot cost grant", + "risk_estimates": [ + "Brief Recreate service interruption; no concurrent new writer/surge", + "Private evidence snapshot custody and disposal errors; no snapshots/tokens in public evidence", + "Candidate purpose refusal may expose callers relying on advisory results as binding", + "Inherited known fixable MEDIUM remains until separately approved owner remediation", + "Existing Argo OutOfSync baseline is retained; no whole-app sync or unrelated repairs permitted" + ], + "rollback": "Manual Argo source pin back to7db8485 and scoped Deployment-only sync to7f5c image; retain current schema5 database and all post-cutover evidence, never restore older snapshot over live writes", + "native_executed": false, + "human_approval": false, + "refinement_of_manifest": "7c6738b39ea8e54e61c8ed625e94ad0b2755e672e1576efcdf84a1d665ac3300", + "mandatory_pre_open_gate": "stdlibSQLite mode=ro/query_only: schema5+integrity+count baseline before ANY Store/admin on native source or restoredcopy; refuseoldschemas without migration", + "optimized_interpreters": "local+remote explicitlyrefused beforeassert gates", + "native_dependency_gate": "sealed actualCM UID/immutable/canonicaldatahash+PVC UID/fullspec/Bound/volumeName, no rawCMdata orSecret reads", + "live_counts": "Frozen snapshot/clone exactcounter equality; postcutover/rollback livecounterchanges may reflect legitimate concurrentcommits/state transitions, latestDB alwaysretained" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json new file mode 100644 index 0000000..5db68f7 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json @@ -0,0 +1,64 @@ +{ + "proposal": "INFD-WP-0009-T04/purpose-overlay-v1", + "observed_at": "2026-10-11T01:24:01.985128+00:00", + "native_owner_publication_job": { + "id": 11484, + "name": "publish-candidate", + "head_branch": "main", + "head_sha": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "run_number": 3, + "event": "push", + "display_title": "Prepare readable overlay context with the admitted legacy builder", + "status": "success", + "workflow_id": "purpose-overlay-image.yaml", + "url": "https://forgejo.coulomb.social/coulomb/informed-decision/actions/runs/3", + "created_at": "2026-10-11T01:20:59Z", + "updated_at": "2026-10-11T01:21:08Z", + "run_started_at": "2026-10-11T01:20:59Z" + }, + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "source_revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "policy_sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62", + "registry_proof_sha256": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213", + "source_render_change_only": "Deployment/informed-decision spec.template.spec.containers[0].image", + "runtime_configmap_unchanged": "informed-decision-runtime-6c221878d051", + "installed_image_execution": { + "immutable_registry_artifact_pulled_anonymously": true, + "UID": 10001, + "GID": 10001, + "policy_file_UID": 0, + "policy_file_mode": "0644", + "purpose_variants": 10, + "binding_forms_allowed": 2, + "advisory_or_malformed_refused": 8, + "network": "none", + "read_only": true, + "synthetic_transport": true, + "native_PDP_test": false + }, + "scan_summary_sha256": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44", + "historical_failed_runs_retained": [ + "f66de505/task11482/run1", + "acecad887/task11483/run2" + ], + "native_hosting_changed": false, + "native_backup_restore_executed": false, + "human_approval": false, + "evidence_file_sha256": { + "image-manifest.json": "978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb", + "image-config.json": "4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10", + "base-image-config.json": "b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00", + "registry-proof.json": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213", + "trivy-full.json": "f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e", + "sbom.cdx.json": "a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d", + "base-trivy-full.json": "d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80", + "check_installed.py": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad", + "verify_registry.py": "413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4", + "sqlite_readonly.py": "eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38", + "sealed-native-dependencies.json": "042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369", + "review-refinement.json": "ea62845cee5ee6f4f6cb7f5dcd0af601ba29a21c8ff80efbbc02ad16e35bea75", + "test_change_guard.py": "da5350437357ba329236cc137610c03856f38f836ddf2856025bc12011fad07f", + "test_sqlite_readonly.py": "c7a91d0c6a373d738c88bb817d9bfb2ff8a179bc61b93063b89677b566520323", + "test_preflight_optimization.py": "a0c4fa18c5d6c21476a06c6d05fe7656259d204299138851599e9214d911206d" + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json new file mode 100644 index 0000000..918ff6d --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json @@ -0,0 +1,47 @@ +{ + "image_digest": "sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "source_revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "base_image_digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "base_layer_bytes_identical": true, + "layer_media_type_conversion": "OCI gzip to Docker gzip, same digest and size", + "base_runtime_config_semantics_identical": true, + "legacy_builder_config_additions": { + "Hostname": "", + "Domainname": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Cmd": null, + "Volumes": null, + "OnBuild": null, + "Image": "sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883" + }, + "base_rootfs_prefix_identical": true, + "overlay_regular_files": [ + "opt/venv/lib/python3.12/site-packages/informed_decision/policy.py" + ], + "overlay_directories": [ + "opt", + "opt/venv", + "opt/venv/lib", + "opt/venv/lib/python3.12", + "opt/venv/lib/python3.12/site-packages", + "opt/venv/lib/python3.12/site-packages/informed_decision" + ], + "policy_sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62", + "policy_mode": "0644", + "base_user": "10001:10001", + "source_scope_labels": { + "org.opencontainers.image.revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "org.opencontainers.image.base.digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "social.coulomb.source.policy.sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62", + "social.coulomb.release.scope": "INFD-WP-0009-T04/purpose-overlay-v1" + }, + "registry_read_route": "anonymous public scoped bearer challenge, no token retention", + "image_executed": false, + "native_workload_changed": false, + "native_backup_restore_executed": false +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/review-refinement.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/review-refinement.json new file mode 100644 index 0000000..bac2181 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/review-refinement.json @@ -0,0 +1,199 @@ +{ + "proposal_id": "INFD-WP-0009-T04/purpose-overlay-v1", + "trial_id": "infd-purpose-20261011-r1", + "original_manifest_sha256": "7c6738b39ea8e54e61c8ed625e94ad0b2755e672e1576efcdf84a1d665ac3300", + "original_submission_sha256": "sha256:ac41c8aea7bb008e17f50dc0bab4aad584aef1e461222967ac98d74c7bd28af7", + "original36files_preserved": [ + { + "original_owner_path": "deploy/lifecycle/admission.candidate.json", + "archive_path": "initial-7c6738b3/owner-snapshot/deploy/lifecycle/admission.candidate.json", + "sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "original_owner_path": "deploy/lifecycle/service.candidate.json", + "archive_path": "initial-7c6738b3/owner-snapshot/deploy/lifecycle/service.candidate.json", + "sha256": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/README.md", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/README.md", + "sha256": "f88a79a93fff34a1b438e2dc0344cad88d6c7960dde04bc7f3c04ac1fbb992c7" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-image-config.json", + "sha256": "b706c9209e324f39a86ffcda2a3e9d94c92649739ad5b21fe4611006e36f6f00" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/base-trivy-full.json", + "sha256": "d44c555aecbb1a4518f4127d48015ea459325c93e8b0371910a55de47293ca80" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-admission.json", + "sha256": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/candidate-deployment.json", + "sha256": "722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/change_guard.py", + "sha256": "830f7771b5c7d0a2851973aa65a01c6ab40b86570f0933d8aebb89f9665ca7e1" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/check_installed.py", + "sha256": "a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/decision-packet.md", + "sha256": "7f6d8987f65dff479eeead67b7ca940ef44c22c1cdbdd6ca33fd732b824c8f02" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/fresh-preflight-validation.json", + "sha256": "aa1d494e42491f0619f731a836c597df9178409887d734c166a8df81f8807a27" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-config.json", + "sha256": "4ad7249c75fd9fc039ceb186772419e1cba5fd9759c404556459c80a2d285d10" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/image-manifest.json", + "sha256": "978c575d3c7bf0de39dbe4e9567c39cd36f70b7e55bc17357bdb03fb3b96b0fb" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json", + "sha256": "e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/intake.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/intake.json", + "sha256": "9a39631362f20168da409cef74f7690f3aa1b8f841fc96ecd8770f73a1f954ac" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json", + "sha256": "b6210dcd34e5485c94e35f4bdd3329fb72c1d40fa9357caf40ac42b4f8afa5c2" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/memo.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/memo.json", + "sha256": "06530425dd9634182f70a65dd2da56cbad3da967bc842b3c7b01c30542222128" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md", + "sha256": "aa9758d4de587d14c6ce0fdaccd84002c5c5099425b9169ca7c972a86e9d3dec" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-initial-refusal.json", + "sha256": "052fc57d2cda43b2e474f28a5ff70753f5fa673c77a9645a201d0e0e961792e4" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight-tracking-id-refusal.json", + "sha256": "aaa77b406b201eb40a62f60182057e90b1baea06e03f85d7e06916b57f5f2de8" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/native-preflight.json", + "sha256": "eb5f41aefb97666bb0c1279617e95a7c05017a609415624daee724c48b90d262" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight-inputs.json", + "sha256": "0bbdaf56459aaef3c35d7b1bf3ad20be6260f047df6dd1c5eb60ac1797150944" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/preflight.py", + "sha256": "c206a1a9b9d232c656c6d57fb9247549eefa13b275a5da4d39b45a6c9902c834" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/proposal.json", + "sha256": "08c5573eaad05efd24b6df6737d33e7189543eb621f21704e38bab4326094914" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/published-verification.json", + "sha256": "e304dd29571bf7d7b9f1db2ade0163dd39cfec012a5ce6986139f019f37e65a2" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/registry-proof.json", + "sha256": "5aa2c1f780c47f62fa9b59da9543d82c07afa02b1d946e6144b8a042ef86f213" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json", + "sha256": "22f830736ee56f6ed9b62f47d243e4e24a1b68263b261e78e2f1cfcb85adbd50" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json", + "sha256": "39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json", + "sha256": "a4252951e2027472c26d8679cb543e30983180809d6dd3c7c94b883d62803e5d" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json", + "sha256": "d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json", + "sha256": "0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py", + "sha256": "b7cd28b2ada33004c9264cb54c9749fa501f60166638f926e50e264ddebe037d" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json", + "sha256": "f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/validation.json", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json", + "sha256": "3b57f525bbbb1db9dc46bcc6b0057a8dd9f45c461fad0a8dea5391ca78038c36" + }, + { + "original_owner_path": "docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "archive_path": "initial-7c6738b3/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py", + "sha256": "413f575c21a2bd18a3696f8f2d939eeadc52d76f282c42813f76bb0e3ee8a2a4" + }, + { + "original_owner_path": "workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md", + "archive_path": "initial-7c6738b3/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md.source.txt", + "sha256": "18205c0c7aa8f3460d78e3b7ad9dddd9e361395f9a28d93a7a384c29c9602d36" + } + ], + "review_result": "initial conditional/refinement-required; no human disposition", + "identified_gates": [ + "Store/admin automatically migrate oldschema; readonly pre-open schema5 required", + "Python optimization bypasses asserts; explicit local/remote optimized interpreter refusal", + "Actual immutableCM and boundPVC identities/content/custody must be sealed", + "Snapshotclone counts exact; livecounts may include legitimate concurrentcommits" + ], + "amended_scope": "same763cimage, same source2image-only candidates, no native data orworkload operation", + "human_approval": false, + "native_backup_restore_executed": false, + "native_workload_changed": false +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json new file mode 100644 index 0000000..a474665 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-admission.json @@ -0,0 +1,52 @@ +{ + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "policy": { + "origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080", + "package": "informed-decision.compact-sitting", + "version": "v13", + "package_digest": "sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873", + "pod_name": "flex-auth-informed-decision-sitting" + }, + "keycape_egress_ips": [ + "92.205.62.239" + ], + "storage_class": "local-path", + "ordinary_approval_ids": [ + "2ce76d7f-01c3-4b63-8476-8d1230679769", + "c2af4bcf-15b4-4305-aac1-acc7e4dcb099", + "dc22666a-d5d7-46bc-9490-ebe9fe09dc38" + ], + "lifecycle_policy": { + "package": "informed-decision.lifecycle", + "version": "v2", + "package_digest": "sha256:da01e045fc108adec6b489e5d51f7e57366793016c5a64776963780a6aae457c", + "origin": "http://flex-auth-informed-decision-lifecycle.flex-auth.svc.cluster.local:8080", + "pod_name": "flex-auth-informed-decision-lifecycle" + }, + "lifecycle_delivery": true, + "intake_attributes": true, + "intake_delivery": { + "hub_origin": "http://state-hub.state-hub.svc.cluster.local:8000" + }, + "workload_api": { + "registries_configmap": "informed-decision-workload-registry", + "peers": [ + { + "namespace": "state-hub", + "app": "state-hub" + } + ], + "api_egress": [ + { + "ip": "10.43.0.1", + "port": 443 + }, + { + "ip": "92.205.62.239", + "port": 6443 + } + ], + "intake": true, + "lifecycle": true + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json new file mode 100644 index 0000000..7459f8f --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/rollback-deployment.json @@ -0,0 +1,267 @@ +{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover", + "argocd.argoproj.io/tracking-id": "informed-decision:apps/Deployment:informed-decision/informed-decision" + }, + "name": "informed-decision", + "namespace": "informed-decision" + }, + "spec": { + "progressDeadlineSeconds": 600, + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision" + } + }, + "strategy": { + "type": "Recreate" + }, + "template": { + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "labels": { + "app.kubernetes.io/component": "review", + "app.kubernetes.io/name": "informed-decision" + } + }, + "spec": { + "automountServiceAccountToken": false, + "containers": [ + { + "env": [ + { + "name": "INFD_KEYCAPE_ISSUER", + "value": "https://kc.coulomb.social" + }, + { + "name": "INFD_CONTAINER_CONFIG", + "value": "/configuration/runtime.json" + } + ], + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "livenessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "name": "informed-decision", + "ports": [ + { + "containerPort": 8080, + "name": "http" + }, + { + "containerPort": 8081, + "name": "workload" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "resources": { + "limits": { + "cpu": "500m", + "memory": "256Mi" + }, + "requests": { + "cpu": "5m", + "memory": "64Mi" + } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true + }, + "startupProbe": { + "failureThreshold": 12, + "httpGet": { + "path": "/healthz", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2 + }, + "volumeMounts": [ + { + "mountPath": "/data", + "name": "data" + }, + { + "mountPath": "/run/informed-decision", + "name": "runtime" + }, + { + "mountPath": "/tmp", + "name": "tmp" + }, + { + "mountPath": "/configuration", + "name": "configuration", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/policy", + "name": "caller", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/audit", + "name": "audit", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/kubernetes", + "name": "kubernetes-api", + "readOnly": true + }, + { + "mountPath": "/workload-registry", + "name": "workload-registry", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/requester", + "name": "sitting-requester", + "readOnly": true + } + ] + } + ], + "securityContext": { + "fsGroup": 10001, + "fsGroupChangePolicy": "OnRootMismatch", + "runAsGroup": 10001, + "runAsNonRoot": true, + "runAsUser": 10001, + "seccompProfile": { + "type": "RuntimeDefault" + } + }, + "serviceAccountName": "review", + "terminationGracePeriodSeconds": 45, + "volumes": [ + { + "name": "data", + "persistentVolumeClaim": { + "claimName": "informed-decision-data" + } + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "runtime" + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "tmp" + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-runtime-6c221878d051" + }, + "name": "configuration" + }, + { + "name": "caller", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "audience": "flex-auth", + "expirationSeconds": 3600, + "path": "token" + } + } + ] + } + }, + { + "name": "audit", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "token", + "path": "token" + } + ], + "secretName": "informed-decision-audit" + } + }, + { + "name": "kubernetes-api", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "expirationSeconds": 600, + "path": "token" + } + }, + { + "configMap": { + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ], + "name": "kube-root-ca.crt" + } + } + ] + } + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-workload-registry" + }, + "name": "workload-registry" + }, + { + "name": "sitting-requester", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "client-secret", + "path": "client-secret" + } + ], + "optional": false, + "secretName": "informed-decision-sitting-requester" + } + } + ] + } + } + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json new file mode 100644 index 0000000..89f9039 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sbom.cdx.json @@ -0,0 +1,2560 @@ +{ + "$schema": "http://cyclonedx.org/schema/bom-1.7.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.7", + "serialNumber": "urn:uuid:3eaaa94b-5129-41f3-82f2-f8f58ac5239a", + "version": 1, + "metadata": { + "timestamp": "2026-10-11T01:22:33+00:00", + "tools": { + "components": [ + { + "type": "application", + "manufacturer": { + "name": "Aqua Security Software Ltd." + }, + "group": "aquasecurity", + "name": "trivy", + "version": "0.74.0" + } + ] + }, + "component": { + "bom-ref": "pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision", + "type": "container", + "name": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "purl": "pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision", + "properties": [ + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:DiffID", + "value": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + { + "name": "aquasecurity:trivy:ImageID", + "value": "sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779" + }, + { + "name": "aquasecurity:trivy:Labels:org.opencontainers.image.base.digest", + "value": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173" + }, + { + "name": "aquasecurity:trivy:Labels:org.opencontainers.image.revision", + "value": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168" + }, + { + "name": "aquasecurity:trivy:Labels:social.coulomb.release.scope", + "value": "INFD-WP-0009-T04/purpose-overlay-v1" + }, + { + "name": "aquasecurity:trivy:Labels:social.coulomb.source.policy.sha256", + "value": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62" + }, + { + "name": "aquasecurity:trivy:Reference", + "value": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a" + }, + { + "name": "aquasecurity:trivy:RepoDigest", + "value": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a" + }, + { + "name": "aquasecurity:trivy:SchemaVersion", + "value": "2" + }, + { + "name": "aquasecurity:trivy:Size", + "value": "88258048" + } + ] + } + }, + "components": [ + { + "bom-ref": "5b71299e-3c0c-4c4f-bd29-865fb14e1758", + "type": "operating-system", + "name": "alpine", + "version": "3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:Class", + "value": "os-pkgs" + }, + { + "name": "aquasecurity:trivy:Type", + "value": "alpine" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1", + "type": "library", + "name": ".python-rundeps", + "version": "20260901.001029", + "hashes": [ + { + "alg": "SHA-1", + "content": "51d0c1e7d88a414345799f0309185c625013ef32" + } + ], + "purl": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": ".python-rundeps@20260901.001029" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "alpine-baselayout-data", + "version": "3.7.2-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "alpine-baselayout-data@3.7.2-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "alpine-baselayout" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.7.2-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "alpine-baselayout", + "version": "3.7.2-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "f0fcfdc2f4da058af6473bc45c4eab62916225b2" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "alpine-baselayout@3.7.2-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "alpine-baselayout" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.7.2-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "alpine-keys", + "version": "2.6-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "d8d6b80e53c059a77e4915da78ba964f3ffea240" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "alpine-keys@2.6-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "alpine-keys" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "2.6-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "alpine-release", + "version": "3.24.1-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "bc6912a25cdc7733e0035ed509eceaa4026946e3" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "alpine-release@3.24.1-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "alpine-base" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.24.1-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "apk-tools", + "version": "3.0.6-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "043333589798a1f52e09ae63f026c6c8fa676d34" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "apk-tools@3.0.6-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "apk-tools" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.0.6-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Sören Tempel " + }, + "name": "busybox-binsh", + "version": "1.37.0-r31", + "hashes": [ + { + "alg": "SHA-1", + "content": "5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "busybox-binsh@1.37.0-r31" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "busybox" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.37.0-r31" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Sören Tempel " + }, + "name": "busybox", + "version": "1.37.0-r31", + "hashes": [ + { + "alg": "SHA-1", + "content": "b5405ebc02f7dd8be95b6265c54b243d5456ab8f" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "busybox@1.37.0-r31" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "busybox" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.37.0-r31" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "ca-certificates-bundle", + "version": "20260611-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "c9534a03750bdfae341f10969016090fc11febbd" + } + ], + "licenses": [ + { + "license": { + "id": "MPL-2.0" + } + }, + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "ca-certificates-bundle@20260611-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ca-certificates" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "20260611-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "ca-certificates", + "version": "20260611-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "8f2a04abeb54b331e2970a0a0dffb7bd6bdde567" + } + ], + "licenses": [ + { + "license": { + "id": "MPL-2.0" + } + }, + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "ca-certificates@20260611-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ca-certificates" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "20260611-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "gdbm", + "version": "1.26-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "619493d8124fe49a8ee1d8f7a1372cf7e3977337" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-3.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "gdbm@1.26-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "gdbm" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.26-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "keyutils-libs", + "version": "1.6.3-r4", + "hashes": [ + { + "alg": "SHA-1", + "content": "b7331c96f077fc3522ee4361a441d1097204cd90" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-or-later" + } + }, + { + "license": { + "id": "LGPL-2.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "keyutils-libs@1.6.3-r4" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "keyutils" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.6.3-r4" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "krb5-conf", + "version": "1.0-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "40a11e0690a59e110367b62a80661024e9942a2d" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "krb5-conf@1.0-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "krb5-conf" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.0-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "krb5-libs", + "version": "1.22.2-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "ef02346e21b817ff379e4601e5b1fc9760e5e31a" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "krb5-libs@1.22.2-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "krb5" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.22.2-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libapk", + "version": "3.0.6-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "523a8f58104589f74f743d501c81bf6517155378" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libapk@3.0.6-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "apk-tools" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.0.6-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libbz2", + "version": "1.0.8-r6", + "hashes": [ + { + "alg": "SHA-1", + "content": "08566ba5c7af97c25474be8b24e8b48f0116b67d" + } + ], + "licenses": [ + { + "license": { + "name": "bzip-2-1.0.6" + } + } + ], + "purl": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libbz2@1.0.8-r6" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "bzip2" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.0.8-r6" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libcom_err", + "version": "1.47.4-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-or-later" + } + }, + { + "license": { + "id": "LGPL-2.0-or-later" + } + }, + { + "license": { + "id": "BSD-3-Clause" + } + }, + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libcom_err@1.47.4-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "e2fsprogs" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.47.4-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libcrypto3", + "version": "3.5.8-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "purl": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libcrypto3@3.5.8-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "openssl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.5.8-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libffi", + "version": "3.5.2-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libffi@3.5.2-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libffi" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.5.2-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Carlo Landmeter " + }, + "name": "libintl", + "version": "1.0-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "282d6642ccac87237e43a864159d73cf5abe7550" + } + ], + "licenses": [ + { + "license": { + "id": "LGPL-2.1-or-later" + } + } + ], + "purl": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libintl@1.0-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "gettext" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.0-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Milan P. Stanić " + }, + "name": "libncursesw", + "version": "6.6_p20260516-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "9f318e6e324d6827274829194cf6ac6afbaded12" + } + ], + "licenses": [ + { + "license": { + "name": "X-11" + } + } + ], + "purl": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libncursesw@6.6_p20260516-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ncurses" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "6.6_p20260516-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "name": "libnsl", + "version": "2.0.1-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "5194adbf26560b52be318481a7af294ab05fd795" + } + ], + "licenses": [ + { + "license": { + "id": "LGPL-2.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libnsl@2.0.1-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libnsl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "2.0.1-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Milan P. Stanić " + }, + "name": "libpanelw", + "version": "6.6_p20260516-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "149bdc434232ed11fc5bb975ba519a07154a6f56" + } + ], + "licenses": [ + { + "license": { + "name": "X-11" + } + } + ], + "purl": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libpanelw@6.6_p20260516-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ncurses" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "6.6_p20260516-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libssl3", + "version": "3.5.8-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "5f9b1e55d821953d2e2b1db322dad70a3b5041ea" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "purl": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libssl3@3.5.8-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "openssl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.5.8-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libtirpc-conf", + "version": "1.3.5-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "0c17d9988dc986c90e22f79778df047eca9973ff" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "purl": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libtirpc-conf@1.3.5-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libtirpc" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.3.5-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libtirpc", + "version": "1.3.5-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "c32865bd86a8b8829d152279cabbc5ac6d430eb2" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "purl": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libtirpc@1.3.5-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libtirpc" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.3.5-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "libuuid", + "version": "2.42.3-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "8f041ef637ad75f381cc0c034f2afbbb0303264e" + } + ], + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "purl": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libuuid@2.42.3-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "util-linux" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "2.42.3-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Francesco Colista " + }, + "name": "libverto", + "version": "0.3.2-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "73233059338142e4ac6d8fb8bb0074e93da75dc1" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "libverto@0.3.2-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "libverto" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "0.3.2-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "musl-utils", + "version": "1.2.6-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "75ada3c48d63ec5d87c42fdf934a3fdd11298dc5" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "id": "BSD-2-Clause" + } + }, + { + "license": { + "id": "GPL-2.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "musl-utils@1.2.6-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "musl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.2.6-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "musl", + "version": "1.2.6-r2", + "hashes": [ + { + "alg": "SHA-1", + "content": "0f7e5827e4e1a73631beda27b78431a8ba240e05" + } + ], + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "musl@1.2.6-r2" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "musl" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.2.6-r2" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Milan P. Stanić " + }, + "name": "ncurses-terminfo-base", + "version": "6.6_p20260516-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "9d551d828e9c8ee52c5801c1d6046828ebf15752" + } + ], + "licenses": [ + { + "license": { + "name": "X-11" + } + } + ], + "purl": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "ncurses-terminfo-base@6.6_p20260516-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "ncurses" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "6.6_p20260516-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "qaqland " + }, + "name": "readline", + "version": "8.3.3-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "945b16e378bc00e44d89d4de8124bba7647fdf4d" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-3.0-or-later" + } + } + ], + "purl": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "readline@8.3.3-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "readline" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "8.3.3-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "scanelf", + "version": "1.3.9-r1", + "hashes": [ + { + "alg": "SHA-1", + "content": "013f903d0ba219673aebbdd04f74bb5ed82b01f0" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "scanelf@1.3.9-r1" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "pax-utils" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.3.9-r1" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Jingyun Hua " + }, + "name": "sqlite-libs", + "version": "3.53.4-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "f7630ceb37c232b6609861aeab6cdb9cd120e6fa" + } + ], + "licenses": [ + { + "license": { + "id": "blessing" + } + } + ], + "purl": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "sqlite-libs@3.53.4-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "sqlite" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "3.53.4-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Sören Tempel " + }, + "name": "ssl_client", + "version": "1.37.0-r31", + "hashes": [ + { + "alg": "SHA-1", + "content": "c220f4a5125a313af733e98def94132bb1e9d40d" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-only" + } + } + ], + "purl": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "ssl_client@1.37.0-r31" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "busybox" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.37.0-r31" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "tzdata", + "version": "2026c-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "61f7544ecd8dd63eac23fe3e645702fda92ef02a" + } + ], + "licenses": [ + { + "license": { + "name": "Public-Domain" + } + } + ], + "purl": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "tzdata@2026c-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "tzdata" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "2026c-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "xz-libs", + "version": "5.8.3-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "4c92c5be0c5bef404e93c880eba9037a9b147347" + } + ], + "licenses": [ + { + "license": { + "id": "GPL-2.0-or-later" + } + }, + { + "license": { + "id": "0BSD" + } + }, + { + "license": { + "name": "Public-Domain" + } + }, + { + "license": { + "id": "LGPL-2.1-or-later" + } + } + ], + "purl": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "xz-libs@5.8.3-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "xz" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "5.8.3-r0" + } + ] + }, + { + "bom-ref": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1", + "type": "library", + "supplier": { + "name": "Natanael Copa " + }, + "name": "zlib", + "version": "1.3.2-r0", + "hashes": [ + { + "alg": "SHA-1", + "content": "dd4c3d102acaef2a71a1495951d55fabc8680613" + } + ], + "licenses": [ + { + "license": { + "id": "Zlib" + } + } + ], + "purl": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1", + "properties": [ + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4" + }, + { + "name": "aquasecurity:trivy:PkgID", + "value": "zlib@1.3.2-r0" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "alpine" + }, + { + "name": "aquasecurity:trivy:SrcName", + "value": "zlib" + }, + { + "name": "aquasecurity:trivy:SrcVersion", + "value": "1.3.2-r0" + } + ] + }, + { + "bom-ref": "pkg:pypi/cffi@2.1.1", + "type": "library", + "name": "cffi", + "version": "2.1.1", + "licenses": [ + { + "license": { + "id": "MIT-0" + } + } + ], + "purl": "pkg:pypi/cffi@2.1.1", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/cryptography@50.0.1", + "type": "library", + "name": "cryptography", + "version": "50.0.1", + "licenses": [ + { + "expression": "Apache-2.0 OR BSD-3-Clause" + } + ], + "purl": "pkg:pypi/cryptography@50.0.1", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/informed-decision@0.2.0", + "type": "library", + "name": "informed-decision", + "version": "0.2.0", + "purl": "pkg:pypi/informed-decision@0.2.0", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/pycparser@3.0", + "type": "library", + "name": "pycparser", + "version": "3.0", + "licenses": [ + { + "license": { + "id": "BSD-3-Clause" + } + } + ], + "purl": "pkg:pypi/pycparser@3.0", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/pyjwt@2.15.1", + "type": "library", + "name": "PyJWT", + "version": "2.15.1", + "licenses": [ + { + "license": { + "id": "MIT" + } + } + ], + "purl": "pkg:pypi/pyjwt@2.15.1", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + }, + { + "bom-ref": "pkg:pypi/waitress@3.0.2", + "type": "library", + "name": "waitress", + "version": "3.0.2", + "licenses": [ + { + "license": { + "id": "ZPL-2.1" + } + } + ], + "purl": "pkg:pypi/waitress@3.0.2", + "properties": [ + { + "name": "aquasecurity:trivy:FilePath", + "value": "opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA" + }, + { + "name": "aquasecurity:trivy:LayerDiffID", + "value": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "name": "aquasecurity:trivy:LayerDigest", + "value": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87" + }, + { + "name": "aquasecurity:trivy:PkgType", + "value": "python-pkg" + } + ] + } + ], + "dependencies": [ + { + "ref": "5b71299e-3c0c-4c4f-bd29-865fb14e1758", + "dependsOn": [ + "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1", + "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64&distro=3.24.1", + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [] + }, + { + "ref": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1", + "dependsOn": [ + "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64&distro=3.24.1" + ] + }, + { + "ref": "pkg:oci/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a?arch=amd64&repository_url=forgejo.coulomb.social%2Fcoulomb%2Finformed-decision", + "dependsOn": [ + "5b71299e-3c0c-4c4f-bd29-865fb14e1758", + "pkg:pypi/cffi@2.1.1", + "pkg:pypi/cryptography@50.0.1", + "pkg:pypi/informed-decision@0.2.0", + "pkg:pypi/pycparser@3.0", + "pkg:pypi/pyjwt@2.15.1", + "pkg:pypi/waitress@3.0.2" + ] + }, + { + "ref": "pkg:pypi/cffi@2.1.1", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/cryptography@50.0.1", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/informed-decision@0.2.0", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/pycparser@3.0", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/pyjwt@2.15.1", + "dependsOn": [] + }, + { + "ref": "pkg:pypi/waitress@3.0.2", + "dependsOn": [] + } + ], + "vulnerabilities": [ + { + "id": "CVE-2026-85091", + "source": { + "name": "alpine", + "url": "https://secdb.alpinelinux.org/" + }, + "ratings": [ + { + "source": { + "name": "ubuntu" + }, + "severity": "medium" + } + ], + "cwes": [ + 787 + ], + "description": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.", + "recommendation": "Upgrade zlib to version 1.3.2-r1", + "advisories": [ + { + "url": "https://avd.aquasec.com/nvd/cve-2026-85091" + }, + { + "url": "https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490" + }, + { + "url": "https://github.com/madler/zlib" + }, + { + "url": "https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393" + }, + { + "url": "https://www.cve.org/CVERecord?id=CVE-2026-85091" + }, + { + "url": "https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate" + } + ], + "published": "2026-09-03T13:06:20+00:00", + "updated": "2026-09-09T20:41:07+00:00", + "affects": [ + { + "ref": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64&distro=3.24.1", + "versions": [ + { + "version": "1.3.2-r0", + "status": "affected" + } + ] + } + ] + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json new file mode 100644 index 0000000..f6f812d --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-live-deployment.json @@ -0,0 +1,286 @@ +{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "annotations": { + "argocd.argoproj.io/tracking-id": "informed-decision:apps/Deployment:informed-decision/informed-decision", + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "name": "informed-decision", + "namespace": "informed-decision", + "uid": "a588e10a-90d2-4883-975e-6dd8b8feca92" + }, + "spec": { + "progressDeadlineSeconds": 600, + "replicas": 1, + "revisionHistoryLimit": 10, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "informed-decision" + } + }, + "strategy": { + "type": "Recreate" + }, + "template": { + "metadata": { + "annotations": { + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "labels": { + "app.kubernetes.io/component": "review", + "app.kubernetes.io/name": "informed-decision" + } + }, + "spec": { + "automountServiceAccountToken": false, + "containers": [ + { + "env": [ + { + "name": "INFD_KEYCAPE_ISSUER", + "value": "https://kc.coulomb.social" + }, + { + "name": "INFD_CONTAINER_CONFIG", + "value": "/configuration/runtime.json" + } + ], + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 3, + "httpGet": { + "path": "/healthz", + "port": "http", + "scheme": "HTTP" + }, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 2 + }, + "name": "informed-decision", + "ports": [ + { + "containerPort": 8080, + "name": "http", + "protocol": "TCP" + }, + { + "containerPort": 8081, + "name": "workload", + "protocol": "TCP" + } + ], + "readinessProbe": { + "failureThreshold": 3, + "httpGet": { + "path": "/healthz", + "port": "http", + "scheme": "HTTP" + }, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 2 + }, + "resources": { + "limits": { + "cpu": "500m", + "memory": "256Mi" + }, + "requests": { + "cpu": "5m", + "memory": "64Mi" + } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true + }, + "startupProbe": { + "failureThreshold": 12, + "httpGet": { + "path": "/healthz", + "port": "http", + "scheme": "HTTP" + }, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 2 + }, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/data", + "name": "data" + }, + { + "mountPath": "/run/informed-decision", + "name": "runtime" + }, + { + "mountPath": "/tmp", + "name": "tmp" + }, + { + "mountPath": "/configuration", + "name": "configuration", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/policy", + "name": "caller", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/audit", + "name": "audit", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/kubernetes", + "name": "kubernetes-api", + "readOnly": true + }, + { + "mountPath": "/workload-registry", + "name": "workload-registry", + "readOnly": true + }, + { + "mountPath": "/var/run/secrets/informed-decision/requester", + "name": "sitting-requester", + "readOnly": true + } + ] + } + ], + "dnsPolicy": "ClusterFirst", + "restartPolicy": "Always", + "schedulerName": "default-scheduler", + "securityContext": { + "fsGroup": 10001, + "fsGroupChangePolicy": "OnRootMismatch", + "runAsGroup": 10001, + "runAsNonRoot": true, + "runAsUser": 10001, + "seccompProfile": { + "type": "RuntimeDefault" + } + }, + "serviceAccount": "review", + "serviceAccountName": "review", + "terminationGracePeriodSeconds": 45, + "volumes": [ + { + "name": "data", + "persistentVolumeClaim": { + "claimName": "informed-decision-data" + } + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "runtime" + }, + { + "emptyDir": { + "medium": "Memory", + "sizeLimit": "16Mi" + }, + "name": "tmp" + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-runtime-6c221878d051" + }, + "name": "configuration" + }, + { + "name": "caller", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "audience": "flex-auth", + "expirationSeconds": 3600, + "path": "token" + } + } + ] + } + }, + { + "name": "audit", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "token", + "path": "token" + } + ], + "secretName": "informed-decision-audit" + } + }, + { + "name": "kubernetes-api", + "projected": { + "defaultMode": 288, + "sources": [ + { + "serviceAccountToken": { + "expirationSeconds": 600, + "path": "token" + } + }, + { + "configMap": { + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ], + "name": "kube-root-ca.crt" + } + } + ] + } + }, + { + "configMap": { + "defaultMode": 292, + "name": "informed-decision-workload-registry" + }, + "name": "workload-registry" + }, + { + "name": "sitting-requester", + "secret": { + "defaultMode": 288, + "items": [ + { + "key": "client-secret", + "path": "client-secret" + } + ], + "optional": false, + "secretName": "informed-decision-sitting-requester" + } + } + ] + } + } + } +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-native-dependencies.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-native-dependencies.json new file mode 100644 index 0000000..8490089 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sealed-native-dependencies.json @@ -0,0 +1,52 @@ +{ + "configmap": { + "apiVersion": "v1", + "immutable": true, + "kind": "ConfigMap", + "metadata": { + "annotations": { + "argocd.argoproj.io/tracking-id": "informed-decision:/ConfigMap:informed-decision/informed-decision-runtime-6c221878d051", + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover" + }, + "name": "informed-decision-runtime-6c221878d051", + "namespace": "informed-decision", + "uid": "90113d2d-54d9-4e82-b1d3-90b49ebed2b5" + }, + "canonical_data_sha256": "8ec462d12347548f506eeebf1e3c7cc47648019c8a783804d09bcc79b0f22af6" + }, + "pvc": { + "apiVersion": "v1", + "kind": "PersistentVolumeClaim", + "metadata": { + "annotations": { + "argocd.argoproj.io/tracking-id": "informed-decision:/PersistentVolumeClaim:informed-decision/informed-decision-data", + "informed-decision.coulomb.social/admission": "approved; INFD-WP-0007 cutover", + "pv.kubernetes.io/bind-completed": "yes", + "pv.kubernetes.io/bound-by-controller": "yes", + "volume.beta.kubernetes.io/storage-provisioner": "rancher.io/local-path", + "volume.kubernetes.io/selected-node": "239.62.205.92.host.secureserver.net", + "volume.kubernetes.io/storage-provisioner": "rancher.io/local-path" + }, + "finalizers": [ + "kubernetes.io/pvc-protection" + ], + "name": "informed-decision-data", + "namespace": "informed-decision", + "uid": "d80b25b1-141a-441b-b205-98fa2fd98b7c" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "1Gi" + } + }, + "storageClassName": "local-path", + "volumeMode": "Filesystem", + "volumeName": "pvc-d80b25b1-141a-441b-b205-98fa2fd98b7c" + } + }, + "pvc_phase": "Bound" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json new file mode 100644 index 0000000..48926d3 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/security-summary.json @@ -0,0 +1,35 @@ +{ + "image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "source_revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "scanner": "aquasec/trivy@sha256:62b1e65e8869bc4b4c6aa4fa2b21595256c7c2f6018a9d9ad61caf87187c1969", + "version": "0.74.0", + "db_metadata": { + "Version": 2, + "NextUpdate": "2026-10-11T18:59:50.889010572Z", + "UpdatedAt": "2026-10-10T18:59:50.889010923Z", + "DownloadedAt": "2026-10-10T23:32:32.380033131Z" + }, + "suppression": false, + "ignore_unfixed": false, + "severity_filter": null, + "package_count": 44, + "findings_by_severity": { + "MEDIUM": 1 + }, + "findings": [ + { + "id": "CVE-2026-85091", + "package": "zlib", + "installed": "1.3.2-r0", + "fixed": "1.3.2-r1", + "severity": "MEDIUM" + } + ], + "coverage_limits": [ + "Alpine3.24 absent scanner EOL list; OS detector ran against Alpine3.24 repository on38OS packages", + "Known findings asof pinnedDB, not claim absence of unknown vulnerabilities" + ], + "high_critical": 0, + "same_scanner_actual_base_scan_findings_identical": true, + "base_scan_file": "base-trivy-full.json" +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sqlite_readonly.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sqlite_readonly.py new file mode 100644 index 0000000..833721b --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/sqlite_readonly.py @@ -0,0 +1,39 @@ +"""Pre-open schema/integrity/count proof; stdlib only, never constructs Store.""" +import argparse +import json +from pathlib import Path +import sqlite3 + + +def inspect_readonly(path): + path = Path(path) + if not path.is_file() or path.is_symlink(): + raise ValueError('existing nonsymlink private database required') + with sqlite3.connect(path.resolve().as_uri() + '?mode=ro', uri=True, timeout=5) as db: + db.execute('PRAGMA query_only=ON') + db.execute('BEGIN') + version = db.execute('PRAGMA user_version').fetchone()[0] + if version != 5: + raise ValueError('pre-open database is not schema5; refuse migration') + if db.execute('PRAGMA integrity_check').fetchall() != [('ok',)]: + raise ValueError('read-only integrity check refused') + lifecycle = {name: db.execute('SELECT COUNT(*) FROM ' + table).fetchone()[0] + for name, table in (('records', 'lifecycle_records'), + ('events', 'lifecycle_events'), + ('pending', 'lifecycle_pending'))} + result = {'schema_version': version, 'lifecycle': lifecycle, + 'outbox': dict(db.execute('SELECT state,COUNT(*) FROM outbox GROUP BY state')), + 'submissions': dict(db.execute('SELECT state,COUNT(*) FROM submissions GROUP BY state')), + 'integrity': 'ok', 'read_only_pre_open': True, 'store_constructed': False} + db.rollback() + return result + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--db', type=Path, required=True) + args = parser.parse_args() + try: + print(json.dumps(inspect_readonly(args.db), sort_keys=True)) + except Exception: + raise SystemExit('read-only schema5/integrity/count gate refused; no Store/admin open') from None diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py new file mode 100644 index 0000000..9cc1bdd --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_change_guard.py @@ -0,0 +1,91 @@ +import copy +import json +import unittest +from pathlib import Path +from change_guard import CANDIDATE, check_current, check_admitted, transport_result, check_dependencies + +ROOT = Path(__file__).parent + + +class ExactDeploymentBoundary(unittest.TestCase): + def setUp(self): + self.sealed = json.loads((ROOT / 'sealed-live-deployment.json').read_text()) + self.admitted = copy.deepcopy(self.sealed) + self.admitted['spec']['template']['spec']['containers'][0]['image'] = CANDIDATE + + def test_only_expected_image_is_accepted(self): + check_current(self.sealed, self.sealed) + check_admitted(self.admitted, self.sealed) + + def test_bookkeeping_is_ignored(self): + value = copy.deepcopy(self.admitted) + value['status'] = {'readyReplicas': 0} + value['metadata']['generation'] = 100 + value['metadata']['resourceVersion'] = 'changed' + value['metadata']['annotations']['kubectl.kubernetes.io/last-applied-configuration'] = 'server bookkeeping' + check_admitted(value, self.sealed) + + def test_unrelated_drift_and_recreated_uid_are_refused(self): + mutators = [ + lambda v: v['metadata'].update(uid='recreated'), + lambda v: v['metadata'].update(finalizers=['new']), + lambda v: v['metadata'].update(ownerReferences=[{'uid': 'new'}]), + lambda v: v['spec']['template']['spec'].update(hostNetwork=True), + lambda v: v['spec']['template']['spec'].update(serviceAccountName='other'), + lambda v: v['spec']['template']['spec'].update(automountServiceAccountToken=True), + lambda v: v['spec']['template']['spec']['containers'][0].update(env=[]), + lambda v: v['spec']['template']['spec']['containers'][0]['securityContext'].update(privileged=True), + lambda v: v['spec'].update(replicas=2), + lambda v: v['spec'].update(strategy={'type': 'RollingUpdate'}), + ] + for mutate in mutators: + with self.subTest(mutate=mutate): + current = copy.deepcopy(self.sealed) + mutate(current) + with self.assertRaises(ValueError): + check_current(current, self.sealed) + admitted = copy.deepcopy(self.admitted) + mutate(admitted) + with self.assertRaises(ValueError): + check_admitted(admitted, self.sealed) + + def test_unexpected_image_is_refused(self): + value = copy.deepcopy(self.admitted) + value['spec']['template']['spec']['containers'][0]['image'] = 'other' + with self.assertRaises(ValueError): + check_admitted(value, self.sealed) + + def test_malformed_successful_transport_is_refused(self): + for output in ('banner', '{}', '[]', '{"all_checks_pass": "true"}', '{"all_checks_pass": false}'): + self.assertIs(transport_result(0, output)['all_checks_pass'], False) + self.assertIs(transport_result(1, '{"all_checks_pass":true}')['all_checks_pass'], False) + self.assertIs(transport_result(0, '{"all_checks_pass":true}')['all_checks_pass'], True) + + def test_runtime_config_and_pvc_custody_are_sealed(self): + sealed = json.loads((ROOT / 'sealed-native-dependencies.json').read_text()) + cm = copy.deepcopy(sealed['configmap']) + cm.pop('canonical_data_sha256') + service = json.loads((ROOT.parents[2] / 'deploy/lifecycle/service.candidate.json').read_text()) + cm['data'] = next(x for x in service['items'] if x['kind'] == 'ConfigMap')['data'] + pvc = copy.deepcopy(sealed['pvc']) + pvc['status'] = {'phase': 'Bound'} + check_dependencies(cm, pvc, sealed) + for mutate in ( + lambda c, p: c['metadata'].update(uid='recreated'), + lambda c, p: c.update(immutable=False), + lambda c, p: c['data'].update({'runtime.json': '{}'}), + lambda c, p: c.update(binaryData={'extra': 'changed'}), + lambda c, p: p['metadata'].update(uid='recreated'), + lambda c, p: p['spec'].update(volumeName='replaced'), + lambda c, p: p['status'].update(phase='Pending'), + lambda c, p: p['metadata'].update(finalizers=['changed']), + ): + with self.subTest(mutate=mutate): + changed_cm, changed_pvc = copy.deepcopy(cm), copy.deepcopy(pvc) + mutate(changed_cm, changed_pvc) + with self.assertRaises(ValueError): + check_dependencies(changed_cm, changed_pvc, sealed) + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_preflight_optimization.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_preflight_optimization.py new file mode 100644 index 0000000..7a05138 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_preflight_optimization.py @@ -0,0 +1,37 @@ +import ast +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest + +ROOT = Path(__file__).parent + + +class OptimizedInterpreterGate(unittest.TestCase): + def test_local_optimized_interpreter_refuses_before_transport_or_output(self): + with tempfile.TemporaryDirectory() as folder: + output = Path(folder) / 'new-receipt.json' + result = subprocess.run([sys.executable, '-O', str(ROOT / 'preflight.py'), + '--receipt-output', str(output)], capture_output=True, text=True) + self.assertNotEqual(result.returncode, 0) + self.assertIn('optimized interpreter refused', result.stderr) + self.assertFalse(output.exists()) + + def test_remote_optimized_interpreter_refuses_before_candidate_or_commands(self): + tree = ast.parse((ROOT / 'preflight.py').read_text()) + remote = next(node.value.value for node in tree.body + if isinstance(node, ast.Assign) and isinstance(node.value, ast.Constant) + and any(isinstance(target, ast.Name) and target.id == 'program' + for target in node.targets)) + # Unresolved literals would fail immediately after this gate. Under -O + # the first refusal must be optimization, before any kubectl dispatch. + result = subprocess.run([sys.executable, '-O', '-'], input=remote, + capture_output=True, text=True) + self.assertNotEqual(result.returncode, 0) + self.assertIn('optimized interpreter refused', result.stderr) + self.assertNotIn('NameError', result.stderr) + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_sqlite_readonly.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_sqlite_readonly.py new file mode 100644 index 0000000..f649a93 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/test_sqlite_readonly.py @@ -0,0 +1,47 @@ +import hashlib +from pathlib import Path +import sqlite3 +import tempfile +import unittest +from sqlite_readonly import inspect_readonly + + +class PreOpenSchemaGate(unittest.TestCase): + def test_old_and_unknown_schemas_refuse_without_mutation(self): + with tempfile.TemporaryDirectory() as folder: + for version in (0, 1, 2, 3, 4, 6): + db = Path(folder) / (str(version) + '.sqlite') + with sqlite3.connect(db) as connection: + connection.execute('PRAGMA user_version=' + str(version)) + before = hashlib.sha256(db.read_bytes()).hexdigest() + with self.assertRaises(ValueError): + inspect_readonly(db) + self.assertEqual(hashlib.sha256(db.read_bytes()).hexdigest(), before) + with sqlite3.connect(db) as connection: + self.assertEqual(connection.execute('PRAGMA user_version').fetchone()[0], version) + + def test_schema5_frozen_snapshot_counts_and_integrity(self): + with tempfile.TemporaryDirectory() as folder: + db = Path(folder) / 'snapshot.sqlite' + with sqlite3.connect(db) as connection: + connection.executescript('PRAGMA user_version=5; CREATE TABLE lifecycle_records(x); CREATE TABLE lifecycle_events(x); CREATE TABLE lifecycle_pending(x); CREATE TABLE outbox(state); CREATE TABLE submissions(state); INSERT INTO lifecycle_records VALUES(1); INSERT INTO outbox VALUES("pending"); INSERT INTO submissions VALUES("confirmed");') + before = hashlib.sha256(db.read_bytes()).hexdigest() + proof = inspect_readonly(db) + self.assertEqual(proof['schema_version'], 5) + self.assertEqual(proof['lifecycle']['records'], 1) + self.assertEqual(proof['outbox'], {'pending': 1}) + self.assertEqual(proof['submissions'], {'confirmed': 1}) + self.assertEqual(proof['integrity'], 'ok') + self.assertFalse(proof['store_constructed']) + self.assertEqual(hashlib.sha256(db.read_bytes()).hexdigest(), before) + + def test_missing_database_is_not_created(self): + with tempfile.TemporaryDirectory() as folder: + missing = Path(folder) / 'missing.sqlite' + with self.assertRaises(ValueError): + inspect_readonly(missing) + self.assertFalse(missing.exists()) + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json new file mode 100644 index 0000000..a9e3b58 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/trivy-full.json @@ -0,0 +1,2391 @@ +{ + "SchemaVersion": 2, + "Trivy": { + "Version": "0.74.0" + }, + "ReportID": "01a1288d-8df1-73fb-9313-3642dd64ba72", + "CreatedAt": "2026-10-11T01:22:07.985264404Z", + "ArtifactID": "sha256:40f873b8d6345341e2f661a5038c092d186e2831dc60b61704a419a1f4f77ef6", + "ArtifactName": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "ArtifactType": "container_image", + "Metadata": { + "Size": 88258048, + "OS": { + "Family": "alpine", + "Name": "3.24.1" + }, + "ImageID": "sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779", + "DiffIDs": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02", + "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + ], + "RepoDigests": [ + "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a" + ], + "Reference": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a", + "ImageConfig": { + "architecture": "amd64", + "created": "2026-10-11T01:21:04.787527697Z", + "docker_version": "27.5.1", + "history": [ + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-06-16T00:01:29.967161902Z", + "created_by": "CMD [\"/bin/sh\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV LANG=C.UTF-8", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "RUN /bin/sh -c set -eux; \tapk add --no-cache \t\tca-certificates \t\ttzdata \t; # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_VERSION=3.12.14", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:05:24.224544843Z", + "created_by": "ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-01T00:10:30.672225972Z", + "created_by": "RUN /bin/sh -c set -eux; \t\tapk add --no-cache --virtual .build-deps \t\tbluez-dev \t\tbzip2-dev \t\tdpkg-dev dpkg \t\tfindutils \t\tg++ \t\tgcc \t\tgdbm-dev \t\tgnupg \t\tlibc-dev \t\tlibffi-dev \t\tlibnsl-dev \t\tlibtirpc-dev \t\tlinux-headers \t\tmake \t\tncurses-dev \t\topenssl-dev \t\tpax-utils \t\treadline-dev \t\tsqlite-dev \t\ttar \t\ttcl-dev \t\ttk \t\ttk-dev \t\tutil-linux-dev \t\txz \t\txz-dev \t\tzlib-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \techo \"$PYTHON_SHA256 *python.tar.xz\" | sha256sum -c -; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t$(test \"${gnuArch%%-*}\" != 'riscv64' \u0026\u0026 echo '--with-lto') \t\t--with-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"-DTHREAD_STACK_SIZE=0x100000\"; \tLDFLAGS=\"${LDFLAGS:-} -Wl,--strip-all\"; \tarch=\"$(apk --print-arch)\"; \tcase \"$arch\" in \t\tx86_64|aarch64) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\"; \t\t\t;; \t\tx86) \t\t\t;; \t\t*) \t\t\tEXTRA_CFLAGS=\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\"; \t\t\t;; \tesac; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\$\\$ORIGIN/../lib'\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \t\t| tr ',' '\\n' \t\t| sort -u \t\t| awk 'system(\"[ -e /usr/local/lib/\" $1 \" ]\") == 0 { next } { print \"so:\" $1 }' \t\t| xargs -rt apk add --no-network --virtual .python-rundeps \t; \tapk del --no-network .build-deps; \t\texport PYTHONDONTWRITEBYTECODE=1; \tpython3 --version; \tpip3 --version # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "RUN /bin/sh -c set -eux; \tfor src in idle3 pip3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-09-01T00:10:30.782726003Z", + "created_by": "CMD [\"python3\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-09-11T00:49:47.962156876+02:00", + "created_by": "RUN /bin/sh -c apk add --no-cache 'libuuid\u003e=2.42.3-r1' \u0026\u0026 addgroup -S -g 10001 informed \u0026\u0026 adduser -S -u 10001 -G informed -H informed # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:55.351944978+02:00", + "created_by": "COPY /opt/venv /opt/venv # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.462092072+02:00", + "created_by": "RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "WORKDIR /app", + "comment": "buildkit.dockerfile.v0" + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "USER 10001:10001", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "EXPOSE [8080/tcp 8081/tcp]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-05T01:03:56.675216821+02:00", + "created_by": "ENTRYPOINT [\"informed-decision-container\"]", + "comment": "buildkit.dockerfile.v0", + "empty_layer": true + }, + { + "created": "2026-10-11T01:15:11.991443676Z", + "created_by": "/bin/sh -c #(nop) ARG SOURCE_REVISION", + "empty_layer": true + }, + { + "created": "2026-10-11T01:21:04.716126392Z", + "created_by": "/bin/sh -c #(nop) LABEL org.opencontainers.image.revision=3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168 org.opencontainers.image.base.digest=sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 social.coulomb.source.policy.sha256=9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62 social.coulomb.release.scope=INFD-WP-0009-T04/purpose-overlay-v1", + "empty_layer": true + }, + { + "created": "2026-10-11T01:21:04.787527697Z", + "created_by": "/bin/sh -c #(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py " + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c", + "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd", + "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366", + "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe", + "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1", + "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c", + "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59", + "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02", + "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + ] + }, + "config": { + "Entrypoint": [ + "informed-decision-container" + ], + "Env": [ + "PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305", + "PYTHON_VERSION=3.12.14", + "PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONUNBUFFERED=1" + ], + "Image": "sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883", + "Labels": { + "org.opencontainers.image.base.digest": "sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173", + "org.opencontainers.image.revision": "3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168", + "social.coulomb.release.scope": "INFD-WP-0009-T04/purpose-overlay-v1", + "social.coulomb.source.policy.sha256": "9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62" + }, + "User": "10001:10001", + "WorkingDir": "/app", + "ExposedPorts": { + "8080/tcp": {}, + "8081/tcp": {} + } + } + }, + "Layers": [ + { + "Size": 8697856, + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + { + "Size": 1538048, + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + { + "Size": 47150592, + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + { + "Size": 5120, + "Digest": "sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b", + "DiffID": "sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe" + }, + { + "Size": 131584, + "Digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86", + "DiffID": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + { + "Size": 30705664, + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + { + "Size": 12288, + "Digest": "sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f", + "DiffID": "sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59" + }, + { + "Size": 1536, + "Digest": "sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3", + "DiffID": "sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02" + }, + { + "Size": 15360, + "Digest": "sha256:cfee29c2f8119d2a39714ecbe5095a2dc1c986054f2e1fe0a6565163242417e3", + "DiffID": "sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3" + } + ] + }, + "Results": [ + { + "Target": "forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a (alpine 3.24.1)", + "Class": "os-pkgs", + "Type": "alpine", + "Packages": [ + { + "ID": ".python-rundeps@20260901.001029", + "Name": ".python-rundeps", + "Identifier": { + "PURL": "pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch\u0026distro=3.24.1", + "UID": "4e26c99fecac1e97" + }, + "Version": "20260901.001029", + "Arch": "noarch", + "DependsOn": [ + "gdbm@1.26-r0", + "libbz2@1.0.8-r6", + "libcrypto3@3.5.8-r0", + "libffi@3.5.2-r1", + "libncursesw@6.6_p20260516-r0", + "libnsl@2.0.1-r2", + "libpanelw@6.6_p20260516-r0", + "libssl3@3.5.8-r0", + "libtirpc@1.3.5-r1", + "libuuid@2.42.3-r1", + "musl@1.2.6-r2", + "readline@8.3.3-r1", + "sqlite-libs@3.53.4-r0", + "xz-libs@5.8.3-r0", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:51d0c1e7d88a414345799f0309185c625013ef32", + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-baselayout@3.7.2-r1", + "Name": "alpine-baselayout", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "1b9c543300f8073e" + }, + "Version": "3.7.2-r1", + "Arch": "x86_64", + "SrcName": "alpine-baselayout", + "SrcVersion": "3.7.2-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "alpine-baselayout-data@3.7.2-r1", + "busybox-binsh@1.37.0-r31" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:f0fcfdc2f4da058af6473bc45c4eab62916225b2", + "InstalledFiles": [ + "etc/motd", + "etc/crontabs/root", + "etc/modprobe.d/aliases.conf", + "etc/modprobe.d/blacklist.conf", + "etc/modprobe.d/i386.conf", + "etc/profile.d/20locale.sh", + "etc/profile.d/README", + "etc/profile.d/color_prompt.sh.disabled", + "usr/lib/sysctl.d/00-alpine.conf", + "var/lock", + "var/run", + "var/spool/mail", + "var/spool/cron/crontabs" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-baselayout-data@3.7.2-r1", + "Name": "alpine-baselayout-data", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "fcc3cd90122d8aa7" + }, + "Version": "3.7.2-r1", + "Arch": "x86_64", + "SrcName": "alpine-baselayout", + "SrcVersion": "3.7.2-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508", + "InstalledFiles": [ + "etc/fstab", + "etc/group", + "etc/hostname", + "etc/hosts", + "etc/inittab", + "etc/modules", + "etc/mtab", + "etc/nsswitch.conf", + "etc/passwd", + "etc/profile", + "etc/protocols", + "etc/services", + "etc/shadow", + "etc/shells", + "etc/sysctl.conf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-keys@2.6-r0", + "Name": "alpine-keys", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "cb1f6c8fa74713e0" + }, + "Version": "2.6-r0", + "Arch": "x86_64", + "SrcName": "alpine-keys", + "SrcVersion": "2.6-r0", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:d8d6b80e53c059a77e4915da78ba964f3ffea240", + "InstalledFiles": [ + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "etc/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub", + "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub", + "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", + "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub", + "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub", + "usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", + "usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub", + "usr/share/apk/keys/loongarch64/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub", + "usr/share/apk/keys/mips64/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", + "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", + "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub", + "usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub", + "usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub", + "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", + "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", + "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", + "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "alpine-release@3.24.1-r0", + "Name": "alpine-release", + "Identifier": { + "PURL": "pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "6cfad6f36e1f31aa" + }, + "Version": "3.24.1-r0", + "Arch": "x86_64", + "SrcName": "alpine-base", + "SrcVersion": "3.24.1-r0", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "alpine-keys@2.6-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:bc6912a25cdc7733e0035ed509eceaa4026946e3", + "InstalledFiles": [ + "etc/alpine-release", + "etc/issue", + "etc/os-release", + "etc/secfixes.d/alpine", + "usr/lib/os-release" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "apk-tools@3.0.6-r0", + "Name": "apk-tools", + "Identifier": { + "PURL": "pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "cb2633c883b17a04" + }, + "Version": "3.0.6-r0", + "Arch": "x86_64", + "SrcName": "apk-tools", + "SrcVersion": "3.0.6-r0", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "ca-certificates-bundle@20260611-r0", + "libapk@3.0.6-r0", + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:043333589798a1f52e09ae63f026c6c8fa676d34", + "InstalledFiles": [ + "sbin/apk" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "busybox@1.37.0-r31", + "Name": "busybox", + "Identifier": { + "PURL": "pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "771020c43c8440bf" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:b5405ebc02f7dd8be95b6265c54b243d5456ab8f", + "InstalledFiles": [ + "bin/busybox", + "etc/securetty", + "etc/busybox-paths.d/busybox", + "etc/logrotate.d/acpid", + "etc/network/if-up.d/dad", + "etc/udhcpc/udhcpc.conf", + "usr/share/udhcpc/default.script" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "busybox-binsh@1.37.0-r31", + "Name": "busybox-binsh", + "Identifier": { + "PURL": "pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "1ec8a3d5d2b63297" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "busybox@1.37.0-r31" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7", + "InstalledFiles": [ + "bin/sh" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ca-certificates@20260611-r0", + "Name": "ca-certificates", + "Identifier": { + "PURL": "pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "2a3c316ee83c6198" + }, + "Version": "20260611-r0", + "Arch": "x86_64", + "SrcName": "ca-certificates", + "SrcVersion": "20260611-r0", + "Licenses": [ + "MPL-2.0", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "busybox-binsh@1.37.0-r31", + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + "Digest": "sha1:8f2a04abeb54b331e2970a0a0dffb7bd6bdde567", + "InstalledFiles": [ + "etc/ca-certificates.conf", + "etc/apk/protected_paths.d/ca-certificates.list", + "etc/ca-certificates/update.d/certhash", + "usr/bin/c_rehash", + "usr/sbin/update-ca-certificates", + "usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt", + "usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt", + "usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt", + "usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt", + "usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_ECC_TLS_2021.crt", + "usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_RSA_TLS_2021.crt", + "usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt", + "usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA1.crt", + "usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA2.crt", + "usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt", + "usr/share/ca-certificates/mozilla/CA_Disig_Root_R2.crt", + "usr/share/ca-certificates/mozilla/CFCA_EV_ROOT.crt", + "usr/share/ca-certificates/mozilla/COMODO_ECC_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/COMODO_RSA_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/Certainly_Root_E1.crt", + "usr/share/ca-certificates/mozilla/Certainly_Root_R1.crt", + "usr/share/ca-certificates/mozilla/Certigna_Root_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_EC-384_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA_2.crt", + "usr/share/ca-certificates/mozilla/Certum_Trusted_Root_CA.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_1_2020.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_2_2023.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_1_2020.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_2_2023.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt", + "usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G2.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G3.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G2.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G3.crt", + "usr/share/ca-certificates/mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt", + "usr/share/ca-certificates/mozilla/DigiCert_TLS_RSA4096_Root_G5.crt", + "usr/share/ca-certificates/mozilla/DigiCert_Trusted_Root_G4.crt", + "usr/share/ca-certificates/mozilla/GDCA_TrustAUTH_R5_ROOT.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R1.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R3.crt", + "usr/share/ca-certificates/mozilla/GTS_Root_R4.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R4.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R5.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R3.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R6.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_E46.crt", + "usr/share/ca-certificates/mozilla/GlobalSign_Root_R46.crt", + "usr/share/ca-certificates/mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/HARICA_TLS_ECC_Root_CA_2021.crt", + "usr/share/ca-certificates/mozilla/HARICA_TLS_RSA_Root_CA_2021.crt", + "usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt", + "usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt", + "usr/share/ca-certificates/mozilla/HiPKI_Root_CA_-_G1.crt", + "usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt", + "usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt", + "usr/share/ca-certificates/mozilla/ISRG_Root_X2.crt", + "usr/share/ca-certificates/mozilla/IdenTrust_Commercial_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/IdenTrust_Public_Sector_Root_CA_1.crt", + "usr/share/ca-certificates/mozilla/Izenpe.com.crt", + "usr/share/ca-certificates/mozilla/Microsec_e-Szigno_Root_CA_2009.crt", + "usr/share/ca-certificates/mozilla/Microsoft_ECC_Root_Certificate_Authority_2017.crt", + "usr/share/ca-certificates/mozilla/Microsoft_RSA_Root_Certificate_Authority_2017.crt", + "usr/share/ca-certificates/mozilla/NAVER_Global_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt", + "usr/share/ca-certificates/mozilla/OISTE_Server_Root_ECC_G1.crt", + "usr/share/ca-certificates/mozilla/OISTE_Server_Root_RSA_G1.crt", + "usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GB_CA.crt", + "usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GC_CA.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_1_G3.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_2_G3.crt", + "usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_3_G3.crt", + "usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_ECC.crt", + "usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_RSA_R2.crt", + "usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_ECC.crt", + "usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_RSA.crt", + "usr/share/ca-certificates/mozilla/SSL.com_TLS_ECC_Root_CA_2022.crt", + "usr/share/ca-certificates/mozilla/SSL.com_TLS_RSA_Root_CA_2022.crt", + "usr/share/ca-certificates/mozilla/SZAFIR_ROOT_CA2.crt", + "usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_E46.crt", + "usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_R46.crt", + "usr/share/ca-certificates/mozilla/SecureSign_Root_CA14.crt", + "usr/share/ca-certificates/mozilla/SecureSign_Root_CA15.crt", + "usr/share/ca-certificates/mozilla/Security_Communication_ECC_RootCA1.crt", + "usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt", + "usr/share/ca-certificates/mozilla/Starfield_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt", + "usr/share/ca-certificates/mozilla/SwissSign_RSA_TLS_Root_CA_2022_-_1.crt", + "usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_2.crt", + "usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_3.crt", + "usr/share/ca-certificates/mozilla/TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.crt", + "usr/share/ca-certificates/mozilla/TWCA_CYBER_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TWCA_Global_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TWCA_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/Telekom_Security_TLS_ECC_Root_2020.crt", + "usr/share/ca-certificates/mozilla/Telekom_Security_TLS_RSA_Root_2023.crt", + "usr/share/ca-certificates/mozilla/Telia_Root_CA_v2.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G3.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G4.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_TLS_ECC_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TrustAsia_TLS_RSA_Root_CA.crt", + "usr/share/ca-certificates/mozilla/TunTrust_Root_CA.crt", + "usr/share/ca-certificates/mozilla/UCA_Extended_Validation_Root.crt", + "usr/share/ca-certificates/mozilla/UCA_Global_G2_Root.crt", + "usr/share/ca-certificates/mozilla/USERTrust_ECC_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/USERTrust_RSA_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/certSIGN_Root_CA_G2.crt", + "usr/share/ca-certificates/mozilla/e-Szigno_Root_CA_2017.crt", + "usr/share/ca-certificates/mozilla/e-Szigno_TLS_Root_CA_2023.crt", + "usr/share/ca-certificates/mozilla/ePKI_Root_Certification_Authority.crt", + "usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_C3.crt", + "usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_G3.crt", + "usr/share/ca-certificates/mozilla/emSign_Root_CA_-_C1.crt", + "usr/share/ca-certificates/mozilla/emSign_Root_CA_-_G1.crt", + "usr/share/ca-certificates/mozilla/vTrus_ECC_Root_CA.crt", + "usr/share/ca-certificates/mozilla/vTrus_Root_CA.crt" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ca-certificates-bundle@20260611-r0", + "Name": "ca-certificates-bundle", + "Identifier": { + "PURL": "pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "20337c2ea28bef28" + }, + "Version": "20260611-r0", + "Arch": "x86_64", + "SrcName": "ca-certificates", + "SrcVersion": "20260611-r0", + "Licenses": [ + "MPL-2.0", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c9534a03750bdfae341f10969016090fc11febbd", + "InstalledFiles": [ + "etc/ssl/cert.pem", + "etc/ssl/certs/ca-certificates.crt", + "etc/ssl1.1/cert.pem", + "etc/ssl1.1/certs" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "gdbm@1.26-r0", + "Name": "gdbm", + "Identifier": { + "PURL": "pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "5eb1a3f86262ca77" + }, + "Version": "1.26-r0", + "Arch": "x86_64", + "SrcName": "gdbm", + "SrcVersion": "1.26-r0", + "Licenses": [ + "GPL-3.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:619493d8124fe49a8ee1d8f7a1372cf7e3977337", + "InstalledFiles": [ + "usr/lib/libgdbm.so.6", + "usr/lib/libgdbm.so.6.0.0", + "usr/lib/libgdbm_compat.so.4", + "usr/lib/libgdbm_compat.so.4.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "keyutils-libs@1.6.3-r4", + "Name": "keyutils-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64\u0026distro=3.24.1", + "UID": "a1a29120eb342032" + }, + "Version": "1.6.3-r4", + "Arch": "x86_64", + "SrcName": "keyutils", + "SrcVersion": "1.6.3-r4", + "Licenses": [ + "GPL-2.0-or-later", + "LGPL-2.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:b7331c96f077fc3522ee4361a441d1097204cd90", + "InstalledFiles": [ + "usr/lib/libkeyutils.so.1", + "usr/lib/libkeyutils.so.1.10" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "krb5-conf@1.0-r2", + "Name": "krb5-conf", + "Identifier": { + "PURL": "pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "e7cf94ba8b6dbc33" + }, + "Version": "1.0-r2", + "Arch": "x86_64", + "SrcName": "krb5-conf", + "SrcVersion": "1.0-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:40a11e0690a59e110367b62a80661024e9942a2d", + "InstalledFiles": [ + "etc/krb5.conf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "krb5-libs@1.22.2-r1", + "Name": "krb5-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "958f8b4a4f087dac" + }, + "Version": "1.22.2-r1", + "Arch": "x86_64", + "SrcName": "krb5", + "SrcVersion": "1.22.2-r1", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "keyutils-libs@1.6.3-r4", + "krb5-conf@1.0-r2", + "libcom_err@1.47.4-r0", + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "libverto@0.3.2-r2", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:ef02346e21b817ff379e4601e5b1fc9760e5e31a", + "InstalledFiles": [ + "usr/lib/libgssapi_krb5.so.2", + "usr/lib/libgssapi_krb5.so.2.2", + "usr/lib/libgssrpc.so.4", + "usr/lib/libgssrpc.so.4.2", + "usr/lib/libk5crypto.so.3", + "usr/lib/libk5crypto.so.3.1", + "usr/lib/libkadm5clnt_mit.so.12", + "usr/lib/libkadm5clnt_mit.so.12.0", + "usr/lib/libkadm5srv_mit.so.12", + "usr/lib/libkadm5srv_mit.so.12.0", + "usr/lib/libkdb5.so.10", + "usr/lib/libkdb5.so.10.0", + "usr/lib/libkrad.so.0", + "usr/lib/libkrad.so.0.0", + "usr/lib/libkrb5.so.3", + "usr/lib/libkrb5.so.3.3", + "usr/lib/libkrb5support.so.0", + "usr/lib/libkrb5support.so.0.1", + "usr/lib/krb5/plugins/kdb/db2.so", + "usr/lib/krb5/plugins/preauth/otp.so", + "usr/lib/krb5/plugins/preauth/spake.so", + "usr/lib/krb5/plugins/preauth/test.so", + "usr/lib/krb5/plugins/tls/k5tls.so" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libapk@3.0.6-r0", + "Name": "libapk", + "Identifier": { + "PURL": "pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "a35b8b9b3219513a" + }, + "Version": "3.0.6-r0", + "Arch": "x86_64", + "SrcName": "apk-tools", + "SrcVersion": "3.0.6-r0", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "musl@1.2.6-r2", + "zlib@1.3.2-r0" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:523a8f58104589f74f743d501c81bf6517155378", + "InstalledFiles": [ + "usr/lib/libapk.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libbz2@1.0.8-r6", + "Name": "libbz2", + "Identifier": { + "PURL": "pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64\u0026distro=3.24.1", + "UID": "48e17539404e2d56" + }, + "Version": "1.0.8-r6", + "Arch": "x86_64", + "SrcName": "bzip2", + "SrcVersion": "1.0.8-r6", + "Licenses": [ + "bzip-2-1.0.6" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:08566ba5c7af97c25474be8b24e8b48f0116b67d", + "InstalledFiles": [ + "usr/lib/libbz2.so.1", + "usr/lib/libbz2.so.1.0.8" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libcom_err@1.47.4-r0", + "Name": "libcom_err", + "Identifier": { + "PURL": "pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "3fc35a3f66d192af" + }, + "Version": "1.47.4-r0", + "Arch": "x86_64", + "SrcName": "e2fsprogs", + "SrcVersion": "1.47.4-r0", + "Licenses": [ + "GPL-2.0-or-later", + "LGPL-2.0-or-later", + "BSD-3-Clause", + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef", + "InstalledFiles": [ + "usr/lib/libcom_err.so.2", + "usr/lib/libcom_err.so.2.1" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libcrypto3@3.5.8-r0", + "Name": "libcrypto3", + "Identifier": { + "PURL": "pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "4299bba2ba9c96aa" + }, + "Version": "3.5.8-r0", + "Arch": "x86_64", + "SrcName": "openssl", + "SrcVersion": "3.5.8-r0", + "Licenses": [ + "Apache-2.0" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3", + "InstalledFiles": [ + "etc/ssl/ct_log_list.cnf", + "etc/ssl/ct_log_list.cnf.dist", + "etc/ssl/openssl.cnf", + "etc/ssl/openssl.cnf.dist", + "usr/lib/libcrypto.so.3", + "usr/lib/engines-3/afalg.so", + "usr/lib/engines-3/capi.so", + "usr/lib/engines-3/loader_attic.so", + "usr/lib/engines-3/padlock.so", + "usr/lib/ossl-modules/legacy.so" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libffi@3.5.2-r1", + "Name": "libffi", + "Identifier": { + "PURL": "pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "d3eaa921287b1ccd" + }, + "Version": "3.5.2-r1", + "Arch": "x86_64", + "SrcName": "libffi", + "SrcVersion": "3.5.2-r1", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a", + "InstalledFiles": [ + "usr/lib/libffi.so.8", + "usr/lib/libffi.so.8.2.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libintl@1.0-r0", + "Name": "libintl", + "Identifier": { + "PURL": "pkg:apk/alpine/libintl@1.0-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "25c18808d8fc87e0" + }, + "Version": "1.0-r0", + "Arch": "x86_64", + "SrcName": "gettext", + "SrcVersion": "1.0-r0", + "Licenses": [ + "LGPL-2.1-or-later" + ], + "Maintainer": "Carlo Landmeter \u003cclandmeter@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:282d6642ccac87237e43a864159d73cf5abe7550", + "InstalledFiles": [ + "usr/lib/libintl.so.8", + "usr/lib/libintl.so.8.4.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libncursesw@6.6_p20260516-r0", + "Name": "libncursesw", + "Identifier": { + "PURL": "pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e8939f45e2191bcc" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "DependsOn": [ + "musl@1.2.6-r2", + "ncurses-terminfo-base@6.6_p20260516-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:9f318e6e324d6827274829194cf6ac6afbaded12", + "InstalledFiles": [ + "usr/lib/libncursesw.so.6", + "usr/lib/libncursesw.so.6.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libnsl@2.0.1-r2", + "Name": "libnsl", + "Identifier": { + "PURL": "pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "3d893c60d41da67b" + }, + "Version": "2.0.1-r2", + "Arch": "x86_64", + "SrcName": "libnsl", + "SrcVersion": "2.0.1-r2", + "Licenses": [ + "LGPL-2.0-or-later" + ], + "DependsOn": [ + "libintl@1.0-r0", + "libtirpc@1.3.5-r1", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:5194adbf26560b52be318481a7af294ab05fd795", + "InstalledFiles": [ + "usr/lib/libnsl.so.3", + "usr/lib/libnsl.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libpanelw@6.6_p20260516-r0", + "Name": "libpanelw", + "Identifier": { + "PURL": "pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "ef1ad9bb256b373" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "DependsOn": [ + "libncursesw@6.6_p20260516-r0", + "musl@1.2.6-r2", + "ncurses-terminfo-base@6.6_p20260516-r0" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:149bdc434232ed11fc5bb975ba519a07154a6f56", + "InstalledFiles": [ + "usr/lib/libpanelw.so.6", + "usr/lib/libpanelw.so.6.6" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libssl3@3.5.8-r0", + "Name": "libssl3", + "Identifier": { + "PURL": "pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "f290ab59b88b1c4a" + }, + "Version": "3.5.8-r0", + "Arch": "x86_64", + "SrcName": "openssl", + "SrcVersion": "3.5.8-r0", + "Licenses": [ + "Apache-2.0" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:5f9b1e55d821953d2e2b1db322dad70a3b5041ea", + "InstalledFiles": [ + "usr/lib/libssl.so.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libtirpc@1.3.5-r1", + "Name": "libtirpc", + "Identifier": { + "PURL": "pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "471c8d955ca03be5" + }, + "Version": "1.3.5-r1", + "Arch": "x86_64", + "SrcName": "libtirpc", + "SrcVersion": "1.3.5-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "krb5-libs@1.22.2-r1", + "libtirpc-conf@1.3.5-r1", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:c32865bd86a8b8829d152279cabbc5ac6d430eb2", + "InstalledFiles": [ + "usr/lib/libtirpc.so.3", + "usr/lib/libtirpc.so.3.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libtirpc-conf@1.3.5-r1", + "Name": "libtirpc-conf", + "Identifier": { + "PURL": "pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "3437392c14aad33f" + }, + "Version": "1.3.5-r1", + "Arch": "x86_64", + "SrcName": "libtirpc", + "SrcVersion": "1.3.5-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:0c17d9988dc986c90e22f79778df047eca9973ff", + "InstalledFiles": [ + "etc/bindresvport.blacklist", + "etc/netconfig" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libuuid@2.42.3-r1", + "Name": "libuuid", + "Identifier": { + "PURL": "pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "c444e9cdd1bdda40" + }, + "Version": "2.42.3-r1", + "Arch": "x86_64", + "SrcName": "util-linux", + "SrcVersion": "2.42.3-r1", + "Licenses": [ + "BSD-3-Clause" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86", + "DiffID": "sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1" + }, + "Digest": "sha1:8f041ef637ad75f381cc0c034f2afbbb0303264e", + "InstalledFiles": [ + "usr/lib/libuuid.so.1", + "usr/lib/libuuid.so.1.3.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "libverto@0.3.2-r2", + "Name": "libverto", + "Identifier": { + "PURL": "pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "9df4321a283a6cf6" + }, + "Version": "0.3.2-r2", + "Arch": "x86_64", + "SrcName": "libverto", + "SrcVersion": "0.3.2-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Francesco Colista \u003cfcolista@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:73233059338142e4ac6d8fb8bb0074e93da75dc1", + "InstalledFiles": [ + "usr/lib/libverto.so.1", + "usr/lib/libverto.so.1.0.0" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "musl@1.2.6-r2", + "Name": "musl", + "Identifier": { + "PURL": "pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "1f8cb44befe503d4" + }, + "Version": "1.2.6-r2", + "Arch": "x86_64", + "SrcName": "musl", + "SrcVersion": "1.2.6-r2", + "Licenses": [ + "MIT" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:0f7e5827e4e1a73631beda27b78431a8ba240e05", + "InstalledFiles": [ + "lib/ld-musl-x86_64.so.1", + "lib/libc.musl-x86_64.so.1" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "musl-utils@1.2.6-r2", + "Name": "musl-utils", + "Identifier": { + "PURL": "pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64\u0026distro=3.24.1", + "UID": "4497482ec1d943e1" + }, + "Version": "1.2.6-r2", + "Arch": "x86_64", + "SrcName": "musl", + "SrcVersion": "1.2.6-r2", + "Licenses": [ + "MIT", + "BSD-2-Clause", + "GPL-2.0-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2", + "scanelf@1.3.9-r1" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:75ada3c48d63ec5d87c42fdf934a3fdd11298dc5", + "InstalledFiles": [ + "sbin/ldconfig", + "usr/bin/getconf", + "usr/bin/getent", + "usr/bin/iconv", + "usr/bin/ldd" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ncurses-terminfo-base@6.6_p20260516-r0", + "Name": "ncurses-terminfo-base", + "Identifier": { + "PURL": "pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e7fac5c6a6e9ae8" + }, + "Version": "6.6_p20260516-r0", + "Arch": "x86_64", + "SrcName": "ncurses", + "SrcVersion": "6.6_p20260516-r0", + "Licenses": [ + "X-11" + ], + "Maintainer": "Milan P. Stanić \u003cmps@arvanta.net\u003e", + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:9d551d828e9c8ee52c5801c1d6046828ebf15752", + "InstalledFiles": [ + "etc/terminfo/a/alacritty", + "etc/terminfo/a/ansi", + "etc/terminfo/d/dumb", + "etc/terminfo/g/gnome", + "etc/terminfo/g/gnome-256color", + "etc/terminfo/k/konsole", + "etc/terminfo/k/konsole-256color", + "etc/terminfo/k/konsole-linux", + "etc/terminfo/l/linux", + "etc/terminfo/p/putty", + "etc/terminfo/p/putty-256color", + "etc/terminfo/r/rxvt", + "etc/terminfo/r/rxvt-256color", + "etc/terminfo/s/screen", + "etc/terminfo/s/screen-256color", + "etc/terminfo/s/st-0.6", + "etc/terminfo/s/st-0.7", + "etc/terminfo/s/st-0.8", + "etc/terminfo/s/st-0.8.5", + "etc/terminfo/s/st-16color", + "etc/terminfo/s/st-256color", + "etc/terminfo/s/st-direct", + "etc/terminfo/s/sun", + "etc/terminfo/t/terminator", + "etc/terminfo/t/terminology", + "etc/terminfo/t/terminology-0.6.1", + "etc/terminfo/t/terminology-1.0.0", + "etc/terminfo/t/terminology-1.8.1", + "etc/terminfo/t/tmux", + "etc/terminfo/t/tmux-256color", + "etc/terminfo/v/vt100", + "etc/terminfo/v/vt102", + "etc/terminfo/v/vt200", + "etc/terminfo/v/vt220", + "etc/terminfo/v/vt52", + "etc/terminfo/v/vte", + "etc/terminfo/v/vte-256color", + "etc/terminfo/x/xterm", + "etc/terminfo/x/xterm-256color", + "etc/terminfo/x/xterm-color", + "etc/terminfo/x/xterm-xfree86" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "readline@8.3.3-r1", + "Name": "readline", + "Identifier": { + "PURL": "pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "f50058781c93e1f2" + }, + "Version": "8.3.3-r1", + "Arch": "x86_64", + "SrcName": "readline", + "SrcVersion": "8.3.3-r1", + "Licenses": [ + "GPL-3.0-or-later" + ], + "Maintainer": "qaqland \u003cqaq@qaq.land\u003e", + "DependsOn": [ + "libncursesw@6.6_p20260516-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:945b16e378bc00e44d89d4de8124bba7647fdf4d", + "InstalledFiles": [ + "etc/inputrc", + "usr/lib/libreadline.so.8", + "usr/lib/libreadline.so.8.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "scanelf@1.3.9-r1", + "Name": "scanelf", + "Identifier": { + "PURL": "pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64\u0026distro=3.24.1", + "UID": "936394657a1626fb" + }, + "Version": "1.3.9-r1", + "Arch": "x86_64", + "SrcName": "pax-utils", + "SrcVersion": "1.3.9-r1", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:013f903d0ba219673aebbdd04f74bb5ed82b01f0", + "InstalledFiles": [ + "usr/bin/scanelf" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "sqlite-libs@3.53.4-r0", + "Name": "sqlite-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "8b10aee2ccc192de" + }, + "Version": "3.53.4-r0", + "Arch": "x86_64", + "SrcName": "sqlite", + "SrcVersion": "3.53.4-r0", + "Licenses": [ + "blessing" + ], + "Maintainer": "Jingyun Hua \u003chuajingyun@loongson.cn\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:f7630ceb37c232b6609861aeab6cdb9cd120e6fa", + "InstalledFiles": [ + "usr/lib/libsqlite3.so.0", + "usr/lib/libsqlite3.so.3.53.4" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "ssl_client@1.37.0-r31", + "Name": "ssl_client", + "Identifier": { + "PURL": "pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64\u0026distro=3.24.1", + "UID": "d42e31f15a4ce47a" + }, + "Version": "1.37.0-r31", + "Arch": "x86_64", + "SrcName": "busybox", + "SrcVersion": "1.37.0-r31", + "Licenses": [ + "GPL-2.0-only" + ], + "Maintainer": "Sören Tempel \u003csoeren+alpine@soeren-tempel.net\u003e", + "DependsOn": [ + "libcrypto3@3.5.8-r0", + "libssl3@3.5.8-r0", + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:c220f4a5125a313af733e98def94132bb1e9d40d", + "InstalledFiles": [ + "usr/bin/ssl_client" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "tzdata@2026c-r0", + "Name": "tzdata", + "Identifier": { + "PURL": "pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "52c6b50eff629f9d" + }, + "Version": "2026c-r0", + "Arch": "x86_64", + "SrcName": "tzdata", + "SrcVersion": "2026c-r0", + "Licenses": [ + "Public-Domain" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "Layer": { + "Digest": "sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb", + "DiffID": "sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd" + }, + "Digest": "sha1:61f7544ecd8dd63eac23fe3e645702fda92ef02a", + "InstalledFiles": [ + "usr/share/zoneinfo/CET", + "usr/share/zoneinfo/CST6CDT", + "usr/share/zoneinfo/Cuba", + "usr/share/zoneinfo/EET", + "usr/share/zoneinfo/EST", + "usr/share/zoneinfo/EST5EDT", + "usr/share/zoneinfo/Egypt", + "usr/share/zoneinfo/Eire", + "usr/share/zoneinfo/Factory", + "usr/share/zoneinfo/GB", + "usr/share/zoneinfo/GB-Eire", + "usr/share/zoneinfo/GMT", + "usr/share/zoneinfo/GMT+0", + "usr/share/zoneinfo/GMT-0", + "usr/share/zoneinfo/GMT0", + "usr/share/zoneinfo/Greenwich", + "usr/share/zoneinfo/HST", + "usr/share/zoneinfo/Hongkong", + "usr/share/zoneinfo/Iceland", + "usr/share/zoneinfo/Iran", + "usr/share/zoneinfo/Israel", + "usr/share/zoneinfo/Jamaica", + "usr/share/zoneinfo/Japan", + "usr/share/zoneinfo/Kwajalein", + "usr/share/zoneinfo/Libya", + "usr/share/zoneinfo/MET", + "usr/share/zoneinfo/MST", + "usr/share/zoneinfo/MST7MDT", + "usr/share/zoneinfo/NZ", + "usr/share/zoneinfo/NZ-CHAT", + "usr/share/zoneinfo/Navajo", + "usr/share/zoneinfo/PRC", + "usr/share/zoneinfo/PST8PDT", + "usr/share/zoneinfo/Poland", + "usr/share/zoneinfo/Portugal", + "usr/share/zoneinfo/ROC", + "usr/share/zoneinfo/ROK", + "usr/share/zoneinfo/Singapore", + "usr/share/zoneinfo/Turkey", + "usr/share/zoneinfo/UCT", + "usr/share/zoneinfo/UTC", + "usr/share/zoneinfo/Universal", + "usr/share/zoneinfo/W-SU", + "usr/share/zoneinfo/WET", + "usr/share/zoneinfo/Zulu", + "usr/share/zoneinfo/iso3166.tab", + "usr/share/zoneinfo/leap-seconds.list", + "usr/share/zoneinfo/posixrules", + "usr/share/zoneinfo/zone.tab", + "usr/share/zoneinfo/zone1970.tab", + "usr/share/zoneinfo/Africa/Abidjan", + "usr/share/zoneinfo/Africa/Accra", + "usr/share/zoneinfo/Africa/Addis_Ababa", + "usr/share/zoneinfo/Africa/Algiers", + "usr/share/zoneinfo/Africa/Asmara", + "usr/share/zoneinfo/Africa/Asmera", + "usr/share/zoneinfo/Africa/Bamako", + "usr/share/zoneinfo/Africa/Bangui", + "usr/share/zoneinfo/Africa/Banjul", + "usr/share/zoneinfo/Africa/Bissau", + "usr/share/zoneinfo/Africa/Blantyre", + "usr/share/zoneinfo/Africa/Brazzaville", + "usr/share/zoneinfo/Africa/Bujumbura", + "usr/share/zoneinfo/Africa/Cairo", + "usr/share/zoneinfo/Africa/Casablanca", + "usr/share/zoneinfo/Africa/Ceuta", + "usr/share/zoneinfo/Africa/Conakry", + "usr/share/zoneinfo/Africa/Dakar", + "usr/share/zoneinfo/Africa/Dar_es_Salaam", + "usr/share/zoneinfo/Africa/Djibouti", + "usr/share/zoneinfo/Africa/Douala", + "usr/share/zoneinfo/Africa/El_Aaiun", + "usr/share/zoneinfo/Africa/Freetown", + "usr/share/zoneinfo/Africa/Gaborone", + "usr/share/zoneinfo/Africa/Harare", + "usr/share/zoneinfo/Africa/Johannesburg", + "usr/share/zoneinfo/Africa/Juba", + "usr/share/zoneinfo/Africa/Kampala", + "usr/share/zoneinfo/Africa/Khartoum", + "usr/share/zoneinfo/Africa/Kigali", + "usr/share/zoneinfo/Africa/Kinshasa", + "usr/share/zoneinfo/Africa/Lagos", + "usr/share/zoneinfo/Africa/Libreville", + "usr/share/zoneinfo/Africa/Lome", + "usr/share/zoneinfo/Africa/Luanda", + "usr/share/zoneinfo/Africa/Lubumbashi", + "usr/share/zoneinfo/Africa/Lusaka", + "usr/share/zoneinfo/Africa/Malabo", + "usr/share/zoneinfo/Africa/Maputo", + "usr/share/zoneinfo/Africa/Maseru", + "usr/share/zoneinfo/Africa/Mbabane", + "usr/share/zoneinfo/Africa/Mogadishu", + "usr/share/zoneinfo/Africa/Monrovia", + "usr/share/zoneinfo/Africa/Nairobi", + "usr/share/zoneinfo/Africa/Ndjamena", + "usr/share/zoneinfo/Africa/Niamey", + "usr/share/zoneinfo/Africa/Nouakchott", + "usr/share/zoneinfo/Africa/Ouagadougou", + "usr/share/zoneinfo/Africa/Porto-Novo", + "usr/share/zoneinfo/Africa/Sao_Tome", + "usr/share/zoneinfo/Africa/Timbuktu", + "usr/share/zoneinfo/Africa/Tripoli", + "usr/share/zoneinfo/Africa/Tunis", + "usr/share/zoneinfo/Africa/Windhoek", + "usr/share/zoneinfo/America/Adak", + "usr/share/zoneinfo/America/Anchorage", + "usr/share/zoneinfo/America/Anguilla", + "usr/share/zoneinfo/America/Antigua", + "usr/share/zoneinfo/America/Araguaina", + "usr/share/zoneinfo/America/Aruba", + "usr/share/zoneinfo/America/Asuncion", + "usr/share/zoneinfo/America/Atikokan", + "usr/share/zoneinfo/America/Atka", + "usr/share/zoneinfo/America/Bahia", + "usr/share/zoneinfo/America/Bahia_Banderas", + "usr/share/zoneinfo/America/Barbados", + "usr/share/zoneinfo/America/Belem", + "usr/share/zoneinfo/America/Belize", + "usr/share/zoneinfo/America/Blanc-Sablon", + "usr/share/zoneinfo/America/Boa_Vista", + "usr/share/zoneinfo/America/Bogota", + "usr/share/zoneinfo/America/Boise", + "usr/share/zoneinfo/America/Buenos_Aires", + "usr/share/zoneinfo/America/Cambridge_Bay", + "usr/share/zoneinfo/America/Campo_Grande", + "usr/share/zoneinfo/America/Cancun", + "usr/share/zoneinfo/America/Caracas", + "usr/share/zoneinfo/America/Catamarca", + "usr/share/zoneinfo/America/Cayenne", + "usr/share/zoneinfo/America/Cayman", + "usr/share/zoneinfo/America/Chicago", + "usr/share/zoneinfo/America/Chihuahua", + "usr/share/zoneinfo/America/Ciudad_Juarez", + "usr/share/zoneinfo/America/Coral_Harbour", + "usr/share/zoneinfo/America/Cordoba", + "usr/share/zoneinfo/America/Costa_Rica", + "usr/share/zoneinfo/America/Coyhaique", + "usr/share/zoneinfo/America/Creston", + "usr/share/zoneinfo/America/Cuiaba", + "usr/share/zoneinfo/America/Curacao", + "usr/share/zoneinfo/America/Danmarkshavn", + "usr/share/zoneinfo/America/Dawson", + "usr/share/zoneinfo/America/Dawson_Creek", + "usr/share/zoneinfo/America/Denver", + "usr/share/zoneinfo/America/Detroit", + "usr/share/zoneinfo/America/Dominica", + "usr/share/zoneinfo/America/Edmonton", + "usr/share/zoneinfo/America/Eirunepe", + "usr/share/zoneinfo/America/El_Salvador", + "usr/share/zoneinfo/America/Ensenada", + "usr/share/zoneinfo/America/Fort_Nelson", + "usr/share/zoneinfo/America/Fort_Wayne", + "usr/share/zoneinfo/America/Fortaleza", + "usr/share/zoneinfo/America/Glace_Bay", + "usr/share/zoneinfo/America/Godthab", + "usr/share/zoneinfo/America/Goose_Bay", + "usr/share/zoneinfo/America/Grand_Turk", + "usr/share/zoneinfo/America/Grenada", + "usr/share/zoneinfo/America/Guadeloupe", + "usr/share/zoneinfo/America/Guatemala", + "usr/share/zoneinfo/America/Guayaquil", + "usr/share/zoneinfo/America/Guyana", + "usr/share/zoneinfo/America/Halifax", + "usr/share/zoneinfo/America/Havana", + "usr/share/zoneinfo/America/Hermosillo", + "usr/share/zoneinfo/America/Indianapolis", + "usr/share/zoneinfo/America/Inuvik", + "usr/share/zoneinfo/America/Iqaluit", + "usr/share/zoneinfo/America/Jamaica", + "usr/share/zoneinfo/America/Jujuy", + "usr/share/zoneinfo/America/Juneau", + "usr/share/zoneinfo/America/Knox_IN", + "usr/share/zoneinfo/America/Kralendijk", + "usr/share/zoneinfo/America/La_Paz", + "usr/share/zoneinfo/America/Lima", + "usr/share/zoneinfo/America/Los_Angeles", + "usr/share/zoneinfo/America/Louisville", + "usr/share/zoneinfo/America/Lower_Princes", + "usr/share/zoneinfo/America/Maceio", + "usr/share/zoneinfo/America/Managua", + "usr/share/zoneinfo/America/Manaus", + "usr/share/zoneinfo/America/Marigot", + "usr/share/zoneinfo/America/Martinique", + "usr/share/zoneinfo/America/Matamoros", + "usr/share/zoneinfo/America/Mazatlan", + "usr/share/zoneinfo/America/Mendoza", + "usr/share/zoneinfo/America/Menominee", + "usr/share/zoneinfo/America/Merida", + "usr/share/zoneinfo/America/Metlakatla", + "usr/share/zoneinfo/America/Mexico_City", + "usr/share/zoneinfo/America/Miquelon", + "usr/share/zoneinfo/America/Moncton", + "usr/share/zoneinfo/America/Monterrey", + "usr/share/zoneinfo/America/Montevideo", + "usr/share/zoneinfo/America/Montreal", + "usr/share/zoneinfo/America/Montserrat", + "usr/share/zoneinfo/America/Nassau", + "usr/share/zoneinfo/America/New_York", + "usr/share/zoneinfo/America/Nipigon", + "usr/share/zoneinfo/America/Nome", + "usr/share/zoneinfo/America/Noronha", + "usr/share/zoneinfo/America/Nuuk", + "usr/share/zoneinfo/America/Ojinaga", + "usr/share/zoneinfo/America/Panama", + "usr/share/zoneinfo/America/Pangnirtung", + "usr/share/zoneinfo/America/Paramaribo", + "usr/share/zoneinfo/America/Phoenix", + "usr/share/zoneinfo/America/Port-au-Prince", + "usr/share/zoneinfo/America/Port_of_Spain", + "usr/share/zoneinfo/America/Porto_Acre", + "usr/share/zoneinfo/America/Porto_Velho", + "usr/share/zoneinfo/America/Puerto_Rico", + "usr/share/zoneinfo/America/Punta_Arenas", + "usr/share/zoneinfo/America/Rainy_River", + "usr/share/zoneinfo/America/Rankin_Inlet", + "usr/share/zoneinfo/America/Recife", + "usr/share/zoneinfo/America/Regina", + "usr/share/zoneinfo/America/Resolute", + "usr/share/zoneinfo/America/Rio_Branco", + "usr/share/zoneinfo/America/Rosario", + "usr/share/zoneinfo/America/Santa_Isabel", + "usr/share/zoneinfo/America/Santarem", + "usr/share/zoneinfo/America/Santiago", + "usr/share/zoneinfo/America/Santo_Domingo", + "usr/share/zoneinfo/America/Sao_Paulo", + "usr/share/zoneinfo/America/Scoresbysund", + "usr/share/zoneinfo/America/Shiprock", + "usr/share/zoneinfo/America/Sitka", + "usr/share/zoneinfo/America/St_Barthelemy", + "usr/share/zoneinfo/America/St_Johns", + "usr/share/zoneinfo/America/St_Kitts", + "usr/share/zoneinfo/America/St_Lucia", + "usr/share/zoneinfo/America/St_Thomas", + "usr/share/zoneinfo/America/St_Vincent", + "usr/share/zoneinfo/America/Swift_Current", + "usr/share/zoneinfo/America/Tegucigalpa", + "usr/share/zoneinfo/America/Thule", + "usr/share/zoneinfo/America/Thunder_Bay", + "usr/share/zoneinfo/America/Tijuana", + "usr/share/zoneinfo/America/Toronto", + "usr/share/zoneinfo/America/Tortola", + "usr/share/zoneinfo/America/Vancouver", + "usr/share/zoneinfo/America/Virgin", + "usr/share/zoneinfo/America/Whitehorse", + "usr/share/zoneinfo/America/Winnipeg", + "usr/share/zoneinfo/America/Yakutat", + "usr/share/zoneinfo/America/Yellowknife", + "usr/share/zoneinfo/America/Argentina/Buenos_Aires", + "usr/share/zoneinfo/America/Argentina/Catamarca", + "usr/share/zoneinfo/America/Argentina/ComodRivadavia", + "usr/share/zoneinfo/America/Argentina/Cordoba", + "usr/share/zoneinfo/America/Argentina/Jujuy", + "usr/share/zoneinfo/America/Argentina/La_Rioja", + "usr/share/zoneinfo/America/Argentina/Mendoza", + "usr/share/zoneinfo/America/Argentina/Rio_Gallegos", + "usr/share/zoneinfo/America/Argentina/Salta", + "usr/share/zoneinfo/America/Argentina/San_Juan", + "usr/share/zoneinfo/America/Argentina/San_Luis", + "usr/share/zoneinfo/America/Argentina/Tucuman", + "usr/share/zoneinfo/America/Argentina/Ushuaia", + "usr/share/zoneinfo/America/Indiana/Indianapolis", + "usr/share/zoneinfo/America/Indiana/Knox", + "usr/share/zoneinfo/America/Indiana/Marengo", + "usr/share/zoneinfo/America/Indiana/Petersburg", + "usr/share/zoneinfo/America/Indiana/Tell_City", + "usr/share/zoneinfo/America/Indiana/Vevay", + "usr/share/zoneinfo/America/Indiana/Vincennes", + "usr/share/zoneinfo/America/Indiana/Winamac", + "usr/share/zoneinfo/America/Kentucky/Louisville", + "usr/share/zoneinfo/America/Kentucky/Monticello", + "usr/share/zoneinfo/America/North_Dakota/Beulah", + "usr/share/zoneinfo/America/North_Dakota/Center", + "usr/share/zoneinfo/America/North_Dakota/New_Salem", + "usr/share/zoneinfo/Antarctica/Casey", + "usr/share/zoneinfo/Antarctica/Davis", + "usr/share/zoneinfo/Antarctica/DumontDUrville", + "usr/share/zoneinfo/Antarctica/Macquarie", + "usr/share/zoneinfo/Antarctica/Mawson", + "usr/share/zoneinfo/Antarctica/McMurdo", + "usr/share/zoneinfo/Antarctica/Palmer", + "usr/share/zoneinfo/Antarctica/Rothera", + "usr/share/zoneinfo/Antarctica/South_Pole", + "usr/share/zoneinfo/Antarctica/Syowa", + "usr/share/zoneinfo/Antarctica/Troll", + "usr/share/zoneinfo/Antarctica/Vostok", + "usr/share/zoneinfo/Arctic/Longyearbyen", + "usr/share/zoneinfo/Asia/Aden", + "usr/share/zoneinfo/Asia/Almaty", + "usr/share/zoneinfo/Asia/Amman", + "usr/share/zoneinfo/Asia/Anadyr", + "usr/share/zoneinfo/Asia/Aqtau", + "usr/share/zoneinfo/Asia/Aqtobe", + "usr/share/zoneinfo/Asia/Ashgabat", + "usr/share/zoneinfo/Asia/Ashkhabad", + "usr/share/zoneinfo/Asia/Atyrau", + "usr/share/zoneinfo/Asia/Baghdad", + "usr/share/zoneinfo/Asia/Bahrain", + "usr/share/zoneinfo/Asia/Baku", + "usr/share/zoneinfo/Asia/Bangkok", + "usr/share/zoneinfo/Asia/Barnaul", + "usr/share/zoneinfo/Asia/Beirut", + "usr/share/zoneinfo/Asia/Bishkek", + "usr/share/zoneinfo/Asia/Brunei", + "usr/share/zoneinfo/Asia/Calcutta", + "usr/share/zoneinfo/Asia/Chita", + "usr/share/zoneinfo/Asia/Choibalsan", + "usr/share/zoneinfo/Asia/Chongqing", + "usr/share/zoneinfo/Asia/Chungking", + "usr/share/zoneinfo/Asia/Colombo", + "usr/share/zoneinfo/Asia/Dacca", + "usr/share/zoneinfo/Asia/Damascus", + "usr/share/zoneinfo/Asia/Dhaka", + "usr/share/zoneinfo/Asia/Dili", + "usr/share/zoneinfo/Asia/Dubai", + "usr/share/zoneinfo/Asia/Dushanbe", + "usr/share/zoneinfo/Asia/Famagusta", + "usr/share/zoneinfo/Asia/Gaza", + "usr/share/zoneinfo/Asia/Harbin", + "usr/share/zoneinfo/Asia/Hebron", + "usr/share/zoneinfo/Asia/Ho_Chi_Minh", + "usr/share/zoneinfo/Asia/Hong_Kong", + "usr/share/zoneinfo/Asia/Hovd", + "usr/share/zoneinfo/Asia/Irkutsk", + "usr/share/zoneinfo/Asia/Istanbul", + "usr/share/zoneinfo/Asia/Jakarta", + "usr/share/zoneinfo/Asia/Jayapura", + "usr/share/zoneinfo/Asia/Jerusalem", + "usr/share/zoneinfo/Asia/Kabul", + "usr/share/zoneinfo/Asia/Kamchatka", + "usr/share/zoneinfo/Asia/Karachi", + "usr/share/zoneinfo/Asia/Kashgar", + "usr/share/zoneinfo/Asia/Kathmandu", + "usr/share/zoneinfo/Asia/Katmandu", + "usr/share/zoneinfo/Asia/Khandyga", + "usr/share/zoneinfo/Asia/Kolkata", + "usr/share/zoneinfo/Asia/Krasnoyarsk", + "usr/share/zoneinfo/Asia/Kuala_Lumpur", + "usr/share/zoneinfo/Asia/Kuching", + "usr/share/zoneinfo/Asia/Kuwait", + "usr/share/zoneinfo/Asia/Macao", + "usr/share/zoneinfo/Asia/Macau", + "usr/share/zoneinfo/Asia/Magadan", + "usr/share/zoneinfo/Asia/Makassar", + "usr/share/zoneinfo/Asia/Manila", + "usr/share/zoneinfo/Asia/Muscat", + "usr/share/zoneinfo/Asia/Nicosia", + "usr/share/zoneinfo/Asia/Novokuznetsk", + "usr/share/zoneinfo/Asia/Novosibirsk", + "usr/share/zoneinfo/Asia/Omsk", + "usr/share/zoneinfo/Asia/Oral", + "usr/share/zoneinfo/Asia/Phnom_Penh", + "usr/share/zoneinfo/Asia/Pontianak", + "usr/share/zoneinfo/Asia/Pyongyang", + "usr/share/zoneinfo/Asia/Qatar", + "usr/share/zoneinfo/Asia/Qostanay", + "usr/share/zoneinfo/Asia/Qyzylorda", + "usr/share/zoneinfo/Asia/Rangoon", + "usr/share/zoneinfo/Asia/Riyadh", + "usr/share/zoneinfo/Asia/Saigon", + "usr/share/zoneinfo/Asia/Sakhalin", + "usr/share/zoneinfo/Asia/Samarkand", + "usr/share/zoneinfo/Asia/Seoul", + "usr/share/zoneinfo/Asia/Shanghai", + "usr/share/zoneinfo/Asia/Singapore", + "usr/share/zoneinfo/Asia/Srednekolymsk", + "usr/share/zoneinfo/Asia/Taipei", + "usr/share/zoneinfo/Asia/Tashkent", + "usr/share/zoneinfo/Asia/Tbilisi", + "usr/share/zoneinfo/Asia/Tehran", + "usr/share/zoneinfo/Asia/Tel_Aviv", + "usr/share/zoneinfo/Asia/Thimbu", + "usr/share/zoneinfo/Asia/Thimphu", + "usr/share/zoneinfo/Asia/Tokyo", + "usr/share/zoneinfo/Asia/Tomsk", + "usr/share/zoneinfo/Asia/Ujung_Pandang", + "usr/share/zoneinfo/Asia/Ulaanbaatar", + "usr/share/zoneinfo/Asia/Ulan_Bator", + "usr/share/zoneinfo/Asia/Urumqi", + "usr/share/zoneinfo/Asia/Ust-Nera", + "usr/share/zoneinfo/Asia/Vientiane", + "usr/share/zoneinfo/Asia/Vladivostok", + "usr/share/zoneinfo/Asia/Yakutsk", + "usr/share/zoneinfo/Asia/Yangon", + "usr/share/zoneinfo/Asia/Yekaterinburg", + "usr/share/zoneinfo/Asia/Yerevan", + "usr/share/zoneinfo/Atlantic/Azores", + "usr/share/zoneinfo/Atlantic/Bermuda", + "usr/share/zoneinfo/Atlantic/Canary", + "usr/share/zoneinfo/Atlantic/Cape_Verde", + "usr/share/zoneinfo/Atlantic/Faeroe", + "usr/share/zoneinfo/Atlantic/Faroe", + "usr/share/zoneinfo/Atlantic/Jan_Mayen", + "usr/share/zoneinfo/Atlantic/Madeira", + "usr/share/zoneinfo/Atlantic/Reykjavik", + "usr/share/zoneinfo/Atlantic/South_Georgia", + "usr/share/zoneinfo/Atlantic/St_Helena", + "usr/share/zoneinfo/Atlantic/Stanley", + "usr/share/zoneinfo/Australia/ACT", + "usr/share/zoneinfo/Australia/Adelaide", + "usr/share/zoneinfo/Australia/Brisbane", + "usr/share/zoneinfo/Australia/Broken_Hill", + "usr/share/zoneinfo/Australia/Canberra", + "usr/share/zoneinfo/Australia/Currie", + "usr/share/zoneinfo/Australia/Darwin", + "usr/share/zoneinfo/Australia/Eucla", + "usr/share/zoneinfo/Australia/Hobart", + "usr/share/zoneinfo/Australia/LHI", + "usr/share/zoneinfo/Australia/Lindeman", + "usr/share/zoneinfo/Australia/Lord_Howe", + "usr/share/zoneinfo/Australia/Melbourne", + "usr/share/zoneinfo/Australia/NSW", + "usr/share/zoneinfo/Australia/North", + "usr/share/zoneinfo/Australia/Perth", + "usr/share/zoneinfo/Australia/Queensland", + "usr/share/zoneinfo/Australia/South", + "usr/share/zoneinfo/Australia/Sydney", + "usr/share/zoneinfo/Australia/Tasmania", + "usr/share/zoneinfo/Australia/Victoria", + "usr/share/zoneinfo/Australia/West", + "usr/share/zoneinfo/Australia/Yancowinna", + "usr/share/zoneinfo/Brazil/Acre", + "usr/share/zoneinfo/Brazil/DeNoronha", + "usr/share/zoneinfo/Brazil/East", + "usr/share/zoneinfo/Brazil/West", + "usr/share/zoneinfo/Canada/Atlantic", + "usr/share/zoneinfo/Canada/Central", + "usr/share/zoneinfo/Canada/Eastern", + "usr/share/zoneinfo/Canada/Mountain", + "usr/share/zoneinfo/Canada/Newfoundland", + "usr/share/zoneinfo/Canada/Pacific", + "usr/share/zoneinfo/Canada/Saskatchewan", + "usr/share/zoneinfo/Canada/Yukon", + "usr/share/zoneinfo/Chile/Continental", + "usr/share/zoneinfo/Chile/EasterIsland", + "usr/share/zoneinfo/Etc/GMT", + "usr/share/zoneinfo/Etc/GMT+0", + "usr/share/zoneinfo/Etc/GMT+1", + "usr/share/zoneinfo/Etc/GMT+10", + "usr/share/zoneinfo/Etc/GMT+11", + "usr/share/zoneinfo/Etc/GMT+12", + "usr/share/zoneinfo/Etc/GMT+2", + "usr/share/zoneinfo/Etc/GMT+3", + "usr/share/zoneinfo/Etc/GMT+4", + "usr/share/zoneinfo/Etc/GMT+5", + "usr/share/zoneinfo/Etc/GMT+6", + "usr/share/zoneinfo/Etc/GMT+7", + "usr/share/zoneinfo/Etc/GMT+8", + "usr/share/zoneinfo/Etc/GMT+9", + "usr/share/zoneinfo/Etc/GMT-0", + "usr/share/zoneinfo/Etc/GMT-1", + "usr/share/zoneinfo/Etc/GMT-10", + "usr/share/zoneinfo/Etc/GMT-11", + "usr/share/zoneinfo/Etc/GMT-12", + "usr/share/zoneinfo/Etc/GMT-13", + "usr/share/zoneinfo/Etc/GMT-14", + "usr/share/zoneinfo/Etc/GMT-2", + "usr/share/zoneinfo/Etc/GMT-3", + "usr/share/zoneinfo/Etc/GMT-4", + "usr/share/zoneinfo/Etc/GMT-5", + "usr/share/zoneinfo/Etc/GMT-6", + "usr/share/zoneinfo/Etc/GMT-7", + "usr/share/zoneinfo/Etc/GMT-8", + "usr/share/zoneinfo/Etc/GMT-9", + "usr/share/zoneinfo/Etc/GMT0", + "usr/share/zoneinfo/Etc/Greenwich", + "usr/share/zoneinfo/Etc/UCT", + "usr/share/zoneinfo/Etc/UTC", + "usr/share/zoneinfo/Etc/Universal", + "usr/share/zoneinfo/Etc/Zulu", + "usr/share/zoneinfo/Europe/Amsterdam", + "usr/share/zoneinfo/Europe/Andorra", + "usr/share/zoneinfo/Europe/Astrakhan", + "usr/share/zoneinfo/Europe/Athens", + "usr/share/zoneinfo/Europe/Belfast", + "usr/share/zoneinfo/Europe/Belgrade", + "usr/share/zoneinfo/Europe/Berlin", + "usr/share/zoneinfo/Europe/Bratislava", + "usr/share/zoneinfo/Europe/Brussels", + "usr/share/zoneinfo/Europe/Bucharest", + "usr/share/zoneinfo/Europe/Budapest", + "usr/share/zoneinfo/Europe/Busingen", + "usr/share/zoneinfo/Europe/Chisinau", + "usr/share/zoneinfo/Europe/Copenhagen", + "usr/share/zoneinfo/Europe/Dublin", + "usr/share/zoneinfo/Europe/Gibraltar", + "usr/share/zoneinfo/Europe/Guernsey", + "usr/share/zoneinfo/Europe/Helsinki", + "usr/share/zoneinfo/Europe/Isle_of_Man", + "usr/share/zoneinfo/Europe/Istanbul", + "usr/share/zoneinfo/Europe/Jersey", + "usr/share/zoneinfo/Europe/Kaliningrad", + "usr/share/zoneinfo/Europe/Kiev", + "usr/share/zoneinfo/Europe/Kirov", + "usr/share/zoneinfo/Europe/Kyiv", + "usr/share/zoneinfo/Europe/Lisbon", + "usr/share/zoneinfo/Europe/Ljubljana", + "usr/share/zoneinfo/Europe/London", + "usr/share/zoneinfo/Europe/Luxembourg", + "usr/share/zoneinfo/Europe/Madrid", + "usr/share/zoneinfo/Europe/Malta", + "usr/share/zoneinfo/Europe/Mariehamn", + "usr/share/zoneinfo/Europe/Minsk", + "usr/share/zoneinfo/Europe/Monaco", + "usr/share/zoneinfo/Europe/Moscow", + "usr/share/zoneinfo/Europe/Nicosia", + "usr/share/zoneinfo/Europe/Oslo", + "usr/share/zoneinfo/Europe/Paris", + "usr/share/zoneinfo/Europe/Podgorica", + "usr/share/zoneinfo/Europe/Prague", + "usr/share/zoneinfo/Europe/Riga", + "usr/share/zoneinfo/Europe/Rome", + "usr/share/zoneinfo/Europe/Samara", + "usr/share/zoneinfo/Europe/San_Marino", + "usr/share/zoneinfo/Europe/Sarajevo", + "usr/share/zoneinfo/Europe/Saratov", + "usr/share/zoneinfo/Europe/Simferopol", + "usr/share/zoneinfo/Europe/Skopje", + "usr/share/zoneinfo/Europe/Sofia", + "usr/share/zoneinfo/Europe/Stockholm", + "usr/share/zoneinfo/Europe/Tallinn", + "usr/share/zoneinfo/Europe/Tirane", + "usr/share/zoneinfo/Europe/Tiraspol", + "usr/share/zoneinfo/Europe/Ulyanovsk", + "usr/share/zoneinfo/Europe/Uzhgorod", + "usr/share/zoneinfo/Europe/Vaduz", + "usr/share/zoneinfo/Europe/Vatican", + "usr/share/zoneinfo/Europe/Vienna", + "usr/share/zoneinfo/Europe/Vilnius", + "usr/share/zoneinfo/Europe/Volgograd", + "usr/share/zoneinfo/Europe/Warsaw", + "usr/share/zoneinfo/Europe/Zagreb", + "usr/share/zoneinfo/Europe/Zaporozhye", + "usr/share/zoneinfo/Europe/Zurich", + "usr/share/zoneinfo/Indian/Antananarivo", + "usr/share/zoneinfo/Indian/Chagos", + "usr/share/zoneinfo/Indian/Christmas", + "usr/share/zoneinfo/Indian/Cocos", + "usr/share/zoneinfo/Indian/Comoro", + "usr/share/zoneinfo/Indian/Kerguelen", + "usr/share/zoneinfo/Indian/Mahe", + "usr/share/zoneinfo/Indian/Maldives", + "usr/share/zoneinfo/Indian/Mauritius", + "usr/share/zoneinfo/Indian/Mayotte", + "usr/share/zoneinfo/Indian/Reunion", + "usr/share/zoneinfo/Mexico/BajaNorte", + "usr/share/zoneinfo/Mexico/BajaSur", + "usr/share/zoneinfo/Mexico/General", + "usr/share/zoneinfo/Pacific/Apia", + "usr/share/zoneinfo/Pacific/Auckland", + "usr/share/zoneinfo/Pacific/Bougainville", + "usr/share/zoneinfo/Pacific/Chatham", + "usr/share/zoneinfo/Pacific/Chuuk", + "usr/share/zoneinfo/Pacific/Easter", + "usr/share/zoneinfo/Pacific/Efate", + "usr/share/zoneinfo/Pacific/Enderbury", + "usr/share/zoneinfo/Pacific/Fakaofo", + "usr/share/zoneinfo/Pacific/Fiji", + "usr/share/zoneinfo/Pacific/Funafuti", + "usr/share/zoneinfo/Pacific/Galapagos", + "usr/share/zoneinfo/Pacific/Gambier", + "usr/share/zoneinfo/Pacific/Guadalcanal", + "usr/share/zoneinfo/Pacific/Guam", + "usr/share/zoneinfo/Pacific/Honolulu", + "usr/share/zoneinfo/Pacific/Johnston", + "usr/share/zoneinfo/Pacific/Kanton", + "usr/share/zoneinfo/Pacific/Kiritimati", + "usr/share/zoneinfo/Pacific/Kosrae", + "usr/share/zoneinfo/Pacific/Kwajalein", + "usr/share/zoneinfo/Pacific/Majuro", + "usr/share/zoneinfo/Pacific/Marquesas", + "usr/share/zoneinfo/Pacific/Midway", + "usr/share/zoneinfo/Pacific/Nauru", + "usr/share/zoneinfo/Pacific/Niue", + "usr/share/zoneinfo/Pacific/Norfolk", + "usr/share/zoneinfo/Pacific/Noumea", + "usr/share/zoneinfo/Pacific/Pago_Pago", + "usr/share/zoneinfo/Pacific/Palau", + "usr/share/zoneinfo/Pacific/Pitcairn", + "usr/share/zoneinfo/Pacific/Pohnpei", + "usr/share/zoneinfo/Pacific/Ponape", + "usr/share/zoneinfo/Pacific/Port_Moresby", + "usr/share/zoneinfo/Pacific/Rarotonga", + "usr/share/zoneinfo/Pacific/Saipan", + "usr/share/zoneinfo/Pacific/Samoa", + "usr/share/zoneinfo/Pacific/Tahiti", + "usr/share/zoneinfo/Pacific/Tarawa", + "usr/share/zoneinfo/Pacific/Tongatapu", + "usr/share/zoneinfo/Pacific/Truk", + "usr/share/zoneinfo/Pacific/Wake", + "usr/share/zoneinfo/Pacific/Wallis", + "usr/share/zoneinfo/Pacific/Yap", + "usr/share/zoneinfo/US/Alaska", + "usr/share/zoneinfo/US/Aleutian", + "usr/share/zoneinfo/US/Arizona", + "usr/share/zoneinfo/US/Central", + "usr/share/zoneinfo/US/East-Indiana", + "usr/share/zoneinfo/US/Eastern", + "usr/share/zoneinfo/US/Hawaii", + "usr/share/zoneinfo/US/Indiana-Starke", + "usr/share/zoneinfo/US/Michigan", + "usr/share/zoneinfo/US/Mountain", + "usr/share/zoneinfo/US/Pacific", + "usr/share/zoneinfo/US/Samoa" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "xz-libs@5.8.3-r0", + "Name": "xz-libs", + "Identifier": { + "PURL": "pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "1ae658a5f132a091" + }, + "Version": "5.8.3-r0", + "Arch": "x86_64", + "SrcName": "xz", + "SrcVersion": "5.8.3-r0", + "Licenses": [ + "GPL-2.0-or-later", + "0BSD", + "Public-Domain", + "LGPL-2.1-or-later" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235", + "DiffID": "sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366" + }, + "Digest": "sha1:4c92c5be0c5bef404e93c880eba9037a9b147347", + "InstalledFiles": [ + "usr/lib/liblzma.so.5", + "usr/lib/liblzma.so.5.8.3" + ], + "AnalyzedBy": "apk" + }, + { + "ID": "zlib@1.3.2-r0", + "Name": "zlib", + "Identifier": { + "PURL": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e37054a2982d6c16" + }, + "Version": "1.3.2-r0", + "Arch": "x86_64", + "SrcName": "zlib", + "SrcVersion": "1.3.2-r0", + "Licenses": [ + "Zlib" + ], + "Maintainer": "Natanael Copa \u003cncopa@alpinelinux.org\u003e", + "DependsOn": [ + "musl@1.2.6-r2" + ], + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "Digest": "sha1:dd4c3d102acaef2a71a1495951d55fabc8680613", + "InstalledFiles": [ + "usr/lib/libz.so.1", + "usr/lib/libz.so.1.3.2" + ], + "AnalyzedBy": "apk" + } + ], + "Vulnerabilities": [ + { + "VulnerabilityID": "CVE-2026-85091", + "PkgID": "zlib@1.3.2-r0", + "PkgName": "zlib", + "PkgIdentifier": { + "PURL": "pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\u0026distro=3.24.1", + "UID": "e37054a2982d6c16" + }, + "InstalledVersion": "1.3.2-r0", + "FixedVersion": "1.3.2-r1", + "Status": "fixed", + "Layer": { + "Digest": "sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4", + "DiffID": "sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c" + }, + "PrimaryURL": "https://avd.aquasec.com/nvd/cve-2026-85091", + "DataSource": { + "ID": "alpine", + "Name": "Alpine Secdb", + "URL": "https://secdb.alpinelinux.org/" + }, + "Fingerprint": "sha256:d73c01b020c55acc174a3fde47c8af6f5638c58c7189c817edd6862029f6c5f5", + "Title": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vul ...", + "Description": "zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.", + "Severity": "MEDIUM", + "CweIDs": [ + "CWE-787" + ], + "VendorSeverity": { + "ubuntu": 2 + }, + "References": [ + "https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490", + "https://github.com/madler/zlib", + "https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393", + "https://www.cve.org/CVERecord?id=CVE-2026-85091", + "https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate" + ], + "PublishedDate": "2026-09-03T13:06:20.573Z", + "LastModifiedDate": "2026-09-09T20:41:07.123Z" + } + ] + }, + { + "Target": "Python", + "Class": "lang-pkgs", + "Type": "python-pkg", + "Packages": [ + { + "Name": "PyJWT", + "Identifier": { + "PURL": "pkg:pypi/pyjwt@2.15.1", + "UID": "d3f5f9a421b8abc9" + }, + "Version": "2.15.1", + "Licenses": [ + "MIT" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "cffi", + "Identifier": { + "PURL": "pkg:pypi/cffi@2.1.1", + "UID": "21042e2f37e33c05" + }, + "Version": "2.1.1", + "Licenses": [ + "MIT-0" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "cryptography", + "Identifier": { + "PURL": "pkg:pypi/cryptography@50.0.1", + "UID": "dcb3df6383fe2a60" + }, + "Version": "50.0.1", + "Licenses": [ + "Apache-2.0 OR BSD-3-Clause" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "informed-decision", + "Identifier": { + "PURL": "pkg:pypi/informed-decision@0.2.0", + "UID": "7989f2afae8ff568" + }, + "Version": "0.2.0", + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "pycparser", + "Identifier": { + "PURL": "pkg:pypi/pycparser@3.0", + "UID": "e5a4d03f15a695ff" + }, + "Version": "3.0", + "Licenses": [ + "BSD-3-Clause" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + }, + { + "Name": "waitress", + "Identifier": { + "PURL": "pkg:pypi/waitress@3.0.2", + "UID": "806e218e1c1e85f" + }, + "Version": "3.0.2", + "Licenses": [ + "ZPL-2.1" + ], + "Layer": { + "Digest": "sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87", + "DiffID": "sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c" + }, + "FilePath": "opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA", + "AnalyzedBy": "python-pkg" + } + ] + } + ] +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json new file mode 100644 index 0000000..61164d7 --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/validation.json @@ -0,0 +1,26 @@ +{ + "intake_valid_offline": true, + "typed_memo_valid": true, + "lifecycle_documents_valid": 20, + "packet_actual_file_bytes_verified": true, + "submission_digest": "sha256:905bbf8ca21686969429f82e37d41afb4e43a82e6bf578107677e0bc9a5a7bf4", + "offline_constructed_grant": "state-hub/decision-record/net-kingdom-admins", + "deployed_submitter_admission_verified": false, + "human_approval": false, + "live_submitted": false, + "native_backup_restore_executed": false, + "native_workload_changed": false, + "packet_bytes_total": 184912, + "guard_tests": 11, + "guard_drift_negative_assertions": 28, + "transport_negative_cases": 6, + "fresh_readonly_preflight_all_checks_pass": true, + "fresh_readonly_capture": "2026-10-11T01:39:14Z", + "original_capture_bytes_preserved": true, + "pre_open_old_unknown_schema_negative_cases": 6, + "optimized_interpreter_negative_cases": 2, + "native_dependencies_checked": true, + "native_pre_open_schema_checked": false, + "original36path_snapshot_preserved": true, + "refinement_same_proposal_trial": true +} diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py new file mode 100644 index 0000000..75c837a --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/docs/evidence/2026-10-11-purpose-image-release/verify_registry.py @@ -0,0 +1,125 @@ +"""Read a public policy image without executing it or retaining registry tokens.""" +import argparse +import hashlib +import io +import json +from pathlib import Path, PurePosixPath +import re +import tarfile +import urllib.error +import urllib.parse +import urllib.request + +ORIGIN = 'https://forgejo.coulomb.social' +BASE = ORIGIN + '/v2/coulomb/informed-decision/' +LIMIT = 300 * 1024 * 1024 +class NoRedirect(urllib.request.HTTPRedirectHandler): + def redirect_request(self, request, response, code, message, headers, new_url): + raise ValueError('registry redirects refused') +OPENER = urllib.request.build_opener(NoRedirect()) + + +def fetch(url, accept=None): + parsed_url = urllib.parse.urlparse(url) + if parsed_url.scheme != 'https' or parsed_url.netloc != 'forgejo.coulomb.social': + raise ValueError('unexpected registry origin') + headers = {'Accept': accept} if accept else {} + try: + response = OPENER.open(urllib.request.Request(url, headers=headers), timeout=30) + except urllib.error.HTTPError as error: + if error.code != 401: + raise + fields = dict(re.findall(r'(\w+)="([^"]*)"', error.headers.get('WWW-Authenticate', ''))) + realm = fields['realm'] + parsed = urllib.parse.urlparse(realm) + if parsed.scheme != 'https' or parsed.netloc != 'forgejo.coulomb.social': + raise ValueError('unexpected registry challenge origin') + query = urllib.parse.urlencode({k: fields[k] for k in ('service', 'scope') if k in fields}) + with OPENER.open(realm + '?' + query, timeout=30) as auth: + token = json.load(auth)['token'] + headers['Authorization'] = 'Bearer ' + token + response = OPENER.open(urllib.request.Request(url, headers=headers), timeout=60) + with response: + body = response.read(LIMIT + 1) + if len(body) > LIMIT: + raise ValueError('registry artifact exceeds local verification bound') + return body + + +def sha(data): + return hashlib.sha256(data).hexdigest() + + +def blob(descriptor): + digest = descriptor['digest'] + if not re.fullmatch(r'sha256:[a-f0-9]{64}', digest): + raise ValueError('unknown image digest') + data = fetch(BASE + 'blobs/' + digest) + if 'sha256:' + sha(data) != digest or len(data) != descriptor['size']: + raise ValueError('image blob hash or size mismatch') + return data + + +def manifest(digest): + raw = fetch(BASE + 'manifests/' + digest, 'application/vnd.oci.image.index.v1+json, application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.oci.image.manifest.v1+json, application/vnd.docker.distribution.manifest.v2+json') + if 'sha256:' + sha(raw) != digest: + raise ValueError('manifest digest mismatch') + value = json.loads(raw) + if 'manifests' in value: + selected = [d for d in value['manifests'] if d.get('platform',{}).get('os') == 'linux' and d.get('platform',{}).get('architecture') == 'amd64'] + if len(selected) != 1: + raise ValueError('one linux/amd64 platform required') + child, config, layerlist = manifest(selected[0]['digest']) + return child, config, layerlist + return value, json.loads(blob(value['config'])), value['layers'] + +def main(): + p = argparse.ArgumentParser(); p.add_argument('--digest',required=True);p.add_argument('--revision',required=True);p.add_argument('--output',type=Path,required=True);a=p.parse_args() + if not re.fullmatch(r'sha256:[a-f0-9]{64}',a.digest) or not re.fullmatch(r'[a-f0-9]{40}',a.revision): + raise ValueError('exact immutable revision and image required') + base_digest='sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173' + m,c,l=manifest(a.digest);bm,bc,bl=manifest(base_digest) + allowed_media={'application/vnd.docker.image.rootfs.diff.tar.gzip','application/vnd.oci.image.layer.v1.tar+gzip'} + if any(d['mediaType'] not in allowed_media for d in l+bl): raise ValueError('unsupported layer encoding') + if [(d['digest'],d['size']) for d in l[:-1]] != [(d['digest'],d['size']) for d in bl] or len(l) != len(bl)+1: + raise ValueError('candidate must retain all base descriptors plus exactly one layer') + for key in ('architecture','os'): + if c[key] != bc[key]: raise ValueError('platform changed') + if c['rootfs']['diff_ids'][:-1] != bc['rootfs']['diff_ids'] or len(c['rootfs']['diff_ids']) != len(bc['rootfs']['diff_ids'])+1: + raise ValueError('base rootfs changed') + defaults={'Hostname':'','Domainname':'','AttachStdin':False,'AttachStdout':False,'AttachStderr':False,'Tty':False,'OpenStdin':False,'StdinOnce':False,'Cmd':None,'Volumes':None,'OnBuild':None} + extra_defaults={} + for key,value in defaults.items(): + if key not in bc['config'] and key in c['config']: + if c['config'][key] != value: raise ValueError('legacy builder runtime default changed') + extra_defaults[key]=value + if 'Image' in c['config'] and 'Image' not in bc['config']: + if not re.fullmatch(r'sha256:[a-f0-9]{64}',c['config']['Image']):raise ValueError('unexpected legacy builder parent-image metadata') + extra_defaults['Image']=c['config']['Image'] + actual_config={k:v for k,v in c['config'].items() if k != 'Labels' and k not in extra_defaults} + base_config={k:v for k,v in bc['config'].items() if k != 'Labels'} + if actual_config != base_config: raise ValueError('runtime image config changed') + labels=c['config']['Labels']; expected={'org.opencontainers.image.revision':a.revision,'org.opencontainers.image.base.digest':base_digest,'social.coulomb.source.policy.sha256':'9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62','social.coulomb.release.scope':'INFD-WP-0009-T04/purpose-overlay-v1'} + for k,v in expected.items(): + if labels.get(k)!=v:raise ValueError('exact source/scope label mismatch') + if {k:v for k,v in labels.items() if k not in expected} != {k:v for k,v in bc['config'].get('Labels',{}).items() if k not in expected}: + raise ValueError('unrelated labels changed') + files=[]; dirs=[];content=None + with tarfile.open(fileobj=io.BytesIO(blob(l[-1])),mode='r:*') as archive: + for item in archive: + path=PurePosixPath(item.name.removeprefix('./')) + if path.is_absolute() or '..' in path.parts or any(p.startswith('.wh.') for p in path.parts):raise ValueError('unsafe overlay entry') + if item.isdir(): + allowed_dirs={'opt','opt/venv','opt/venv/lib','opt/venv/lib/python3.12','opt/venv/lib/python3.12/site-packages','opt/venv/lib/python3.12/site-packages/informed_decision'} + if str(path) not in allowed_dirs: raise ValueError('unexpected overlay directory') + dirs.append(str(path));continue + if not item.isfile():raise ValueError('unexpected overlay link or device') + files.append(str(path)) + if str(path)!='opt/venv/lib/python3.12/site-packages/informed_decision/policy.py' or item.mode!=0o644 or item.uid!=0 or item.gid!=0 or item.size>100000:raise ValueError('unexpected overlay file metadata') + content=archive.extractfile(item).read() + if len(files)!=1 or sha(content)!=expected['social.coulomb.source.policy.sha256']:raise ValueError('single installed source file not exact') + a.output.mkdir(parents=True,exist_ok=True) + (a.output/'image-manifest.json').write_text(json.dumps(m,indent=2)+'\n');(a.output/'image-config.json').write_text(json.dumps(c,indent=2)+'\n');(a.output/'base-image-config.json').write_text(json.dumps(bc,indent=2)+'\n') + receipt={'image_digest':a.digest,'source_revision':a.revision,'base_image_digest':base_digest,'base_layer_bytes_identical':True,'layer_media_type_conversion':'OCI gzip to Docker gzip, same digest and size','base_runtime_config_semantics_identical':True,'legacy_builder_config_additions':extra_defaults,'base_rootfs_prefix_identical':True,'overlay_regular_files':files,'overlay_directories':dirs,'policy_sha256':sha(content),'policy_mode':'0644','base_user':bc['config'].get('User'),'source_scope_labels':expected,'registry_read_route':'anonymous public scoped bearer challenge, no token retention','image_executed':False,'native_workload_changed':False,'native_backup_restore_executed':False} + (a.output/'registry-proof.json').write_text(json.dumps(receipt,indent=2)+'\n');print(json.dumps(receipt,sort_keys=True)) +if __name__=='__main__': main() diff --git a/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.source.txt b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.source.txt new file mode 100644 index 0000000..780e0df --- /dev/null +++ b/docs/evidence/2026-10-11-purpose-image-release/initial-b1e3e66b/owner-snapshot/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.source.txt @@ -0,0 +1,156 @@ +--- +id: INFD-WP-0009 +type: workplan +title: "Repair lifecycle consumer pin after Access Engine v2 policy release" +domain: infotech +repo: informed-decision +status: active +owner: codex +topic_slug: netkingdom +created: "2026-10-10" +updated: "2026-10-11" +flavor: implementation +depends_on: [] +related: + - FLEX-WP-0035 + - INFD-WP-0007 +state_hub_workstream_id: "77eaeabf-0644-595f-b3d5-1168e6a294c4" +--- + +## Diagnose and prepare exact config repair + +```task +id: INFD-WP-0009-T01 +status: done +priority: high +state_hub_task_id: "5c30c308-8fe2-5956-b0c1-66c80bcb07e9" +``` + +Native State Hub lifecycle submission returns HTTP 503 `invalid_decision`. +The service remains Ready but its configured lifecycle package is v1/cee6a79; +Access Engine lifecycle provider now runs v2/da01e045 after FLEX-WP-0035. +The envelope contract remains `flex-auth.decision-record.v1`; this is a policy +pin mismatch, not an envelope compatibility migration. Keep exact package, +version and digest enforcement. Source preparation and regression evidence are +in `docs/evidence/2026-10-10-lifecycle-consumer-pin-repair.md`. + +## Release and verify the config-only repair + +```task +id: INFD-WP-0009-T02 +status: done +priority: high +needs_human: false +state_hub_task_id: "1e6684d7-7676-5c70-b701-9dad124b4f07" +``` + +Apply only the reviewed immutable runtime ConfigMap and Deployment reference +through the existing owner GitOps path after exact scoped supervisor approval. +Image, schema, credentials, audience and review policy remain pinned. Retain +server dry-run/diff, readiness and native State Hub register/publish receipts; +retry with stable write keys, do not infer success from readiness. Root agent +owns live evidence and approval recording. This is a repair of the shipped +initial lifecycle, separate from INFD-WP-0008 expansion. + +**Verified 2026-10-11:** founder approved exact config-only revision +`7db8485ffecdebfabd77a9daec085553c74bf0bf`. Manual Argo Application operation +synced only `informed-decision-runtime-6c221878d051` and Deployment, prune false. +Application Succeeded/Healthy; generation24 observed24 Ready1; `/readyz`200; +consumer v2/da01e045 and unchanged image7f5c6cb verified. Native lifecycle +registration and publication succeeded (events28/29). A later review request +rejected packet validation; this separate caller error does not undo verified +authoring. Custodian evidence records original approval, execution and rollback: +`docs/evidence/2026-10-10-security-consolidation/infd-pin-repair-preflight.json`. + +## Explicitly reject advisory purpose at consumer boundary + +```task +id: INFD-WP-0009-T03 +status: done +priority: medium +state_hub_task_id: "ee798d7d-5e60-5247-9c9b-285a7f65cf11" +``` + +PolicyClient now validates binding purpose: absent or exact empty string only; +readback and malformed purposes are refused. Nine purpose variants and a real +provider response contamination test preserve the binding, pin, expiry and +obligations gates. This task covers source implementation and regression tests. +The current runtime image lacks this patch. Service build/native release belongs +to T04, separate from the config-only T02 repair. + + +## Release the advisory-purpose source correction + +```task +id: INFD-WP-0009-T04 +status: progress +priority: medium +state_hub_task_id: "0e1bb868-7bc2-5d4d-953c-e0edaf660ad0" +``` + +Build and scan a new service image including T03, retain provenance and backup +compatibility evidence, prepare a separate scoped image proposal, and verify +native binding/refusal after the owner's approved release. Do not fold an image +change into the config-only T02 proposal. Current runtime 7f5c6cb remains exact. + +**Historical local preparation 2026-10-11:** narrow single-module image overlay on immutable running +7f5c6cb; exact source policy SHA-256 9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62. +Local image/index b8b58944786015a5375304241c149d1dab885eb539d6d8945f56b01a3c2bc821 +is built and retained, unpublished and undeployed. Base layer prefix and runtime +configuration are preserved; installed-image 10 purpose variants pass; 13 +container checks include restart and synthetic consistent backup/restore. A +fresh Trivy database scan has zero HIGH/CRITICAL findings, with its Alpine EOL +warning retained. See `docs/evidence/2026-10-11-purpose-hardening/README.md`. +Remaining gates: source-bound registry publication and exact digest verification, +fresh native snapshot/restore compatibility, owner GitOps server dry-run/diff, +separate scoped supervisor approval and native post-release binding/refusal. +No release approval or actual production-data restore is inferred from fixtures. + +**Publication and release preparation 2026-10-11:** actual owner CI +task11484/run3 succeeds at source3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168, +publishing immutable image763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a. +The failed run1/f66 and run2/ace are retained as refinements in the same trial. +Anonymous registry readback proves all8base compressed blobs/rootfs unchanged +plus only policy.py; legacy media-type/default-config serialization differences +are explicit. Pulled published artifact UID10001/GID10001, installed mode0644 +and exactpolicy hash, all10purpose forms pass. Full pinned scanner/DB covers +44packages: 0HIGH/CRITICAL, 1fixableMEDIUM CVE-2026-85091 in zlib1.3.2-r0, +identical actual current-base scan. This is not a zero-CVE release or estate +risk grade. T05 and INFD-RISK-20261011-ZLIB-85091 are live owner follow-through. + +The exact separate20document informed-decision packet is prepared and +offline typed/intake validated, with no submission or founder disposition +claimed. Source candidates differ solely in Deploymentimage and retain +ConfigMap6c221878d051/schema5/PVC/identity/policy pins. Fresh read-only +serverdryrun/clientdiff pass with sealedUID/fullconfiguration and actualCM/PVC +UID/contentchecksum/boundvolume custody; optimizedinterpreters refused. +Independent review refinement requires stdlib mode=ro schema5/integrity/count +checks before any native/offline admin/Store open (native gate notexecuted); existingmanual +Argo remains Healthy/OutOfSync at7db8485, not whole-app reconciled. +Remaining gates: independent owner review, actual founder native approval, +fresh protected native consistent snapshot/off-cluster custody/offline restore, +refresh preflight, exact owner-source pin/Deployment-only manual sync and +verified native installed purpose/refusal/lifecycle behavior. Synthetic native +placement checks are not new provider authorization evidence. Runtime remains7f5c. + +Evidence: `docs/evidence/2026-10-11-purpose-image-release/`. + +## Resolve inherited published-image zlib finding + +```task +id: INFD-WP-0009-T05 +status: todo +priority: medium +``` + +Owner follow-through `INFD-RISK-20261011-ZLIB-85091` tracks actual published +base and purpose-overlay scan finding CVE-2026-85091: zlib 1.3.2-r0, fixed +1.3.2-r1, scanner MEDIUM; this is not an estate risk grade. Prepare and verify a +separate source-bound base/dependency refresh, then obtain distinct native +release approval before changing the workload. Review due 2026-10-18; the date +is a manual owner follow-up, with no automatic expiry/rollback controller. +T04 cannot be treated as a zero-CVE release or silently include the base fix. +Preserve the original detection, pending founder disposition and remediation +evidence. Close only after actual installed-package proof and full rescan. + +Evidence: `docs/evidence/2026-10-11-purpose-image-release/inherited-vulnerability-follow-through.json`. diff --git a/docs/evidence/2026-10-11-purpose-image-release/intake.json b/docs/evidence/2026-10-11-purpose-image-release/intake.json index 80d54ba..243335c 100644 --- a/docs/evidence/2026-10-11-purpose-image-release/intake.json +++ b/docs/evidence/2026-10-11-purpose-image-release/intake.json @@ -21,7 +21,7 @@ "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", "requested_act": "approve", "binding_level": "organizational", - "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Before ANY admin/Store, readonly schema5/integrity/count gate; protected backup/restore, sealedDeployment+actualCM/PVC identities and unoptimizedpreflight required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "brief": "Actual CI763c purpose-only image; eight base layers unchanged, legacy serialization disclosed. Scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib/T05 dueOct18. Exact helper binds four Git blobs, protected real-data backup/offline drill (isolated new-volume UID0/CAP_CHOWN init, then UID10001 readonly/admin/postcheck), Deployment-only manualArgo/prune=false, currentDB retention. Rollback needs no Ready candidate; separate recovery verification. ALL phases incl recovery must begin byOct12, fresh founder decision beyond. Ten installed checks are synthetic/native_provider=false. No native backup/image action yet.", "binding": { "principal": { "id": "pending-human-session", @@ -34,19 +34,19 @@ "label": "Informed Decision image-only purpose hardening on railiance01", "environment": "production" }, - "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedCM/PVC/Deploymentpreflight+pre-openreadonlyschema5+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/offcluster custody/isolated offline restore with explicit NEW-volume UID0 CAP_CHOWN-only initializer followed by UID10001 readonly schema5/admin/postproof; exact four committed source blobs and helper-bound manual Deployment-only image763c/prune=false. Fresh root-authenticated confirmed founder disposition before each phase; supervised receipt is not signed/autonomous grant. ALL phases including rollback/rollback-verify must begin before2026-10-12T23:59:59Z, new founder decision beyond; no expiry controller. Rollbackprior7f5 retains latestschema5DB and does not need Ready candidate; separate old-image/schema recovery proof. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 reviewdueOct18. Syntheticinstallednative_provider=false is not actualPDP authority proof; actualproviderT04gate distinct. No credential/policy/grant change, humanbinding or wholeAppsync." }, "step_kind": "approve", "packet": [ { "item_id": "decision-packet-md", "label": "decision-packet.md", - "hash": "sha256:23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1" + "hash": "sha256:a542235221890fa9ffb9c78f65d5e93227f5215d3ac68f0d1fa4addfd17bdaf6" }, { "item_id": "proposal-json", "label": "proposal.json", - "hash": "sha256:a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82" + "hash": "sha256:7cca98a6c159201823a42fe05218d32e46152031b3f8a2ee26795454df0016df" }, { "item_id": "candidate-admission-json", @@ -84,9 +84,9 @@ "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" }, { - "item_id": "trivy-full-json", - "label": "trivy-full.json", - "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + "item_id": "execution-bundle-json", + "label": "execution-bundle.json", + "hash": "sha256:27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d" }, { "item_id": "sqlite-readonly-py", @@ -101,7 +101,7 @@ { "item_id": "native-backup-restore-protocol-md", "label": "native-backup-restore-protocol.md", - "hash": "sha256:2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc" + "hash": "sha256:440932f5975f42f8bc3ef5c7b281f42cf843246ffc8faba64a1d80b43ffa7478" }, { "item_id": "inherited-vulnerability-follow-through-json", @@ -160,12 +160,12 @@ { "item_id": "decision-packet-md", "media_type": "text/markdown", - "content": "# Informed Decision purpose overlay release\n\n## Requested decision\n\nApprove the exact purpose-only image rollout and protected real-data backup/restore protocol for the existing Informed Decision service on railiance01. This request is separate from the already approved config-only repair. Only the existing Deployment image changes through the owner's manual Argo workflow, with prune disabled. Runtime ConfigMap `informed-decision-runtime-6c221878d051`, schema5, PVC, credentials, audience, policies, registries, access, replica1 and Recreate strategy remain fixed. Execute by 2026-10-12T23:59:59Z, after refreshed sealed-source/UID/configuration checks and backup/restore gates. Expiry stops authorization for an unstarted release; it does not install a controller or automatically roll back an already released image.\n\n## Artifact and known finding\n\nActual owner CI task11484/run3 published immutable image `sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a` from source `3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168`. Anonymous registry verification preserves all eight base compressed blobs/rootfs layers and adds only policy.py with exact source hash and mode0644. Legacy-builder media-type/default config serialization differences are recorded; the runtime semantics remain unchanged. Pulled published image executes as UID10001/GID10001 and passes ten installed checks: two supported binding forms, eight advisory/malformed refusals. Tests use synthetic transport and do not claim new native PDP authorization proof. The two failed CI attempts remain in the same trial history.\n\nActual unfiltered pinned scanner/DB evidence covers44packages: zero HIGH/CRITICAL, **one fixable MEDIUM**, CVE-2026-85091, zlib1.3.2-r0 fixed in1.3.2-r1. Actual current-base scan has the identical finding. Approving this packet explicitly permits this inherited finding during this narrow purpose release; it is not a RiskNexus estate risk grade or zero-CVE claim. Owner record INFD-RISK-20261011-ZLIB-85091 and live task INFD-WP-0009-T05 require separate base refresh and native approval, reviewed by2026-10-18. That review date is manual follow-through, with no auto-controller claim. Scanner notes Alpine3.24 absent EOL list; OS vulnerability detection ran against38OSpackages. Unknown vulnerabilities remain outside snapshot knowledge.\n\n## Native baseline and gates\n\nOriginal read-only capture01:25:38Z: existing Deployment UIDa588e10a, Ready1, image7f5c, unchanged runtime6c; native admission preserves the full configuration plus exactly the proposed image. Clientdiff returns1. Requests3460/4000mCPU86%, memory9472Mi59%; refresh before release. Existing Argo Application UID499868f2 is manual, target7db8485, Healthy with pre-existing OutOfSync status. Do not treat a scoped Deployment release as full-app reconciliation. Preserve its tracking-id; no unrelated resource sync/prune/adoption.\n\nThe refined read-only helper binds original source/helper/render/baseline hashes and actual immutable ConfigMap/PVC UIDs, runtime-data checksum and bound volume identity, explicitly refuses optimized interpreters, checks exact fresh live UID/configuration and admission, and writes a separate execution receipt outside this sealed packet. Failed initial raw Kustomize metadata check is retained: direct kubectl apply would drop Argo tracking-id. The reviewed selected Deployment explicitly retains that existing ID, matching Argo ownership. Any unrelated drift, different UID, altered admission, unavailable protected backup capacity, uncertain backup, restore mismatch or unhealthy baseline stops the release.\n\n## Protected backup and release\n\nBefore **any** native source or offline-restored Store/admin open, use the attached stdlib SQLite mode=ro/query_only checker to require schema5, integrity=ok and count-only baseline. The admin automatically migrates oldschemas, so a post-open report alone cannot prove no migration. Refuse other schemas before admin. Then use the existing owner admin's SQLite backup API, not a raw copy of the live database/WAL. Protect directories0700/files0600, owned by10001. Retain independently protected off-cluster snapshot custody and only count/hash receipts. No database contents, caller tokens, requester Secret or runtime credential files enter Git, State Hub, logs or this packet. Native backup and offline real-data restore have not yet occurred. Use an isolated private disposable copy, networknone and no runtime config/token mounts, run the pre-open checker and exact offline `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite` after it passes, comparing frozen snapshot counts without service startup, then clean only the disposable restored copy. Retain the original snapshot. The attached protocol binds case-specific paths and fail-closed capacity/custody checks.\n\nRefresh a consistent online snapshot immediately before image-only cutover. This protocol does not assert traffic/dispatcher quiescence. Current and candidate share schema5 and unchanged store code; rollback retains the latest live database and all new/uncertain evidence. Stop the old writer before the new one with existing Recreate and single-writer lock. Do not restore an older snapshot over later writes, discard unresolved external effects, scale other workloads, change policies/identity/custody, or create human dispositions to make checks green.\n\nPin the existing Application to the exact owner commit containing the approved candidate source hashes, and manually sync only Deployment/informed-decision with prune=false. Verify actualimage/module/mode/UID, health/readiness and installed purpose refusals on the real placement; explicitly distinguish synthetic-transport checks from actual provider evidence. Existing native binding/lifecycle behavior must remain available. If unhealthy or verification fails, return Application source to7db8485 and scoped-sync prior same-schema image7f5c, preserving current evidence database; retain failed outcomes. Any data recovery beyond this same-schema image rollback is a separate founder decision.\n\n## Alternatives and estimates\n\nProceed with this narrow release plus explicit inherited-medium follow-through, or defer and prepare a separate base/dependency refresh before any release. No additional recurring hosting is proposed: estimated incremental infrastructure EUR0, with private storage and attended engineering/recovery time unpriced. Risks include a brief Recreate interruption, private backup custody errors, caller refusal when advisory responses were improperly treated as binding, and the disclosed inherited finding. This decision does not promote agent autonomy or grant unrelated work.\n\n## Independent review refinements\n\nThe initial36path/20document packet at manifest7c6738b3 and submissionac41c8ae is preserved in source preparation evidence, with the failed/conditional review. Independent Platform review identified admin auto-migration, optimization bypass, and actual same-name ConfigMap/PVC replacement gaps. The amended packet adds pre-open stdlib read-only schema/integrity/count gates, explicit local/remote optimization refusal, and independently sealed actual native config/PVC custody checks. These are refinements in the same proposal/trial, with no original or amended founder approval claimed.\n" + "content": "# Informed Decision purpose overlay release\n\n## Requested decision\n\nApprove the exact purpose-only image rollout and protected real-data backup/restore protocol for the existing Informed Decision service on railiance01. This request is separate from the already approved config-only repair. Only the existing Deployment image changes through the owner's manual Argo workflow, with prune disabled. Runtime ConfigMap `informed-decision-runtime-6c221878d051`, schema5, PVC, credentials, audience, policies, registries, access, replica1 and Recreate strategy remain fixed. Execute by 2026-10-12T23:59:59Z, after refreshed sealed-source/UID/configuration checks and backup/restore gates. All phases, including recovery and verification, must begin before this deadline. If the window is exhausted, stop and obtain a fresh founder decision; this may delay recovery. No timer/controller automatically changes the released image.\n\n## Artifact and known finding\n\nActual owner CI task11484/run3 published immutable image `sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a` from source `3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168`. Anonymous registry verification preserves all eight base compressed blobs/rootfs layers and adds only policy.py with exact source hash and mode0644. Legacy-builder media-type/default config serialization differences are recorded; the runtime semantics remain unchanged. Pulled published image executes as UID10001/GID10001 and passes ten installed checks: two supported binding forms, eight advisory/malformed refusals. Tests use synthetic transport and do not claim new native PDP authorization proof. The two failed CI attempts remain in the same trial history.\n\nActual unfiltered pinned scanner/DB evidence covers44packages: zero HIGH/CRITICAL, **one fixable MEDIUM**, CVE-2026-85091, zlib1.3.2-r0 fixed in1.3.2-r1. Actual current-base scan has the identical finding. Approving this packet explicitly permits this inherited finding during this narrow purpose release; it is not a RiskNexus estate risk grade or zero-CVE claim. Owner record INFD-RISK-20261011-ZLIB-85091 and live task INFD-WP-0009-T05 require separate base refresh and native approval, reviewed by2026-10-18. That review date is manual follow-through, with no auto-controller claim. Scanner notes Alpine3.24 absent EOL list; OS vulnerability detection ran against38OSpackages. Unknown vulnerabilities remain outside snapshot knowledge.\n\n## Native baseline and gates\n\nOriginal read-only capture01:25:38Z: existing Deployment UIDa588e10a, Ready1, image7f5c, unchanged runtime6c; native admission preserves the full configuration plus exactly the proposed image. Clientdiff returns1. Requests3460/4000mCPU86%, memory9472Mi59%; refresh before release. Existing Argo Application UID499868f2 is manual, target7db8485, Healthy with pre-existing OutOfSync status. Do not treat a scoped Deployment release as full-app reconciliation. Preserve its tracking-id; no unrelated resource sync/prune/adoption.\n\nThe refined read-only helper binds original source/helper/render/baseline hashes and actual immutable ConfigMap/PVC UIDs, runtime-data checksum and bound volume identity, explicitly refuses optimized interpreters, checks exact fresh live UID/configuration and admission, and writes a separate execution receipt outside this sealed packet. Failed initial raw Kustomize metadata check is retained: direct kubectl apply would drop Argo tracking-id. The reviewed selected Deployment explicitly retains that existing ID, matching Argo ownership. Any unrelated drift, different UID, altered admission, unavailable protected backup capacity, uncertain backup, restore mismatch or unhealthy baseline stops the release.\n\n## Protected backup and release\n\nBefore **any** native source or offline-restored Store/admin open, use the attached stdlib SQLite mode=ro/query_only checker to require schema5, integrity=ok and count-only baseline. The admin automatically migrates oldschemas, so a post-open report alone cannot prove no migration. Refuse other schemas before admin. Then use the existing owner admin's SQLite backup API, not a raw copy of the live database/WAL. Protect directories0700/files0600, owned by10001. Retain independently protected off-cluster snapshot custody and only count/hash receipts. No database contents, caller tokens, requester Secret or runtime credential files enter Git, State Hub, logs or this packet. Native backup and offline real-data restore have not yet occurred. Use an isolated private disposable copy, networknone and no runtime config/token mounts, run the pre-open checker and exact offline `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite` after it passes, comparing frozen snapshot counts without service startup, then clean only the disposable restored copy. Retain the original snapshot. The attached protocol binds case-specific paths and fail-closed capacity/custody checks.\n\nRefresh a consistent online snapshot immediately before image-only cutover. This protocol does not assert traffic/dispatcher quiescence. Current and candidate share schema5 and unchanged store code; rollback retains the latest live database and all new/uncertain evidence. Stop the old writer before the new one with existing Recreate and single-writer lock. Do not restore an older snapshot over later writes, discard unresolved external effects, scale other workloads, change policies/identity/custody, or create human dispositions to make checks green.\n\nPin the existing Application to the exact owner commit containing the approved candidate source hashes, and manually sync only Deployment/informed-decision with prune=false. Verify actualimage/module/mode/UID, health/readiness and installed purpose refusals on the real placement; explicitly distinguish synthetic-transport checks from actual provider evidence. Existing native binding/lifecycle behavior must remain available. If unhealthy or verification fails, return Application source to7db8485 and scoped-sync prior same-schema image7f5c, preserving current evidence database; retain failed outcomes. Any data recovery beyond this same-schema image rollback is a separate founder decision.\n\n## Alternatives and estimates\n\nProceed with this narrow release plus explicit inherited-medium follow-through, or defer and prepare a separate base/dependency refresh before any release. No additional recurring hosting is proposed: estimated incremental infrastructure EUR0, with private storage and attended engineering/recovery time unpriced. Risks include a brief Recreate interruption, private backup custody errors, caller refusal when advisory responses were improperly treated as binding, and the disclosed inherited finding. This decision does not promote agent autonomy or grant unrelated work.\n\n## Independent review refinements\n\nThe initial36path/20document packet at manifest7c6738b3 and submissionac41c8ae is preserved in source preparation evidence, with the failed/conditional review. Independent Platform review identified admin auto-migration, optimization bypass, and actual same-name ConfigMap/PVC replacement gaps. The amended packet adds pre-open stdlib read-only schema/integrity/count gates, explicit local/remote optimization refusal, and independently sealed actual native config/PVC custody checks. These are refinements in the same proposal/trial, with no original or amended founder approval claimed.\n\n## Mechanically bound helper and recovery refinement\n\nThe directly attached execution-bundle.json binds exact supervised helper sources, plan, tests and PENDING authority template. It verifies all four committed owner Kustomize inputs and rejects present automated:{} as well as source overrides. Root must freshly authenticate the exact founder native disposition before every phase; receipt bookkeeping is not an autonomous signed grant. The same proposal/trial preserves the earlier36path7c packet, amended78pathb1 packet and original11file653 helper plus conditional review findings.\n\nThe offline copy uses one UID0/CAP_CHOWN-only initializer confined to the NEW nonce-bound local volume, exact candidate image, networknone/readonlyroot/no-newprivileges/CPU1/128Mi, no host/livePVC/config/token mounts. All following pre-open/admin/post-open checks are UID10001. Post-admin readonly schema5/integrity/counts must match the frozen snapshot and original snapshot SHA must remain unchanged. Rollback dispatch never requires the failing candidate to be Ready or opens its database; seals/source/image pair/admission CAS still gate it. A separate rollback-verify proves recovered old-image Ready1/scoped operation/schema5 retained-current-DB integrity. Same-phase retries are refused after ambiguous outcomes.\n\nRaw scan/SBOM/base-scan bytes remain retained unchanged, hash-bound by the directly attached published-verification receipt; the bundle replaces only the direct raw scan attachment to stay within twenty documents. Known fixable inherited MEDIUM and T05 follow-through remain visible. Ten installed synthetic checks, including those later on actual placement, explicitly have native_provider=false. Actual provider/PDP authority evidence is a distinct T04 completion gate and is not supplied by these checks. Source preparation basis e0359bcb6cdfad9ab3e868054121fe0cebec2d68 plus9268c9ac0bbee508fe35c0b90dcefef4c24da2f5 is recorded; the final applied owner commit must be pinned before execution.\n" }, { "item_id": "proposal-json", "media_type": "application/json", - "content": "{\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"trial_id\": \"infd-purpose-20261011-r1\",\n \"state\": \"prepared-unapproved\",\n \"target\": \"realm:kubernetes/railiance01/informed-decision\",\n \"authority\": \"ADMINISTER; activation APPROVED only upon exact founder disposition\",\n \"candidate_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"published_source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"prior_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"prior_argo_revision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"native_object\": {\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"namespace\": \"informed-decision\",\n \"name\": \"informed-decision\",\n \"uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\"\n },\n \"argo_application_uid\": \"499868f2-eabc-4df4-ae31-b89ce58d750d\",\n \"source_gate\": \"Exact committed owner source must contain the two approved candidate file hashes in preflight-inputs.json; source preparation is not native approval\",\n \"sync_scope\": [\n \"apps:Deployment:informed-decision\"\n ],\n \"prune\": false,\n \"automated_sync\": false,\n \"runtime_configmap\": \"informed-decision-runtime-6c221878d051\",\n \"schema\": 5,\n \"requested_operations\": [\n \"Protected SQLite-consistent native backup and independently protected off-cluster custody\",\n \"Offline restore/integrity/count comparison on a private disposable volume with exact candidate, no runtime tokens/config/network\",\n \"Refresh a consistent pre-cutover snapshot, retain private copies and count-only/hash receipts\",\n \"Pin existing manual Argo Application to exact approved owner source and manually sync only existing Deployment image\",\n \"Verify health/readiness/image/module/installed fail-closed purpose checks and retained schema/count evidence; recover to prior same-schema image if needed\"\n ],\n \"execute_by\": \"2026-10-12T23:59:59Z\",\n \"temporary_vulnerability_review_due\": \"2026-10-18\",\n \"known_scan_findings\": \"0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, actual currentbase+candidate findings identical\",\n \"vulnerability_record\": \"INFD-RISK-20261011-ZLIB-85091 / INFD-WP-0009-T05\",\n \"cost_estimate_EUR\": 0,\n \"cost_limits\": \"No new recurring infrastructure; private backup storage and attended engineering/recovery time unpriced, not an autopilot cost grant\",\n \"risk_estimates\": [\n \"Brief Recreate service interruption; no concurrent new writer/surge\",\n \"Private evidence snapshot custody and disposal errors; no snapshots/tokens in public evidence\",\n \"Candidate purpose refusal may expose callers relying on advisory results as binding\",\n \"Inherited known fixable MEDIUM remains until separately approved owner remediation\",\n \"Existing Argo OutOfSync baseline is retained; no whole-app sync or unrelated repairs permitted\"\n ],\n \"rollback\": \"Manual Argo source pin back to7db8485 and scoped Deployment-only sync to7f5c image; retain current schema5 database and all post-cutover evidence, never restore older snapshot over live writes\",\n \"native_executed\": false,\n \"human_approval\": false,\n \"refinement_of_manifest\": \"7c6738b39ea8e54e61c8ed625e94ad0b2755e672e1576efcdf84a1d665ac3300\",\n \"mandatory_pre_open_gate\": \"stdlibSQLite mode=ro/query_only: schema5+integrity+count baseline before ANY Store/admin on native source or restoredcopy; refuseoldschemas without migration\",\n \"optimized_interpreters\": \"local+remote explicitlyrefused beforeassert gates\",\n \"native_dependency_gate\": \"sealed actualCM UID/immutable/canonicaldatahash+PVC UID/fullspec/Bound/volumeName, no rawCMdata orSecret reads\",\n \"live_counts\": \"Frozen snapshot/clone exactcounter equality; postcutover/rollback livecounterchanges may reflect legitimate concurrentcommits/state transitions, latestDB alwaysretained\"\n}\n" + "content": "{\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"trial_id\": \"infd-purpose-20261011-r1\",\n \"state\": \"prepared-unapproved\",\n \"target\": \"realm:kubernetes/railiance01/informed-decision\",\n \"authority\": \"ADMINISTER; activation APPROVED only upon exact founder disposition\",\n \"candidate_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"published_source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"prior_image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"prior_argo_revision\": \"7db8485ffecdebfabd77a9daec085553c74bf0bf\",\n \"native_object\": {\n \"apiVersion\": \"apps/v1\",\n \"kind\": \"Deployment\",\n \"namespace\": \"informed-decision\",\n \"name\": \"informed-decision\",\n \"uid\": \"a588e10a-90d2-4883-975e-6dd8b8feca92\"\n },\n \"argo_application_uid\": \"499868f2-eabc-4df4-ae31-b89ce58d750d\",\n \"source_gate\": \"All four exact committed owner Kustomize input blobs in execution-plan.json and clean current owner HEAD must match; source preparation is not native approval\",\n \"sync_scope\": [\n \"apps:Deployment:informed-decision\"\n ],\n \"prune\": false,\n \"automated_sync\": false,\n \"runtime_configmap\": \"informed-decision-runtime-6c221878d051\",\n \"schema\": 5,\n \"requested_operations\": [\n \"Protected SQLite-consistent native backup and independently protected off-cluster custody\",\n \"Offline restore/integrity/count comparison on a private disposable volume with exact candidate, no runtime tokens/config/network\",\n \"Refresh a consistent pre-cutover snapshot, retain private copies and count-only/hash receipts\",\n \"Pin existing manual Argo Application to exact approved owner source and manually sync only existing Deployment image\",\n \"Verify health/readiness/image/module/installed fail-closed purpose checks and retained schema/count evidence; recover to prior same-schema image if needed\"\n ],\n \"execute_by\": \"2026-10-12T23:59:59Z\",\n \"temporary_vulnerability_review_due\": \"2026-10-18\",\n \"known_scan_findings\": \"0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, actual currentbase+candidate findings identical\",\n \"vulnerability_record\": \"INFD-RISK-20261011-ZLIB-85091 / INFD-WP-0009-T05\",\n \"cost_estimate_EUR\": 0,\n \"cost_limits\": \"No new recurring infrastructure; private backup storage and attended engineering/recovery time unpriced, not an autopilot cost grant\",\n \"risk_estimates\": [\n \"Brief Recreate service interruption; no concurrent new writer/surge\",\n \"Private evidence snapshot custody and disposal errors; no snapshots/tokens in public evidence\",\n \"Candidate purpose refusal may expose callers relying on advisory results as binding\",\n \"Inherited known fixable MEDIUM remains until separately approved owner remediation\",\n \"Existing Argo OutOfSync baseline is retained; no whole-app sync or unrelated repairs permitted\",\n \"All phases, including recovery/verification, must begin before Oct12 deadline; if recovery window is exhausted stop and obtain a fresh founder decision. No automatic expiry controller.\"\n ],\n \"rollback\": \"Manual Argo source pin back to7db8485 and scoped Deployment-only sync to7f5c image; retain current schema5 database and all post-cutover evidence, never restore older snapshot over live writes\",\n \"native_executed\": false,\n \"human_approval\": false,\n \"refinement_of_manifest\": \"7c6738b39ea8e54e61c8ed625e94ad0b2755e672e1576efcdf84a1d665ac3300\",\n \"mandatory_pre_open_gate\": \"stdlibSQLite mode=ro/query_only: schema5+integrity+count baseline before ANY Store/admin on native source or restoredcopy; refuseoldschemas without migration\",\n \"optimized_interpreters\": \"local+remote explicitlyrefused beforeassert gates\",\n \"native_dependency_gate\": \"sealed actualCM UID/immutable/canonicaldatahash+PVC UID/fullspec/Bound/volumeName, no rawCMdata orSecret reads\",\n \"live_counts\": \"Frozen snapshot/clone exactcounter equality; postcutover/rollback livecounterchanges may reflect legitimate concurrentcommits/state transitions, latestDB alwaysretained\",\n \"source_basis\": {\n \"reviewed_protocol_commit\": \"e0359bcb6cdfad9ab3e868054121fe0cebec2d68\",\n \"owner_followthrough_commit\": \"9268c9ac0bbee508fe35c0b90dcefef4c24da2f5\",\n \"final_execution_source\": \"exact subsequent root-applied source commit must be bound by founder receipt and verified against four approved Git blobs\"\n },\n \"approved_owner_render_blob_sha256\": {\n \"deploy/lifecycle/admission.candidate.json\": \"92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55\",\n \"deploy/lifecycle/service.candidate.json\": \"38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4\",\n \"deploy/lifecycle/kustomization.yaml\": \"1bbce81bc6758434354157f8601534320c5d0290587908fd15a6d25e3fa57f47\",\n \"deploy/lifecycle/registries.candidate.json\": \"9bad6db5fbc2178d31b04120016a41830c3552fbb9e2517b718f9bbe87cf649e\"\n },\n \"execution_bundle_sha256\": \"27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d\",\n \"execution_helper_manifest_sha256\": \"f2fad6c251fbb4420e07c1329802f521b513bbf66e51f64c5d673ef04f16284c\",\n \"execution_plan_sha256\": \"f5e5fa906ff19d3a45d10dcdb2810373ae21f9cf44c0472ff2bd47d3bc3328d6\",\n \"execution_phases\": [\n \"drill-backup\",\n \"drill-copy\",\n \"offline-verify\",\n \"cleanup-offline\",\n \"cutover-backup\",\n \"cutover-copy\",\n \"release\",\n \"verify\",\n \"rollback\",\n \"rollback-verify\"\n ],\n \"deadline_semantics\": \"All phases including verification/recovery must begin before execute_by. No extension or automatic emergency grant; beyond deadline stop and obtain a fresh founder decision. Complete the bounded drill and rollout early enough to allow recovery within the window.\",\n \"offline_initializer\": \"One isolated local UID0:0/CAP_CHOWN-only initializer of the newly created nonce-bound disposable volume, exact candidate image, networknone/readonlyroot/no-newprivileges/CPU1/128Mi; no host/livePVC/token/config mount. Subsequent pre-open/admin/post-open checks UID10001:10001.\",\n \"rollback_dispatch\": \"Sealed Deployment/CM/PVC and same-schema source/image pair plus admission CAS; no Ready candidate or Pod/database exec prerequisite. rollback-verify separately proves recovered old image/Ready1/scoped operation and readonly current schema5/integrity/counts.\",\n \"purpose_proof_limit\": \"Ten installed synthetic-transport checks on actual placement; native_provider=false. Not actual provider/PDP authority proof, which remains a distinct T04 completion gate.\",\n \"refinement_of_amended_manifest\": \"b1e3e66bc4023dc80c6ea59564c3557c7653fb3c307f46a049997b76198a9033\"\n}\n" }, { "item_id": "candidate-admission-json", @@ -203,9 +203,9 @@ "content": "{\n \"image\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"source_revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"scanner\": \"aquasec/trivy@sha256:62b1e65e8869bc4b4c6aa4fa2b21595256c7c2f6018a9d9ad61caf87187c1969\",\n \"version\": \"0.74.0\",\n \"db_metadata\": {\n \"Version\": 2,\n \"NextUpdate\": \"2026-10-11T18:59:50.889010572Z\",\n \"UpdatedAt\": \"2026-10-10T18:59:50.889010923Z\",\n \"DownloadedAt\": \"2026-10-10T23:32:32.380033131Z\"\n },\n \"suppression\": false,\n \"ignore_unfixed\": false,\n \"severity_filter\": null,\n \"package_count\": 44,\n \"findings_by_severity\": {\n \"MEDIUM\": 1\n },\n \"findings\": [\n {\n \"id\": \"CVE-2026-85091\",\n \"package\": \"zlib\",\n \"installed\": \"1.3.2-r0\",\n \"fixed\": \"1.3.2-r1\",\n \"severity\": \"MEDIUM\"\n }\n ],\n \"coverage_limits\": [\n \"Alpine3.24 absent scanner EOL list; OS detector ran against Alpine3.24 repository on38OS packages\",\n \"Known findings asof pinnedDB, not claim absence of unknown vulnerabilities\"\n ],\n \"high_critical\": 0,\n \"same_scanner_actual_base_scan_findings_identical\": true,\n \"base_scan_file\": \"base-trivy-full.json\"\n}\n" }, { - "item_id": "trivy-full-json", + "item_id": "execution-bundle-json", "media_type": "application/json", - "content": "{\n \"SchemaVersion\": 2,\n \"Trivy\": {\n \"Version\": \"0.74.0\"\n },\n \"ReportID\": \"01a1288d-8df1-73fb-9313-3642dd64ba72\",\n \"CreatedAt\": \"2026-10-11T01:22:07.985264404Z\",\n \"ArtifactID\": \"sha256:40f873b8d6345341e2f661a5038c092d186e2831dc60b61704a419a1f4f77ef6\",\n \"ArtifactName\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"ArtifactType\": \"container_image\",\n \"Metadata\": {\n \"Size\": 88258048,\n \"OS\": {\n \"Family\": \"alpine\",\n \"Name\": \"3.24.1\"\n },\n \"ImageID\": \"sha256:f34de21379c4f50ea0361ca1d8296c8e72f989499ad288016b81204997ae4779\",\n \"DiffIDs\": [\n \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\",\n \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\",\n \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\",\n \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\",\n \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\",\n \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\",\n \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\",\n \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\",\n \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n ],\n \"RepoDigests\": [\n \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\"\n ],\n \"Reference\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\",\n \"ImageConfig\": {\n \"architecture\": \"amd64\",\n \"created\": \"2026-10-11T01:21:04.787527697Z\",\n \"docker_version\": \"27.5.1\",\n \"history\": [\n {\n \"created\": \"2026-06-16T00:01:29.967161902Z\",\n \"created_by\": \"ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-06-16T00:01:29.967161902Z\",\n \"created_by\": \"CMD [\\\"/bin/sh\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV LANG=C.UTF-8\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\tapk add --no-cache \\t\\tca-certificates \\t\\ttzdata \\t; # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PYTHON_VERSION=3.12.14\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:05:24.224544843Z\",\n \"created_by\": \"ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-01T00:10:30.672225972Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\t\\tapk add --no-cache --virtual .build-deps \\t\\tbluez-dev \\t\\tbzip2-dev \\t\\tdpkg-dev dpkg \\t\\tfindutils \\t\\tg++ \\t\\tgcc \\t\\tgdbm-dev \\t\\tgnupg \\t\\tlibc-dev \\t\\tlibffi-dev \\t\\tlibnsl-dev \\t\\tlibtirpc-dev \\t\\tlinux-headers \\t\\tmake \\t\\tncurses-dev \\t\\topenssl-dev \\t\\tpax-utils \\t\\treadline-dev \\t\\tsqlite-dev \\t\\ttar \\t\\ttcl-dev \\t\\ttk \\t\\ttk-dev \\t\\tutil-linux-dev \\t\\txz \\t\\txz-dev \\t\\tzlib-dev \\t; \\t\\twget -O python.tar.xz \\\"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\\\"; \\techo \\\"$PYTHON_SHA256 *python.tar.xz\\\" | sha256sum -c -; \\twget -O python.tar.xz.asc \\\"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\\\"; \\tGNUPGHOME=\\\"$(mktemp -d)\\\"; export GNUPGHOME; \\tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \\\"$GPG_KEY\\\"; \\tgpg --batch --verify python.tar.xz.asc python.tar.xz; \\tgpgconf --kill all; \\trm -rf \\\"$GNUPGHOME\\\" python.tar.xz.asc; \\tmkdir -p /usr/src/python; \\ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \\trm python.tar.xz; \\t\\tcd /usr/src/python; \\tgnuArch=\\\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\\\"; \\t./configure \\t\\t--build=\\\"$gnuArch\\\" \\t\\t--enable-loadable-sqlite-extensions \\t\\t--enable-option-checking=fatal \\t\\t--enable-shared \\t\\t$(test \\\"${gnuArch%%-*}\\\" != 'riscv64' \\u0026\\u0026 echo '--with-lto') \\t\\t--with-ensurepip \\t; \\tnproc=\\\"$(nproc)\\\"; \\tEXTRA_CFLAGS=\\\"-DTHREAD_STACK_SIZE=0x100000\\\"; \\tLDFLAGS=\\\"${LDFLAGS:-} -Wl,--strip-all\\\"; \\tarch=\\\"$(apk --print-arch)\\\"; \\tcase \\\"$arch\\\" in \\t\\tx86_64|aarch64) \\t\\t\\tEXTRA_CFLAGS=\\\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer\\\"; \\t\\t\\t;; \\t\\tx86) \\t\\t\\t;; \\t\\t*) \\t\\t\\tEXTRA_CFLAGS=\\\"${EXTRA_CFLAGS:-} -fno-omit-frame-pointer\\\"; \\t\\t\\t;; \\tesac; \\tmake -j \\\"$nproc\\\" \\t\\t\\\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\\\" \\t\\t\\\"LDFLAGS=${LDFLAGS:-}\\\" \\t; \\trm python; \\tmake -j \\\"$nproc\\\" \\t\\t\\\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\\\" \\t\\t\\\"LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\\\\$\\\\$ORIGIN/../lib'\\\" \\t\\tpython \\t; \\tmake install; \\t\\tcd /; \\trm -rf /usr/src/python; \\t\\tfind /usr/local -depth \\t\\t\\\\( \\t\\t\\t\\\\( -type d -a \\\\( -name test -o -name tests -o -name idle_test \\\\) \\\\) \\t\\t\\t-o \\\\( -type f -a \\\\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\\\) \\\\) \\t\\t\\\\) -exec rm -rf '{}' + \\t; \\t\\tfind /usr/local -type f -executable -not \\\\( -name '*tkinter*' \\\\) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \\t\\t| tr ',' '\\\\n' \\t\\t| sort -u \\t\\t| awk 'system(\\\"[ -e /usr/local/lib/\\\" $1 \\\" ]\\\") == 0 { next } { print \\\"so:\\\" $1 }' \\t\\t| xargs -rt apk add --no-network --virtual .python-rundeps \\t; \\tapk del --no-network .build-deps; \\t\\texport PYTHONDONTWRITEBYTECODE=1; \\tpython3 --version; \\tpip3 --version # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:10:30.782726003Z\",\n \"created_by\": \"RUN /bin/sh -c set -eux; \\tfor src in idle3 pip3 pydoc3 python3 python3-config; do \\t\\tdst=\\\"$(echo \\\"$src\\\" | tr -d 3)\\\"; \\t\\t[ -s \\\"/usr/local/bin/$src\\\" ]; \\t\\t[ ! -e \\\"/usr/local/bin/$dst\\\" ]; \\t\\tln -svT \\\"$src\\\" \\\"/usr/local/bin/$dst\\\"; \\tdone # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-09-01T00:10:30.782726003Z\",\n \"created_by\": \"CMD [\\\"python3\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-11T00:49:47.962156876+02:00\",\n \"created_by\": \"ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-09-11T00:49:47.962156876+02:00\",\n \"created_by\": \"RUN /bin/sh -c apk add --no-cache 'libuuid\\u003e=2.42.3-r1' \\u0026\\u0026 addgroup -S -g 10001 informed \\u0026\\u0026 adduser -S -u 10001 -G informed -H informed # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:55.351944978+02:00\",\n \"created_by\": \"COPY /opt/venv /opt/venv # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.462092072+02:00\",\n \"created_by\": \"RUN /bin/sh -c rm -rf /usr/local/bin/pip* /usr/local/lib/python3.12/site-packages/pip* /usr/local/lib/python3.12/site-packages/setuptools* /usr/local/lib/python3.12/site-packages/pkg_resources /opt/venv/bin/pip* /opt/venv/lib/python3.12/site-packages/pip* /opt/venv/lib/python3.12/site-packages/setuptools* /opt/venv/lib/python3.12/site-packages/pkg_resources # buildkit\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"WORKDIR /app\",\n \"comment\": \"buildkit.dockerfile.v0\"\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"USER 10001:10001\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"EXPOSE [8080/tcp 8081/tcp]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-05T01:03:56.675216821+02:00\",\n \"created_by\": \"ENTRYPOINT [\\\"informed-decision-container\\\"]\",\n \"comment\": \"buildkit.dockerfile.v0\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:15:11.991443676Z\",\n \"created_by\": \"/bin/sh -c #(nop) ARG SOURCE_REVISION\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:21:04.716126392Z\",\n \"created_by\": \"/bin/sh -c #(nop) LABEL org.opencontainers.image.revision=3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168 org.opencontainers.image.base.digest=sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173 social.coulomb.source.policy.sha256=9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62 social.coulomb.release.scope=INFD-WP-0009-T04/purpose-overlay-v1\",\n \"empty_layer\": true\n },\n {\n \"created\": \"2026-10-11T01:21:04.787527697Z\",\n \"created_by\": \"/bin/sh -c #(nop) COPY file:2be9cb36e7253e15733673359cda8caa22986b6888822a008c1b360d909994e0 in /opt/venv/lib/python3.12/site-packages/informed_decision/policy.py \"\n }\n ],\n \"os\": \"linux\",\n \"rootfs\": {\n \"type\": \"layers\",\n \"diff_ids\": [\n \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\",\n \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\",\n \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\",\n \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\",\n \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\",\n \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\",\n \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\",\n \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\",\n \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n ]\n },\n \"config\": {\n \"Entrypoint\": [\n \"informed-decision-container\"\n ],\n \"Env\": [\n \"PATH=/opt/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n \"LANG=C.UTF-8\",\n \"GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305\",\n \"PYTHON_VERSION=3.12.14\",\n \"PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a\",\n \"PYTHONDONTWRITEBYTECODE=1\",\n \"PYTHONUNBUFFERED=1\"\n ],\n \"Image\": \"sha256:90f1574f9eda35fa6cb972961beb27a7cb904c36560e381930b0e14065c23883\",\n \"Labels\": {\n \"org.opencontainers.image.base.digest\": \"sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\",\n \"org.opencontainers.image.revision\": \"3e4bcb26f8eeaa8c64345c565477b5ac8ccbb168\",\n \"social.coulomb.release.scope\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"social.coulomb.source.policy.sha256\": \"9d7c1be4cb6199d14ef0aaead5f85951f45b0ccbd7c800a7fde922a253566b62\"\n },\n \"User\": \"10001:10001\",\n \"WorkingDir\": \"/app\",\n \"ExposedPorts\": {\n \"8080/tcp\": {},\n \"8081/tcp\": {}\n }\n }\n },\n \"Layers\": [\n {\n \"Size\": 8697856,\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n {\n \"Size\": 1538048,\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n {\n \"Size\": 47150592,\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n {\n \"Size\": 5120,\n \"Digest\": \"sha256:ed62c91ccd94e36a928e96d704cfcf20861302590245cc12aa89a15a5d6be29b\",\n \"DiffID\": \"sha256:4098ad033525263f92a8a9c51865596025d47018e078c0b1f7d9cd5663fc1ffe\"\n },\n {\n \"Size\": 131584,\n \"Digest\": \"sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86\",\n \"DiffID\": \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\"\n },\n {\n \"Size\": 30705664,\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n {\n \"Size\": 12288,\n \"Digest\": \"sha256:16a3dba6b720d3059eab918cd3596f94145ac9cf4d456f925a21f0f72522863f\",\n \"DiffID\": \"sha256:361430a1113969743b99e237b20f023d5497493bcf96fb91af99ac0a0dbc4a59\"\n },\n {\n \"Size\": 1536,\n \"Digest\": \"sha256:e73dd464fbff5607cc62a1b2b66b0eefe737dfad4db8e7b58a48cda7c12d94d3\",\n \"DiffID\": \"sha256:cfc5939674d67f60b4411c24dfcde5622b712eeb7376cd0941a2751da80a6b02\"\n },\n {\n \"Size\": 15360,\n \"Digest\": \"sha256:cfee29c2f8119d2a39714ecbe5095a2dc1c986054f2e1fe0a6565163242417e3\",\n \"DiffID\": \"sha256:21ff9188cb29ca95fe9be11355f70ab5586e8499e33b52a253d953fb3b75aea3\"\n }\n ]\n },\n \"Results\": [\n {\n \"Target\": \"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a (alpine 3.24.1)\",\n \"Class\": \"os-pkgs\",\n \"Type\": \"alpine\",\n \"Packages\": [\n {\n \"ID\": \".python-rundeps@20260901.001029\",\n \"Name\": \".python-rundeps\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/.python-rundeps@20260901.001029?arch=noarch\\u0026distro=3.24.1\",\n \"UID\": \"4e26c99fecac1e97\"\n },\n \"Version\": \"20260901.001029\",\n \"Arch\": \"noarch\",\n \"DependsOn\": [\n \"gdbm@1.26-r0\",\n \"libbz2@1.0.8-r6\",\n \"libcrypto3@3.5.8-r0\",\n \"libffi@3.5.2-r1\",\n \"libncursesw@6.6_p20260516-r0\",\n \"libnsl@2.0.1-r2\",\n \"libpanelw@6.6_p20260516-r0\",\n \"libssl3@3.5.8-r0\",\n \"libtirpc@1.3.5-r1\",\n \"libuuid@2.42.3-r1\",\n \"musl@1.2.6-r2\",\n \"readline@8.3.3-r1\",\n \"sqlite-libs@3.53.4-r0\",\n \"xz-libs@5.8.3-r0\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:51d0c1e7d88a414345799f0309185c625013ef32\",\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-baselayout@3.7.2-r1\",\n \"Name\": \"alpine-baselayout\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-baselayout@3.7.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1b9c543300f8073e\"\n },\n \"Version\": \"3.7.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-baselayout\",\n \"SrcVersion\": \"3.7.2-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"alpine-baselayout-data@3.7.2-r1\",\n \"busybox-binsh@1.37.0-r31\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:f0fcfdc2f4da058af6473bc45c4eab62916225b2\",\n \"InstalledFiles\": [\n \"etc/motd\",\n \"etc/crontabs/root\",\n \"etc/modprobe.d/aliases.conf\",\n \"etc/modprobe.d/blacklist.conf\",\n \"etc/modprobe.d/i386.conf\",\n \"etc/profile.d/20locale.sh\",\n \"etc/profile.d/README\",\n \"etc/profile.d/color_prompt.sh.disabled\",\n \"usr/lib/sysctl.d/00-alpine.conf\",\n \"var/lock\",\n \"var/run\",\n \"var/spool/mail\",\n \"var/spool/cron/crontabs\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-baselayout-data@3.7.2-r1\",\n \"Name\": \"alpine-baselayout-data\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-baselayout-data@3.7.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"fcc3cd90122d8aa7\"\n },\n \"Version\": \"3.7.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-baselayout\",\n \"SrcVersion\": \"3.7.2-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c6f9bded17d844b6f1b0bb5766d2c35c0d5c8508\",\n \"InstalledFiles\": [\n \"etc/fstab\",\n \"etc/group\",\n \"etc/hostname\",\n \"etc/hosts\",\n \"etc/inittab\",\n \"etc/modules\",\n \"etc/mtab\",\n \"etc/nsswitch.conf\",\n \"etc/passwd\",\n \"etc/profile\",\n \"etc/protocols\",\n \"etc/services\",\n \"etc/shadow\",\n \"etc/shells\",\n \"etc/sysctl.conf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-keys@2.6-r0\",\n \"Name\": \"alpine-keys\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-keys@2.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"cb1f6c8fa74713e0\"\n },\n \"Version\": \"2.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-keys\",\n \"SrcVersion\": \"2.6-r0\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:d8d6b80e53c059a77e4915da78ba964f3ffea240\",\n \"InstalledFiles\": [\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"etc/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub\",\n \"usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub\",\n \"usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub\",\n \"usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub\",\n \"usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub\",\n \"usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub\",\n \"usr/share/apk/keys/armv7/alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub\",\n \"usr/share/apk/keys/loongarch64/alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub\",\n \"usr/share/apk/keys/mips64/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub\",\n \"usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub\",\n \"usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub\",\n \"usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub\",\n \"usr/share/apk/keys/riscv64/alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub\",\n \"usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub\",\n \"usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub\",\n \"usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub\",\n \"usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"alpine-release@3.24.1-r0\",\n \"Name\": \"alpine-release\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/alpine-release@3.24.1-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"6cfad6f36e1f31aa\"\n },\n \"Version\": \"3.24.1-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"alpine-base\",\n \"SrcVersion\": \"3.24.1-r0\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"alpine-keys@2.6-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:bc6912a25cdc7733e0035ed509eceaa4026946e3\",\n \"InstalledFiles\": [\n \"etc/alpine-release\",\n \"etc/issue\",\n \"etc/os-release\",\n \"etc/secfixes.d/alpine\",\n \"usr/lib/os-release\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"apk-tools@3.0.6-r0\",\n \"Name\": \"apk-tools\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/apk-tools@3.0.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"cb2633c883b17a04\"\n },\n \"Version\": \"3.0.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"apk-tools\",\n \"SrcVersion\": \"3.0.6-r0\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"ca-certificates-bundle@20260611-r0\",\n \"libapk@3.0.6-r0\",\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:043333589798a1f52e09ae63f026c6c8fa676d34\",\n \"InstalledFiles\": [\n \"sbin/apk\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"busybox@1.37.0-r31\",\n \"Name\": \"busybox\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/busybox@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"771020c43c8440bf\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:b5405ebc02f7dd8be95b6265c54b243d5456ab8f\",\n \"InstalledFiles\": [\n \"bin/busybox\",\n \"etc/securetty\",\n \"etc/busybox-paths.d/busybox\",\n \"etc/logrotate.d/acpid\",\n \"etc/network/if-up.d/dad\",\n \"etc/udhcpc/udhcpc.conf\",\n \"usr/share/udhcpc/default.script\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"busybox-binsh@1.37.0-r31\",\n \"Name\": \"busybox-binsh\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/busybox-binsh@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1ec8a3d5d2b63297\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"busybox@1.37.0-r31\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:5cbd14acc6f1804c5bac6c77dc2c492f010b0fc7\",\n \"InstalledFiles\": [\n \"bin/sh\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ca-certificates@20260611-r0\",\n \"Name\": \"ca-certificates\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ca-certificates@20260611-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"2a3c316ee83c6198\"\n },\n \"Version\": \"20260611-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ca-certificates\",\n \"SrcVersion\": \"20260611-r0\",\n \"Licenses\": [\n \"MPL-2.0\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"busybox-binsh@1.37.0-r31\",\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n \"Digest\": \"sha1:8f2a04abeb54b331e2970a0a0dffb7bd6bdde567\",\n \"InstalledFiles\": [\n \"etc/ca-certificates.conf\",\n \"etc/apk/protected_paths.d/ca-certificates.list\",\n \"etc/ca-certificates/update.d/certhash\",\n \"usr/bin/c_rehash\",\n \"usr/sbin/update-ca-certificates\",\n \"usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt\",\n \"usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt\",\n \"usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt\",\n \"usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt\",\n \"usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_ECC_TLS_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Atos_TrustedRoot_Root_CA_RSA_TLS_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt\",\n \"usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA1.crt\",\n \"usr/share/ca-certificates/mozilla/BJCA_Global_Root_CA2.crt\",\n \"usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/CA_Disig_Root_R2.crt\",\n \"usr/share/ca-certificates/mozilla/CFCA_EV_ROOT.crt\",\n \"usr/share/ca-certificates/mozilla/COMODO_ECC_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/COMODO_RSA_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/Certainly_Root_E1.crt\",\n \"usr/share/ca-certificates/mozilla/Certainly_Root_R1.crt\",\n \"usr/share/ca-certificates/mozilla/Certigna_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_EC-384_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Network_CA_2.crt\",\n \"usr/share/ca-certificates/mozilla/Certum_Trusted_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_1_2020.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_BR_Root_CA_2_2023.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_1_2020.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_EV_Root_CA_2_2023.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt\",\n \"usr/share/ca-certificates/mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G2.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_G3.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G2.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G3.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_TLS_RSA4096_Root_G5.crt\",\n \"usr/share/ca-certificates/mozilla/DigiCert_Trusted_Root_G4.crt\",\n \"usr/share/ca-certificates/mozilla/GDCA_TrustAUTH_R5_ROOT.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R1.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R3.crt\",\n \"usr/share/ca-certificates/mozilla/GTS_Root_R4.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R4.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_ECC_Root_CA_-_R5.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R3.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R6.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_E46.crt\",\n \"usr/share/ca-certificates/mozilla/GlobalSign_Root_R46.crt\",\n \"usr/share/ca-certificates/mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/HARICA_TLS_ECC_Root_CA_2021.crt\",\n \"usr/share/ca-certificates/mozilla/HARICA_TLS_RSA_Root_CA_2021.crt\",\n \"usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt\",\n \"usr/share/ca-certificates/mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt\",\n \"usr/share/ca-certificates/mozilla/HiPKI_Root_CA_-_G1.crt\",\n \"usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt\",\n \"usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt\",\n \"usr/share/ca-certificates/mozilla/ISRG_Root_X2.crt\",\n \"usr/share/ca-certificates/mozilla/IdenTrust_Commercial_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/IdenTrust_Public_Sector_Root_CA_1.crt\",\n \"usr/share/ca-certificates/mozilla/Izenpe.com.crt\",\n \"usr/share/ca-certificates/mozilla/Microsec_e-Szigno_Root_CA_2009.crt\",\n \"usr/share/ca-certificates/mozilla/Microsoft_ECC_Root_Certificate_Authority_2017.crt\",\n \"usr/share/ca-certificates/mozilla/Microsoft_RSA_Root_Certificate_Authority_2017.crt\",\n \"usr/share/ca-certificates/mozilla/NAVER_Global_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/NetLock_Arany_=Class_Gold=_F\u0151tan\u00fas\u00edtv\u00e1ny.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_Server_Root_ECC_G1.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_Server_Root_RSA_G1.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GB_CA.crt\",\n \"usr/share/ca-certificates/mozilla/OISTE_WISeKey_Global_Root_GC_CA.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_1_G3.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_2_G3.crt\",\n \"usr/share/ca-certificates/mozilla/QuoVadis_Root_CA_3_G3.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_ECC.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_EV_Root_Certification_Authority_RSA_R2.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_ECC.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_Root_Certification_Authority_RSA.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_TLS_ECC_Root_CA_2022.crt\",\n \"usr/share/ca-certificates/mozilla/SSL.com_TLS_RSA_Root_CA_2022.crt\",\n \"usr/share/ca-certificates/mozilla/SZAFIR_ROOT_CA2.crt\",\n \"usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_E46.crt\",\n \"usr/share/ca-certificates/mozilla/Sectigo_Public_Server_Authentication_Root_R46.crt\",\n \"usr/share/ca-certificates/mozilla/SecureSign_Root_CA14.crt\",\n \"usr/share/ca-certificates/mozilla/SecureSign_Root_CA15.crt\",\n \"usr/share/ca-certificates/mozilla/Security_Communication_ECC_RootCA1.crt\",\n \"usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt\",\n \"usr/share/ca-certificates/mozilla/Starfield_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt\",\n \"usr/share/ca-certificates/mozilla/SwissSign_RSA_TLS_Root_CA_2022_-_1.crt\",\n \"usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_2.crt\",\n \"usr/share/ca-certificates/mozilla/T-TeleSec_GlobalRoot_Class_3.crt\",\n \"usr/share/ca-certificates/mozilla/TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_CYBER_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_Global_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TWCA_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/Telekom_Security_TLS_ECC_Root_2020.crt\",\n \"usr/share/ca-certificates/mozilla/Telekom_Security_TLS_RSA_Root_2023.crt\",\n \"usr/share/ca-certificates/mozilla/Telia_Root_CA_v2.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G3.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_Global_Root_CA_G4.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_TLS_ECC_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TrustAsia_TLS_RSA_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/TunTrust_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/UCA_Extended_Validation_Root.crt\",\n \"usr/share/ca-certificates/mozilla/UCA_Global_G2_Root.crt\",\n \"usr/share/ca-certificates/mozilla/USERTrust_ECC_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/USERTrust_RSA_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/certSIGN_Root_CA_G2.crt\",\n \"usr/share/ca-certificates/mozilla/e-Szigno_Root_CA_2017.crt\",\n \"usr/share/ca-certificates/mozilla/e-Szigno_TLS_Root_CA_2023.crt\",\n \"usr/share/ca-certificates/mozilla/ePKI_Root_Certification_Authority.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_C3.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_G3.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_Root_CA_-_C1.crt\",\n \"usr/share/ca-certificates/mozilla/emSign_Root_CA_-_G1.crt\",\n \"usr/share/ca-certificates/mozilla/vTrus_ECC_Root_CA.crt\",\n \"usr/share/ca-certificates/mozilla/vTrus_Root_CA.crt\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ca-certificates-bundle@20260611-r0\",\n \"Name\": \"ca-certificates-bundle\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ca-certificates-bundle@20260611-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"20337c2ea28bef28\"\n },\n \"Version\": \"20260611-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ca-certificates\",\n \"SrcVersion\": \"20260611-r0\",\n \"Licenses\": [\n \"MPL-2.0\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c9534a03750bdfae341f10969016090fc11febbd\",\n \"InstalledFiles\": [\n \"etc/ssl/cert.pem\",\n \"etc/ssl/certs/ca-certificates.crt\",\n \"etc/ssl1.1/cert.pem\",\n \"etc/ssl1.1/certs\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"gdbm@1.26-r0\",\n \"Name\": \"gdbm\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/gdbm@1.26-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"5eb1a3f86262ca77\"\n },\n \"Version\": \"1.26-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"gdbm\",\n \"SrcVersion\": \"1.26-r0\",\n \"Licenses\": [\n \"GPL-3.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:619493d8124fe49a8ee1d8f7a1372cf7e3977337\",\n \"InstalledFiles\": [\n \"usr/lib/libgdbm.so.6\",\n \"usr/lib/libgdbm.so.6.0.0\",\n \"usr/lib/libgdbm_compat.so.4\",\n \"usr/lib/libgdbm_compat.so.4.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"keyutils-libs@1.6.3-r4\",\n \"Name\": \"keyutils-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/keyutils-libs@1.6.3-r4?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"a1a29120eb342032\"\n },\n \"Version\": \"1.6.3-r4\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"keyutils\",\n \"SrcVersion\": \"1.6.3-r4\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"LGPL-2.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:b7331c96f077fc3522ee4361a441d1097204cd90\",\n \"InstalledFiles\": [\n \"usr/lib/libkeyutils.so.1\",\n \"usr/lib/libkeyutils.so.1.10\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"krb5-conf@1.0-r2\",\n \"Name\": \"krb5-conf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/krb5-conf@1.0-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e7cf94ba8b6dbc33\"\n },\n \"Version\": \"1.0-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"krb5-conf\",\n \"SrcVersion\": \"1.0-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:40a11e0690a59e110367b62a80661024e9942a2d\",\n \"InstalledFiles\": [\n \"etc/krb5.conf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"krb5-libs@1.22.2-r1\",\n \"Name\": \"krb5-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/krb5-libs@1.22.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"958f8b4a4f087dac\"\n },\n \"Version\": \"1.22.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"krb5\",\n \"SrcVersion\": \"1.22.2-r1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"keyutils-libs@1.6.3-r4\",\n \"krb5-conf@1.0-r2\",\n \"libcom_err@1.47.4-r0\",\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"libverto@0.3.2-r2\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:ef02346e21b817ff379e4601e5b1fc9760e5e31a\",\n \"InstalledFiles\": [\n \"usr/lib/libgssapi_krb5.so.2\",\n \"usr/lib/libgssapi_krb5.so.2.2\",\n \"usr/lib/libgssrpc.so.4\",\n \"usr/lib/libgssrpc.so.4.2\",\n \"usr/lib/libk5crypto.so.3\",\n \"usr/lib/libk5crypto.so.3.1\",\n \"usr/lib/libkadm5clnt_mit.so.12\",\n \"usr/lib/libkadm5clnt_mit.so.12.0\",\n \"usr/lib/libkadm5srv_mit.so.12\",\n \"usr/lib/libkadm5srv_mit.so.12.0\",\n \"usr/lib/libkdb5.so.10\",\n \"usr/lib/libkdb5.so.10.0\",\n \"usr/lib/libkrad.so.0\",\n \"usr/lib/libkrad.so.0.0\",\n \"usr/lib/libkrb5.so.3\",\n \"usr/lib/libkrb5.so.3.3\",\n \"usr/lib/libkrb5support.so.0\",\n \"usr/lib/libkrb5support.so.0.1\",\n \"usr/lib/krb5/plugins/kdb/db2.so\",\n \"usr/lib/krb5/plugins/preauth/otp.so\",\n \"usr/lib/krb5/plugins/preauth/spake.so\",\n \"usr/lib/krb5/plugins/preauth/test.so\",\n \"usr/lib/krb5/plugins/tls/k5tls.so\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libapk@3.0.6-r0\",\n \"Name\": \"libapk\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libapk@3.0.6-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"a35b8b9b3219513a\"\n },\n \"Version\": \"3.0.6-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"apk-tools\",\n \"SrcVersion\": \"3.0.6-r0\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"musl@1.2.6-r2\",\n \"zlib@1.3.2-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:523a8f58104589f74f743d501c81bf6517155378\",\n \"InstalledFiles\": [\n \"usr/lib/libapk.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libbz2@1.0.8-r6\",\n \"Name\": \"libbz2\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libbz2@1.0.8-r6?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"48e17539404e2d56\"\n },\n \"Version\": \"1.0.8-r6\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"bzip2\",\n \"SrcVersion\": \"1.0.8-r6\",\n \"Licenses\": [\n \"bzip-2-1.0.6\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:08566ba5c7af97c25474be8b24e8b48f0116b67d\",\n \"InstalledFiles\": [\n \"usr/lib/libbz2.so.1\",\n \"usr/lib/libbz2.so.1.0.8\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libcom_err@1.47.4-r0\",\n \"Name\": \"libcom_err\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libcom_err@1.47.4-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3fc35a3f66d192af\"\n },\n \"Version\": \"1.47.4-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"e2fsprogs\",\n \"SrcVersion\": \"1.47.4-r0\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"LGPL-2.0-or-later\",\n \"BSD-3-Clause\",\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:4b9fb5899ea0b1c0cfbb2a2c5952704437d4ecef\",\n \"InstalledFiles\": [\n \"usr/lib/libcom_err.so.2\",\n \"usr/lib/libcom_err.so.2.1\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libcrypto3@3.5.8-r0\",\n \"Name\": \"libcrypto3\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libcrypto3@3.5.8-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"4299bba2ba9c96aa\"\n },\n \"Version\": \"3.5.8-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"openssl\",\n \"SrcVersion\": \"3.5.8-r0\",\n \"Licenses\": [\n \"Apache-2.0\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:1b3b9fc0c136f4936932bcb2ec21499f0ae5dfd3\",\n \"InstalledFiles\": [\n \"etc/ssl/ct_log_list.cnf\",\n \"etc/ssl/ct_log_list.cnf.dist\",\n \"etc/ssl/openssl.cnf\",\n \"etc/ssl/openssl.cnf.dist\",\n \"usr/lib/libcrypto.so.3\",\n \"usr/lib/engines-3/afalg.so\",\n \"usr/lib/engines-3/capi.so\",\n \"usr/lib/engines-3/loader_attic.so\",\n \"usr/lib/engines-3/padlock.so\",\n \"usr/lib/ossl-modules/legacy.so\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libffi@3.5.2-r1\",\n \"Name\": \"libffi\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libffi@3.5.2-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"d3eaa921287b1ccd\"\n },\n \"Version\": \"3.5.2-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libffi\",\n \"SrcVersion\": \"3.5.2-r1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:2f7b261f7fcecc4eebd8b330e7f6fb80713bfe3a\",\n \"InstalledFiles\": [\n \"usr/lib/libffi.so.8\",\n \"usr/lib/libffi.so.8.2.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libintl@1.0-r0\",\n \"Name\": \"libintl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libintl@1.0-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"25c18808d8fc87e0\"\n },\n \"Version\": \"1.0-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"gettext\",\n \"SrcVersion\": \"1.0-r0\",\n \"Licenses\": [\n \"LGPL-2.1-or-later\"\n ],\n \"Maintainer\": \"Carlo Landmeter \\u003cclandmeter@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:282d6642ccac87237e43a864159d73cf5abe7550\",\n \"InstalledFiles\": [\n \"usr/lib/libintl.so.8\",\n \"usr/lib/libintl.so.8.4.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libncursesw@6.6_p20260516-r0\",\n \"Name\": \"libncursesw\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libncursesw@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e8939f45e2191bcc\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\",\n \"ncurses-terminfo-base@6.6_p20260516-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:9f318e6e324d6827274829194cf6ac6afbaded12\",\n \"InstalledFiles\": [\n \"usr/lib/libncursesw.so.6\",\n \"usr/lib/libncursesw.so.6.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libnsl@2.0.1-r2\",\n \"Name\": \"libnsl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libnsl@2.0.1-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3d893c60d41da67b\"\n },\n \"Version\": \"2.0.1-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libnsl\",\n \"SrcVersion\": \"2.0.1-r2\",\n \"Licenses\": [\n \"LGPL-2.0-or-later\"\n ],\n \"DependsOn\": [\n \"libintl@1.0-r0\",\n \"libtirpc@1.3.5-r1\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:5194adbf26560b52be318481a7af294ab05fd795\",\n \"InstalledFiles\": [\n \"usr/lib/libnsl.so.3\",\n \"usr/lib/libnsl.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libpanelw@6.6_p20260516-r0\",\n \"Name\": \"libpanelw\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libpanelw@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"ef1ad9bb256b373\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"DependsOn\": [\n \"libncursesw@6.6_p20260516-r0\",\n \"musl@1.2.6-r2\",\n \"ncurses-terminfo-base@6.6_p20260516-r0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:149bdc434232ed11fc5bb975ba519a07154a6f56\",\n \"InstalledFiles\": [\n \"usr/lib/libpanelw.so.6\",\n \"usr/lib/libpanelw.so.6.6\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libssl3@3.5.8-r0\",\n \"Name\": \"libssl3\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libssl3@3.5.8-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"f290ab59b88b1c4a\"\n },\n \"Version\": \"3.5.8-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"openssl\",\n \"SrcVersion\": \"3.5.8-r0\",\n \"Licenses\": [\n \"Apache-2.0\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:5f9b1e55d821953d2e2b1db322dad70a3b5041ea\",\n \"InstalledFiles\": [\n \"usr/lib/libssl.so.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libtirpc@1.3.5-r1\",\n \"Name\": \"libtirpc\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libtirpc@1.3.5-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"471c8d955ca03be5\"\n },\n \"Version\": \"1.3.5-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libtirpc\",\n \"SrcVersion\": \"1.3.5-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"krb5-libs@1.22.2-r1\",\n \"libtirpc-conf@1.3.5-r1\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:c32865bd86a8b8829d152279cabbc5ac6d430eb2\",\n \"InstalledFiles\": [\n \"usr/lib/libtirpc.so.3\",\n \"usr/lib/libtirpc.so.3.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libtirpc-conf@1.3.5-r1\",\n \"Name\": \"libtirpc-conf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libtirpc-conf@1.3.5-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"3437392c14aad33f\"\n },\n \"Version\": \"1.3.5-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libtirpc\",\n \"SrcVersion\": \"1.3.5-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:0c17d9988dc986c90e22f79778df047eca9973ff\",\n \"InstalledFiles\": [\n \"etc/bindresvport.blacklist\",\n \"etc/netconfig\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libuuid@2.42.3-r1\",\n \"Name\": \"libuuid\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libuuid@2.42.3-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"c444e9cdd1bdda40\"\n },\n \"Version\": \"2.42.3-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"util-linux\",\n \"SrcVersion\": \"2.42.3-r1\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:f0fe3e08ab046c0c5e29d34ee73bc8c7e03398eb891e4498e0a67088a5ea3e86\",\n \"DiffID\": \"sha256:f9b4a8a412a0c07a489e46fb5db41f9d0dc84d4ec38a4e2c6ab9531f44e0d9f1\"\n },\n \"Digest\": \"sha1:8f041ef637ad75f381cc0c034f2afbbb0303264e\",\n \"InstalledFiles\": [\n \"usr/lib/libuuid.so.1\",\n \"usr/lib/libuuid.so.1.3.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"libverto@0.3.2-r2\",\n \"Name\": \"libverto\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/libverto@0.3.2-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"9df4321a283a6cf6\"\n },\n \"Version\": \"0.3.2-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"libverto\",\n \"SrcVersion\": \"0.3.2-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Francesco Colista \\u003cfcolista@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:73233059338142e4ac6d8fb8bb0074e93da75dc1\",\n \"InstalledFiles\": [\n \"usr/lib/libverto.so.1\",\n \"usr/lib/libverto.so.1.0.0\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"musl@1.2.6-r2\",\n \"Name\": \"musl\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/musl@1.2.6-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1f8cb44befe503d4\"\n },\n \"Version\": \"1.2.6-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"musl\",\n \"SrcVersion\": \"1.2.6-r2\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:0f7e5827e4e1a73631beda27b78431a8ba240e05\",\n \"InstalledFiles\": [\n \"lib/ld-musl-x86_64.so.1\",\n \"lib/libc.musl-x86_64.so.1\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"musl-utils@1.2.6-r2\",\n \"Name\": \"musl-utils\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/musl-utils@1.2.6-r2?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"4497482ec1d943e1\"\n },\n \"Version\": \"1.2.6-r2\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"musl\",\n \"SrcVersion\": \"1.2.6-r2\",\n \"Licenses\": [\n \"MIT\",\n \"BSD-2-Clause\",\n \"GPL-2.0-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\",\n \"scanelf@1.3.9-r1\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:75ada3c48d63ec5d87c42fdf934a3fdd11298dc5\",\n \"InstalledFiles\": [\n \"sbin/ldconfig\",\n \"usr/bin/getconf\",\n \"usr/bin/getent\",\n \"usr/bin/iconv\",\n \"usr/bin/ldd\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ncurses-terminfo-base@6.6_p20260516-r0\",\n \"Name\": \"ncurses-terminfo-base\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ncurses-terminfo-base@6.6_p20260516-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e7fac5c6a6e9ae8\"\n },\n \"Version\": \"6.6_p20260516-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"ncurses\",\n \"SrcVersion\": \"6.6_p20260516-r0\",\n \"Licenses\": [\n \"X-11\"\n ],\n \"Maintainer\": \"Milan P. Stani\u0107 \\u003cmps@arvanta.net\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:9d551d828e9c8ee52c5801c1d6046828ebf15752\",\n \"InstalledFiles\": [\n \"etc/terminfo/a/alacritty\",\n \"etc/terminfo/a/ansi\",\n \"etc/terminfo/d/dumb\",\n \"etc/terminfo/g/gnome\",\n \"etc/terminfo/g/gnome-256color\",\n \"etc/terminfo/k/konsole\",\n \"etc/terminfo/k/konsole-256color\",\n \"etc/terminfo/k/konsole-linux\",\n \"etc/terminfo/l/linux\",\n \"etc/terminfo/p/putty\",\n \"etc/terminfo/p/putty-256color\",\n \"etc/terminfo/r/rxvt\",\n \"etc/terminfo/r/rxvt-256color\",\n \"etc/terminfo/s/screen\",\n \"etc/terminfo/s/screen-256color\",\n \"etc/terminfo/s/st-0.6\",\n \"etc/terminfo/s/st-0.7\",\n \"etc/terminfo/s/st-0.8\",\n \"etc/terminfo/s/st-0.8.5\",\n \"etc/terminfo/s/st-16color\",\n \"etc/terminfo/s/st-256color\",\n \"etc/terminfo/s/st-direct\",\n \"etc/terminfo/s/sun\",\n \"etc/terminfo/t/terminator\",\n \"etc/terminfo/t/terminology\",\n \"etc/terminfo/t/terminology-0.6.1\",\n \"etc/terminfo/t/terminology-1.0.0\",\n \"etc/terminfo/t/terminology-1.8.1\",\n \"etc/terminfo/t/tmux\",\n \"etc/terminfo/t/tmux-256color\",\n \"etc/terminfo/v/vt100\",\n \"etc/terminfo/v/vt102\",\n \"etc/terminfo/v/vt200\",\n \"etc/terminfo/v/vt220\",\n \"etc/terminfo/v/vt52\",\n \"etc/terminfo/v/vte\",\n \"etc/terminfo/v/vte-256color\",\n \"etc/terminfo/x/xterm\",\n \"etc/terminfo/x/xterm-256color\",\n \"etc/terminfo/x/xterm-color\",\n \"etc/terminfo/x/xterm-xfree86\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"readline@8.3.3-r1\",\n \"Name\": \"readline\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/readline@8.3.3-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"f50058781c93e1f2\"\n },\n \"Version\": \"8.3.3-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"readline\",\n \"SrcVersion\": \"8.3.3-r1\",\n \"Licenses\": [\n \"GPL-3.0-or-later\"\n ],\n \"Maintainer\": \"qaqland \\u003cqaq@qaq.land\\u003e\",\n \"DependsOn\": [\n \"libncursesw@6.6_p20260516-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:945b16e378bc00e44d89d4de8124bba7647fdf4d\",\n \"InstalledFiles\": [\n \"etc/inputrc\",\n \"usr/lib/libreadline.so.8\",\n \"usr/lib/libreadline.so.8.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"scanelf@1.3.9-r1\",\n \"Name\": \"scanelf\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/scanelf@1.3.9-r1?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"936394657a1626fb\"\n },\n \"Version\": \"1.3.9-r1\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"pax-utils\",\n \"SrcVersion\": \"1.3.9-r1\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:013f903d0ba219673aebbdd04f74bb5ed82b01f0\",\n \"InstalledFiles\": [\n \"usr/bin/scanelf\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"sqlite-libs@3.53.4-r0\",\n \"Name\": \"sqlite-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/sqlite-libs@3.53.4-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"8b10aee2ccc192de\"\n },\n \"Version\": \"3.53.4-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"sqlite\",\n \"SrcVersion\": \"3.53.4-r0\",\n \"Licenses\": [\n \"blessing\"\n ],\n \"Maintainer\": \"Jingyun Hua \\u003chuajingyun@loongson.cn\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:f7630ceb37c232b6609861aeab6cdb9cd120e6fa\",\n \"InstalledFiles\": [\n \"usr/lib/libsqlite3.so.0\",\n \"usr/lib/libsqlite3.so.3.53.4\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"ssl_client@1.37.0-r31\",\n \"Name\": \"ssl_client\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/ssl_client@1.37.0-r31?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"d42e31f15a4ce47a\"\n },\n \"Version\": \"1.37.0-r31\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"busybox\",\n \"SrcVersion\": \"1.37.0-r31\",\n \"Licenses\": [\n \"GPL-2.0-only\"\n ],\n \"Maintainer\": \"S\u00f6ren Tempel \\u003csoeren+alpine@soeren-tempel.net\\u003e\",\n \"DependsOn\": [\n \"libcrypto3@3.5.8-r0\",\n \"libssl3@3.5.8-r0\",\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:c220f4a5125a313af733e98def94132bb1e9d40d\",\n \"InstalledFiles\": [\n \"usr/bin/ssl_client\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"tzdata@2026c-r0\",\n \"Name\": \"tzdata\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/tzdata@2026c-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"52c6b50eff629f9d\"\n },\n \"Version\": \"2026c-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"tzdata\",\n \"SrcVersion\": \"2026c-r0\",\n \"Licenses\": [\n \"Public-Domain\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"Layer\": {\n \"Digest\": \"sha256:47393b668ce535d06e8967917d424c177e2ecccae83856d48b2e99164f8cc6cb\",\n \"DiffID\": \"sha256:3ca4be2c6e9ac0223715355253725381000486c2b45bfcb22cf571b6a85a12dd\"\n },\n \"Digest\": \"sha1:61f7544ecd8dd63eac23fe3e645702fda92ef02a\",\n \"InstalledFiles\": [\n \"usr/share/zoneinfo/CET\",\n \"usr/share/zoneinfo/CST6CDT\",\n \"usr/share/zoneinfo/Cuba\",\n \"usr/share/zoneinfo/EET\",\n \"usr/share/zoneinfo/EST\",\n \"usr/share/zoneinfo/EST5EDT\",\n \"usr/share/zoneinfo/Egypt\",\n \"usr/share/zoneinfo/Eire\",\n \"usr/share/zoneinfo/Factory\",\n \"usr/share/zoneinfo/GB\",\n \"usr/share/zoneinfo/GB-Eire\",\n \"usr/share/zoneinfo/GMT\",\n \"usr/share/zoneinfo/GMT+0\",\n \"usr/share/zoneinfo/GMT-0\",\n \"usr/share/zoneinfo/GMT0\",\n \"usr/share/zoneinfo/Greenwich\",\n \"usr/share/zoneinfo/HST\",\n \"usr/share/zoneinfo/Hongkong\",\n \"usr/share/zoneinfo/Iceland\",\n \"usr/share/zoneinfo/Iran\",\n \"usr/share/zoneinfo/Israel\",\n \"usr/share/zoneinfo/Jamaica\",\n \"usr/share/zoneinfo/Japan\",\n \"usr/share/zoneinfo/Kwajalein\",\n \"usr/share/zoneinfo/Libya\",\n \"usr/share/zoneinfo/MET\",\n \"usr/share/zoneinfo/MST\",\n \"usr/share/zoneinfo/MST7MDT\",\n \"usr/share/zoneinfo/NZ\",\n \"usr/share/zoneinfo/NZ-CHAT\",\n \"usr/share/zoneinfo/Navajo\",\n \"usr/share/zoneinfo/PRC\",\n \"usr/share/zoneinfo/PST8PDT\",\n \"usr/share/zoneinfo/Poland\",\n \"usr/share/zoneinfo/Portugal\",\n \"usr/share/zoneinfo/ROC\",\n \"usr/share/zoneinfo/ROK\",\n \"usr/share/zoneinfo/Singapore\",\n \"usr/share/zoneinfo/Turkey\",\n \"usr/share/zoneinfo/UCT\",\n \"usr/share/zoneinfo/UTC\",\n \"usr/share/zoneinfo/Universal\",\n \"usr/share/zoneinfo/W-SU\",\n \"usr/share/zoneinfo/WET\",\n \"usr/share/zoneinfo/Zulu\",\n \"usr/share/zoneinfo/iso3166.tab\",\n \"usr/share/zoneinfo/leap-seconds.list\",\n \"usr/share/zoneinfo/posixrules\",\n \"usr/share/zoneinfo/zone.tab\",\n \"usr/share/zoneinfo/zone1970.tab\",\n \"usr/share/zoneinfo/Africa/Abidjan\",\n \"usr/share/zoneinfo/Africa/Accra\",\n \"usr/share/zoneinfo/Africa/Addis_Ababa\",\n \"usr/share/zoneinfo/Africa/Algiers\",\n \"usr/share/zoneinfo/Africa/Asmara\",\n \"usr/share/zoneinfo/Africa/Asmera\",\n \"usr/share/zoneinfo/Africa/Bamako\",\n \"usr/share/zoneinfo/Africa/Bangui\",\n \"usr/share/zoneinfo/Africa/Banjul\",\n \"usr/share/zoneinfo/Africa/Bissau\",\n \"usr/share/zoneinfo/Africa/Blantyre\",\n \"usr/share/zoneinfo/Africa/Brazzaville\",\n \"usr/share/zoneinfo/Africa/Bujumbura\",\n \"usr/share/zoneinfo/Africa/Cairo\",\n \"usr/share/zoneinfo/Africa/Casablanca\",\n \"usr/share/zoneinfo/Africa/Ceuta\",\n \"usr/share/zoneinfo/Africa/Conakry\",\n \"usr/share/zoneinfo/Africa/Dakar\",\n \"usr/share/zoneinfo/Africa/Dar_es_Salaam\",\n \"usr/share/zoneinfo/Africa/Djibouti\",\n \"usr/share/zoneinfo/Africa/Douala\",\n \"usr/share/zoneinfo/Africa/El_Aaiun\",\n \"usr/share/zoneinfo/Africa/Freetown\",\n \"usr/share/zoneinfo/Africa/Gaborone\",\n \"usr/share/zoneinfo/Africa/Harare\",\n \"usr/share/zoneinfo/Africa/Johannesburg\",\n \"usr/share/zoneinfo/Africa/Juba\",\n \"usr/share/zoneinfo/Africa/Kampala\",\n \"usr/share/zoneinfo/Africa/Khartoum\",\n \"usr/share/zoneinfo/Africa/Kigali\",\n \"usr/share/zoneinfo/Africa/Kinshasa\",\n \"usr/share/zoneinfo/Africa/Lagos\",\n \"usr/share/zoneinfo/Africa/Libreville\",\n \"usr/share/zoneinfo/Africa/Lome\",\n \"usr/share/zoneinfo/Africa/Luanda\",\n \"usr/share/zoneinfo/Africa/Lubumbashi\",\n \"usr/share/zoneinfo/Africa/Lusaka\",\n \"usr/share/zoneinfo/Africa/Malabo\",\n \"usr/share/zoneinfo/Africa/Maputo\",\n \"usr/share/zoneinfo/Africa/Maseru\",\n \"usr/share/zoneinfo/Africa/Mbabane\",\n \"usr/share/zoneinfo/Africa/Mogadishu\",\n \"usr/share/zoneinfo/Africa/Monrovia\",\n \"usr/share/zoneinfo/Africa/Nairobi\",\n \"usr/share/zoneinfo/Africa/Ndjamena\",\n \"usr/share/zoneinfo/Africa/Niamey\",\n \"usr/share/zoneinfo/Africa/Nouakchott\",\n \"usr/share/zoneinfo/Africa/Ouagadougou\",\n \"usr/share/zoneinfo/Africa/Porto-Novo\",\n \"usr/share/zoneinfo/Africa/Sao_Tome\",\n \"usr/share/zoneinfo/Africa/Timbuktu\",\n \"usr/share/zoneinfo/Africa/Tripoli\",\n \"usr/share/zoneinfo/Africa/Tunis\",\n \"usr/share/zoneinfo/Africa/Windhoek\",\n \"usr/share/zoneinfo/America/Adak\",\n \"usr/share/zoneinfo/America/Anchorage\",\n \"usr/share/zoneinfo/America/Anguilla\",\n \"usr/share/zoneinfo/America/Antigua\",\n \"usr/share/zoneinfo/America/Araguaina\",\n \"usr/share/zoneinfo/America/Aruba\",\n \"usr/share/zoneinfo/America/Asuncion\",\n \"usr/share/zoneinfo/America/Atikokan\",\n \"usr/share/zoneinfo/America/Atka\",\n \"usr/share/zoneinfo/America/Bahia\",\n \"usr/share/zoneinfo/America/Bahia_Banderas\",\n \"usr/share/zoneinfo/America/Barbados\",\n \"usr/share/zoneinfo/America/Belem\",\n \"usr/share/zoneinfo/America/Belize\",\n \"usr/share/zoneinfo/America/Blanc-Sablon\",\n \"usr/share/zoneinfo/America/Boa_Vista\",\n \"usr/share/zoneinfo/America/Bogota\",\n \"usr/share/zoneinfo/America/Boise\",\n \"usr/share/zoneinfo/America/Buenos_Aires\",\n \"usr/share/zoneinfo/America/Cambridge_Bay\",\n \"usr/share/zoneinfo/America/Campo_Grande\",\n \"usr/share/zoneinfo/America/Cancun\",\n \"usr/share/zoneinfo/America/Caracas\",\n \"usr/share/zoneinfo/America/Catamarca\",\n \"usr/share/zoneinfo/America/Cayenne\",\n \"usr/share/zoneinfo/America/Cayman\",\n \"usr/share/zoneinfo/America/Chicago\",\n \"usr/share/zoneinfo/America/Chihuahua\",\n \"usr/share/zoneinfo/America/Ciudad_Juarez\",\n \"usr/share/zoneinfo/America/Coral_Harbour\",\n \"usr/share/zoneinfo/America/Cordoba\",\n \"usr/share/zoneinfo/America/Costa_Rica\",\n \"usr/share/zoneinfo/America/Coyhaique\",\n \"usr/share/zoneinfo/America/Creston\",\n \"usr/share/zoneinfo/America/Cuiaba\",\n \"usr/share/zoneinfo/America/Curacao\",\n \"usr/share/zoneinfo/America/Danmarkshavn\",\n \"usr/share/zoneinfo/America/Dawson\",\n \"usr/share/zoneinfo/America/Dawson_Creek\",\n \"usr/share/zoneinfo/America/Denver\",\n \"usr/share/zoneinfo/America/Detroit\",\n \"usr/share/zoneinfo/America/Dominica\",\n \"usr/share/zoneinfo/America/Edmonton\",\n \"usr/share/zoneinfo/America/Eirunepe\",\n \"usr/share/zoneinfo/America/El_Salvador\",\n \"usr/share/zoneinfo/America/Ensenada\",\n \"usr/share/zoneinfo/America/Fort_Nelson\",\n \"usr/share/zoneinfo/America/Fort_Wayne\",\n \"usr/share/zoneinfo/America/Fortaleza\",\n \"usr/share/zoneinfo/America/Glace_Bay\",\n \"usr/share/zoneinfo/America/Godthab\",\n \"usr/share/zoneinfo/America/Goose_Bay\",\n \"usr/share/zoneinfo/America/Grand_Turk\",\n \"usr/share/zoneinfo/America/Grenada\",\n \"usr/share/zoneinfo/America/Guadeloupe\",\n \"usr/share/zoneinfo/America/Guatemala\",\n \"usr/share/zoneinfo/America/Guayaquil\",\n \"usr/share/zoneinfo/America/Guyana\",\n \"usr/share/zoneinfo/America/Halifax\",\n \"usr/share/zoneinfo/America/Havana\",\n \"usr/share/zoneinfo/America/Hermosillo\",\n \"usr/share/zoneinfo/America/Indianapolis\",\n \"usr/share/zoneinfo/America/Inuvik\",\n \"usr/share/zoneinfo/America/Iqaluit\",\n \"usr/share/zoneinfo/America/Jamaica\",\n \"usr/share/zoneinfo/America/Jujuy\",\n \"usr/share/zoneinfo/America/Juneau\",\n \"usr/share/zoneinfo/America/Knox_IN\",\n \"usr/share/zoneinfo/America/Kralendijk\",\n \"usr/share/zoneinfo/America/La_Paz\",\n \"usr/share/zoneinfo/America/Lima\",\n \"usr/share/zoneinfo/America/Los_Angeles\",\n \"usr/share/zoneinfo/America/Louisville\",\n \"usr/share/zoneinfo/America/Lower_Princes\",\n \"usr/share/zoneinfo/America/Maceio\",\n \"usr/share/zoneinfo/America/Managua\",\n \"usr/share/zoneinfo/America/Manaus\",\n \"usr/share/zoneinfo/America/Marigot\",\n \"usr/share/zoneinfo/America/Martinique\",\n \"usr/share/zoneinfo/America/Matamoros\",\n \"usr/share/zoneinfo/America/Mazatlan\",\n \"usr/share/zoneinfo/America/Mendoza\",\n \"usr/share/zoneinfo/America/Menominee\",\n \"usr/share/zoneinfo/America/Merida\",\n \"usr/share/zoneinfo/America/Metlakatla\",\n \"usr/share/zoneinfo/America/Mexico_City\",\n \"usr/share/zoneinfo/America/Miquelon\",\n \"usr/share/zoneinfo/America/Moncton\",\n \"usr/share/zoneinfo/America/Monterrey\",\n \"usr/share/zoneinfo/America/Montevideo\",\n \"usr/share/zoneinfo/America/Montreal\",\n \"usr/share/zoneinfo/America/Montserrat\",\n \"usr/share/zoneinfo/America/Nassau\",\n \"usr/share/zoneinfo/America/New_York\",\n \"usr/share/zoneinfo/America/Nipigon\",\n \"usr/share/zoneinfo/America/Nome\",\n \"usr/share/zoneinfo/America/Noronha\",\n \"usr/share/zoneinfo/America/Nuuk\",\n \"usr/share/zoneinfo/America/Ojinaga\",\n \"usr/share/zoneinfo/America/Panama\",\n \"usr/share/zoneinfo/America/Pangnirtung\",\n \"usr/share/zoneinfo/America/Paramaribo\",\n \"usr/share/zoneinfo/America/Phoenix\",\n \"usr/share/zoneinfo/America/Port-au-Prince\",\n \"usr/share/zoneinfo/America/Port_of_Spain\",\n \"usr/share/zoneinfo/America/Porto_Acre\",\n \"usr/share/zoneinfo/America/Porto_Velho\",\n \"usr/share/zoneinfo/America/Puerto_Rico\",\n \"usr/share/zoneinfo/America/Punta_Arenas\",\n \"usr/share/zoneinfo/America/Rainy_River\",\n \"usr/share/zoneinfo/America/Rankin_Inlet\",\n \"usr/share/zoneinfo/America/Recife\",\n \"usr/share/zoneinfo/America/Regina\",\n \"usr/share/zoneinfo/America/Resolute\",\n \"usr/share/zoneinfo/America/Rio_Branco\",\n \"usr/share/zoneinfo/America/Rosario\",\n \"usr/share/zoneinfo/America/Santa_Isabel\",\n \"usr/share/zoneinfo/America/Santarem\",\n \"usr/share/zoneinfo/America/Santiago\",\n \"usr/share/zoneinfo/America/Santo_Domingo\",\n \"usr/share/zoneinfo/America/Sao_Paulo\",\n \"usr/share/zoneinfo/America/Scoresbysund\",\n \"usr/share/zoneinfo/America/Shiprock\",\n \"usr/share/zoneinfo/America/Sitka\",\n \"usr/share/zoneinfo/America/St_Barthelemy\",\n \"usr/share/zoneinfo/America/St_Johns\",\n \"usr/share/zoneinfo/America/St_Kitts\",\n \"usr/share/zoneinfo/America/St_Lucia\",\n \"usr/share/zoneinfo/America/St_Thomas\",\n \"usr/share/zoneinfo/America/St_Vincent\",\n \"usr/share/zoneinfo/America/Swift_Current\",\n \"usr/share/zoneinfo/America/Tegucigalpa\",\n \"usr/share/zoneinfo/America/Thule\",\n \"usr/share/zoneinfo/America/Thunder_Bay\",\n \"usr/share/zoneinfo/America/Tijuana\",\n \"usr/share/zoneinfo/America/Toronto\",\n \"usr/share/zoneinfo/America/Tortola\",\n \"usr/share/zoneinfo/America/Vancouver\",\n \"usr/share/zoneinfo/America/Virgin\",\n \"usr/share/zoneinfo/America/Whitehorse\",\n \"usr/share/zoneinfo/America/Winnipeg\",\n \"usr/share/zoneinfo/America/Yakutat\",\n \"usr/share/zoneinfo/America/Yellowknife\",\n \"usr/share/zoneinfo/America/Argentina/Buenos_Aires\",\n \"usr/share/zoneinfo/America/Argentina/Catamarca\",\n \"usr/share/zoneinfo/America/Argentina/ComodRivadavia\",\n \"usr/share/zoneinfo/America/Argentina/Cordoba\",\n \"usr/share/zoneinfo/America/Argentina/Jujuy\",\n \"usr/share/zoneinfo/America/Argentina/La_Rioja\",\n \"usr/share/zoneinfo/America/Argentina/Mendoza\",\n \"usr/share/zoneinfo/America/Argentina/Rio_Gallegos\",\n \"usr/share/zoneinfo/America/Argentina/Salta\",\n \"usr/share/zoneinfo/America/Argentina/San_Juan\",\n \"usr/share/zoneinfo/America/Argentina/San_Luis\",\n \"usr/share/zoneinfo/America/Argentina/Tucuman\",\n \"usr/share/zoneinfo/America/Argentina/Ushuaia\",\n \"usr/share/zoneinfo/America/Indiana/Indianapolis\",\n \"usr/share/zoneinfo/America/Indiana/Knox\",\n \"usr/share/zoneinfo/America/Indiana/Marengo\",\n \"usr/share/zoneinfo/America/Indiana/Petersburg\",\n \"usr/share/zoneinfo/America/Indiana/Tell_City\",\n \"usr/share/zoneinfo/America/Indiana/Vevay\",\n \"usr/share/zoneinfo/America/Indiana/Vincennes\",\n \"usr/share/zoneinfo/America/Indiana/Winamac\",\n \"usr/share/zoneinfo/America/Kentucky/Louisville\",\n \"usr/share/zoneinfo/America/Kentucky/Monticello\",\n \"usr/share/zoneinfo/America/North_Dakota/Beulah\",\n \"usr/share/zoneinfo/America/North_Dakota/Center\",\n \"usr/share/zoneinfo/America/North_Dakota/New_Salem\",\n \"usr/share/zoneinfo/Antarctica/Casey\",\n \"usr/share/zoneinfo/Antarctica/Davis\",\n \"usr/share/zoneinfo/Antarctica/DumontDUrville\",\n \"usr/share/zoneinfo/Antarctica/Macquarie\",\n \"usr/share/zoneinfo/Antarctica/Mawson\",\n \"usr/share/zoneinfo/Antarctica/McMurdo\",\n \"usr/share/zoneinfo/Antarctica/Palmer\",\n \"usr/share/zoneinfo/Antarctica/Rothera\",\n \"usr/share/zoneinfo/Antarctica/South_Pole\",\n \"usr/share/zoneinfo/Antarctica/Syowa\",\n \"usr/share/zoneinfo/Antarctica/Troll\",\n \"usr/share/zoneinfo/Antarctica/Vostok\",\n \"usr/share/zoneinfo/Arctic/Longyearbyen\",\n \"usr/share/zoneinfo/Asia/Aden\",\n \"usr/share/zoneinfo/Asia/Almaty\",\n \"usr/share/zoneinfo/Asia/Amman\",\n \"usr/share/zoneinfo/Asia/Anadyr\",\n \"usr/share/zoneinfo/Asia/Aqtau\",\n \"usr/share/zoneinfo/Asia/Aqtobe\",\n \"usr/share/zoneinfo/Asia/Ashgabat\",\n \"usr/share/zoneinfo/Asia/Ashkhabad\",\n \"usr/share/zoneinfo/Asia/Atyrau\",\n \"usr/share/zoneinfo/Asia/Baghdad\",\n \"usr/share/zoneinfo/Asia/Bahrain\",\n \"usr/share/zoneinfo/Asia/Baku\",\n \"usr/share/zoneinfo/Asia/Bangkok\",\n \"usr/share/zoneinfo/Asia/Barnaul\",\n \"usr/share/zoneinfo/Asia/Beirut\",\n \"usr/share/zoneinfo/Asia/Bishkek\",\n \"usr/share/zoneinfo/Asia/Brunei\",\n \"usr/share/zoneinfo/Asia/Calcutta\",\n \"usr/share/zoneinfo/Asia/Chita\",\n \"usr/share/zoneinfo/Asia/Choibalsan\",\n \"usr/share/zoneinfo/Asia/Chongqing\",\n \"usr/share/zoneinfo/Asia/Chungking\",\n \"usr/share/zoneinfo/Asia/Colombo\",\n \"usr/share/zoneinfo/Asia/Dacca\",\n \"usr/share/zoneinfo/Asia/Damascus\",\n \"usr/share/zoneinfo/Asia/Dhaka\",\n \"usr/share/zoneinfo/Asia/Dili\",\n \"usr/share/zoneinfo/Asia/Dubai\",\n \"usr/share/zoneinfo/Asia/Dushanbe\",\n \"usr/share/zoneinfo/Asia/Famagusta\",\n \"usr/share/zoneinfo/Asia/Gaza\",\n \"usr/share/zoneinfo/Asia/Harbin\",\n \"usr/share/zoneinfo/Asia/Hebron\",\n \"usr/share/zoneinfo/Asia/Ho_Chi_Minh\",\n \"usr/share/zoneinfo/Asia/Hong_Kong\",\n \"usr/share/zoneinfo/Asia/Hovd\",\n \"usr/share/zoneinfo/Asia/Irkutsk\",\n \"usr/share/zoneinfo/Asia/Istanbul\",\n \"usr/share/zoneinfo/Asia/Jakarta\",\n \"usr/share/zoneinfo/Asia/Jayapura\",\n \"usr/share/zoneinfo/Asia/Jerusalem\",\n \"usr/share/zoneinfo/Asia/Kabul\",\n \"usr/share/zoneinfo/Asia/Kamchatka\",\n \"usr/share/zoneinfo/Asia/Karachi\",\n \"usr/share/zoneinfo/Asia/Kashgar\",\n \"usr/share/zoneinfo/Asia/Kathmandu\",\n \"usr/share/zoneinfo/Asia/Katmandu\",\n \"usr/share/zoneinfo/Asia/Khandyga\",\n \"usr/share/zoneinfo/Asia/Kolkata\",\n \"usr/share/zoneinfo/Asia/Krasnoyarsk\",\n \"usr/share/zoneinfo/Asia/Kuala_Lumpur\",\n \"usr/share/zoneinfo/Asia/Kuching\",\n \"usr/share/zoneinfo/Asia/Kuwait\",\n \"usr/share/zoneinfo/Asia/Macao\",\n \"usr/share/zoneinfo/Asia/Macau\",\n \"usr/share/zoneinfo/Asia/Magadan\",\n \"usr/share/zoneinfo/Asia/Makassar\",\n \"usr/share/zoneinfo/Asia/Manila\",\n \"usr/share/zoneinfo/Asia/Muscat\",\n \"usr/share/zoneinfo/Asia/Nicosia\",\n \"usr/share/zoneinfo/Asia/Novokuznetsk\",\n \"usr/share/zoneinfo/Asia/Novosibirsk\",\n \"usr/share/zoneinfo/Asia/Omsk\",\n \"usr/share/zoneinfo/Asia/Oral\",\n \"usr/share/zoneinfo/Asia/Phnom_Penh\",\n \"usr/share/zoneinfo/Asia/Pontianak\",\n \"usr/share/zoneinfo/Asia/Pyongyang\",\n \"usr/share/zoneinfo/Asia/Qatar\",\n \"usr/share/zoneinfo/Asia/Qostanay\",\n \"usr/share/zoneinfo/Asia/Qyzylorda\",\n \"usr/share/zoneinfo/Asia/Rangoon\",\n \"usr/share/zoneinfo/Asia/Riyadh\",\n \"usr/share/zoneinfo/Asia/Saigon\",\n \"usr/share/zoneinfo/Asia/Sakhalin\",\n \"usr/share/zoneinfo/Asia/Samarkand\",\n \"usr/share/zoneinfo/Asia/Seoul\",\n \"usr/share/zoneinfo/Asia/Shanghai\",\n \"usr/share/zoneinfo/Asia/Singapore\",\n \"usr/share/zoneinfo/Asia/Srednekolymsk\",\n \"usr/share/zoneinfo/Asia/Taipei\",\n \"usr/share/zoneinfo/Asia/Tashkent\",\n \"usr/share/zoneinfo/Asia/Tbilisi\",\n \"usr/share/zoneinfo/Asia/Tehran\",\n \"usr/share/zoneinfo/Asia/Tel_Aviv\",\n \"usr/share/zoneinfo/Asia/Thimbu\",\n \"usr/share/zoneinfo/Asia/Thimphu\",\n \"usr/share/zoneinfo/Asia/Tokyo\",\n \"usr/share/zoneinfo/Asia/Tomsk\",\n \"usr/share/zoneinfo/Asia/Ujung_Pandang\",\n \"usr/share/zoneinfo/Asia/Ulaanbaatar\",\n \"usr/share/zoneinfo/Asia/Ulan_Bator\",\n \"usr/share/zoneinfo/Asia/Urumqi\",\n \"usr/share/zoneinfo/Asia/Ust-Nera\",\n \"usr/share/zoneinfo/Asia/Vientiane\",\n \"usr/share/zoneinfo/Asia/Vladivostok\",\n \"usr/share/zoneinfo/Asia/Yakutsk\",\n \"usr/share/zoneinfo/Asia/Yangon\",\n \"usr/share/zoneinfo/Asia/Yekaterinburg\",\n \"usr/share/zoneinfo/Asia/Yerevan\",\n \"usr/share/zoneinfo/Atlantic/Azores\",\n \"usr/share/zoneinfo/Atlantic/Bermuda\",\n \"usr/share/zoneinfo/Atlantic/Canary\",\n \"usr/share/zoneinfo/Atlantic/Cape_Verde\",\n \"usr/share/zoneinfo/Atlantic/Faeroe\",\n \"usr/share/zoneinfo/Atlantic/Faroe\",\n \"usr/share/zoneinfo/Atlantic/Jan_Mayen\",\n \"usr/share/zoneinfo/Atlantic/Madeira\",\n \"usr/share/zoneinfo/Atlantic/Reykjavik\",\n \"usr/share/zoneinfo/Atlantic/South_Georgia\",\n \"usr/share/zoneinfo/Atlantic/St_Helena\",\n \"usr/share/zoneinfo/Atlantic/Stanley\",\n \"usr/share/zoneinfo/Australia/ACT\",\n \"usr/share/zoneinfo/Australia/Adelaide\",\n \"usr/share/zoneinfo/Australia/Brisbane\",\n \"usr/share/zoneinfo/Australia/Broken_Hill\",\n \"usr/share/zoneinfo/Australia/Canberra\",\n \"usr/share/zoneinfo/Australia/Currie\",\n \"usr/share/zoneinfo/Australia/Darwin\",\n \"usr/share/zoneinfo/Australia/Eucla\",\n \"usr/share/zoneinfo/Australia/Hobart\",\n \"usr/share/zoneinfo/Australia/LHI\",\n \"usr/share/zoneinfo/Australia/Lindeman\",\n \"usr/share/zoneinfo/Australia/Lord_Howe\",\n \"usr/share/zoneinfo/Australia/Melbourne\",\n \"usr/share/zoneinfo/Australia/NSW\",\n \"usr/share/zoneinfo/Australia/North\",\n \"usr/share/zoneinfo/Australia/Perth\",\n \"usr/share/zoneinfo/Australia/Queensland\",\n \"usr/share/zoneinfo/Australia/South\",\n \"usr/share/zoneinfo/Australia/Sydney\",\n \"usr/share/zoneinfo/Australia/Tasmania\",\n \"usr/share/zoneinfo/Australia/Victoria\",\n \"usr/share/zoneinfo/Australia/West\",\n \"usr/share/zoneinfo/Australia/Yancowinna\",\n \"usr/share/zoneinfo/Brazil/Acre\",\n \"usr/share/zoneinfo/Brazil/DeNoronha\",\n \"usr/share/zoneinfo/Brazil/East\",\n \"usr/share/zoneinfo/Brazil/West\",\n \"usr/share/zoneinfo/Canada/Atlantic\",\n \"usr/share/zoneinfo/Canada/Central\",\n \"usr/share/zoneinfo/Canada/Eastern\",\n \"usr/share/zoneinfo/Canada/Mountain\",\n \"usr/share/zoneinfo/Canada/Newfoundland\",\n \"usr/share/zoneinfo/Canada/Pacific\",\n \"usr/share/zoneinfo/Canada/Saskatchewan\",\n \"usr/share/zoneinfo/Canada/Yukon\",\n \"usr/share/zoneinfo/Chile/Continental\",\n \"usr/share/zoneinfo/Chile/EasterIsland\",\n \"usr/share/zoneinfo/Etc/GMT\",\n \"usr/share/zoneinfo/Etc/GMT+0\",\n \"usr/share/zoneinfo/Etc/GMT+1\",\n \"usr/share/zoneinfo/Etc/GMT+10\",\n \"usr/share/zoneinfo/Etc/GMT+11\",\n \"usr/share/zoneinfo/Etc/GMT+12\",\n \"usr/share/zoneinfo/Etc/GMT+2\",\n \"usr/share/zoneinfo/Etc/GMT+3\",\n \"usr/share/zoneinfo/Etc/GMT+4\",\n \"usr/share/zoneinfo/Etc/GMT+5\",\n \"usr/share/zoneinfo/Etc/GMT+6\",\n \"usr/share/zoneinfo/Etc/GMT+7\",\n \"usr/share/zoneinfo/Etc/GMT+8\",\n \"usr/share/zoneinfo/Etc/GMT+9\",\n \"usr/share/zoneinfo/Etc/GMT-0\",\n \"usr/share/zoneinfo/Etc/GMT-1\",\n \"usr/share/zoneinfo/Etc/GMT-10\",\n \"usr/share/zoneinfo/Etc/GMT-11\",\n \"usr/share/zoneinfo/Etc/GMT-12\",\n \"usr/share/zoneinfo/Etc/GMT-13\",\n \"usr/share/zoneinfo/Etc/GMT-14\",\n \"usr/share/zoneinfo/Etc/GMT-2\",\n \"usr/share/zoneinfo/Etc/GMT-3\",\n \"usr/share/zoneinfo/Etc/GMT-4\",\n \"usr/share/zoneinfo/Etc/GMT-5\",\n \"usr/share/zoneinfo/Etc/GMT-6\",\n \"usr/share/zoneinfo/Etc/GMT-7\",\n \"usr/share/zoneinfo/Etc/GMT-8\",\n \"usr/share/zoneinfo/Etc/GMT-9\",\n \"usr/share/zoneinfo/Etc/GMT0\",\n \"usr/share/zoneinfo/Etc/Greenwich\",\n \"usr/share/zoneinfo/Etc/UCT\",\n \"usr/share/zoneinfo/Etc/UTC\",\n \"usr/share/zoneinfo/Etc/Universal\",\n \"usr/share/zoneinfo/Etc/Zulu\",\n \"usr/share/zoneinfo/Europe/Amsterdam\",\n \"usr/share/zoneinfo/Europe/Andorra\",\n \"usr/share/zoneinfo/Europe/Astrakhan\",\n \"usr/share/zoneinfo/Europe/Athens\",\n \"usr/share/zoneinfo/Europe/Belfast\",\n \"usr/share/zoneinfo/Europe/Belgrade\",\n \"usr/share/zoneinfo/Europe/Berlin\",\n \"usr/share/zoneinfo/Europe/Bratislava\",\n \"usr/share/zoneinfo/Europe/Brussels\",\n \"usr/share/zoneinfo/Europe/Bucharest\",\n \"usr/share/zoneinfo/Europe/Budapest\",\n \"usr/share/zoneinfo/Europe/Busingen\",\n \"usr/share/zoneinfo/Europe/Chisinau\",\n \"usr/share/zoneinfo/Europe/Copenhagen\",\n \"usr/share/zoneinfo/Europe/Dublin\",\n \"usr/share/zoneinfo/Europe/Gibraltar\",\n \"usr/share/zoneinfo/Europe/Guernsey\",\n \"usr/share/zoneinfo/Europe/Helsinki\",\n \"usr/share/zoneinfo/Europe/Isle_of_Man\",\n \"usr/share/zoneinfo/Europe/Istanbul\",\n \"usr/share/zoneinfo/Europe/Jersey\",\n \"usr/share/zoneinfo/Europe/Kaliningrad\",\n \"usr/share/zoneinfo/Europe/Kiev\",\n \"usr/share/zoneinfo/Europe/Kirov\",\n \"usr/share/zoneinfo/Europe/Kyiv\",\n \"usr/share/zoneinfo/Europe/Lisbon\",\n \"usr/share/zoneinfo/Europe/Ljubljana\",\n \"usr/share/zoneinfo/Europe/London\",\n \"usr/share/zoneinfo/Europe/Luxembourg\",\n \"usr/share/zoneinfo/Europe/Madrid\",\n \"usr/share/zoneinfo/Europe/Malta\",\n \"usr/share/zoneinfo/Europe/Mariehamn\",\n \"usr/share/zoneinfo/Europe/Minsk\",\n \"usr/share/zoneinfo/Europe/Monaco\",\n \"usr/share/zoneinfo/Europe/Moscow\",\n \"usr/share/zoneinfo/Europe/Nicosia\",\n \"usr/share/zoneinfo/Europe/Oslo\",\n \"usr/share/zoneinfo/Europe/Paris\",\n \"usr/share/zoneinfo/Europe/Podgorica\",\n \"usr/share/zoneinfo/Europe/Prague\",\n \"usr/share/zoneinfo/Europe/Riga\",\n \"usr/share/zoneinfo/Europe/Rome\",\n \"usr/share/zoneinfo/Europe/Samara\",\n \"usr/share/zoneinfo/Europe/San_Marino\",\n \"usr/share/zoneinfo/Europe/Sarajevo\",\n \"usr/share/zoneinfo/Europe/Saratov\",\n \"usr/share/zoneinfo/Europe/Simferopol\",\n \"usr/share/zoneinfo/Europe/Skopje\",\n \"usr/share/zoneinfo/Europe/Sofia\",\n \"usr/share/zoneinfo/Europe/Stockholm\",\n \"usr/share/zoneinfo/Europe/Tallinn\",\n \"usr/share/zoneinfo/Europe/Tirane\",\n \"usr/share/zoneinfo/Europe/Tiraspol\",\n \"usr/share/zoneinfo/Europe/Ulyanovsk\",\n \"usr/share/zoneinfo/Europe/Uzhgorod\",\n \"usr/share/zoneinfo/Europe/Vaduz\",\n \"usr/share/zoneinfo/Europe/Vatican\",\n \"usr/share/zoneinfo/Europe/Vienna\",\n \"usr/share/zoneinfo/Europe/Vilnius\",\n \"usr/share/zoneinfo/Europe/Volgograd\",\n \"usr/share/zoneinfo/Europe/Warsaw\",\n \"usr/share/zoneinfo/Europe/Zagreb\",\n \"usr/share/zoneinfo/Europe/Zaporozhye\",\n \"usr/share/zoneinfo/Europe/Zurich\",\n \"usr/share/zoneinfo/Indian/Antananarivo\",\n \"usr/share/zoneinfo/Indian/Chagos\",\n \"usr/share/zoneinfo/Indian/Christmas\",\n \"usr/share/zoneinfo/Indian/Cocos\",\n \"usr/share/zoneinfo/Indian/Comoro\",\n \"usr/share/zoneinfo/Indian/Kerguelen\",\n \"usr/share/zoneinfo/Indian/Mahe\",\n \"usr/share/zoneinfo/Indian/Maldives\",\n \"usr/share/zoneinfo/Indian/Mauritius\",\n \"usr/share/zoneinfo/Indian/Mayotte\",\n \"usr/share/zoneinfo/Indian/Reunion\",\n \"usr/share/zoneinfo/Mexico/BajaNorte\",\n \"usr/share/zoneinfo/Mexico/BajaSur\",\n \"usr/share/zoneinfo/Mexico/General\",\n \"usr/share/zoneinfo/Pacific/Apia\",\n \"usr/share/zoneinfo/Pacific/Auckland\",\n \"usr/share/zoneinfo/Pacific/Bougainville\",\n \"usr/share/zoneinfo/Pacific/Chatham\",\n \"usr/share/zoneinfo/Pacific/Chuuk\",\n \"usr/share/zoneinfo/Pacific/Easter\",\n \"usr/share/zoneinfo/Pacific/Efate\",\n \"usr/share/zoneinfo/Pacific/Enderbury\",\n \"usr/share/zoneinfo/Pacific/Fakaofo\",\n \"usr/share/zoneinfo/Pacific/Fiji\",\n \"usr/share/zoneinfo/Pacific/Funafuti\",\n \"usr/share/zoneinfo/Pacific/Galapagos\",\n \"usr/share/zoneinfo/Pacific/Gambier\",\n \"usr/share/zoneinfo/Pacific/Guadalcanal\",\n \"usr/share/zoneinfo/Pacific/Guam\",\n \"usr/share/zoneinfo/Pacific/Honolulu\",\n \"usr/share/zoneinfo/Pacific/Johnston\",\n \"usr/share/zoneinfo/Pacific/Kanton\",\n \"usr/share/zoneinfo/Pacific/Kiritimati\",\n \"usr/share/zoneinfo/Pacific/Kosrae\",\n \"usr/share/zoneinfo/Pacific/Kwajalein\",\n \"usr/share/zoneinfo/Pacific/Majuro\",\n \"usr/share/zoneinfo/Pacific/Marquesas\",\n \"usr/share/zoneinfo/Pacific/Midway\",\n \"usr/share/zoneinfo/Pacific/Nauru\",\n \"usr/share/zoneinfo/Pacific/Niue\",\n \"usr/share/zoneinfo/Pacific/Norfolk\",\n \"usr/share/zoneinfo/Pacific/Noumea\",\n \"usr/share/zoneinfo/Pacific/Pago_Pago\",\n \"usr/share/zoneinfo/Pacific/Palau\",\n \"usr/share/zoneinfo/Pacific/Pitcairn\",\n \"usr/share/zoneinfo/Pacific/Pohnpei\",\n \"usr/share/zoneinfo/Pacific/Ponape\",\n \"usr/share/zoneinfo/Pacific/Port_Moresby\",\n \"usr/share/zoneinfo/Pacific/Rarotonga\",\n \"usr/share/zoneinfo/Pacific/Saipan\",\n \"usr/share/zoneinfo/Pacific/Samoa\",\n \"usr/share/zoneinfo/Pacific/Tahiti\",\n \"usr/share/zoneinfo/Pacific/Tarawa\",\n \"usr/share/zoneinfo/Pacific/Tongatapu\",\n \"usr/share/zoneinfo/Pacific/Truk\",\n \"usr/share/zoneinfo/Pacific/Wake\",\n \"usr/share/zoneinfo/Pacific/Wallis\",\n \"usr/share/zoneinfo/Pacific/Yap\",\n \"usr/share/zoneinfo/US/Alaska\",\n \"usr/share/zoneinfo/US/Aleutian\",\n \"usr/share/zoneinfo/US/Arizona\",\n \"usr/share/zoneinfo/US/Central\",\n \"usr/share/zoneinfo/US/East-Indiana\",\n \"usr/share/zoneinfo/US/Eastern\",\n \"usr/share/zoneinfo/US/Hawaii\",\n \"usr/share/zoneinfo/US/Indiana-Starke\",\n \"usr/share/zoneinfo/US/Michigan\",\n \"usr/share/zoneinfo/US/Mountain\",\n \"usr/share/zoneinfo/US/Pacific\",\n \"usr/share/zoneinfo/US/Samoa\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"xz-libs@5.8.3-r0\",\n \"Name\": \"xz-libs\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/xz-libs@5.8.3-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"1ae658a5f132a091\"\n },\n \"Version\": \"5.8.3-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"xz\",\n \"SrcVersion\": \"5.8.3-r0\",\n \"Licenses\": [\n \"GPL-2.0-or-later\",\n \"0BSD\",\n \"Public-Domain\",\n \"LGPL-2.1-or-later\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:2014fd3d47b2c2dd4dedc765822ac60ae269f3efa0e614f46ae29f540c7f1235\",\n \"DiffID\": \"sha256:e5ccda0fbf6b54d343e024156d876553ba57d3926d7196584b3a1ce4df016366\"\n },\n \"Digest\": \"sha1:4c92c5be0c5bef404e93c880eba9037a9b147347\",\n \"InstalledFiles\": [\n \"usr/lib/liblzma.so.5\",\n \"usr/lib/liblzma.so.5.8.3\"\n ],\n \"AnalyzedBy\": \"apk\"\n },\n {\n \"ID\": \"zlib@1.3.2-r0\",\n \"Name\": \"zlib\",\n \"Identifier\": {\n \"PURL\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e37054a2982d6c16\"\n },\n \"Version\": \"1.3.2-r0\",\n \"Arch\": \"x86_64\",\n \"SrcName\": \"zlib\",\n \"SrcVersion\": \"1.3.2-r0\",\n \"Licenses\": [\n \"Zlib\"\n ],\n \"Maintainer\": \"Natanael Copa \\u003cncopa@alpinelinux.org\\u003e\",\n \"DependsOn\": [\n \"musl@1.2.6-r2\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"Digest\": \"sha1:dd4c3d102acaef2a71a1495951d55fabc8680613\",\n \"InstalledFiles\": [\n \"usr/lib/libz.so.1\",\n \"usr/lib/libz.so.1.3.2\"\n ],\n \"AnalyzedBy\": \"apk\"\n }\n ],\n \"Vulnerabilities\": [\n {\n \"VulnerabilityID\": \"CVE-2026-85091\",\n \"PkgID\": \"zlib@1.3.2-r0\",\n \"PkgName\": \"zlib\",\n \"PkgIdentifier\": {\n \"PURL\": \"pkg:apk/alpine/zlib@1.3.2-r0?arch=x86_64\\u0026distro=3.24.1\",\n \"UID\": \"e37054a2982d6c16\"\n },\n \"InstalledVersion\": \"1.3.2-r0\",\n \"FixedVersion\": \"1.3.2-r1\",\n \"Status\": \"fixed\",\n \"Layer\": {\n \"Digest\": \"sha256:55afa1ecc21d2bb5e5045f32dafee56272ffd89860bac26f6c32123439af26a4\",\n \"DiffID\": \"sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c\"\n },\n \"PrimaryURL\": \"https://avd.aquasec.com/nvd/cve-2026-85091\",\n \"DataSource\": {\n \"ID\": \"alpine\",\n \"Name\": \"Alpine Secdb\",\n \"URL\": \"https://secdb.alpinelinux.org/\"\n },\n \"Fingerprint\": \"sha256:d73c01b020c55acc174a3fde47c8af6f5638c58c7189c817edd6862029f6c5f5\",\n \"Title\": \"zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vul ...\",\n \"Description\": \"zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.\",\n \"Severity\": \"MEDIUM\",\n \"CweIDs\": [\n \"CWE-787\"\n ],\n \"VendorSeverity\": {\n \"ubuntu\": 2\n },\n \"References\": [\n \"https://gist.github.com/thesmartshadow/e0b9481792afb7c31e86fee1ff084490\",\n \"https://github.com/madler/zlib\",\n \"https://github.com/madler/zlib/blob/v1.3.2/gzwrite.c#L393\",\n \"https://www.cve.org/CVERecord?id=CVE-2026-85091\",\n \"https://www.vulncheck.com/advisories/zlib-1.3.1.2-through-1.3.2-heap-buffer-overflow-via-gz-vacate\"\n ],\n \"PublishedDate\": \"2026-09-03T13:06:20.573Z\",\n \"LastModifiedDate\": \"2026-09-09T20:41:07.123Z\"\n }\n ]\n },\n {\n \"Target\": \"Python\",\n \"Class\": \"lang-pkgs\",\n \"Type\": \"python-pkg\",\n \"Packages\": [\n {\n \"Name\": \"PyJWT\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/pyjwt@2.15.1\",\n \"UID\": \"d3f5f9a421b8abc9\"\n },\n \"Version\": \"2.15.1\",\n \"Licenses\": [\n \"MIT\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"cffi\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/cffi@2.1.1\",\n \"UID\": \"21042e2f37e33c05\"\n },\n \"Version\": \"2.1.1\",\n \"Licenses\": [\n \"MIT-0\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"cryptography\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/cryptography@50.0.1\",\n \"UID\": \"dcb3df6383fe2a60\"\n },\n \"Version\": \"50.0.1\",\n \"Licenses\": [\n \"Apache-2.0 OR BSD-3-Clause\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/cryptography-50.0.1.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"informed-decision\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/informed-decision@0.2.0\",\n \"UID\": \"7989f2afae8ff568\"\n },\n \"Version\": \"0.2.0\",\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/informed_decision-0.2.0.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"pycparser\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/pycparser@3.0\",\n \"UID\": \"e5a4d03f15a695ff\"\n },\n \"Version\": \"3.0\",\n \"Licenses\": [\n \"BSD-3-Clause\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n },\n {\n \"Name\": \"waitress\",\n \"Identifier\": {\n \"PURL\": \"pkg:pypi/waitress@3.0.2\",\n \"UID\": \"806e218e1c1e85f\"\n },\n \"Version\": \"3.0.2\",\n \"Licenses\": [\n \"ZPL-2.1\"\n ],\n \"Layer\": {\n \"Digest\": \"sha256:82ff17b555d91096dd328eb1e829daaeba9a48d7757143d0b97c35a721f6fb87\",\n \"DiffID\": \"sha256:648451a0dda84ad04681e32b5ecc7cd5d3a4f0ad84f783e9598d72bc69620d5c\"\n },\n \"FilePath\": \"opt/venv/lib/python3.12/site-packages/waitress-3.0.2.dist-info/METADATA\",\n \"AnalyzedBy\": \"python-pkg\"\n }\n ]\n }\n ]\n}\n" + "content": "{\n \"kind\": \"informed-decision.execution-source-bundle\",\n \"version\": 1,\n \"proposal_id\": \"INFD-WP-0009-T04/purpose-overlay-v1\",\n \"files\": {\n \"README.md\": {\n \"sha256\": \"a6ecdabebce12eeafea61173edb6e6d0e349a76e366546978e2ed02e7b109df2\",\n \"content\": \"# Supervised Informed Decision purpose release executor — unapproved preparation\\n\\nNo native database read, backup/export/restore or workload action has been run. This source implements the reviewed protocol; its additional mechanical details need peer review and an amended hash-bound packet before first human submission. The original78path packet/reviews remain historical technical agreement, not founder approval of this executor.\\n\\nRun one phase at a time only after the coordinator has freshly authenticated the exact founder disposition at the existing fixed Informed Decision origin. Root writes the protected0600 fixed files `/tmp/security-infd-purpose-root-authority.json` and `/tmp/security-infd-purpose-native-outcome-latest.json`. The receipt template is PENDING and cannot authorize anything. The helper checks exact nested confirmed person/platform-root ACCEPT version1, original memo identity/current memo SHA, source commit, plan SHA and freshness120seconds. This is supervised receipt bookkeeping, not cryptographic provider verification, a signed grant or agent autonomy promotion. Root/harness supervision remains the authority boundary. Never synthesize an approval receipt from a technical review or caller assertion.\\n\\nInvocation after actual approval: `python3 execution/actuator.py --phase --root-authority-receipt /tmp/security-infd-purpose-root-authority.json --root-native-outcome /tmp/security-infd-purpose-native-outcome-latest.json --source-revision `. Order: drill-backup → drill-copy → offline-verify → cleanup-offline → cutover-backup → cutover-copy → release → verify. Rollback is a distinct authorized recovery after a recorded release attempt, followed by rollback-verify. Rollback dispatch needs no Ready Pod or candidate database exec: sealed Deployment/CM/PVC/source/image pair and admission CAS remain mandatory. Its acknowledgment is not recovery completion; rollback-verify separately requires Ready1 of the old image, succeeded exact scoped operation and readonly schema5/integrity/count proof of the current retained database. Root refreshes actual native acceptance immediately before each phase.\\n\\nThe private ignored Custodian custody parent `.private-backups` must already exist,0700 owned by the workstation agent user; the exact case child20261011-infd-purpose-r1 is created only after authority checks. Native parent `/data/private/purpose-overlay-r1` is uniquely created by UID10001 for drill/cutover SQLite-consistent snapshots, each0600/nonsymlink/single-link. The attached stdlib readonly checker must report schema5/integrity/counts before any Store/admin on native source or offlineclone. Invalid states/count shapes and all raw child outputs are withheld. Main-only snapshot closure is verified before binary transfer; stdin/stdout snapshot bytes reach only private files or the isolated restore copy, never tool/chat/log output. Streams stop beyond frozen byte count/512MiB; failures retain partial private evidence.\\n\\nNew private offline volume `infd-purpose-r1-restore-20261011` is created only on the pinned local workstation Docker socket/engine bnt-lap001, with localdriver/nooptions and attemptnonce labels. One-time initializer runs exact763c as UID0 with only CAP_CHOWN, networknone/read-onlyroot/no-newprivileges, one NEW namedvolume mount, no host/livePVC/credential/config mounts. It receives only the protected snapshot on stdin, verifies bytes, sets folder0700/file0600 owned10001. Then UID10001 performs readonly pre-open validation, `--entrypoint informed-decision-admin inspect --db /restore/review.sqlite`, never the service entrypoint. A second UID10001/network-none readonly integrity/schema/count check after admin must exactly equal the frozen snapshot proof, and the original protected snapshot SHA must remain unchanged. Cleanup compares exact nonce/creation identity and removes only this clone volume, retaining all native/offcluster originals. CPU1/memory128MiB; private offcluster capacity at least1GiB+16MiB and native estimated two/one-snapshot headroom required.\\n\\nEvery phase fsyncs RUNNING intent before dispatch. Any failure/interruption/ambiguous result remains UNCERTAIN; same-phase retry is refused. Separate operator diagnosis and any needed recovery are recorded; neither snapshots nor unresolved/new records are removed to make checks green. Frozen snapshot/clone counters must agree; live post-cutover/rollback counters can include legitimate concurrent commits/state transitions.\\n\\nExisting Application UID and actual Deployment/Pod/CM/PVC custody/source are checked. All four owner render Git blobs must match; overrides/plugins/multiple sources and even automated:{} are rejected. The existing Application.operation API is used (native argocd CLI is absent), with server dry-run, resourceVersion/UID/source tests, one Deployment only, prune=false. Dispatch acknowledgment is not rollout completion. Verify requires exact succeeded operation/controller generation/Ready1, same schema5 DB, actual installed hash/mode/UID and10purpose checks plus bounded localhosthealth/readiness. Purpose transport remains synthetic and is explicitly not a native PDP authority test. Rollback pins prior7db/7f5 through the same scoped workflow and retains the current live database; it never restores an older snapshot over later writes.\\n\\nSixteen synthetic tests pass against frozen case metadata: authority/expiry/actor/ambiguity refusals, crash intent/no retry/order, credential-output withholding, private bounded binarycopy, volume recreation cleanup refusal, source/automation/CM/PVC/Ready drift, pre-open gate refusal and exact Deployment-only operation/dry-run. These are source tests, not native backup or release proof.\\n\\nAll phases, including recovery and verification, are bounded by 2026-10-12T23:59:59Z. This explicitly refines the earlier packet deadline wording for unstarted release: the helper does not extend authority past the deadline. Start sufficiently early to complete drill/cutover/recovery; after expiry stop and obtain a fresh founder decision. This may delay recovery if the window is exhausted, and must be disclosed before acceptance.\\n\\nThe initial 11-file helper freeze SHA653b68c3891c066f40d104bfc67a35da5e436605cd99afd52fbac4b47a9553fe and independent conditional findings remain archived under execution-history/initial-653b68c3. This refinement is the same proposal/trial; no native execution or human acceptance has occurred.\\n\"\n },\n \"actuator.py\": {\n \"sha256\": \"6b9d6439862454f261ee77f05b26519f8109599b1f67078bc4e1f7c7c4061ba5\",\n \"content\": \"\\\"\\\"\\\"One fixed supervised phase; never run this during source preparation.\\\"\\\"\\\"\\nimport argparse\\nimport hashlib\\nimport json\\nimport os\\nfrom pathlib import Path\\nimport re\\nimport selectors\\nimport stat\\nimport subprocess\\nimport sys\\nimport time\\n\\nif sys.flags.optimize:\\n raise SystemExit('optimized interpreter refused')\\n\\nPHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline',\\n 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback', 'rollback-verify')\\n\\n\\ndef require(value, reason):\\n if not value:\\n raise ValueError(reason)\\n\\n\\ndef sha(path):\\n digest = hashlib.sha256()\\n with Path(path).open('rb') as stream:\\n for block in iter(lambda: stream.read(1024**2), b''):\\n digest.update(block)\\n return digest.hexdigest()\\n\\n\\ndef private(path, directory=False):\\n info = Path(path).lstat()\\n require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode))\\n and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600)\\n and (directory or info.st_nlink == 1), 'private owned custody required')\\n\\nROOT = Path(__file__).resolve().parent\\nCASE = ROOT.parent\\nOWNER = Path('/home/worsch/informed-decision')\\nCUSTODIAN = Path('/home/worsch/the-custodian')\\nCUSTODY = CUSTODIAN / '.private-backups/20261011-infd-purpose-r1'\\nSOCKET = 'unix:///var/run/docker.sock'\\nIMAGE = 'forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a'\\nVOLUME = 'infd-purpose-r1-restore-20261011'\\nMAX_BYTES = 512 * 1024**2\\n\\n\\ndef run(argv, body=None, timeout=90):\\n return subprocess.run(argv, input=body, text=True, capture_output=True, timeout=timeout)\\n\\n\\ndef json_result(result):\\n try:\\n value = json.loads(result.stdout)\\n except (ValueError, TypeError):\\n raise ValueError('safe phase receipt unavailable; outcome uncertain') from None\\n require(result.returncode == 0 and isinstance(value, dict) and value.get('all_checks_pass') is True,\\n 'phase did not verify complete; raw output withheld; no retry')\\n permitted = {'phase', 'all_checks_pass', 'raw_output_withheld', 'native_approval_verified_by_root',\\n 'native_authenticated_grant', 'source_readonly_baseline', 'snapshot_readonly',\\n 'snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'native_parent_private',\\n 'native_uid', 'pod_name', 'pod_uid', 'live_readonly_schema_integrity_counts',\\n 'live_counts_may_include_concurrent_commits', 'operation_requested', 'source_revision',\\n 'resources', 'prune', 'rollout_verified', 'latest_live_database_retained',\\n 'client_diff_sha256', 'native_rollout_verified', 'current_schema5_database_retained',\\n 'private_copy_verified', 'installed_purpose_checks', 'policy_sha256',\\n 'policy_mode', 'policy_uid', 'health_statuses', 'native_provider_probe', 'recovery_verification'}\\n require(set(value) <= permitted, 'unexpected output fields withheld')\\n from receipt_safety import counts\\n for name in ('source_readonly_baseline', 'snapshot_readonly', 'live_readonly_schema_integrity_counts'):\\n if name in value:\\n counts(value[name])\\n for name in ('snapshot_sha256', 'client_diff_sha256'):\\n if name in value:\\n require(re.fullmatch(r'[a-f0-9]{64}', value[name]) is not None, 'invalid output digest withheld')\\n if 'snapshot_bytes' in value:\\n require(type(value['snapshot_bytes']) is int and 0 < value['snapshot_bytes'] <= MAX_BYTES,\\n 'invalid output size withheld')\\n if 'snapshot_file' in value:\\n require(value['snapshot_file'] in ('drill.sqlite', 'cutover.sqlite'), 'invalid output file withheld')\\n return value\\n\\n\\ndef docker(argv, body=None, timeout=120):\\n return run(['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET] + argv,\\n body=body, timeout=timeout)\\n\\n\\ndef remote(phase, revision, approved):\\n # Fixed module imported only after main verifies every executor source hash.\\n from native_program import PROGRAM\\n payload = {'phase': phase, 'source_revision': revision, 'approval': approved,\\n 'sealed': json.loads((CASE / 'sealed-live-deployment.json').read_text()),\\n 'dependencies': json.loads((CASE / 'sealed-native-dependencies.json').read_text()),\\n 'candidate': json.loads((CASE / 'candidate-deployment.json').read_text()),\\n 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()),\\n 'receipt_safety': (ROOT / 'receipt_safety.py').read_text(),\\n 'purpose_checks': (CASE / 'check_installed.py').read_text(),\\n 'readonly': (CASE / 'sqlite_readonly.py').read_text()}\\n script = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace(\\n '__GUARD__', repr((CASE / 'change_guard.py').read_text()))\\n return json_result(run(['ssh', 'railiance01', 'python3 -'], script, timeout=200))\\n\\n\\ndef copy_snapshot(phase, revision, approved, journal):\\n metadata = remote(phase, revision, approved)\\n backup_phase = 'drill-backup' if phase == 'drill-copy' else 'cutover-backup'\\n prior = journal.data['phases'][backup_phase]['result']\\n for key in ('snapshot_sha256', 'snapshot_bytes', 'snapshot_file', 'snapshot_readonly'):\\n require(metadata[key] == prior[key], 'closed frozen snapshot changed')\\n name = metadata['snapshot_file']\\n require(name in ('drill.sqlite', 'cutover.sqlite') and 0 < metadata['snapshot_bytes'] <= MAX_BYTES,\\n 'fixed bounded snapshot required')\\n pod = metadata['pod_name']\\n require(re.fullmatch(r'[a-z0-9]([-a-z0-9]*[a-z0-9])?', pod) is not None, 'fixed owner pod name required')\\n local = CUSTODY / name\\n fd = os.open(local, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600)\\n # Binary snapshot stdout goes only to a private file, never tool/chat/log output.\\n # Snapshot schema/count metadata was validated before opening this destination.\\n with os.fdopen(fd, 'wb') as destination:\\n command = ('kubectl exec -n informed-decision ' + pod +\\n ' -c informed-decision -- cat /data/private/purpose-overlay-r1/' + name)\\n transfer = subprocess.Popen(['ssh', 'railiance01', command], stdout=subprocess.PIPE,\\n stderr=subprocess.DEVNULL)\\n selector = selectors.DefaultSelector()\\n selector.register(transfer.stdout, selectors.EVENT_READ)\\n deadline = time.monotonic() + 150\\n received = 0\\n try:\\n while True:\\n remaining = deadline - time.monotonic()\\n require(remaining > 0 and selector.select(remaining), 'private transfer timed out')\\n block = os.read(transfer.stdout.fileno(), 1024**2)\\n if not block:\\n break\\n received += len(block)\\n require(received <= metadata['snapshot_bytes'] and received <= MAX_BYTES,\\n 'private copy exceeds frozen snapshot size')\\n destination.write(block)\\n transfer.wait(timeout=max(1, deadline - time.monotonic()))\\n finally:\\n selector.close()\\n transfer.stdout.close()\\n if transfer.poll() is None:\\n transfer.kill()\\n transfer.wait()\\n destination.flush()\\n os.fsync(destination.fileno())\\n private(local)\\n require(transfer.returncode == 0 and local.stat().st_size == metadata['snapshot_bytes']\\n and sha(local) == metadata['snapshot_sha256'], 'private copy incomplete/uncertain; retain, no retry')\\n # Re-read identity/hash after transfer. This is verification, not a write retry.\\n after = remote(phase, revision, approved)\\n require(after['pod_uid'] == metadata['pod_uid'] and after['snapshot_sha256'] == metadata['snapshot_sha256'],\\n 'source identity/snapshot changed during transfer')\\n return {**metadata, 'off_cluster_private_copy_verified': True, 'snapshot_contents_output': False}\\n\\n\\ndef offline_verify(journal):\\n from receipt_safety import counts\\n snapshot = CUSTODY / 'drill.sqlite'\\n private(snapshot)\\n previous = journal.data['phases']['drill-copy']['result']\\n require(sha(snapshot) == previous['snapshot_sha256'], 'protected snapshot bytes changed')\\n identity = docker(['info', '--format', '{{json .Name}}'])\\n require(identity.returncode == 0 and json.loads(identity.stdout) == 'bnt-lap001',\\n 'local offline Docker engine identity changed')\\n listed = docker(['volume', 'ls', '--format', '{{.Name}}'])\\n require(listed.returncode == 0 and VOLUME not in listed.stdout.splitlines(),\\n 'disposable volume absence not verified')\\n nonce = journal.data['phases']['offline-verify']['attempt_id']\\n labels = {'informed-decision.case': 'infd-purpose-20261011-r1',\\n 'informed-decision.use': 'offline-restore-only', 'informed-decision.attempt': nonce}\\n created = docker(['volume', 'create', '--driver', 'local', '--label', 'informed-decision.case=infd-purpose-20261011-r1',\\n '--label', 'informed-decision.attempt=' + nonce,\\n '--label', 'informed-decision.use=offline-restore-only', VOLUME])\\n require(created.returncode == 0 and created.stdout.strip() == VOLUME, 'volume creation uncertain; no retry')\\n inspected = docker(['volume', 'inspect', VOLUME])\\n require(inspected.returncode == 0, 'new volume identity unavailable')\\n volume = json.loads(inspected.stdout)\\n require(len(volume) == 1 and volume[0]['Name'] == VOLUME and volume[0].get('Labels') == labels\\n and volume[0].get('Driver') == 'local' and not volume[0].get('Options')\\n and volume[0].get('Scope') == 'local', 'new isolated volume identity changed')\\n identity = {key: volume[0][key] for key in ('Name', 'Labels', 'Driver', 'Scope', 'CreatedAt')}\\n journal.note('offline-verify', 'created_volume_identity', identity)\\n # One-time UID0/CAP_CHOWN initialization is isolated to the NEW named volume.\\n # No host/live PVC/config/token mount exists; this detail needs packet review.\\n initializer = \\\"\\\"\\\"import hashlib,os,stat,sys\\nif sys.flags.optimize:raise RuntimeError('optimized interpreter refused')\\nfolder='/restore';expected=EXPECTED\\nif os.listdir(folder):raise ValueError('new empty private volume required')\\nos.chmod(folder,0o700)\\nfd=os.open(folder+'/review.sqlite',os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW|os.O_WRONLY,0o600)\\ndigest=hashlib.sha256();size=0\\nwith os.fdopen(fd,'wb') as target:\\n while True:\\n block=sys.stdin.buffer.read(1024**2)\\n if not block:break\\n size+=len(block)\\n if size>512*1024**2:raise ValueError('private restore size exceeds bound')\\n target.write(block);digest.update(block)\\n target.flush();os.fsync(target.fileno())\\nif digest.hexdigest()!=expected:raise ValueError('private copied snapshot differs')\\nos.chown(folder+'/review.sqlite',10001,10001);os.chown(folder,10001,10001)\\nprint('{\\\"all_checks_pass\\\":true,\\\"private_copy_verified\\\":true}')\\n\\\"\\\"\\\".replace('EXPECTED', repr(previous['snapshot_sha256']))\\n with snapshot.open('rb') as source:\\n argv = ['docker', '--config', str(CUSTODY / 'empty-docker-config'), '--host', SOCKET,\\n 'run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m',\\n '--user', '0:0', '--cap-drop', 'ALL', '--cap-add', 'CHOWN',\\n '--security-opt', 'no-new-privileges', '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore',\\n '--entrypoint', 'python', IMAGE, '-c', initializer]\\n copied = subprocess.run(argv, stdin=source, text=True, capture_output=True, timeout=150)\\n json_result(copied)\\n options = ['run', '--rm', '-i', '--network', 'none', '--read-only', '--cpus', '1', '--memory', '128m',\\n '--user', '10001:10001', '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges',\\n '--mount', 'type=volume,src=' + VOLUME + ',dst=/restore']\\n readonly = docker(options + ['--entrypoint', 'python', IMAGE, '-', '--db', '/restore/review.sqlite'],\\n (CASE / 'sqlite_readonly.py').read_text())\\n require(readonly.returncode == 0, 'offline pre-open schema/integrity gate refused; never open Store')\\n checked = counts(json.loads(readonly.stdout))\\n require(checked == previous['snapshot_readonly'], 'frozen snapshot/clone readonly counts differ')\\n admin = docker(options + ['--entrypoint', 'informed-decision-admin', IMAGE,\\n 'inspect', '--db', '/restore/review.sqlite'])\\n require(admin.returncode == 0, 'offline admin result uncertain')\\n admin_counts = json.loads(admin.stdout)\\n require(admin_counts == {key: checked[key] for key in ('schema_version', 'lifecycle', 'outbox', 'submissions')},\\n 'offline admin changed frozen snapshot counters')\\n # Admin Store construction must not silently alter schema/integrity/counters.\\n post = docker(options + ['--entrypoint', 'python', IMAGE, '-', '--db', '/restore/review.sqlite'],\\n (CASE / 'sqlite_readonly.py').read_text())\\n require(post.returncode == 0, 'offline post-admin readonly integrity gate refused')\\n post_checked = counts(json.loads(post.stdout))\\n require(post_checked == checked == previous['snapshot_readonly'],\\n 'offline admin altered frozen snapshot proof')\\n private(snapshot)\\n require(sha(snapshot) == previous['snapshot_sha256'], 'original protected snapshot changed during drill')\\n return {'all_checks_pass': True, 'offline_volume': VOLUME, 'offline_readonly': checked,\\n 'offline_post_admin_readonly': post_checked, 'original_snapshot_hash_unchanged': True,\\n 'created_volume_identity': identity,\\n 'admin_counts': admin_counts, 'network': 'none', 'runtime_tokens_or_config_mounted': False,\\n 'service_entrypoint_started': False, 'original_snapshot_retained': True}\\n\\n\\ndef cleanup_offline(journal):\\n inspected = docker(['volume', 'inspect', VOLUME])\\n require(inspected.returncode == 0, 'owned disposable volume identity unverified')\\n value = json.loads(inspected.stdout)\\n expected = journal.data['phases']['offline-verify']['result']['created_volume_identity']\\n require(len(value) == 1 and {key: value[0].get(key) for key in expected} == expected\\n and not value[0].get('Options'), 'volume ownership/recreation changed')\\n removed = docker(['volume', 'rm', VOLUME])\\n require(removed.returncode == 0 and removed.stdout.strip() == VOLUME\\n and docker(['volume', 'inspect', VOLUME]).returncode != 0,\\n 'cleanup outcome ambiguous; do not retry')\\n return {'all_checks_pass': True, 'only_disposable_offline_volume_removed': VOLUME,\\n 'native_and_offcluster_original_snapshots_retained': True}\\n\\n\\ndef main():\\n parser = argparse.ArgumentParser(description=__doc__)\\n parser.add_argument('--phase', choices=PHASES, required=True)\\n parser.add_argument('--root-authority-receipt', type=Path, required=True)\\n parser.add_argument('--root-native-outcome', type=Path, required=True)\\n parser.add_argument('--source-revision', required=True)\\n args = parser.parse_args()\\n require(args.root_authority_receipt == Path('/tmp/security-infd-purpose-root-authority.json')\\n and args.root_native_outcome == Path('/tmp/security-infd-purpose-native-outcome-latest.json'),\\n 'fixed supervised receipt paths required')\\n require(re.fullmatch(r'[0-9a-f]{40}', args.source_revision) is not None, 'exact source commit required')\\n # Verify all prepared executor/input bytes before reading authority or dispatching.\\n plan = json.loads((ROOT / 'execution-plan.json').read_text())\\n require(set(plan['executor_files']) == {'actuator.py', 'authority_journal.py', 'native_program.py', 'receipt_safety.py'},\\n 'fixed executor sources required')\\n require(set(plan['owner_source_files']) == {'deploy/lifecycle/admission.candidate.json',\\n 'deploy/lifecycle/service.candidate.json',\\n 'deploy/lifecycle/kustomization.yaml',\\n 'deploy/lifecycle/registries.candidate.json'},\\n 'fixed owner image sources required')\\n for relative, digest in plan['executor_files'].items():\\n target = ROOT / relative\\n require(not target.is_symlink() and sha(target) == digest, 'executor source bytes changed')\\n for relative, digest in plan['case_files'].items():\\n require(not Path(relative).is_absolute() and '..' not in Path(relative).parts,\\n 'case source path escaped')\\n target = CASE / relative\\n require(not target.is_symlink() and sha(target) == digest, 'case source bytes changed')\\n for relative, digest in plan['owner_source_files'].items():\\n target = OWNER / relative\\n require(not target.is_symlink() and sha(target) == digest, 'owner image-only source changed')\\n committed = subprocess.run(['git', '-C', str(OWNER), 'show', args.source_revision + ':' + relative],\\n capture_output=True)\\n require(committed.returncode == 0 and hashlib.sha256(committed.stdout).hexdigest() == digest,\\n 'committed owner render source differs from approved inputs')\\n head = run(['git', '-C', str(OWNER), 'rev-parse', 'HEAD'])\\n require(head.returncode == 0 and head.stdout.strip() == args.source_revision, 'owner source HEAD differs')\\n from authority_journal import Journal, authority\\n private(args.root_authority_receipt)\\n private(args.root_native_outcome)\\n receipt = json.loads(args.root_authority_receipt.read_text())\\n require(receipt.get('native_outcome_sha256') == sha(args.root_native_outcome), 'native outcome bytes changed')\\n require(receipt.get('executor_plan_sha256') == sha(ROOT / 'execution-plan.json'),\\n 'root verified executor plan differs')\\n approved = authority(receipt, json.loads(args.root_native_outcome.read_text()), sha(CASE / 'memo.json'),\\n args.source_revision, args.phase)\\n parent = CUSTODY.parent\\n private(parent, directory=True)\\n ignored = run(['git', '-C', str(CUSTODIAN), 'check-ignore', '--no-index', str(CUSTODY / 'drill.sqlite')])\\n require(ignored.returncode == 0, 'offcluster custody is not ignored')\\n if not CUSTODY.exists():\\n require(args.phase == 'drill-backup', 'first approved phase must create unique private custody')\\n os.mkdir(CUSTODY, 0o700)\\n private(CUSTODY, directory=True)\\n capacity = os.statvfs(CUSTODY)\\n require(capacity.f_bavail * capacity.f_frsize >= 2 * MAX_BYTES + 16 * 1024**2,\\n 'independent protected custody headroom insufficient')\\n os.makedirs(CUSTODY / 'empty-docker-config', mode=0o700, exist_ok=True)\\n private(CUSTODY / 'empty-docker-config', directory=True)\\n require(not list((CUSTODY / 'empty-docker-config').iterdir()), 'public Docker read config must stay empty')\\n journal = Journal(CUSTODY, {'proposal': plan['proposal_id'], 'source_revision': args.source_revision,\\n 'memo_sha256': sha(CASE / 'memo.json'), 'plan_sha256': sha(ROOT / 'execution-plan.json')})\\n try:\\n journal.start(args.phase, approved) # fsynced RUNNING before any phase effect.\\n if args.phase in ('drill-copy', 'cutover-copy'):\\n result = copy_snapshot(args.phase, args.source_revision, approved, journal)\\n elif args.phase == 'offline-verify':\\n result = offline_verify(journal)\\n elif args.phase == 'cleanup-offline':\\n result = cleanup_offline(journal)\\n else:\\n result = remote(args.phase, args.source_revision, approved)\\n journal.finish(args.phase, result)\\n print(json.dumps(result)) # Only count/hash/identity receipts, never snapshot bytes.\\n except BaseException as error:\\n safe = {'all_checks_pass': False, 'phase': args.phase, 'failure_class': type(error).__name__,\\n 'failure': 'fixed phase outcome uncertain; original evidence retained; no retry',\\n 'raw_output_withheld': True}\\n if journal.data['phases'].get(args.phase, {}).get('state') == 'RUNNING':\\n journal.finish(args.phase, safe)\\n print(json.dumps(safe))\\n raise SystemExit(1) from None\\n finally:\\n journal.close()\\n\\n\\nif __name__ == '__main__':\\n try:\\n main()\\n except Exception:\\n raise SystemExit('supervised execution refused before phase; raw output withheld') from None\\n\"\n },\n \"authority_journal.py\": {\n \"sha256\": \"74d6a91169296a99fa7dac2d0902567280f910af743580ec4b454f2abf8374aa\",\n \"content\": \"\\\"\\\"\\\"Supervised receipt bookkeeping, not an authenticated approval provider.\\\"\\\"\\\"\\nimport datetime\\nimport fcntl\\nimport hashlib\\nimport json\\nimport os\\nimport re\\nfrom pathlib import Path\\nimport stat\\nimport uuid\\n\\nFOUNDER = {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'}\\nMEMO_ID = 'infd-20261011-purpose-overlay-r1'\\nPROPOSAL = 'INFD-WP-0009-T04/purpose-overlay-v1'\\nPHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline',\\n 'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback', 'rollback-verify')\\n\\n\\ndef require(value, reason):\\n if not value:\\n raise ValueError(reason)\\n\\n\\ndef sha(path):\\n digest = hashlib.sha256()\\n with Path(path).open('rb') as stream:\\n for block in iter(lambda: stream.read(1024**2), b''):\\n digest.update(block)\\n return digest.hexdigest()\\n\\n\\ndef private(path, directory=False):\\n info = Path(path).lstat()\\n require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode))\\n and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600)\\n and (directory or info.st_nlink == 1), 'private owned custody required')\\n\\n\\ndef authority(receipt, outcome, memo_sha, source_revision, phase, now=None):\\n \\\"\\\"\\\"Root must freshly verify native outcome at fixed ORIGIN outside this helper.\\n\\n Receipt files/flags are not signed grants. This function checks the exact\\n supervised receipt relation; existing harness/founder authority remains the\\n actual permission boundary. It never authenticates a caller as human.\\n \\\"\\\"\\\"\\n now = now or datetime.datetime.now(datetime.timezone.utc)\\n require(phase in PHASES, 'fixed phase required')\\n require(receipt.get('proposal_id') == PROPOSAL and receipt.get('memo_id') == MEMO_ID\\n and receipt.get('memo_version') == 1 and receipt.get('memo_sha256') == memo_sha\\n and receipt.get('source_revision') == source_revision\\n and receipt.get('activation') == 'APPROVED'\\n and receipt.get('authority_mode') == 'ADMINISTER'\\n and receipt.get('target') == 'realm:kubernetes/railiance01/informed-decision'\\n and receipt.get('verification_method') == 'root-fixed-origin-native-readback'\\n and receipt.get('runtime_authenticated_grant') is False,\\n 'exact externally verified supervised receipt required')\\n verified = datetime.datetime.fromisoformat(receipt['verified_at'].replace('Z', '+00:00'))\\n require(verified.tzinfo is not None and 0 <= (now - verified).total_seconds() <= 120,\\n 'fresh root native readback required before every phase')\\n deadline = datetime.datetime.fromisoformat('2026-10-12T23:59:59+00:00')\\n require(now < deadline, 'approved execution window expired')\\n require(outcome.get('memo_id') == MEMO_ID and outcome.get('review', {}).get('stale') is False\\n and outcome['review'].get('intake_state') == 'ready', 'native review is not ready/current')\\n review_id = outcome['review']['memo_id']\\n require(review_id == receipt.get('review_memo_id'), 'native review identity changed')\\n accepted = [x for x in outcome.get('dispositions', [])\\n if x.get('submission_state') == 'confirmed'\\n and x.get('disposition', {}).get('verb') == 'accept'\\n and x['disposition'].get('memo_version') == 1]\\n require(len(accepted) == 1, 'one confirmed founder acceptance required')\\n accepted = accepted[0]['disposition']\\n require(accepted.get('actor') == FOUNDER and accepted.get('memo_id') == review_id\\n and accepted.get('approval_id') == receipt.get('approval_id')\\n and accepted.get('id') == receipt.get('disposition_id')\\n and accepted.get('at') == receipt.get('accepted_at'), 'exact founder disposition mismatch')\\n require(re.fullmatch(r'[a-f0-9-]{36}', accepted['approval_id']) is not None\\n and re.fullmatch(r'disp-[a-f0-9-]{36}', accepted['id']) is not None\\n and re.fullmatch(r'review-[a-f0-9-]{36}', review_id) is not None,\\n 'native disposition identifiers are malformed')\\n accepted_at = datetime.datetime.fromisoformat(accepted['at'].replace('Z', '+00:00'))\\n require(accepted_at.tzinfo is not None and accepted_at <= verified, 'acceptance time not bounded')\\n return {key: receipt[key] for key in ('approval_id', 'disposition_id', 'accepted_at', 'verified_at')}\\n\\n\\nclass Journal:\\n def __init__(self, parent, identity):\\n self.parent = Path(parent)\\n private(self.parent, directory=True)\\n self.path = self.parent / 'execution-journal.json'\\n self.lock = os.open(self.parent / 'execution.lock', os.O_CREAT | os.O_NOFOLLOW | os.O_RDWR, 0o600)\\n fcntl.flock(self.lock, fcntl.LOCK_EX | fcntl.LOCK_NB)\\n private(self.parent / 'execution.lock')\\n if self.path.exists():\\n private(self.path)\\n self.data = json.loads(self.path.read_text())\\n require(self.data['identity'] == identity, 'journal case/source identity changed')\\n else:\\n self.data = {'identity': identity, 'phases': {}}\\n self.save()\\n\\n def save(self):\\n temporary = self.parent / 'execution-journal.new'\\n fd = os.open(temporary, os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW | os.O_WRONLY, 0o600)\\n try:\\n with os.fdopen(fd, 'w') as stream:\\n json.dump(self.data, stream, indent=2)\\n stream.write('\\\\n')\\n stream.flush()\\n os.fsync(stream.fileno())\\n os.replace(temporary, self.path)\\n directory = os.open(self.parent, os.O_DIRECTORY | os.O_RDONLY)\\n try:\\n os.fsync(directory)\\n finally:\\n os.close(directory)\\n except BaseException:\\n # Retain evidence rather than overwriting an uncertain durable intent.\\n raise\\n\\n def start(self, phase, approval):\\n require(phase not in self.data['phases'], 'already attempted phase; no retry')\\n predecessors = dict(zip(PHASES[1:8], PHASES[:7]))\\n predecessors['rollback-verify'] = 'rollback'\\n if phase in predecessors:\\n require(self.data['phases'].get(predecessors[phase], {}).get('state') == 'COMPLETE',\\n 'preceding phase is not verified complete')\\n if phase == 'rollback':\\n require('release' in self.data['phases'], 'rollback requires a recorded release attempt')\\n self.data['phases'][phase] = {'state': 'RUNNING', 'approval': approval,\\n 'attempt_id': str(uuid.uuid4()),\\n 'started_at': datetime.datetime.now(datetime.timezone.utc).isoformat()}\\n self.save()\\n\\n def note(self, phase, key, value):\\n require(self.data['phases'][phase]['state'] == 'RUNNING', 'phase intent missing')\\n self.data['phases'][phase][key] = value\\n self.save()\\n\\n def finish(self, phase, result):\\n entry = self.data['phases'][phase]\\n require(entry['state'] == 'RUNNING', 'phase intent missing')\\n entry['result'] = result\\n entry['state'] = 'COMPLETE' if result.get('all_checks_pass') is True else 'UNCERTAIN'\\n self.save()\\n\\n def close(self):\\n os.close(self.lock)\\n\"\n },\n \"execution-plan.json\": {\n \"sha256\": \"f5e5fa906ff19d3a45d10dcdb2810373ae21f9cf44c0472ff2bd47d3bc3328d6\",\n \"content\": \"{\\n \\\"kind\\\": \\\"informed-decision.supervised-mechanical-release-plan\\\",\\n \\\"version\\\": 1,\\n \\\"proposal_id\\\": \\\"INFD-WP-0009-T04/purpose-overlay-v1\\\",\\n \\\"trial_id\\\": \\\"infd-purpose-20261011-r1\\\",\\n \\\"state\\\": \\\"prepared-unapproved\\\",\\n \\\"executor_files\\\": {\\n \\\"actuator.py\\\": \\\"6b9d6439862454f261ee77f05b26519f8109599b1f67078bc4e1f7c7c4061ba5\\\",\\n \\\"authority_journal.py\\\": \\\"74d6a91169296a99fa7dac2d0902567280f910af743580ec4b454f2abf8374aa\\\",\\n \\\"native_program.py\\\": \\\"349f516a4e55f7fb47470144ce781a665fb003ebff380d054f642b22133d1cde\\\",\\n \\\"receipt_safety.py\\\": \\\"5c54373f2dc4b064008225c186efb1d5afdeec36d15350bda0a12ded97602d1b\\\"\\n },\\n \\\"case_files\\\": {\\n \\\"change_guard.py\\\": \\\"f348e449c49f4d9e49af9e82e01764e7197837fd3df9d756f5891d9b8d9b38be\\\",\\n \\\"sqlite_readonly.py\\\": \\\"eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38\\\",\\n \\\"preflight-inputs.json\\\": \\\"756e72da9ec36572242421bea8b6d2285394e334f991db5e90e9b409563b5f06\\\",\\n \\\"sealed-live-deployment.json\\\": \\\"d18d27063d06f535ae884ea01f96747fe301685518ab94b1cba072a1e1519362\\\",\\n \\\"sealed-native-dependencies.json\\\": \\\"042327a036ed254cf95dbeb0c056ac25b03a6a844b95a332c992df2943691369\\\",\\n \\\"candidate-deployment.json\\\": \\\"722a8e2dc52bec217bf960e23b2fddfc7ac27d343ac8743790e3183db81a6a0e\\\",\\n \\\"rollback-deployment.json\\\": \\\"39b3f43bb84ef4921cc3a1fbcdc444610741ed8809149d8f8f17ed805f262121\\\",\\n \\\"check_installed.py\\\": \\\"a34a51be9c9f2b16a06a88173b5c6c492c9957fe021cf412a86a1737730640ad\\\",\\n \\\"published-verification.json\\\": \\\"8a676c38f89f9ca762b8ebe945b5acb90d47a4cb350692687abb985bbb2d8ae2\\\",\\n \\\"security-summary.json\\\": \\\"0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44\\\"\\n },\\n \\\"owner_source_files\\\": {\\n \\\"deploy/lifecycle/admission.candidate.json\\\": \\\"92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55\\\",\\n \\\"deploy/lifecycle/service.candidate.json\\\": \\\"38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4\\\",\\n \\\"deploy/lifecycle/kustomization.yaml\\\": \\\"1bbce81bc6758434354157f8601534320c5d0290587908fd15a6d25e3fa57f47\\\",\\n \\\"deploy/lifecycle/registries.candidate.json\\\": \\\"9bad6db5fbc2178d31b04120016a41830c3552fbb9e2517b718f9bbe87cf649e\\\"\\n },\\n \\\"candidate_image\\\": \\\"forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a\\\",\\n \\\"prior_image\\\": \\\"forgejo.coulomb.social/coulomb/informed-decision@sha256:7f5c6cb29c9f70a026bfe30e72934274ddc69261676cf6d476f81dd32812d173\\\",\\n \\\"source_revision\\\": \\\"must-be-exact-final-owner-HEAD-with-approved-four-Git-blobs\\\",\\n \\\"phases\\\": [\\n \\\"drill-backup\\\",\\n \\\"drill-copy\\\",\\n \\\"offline-verify\\\",\\n \\\"cleanup-offline\\\",\\n \\\"cutover-backup\\\",\\n \\\"cutover-copy\\\",\\n \\\"release\\\",\\n \\\"verify\\\",\\n \\\"rollback\\\",\\n \\\"rollback-verify\\\"\\n ],\\n \\\"authorization\\\": \\\"fresh externally authenticated root fixed-origin native readback before each phase; exact confirmed platform-root disposition and current packet SHA/source commit; receipt bookkeeping is not an autonomous signed grant\\\",\\n \\\"execute_by\\\": \\\"2026-10-12T23:59:59Z\\\",\\n \\\"raw_output_withheld\\\": true,\\n \\\"native_data_or_workload_action_executed\\\": false,\\n \\\"deadline_semantics\\\": \\\"All phases including verification/recovery must begin before execute_by. No extension or automatic emergency grant; beyond deadline stop and obtain a fresh founder decision. Complete the bounded drill and rollout early enough to allow recovery within the window.\\\"\\n}\\n\"\n },\n \"native_program.py\": {\n \"sha256\": \"349f516a4e55f7fb47470144ce781a665fb003ebff380d054f642b22133d1cde\",\n \"content\": \"\\\"\\\"\\\"Fixed remote source, passed only after exact supervised approval.\\\"\\\"\\\"\\nPROGRAM = '\\\\nimport copy,datetime,hashlib,json,os,re,subprocess,sys\\\\nif sys.flags.optimize:raise RuntimeError(\\\\'optimized interpreter refused\\\\')\\\\npayload=json.loads(__PAYLOAD__)\\\\nexec(__GUARD__)\\\\nphase=payload[\\\\'phase\\\\']\\\\nif phase not in (\\\\'drill-backup\\\\',\\\\'cutover-backup\\\\',\\\\'drill-copy\\\\',\\\\'cutover-copy\\\\',\\\\'release\\\\',\\\\'verify\\\\',\\\\'rollback\\\\',\\\\'rollback-verify\\\\'):raise ValueError(\\\\'fixed native phase required\\\\')\\\\ndeadline=datetime.datetime.fromisoformat(\\\\'2026-10-12T23:59:59+00:00\\\\')\\\\ndef require(value,reason):\\\\n if not value:raise ValueError(reason)\\\\nrequire(datetime.datetime.now(datetime.timezone.utc)0 and size<=512*1024**2 and free>=size*(2 if action==\\\\'drill-backup\\\\' else 1)+16*1024**2,\\\\'bounded native snapshot capacity required\\\\')\\\\n if action==\\\\'drill-backup\\\\':\\\\n require(not os.path.lexists(folder),\\\\'native case directory must be unique\\\\')\\\\n os.mkdir(folder,0o700);os.chmod(folder,0o700)\\\\n private(folder,True)\\\\n filename=\\\\'drill.sqlite\\\\' if action==\\\\'drill-backup\\\\' else \\\\'cutover.sqlite\\\\';output=folder+\\\\'/\\\\'+filename\\\\n require(not os.path.lexists(output),\\\\'snapshot output must be unique\\\\')\\\\n admin=subprocess.run([\\\\'informed-decision-admin\\\\',\\\\'backup\\\\',\\\\'--db\\\\',db,\\\\'--output\\\\',output],capture_output=True,text=True,timeout=120)\\\\n require(admin.returncode==0 and json.loads(admin.stdout)=={\\\\'status\\\\':\\\\'backed_up\\\\',\\\\'consistent_snapshot\\\\':True},\\\\'backup completion not verified; do not retry\\\\')\\\\n private(output)\\\\n for suffix in (\\\\'-wal\\\\',\\\\'-shm\\\\'):\\\\n require(not os.path.exists(output+suffix) or os.stat(output+suffix).st_size==0,\\\\'snapshot is not closed main-file custody\\\\')\\\\n snapshot=counts(inspect_readonly(output))\\\\n size=os.stat(output).st_size;require(0 10**12\\n for number in value[group].values()):\\n raise ValueError('count-only receipt values refused')\\n return value\\n\"\n },\n \"root-authority-receipt-template.json\": {\n \"sha256\": \"15966b7c6f088a033baf1fef878ddb351de2fa2ae46b5bc710265ed172ab2813\",\n \"content\": \"{\\n \\\"proposal_id\\\": \\\"INFD-WP-0009-T04/purpose-overlay-v1\\\",\\n \\\"memo_id\\\": \\\"infd-20261011-purpose-overlay-r1\\\",\\n \\\"memo_version\\\": 1,\\n \\\"memo_sha256\\\": null,\\n \\\"source_revision\\\": null,\\n \\\"activation\\\": \\\"PENDING\\\",\\n \\\"authority_mode\\\": \\\"ADMINISTER\\\",\\n \\\"target\\\": \\\"realm:kubernetes/railiance01/informed-decision\\\",\\n \\\"verification_method\\\": \\\"root-fixed-origin-native-readback\\\",\\n \\\"runtime_authenticated_grant\\\": false,\\n \\\"verified_at\\\": null,\\n \\\"accepted_at\\\": null,\\n \\\"review_memo_id\\\": null,\\n \\\"approval_id\\\": null,\\n \\\"disposition_id\\\": null,\\n \\\"native_outcome_sha256\\\": null,\\n \\\"executor_plan_sha256\\\": \\\"4d5530e7418f638b10ccff0e0d9a0727adc64a7f3a45907f6deb5739ad2adc85\\\"\\n}\\n\"\n },\n \"test_execution.py\": {\n \"sha256\": \"9ccf6d421bf20f0e8350f6713d6d1cee2ba199f485dcaf2558c387421d9a2b48\",\n \"content\": \"\\\"\\\"\\\"Synthetic custody/transport tests. No native data, Docker or cluster action.\\\"\\\"\\\"\\nimport copy\\nimport datetime\\nimport io\\nimport json\\nimport os\\nfrom pathlib import Path\\nimport subprocess\\nimport sys\\nimport tempfile\\nimport unittest\\nfrom unittest.mock import patch\\nfrom contextlib import redirect_stdout\\n\\nimport actuator\\nfrom authority_journal import Journal, authority\\nfrom native_program import PROGRAM\\nfrom receipt_safety import counts\\n\\nCASE = Path('/home/worsch/informed-decision/docs/evidence/2026-10-11-purpose-image-release')\\nNOW = datetime.datetime(2026, 10, 11, 2, 0, tzinfo=datetime.timezone.utc)\\nREVISION = 'e' * 40\\nCOUNT = {'schema_version': 5, 'integrity': 'ok', 'read_only_pre_open': True, 'store_constructed': False,\\n 'lifecycle': {'records': 3, 'events': 8, 'pending': 1},\\n 'outbox': {'pending': 2, 'delivered': 10}, 'submissions': {'confirmed': 1, 'unresolved': 1}}\\n\\n\\ndef accepted():\\n approval = '11111111-1111-4111-8111-111111111111'\\n review = 'review-22222222-2222-4222-8222-222222222222'\\n disposition = 'disp-33333333-3333-4333-8333-333333333333'\\n receipt = {'proposal_id': 'INFD-WP-0009-T04/purpose-overlay-v1',\\n 'memo_id': 'infd-20261011-purpose-overlay-r1', 'memo_version': 1,\\n 'memo_sha256': 'a' * 64, 'source_revision': REVISION, 'activation': 'APPROVED',\\n 'authority_mode': 'ADMINISTER', 'target': 'realm:kubernetes/railiance01/informed-decision',\\n 'verification_method': 'root-fixed-origin-native-readback', 'runtime_authenticated_grant': False,\\n 'verified_at': '2026-10-11T02:00:00Z', 'accepted_at': '2026-10-11T01:59:00Z',\\n 'review_memo_id': review, 'approval_id': approval, 'disposition_id': disposition}\\n outcome = {'memo_id': receipt['memo_id'], 'review': {'memo_id': review, 'stale': False, 'intake_state': 'ready'},\\n 'dispositions': [{'approval_id': None, 'submission_state': 'confirmed',\\n 'disposition': {'verb': 'accept', 'memo_version': 1, 'memo_id': review,\\n 'approval_id': approval, 'id': disposition,\\n 'actor': {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'},\\n 'at': receipt['accepted_at']}}]}\\n return receipt, outcome\\n\\n\\nclass AuthorityAndCustody(unittest.TestCase):\\n def test_exact_nested_founder_receipt_not_top_level_approval(self):\\n receipt, outcome = accepted()\\n result = authority(receipt, outcome, 'a' * 64, REVISION, 'drill-backup', NOW)\\n self.assertEqual(result['approval_id'], receipt['approval_id'])\\n\\n def test_pending_stale_wrong_actor_version_and_binding_refuse(self):\\n mutations = [lambda r, o: r.update(activation='PENDING'),\\n lambda r, o: r.update(memo_sha256='changed'),\\n lambda r, o: r.update(source_revision='changed'),\\n lambda r, o: r.update(target='other'),\\n lambda r, o: r.update(verified_at='2026-10-11T01:00:00Z'),\\n lambda r, o: r.update(verification_method='caller-asserted'),\\n lambda r, o: r.update(runtime_authenticated_grant=True),\\n lambda r, o: o['review'].update(stale=True),\\n lambda r, o: o['review'].update(intake_state='pending'),\\n lambda r, o: o['dispositions'][0].update(submission_state='unresolved'),\\n lambda r, o: o['dispositions'][0]['disposition'].update(memo_version=2),\\n lambda r, o: o['dispositions'][0]['disposition'].update(actor={'kind': 'agent', 'sub': 'platform-root'}),\\n lambda r, o: o['dispositions'].append(copy.deepcopy(o['dispositions'][0]))]\\n for mutate in mutations:\\n with self.subTest(mutate=mutate):\\n r, o = accepted()\\n mutate(r, o)\\n with self.assertRaises(ValueError):\\n authority(r, o, 'a' * 64, REVISION, 'release', NOW)\\n\\n def test_expired_window_and_unknown_phase_refuse(self):\\n r, o = accepted()\\n with self.assertRaises(ValueError):\\n authority(r, o, 'a' * 64, REVISION, 'arbitrary', NOW)\\n late = datetime.datetime(2026, 10, 13, tzinfo=datetime.timezone.utc)\\n r['verified_at'] = late.isoformat()\\n with self.assertRaises(ValueError):\\n authority(r, o, 'a' * 64, REVISION, 'rollback', late)\\n\\n def test_durable_intent_precedes_dispatch_and_never_retries(self):\\n with tempfile.TemporaryDirectory() as directory:\\n parent = Path(directory)\\n os.chmod(parent, 0o700)\\n journal = Journal(parent, {'case': 'fixture'})\\n journal.start('drill-backup', {'approval_id': 'fixture'})\\n self.assertEqual(json.loads(journal.path.read_text())['phases']['drill-backup']['state'], 'RUNNING')\\n journal.close() # simulated crash before result\\n recovered = Journal(parent, {'case': 'fixture'})\\n with self.assertRaises(ValueError):\\n recovered.start('drill-backup', {})\\n with self.assertRaises(ValueError):\\n recovered.start('drill-copy', {})\\n recovered.close()\\n\\n def test_phase_order_and_uncertain_release_allows_only_distinct_recovery(self):\\n with tempfile.TemporaryDirectory() as directory:\\n os.chmod(directory, 0o700)\\n j = Journal(directory, {'case': 'fixture'})\\n with self.assertRaises(ValueError):\\n j.start('release', {})\\n for phase in actuator.PHASES[:6]:\\n j.start(phase, {})\\n j.finish(phase, {'all_checks_pass': True})\\n j.start('release', {})\\n j.finish('release', {'all_checks_pass': False})\\n with self.assertRaises(ValueError):\\n j.start('release', {})\\n with self.assertRaises(ValueError):\\n j.start('verify', {})\\n j.start('rollback', {})\\n j.finish('rollback', {'all_checks_pass': True})\\n j.close()\\n\\n def test_secret_or_unknown_child_output_is_withheld(self):\\n for body in ('not-json', '{\\\"all_checks_pass\\\":true,\\\"token\\\":\\\"private-value\\\"}',\\n '{\\\"all_checks_pass\\\":true,\\\"snapshot_readonly\\\":{\\\"schema_version\\\":5}}'):\\n with self.assertRaises(ValueError):\\n actuator.json_result(subprocess.CompletedProcess([], 0, body, ''))\\n wrong = copy.deepcopy(COUNT)\\n wrong['outbox'] = {'private-row-value': 1}\\n with self.assertRaises(ValueError):\\n counts(wrong)\\n counts(COUNT) # blocked/unresolved counts are not required to be zero.\\n\\n def test_binary_copy_is_bounded_private_and_never_echoed(self):\\n blob = b'synthetic private fixture bytes'\\n digest = __import__('hashlib').sha256(blob).hexdigest()\\n metadata = {'all_checks_pass': True, 'snapshot_file': 'drill.sqlite', 'snapshot_bytes': len(blob),\\n 'snapshot_sha256': digest, 'snapshot_readonly': COUNT,\\n 'pod_name': 'fixture-pod', 'pod_uid': 'fixture-uid'}\\n journal = type('FixtureJournal', (), {'data': {'phases': {'drill-backup': {'result': metadata}}}})()\\n real_popen = subprocess.Popen\\n for extra in (b'', b'oversized'):\\n with self.subTest(extra=extra), tempfile.TemporaryDirectory() as folder:\\n os.chmod(folder, 0o700)\\n output = io.StringIO()\\n\\n def child(*args, **kwargs):\\n return real_popen([sys.executable, '-c', 'import sys;sys.stdout.buffer.write(' + repr(blob + extra) + ')'],\\n stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)\\n\\n with patch.object(actuator, 'CUSTODY', Path(folder)), patch.object(actuator, 'remote', return_value=metadata), \\\\\\n patch('subprocess.Popen', side_effect=child), redirect_stdout(output):\\n if extra:\\n with self.assertRaises(ValueError):\\n actuator.copy_snapshot('drill-copy', REVISION, {}, journal)\\n else:\\n result = actuator.copy_snapshot('drill-copy', REVISION, {}, journal)\\n self.assertTrue(result['off_cluster_private_copy_verified'])\\n self.assertEqual((Path(folder) / 'drill.sqlite').read_bytes(), blob)\\n self.assertEqual(output.getvalue(), '')\\n self.assertEqual((Path(folder) / 'drill.sqlite').stat().st_mode & 0o777, 0o600)\\n\\n def test_recreated_offline_volume_cannot_be_deleted(self):\\n identity = {'Name': actuator.VOLUME, 'Labels': {'nonce': 'old'}, 'CreatedAt': 'old'}\\n journal = type('FixtureJournal', (), {'data': {'phases': {\\n 'offline-verify': {'result': {'created_volume_identity': identity}}}}})()\\n inspected = [{**identity, 'CreatedAt': 'recreated'}]\\n with patch.object(actuator, 'docker', return_value=subprocess.CompletedProcess([], 0, json.dumps(inspected), '')) as mocked:\\n with self.assertRaises(ValueError):\\n actuator.cleanup_offline(journal)\\n self.assertEqual(mocked.call_count, 1)\\n\\n def test_offline_post_admin_integrity_and_original_hash_are_rechecked(self):\\n for defect in ('none', 'post-integrity', 'original-hash'):\\n with self.subTest(defect=defect), tempfile.TemporaryDirectory() as directory:\\n folder=Path(directory);os.chmod(folder,0o700)\\n snapshot=folder/'drill.sqlite';snapshot.write_bytes(b'private synthetic snapshot');os.chmod(snapshot,0o600)\\n digest=actuator.sha(snapshot)\\n prior={'snapshot_sha256':digest,'snapshot_readonly':COUNT}\\n journal=type('FixtureJournal',(),{'data':{'phases':{'drill-copy':{'result':prior},'offline-verify':{'attempt_id':'nonce'}}},'note':lambda *args:None})()\\n reads=[]\\n volume={'Name':actuator.VOLUME,'Labels':{'informed-decision.case':'infd-purpose-20261011-r1','informed-decision.use':'offline-restore-only','informed-decision.attempt':'nonce'},'Driver':'local','Scope':'local','CreatedAt':'fixture','Options':None}\\n def docker(argv, body=None, **kwargs):\\n if argv[0]=='info':body=json.dumps('bnt-lap001')\\n elif argv[:2]==['volume','ls']:body=''\\n elif argv[:2]==['volume','create']:body=actuator.VOLUME\\n elif argv[:2]==['volume','inspect']:body=json.dumps([volume])\\n elif 'informed-decision-admin' in argv:\\n body=json.dumps({key:COUNT[key] for key in ('schema_version','lifecycle','outbox','submissions')})\\n if defect=='original-hash':snapshot.write_bytes(b'changed synthetic original')\\n elif '--entrypoint' in argv and 'python' in argv:\\n reads.append(argv);proof=copy.deepcopy(COUNT)\\n if len(reads)==2 and defect=='post-integrity':proof['integrity']='corrupt'\\n body=json.dumps(proof)\\n else:raise AssertionError('unexpected offline command')\\n return subprocess.CompletedProcess(argv,0,body,'')\\n with patch.object(actuator,'CUSTODY',folder),patch.object(actuator,'CASE',CASE),patch.object(actuator,'docker',side_effect=docker),patch('subprocess.run',return_value=subprocess.CompletedProcess([],0,'{\\\"all_checks_pass\\\":true,\\\"private_copy_verified\\\":true}','')):\\n if defect=='none':\\n result=actuator.offline_verify(journal)\\n self.assertEqual(result['offline_post_admin_readonly'],COUNT)\\n self.assertTrue(result['original_snapshot_hash_unchanged'])\\n else:\\n with self.assertRaises(ValueError):actuator.offline_verify(journal)\\n self.assertEqual(len(reads),2)\\n\\n\\nclass FixedNativeProgram(unittest.TestCase):\\n def fixture(self):\\n sealed = json.loads((CASE / 'sealed-live-deployment.json').read_text())\\n live = copy.deepcopy(sealed)\\n live['metadata'].update(generation=42)\\n live['status'] = {'readyReplicas': 1, 'updatedReplicas': 1, 'observedGeneration': 42}\\n dependencies = json.loads((CASE / 'sealed-native-dependencies.json').read_text())\\n cm = copy.deepcopy(dependencies['configmap'])\\n cm.pop('canonical_data_sha256')\\n service = json.loads((CASE / 'candidate-deployment.json').read_text())\\n source_service = json.loads((CASE.parents[2] / 'deploy/lifecycle/service.candidate.json').read_text())\\n cm['data'] = next(x for x in source_service['items'] if x['kind'] == 'ConfigMap')['data']\\n pvc = copy.deepcopy(dependencies['pvc'])\\n pvc['status'] = {'phase': 'Bound'}\\n app = {'metadata': {'uid': '499868f2-eabc-4df4-ae31-b89ce58d750d', 'resourceVersion': '17'},\\n 'spec': {'source': {'repoURL': 'https://forgejo.coulomb.social/coulomb/informed-decision.git',\\n 'path': 'deploy/lifecycle', 'targetRevision': '7db8485ffecdebfabd77a9daec085553c74bf0bf'},\\n 'destination': {'namespace': 'informed-decision', 'server': 'https://kubernetes.default.svc'}}}\\n objects = {'deployment': live, 'configmap': cm, 'pvc': pvc, 'application': app}\\n payload = {'phase': 'release', 'source_revision': REVISION, 'approval': {}, 'sealed': sealed,\\n 'dependencies': dependencies, 'candidate': service,\\n 'rollback': json.loads((CASE / 'rollback-deployment.json').read_text()),\\n 'readonly': (CASE / 'sqlite_readonly.py').read_text(),'purpose_checks':(CASE/'check_installed.py').read_text(),\\n 'receipt_safety': (Path(__file__).parent / 'receipt_safety.py').read_text()}\\n return objects, payload\\n\\n def execute_fake(self, objects, payload, ambiguous=False, schema_refused=False):\\n writes = []\\n calls = []\\n\\n def fake(argv, input=None, **kwargs):\\n calls.append(argv)\\n if argv[:2] == ['kubectl', 'get']:\\n kind = argv[2]\\n if kind in objects:\\n body = objects[kind]\\n elif kind == 'pods':\\n body = {'items': [{'metadata': {'name': 'fixture-pod', 'uid': 'pod-uid',\\n 'ownerReferences': [{'kind': 'ReplicaSet', 'name': 'fixture-rs', 'uid': 'rs-uid'}]},\\n 'spec': objects['deployment']['spec']['template']['spec'],\\n 'status': {'phase': 'Running', 'containerStatuses': [{'name':'informed-decision','ready': True}]}}]}\\n elif kind == 'replicaset':\\n body = {'metadata': {'uid': 'rs-uid', 'ownerReferences': [\\n {'kind': 'Deployment', 'uid': payload['sealed']['metadata']['uid']}]}}\\n elif kind == 'nodes':\\n body = {'items': [{'metadata': {'name': 'fixture-node'}, 'status': {\\n 'addresses': [{'address': '92.205.62.239'}], 'allocatable': {'cpu': '4'},\\n 'conditions': [{'type': key, 'status': 'True' if key == 'Ready' else 'False'}\\n for key in ('Ready', 'MemoryPressure', 'DiskPressure', 'PIDPressure')]}}]}\\n else:\\n raise AssertionError('unexpected fixed metadata route')\\n return subprocess.CompletedProcess(argv, 0, json.dumps(body), '')\\n if argv[:2] == ['kubectl', 'exec']:\\n if schema_refused:\\n return subprocess.CompletedProcess(argv, 1, '', 'withheld')\\n return subprocess.CompletedProcess(argv, 0, json.dumps({\\n 'all_checks_pass': True, 'live_readonly_schema_integrity_counts': COUNT}), '')\\n if argv[:2] == ['kubectl', 'apply']:\\n admitted = copy.deepcopy(payload['sealed'])\\n admitted['spec']['template']['spec']['containers'][0]['image'] = (actuator.IMAGE if payload['phase']=='release' else payload['sealed']['spec']['template']['spec']['containers'][0]['image'])\\n return subprocess.CompletedProcess(argv, 0, json.dumps(admitted), '')\\n if argv[:2] == ['kubectl', 'describe']:\\n return subprocess.CompletedProcess(argv, 0, 'Allocated resources:\\\\n cpu 3460m (86%)\\\\n', '')\\n if argv[:2] == ['kubectl', 'diff']:\\n return subprocess.CompletedProcess(argv, 1, '-image: base\\\\n+image: candidate\\\\n', '')\\n if argv[:2] == ['kubectl', 'patch']:\\n if '--dry-run=server' not in argv:\\n writes.append(json.loads(input))\\n if ambiguous:\\n return subprocess.CompletedProcess(argv, 1, '', 'withheld')\\n return subprocess.CompletedProcess(argv, 0, 'application.argoproj.io/informed-decision\\\\n', '')\\n raise AssertionError('unexpected command')\\n\\n source = PROGRAM.replace('__PAYLOAD__', repr(json.dumps(payload))).replace(\\n '__GUARD__', repr((CASE / 'change_guard.py').read_text()))\\n output = io.StringIO()\\n with patch('subprocess.run', side_effect=fake), redirect_stdout(output):\\n try:\\n exec(compile(source, 'fixed-native-fixture', 'exec'), {'__name__': '__fixture__'})\\n except (ValueError, SystemExit):\\n pass\\n receipt = json.loads(output.getvalue()) if output.getvalue() else {'all_checks_pass': False}\\n return receipt, writes, calls\\n\\n def test_only_existing_application_operation_and_deployment_are_requested(self):\\n objects, payload = self.fixture()\\n receipt, writes, calls = self.execute_fake(objects, payload)\\n self.assertTrue(receipt['all_checks_pass'])\\n self.assertFalse(receipt['rollout_verified'])\\n self.assertEqual(len(writes), 1)\\n operation = writes[0][-1]['value']\\n self.assertFalse(operation['sync']['prune'])\\n self.assertEqual(operation['sync']['resources'], [\\n {'group': 'apps', 'kind': 'Deployment', 'name': 'informed-decision', 'namespace': 'informed-decision'}])\\n self.assertTrue(any('--dry-run=server' in argv and argv[:2] == ['kubectl', 'patch'] for argv in calls))\\n self.assertEqual(writes[0][0]['path'], '/metadata/uid')\\n\\n def test_source_overrides_automation_and_custody_drift_stop_before_write(self):\\n mutations = [lambda o: o['application']['metadata'].update(uid='recreated'),\\n lambda o: o['application']['spec'].update(syncPolicy={'automated': {}}),\\n lambda o: o['application']['spec']['source'].update(kustomize={'images': ['other']}),\\n lambda o: o['application']['spec'].update(sources=[{}]),\\n lambda o: o['configmap']['metadata'].update(uid='recreated'),\\n lambda o: o['pvc']['spec'].update(volumeName='replaced'),\\n lambda o: o['deployment']['status'].update(readyReplicas=0)]\\n for mutate in mutations:\\n with self.subTest(mutate=mutate):\\n objects, payload = self.fixture()\\n mutate(objects)\\n receipt, writes, calls = self.execute_fake(objects, payload)\\n self.assertFalse(receipt['all_checks_pass'])\\n self.assertEqual(writes, [])\\n\\n def test_preopen_schema_refusal_prevents_image_operation(self):\\n objects, payload = self.fixture()\\n receipt, writes, calls = self.execute_fake(objects, payload, schema_refused=True)\\n self.assertFalse(receipt['all_checks_pass'])\\n self.assertEqual(writes, [])\\n\\n\\n def test_rollback_unready_candidate_never_reads_pod_or_database(self):\\n objects, payload = self.fixture()\\n payload['phase'] = 'rollback'\\n objects['deployment']['status'].update(readyReplicas=0, updatedReplicas=0)\\n objects['deployment']['spec']['template']['spec']['containers'][0]['image'] = actuator.IMAGE\\n objects['application']['spec']['source']['targetRevision'] = REVISION\\n receipt, writes, calls = self.execute_fake(objects, payload, schema_refused=True)\\n self.assertTrue(receipt['all_checks_pass'])\\n self.assertFalse(receipt['rollout_verified'])\\n self.assertEqual(len(writes), 1)\\n self.assertFalse(any(argv[:2] == ['kubectl', 'exec'] or argv[:3] == ['kubectl', 'get', 'pods'] for argv in calls))\\n self.assertEqual(writes[0][-1]['value']['sync']['revision'], '7db8485ffecdebfabd77a9daec085553c74bf0bf')\\n\\n def test_rollback_still_refuses_custody_or_nonpair_image_drift(self):\\n for defect in ('cm', 'pvc', 'image'):\\n with self.subTest(defect=defect):\\n objects, payload = self.fixture();payload['phase'] = 'rollback'\\n objects['deployment']['status']['readyReplicas'] = 0\\n if defect == 'cm':objects['configmap']['metadata']['uid'] = 'recreated'\\n elif defect == 'pvc':objects['pvc']['spec']['volumeName'] = 'replaced'\\n else:objects['deployment']['spec']['template']['spec']['containers'][0]['image'] = 'foreign-image'\\n receipt, writes, calls = self.execute_fake(objects, payload)\\n self.assertFalse(receipt['all_checks_pass']);self.assertEqual(writes, [])\\n\\n def test_recovery_verification_is_separate_ready_old_image_schema_proof(self):\\n objects, payload = self.fixture();payload['phase'] = 'rollback-verify'\\n objects['application']['status'] = {'operationState': {'phase': 'Succeeded', 'operation': {'sync': {\\n 'revision': '7db8485ffecdebfabd77a9daec085553c74bf0bf', 'prune': False,\\n 'resources': [{'group':'apps','kind':'Deployment','name':'informed-decision','namespace':'informed-decision'}]}}}}\\n receipt, writes, calls = self.execute_fake(objects, payload)\\n self.assertTrue(receipt['all_checks_pass']);self.assertTrue(receipt['recovery_verification'])\\n self.assertEqual(writes, [])\\n self.assertTrue(any(argv[:2]==['kubectl','exec'] for argv in calls))\\n objects['deployment']['status']['readyReplicas'] = 0\\n receipt, writes, calls = self.execute_fake(objects,payload)\\n self.assertFalse(receipt['all_checks_pass'])\\n\\n def test_ambiguous_patch_is_never_retried(self):\\n objects, payload = self.fixture()\\n receipt, writes, calls = self.execute_fake(objects, payload, ambiguous=True)\\n self.assertFalse(receipt['all_checks_pass'])\\n self.assertEqual(len(writes), 1)\\n\\n\\nif __name__ == '__main__':\\n unittest.main()\\n\"\n },\n \"validation.json\": {\n \"sha256\": \"26c5acfa6e2ef5909ff9f3fc819ca1763b79f3cb65b3c43371f7944a284cde28\",\n \"content\": \"{\\n \\\"tests\\\": 16,\\n \\\"result\\\": \\\"passed\\\",\\n \\\"synthetic_transport_only\\\": true,\\n \\\"real_native_data_read\\\": false,\\n \\\"native_backup_export_restore_executed\\\": false,\\n \\\"native_workload_changed\\\": false,\\n \\\"actual_founder_approval\\\": false,\\n \\\"local_read_only_capability_checks\\\": [\\n \\\"argocdCLI absent, existingApplication.operation path retained\\\",\\n \\\"Dockerunixsocket engineName bnt-lap001\\\"\\n ],\\n \\\"case_source_commit_at_preparation\\\": \\\"e0359bc (owner original78source; final helpercommit mustbe explicitlypinned)\\\",\\n \\\"additional_regressions\\\": [\\n \\\"Ready0 candidate rollback dispatch has no Pod metadata/DB exec and one scoped CAS operation\\\",\\n \\\"rollback still refuses CM/PVC or nonpair-image drift\\\",\\n \\\"separate old-image Ready/schema5 recovery proof\\\",\\n \\\"post-admin readonly integrity refusal and original snapshot tamper refusal\\\"\\n ]\\n}\\n\"\n }\n },\n \"native_execution\": false\n}\n" }, { "item_id": "sqlite-readonly-py", @@ -220,7 +220,7 @@ { "item_id": "native-backup-restore-protocol-md", "media_type": "text/markdown", - "content": "# Protected native backup/restore and image-only release protocol\n\nPrepared protocol for `INFD-WP-0009-T04/purpose-overlay-v1`. No actual native backup, data export, restore, workload change or approval is recorded here. Candidate registry image identity remains a prerequisite; only after actual artifact proof may the founder approve one exact conditional protocol/rollout packet. The config-only7db8485 approval is outside this scope.\n\n## Preconditions and protected custody\n\nFreeze exact candidate and prior7f5c6cb image digests, source/installed policy hashes, current manually managed Argo Application/revision, runtime ConfigMap6c221878d051, Deployment UID/template/spec, schema5, policy package pins, database path `/data/private/review.sqlite`, PVC binding, replicas1/Recreate and stable keys for intended verification. Confirm no concurrent writer or custody change. Use fixed metadata; never fetch Secret objects or token values. A changed image/config/schema/owner invalidates the packet. Fresh resources/headroom and exact source/native server-dry-run/diff remain required.\n\nBackups are private evidence containing real decision records, not logs or packet attachments. Allocate a unique backup directory under existing protected PVC custody, owned10001, mode0700, snapshot file0600, no symlink/hardlink/reused output path. An off-cluster copy belongs only in the already established ignored `.private-backups/` custody with0700/0600 permissions; no Git, StateHub, public object store or terminal-content dump. Record only schema, integrity pass/fail, bounded table/state counts and protected receipt identifier; retain byte digests in protected custody if needed for internal copy identity. No credential, record payload or token fingerprint enters public evidence.\n\n## Approved online compatibility drill\n\nWithin the explicit founder-approved action, run the existing base image's `informed-decision-admin backup --db /data/private/review.sqlite --output ` in the actual serving workload. This uses SQLite's backup API for a transactionally consistent snapshot; copying a live main database while ignoring WAL is prohibited. Suppress raw failures/output and retain only sanitized status. Observe schema/integrity and count-only metadata from the resulting snapshot, not record content.\n\nTransfer that consistent snapshot only into protected off-cluster custody through the existing authorized operator lane. The copy is real production data even in build mode. Verify private permissions, unique identity and protected internal digest agreement. Do not export mounted workload credentials or directory trees; copy only the exact snapshot.\n\nCreate a separate private disposable restore volume/directory; retain the original snapshot unchanged. Run the exact published candidate with network disabled, no production ConfigMap/token mounts, read-only image and only that isolated volume writable. Override the service entrypoint with the owner's count-only administrative inspection/integrity check; do not start HTTP listeners, audit delivery, requester exchanges or approval operations. The current candidate changes policy.py only and retains the schema/store module bytes; still prove schema5, SQLite integrity and exact bounded counts before/after opening the restored copy. Refuse any migration/downgrade, lost/changed counts, unexpected write class or unknown outcome. Keep pending/uncertain submission and outbox states; never replay, discard or mark them delivered to green the drill. Cleanup only the disposable copy/volume after verified receipt; retain the original protected backup for the approved recovery interval.\n\nThis step is actual native-data compatibility evidence once performed. Its previous synthetic fixture checks remain mechanism evidence and cannot be renamed native success. A failed drill stops rollout and remains a failed/unverified outcome in the same trial.\n\n## Fresh cutover snapshot and single-writer rollout\n\nAfter successful actual-data compatibility checks, create another unique SQLite-consistent online snapshot immediately before the image cutover, retaining its point-in-time schema/integrity/count receipt. This is an online transactional snapshot, not a claim that dispatchers or human writes were quiesced. Every later committed record remains in the live database; same-schema rollback retains that database and never restores the earlier snapshot over it. The narrow image-only update does not need dispatcher/configuration/PVC/temporary-pod changes or a schema cutover. If fresh verification shows a migration or any data-restoration requirement, stop and refine the proposal rather than applying this protocol.\n\nThe existing Recreate rollout drains/stops the single old writer before starting the new image on the same PVC; the inherited single-writer lock independently refuses concurrent serving processes. Do not add an admin pod, scale-to-zero, dispatcher stop, network-policy rewrite or snapshot overwrite as an improvised image-only step. The existing owner admin backup operation runs inside the admitted serving workload, and its separate protected restore drill runs off-cluster with network disabled and no workload credentials. Those exact custody operations must be enumerated in the founder packet alongside the one Deployment image change.\n\nOnce backup/compatibility/preflight gates pass, manually pin the existing Argo Application to the exact reviewed source revision and sync only Deployment/informed-decision with prune false, keeping the current immutable runtime ConfigMap and all other resources. The source patch changes only the image in admission/rendered Deployment; no Secret, PVC, policy, database or dispatcher change is included unless separately enumerated in the final proposal. Observe five-minute readiness and exact image/config/schema/pins. Verify native lifecycle binding using stable keys and an isolated installed-client probe based on a real provider response contaminated with advisory purpose; prove refusal before any write. Do not contaminate the live PDP, create human approvals, read credentials through CLI, or replay unknown external outcomes for testing.\n\n## Same-schema rollback and evidence retention\n\nOn startup/readiness/binding/refusal failure, retain current database, cutover backup and every post-cutover evidence/uncertain outcome. Restore only the prior7f5c6cb image through the same manual Argo owner path, retaining schema5 and current DB/configuration; never restore an old snapshot over current live evidence just to roll the image back. Verify old image/Ready1, same schema/counts and prior behavior, and reconcile any external effects using existing lifecycle/audit ownership. The narrow overlay's identical store/schema/dependency bytes permit this image-only rollback; it is not permission for a schema downgrade or data loss.\n\nRecord original/approved/executed source and image revisions, backup/drill/cutover/rollout timestamps, exact disposition and sanitized outcomes in the existing supervised trial receipt. EUR0 incremental infrastructure estimate uses existing service/storage/operator lane; protected temporary copy/storage consumption and15\u201330minute recovery time remain operational costs. No EUR incident-loss cap or autonomy grant is inferred. TaskT04 cannot close until actual published image, approved native compatibility and release plus post-release refusal/binding evidence all exist.\n\n## Exact release case identifiers\n\nProposal `INFD-WP-0009-T04/purpose-overlay-v1`, trial `infd-purpose-20261011-r1`.\nProtected native parent `/data/private/purpose-overlay-r1` must be unique/non-symlink, owned10001 and0700. The drill snapshot is `drill.sqlite`, the refreshed pre-cutover snapshot `cutover.sqlite`, each new0600 file; refuse any existing output. Off-cluster custody is the existing ignored Custodian `.private-backups/20261011-infd-purpose-r1` parent0700, files0600; no snapshot is an evidence attachment. Check owner UID, no symlinks, ignored status and free capacity for both native snapshots plus independently protected copies before making any snapshot.\n\nThe disposable offline restore volume is `infd-purpose-r1-restore-20261011`; refuse an existing volume, copy only the selected frozen snapshot, and run exact published candidate763c with networknone/read-only image,128MiB/core1 and no runtime config/token mounts. SQLite `PRAGMA integrity_check` must return `ok`, `PRAGMA user_version`/Store inspection must agree with actual schema5 semantics, and installed admin count-only inspection must match the frozen snapshot. Validate the actual schema representation rather than assume PRAGMA user_version is the schema authority. No synthetic restoration is reported as native restoration. Native original/off-cluster copies remain retained; only the disposable restore copy/volume may be removed under the exact approved cleanup scope.\n\n## Mandatory pre-open schema gate and offline command\n\n`informed-decision-admin inspect` and `backup` construct Store, which can migrate schemas1\u20134 to5. Therefore **before any Store/admin open**, run the exact attached stdlib-only `sqlite_readonly.py` against the native source database using SQLite URI mode=ro, query_only and one read transaction. Require PRAGMA user_version5, integrity_check=ok and retain count-only baseline. Refuse any other/unknown schema or incomplete integrity/count check before constructing Store; do not infer no migration from a post-open admin report. This native gate has not been executed in this source-preparation stage. Repeat before each native backup/admin operation.\n\nAfter copying the selected consistent snapshot to the isolated restored private path `/restore/review.sqlite`, run the same read-only checker **before** any offline candidate admin/Store opens that copy. Frozen snapshot and restored-copy schema/integrity/count reports must agree exactly; the copied main-file digest must match the selected closed snapshot. Reject oldschema fixtures rather than allow migration. Only after this pre-open gate may the offline candidate admin inspect run.\n\nOffline command vectors use exactimage `forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a`, `--network none --read-only --cpus 1 --memory 128m`, private restored volume mounted at `/restore`, and **no runtime config/credential/token mounts**. First override entrypoint to `python`, arguments `- --db /restore/review.sqlite`, streaming only the verified attached checker on stdin. Then override entrypoint to **`informed-decision-admin`**, arguments **`inspect --db /restore/review.sqlite`**. This does not start `informed-decision-container`, the HTTP service, dispatcher or delivery workers. Compare the admin's schema/lifecycle/outbox/submission counters to the frozen pre-open snapshot report; integrity and migration-free pre-open proof come from the stdlib checker, not admin output alone.\n\nLive reads and online snapshots may legitimately differ because reviews, intake and delivery can commit concurrently. Exact counter equality is required between the frozen selected snapshot and its offline restored clone; it is **not** required between a running post-cutover/rollback database and an earlier snapshot. Live count changes must be accounted for as legitimate committed records/state transitions; preserve all current and uncertain entries. Do not discard new commits or restore the old snapshot to force equality. Same-schema image rollback keeps the current live DB, followed by read-only schema5/integrity and count-only health checks; any unexplained evidence loss or required data recovery stops and requires a separate founder decision.\n\nThe fresh preflight also independently reads the actual immutable nonsecret ConfigMap and bound PVC: compares sealed UIDs/fullmetadata/PVCspec+volumeName and canonical runtime data checksum, returning no raw runtime data. Same-name deletion/recreation or content/custody drift stops before admission. Secret values remain excluded. Both local and remote optimized Python interpreters are explicitly refused before assertion-based gates.\n" + "content": "# Protected native backup/restore and image-only release protocol\n\nPrepared protocol for `INFD-WP-0009-T04/purpose-overlay-v1`. No actual native backup, data export, restore, workload change or approval is recorded here. Candidate registry image identity remains a prerequisite; only after actual artifact proof may the founder approve one exact conditional protocol/rollout packet. The config-only7db8485 approval is outside this scope.\n\n## Preconditions and protected custody\n\nFreeze exact candidate and prior7f5c6cb image digests, source/installed policy hashes, current manually managed Argo Application/revision, runtime ConfigMap6c221878d051, Deployment UID/template/spec, schema5, policy package pins, database path `/data/private/review.sqlite`, PVC binding, replicas1/Recreate and stable keys for intended verification. Confirm no concurrent writer or custody change. Use fixed metadata; never fetch Secret objects or token values. A changed image/config/schema/owner invalidates the packet. Fresh resources/headroom and exact source/native server-dry-run/diff remain required.\n\nBackups are private evidence containing real decision records, not logs or packet attachments. Allocate a unique backup directory under existing protected PVC custody, owned10001, mode0700, snapshot file0600, no symlink/hardlink/reused output path. An off-cluster copy belongs only in the already established ignored `.private-backups/` custody with0700/0600 permissions; no Git, StateHub, public object store or terminal-content dump. Record only schema, integrity pass/fail, bounded table/state counts and protected receipt identifier; retain byte digests in protected custody if needed for internal copy identity. No credential, record payload or token fingerprint enters public evidence.\n\n## Approved online compatibility drill\n\nWithin the explicit founder-approved action, run the existing base image's `informed-decision-admin backup --db /data/private/review.sqlite --output ` in the actual serving workload. This uses SQLite's backup API for a transactionally consistent snapshot; copying a live main database while ignoring WAL is prohibited. Suppress raw failures/output and retain only sanitized status. Observe schema/integrity and count-only metadata from the resulting snapshot, not record content.\n\nTransfer that consistent snapshot only into protected off-cluster custody through the existing authorized operator lane. The copy is real production data even in build mode. Verify private permissions, unique identity and protected internal digest agreement. Do not export mounted workload credentials or directory trees; copy only the exact snapshot.\n\nCreate a separate private disposable restore volume/directory; retain the original snapshot unchanged. Run the exact published candidate with network disabled, no production ConfigMap/token mounts, read-only image and only that isolated volume writable. Override the service entrypoint with the owner's count-only administrative inspection/integrity check; do not start HTTP listeners, audit delivery, requester exchanges or approval operations. The current candidate changes policy.py only and retains the schema/store module bytes; still prove schema5, SQLite integrity and exact bounded counts before/after opening the restored copy. Refuse any migration/downgrade, lost/changed counts, unexpected write class or unknown outcome. Keep pending/uncertain submission and outbox states; never replay, discard or mark them delivered to green the drill. Cleanup only the disposable copy/volume after verified receipt; retain the original protected backup for the approved recovery interval.\n\nThis step is actual native-data compatibility evidence once performed. Its previous synthetic fixture checks remain mechanism evidence and cannot be renamed native success. A failed drill stops rollout and remains a failed/unverified outcome in the same trial.\n\n## Fresh cutover snapshot and single-writer rollout\n\nAfter successful actual-data compatibility checks, create another unique SQLite-consistent online snapshot immediately before the image cutover, retaining its point-in-time schema/integrity/count receipt. This is an online transactional snapshot, not a claim that dispatchers or human writes were quiesced. Every later committed record remains in the live database; same-schema rollback retains that database and never restores the earlier snapshot over it. The narrow image-only update does not need dispatcher/configuration/PVC/temporary-pod changes or a schema cutover. If fresh verification shows a migration or any data-restoration requirement, stop and refine the proposal rather than applying this protocol.\n\nThe existing Recreate rollout drains/stops the single old writer before starting the new image on the same PVC; the inherited single-writer lock independently refuses concurrent serving processes. Do not add an admin pod, scale-to-zero, dispatcher stop, network-policy rewrite or snapshot overwrite as an improvised image-only step. The existing owner admin backup operation runs inside the admitted serving workload, and its separate protected restore drill runs off-cluster with network disabled and no workload credentials. Those exact custody operations must be enumerated in the founder packet alongside the one Deployment image change.\n\nOnce backup/compatibility/preflight gates pass, manually pin the existing Argo Application to the exact reviewed source revision and sync only Deployment/informed-decision with prune false, keeping the current immutable runtime ConfigMap and all other resources. The source patch changes only the image in admission/rendered Deployment; no Secret, PVC, policy, database or dispatcher change is included unless separately enumerated in the final proposal. Observe five-minute readiness and exact image/config/schema/pins. Run the ten installed purpose variants on the actual native placement using synthetic transport; they prove exact installed module refusal behavior and explicitly report native_provider=false. They do not prove an actual provider response, PDP authority or native lifecycle binding; any required actual-provider proof remains a distinct T04 completion gate with separate authorized preparation, and must not be claimed by this helper. Do not contaminate the live PDP, create human approvals, read credentials through CLI, or replay unknown external outcomes for testing.\n\n## Same-schema rollback and evidence retention\n\nOn startup/readiness/binding/refusal failure, retain current database, cutover backup and every post-cutover evidence/uncertain outcome. Restore only the prior7f5c6cb image through the same manual Argo owner path, retaining schema5 and current DB/configuration; never restore an old snapshot over current live evidence just to roll the image back. Verify old image/Ready1, same schema/counts and prior behavior, and reconcile any external effects using existing lifecycle/audit ownership. The narrow overlay's identical store/schema/dependency bytes permit this image-only rollback; it is not permission for a schema downgrade or data loss.\n\nRecord original/approved/executed source and image revisions, backup/drill/cutover/rollout timestamps, exact disposition and sanitized outcomes in the existing supervised trial receipt. EUR0 incremental infrastructure estimate uses existing service/storage/operator lane; protected temporary copy/storage consumption and15–30minute recovery time remain operational costs. No EUR incident-loss cap or autonomy grant is inferred. TaskT04 cannot close until actual published image, approved native compatibility and release plus post-release refusal/binding evidence all exist.\n\n## Exact release case identifiers\n\nProposal `INFD-WP-0009-T04/purpose-overlay-v1`, trial `infd-purpose-20261011-r1`.\nProtected native parent `/data/private/purpose-overlay-r1` must be unique/non-symlink, owned10001 and0700. The drill snapshot is `drill.sqlite`, the refreshed pre-cutover snapshot `cutover.sqlite`, each new0600 file; refuse any existing output. Off-cluster custody is the existing ignored Custodian `.private-backups/20261011-infd-purpose-r1` parent0700, files0600; no snapshot is an evidence attachment. Check owner UID, no symlinks, ignored status and free capacity for both native snapshots plus independently protected copies before making any snapshot.\n\nThe disposable offline restore volume is `infd-purpose-r1-restore-20261011`; refuse an existing volume, copy only the selected frozen snapshot, and run exact published candidate763c with networknone/read-only image,128MiB/core1 and no runtime config/token mounts. SQLite `PRAGMA integrity_check` must return `ok`, `PRAGMA user_version`/Store inspection must agree with actual schema5 semantics, and installed admin count-only inspection must match the frozen snapshot. Validate the actual schema representation rather than assume PRAGMA user_version is the schema authority. No synthetic restoration is reported as native restoration. Native original/off-cluster copies remain retained; only the disposable restore copy/volume may be removed under the exact approved cleanup scope.\n\n## Mandatory pre-open schema gate and offline command\n\n`informed-decision-admin inspect` and `backup` construct Store, which can migrate schemas1–4 to5. Therefore **before any Store/admin open**, run the exact attached stdlib-only `sqlite_readonly.py` against the native source database using SQLite URI mode=ro, query_only and one read transaction. Require PRAGMA user_version5, integrity_check=ok and retain count-only baseline. Refuse any other/unknown schema or incomplete integrity/count check before constructing Store; do not infer no migration from a post-open admin report. This native gate has not been executed in this source-preparation stage. Repeat before each native backup/admin operation.\n\nAfter copying the selected consistent snapshot to the isolated restored private path `/restore/review.sqlite`, run the same read-only checker **before** any offline candidate admin/Store opens that copy. Frozen snapshot and restored-copy schema/integrity/count reports must agree exactly; the copied main-file digest must match the selected closed snapshot. Reject oldschema fixtures rather than allow migration. Only after this pre-open gate may the offline candidate admin inspect run.\n\nOffline command vectors use exactimage `forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a`, `--network none --read-only --cpus 1 --memory 128m`, private restored volume mounted at `/restore`, and **no runtime config/credential/token mounts**. First override entrypoint to `python`, arguments `- --db /restore/review.sqlite`, streaming only the verified attached checker on stdin. Then override entrypoint to **`informed-decision-admin`**, arguments **`inspect --db /restore/review.sqlite`**. This does not start `informed-decision-container`, the HTTP service, dispatcher or delivery workers. Compare the admin's schema/lifecycle/outbox/submission counters to the frozen pre-open snapshot report; integrity and migration-free pre-open proof come from the stdlib checker, not admin output alone.\n\nLive reads and online snapshots may legitimately differ because reviews, intake and delivery can commit concurrently. Exact counter equality is required between the frozen selected snapshot and its offline restored clone; it is **not** required between a running post-cutover/rollback database and an earlier snapshot. Live count changes must be accounted for as legitimate committed records/state transitions; preserve all current and uncertain entries. Do not discard new commits or restore the old snapshot to force equality. Same-schema image rollback keeps the current live DB, followed by read-only schema5/integrity and count-only health checks; any unexplained evidence loss or required data recovery stops and requires a separate founder decision.\n\nThe fresh preflight also independently reads the actual immutable nonsecret ConfigMap and bound PVC: compares sealed UIDs/fullmetadata/PVCspec+volumeName and canonical runtime data checksum, returning no raw runtime data. Same-name deletion/recreation or content/custody drift stops before admission. Secret values remain excluded. Both local and remote optimized Python interpreters are explicitly refused before assertion-based gates.\n\n## Exact supervised mechanical execution refinement\n\nThe directly attached `execution-bundle.json` contains the exact helper source, plan, tests and PENDING receipt template. It replaces the direct raw scan attachment within the twenty-document limit; `published-verification.json` still binds the unchanged actual unfiltered raw scan, raw SBOM and base scan SHA256 values, retained in the owner evidence package. The known inherited fixable MEDIUM remains explicit, with owner T05/risk follow-through. Neither archive nor technical agreement supplies human approval.\n\nThe reviewed protocol basis is owner commit e0359bcb6cdfad9ab3e868054121fe0cebec2d68, with source follow-through9268c9ac0bbee508fe35c0b90dcefef4c24da2f5. The subsequent exact applied helper/packet owner commit must be named in the externally verified founder receipt before execution. Verify the four committed Git blobs (admission.candidate.json, service.candidate.json, kustomization.yaml, registries.candidate.json) against execution-plan.json as well as current worktree/HEAD; reject overrides/plugins/multiple Application sources and any present automated configuration, including automated:{}.\n\nRoot freshly authenticates the exact confirmed founder person/platform-root ACCEPT of this stable memo/version1 at the fixed native Informed Decision origin before each phase, and supplies protected0600 receipt/outcome files. The helper checks their exact relation and freshness120seconds; these files are supervised bookkeeping, not signed authenticated grants, a human-provider implementation, or autonomous agent authority. Do not derive them from technical reviews or caller assertions.\n\nFixed order: drill-backup → drill-copy → offline-verify → cleanup-offline → cutover-backup → cutover-copy → release → verify. A separate recorded release attempt permits rollback → rollback-verify. Every phase fsyncs an attempt nonce/RUNNING journal before effects. Failure/interruption/ambiguous actuation stays UNCERTAIN and the same phase cannot be retried. No improvised adapter or whole-Application sync is permitted.\n\nThe NEW nonce-labelled local volume requires one explicit isolated initializer as UID0:0 with only CAP_CHOWN, exact763c image, --network none --read-only --cpus 1 --memory 128m --cap-drop ALL --cap-add CHOWN --security-opt no-new-privileges. Its only mount is that new named volume at /restore; no host mount, native PVC, runtime config or token mount. Protected snapshot stdin goes only to a unique0600 main file with exact digest, and directory/file custody is set0700/0600 UID/GID10001. Then all pre-open, admin and post-admin checks run UID10001:10001, capabilities dropped, networknone. The second stdlib readonly schema5/integrity/count proof after admin must exactly equal the frozen snapshot proof; independently recheck the retained original protected snapshot SHA. No service startup occurs.\n\nRollback dispatch must be available if the candidate is unready or cannot start: it checks sealed Deployment/CM/PVC custody, only prior/candidate source/image pair, node health/headroom and fresh old-image server admission plus Application UID/resourceVersion/source CAS, with no failing candidate Pod/exec/database prerequisite. Dispatch acknowledgment is not recovered health. `rollback-verify` separately requires old image Ready1, succeeded exact Deployment-only/prune=false operation and readonly schema5/integrity/count proof of the latest retained live database. No snapshot replaces the current database.\n\n**Deadline refinement:** all phases, including rollback and verification, must begin before2026-10-12T23:59:59Z. The earlier amended packet described unstarted-release expiry; this exact helper also bounds recovery/verification. Start early enough to complete the bounded drill and any recovery within the window. If exhausted, stop and obtain a fresh founder decision rather than silently extend a grant. This may delay recovery and is an explicit operational risk. No timer/controller automatically rolls back or changes service at expiry.\n" }, { "item_id": "inherited-vulnerability-follow-through-json", diff --git a/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json b/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json index cc6f5d7..1df1d5b 100644 --- a/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json +++ b/docs/evidence/2026-10-11-purpose-image-release/lifecycle-commands.json @@ -8,7 +8,7 @@ "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", "requested_act": "approve", "binding_level": "organizational", - "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Before ANY admin/Store, readonly schema5/integrity/count gate; protected backup/restore, sealedDeployment+actualCM/PVC identities and unoptimizedpreflight required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "brief": "Actual CI763c purpose-only image; eight base layers unchanged, legacy serialization disclosed. Scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib/T05 dueOct18. Exact helper binds four Git blobs, protected real-data backup/offline drill (isolated new-volume UID0/CAP_CHOWN init, then UID10001 readonly/admin/postcheck), Deployment-only manualArgo/prune=false, currentDB retention. Rollback needs no Ready candidate; separate recovery verification. ALL phases incl recovery must begin byOct12, fresh founder decision beyond. Ten installed checks are synthetic/native_provider=false. No native backup/image action yet.", "binding": { "principal": { "id": "pending-human-session", @@ -21,19 +21,19 @@ "label": "Informed Decision image-only purpose hardening on railiance01", "environment": "production" }, - "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedCM/PVC/Deploymentpreflight+pre-openreadonlyschema5+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/offcluster custody/isolated offline restore with explicit NEW-volume UID0 CAP_CHOWN-only initializer followed by UID10001 readonly schema5/admin/postproof; exact four committed source blobs and helper-bound manual Deployment-only image763c/prune=false. Fresh root-authenticated confirmed founder disposition before each phase; supervised receipt is not signed/autonomous grant. ALL phases including rollback/rollback-verify must begin before2026-10-12T23:59:59Z, new founder decision beyond; no expiry controller. Rollbackprior7f5 retains latestschema5DB and does not need Ready candidate; separate old-image/schema recovery proof. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 reviewdueOct18. Syntheticinstallednative_provider=false is not actualPDP authority proof; actualproviderT04gate distinct. No credential/policy/grant change, humanbinding or wholeAppsync." }, "step_kind": "approve", "packet": [ { "item_id": "decision-packet-md", "label": "decision-packet.md", - "hash": "sha256:23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1" + "hash": "sha256:a542235221890fa9ffb9c78f65d5e93227f5215d3ac68f0d1fa4addfd17bdaf6" }, { "item_id": "proposal-json", "label": "proposal.json", - "hash": "sha256:a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82" + "hash": "sha256:7cca98a6c159201823a42fe05218d32e46152031b3f8a2ee26795454df0016df" }, { "item_id": "candidate-admission-json", @@ -71,9 +71,9 @@ "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" }, { - "item_id": "trivy-full-json", - "label": "trivy-full.json", - "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + "item_id": "execution-bundle-json", + "label": "execution-bundle.json", + "hash": "sha256:27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d" }, { "item_id": "sqlite-readonly-py", @@ -88,7 +88,7 @@ { "item_id": "native-backup-restore-protocol-md", "label": "native-backup-restore-protocol.md", - "hash": "sha256:2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc" + "hash": "sha256:440932f5975f42f8bc3ef5c7b281f42cf843246ffc8faba64a1d80b43ffa7478" }, { "item_id": "inherited-vulnerability-follow-through-json", @@ -145,14 +145,14 @@ }, "documents": [ { - "digest": "sha256:23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1", + "digest": "sha256:a542235221890fa9ffb9c78f65d5e93227f5215d3ac68f0d1fa4addfd17bdaf6", "media_type": "text/markdown", - "content_base64": "IyBJbmZvcm1lZCBEZWNpc2lvbiBwdXJwb3NlIG92ZXJsYXkgcmVsZWFzZQoKIyMgUmVxdWVzdGVkIGRlY2lzaW9uCgpBcHByb3ZlIHRoZSBleGFjdCBwdXJwb3NlLW9ubHkgaW1hZ2Ugcm9sbG91dCBhbmQgcHJvdGVjdGVkIHJlYWwtZGF0YSBiYWNrdXAvcmVzdG9yZSBwcm90b2NvbCBmb3IgdGhlIGV4aXN0aW5nIEluZm9ybWVkIERlY2lzaW9uIHNlcnZpY2Ugb24gcmFpbGlhbmNlMDEuIFRoaXMgcmVxdWVzdCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBhbHJlYWR5IGFwcHJvdmVkIGNvbmZpZy1vbmx5IHJlcGFpci4gT25seSB0aGUgZXhpc3RpbmcgRGVwbG95bWVudCBpbWFnZSBjaGFuZ2VzIHRocm91Z2ggdGhlIG93bmVyJ3MgbWFudWFsIEFyZ28gd29ya2Zsb3csIHdpdGggcHJ1bmUgZGlzYWJsZWQuIFJ1bnRpbWUgQ29uZmlnTWFwIGBpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MWAsIHNjaGVtYTUsIFBWQywgY3JlZGVudGlhbHMsIGF1ZGllbmNlLCBwb2xpY2llcywgcmVnaXN0cmllcywgYWNjZXNzLCByZXBsaWNhMSBhbmQgUmVjcmVhdGUgc3RyYXRlZ3kgcmVtYWluIGZpeGVkLiBFeGVjdXRlIGJ5IDIwMjYtMTAtMTJUMjM6NTk6NTlaLCBhZnRlciByZWZyZXNoZWQgc2VhbGVkLXNvdXJjZS9VSUQvY29uZmlndXJhdGlvbiBjaGVja3MgYW5kIGJhY2t1cC9yZXN0b3JlIGdhdGVzLiBFeHBpcnkgc3RvcHMgYXV0aG9yaXphdGlvbiBmb3IgYW4gdW5zdGFydGVkIHJlbGVhc2U7IGl0IGRvZXMgbm90IGluc3RhbGwgYSBjb250cm9sbGVyIG9yIGF1dG9tYXRpY2FsbHkgcm9sbCBiYWNrIGFuIGFscmVhZHkgcmVsZWFzZWQgaW1hZ2UuCgojIyBBcnRpZmFjdCBhbmQga25vd24gZmluZGluZwoKQWN0dWFsIG93bmVyIENJIHRhc2sxMTQ4NC9ydW4zIHB1Ymxpc2hlZCBpbW11dGFibGUgaW1hZ2UgYHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhYCBmcm9tIHNvdXJjZSBgM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OGAuIEFub255bW91cyByZWdpc3RyeSB2ZXJpZmljYXRpb24gcHJlc2VydmVzIGFsbCBlaWdodCBiYXNlIGNvbXByZXNzZWQgYmxvYnMvcm9vdGZzIGxheWVycyBhbmQgYWRkcyBvbmx5IHBvbGljeS5weSB3aXRoIGV4YWN0IHNvdXJjZSBoYXNoIGFuZCBtb2RlMDY0NC4gTGVnYWN5LWJ1aWxkZXIgbWVkaWEtdHlwZS9kZWZhdWx0IGNvbmZpZyBzZXJpYWxpemF0aW9uIGRpZmZlcmVuY2VzIGFyZSByZWNvcmRlZDsgdGhlIHJ1bnRpbWUgc2VtYW50aWNzIHJlbWFpbiB1bmNoYW5nZWQuIFB1bGxlZCBwdWJsaXNoZWQgaW1hZ2UgZXhlY3V0ZXMgYXMgVUlEMTAwMDEvR0lEMTAwMDEgYW5kIHBhc3NlcyB0ZW4gaW5zdGFsbGVkIGNoZWNrczogdHdvIHN1cHBvcnRlZCBiaW5kaW5nIGZvcm1zLCBlaWdodCBhZHZpc29yeS9tYWxmb3JtZWQgcmVmdXNhbHMuIFRlc3RzIHVzZSBzeW50aGV0aWMgdHJhbnNwb3J0IGFuZCBkbyBub3QgY2xhaW0gbmV3IG5hdGl2ZSBQRFAgYXV0aG9yaXphdGlvbiBwcm9vZi4gVGhlIHR3byBmYWlsZWQgQ0kgYXR0ZW1wdHMgcmVtYWluIGluIHRoZSBzYW1lIHRyaWFsIGhpc3RvcnkuCgpBY3R1YWwgdW5maWx0ZXJlZCBwaW5uZWQgc2Nhbm5lci9EQiBldmlkZW5jZSBjb3ZlcnM0NHBhY2thZ2VzOiB6ZXJvIEhJR0gvQ1JJVElDQUwsICoqb25lIGZpeGFibGUgTUVESVVNKiosIENWRS0yMDI2LTg1MDkxLCB6bGliMS4zLjItcjAgZml4ZWQgaW4xLjMuMi1yMS4gQWN0dWFsIGN1cnJlbnQtYmFzZSBzY2FuIGhhcyB0aGUgaWRlbnRpY2FsIGZpbmRpbmcuIEFwcHJvdmluZyB0aGlzIHBhY2tldCBleHBsaWNpdGx5IHBlcm1pdHMgdGhpcyBpbmhlcml0ZWQgZmluZGluZyBkdXJpbmcgdGhpcyBuYXJyb3cgcHVycG9zZSByZWxlYXNlOyBpdCBpcyBub3QgYSBSaXNrTmV4dXMgZXN0YXRlIHJpc2sgZ3JhZGUgb3IgemVyby1DVkUgY2xhaW0uIE93bmVyIHJlY29yZCBJTkZELVJJU0stMjAyNjEwMTEtWkxJQi04NTA5MSBhbmQgbGl2ZSB0YXNrIElORkQtV1AtMDAwOS1UMDUgcmVxdWlyZSBzZXBhcmF0ZSBiYXNlIHJlZnJlc2ggYW5kIG5hdGl2ZSBhcHByb3ZhbCwgcmV2aWV3ZWQgYnkyMDI2LTEwLTE4LiBUaGF0IHJldmlldyBkYXRlIGlzIG1hbnVhbCBmb2xsb3ctdGhyb3VnaCwgd2l0aCBubyBhdXRvLWNvbnRyb2xsZXIgY2xhaW0uIFNjYW5uZXIgbm90ZXMgQWxwaW5lMy4yNCBhYnNlbnQgRU9MIGxpc3Q7IE9TIHZ1bG5lcmFiaWxpdHkgZGV0ZWN0aW9uIHJhbiBhZ2FpbnN0MzhPU3BhY2thZ2VzLiBVbmtub3duIHZ1bG5lcmFiaWxpdGllcyByZW1haW4gb3V0c2lkZSBzbmFwc2hvdCBrbm93bGVkZ2UuCgojIyBOYXRpdmUgYmFzZWxpbmUgYW5kIGdhdGVzCgpPcmlnaW5hbCByZWFkLW9ubHkgY2FwdHVyZTAxOjI1OjM4WjogZXhpc3RpbmcgRGVwbG95bWVudCBVSURhNTg4ZTEwYSwgUmVhZHkxLCBpbWFnZTdmNWMsIHVuY2hhbmdlZCBydW50aW1lNmM7IG5hdGl2ZSBhZG1pc3Npb24gcHJlc2VydmVzIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gcGx1cyBleGFjdGx5IHRoZSBwcm9wb3NlZCBpbWFnZS4gQ2xpZW50ZGlmZiByZXR1cm5zMS4gUmVxdWVzdHMzNDYwLzQwMDBtQ1BVODYlLCBtZW1vcnk5NDcyTWk1OSU7IHJlZnJlc2ggYmVmb3JlIHJlbGVhc2UuIEV4aXN0aW5nIEFyZ28gQXBwbGljYXRpb24gVUlENDk5ODY4ZjIgaXMgbWFudWFsLCB0YXJnZXQ3ZGI4NDg1LCBIZWFsdGh5IHdpdGggcHJlLWV4aXN0aW5nIE91dE9mU3luYyBzdGF0dXMuIERvIG5vdCB0cmVhdCBhIHNjb3BlZCBEZXBsb3ltZW50IHJlbGVhc2UgYXMgZnVsbC1hcHAgcmVjb25jaWxpYXRpb24uIFByZXNlcnZlIGl0cyB0cmFja2luZy1pZDsgbm8gdW5yZWxhdGVkIHJlc291cmNlIHN5bmMvcHJ1bmUvYWRvcHRpb24uCgpUaGUgcmVmaW5lZCByZWFkLW9ubHkgaGVscGVyIGJpbmRzIG9yaWdpbmFsIHNvdXJjZS9oZWxwZXIvcmVuZGVyL2Jhc2VsaW5lIGhhc2hlcyBhbmQgYWN0dWFsIGltbXV0YWJsZSBDb25maWdNYXAvUFZDIFVJRHMsIHJ1bnRpbWUtZGF0YSBjaGVja3N1bSBhbmQgYm91bmQgdm9sdW1lIGlkZW50aXR5LCBleHBsaWNpdGx5IHJlZnVzZXMgb3B0aW1pemVkIGludGVycHJldGVycywgY2hlY2tzIGV4YWN0IGZyZXNoIGxpdmUgVUlEL2NvbmZpZ3VyYXRpb24gYW5kIGFkbWlzc2lvbiwgYW5kIHdyaXRlcyBhIHNlcGFyYXRlIGV4ZWN1dGlvbiByZWNlaXB0IG91dHNpZGUgdGhpcyBzZWFsZWQgcGFja2V0LiBGYWlsZWQgaW5pdGlhbCByYXcgS3VzdG9taXplIG1ldGFkYXRhIGNoZWNrIGlzIHJldGFpbmVkOiBkaXJlY3Qga3ViZWN0bCBhcHBseSB3b3VsZCBkcm9wIEFyZ28gdHJhY2tpbmctaWQuIFRoZSByZXZpZXdlZCBzZWxlY3RlZCBEZXBsb3ltZW50IGV4cGxpY2l0bHkgcmV0YWlucyB0aGF0IGV4aXN0aW5nIElELCBtYXRjaGluZyBBcmdvIG93bmVyc2hpcC4gQW55IHVucmVsYXRlZCBkcmlmdCwgZGlmZmVyZW50IFVJRCwgYWx0ZXJlZCBhZG1pc3Npb24sIHVuYXZhaWxhYmxlIHByb3RlY3RlZCBiYWNrdXAgY2FwYWNpdHksIHVuY2VydGFpbiBiYWNrdXAsIHJlc3RvcmUgbWlzbWF0Y2ggb3IgdW5oZWFsdGh5IGJhc2VsaW5lIHN0b3BzIHRoZSByZWxlYXNlLgoKIyMgUHJvdGVjdGVkIGJhY2t1cCBhbmQgcmVsZWFzZQoKQmVmb3JlICoqYW55KiogbmF0aXZlIHNvdXJjZSBvciBvZmZsaW5lLXJlc3RvcmVkIFN0b3JlL2FkbWluIG9wZW4sIHVzZSB0aGUgYXR0YWNoZWQgc3RkbGliIFNRTGl0ZSBtb2RlPXJvL3F1ZXJ5X29ubHkgY2hlY2tlciB0byByZXF1aXJlIHNjaGVtYTUsIGludGVncml0eT1vayBhbmQgY291bnQtb25seSBiYXNlbGluZS4gVGhlIGFkbWluIGF1dG9tYXRpY2FsbHkgbWlncmF0ZXMgb2xkc2NoZW1hcywgc28gYSBwb3N0LW9wZW4gcmVwb3J0IGFsb25lIGNhbm5vdCBwcm92ZSBubyBtaWdyYXRpb24uIFJlZnVzZSBvdGhlciBzY2hlbWFzIGJlZm9yZSBhZG1pbi4gVGhlbiB1c2UgdGhlIGV4aXN0aW5nIG93bmVyIGFkbWluJ3MgU1FMaXRlIGJhY2t1cCBBUEksIG5vdCBhIHJhdyBjb3B5IG9mIHRoZSBsaXZlIGRhdGFiYXNlL1dBTC4gUHJvdGVjdCBkaXJlY3RvcmllczA3MDAvZmlsZXMwNjAwLCBvd25lZCBieTEwMDAxLiBSZXRhaW4gaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgb2ZmLWNsdXN0ZXIgc25hcHNob3QgY3VzdG9keSBhbmQgb25seSBjb3VudC9oYXNoIHJlY2VpcHRzLiBObyBkYXRhYmFzZSBjb250ZW50cywgY2FsbGVyIHRva2VucywgcmVxdWVzdGVyIFNlY3JldCBvciBydW50aW1lIGNyZWRlbnRpYWwgZmlsZXMgZW50ZXIgR2l0LCBTdGF0ZSBIdWIsIGxvZ3Mgb3IgdGhpcyBwYWNrZXQuIE5hdGl2ZSBiYWNrdXAgYW5kIG9mZmxpbmUgcmVhbC1kYXRhIHJlc3RvcmUgaGF2ZSBub3QgeWV0IG9jY3VycmVkLiBVc2UgYW4gaXNvbGF0ZWQgcHJpdmF0ZSBkaXNwb3NhYmxlIGNvcHksIG5ldHdvcmtub25lIGFuZCBubyBydW50aW1lIGNvbmZpZy90b2tlbiBtb3VudHMsIHJ1biB0aGUgcHJlLW9wZW4gY2hlY2tlciBhbmQgZXhhY3Qgb2ZmbGluZSBgLS1lbnRyeXBvaW50IGluZm9ybWVkLWRlY2lzaW9uLWFkbWluIGluc3BlY3QgLS1kYiAvcmVzdG9yZS9yZXZpZXcuc3FsaXRlYCBhZnRlciBpdCBwYXNzZXMsIGNvbXBhcmluZyBmcm96ZW4gc25hcHNob3QgY291bnRzIHdpdGhvdXQgc2VydmljZSBzdGFydHVwLCB0aGVuIGNsZWFuIG9ubHkgdGhlIGRpc3Bvc2FibGUgcmVzdG9yZWQgY29weS4gUmV0YWluIHRoZSBvcmlnaW5hbCBzbmFwc2hvdC4gVGhlIGF0dGFjaGVkIHByb3RvY29sIGJpbmRzIGNhc2Utc3BlY2lmaWMgcGF0aHMgYW5kIGZhaWwtY2xvc2VkIGNhcGFjaXR5L2N1c3RvZHkgY2hlY2tzLgoKUmVmcmVzaCBhIGNvbnNpc3RlbnQgb25saW5lIHNuYXBzaG90IGltbWVkaWF0ZWx5IGJlZm9yZSBpbWFnZS1vbmx5IGN1dG92ZXIuIFRoaXMgcHJvdG9jb2wgZG9lcyBub3QgYXNzZXJ0IHRyYWZmaWMvZGlzcGF0Y2hlciBxdWllc2NlbmNlLiBDdXJyZW50IGFuZCBjYW5kaWRhdGUgc2hhcmUgc2NoZW1hNSBhbmQgdW5jaGFuZ2VkIHN0b3JlIGNvZGU7IHJvbGxiYWNrIHJldGFpbnMgdGhlIGxhdGVzdCBsaXZlIGRhdGFiYXNlIGFuZCBhbGwgbmV3L3VuY2VydGFpbiBldmlkZW5jZS4gU3RvcCB0aGUgb2xkIHdyaXRlciBiZWZvcmUgdGhlIG5ldyBvbmUgd2l0aCBleGlzdGluZyBSZWNyZWF0ZSBhbmQgc2luZ2xlLXdyaXRlciBsb2NrLiBEbyBub3QgcmVzdG9yZSBhbiBvbGRlciBzbmFwc2hvdCBvdmVyIGxhdGVyIHdyaXRlcywgZGlzY2FyZCB1bnJlc29sdmVkIGV4dGVybmFsIGVmZmVjdHMsIHNjYWxlIG90aGVyIHdvcmtsb2FkcywgY2hhbmdlIHBvbGljaWVzL2lkZW50aXR5L2N1c3RvZHksIG9yIGNyZWF0ZSBodW1hbiBkaXNwb3NpdGlvbnMgdG8gbWFrZSBjaGVja3MgZ3JlZW4uCgpQaW4gdGhlIGV4aXN0aW5nIEFwcGxpY2F0aW9uIHRvIHRoZSBleGFjdCBvd25lciBjb21taXQgY29udGFpbmluZyB0aGUgYXBwcm92ZWQgY2FuZGlkYXRlIHNvdXJjZSBoYXNoZXMsIGFuZCBtYW51YWxseSBzeW5jIG9ubHkgRGVwbG95bWVudC9pbmZvcm1lZC1kZWNpc2lvbiB3aXRoIHBydW5lPWZhbHNlLiBWZXJpZnkgYWN0dWFsaW1hZ2UvbW9kdWxlL21vZGUvVUlELCBoZWFsdGgvcmVhZGluZXNzIGFuZCBpbnN0YWxsZWQgcHVycG9zZSByZWZ1c2FscyBvbiB0aGUgcmVhbCBwbGFjZW1lbnQ7IGV4cGxpY2l0bHkgZGlzdGluZ3Vpc2ggc3ludGhldGljLXRyYW5zcG9ydCBjaGVja3MgZnJvbSBhY3R1YWwgcHJvdmlkZXIgZXZpZGVuY2UuIEV4aXN0aW5nIG5hdGl2ZSBiaW5kaW5nL2xpZmVjeWNsZSBiZWhhdmlvciBtdXN0IHJlbWFpbiBhdmFpbGFibGUuIElmIHVuaGVhbHRoeSBvciB2ZXJpZmljYXRpb24gZmFpbHMsIHJldHVybiBBcHBsaWNhdGlvbiBzb3VyY2UgdG83ZGI4NDg1IGFuZCBzY29wZWQtc3luYyBwcmlvciBzYW1lLXNjaGVtYSBpbWFnZTdmNWMsIHByZXNlcnZpbmcgY3VycmVudCBldmlkZW5jZSBkYXRhYmFzZTsgcmV0YWluIGZhaWxlZCBvdXRjb21lcy4gQW55IGRhdGEgcmVjb3ZlcnkgYmV5b25kIHRoaXMgc2FtZS1zY2hlbWEgaW1hZ2Ugcm9sbGJhY2sgaXMgYSBzZXBhcmF0ZSBmb3VuZGVyIGRlY2lzaW9uLgoKIyMgQWx0ZXJuYXRpdmVzIGFuZCBlc3RpbWF0ZXMKClByb2NlZWQgd2l0aCB0aGlzIG5hcnJvdyByZWxlYXNlIHBsdXMgZXhwbGljaXQgaW5oZXJpdGVkLW1lZGl1bSBmb2xsb3ctdGhyb3VnaCwgb3IgZGVmZXIgYW5kIHByZXBhcmUgYSBzZXBhcmF0ZSBiYXNlL2RlcGVuZGVuY3kgcmVmcmVzaCBiZWZvcmUgYW55IHJlbGVhc2UuIE5vIGFkZGl0aW9uYWwgcmVjdXJyaW5nIGhvc3RpbmcgaXMgcHJvcG9zZWQ6IGVzdGltYXRlZCBpbmNyZW1lbnRhbCBpbmZyYXN0cnVjdHVyZSBFVVIwLCB3aXRoIHByaXZhdGUgc3RvcmFnZSBhbmQgYXR0ZW5kZWQgZW5naW5lZXJpbmcvcmVjb3ZlcnkgdGltZSB1bnByaWNlZC4gUmlza3MgaW5jbHVkZSBhIGJyaWVmIFJlY3JlYXRlIGludGVycnVwdGlvbiwgcHJpdmF0ZSBiYWNrdXAgY3VzdG9keSBlcnJvcnMsIGNhbGxlciByZWZ1c2FsIHdoZW4gYWR2aXNvcnkgcmVzcG9uc2VzIHdlcmUgaW1wcm9wZXJseSB0cmVhdGVkIGFzIGJpbmRpbmcsIGFuZCB0aGUgZGlzY2xvc2VkIGluaGVyaXRlZCBmaW5kaW5nLiBUaGlzIGRlY2lzaW9uIGRvZXMgbm90IHByb21vdGUgYWdlbnQgYXV0b25vbXkgb3IgZ3JhbnQgdW5yZWxhdGVkIHdvcmsuCgojIyBJbmRlcGVuZGVudCByZXZpZXcgcmVmaW5lbWVudHMKClRoZSBpbml0aWFsMzZwYXRoLzIwZG9jdW1lbnQgcGFja2V0IGF0IG1hbmlmZXN0N2M2NzM4YjMgYW5kIHN1Ym1pc3Npb25hYzQxYzhhZSBpcyBwcmVzZXJ2ZWQgaW4gc291cmNlIHByZXBhcmF0aW9uIGV2aWRlbmNlLCB3aXRoIHRoZSBmYWlsZWQvY29uZGl0aW9uYWwgcmV2aWV3LiBJbmRlcGVuZGVudCBQbGF0Zm9ybSByZXZpZXcgaWRlbnRpZmllZCBhZG1pbiBhdXRvLW1pZ3JhdGlvbiwgb3B0aW1pemF0aW9uIGJ5cGFzcywgYW5kIGFjdHVhbCBzYW1lLW5hbWUgQ29uZmlnTWFwL1BWQyByZXBsYWNlbWVudCBnYXBzLiBUaGUgYW1lbmRlZCBwYWNrZXQgYWRkcyBwcmUtb3BlbiBzdGRsaWIgcmVhZC1vbmx5IHNjaGVtYS9pbnRlZ3JpdHkvY291bnQgZ2F0ZXMsIGV4cGxpY2l0IGxvY2FsL3JlbW90ZSBvcHRpbWl6YXRpb24gcmVmdXNhbCwgYW5kIGluZGVwZW5kZW50bHkgc2VhbGVkIGFjdHVhbCBuYXRpdmUgY29uZmlnL1BWQyBjdXN0b2R5IGNoZWNrcy4gVGhlc2UgYXJlIHJlZmluZW1lbnRzIGluIHRoZSBzYW1lIHByb3Bvc2FsL3RyaWFsLCB3aXRoIG5vIG9yaWdpbmFsIG9yIGFtZW5kZWQgZm91bmRlciBhcHByb3ZhbCBjbGFpbWVkLgo=" + "content_base64": "IyBJbmZvcm1lZCBEZWNpc2lvbiBwdXJwb3NlIG92ZXJsYXkgcmVsZWFzZQoKIyMgUmVxdWVzdGVkIGRlY2lzaW9uCgpBcHByb3ZlIHRoZSBleGFjdCBwdXJwb3NlLW9ubHkgaW1hZ2Ugcm9sbG91dCBhbmQgcHJvdGVjdGVkIHJlYWwtZGF0YSBiYWNrdXAvcmVzdG9yZSBwcm90b2NvbCBmb3IgdGhlIGV4aXN0aW5nIEluZm9ybWVkIERlY2lzaW9uIHNlcnZpY2Ugb24gcmFpbGlhbmNlMDEuIFRoaXMgcmVxdWVzdCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBhbHJlYWR5IGFwcHJvdmVkIGNvbmZpZy1vbmx5IHJlcGFpci4gT25seSB0aGUgZXhpc3RpbmcgRGVwbG95bWVudCBpbWFnZSBjaGFuZ2VzIHRocm91Z2ggdGhlIG93bmVyJ3MgbWFudWFsIEFyZ28gd29ya2Zsb3csIHdpdGggcHJ1bmUgZGlzYWJsZWQuIFJ1bnRpbWUgQ29uZmlnTWFwIGBpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MWAsIHNjaGVtYTUsIFBWQywgY3JlZGVudGlhbHMsIGF1ZGllbmNlLCBwb2xpY2llcywgcmVnaXN0cmllcywgYWNjZXNzLCByZXBsaWNhMSBhbmQgUmVjcmVhdGUgc3RyYXRlZ3kgcmVtYWluIGZpeGVkLiBFeGVjdXRlIGJ5IDIwMjYtMTAtMTJUMjM6NTk6NTlaLCBhZnRlciByZWZyZXNoZWQgc2VhbGVkLXNvdXJjZS9VSUQvY29uZmlndXJhdGlvbiBjaGVja3MgYW5kIGJhY2t1cC9yZXN0b3JlIGdhdGVzLiBBbGwgcGhhc2VzLCBpbmNsdWRpbmcgcmVjb3ZlcnkgYW5kIHZlcmlmaWNhdGlvbiwgbXVzdCBiZWdpbiBiZWZvcmUgdGhpcyBkZWFkbGluZS4gSWYgdGhlIHdpbmRvdyBpcyBleGhhdXN0ZWQsIHN0b3AgYW5kIG9idGFpbiBhIGZyZXNoIGZvdW5kZXIgZGVjaXNpb247IHRoaXMgbWF5IGRlbGF5IHJlY292ZXJ5LiBObyB0aW1lci9jb250cm9sbGVyIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyB0aGUgcmVsZWFzZWQgaW1hZ2UuCgojIyBBcnRpZmFjdCBhbmQga25vd24gZmluZGluZwoKQWN0dWFsIG93bmVyIENJIHRhc2sxMTQ4NC9ydW4zIHB1Ymxpc2hlZCBpbW11dGFibGUgaW1hZ2UgYHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhYCBmcm9tIHNvdXJjZSBgM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OGAuIEFub255bW91cyByZWdpc3RyeSB2ZXJpZmljYXRpb24gcHJlc2VydmVzIGFsbCBlaWdodCBiYXNlIGNvbXByZXNzZWQgYmxvYnMvcm9vdGZzIGxheWVycyBhbmQgYWRkcyBvbmx5IHBvbGljeS5weSB3aXRoIGV4YWN0IHNvdXJjZSBoYXNoIGFuZCBtb2RlMDY0NC4gTGVnYWN5LWJ1aWxkZXIgbWVkaWEtdHlwZS9kZWZhdWx0IGNvbmZpZyBzZXJpYWxpemF0aW9uIGRpZmZlcmVuY2VzIGFyZSByZWNvcmRlZDsgdGhlIHJ1bnRpbWUgc2VtYW50aWNzIHJlbWFpbiB1bmNoYW5nZWQuIFB1bGxlZCBwdWJsaXNoZWQgaW1hZ2UgZXhlY3V0ZXMgYXMgVUlEMTAwMDEvR0lEMTAwMDEgYW5kIHBhc3NlcyB0ZW4gaW5zdGFsbGVkIGNoZWNrczogdHdvIHN1cHBvcnRlZCBiaW5kaW5nIGZvcm1zLCBlaWdodCBhZHZpc29yeS9tYWxmb3JtZWQgcmVmdXNhbHMuIFRlc3RzIHVzZSBzeW50aGV0aWMgdHJhbnNwb3J0IGFuZCBkbyBub3QgY2xhaW0gbmV3IG5hdGl2ZSBQRFAgYXV0aG9yaXphdGlvbiBwcm9vZi4gVGhlIHR3byBmYWlsZWQgQ0kgYXR0ZW1wdHMgcmVtYWluIGluIHRoZSBzYW1lIHRyaWFsIGhpc3RvcnkuCgpBY3R1YWwgdW5maWx0ZXJlZCBwaW5uZWQgc2Nhbm5lci9EQiBldmlkZW5jZSBjb3ZlcnM0NHBhY2thZ2VzOiB6ZXJvIEhJR0gvQ1JJVElDQUwsICoqb25lIGZpeGFibGUgTUVESVVNKiosIENWRS0yMDI2LTg1MDkxLCB6bGliMS4zLjItcjAgZml4ZWQgaW4xLjMuMi1yMS4gQWN0dWFsIGN1cnJlbnQtYmFzZSBzY2FuIGhhcyB0aGUgaWRlbnRpY2FsIGZpbmRpbmcuIEFwcHJvdmluZyB0aGlzIHBhY2tldCBleHBsaWNpdGx5IHBlcm1pdHMgdGhpcyBpbmhlcml0ZWQgZmluZGluZyBkdXJpbmcgdGhpcyBuYXJyb3cgcHVycG9zZSByZWxlYXNlOyBpdCBpcyBub3QgYSBSaXNrTmV4dXMgZXN0YXRlIHJpc2sgZ3JhZGUgb3IgemVyby1DVkUgY2xhaW0uIE93bmVyIHJlY29yZCBJTkZELVJJU0stMjAyNjEwMTEtWkxJQi04NTA5MSBhbmQgbGl2ZSB0YXNrIElORkQtV1AtMDAwOS1UMDUgcmVxdWlyZSBzZXBhcmF0ZSBiYXNlIHJlZnJlc2ggYW5kIG5hdGl2ZSBhcHByb3ZhbCwgcmV2aWV3ZWQgYnkyMDI2LTEwLTE4LiBUaGF0IHJldmlldyBkYXRlIGlzIG1hbnVhbCBmb2xsb3ctdGhyb3VnaCwgd2l0aCBubyBhdXRvLWNvbnRyb2xsZXIgY2xhaW0uIFNjYW5uZXIgbm90ZXMgQWxwaW5lMy4yNCBhYnNlbnQgRU9MIGxpc3Q7IE9TIHZ1bG5lcmFiaWxpdHkgZGV0ZWN0aW9uIHJhbiBhZ2FpbnN0MzhPU3BhY2thZ2VzLiBVbmtub3duIHZ1bG5lcmFiaWxpdGllcyByZW1haW4gb3V0c2lkZSBzbmFwc2hvdCBrbm93bGVkZ2UuCgojIyBOYXRpdmUgYmFzZWxpbmUgYW5kIGdhdGVzCgpPcmlnaW5hbCByZWFkLW9ubHkgY2FwdHVyZTAxOjI1OjM4WjogZXhpc3RpbmcgRGVwbG95bWVudCBVSURhNTg4ZTEwYSwgUmVhZHkxLCBpbWFnZTdmNWMsIHVuY2hhbmdlZCBydW50aW1lNmM7IG5hdGl2ZSBhZG1pc3Npb24gcHJlc2VydmVzIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gcGx1cyBleGFjdGx5IHRoZSBwcm9wb3NlZCBpbWFnZS4gQ2xpZW50ZGlmZiByZXR1cm5zMS4gUmVxdWVzdHMzNDYwLzQwMDBtQ1BVODYlLCBtZW1vcnk5NDcyTWk1OSU7IHJlZnJlc2ggYmVmb3JlIHJlbGVhc2UuIEV4aXN0aW5nIEFyZ28gQXBwbGljYXRpb24gVUlENDk5ODY4ZjIgaXMgbWFudWFsLCB0YXJnZXQ3ZGI4NDg1LCBIZWFsdGh5IHdpdGggcHJlLWV4aXN0aW5nIE91dE9mU3luYyBzdGF0dXMuIERvIG5vdCB0cmVhdCBhIHNjb3BlZCBEZXBsb3ltZW50IHJlbGVhc2UgYXMgZnVsbC1hcHAgcmVjb25jaWxpYXRpb24uIFByZXNlcnZlIGl0cyB0cmFja2luZy1pZDsgbm8gdW5yZWxhdGVkIHJlc291cmNlIHN5bmMvcHJ1bmUvYWRvcHRpb24uCgpUaGUgcmVmaW5lZCByZWFkLW9ubHkgaGVscGVyIGJpbmRzIG9yaWdpbmFsIHNvdXJjZS9oZWxwZXIvcmVuZGVyL2Jhc2VsaW5lIGhhc2hlcyBhbmQgYWN0dWFsIGltbXV0YWJsZSBDb25maWdNYXAvUFZDIFVJRHMsIHJ1bnRpbWUtZGF0YSBjaGVja3N1bSBhbmQgYm91bmQgdm9sdW1lIGlkZW50aXR5LCBleHBsaWNpdGx5IHJlZnVzZXMgb3B0aW1pemVkIGludGVycHJldGVycywgY2hlY2tzIGV4YWN0IGZyZXNoIGxpdmUgVUlEL2NvbmZpZ3VyYXRpb24gYW5kIGFkbWlzc2lvbiwgYW5kIHdyaXRlcyBhIHNlcGFyYXRlIGV4ZWN1dGlvbiByZWNlaXB0IG91dHNpZGUgdGhpcyBzZWFsZWQgcGFja2V0LiBGYWlsZWQgaW5pdGlhbCByYXcgS3VzdG9taXplIG1ldGFkYXRhIGNoZWNrIGlzIHJldGFpbmVkOiBkaXJlY3Qga3ViZWN0bCBhcHBseSB3b3VsZCBkcm9wIEFyZ28gdHJhY2tpbmctaWQuIFRoZSByZXZpZXdlZCBzZWxlY3RlZCBEZXBsb3ltZW50IGV4cGxpY2l0bHkgcmV0YWlucyB0aGF0IGV4aXN0aW5nIElELCBtYXRjaGluZyBBcmdvIG93bmVyc2hpcC4gQW55IHVucmVsYXRlZCBkcmlmdCwgZGlmZmVyZW50IFVJRCwgYWx0ZXJlZCBhZG1pc3Npb24sIHVuYXZhaWxhYmxlIHByb3RlY3RlZCBiYWNrdXAgY2FwYWNpdHksIHVuY2VydGFpbiBiYWNrdXAsIHJlc3RvcmUgbWlzbWF0Y2ggb3IgdW5oZWFsdGh5IGJhc2VsaW5lIHN0b3BzIHRoZSByZWxlYXNlLgoKIyMgUHJvdGVjdGVkIGJhY2t1cCBhbmQgcmVsZWFzZQoKQmVmb3JlICoqYW55KiogbmF0aXZlIHNvdXJjZSBvciBvZmZsaW5lLXJlc3RvcmVkIFN0b3JlL2FkbWluIG9wZW4sIHVzZSB0aGUgYXR0YWNoZWQgc3RkbGliIFNRTGl0ZSBtb2RlPXJvL3F1ZXJ5X29ubHkgY2hlY2tlciB0byByZXF1aXJlIHNjaGVtYTUsIGludGVncml0eT1vayBhbmQgY291bnQtb25seSBiYXNlbGluZS4gVGhlIGFkbWluIGF1dG9tYXRpY2FsbHkgbWlncmF0ZXMgb2xkc2NoZW1hcywgc28gYSBwb3N0LW9wZW4gcmVwb3J0IGFsb25lIGNhbm5vdCBwcm92ZSBubyBtaWdyYXRpb24uIFJlZnVzZSBvdGhlciBzY2hlbWFzIGJlZm9yZSBhZG1pbi4gVGhlbiB1c2UgdGhlIGV4aXN0aW5nIG93bmVyIGFkbWluJ3MgU1FMaXRlIGJhY2t1cCBBUEksIG5vdCBhIHJhdyBjb3B5IG9mIHRoZSBsaXZlIGRhdGFiYXNlL1dBTC4gUHJvdGVjdCBkaXJlY3RvcmllczA3MDAvZmlsZXMwNjAwLCBvd25lZCBieTEwMDAxLiBSZXRhaW4gaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgb2ZmLWNsdXN0ZXIgc25hcHNob3QgY3VzdG9keSBhbmQgb25seSBjb3VudC9oYXNoIHJlY2VpcHRzLiBObyBkYXRhYmFzZSBjb250ZW50cywgY2FsbGVyIHRva2VucywgcmVxdWVzdGVyIFNlY3JldCBvciBydW50aW1lIGNyZWRlbnRpYWwgZmlsZXMgZW50ZXIgR2l0LCBTdGF0ZSBIdWIsIGxvZ3Mgb3IgdGhpcyBwYWNrZXQuIE5hdGl2ZSBiYWNrdXAgYW5kIG9mZmxpbmUgcmVhbC1kYXRhIHJlc3RvcmUgaGF2ZSBub3QgeWV0IG9jY3VycmVkLiBVc2UgYW4gaXNvbGF0ZWQgcHJpdmF0ZSBkaXNwb3NhYmxlIGNvcHksIG5ldHdvcmtub25lIGFuZCBubyBydW50aW1lIGNvbmZpZy90b2tlbiBtb3VudHMsIHJ1biB0aGUgcHJlLW9wZW4gY2hlY2tlciBhbmQgZXhhY3Qgb2ZmbGluZSBgLS1lbnRyeXBvaW50IGluZm9ybWVkLWRlY2lzaW9uLWFkbWluIGluc3BlY3QgLS1kYiAvcmVzdG9yZS9yZXZpZXcuc3FsaXRlYCBhZnRlciBpdCBwYXNzZXMsIGNvbXBhcmluZyBmcm96ZW4gc25hcHNob3QgY291bnRzIHdpdGhvdXQgc2VydmljZSBzdGFydHVwLCB0aGVuIGNsZWFuIG9ubHkgdGhlIGRpc3Bvc2FibGUgcmVzdG9yZWQgY29weS4gUmV0YWluIHRoZSBvcmlnaW5hbCBzbmFwc2hvdC4gVGhlIGF0dGFjaGVkIHByb3RvY29sIGJpbmRzIGNhc2Utc3BlY2lmaWMgcGF0aHMgYW5kIGZhaWwtY2xvc2VkIGNhcGFjaXR5L2N1c3RvZHkgY2hlY2tzLgoKUmVmcmVzaCBhIGNvbnNpc3RlbnQgb25saW5lIHNuYXBzaG90IGltbWVkaWF0ZWx5IGJlZm9yZSBpbWFnZS1vbmx5IGN1dG92ZXIuIFRoaXMgcHJvdG9jb2wgZG9lcyBub3QgYXNzZXJ0IHRyYWZmaWMvZGlzcGF0Y2hlciBxdWllc2NlbmNlLiBDdXJyZW50IGFuZCBjYW5kaWRhdGUgc2hhcmUgc2NoZW1hNSBhbmQgdW5jaGFuZ2VkIHN0b3JlIGNvZGU7IHJvbGxiYWNrIHJldGFpbnMgdGhlIGxhdGVzdCBsaXZlIGRhdGFiYXNlIGFuZCBhbGwgbmV3L3VuY2VydGFpbiBldmlkZW5jZS4gU3RvcCB0aGUgb2xkIHdyaXRlciBiZWZvcmUgdGhlIG5ldyBvbmUgd2l0aCBleGlzdGluZyBSZWNyZWF0ZSBhbmQgc2luZ2xlLXdyaXRlciBsb2NrLiBEbyBub3QgcmVzdG9yZSBhbiBvbGRlciBzbmFwc2hvdCBvdmVyIGxhdGVyIHdyaXRlcywgZGlzY2FyZCB1bnJlc29sdmVkIGV4dGVybmFsIGVmZmVjdHMsIHNjYWxlIG90aGVyIHdvcmtsb2FkcywgY2hhbmdlIHBvbGljaWVzL2lkZW50aXR5L2N1c3RvZHksIG9yIGNyZWF0ZSBodW1hbiBkaXNwb3NpdGlvbnMgdG8gbWFrZSBjaGVja3MgZ3JlZW4uCgpQaW4gdGhlIGV4aXN0aW5nIEFwcGxpY2F0aW9uIHRvIHRoZSBleGFjdCBvd25lciBjb21taXQgY29udGFpbmluZyB0aGUgYXBwcm92ZWQgY2FuZGlkYXRlIHNvdXJjZSBoYXNoZXMsIGFuZCBtYW51YWxseSBzeW5jIG9ubHkgRGVwbG95bWVudC9pbmZvcm1lZC1kZWNpc2lvbiB3aXRoIHBydW5lPWZhbHNlLiBWZXJpZnkgYWN0dWFsaW1hZ2UvbW9kdWxlL21vZGUvVUlELCBoZWFsdGgvcmVhZGluZXNzIGFuZCBpbnN0YWxsZWQgcHVycG9zZSByZWZ1c2FscyBvbiB0aGUgcmVhbCBwbGFjZW1lbnQ7IGV4cGxpY2l0bHkgZGlzdGluZ3Vpc2ggc3ludGhldGljLXRyYW5zcG9ydCBjaGVja3MgZnJvbSBhY3R1YWwgcHJvdmlkZXIgZXZpZGVuY2UuIEV4aXN0aW5nIG5hdGl2ZSBiaW5kaW5nL2xpZmVjeWNsZSBiZWhhdmlvciBtdXN0IHJlbWFpbiBhdmFpbGFibGUuIElmIHVuaGVhbHRoeSBvciB2ZXJpZmljYXRpb24gZmFpbHMsIHJldHVybiBBcHBsaWNhdGlvbiBzb3VyY2UgdG83ZGI4NDg1IGFuZCBzY29wZWQtc3luYyBwcmlvciBzYW1lLXNjaGVtYSBpbWFnZTdmNWMsIHByZXNlcnZpbmcgY3VycmVudCBldmlkZW5jZSBkYXRhYmFzZTsgcmV0YWluIGZhaWxlZCBvdXRjb21lcy4gQW55IGRhdGEgcmVjb3ZlcnkgYmV5b25kIHRoaXMgc2FtZS1zY2hlbWEgaW1hZ2Ugcm9sbGJhY2sgaXMgYSBzZXBhcmF0ZSBmb3VuZGVyIGRlY2lzaW9uLgoKIyMgQWx0ZXJuYXRpdmVzIGFuZCBlc3RpbWF0ZXMKClByb2NlZWQgd2l0aCB0aGlzIG5hcnJvdyByZWxlYXNlIHBsdXMgZXhwbGljaXQgaW5oZXJpdGVkLW1lZGl1bSBmb2xsb3ctdGhyb3VnaCwgb3IgZGVmZXIgYW5kIHByZXBhcmUgYSBzZXBhcmF0ZSBiYXNlL2RlcGVuZGVuY3kgcmVmcmVzaCBiZWZvcmUgYW55IHJlbGVhc2UuIE5vIGFkZGl0aW9uYWwgcmVjdXJyaW5nIGhvc3RpbmcgaXMgcHJvcG9zZWQ6IGVzdGltYXRlZCBpbmNyZW1lbnRhbCBpbmZyYXN0cnVjdHVyZSBFVVIwLCB3aXRoIHByaXZhdGUgc3RvcmFnZSBhbmQgYXR0ZW5kZWQgZW5naW5lZXJpbmcvcmVjb3ZlcnkgdGltZSB1bnByaWNlZC4gUmlza3MgaW5jbHVkZSBhIGJyaWVmIFJlY3JlYXRlIGludGVycnVwdGlvbiwgcHJpdmF0ZSBiYWNrdXAgY3VzdG9keSBlcnJvcnMsIGNhbGxlciByZWZ1c2FsIHdoZW4gYWR2aXNvcnkgcmVzcG9uc2VzIHdlcmUgaW1wcm9wZXJseSB0cmVhdGVkIGFzIGJpbmRpbmcsIGFuZCB0aGUgZGlzY2xvc2VkIGluaGVyaXRlZCBmaW5kaW5nLiBUaGlzIGRlY2lzaW9uIGRvZXMgbm90IHByb21vdGUgYWdlbnQgYXV0b25vbXkgb3IgZ3JhbnQgdW5yZWxhdGVkIHdvcmsuCgojIyBJbmRlcGVuZGVudCByZXZpZXcgcmVmaW5lbWVudHMKClRoZSBpbml0aWFsMzZwYXRoLzIwZG9jdW1lbnQgcGFja2V0IGF0IG1hbmlmZXN0N2M2NzM4YjMgYW5kIHN1Ym1pc3Npb25hYzQxYzhhZSBpcyBwcmVzZXJ2ZWQgaW4gc291cmNlIHByZXBhcmF0aW9uIGV2aWRlbmNlLCB3aXRoIHRoZSBmYWlsZWQvY29uZGl0aW9uYWwgcmV2aWV3LiBJbmRlcGVuZGVudCBQbGF0Zm9ybSByZXZpZXcgaWRlbnRpZmllZCBhZG1pbiBhdXRvLW1pZ3JhdGlvbiwgb3B0aW1pemF0aW9uIGJ5cGFzcywgYW5kIGFjdHVhbCBzYW1lLW5hbWUgQ29uZmlnTWFwL1BWQyByZXBsYWNlbWVudCBnYXBzLiBUaGUgYW1lbmRlZCBwYWNrZXQgYWRkcyBwcmUtb3BlbiBzdGRsaWIgcmVhZC1vbmx5IHNjaGVtYS9pbnRlZ3JpdHkvY291bnQgZ2F0ZXMsIGV4cGxpY2l0IGxvY2FsL3JlbW90ZSBvcHRpbWl6YXRpb24gcmVmdXNhbCwgYW5kIGluZGVwZW5kZW50bHkgc2VhbGVkIGFjdHVhbCBuYXRpdmUgY29uZmlnL1BWQyBjdXN0b2R5IGNoZWNrcy4gVGhlc2UgYXJlIHJlZmluZW1lbnRzIGluIHRoZSBzYW1lIHByb3Bvc2FsL3RyaWFsLCB3aXRoIG5vIG9yaWdpbmFsIG9yIGFtZW5kZWQgZm91bmRlciBhcHByb3ZhbCBjbGFpbWVkLgoKIyMgTWVjaGFuaWNhbGx5IGJvdW5kIGhlbHBlciBhbmQgcmVjb3ZlcnkgcmVmaW5lbWVudAoKVGhlIGRpcmVjdGx5IGF0dGFjaGVkIGV4ZWN1dGlvbi1idW5kbGUuanNvbiBiaW5kcyBleGFjdCBzdXBlcnZpc2VkIGhlbHBlciBzb3VyY2VzLCBwbGFuLCB0ZXN0cyBhbmQgUEVORElORyBhdXRob3JpdHkgdGVtcGxhdGUuIEl0IHZlcmlmaWVzIGFsbCBmb3VyIGNvbW1pdHRlZCBvd25lciBLdXN0b21pemUgaW5wdXRzIGFuZCByZWplY3RzIHByZXNlbnQgYXV0b21hdGVkOnt9IGFzIHdlbGwgYXMgc291cmNlIG92ZXJyaWRlcy4gUm9vdCBtdXN0IGZyZXNobHkgYXV0aGVudGljYXRlIHRoZSBleGFjdCBmb3VuZGVyIG5hdGl2ZSBkaXNwb3NpdGlvbiBiZWZvcmUgZXZlcnkgcGhhc2U7IHJlY2VpcHQgYm9va2tlZXBpbmcgaXMgbm90IGFuIGF1dG9ub21vdXMgc2lnbmVkIGdyYW50LiBUaGUgc2FtZSBwcm9wb3NhbC90cmlhbCBwcmVzZXJ2ZXMgdGhlIGVhcmxpZXIzNnBhdGg3YyBwYWNrZXQsIGFtZW5kZWQ3OHBhdGhiMSBwYWNrZXQgYW5kIG9yaWdpbmFsMTFmaWxlNjUzIGhlbHBlciBwbHVzIGNvbmRpdGlvbmFsIHJldmlldyBmaW5kaW5ncy4KClRoZSBvZmZsaW5lIGNvcHkgdXNlcyBvbmUgVUlEMC9DQVBfQ0hPV04tb25seSBpbml0aWFsaXplciBjb25maW5lZCB0byB0aGUgTkVXIG5vbmNlLWJvdW5kIGxvY2FsIHZvbHVtZSwgZXhhY3QgY2FuZGlkYXRlIGltYWdlLCBuZXR3b3Jrbm9uZS9yZWFkb25seXJvb3Qvbm8tbmV3cHJpdmlsZWdlcy9DUFUxLzEyOE1pLCBubyBob3N0L2xpdmVQVkMvY29uZmlnL3Rva2VuIG1vdW50cy4gQWxsIGZvbGxvd2luZyBwcmUtb3Blbi9hZG1pbi9wb3N0LW9wZW4gY2hlY2tzIGFyZSBVSUQxMDAwMS4gUG9zdC1hZG1pbiByZWFkb25seSBzY2hlbWE1L2ludGVncml0eS9jb3VudHMgbXVzdCBtYXRjaCB0aGUgZnJvemVuIHNuYXBzaG90IGFuZCBvcmlnaW5hbCBzbmFwc2hvdCBTSEEgbXVzdCByZW1haW4gdW5jaGFuZ2VkLiBSb2xsYmFjayBkaXNwYXRjaCBuZXZlciByZXF1aXJlcyB0aGUgZmFpbGluZyBjYW5kaWRhdGUgdG8gYmUgUmVhZHkgb3Igb3BlbnMgaXRzIGRhdGFiYXNlOyBzZWFscy9zb3VyY2UvaW1hZ2UgcGFpci9hZG1pc3Npb24gQ0FTIHN0aWxsIGdhdGUgaXQuIEEgc2VwYXJhdGUgcm9sbGJhY2stdmVyaWZ5IHByb3ZlcyByZWNvdmVyZWQgb2xkLWltYWdlIFJlYWR5MS9zY29wZWQgb3BlcmF0aW9uL3NjaGVtYTUgcmV0YWluZWQtY3VycmVudC1EQiBpbnRlZ3JpdHkuIFNhbWUtcGhhc2UgcmV0cmllcyBhcmUgcmVmdXNlZCBhZnRlciBhbWJpZ3VvdXMgb3V0Y29tZXMuCgpSYXcgc2Nhbi9TQk9NL2Jhc2Utc2NhbiBieXRlcyByZW1haW4gcmV0YWluZWQgdW5jaGFuZ2VkLCBoYXNoLWJvdW5kIGJ5IHRoZSBkaXJlY3RseSBhdHRhY2hlZCBwdWJsaXNoZWQtdmVyaWZpY2F0aW9uIHJlY2VpcHQ7IHRoZSBidW5kbGUgcmVwbGFjZXMgb25seSB0aGUgZGlyZWN0IHJhdyBzY2FuIGF0dGFjaG1lbnQgdG8gc3RheSB3aXRoaW4gdHdlbnR5IGRvY3VtZW50cy4gS25vd24gZml4YWJsZSBpbmhlcml0ZWQgTUVESVVNIGFuZCBUMDUgZm9sbG93LXRocm91Z2ggcmVtYWluIHZpc2libGUuIFRlbiBpbnN0YWxsZWQgc3ludGhldGljIGNoZWNrcywgaW5jbHVkaW5nIHRob3NlIGxhdGVyIG9uIGFjdHVhbCBwbGFjZW1lbnQsIGV4cGxpY2l0bHkgaGF2ZSBuYXRpdmVfcHJvdmlkZXI9ZmFsc2UuIEFjdHVhbCBwcm92aWRlci9QRFAgYXV0aG9yaXR5IGV2aWRlbmNlIGlzIGEgZGlzdGluY3QgVDA0IGNvbXBsZXRpb24gZ2F0ZSBhbmQgaXMgbm90IHN1cHBsaWVkIGJ5IHRoZXNlIGNoZWNrcy4gU291cmNlIHByZXBhcmF0aW9uIGJhc2lzIGUwMzU5YmNiNmNkZmFkOWFiM2U4NjgwNTQxMjFmZTBjZWJlYzJkNjggcGx1czkyNjhjOWFjMGJiZWU1MDhmZTM1YzBiOTBkY2VmZWY0YzI0ZGEyZjUgaXMgcmVjb3JkZWQ7IHRoZSBmaW5hbCBhcHBsaWVkIG93bmVyIGNvbW1pdCBtdXN0IGJlIHBpbm5lZCBiZWZvcmUgZXhlY3V0aW9uLgo=" }, { - "digest": "sha256:a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82", + "digest": "sha256:7cca98a6c159201823a42fe05218d32e46152031b3f8a2ee26795454df0016df", "media_type": "application/json", - "content_base64": "ewogICJwcm9wb3NhbF9pZCI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIsCiAgInRyaWFsX2lkIjogImluZmQtcHVycG9zZS0yMDI2MTAxMS1yMSIsCiAgInN0YXRlIjogInByZXBhcmVkLXVuYXBwcm92ZWQiLAogICJ0YXJnZXQiOiAicmVhbG06a3ViZXJuZXRlcy9yYWlsaWFuY2UwMS9pbmZvcm1lZC1kZWNpc2lvbiIsCiAgImF1dGhvcml0eSI6ICJBRE1JTklTVEVSOyBhY3RpdmF0aW9uIEFQUFJPVkVEIG9ubHkgdXBvbiBleGFjdCBmb3VuZGVyIGRpc3Bvc2l0aW9uIiwKICAiY2FuZGlkYXRlX2ltYWdlIjogImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6NzYzYzM2NDAyYzhiZTdjYzRjMWJkMWE2MTYyM2QxYWZmOTExNmQ1MjI0MTg3NzQyNWI0NWE3MDE4Y2MwODgzYSIsCiAgInB1Ymxpc2hlZF9zb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInByaW9yX2ltYWdlIjogImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MyIsCiAgInByaW9yX2FyZ29fcmV2aXNpb24iOiAiN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZiIsCiAgIm5hdGl2ZV9vYmplY3QiOiB7CiAgICAiYXBpVmVyc2lvbiI6ICJhcHBzL3YxIiwKICAgICJraW5kIjogIkRlcGxveW1lbnQiLAogICAgIm5hbWVzcGFjZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAidWlkIjogImE1ODhlMTBhLTkwZDItNDg4My05NzVlLTZkZDhiOGZlY2E5MiIKICB9LAogICJhcmdvX2FwcGxpY2F0aW9uX3VpZCI6ICI0OTk4NjhmMi1lYWJjLTRkZjQtYWUzMS1iODljZTU4ZDc1MGQiLAogICJzb3VyY2VfZ2F0ZSI6ICJFeGFjdCBjb21taXR0ZWQgb3duZXIgc291cmNlIG11c3QgY29udGFpbiB0aGUgdHdvIGFwcHJvdmVkIGNhbmRpZGF0ZSBmaWxlIGhhc2hlcyBpbiBwcmVmbGlnaHQtaW5wdXRzLmpzb247IHNvdXJjZSBwcmVwYXJhdGlvbiBpcyBub3QgbmF0aXZlIGFwcHJvdmFsIiwKICAic3luY19zY29wZSI6IFsKICAgICJhcHBzOkRlcGxveW1lbnQ6aW5mb3JtZWQtZGVjaXNpb24iCiAgXSwKICAicHJ1bmUiOiBmYWxzZSwKICAiYXV0b21hdGVkX3N5bmMiOiBmYWxzZSwKICAicnVudGltZV9jb25maWdtYXAiOiAiaW5mb3JtZWQtZGVjaXNpb24tcnVudGltZS02YzIyMTg3OGQwNTEiLAogICJzY2hlbWEiOiA1LAogICJyZXF1ZXN0ZWRfb3BlcmF0aW9ucyI6IFsKICAgICJQcm90ZWN0ZWQgU1FMaXRlLWNvbnNpc3RlbnQgbmF0aXZlIGJhY2t1cCBhbmQgaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgb2ZmLWNsdXN0ZXIgY3VzdG9keSIsCiAgICAiT2ZmbGluZSByZXN0b3JlL2ludGVncml0eS9jb3VudCBjb21wYXJpc29uIG9uIGEgcHJpdmF0ZSBkaXNwb3NhYmxlIHZvbHVtZSB3aXRoIGV4YWN0IGNhbmRpZGF0ZSwgbm8gcnVudGltZSB0b2tlbnMvY29uZmlnL25ldHdvcmsiLAogICAgIlJlZnJlc2ggYSBjb25zaXN0ZW50IHByZS1jdXRvdmVyIHNuYXBzaG90LCByZXRhaW4gcHJpdmF0ZSBjb3BpZXMgYW5kIGNvdW50LW9ubHkvaGFzaCByZWNlaXB0cyIsCiAgICAiUGluIGV4aXN0aW5nIG1hbnVhbCBBcmdvIEFwcGxpY2F0aW9uIHRvIGV4YWN0IGFwcHJvdmVkIG93bmVyIHNvdXJjZSBhbmQgbWFudWFsbHkgc3luYyBvbmx5IGV4aXN0aW5nIERlcGxveW1lbnQgaW1hZ2UiLAogICAgIlZlcmlmeSBoZWFsdGgvcmVhZGluZXNzL2ltYWdlL21vZHVsZS9pbnN0YWxsZWQgZmFpbC1jbG9zZWQgcHVycG9zZSBjaGVja3MgYW5kIHJldGFpbmVkIHNjaGVtYS9jb3VudCBldmlkZW5jZTsgcmVjb3ZlciB0byBwcmlvciBzYW1lLXNjaGVtYSBpbWFnZSBpZiBuZWVkZWQiCiAgXSwKICAiZXhlY3V0ZV9ieSI6ICIyMDI2LTEwLTEyVDIzOjU5OjU5WiIsCiAgInRlbXBvcmFyeV92dWxuZXJhYmlsaXR5X3Jldmlld19kdWUiOiAiMjAyNi0xMC0xOCIsCiAgImtub3duX3NjYW5fZmluZGluZ3MiOiAiMEhJR0gvQ1JJVElDQUwsMWZpeGFibGUgaW5oZXJpdGVkTUVESVVNIHpsaWIsIGFjdHVhbCBjdXJyZW50YmFzZStjYW5kaWRhdGUgZmluZGluZ3MgaWRlbnRpY2FsIiwKICAidnVsbmVyYWJpbGl0eV9yZWNvcmQiOiAiSU5GRC1SSVNLLTIwMjYxMDExLVpMSUItODUwOTEgLyBJTkZELVdQLTAwMDktVDA1IiwKICAiY29zdF9lc3RpbWF0ZV9FVVIiOiAwLAogICJjb3N0X2xpbWl0cyI6ICJObyBuZXcgcmVjdXJyaW5nIGluZnJhc3RydWN0dXJlOyBwcml2YXRlIGJhY2t1cCBzdG9yYWdlIGFuZCBhdHRlbmRlZCBlbmdpbmVlcmluZy9yZWNvdmVyeSB0aW1lIHVucHJpY2VkLCBub3QgYW4gYXV0b3BpbG90IGNvc3QgZ3JhbnQiLAogICJyaXNrX2VzdGltYXRlcyI6IFsKICAgICJCcmllZiBSZWNyZWF0ZSBzZXJ2aWNlIGludGVycnVwdGlvbjsgbm8gY29uY3VycmVudCBuZXcgd3JpdGVyL3N1cmdlIiwKICAgICJQcml2YXRlIGV2aWRlbmNlIHNuYXBzaG90IGN1c3RvZHkgYW5kIGRpc3Bvc2FsIGVycm9yczsgbm8gc25hcHNob3RzL3Rva2VucyBpbiBwdWJsaWMgZXZpZGVuY2UiLAogICAgIkNhbmRpZGF0ZSBwdXJwb3NlIHJlZnVzYWwgbWF5IGV4cG9zZSBjYWxsZXJzIHJlbHlpbmcgb24gYWR2aXNvcnkgcmVzdWx0cyBhcyBiaW5kaW5nIiwKICAgICJJbmhlcml0ZWQga25vd24gZml4YWJsZSBNRURJVU0gcmVtYWlucyB1bnRpbCBzZXBhcmF0ZWx5IGFwcHJvdmVkIG93bmVyIHJlbWVkaWF0aW9uIiwKICAgICJFeGlzdGluZyBBcmdvIE91dE9mU3luYyBiYXNlbGluZSBpcyByZXRhaW5lZDsgbm8gd2hvbGUtYXBwIHN5bmMgb3IgdW5yZWxhdGVkIHJlcGFpcnMgcGVybWl0dGVkIgogIF0sCiAgInJvbGxiYWNrIjogIk1hbnVhbCBBcmdvIHNvdXJjZSBwaW4gYmFjayB0bzdkYjg0ODUgYW5kIHNjb3BlZCBEZXBsb3ltZW50LW9ubHkgc3luYyB0bzdmNWMgaW1hZ2U7IHJldGFpbiBjdXJyZW50IHNjaGVtYTUgZGF0YWJhc2UgYW5kIGFsbCBwb3N0LWN1dG92ZXIgZXZpZGVuY2UsIG5ldmVyIHJlc3RvcmUgb2xkZXIgc25hcHNob3Qgb3ZlciBsaXZlIHdyaXRlcyIsCiAgIm5hdGl2ZV9leGVjdXRlZCI6IGZhbHNlLAogICJodW1hbl9hcHByb3ZhbCI6IGZhbHNlLAogICJyZWZpbmVtZW50X29mX21hbmlmZXN0IjogIjdjNjczOGIzOWVhOGU1NGU2MWM4ZWQ2MjVlOTRhZDBiMjc1NWU2NzJlMTU3NmVmY2RmODRhMWQ2NjVhYzMzMDAiLAogICJtYW5kYXRvcnlfcHJlX29wZW5fZ2F0ZSI6ICJzdGRsaWJTUUxpdGUgbW9kZT1yby9xdWVyeV9vbmx5OiBzY2hlbWE1K2ludGVncml0eStjb3VudCBiYXNlbGluZSBiZWZvcmUgQU5ZIFN0b3JlL2FkbWluIG9uIG5hdGl2ZSBzb3VyY2Ugb3IgcmVzdG9yZWRjb3B5OyByZWZ1c2VvbGRzY2hlbWFzIHdpdGhvdXQgbWlncmF0aW9uIiwKICAib3B0aW1pemVkX2ludGVycHJldGVycyI6ICJsb2NhbCtyZW1vdGUgZXhwbGljaXRseXJlZnVzZWQgYmVmb3JlYXNzZXJ0IGdhdGVzIiwKICAibmF0aXZlX2RlcGVuZGVuY3lfZ2F0ZSI6ICJzZWFsZWQgYWN0dWFsQ00gVUlEL2ltbXV0YWJsZS9jYW5vbmljYWxkYXRhaGFzaCtQVkMgVUlEL2Z1bGxzcGVjL0JvdW5kL3ZvbHVtZU5hbWUsIG5vIHJhd0NNZGF0YSBvclNlY3JldCByZWFkcyIsCiAgImxpdmVfY291bnRzIjogIkZyb3plbiBzbmFwc2hvdC9jbG9uZSBleGFjdGNvdW50ZXIgZXF1YWxpdHk7IHBvc3RjdXRvdmVyL3JvbGxiYWNrIGxpdmVjb3VudGVyY2hhbmdlcyBtYXkgcmVmbGVjdCBsZWdpdGltYXRlIGNvbmN1cnJlbnRjb21taXRzL3N0YXRlIHRyYW5zaXRpb25zLCBsYXRlc3REQiBhbHdheXNyZXRhaW5lZCIKfQo=" + "content_base64": "ewogICJwcm9wb3NhbF9pZCI6ICJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MSIsCiAgInRyaWFsX2lkIjogImluZmQtcHVycG9zZS0yMDI2MTAxMS1yMSIsCiAgInN0YXRlIjogInByZXBhcmVkLXVuYXBwcm92ZWQiLAogICJ0YXJnZXQiOiAicmVhbG06a3ViZXJuZXRlcy9yYWlsaWFuY2UwMS9pbmZvcm1lZC1kZWNpc2lvbiIsCiAgImF1dGhvcml0eSI6ICJBRE1JTklTVEVSOyBhY3RpdmF0aW9uIEFQUFJPVkVEIG9ubHkgdXBvbiBleGFjdCBmb3VuZGVyIGRpc3Bvc2l0aW9uIiwKICAiY2FuZGlkYXRlX2ltYWdlIjogImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6NzYzYzM2NDAyYzhiZTdjYzRjMWJkMWE2MTYyM2QxYWZmOTExNmQ1MjI0MTg3NzQyNWI0NWE3MDE4Y2MwODgzYSIsCiAgInB1Ymxpc2hlZF9zb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInByaW9yX2ltYWdlIjogImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3MyIsCiAgInByaW9yX2FyZ29fcmV2aXNpb24iOiAiN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZiIsCiAgIm5hdGl2ZV9vYmplY3QiOiB7CiAgICAiYXBpVmVyc2lvbiI6ICJhcHBzL3YxIiwKICAgICJraW5kIjogIkRlcGxveW1lbnQiLAogICAgIm5hbWVzcGFjZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAidWlkIjogImE1ODhlMTBhLTkwZDItNDg4My05NzVlLTZkZDhiOGZlY2E5MiIKICB9LAogICJhcmdvX2FwcGxpY2F0aW9uX3VpZCI6ICI0OTk4NjhmMi1lYWJjLTRkZjQtYWUzMS1iODljZTU4ZDc1MGQiLAogICJzb3VyY2VfZ2F0ZSI6ICJBbGwgZm91ciBleGFjdCBjb21taXR0ZWQgb3duZXIgS3VzdG9taXplIGlucHV0IGJsb2JzIGluIGV4ZWN1dGlvbi1wbGFuLmpzb24gYW5kIGNsZWFuIGN1cnJlbnQgb3duZXIgSEVBRCBtdXN0IG1hdGNoOyBzb3VyY2UgcHJlcGFyYXRpb24gaXMgbm90IG5hdGl2ZSBhcHByb3ZhbCIsCiAgInN5bmNfc2NvcGUiOiBbCiAgICAiYXBwczpEZXBsb3ltZW50OmluZm9ybWVkLWRlY2lzaW9uIgogIF0sCiAgInBydW5lIjogZmFsc2UsCiAgImF1dG9tYXRlZF9zeW5jIjogZmFsc2UsCiAgInJ1bnRpbWVfY29uZmlnbWFwIjogImluZm9ybWVkLWRlY2lzaW9uLXJ1bnRpbWUtNmMyMjE4NzhkMDUxIiwKICAic2NoZW1hIjogNSwKICAicmVxdWVzdGVkX29wZXJhdGlvbnMiOiBbCiAgICAiUHJvdGVjdGVkIFNRTGl0ZS1jb25zaXN0ZW50IG5hdGl2ZSBiYWNrdXAgYW5kIGluZGVwZW5kZW50bHkgcHJvdGVjdGVkIG9mZi1jbHVzdGVyIGN1c3RvZHkiLAogICAgIk9mZmxpbmUgcmVzdG9yZS9pbnRlZ3JpdHkvY291bnQgY29tcGFyaXNvbiBvbiBhIHByaXZhdGUgZGlzcG9zYWJsZSB2b2x1bWUgd2l0aCBleGFjdCBjYW5kaWRhdGUsIG5vIHJ1bnRpbWUgdG9rZW5zL2NvbmZpZy9uZXR3b3JrIiwKICAgICJSZWZyZXNoIGEgY29uc2lzdGVudCBwcmUtY3V0b3ZlciBzbmFwc2hvdCwgcmV0YWluIHByaXZhdGUgY29waWVzIGFuZCBjb3VudC1vbmx5L2hhc2ggcmVjZWlwdHMiLAogICAgIlBpbiBleGlzdGluZyBtYW51YWwgQXJnbyBBcHBsaWNhdGlvbiB0byBleGFjdCBhcHByb3ZlZCBvd25lciBzb3VyY2UgYW5kIG1hbnVhbGx5IHN5bmMgb25seSBleGlzdGluZyBEZXBsb3ltZW50IGltYWdlIiwKICAgICJWZXJpZnkgaGVhbHRoL3JlYWRpbmVzcy9pbWFnZS9tb2R1bGUvaW5zdGFsbGVkIGZhaWwtY2xvc2VkIHB1cnBvc2UgY2hlY2tzIGFuZCByZXRhaW5lZCBzY2hlbWEvY291bnQgZXZpZGVuY2U7IHJlY292ZXIgdG8gcHJpb3Igc2FtZS1zY2hlbWEgaW1hZ2UgaWYgbmVlZGVkIgogIF0sCiAgImV4ZWN1dGVfYnkiOiAiMjAyNi0xMC0xMlQyMzo1OTo1OVoiLAogICJ0ZW1wb3JhcnlfdnVsbmVyYWJpbGl0eV9yZXZpZXdfZHVlIjogIjIwMjYtMTAtMTgiLAogICJrbm93bl9zY2FuX2ZpbmRpbmdzIjogIjBISUdIL0NSSVRJQ0FMLDFmaXhhYmxlIGluaGVyaXRlZE1FRElVTSB6bGliLCBhY3R1YWwgY3VycmVudGJhc2UrY2FuZGlkYXRlIGZpbmRpbmdzIGlkZW50aWNhbCIsCiAgInZ1bG5lcmFiaWxpdHlfcmVjb3JkIjogIklORkQtUklTSy0yMDI2MTAxMS1aTElCLTg1MDkxIC8gSU5GRC1XUC0wMDA5LVQwNSIsCiAgImNvc3RfZXN0aW1hdGVfRVVSIjogMCwKICAiY29zdF9saW1pdHMiOiAiTm8gbmV3IHJlY3VycmluZyBpbmZyYXN0cnVjdHVyZTsgcHJpdmF0ZSBiYWNrdXAgc3RvcmFnZSBhbmQgYXR0ZW5kZWQgZW5naW5lZXJpbmcvcmVjb3ZlcnkgdGltZSB1bnByaWNlZCwgbm90IGFuIGF1dG9waWxvdCBjb3N0IGdyYW50IiwKICAicmlza19lc3RpbWF0ZXMiOiBbCiAgICAiQnJpZWYgUmVjcmVhdGUgc2VydmljZSBpbnRlcnJ1cHRpb247IG5vIGNvbmN1cnJlbnQgbmV3IHdyaXRlci9zdXJnZSIsCiAgICAiUHJpdmF0ZSBldmlkZW5jZSBzbmFwc2hvdCBjdXN0b2R5IGFuZCBkaXNwb3NhbCBlcnJvcnM7IG5vIHNuYXBzaG90cy90b2tlbnMgaW4gcHVibGljIGV2aWRlbmNlIiwKICAgICJDYW5kaWRhdGUgcHVycG9zZSByZWZ1c2FsIG1heSBleHBvc2UgY2FsbGVycyByZWx5aW5nIG9uIGFkdmlzb3J5IHJlc3VsdHMgYXMgYmluZGluZyIsCiAgICAiSW5oZXJpdGVkIGtub3duIGZpeGFibGUgTUVESVVNIHJlbWFpbnMgdW50aWwgc2VwYXJhdGVseSBhcHByb3ZlZCBvd25lciByZW1lZGlhdGlvbiIsCiAgICAiRXhpc3RpbmcgQXJnbyBPdXRPZlN5bmMgYmFzZWxpbmUgaXMgcmV0YWluZWQ7IG5vIHdob2xlLWFwcCBzeW5jIG9yIHVucmVsYXRlZCByZXBhaXJzIHBlcm1pdHRlZCIsCiAgICAiQWxsIHBoYXNlcywgaW5jbHVkaW5nIHJlY292ZXJ5L3ZlcmlmaWNhdGlvbiwgbXVzdCBiZWdpbiBiZWZvcmUgT2N0MTIgZGVhZGxpbmU7IGlmIHJlY292ZXJ5IHdpbmRvdyBpcyBleGhhdXN0ZWQgc3RvcCBhbmQgb2J0YWluIGEgZnJlc2ggZm91bmRlciBkZWNpc2lvbi4gTm8gYXV0b21hdGljIGV4cGlyeSBjb250cm9sbGVyLiIKICBdLAogICJyb2xsYmFjayI6ICJNYW51YWwgQXJnbyBzb3VyY2UgcGluIGJhY2sgdG83ZGI4NDg1IGFuZCBzY29wZWQgRGVwbG95bWVudC1vbmx5IHN5bmMgdG83ZjVjIGltYWdlOyByZXRhaW4gY3VycmVudCBzY2hlbWE1IGRhdGFiYXNlIGFuZCBhbGwgcG9zdC1jdXRvdmVyIGV2aWRlbmNlLCBuZXZlciByZXN0b3JlIG9sZGVyIHNuYXBzaG90IG92ZXIgbGl2ZSB3cml0ZXMiLAogICJuYXRpdmVfZXhlY3V0ZWQiOiBmYWxzZSwKICAiaHVtYW5fYXBwcm92YWwiOiBmYWxzZSwKICAicmVmaW5lbWVudF9vZl9tYW5pZmVzdCI6ICI3YzY3MzhiMzllYThlNTRlNjFjOGVkNjI1ZTk0YWQwYjI3NTVlNjcyZTE1NzZlZmNkZjg0YTFkNjY1YWMzMzAwIiwKICAibWFuZGF0b3J5X3ByZV9vcGVuX2dhdGUiOiAic3RkbGliU1FMaXRlIG1vZGU9cm8vcXVlcnlfb25seTogc2NoZW1hNStpbnRlZ3JpdHkrY291bnQgYmFzZWxpbmUgYmVmb3JlIEFOWSBTdG9yZS9hZG1pbiBvbiBuYXRpdmUgc291cmNlIG9yIHJlc3RvcmVkY29weTsgcmVmdXNlb2xkc2NoZW1hcyB3aXRob3V0IG1pZ3JhdGlvbiIsCiAgIm9wdGltaXplZF9pbnRlcnByZXRlcnMiOiAibG9jYWwrcmVtb3RlIGV4cGxpY2l0bHlyZWZ1c2VkIGJlZm9yZWFzc2VydCBnYXRlcyIsCiAgIm5hdGl2ZV9kZXBlbmRlbmN5X2dhdGUiOiAic2VhbGVkIGFjdHVhbENNIFVJRC9pbW11dGFibGUvY2Fub25pY2FsZGF0YWhhc2grUFZDIFVJRC9mdWxsc3BlYy9Cb3VuZC92b2x1bWVOYW1lLCBubyByYXdDTWRhdGEgb3JTZWNyZXQgcmVhZHMiLAogICJsaXZlX2NvdW50cyI6ICJGcm96ZW4gc25hcHNob3QvY2xvbmUgZXhhY3Rjb3VudGVyIGVxdWFsaXR5OyBwb3N0Y3V0b3Zlci9yb2xsYmFjayBsaXZlY291bnRlcmNoYW5nZXMgbWF5IHJlZmxlY3QgbGVnaXRpbWF0ZSBjb25jdXJyZW50Y29tbWl0cy9zdGF0ZSB0cmFuc2l0aW9ucywgbGF0ZXN0REIgYWx3YXlzcmV0YWluZWQiLAogICJzb3VyY2VfYmFzaXMiOiB7CiAgICAicmV2aWV3ZWRfcHJvdG9jb2xfY29tbWl0IjogImUwMzU5YmNiNmNkZmFkOWFiM2U4NjgwNTQxMjFmZTBjZWJlYzJkNjgiLAogICAgIm93bmVyX2ZvbGxvd3Rocm91Z2hfY29tbWl0IjogIjkyNjhjOWFjMGJiZWU1MDhmZTM1YzBiOTBkY2VmZWY0YzI0ZGEyZjUiLAogICAgImZpbmFsX2V4ZWN1dGlvbl9zb3VyY2UiOiAiZXhhY3Qgc3Vic2VxdWVudCByb290LWFwcGxpZWQgc291cmNlIGNvbW1pdCBtdXN0IGJlIGJvdW5kIGJ5IGZvdW5kZXIgcmVjZWlwdCBhbmQgdmVyaWZpZWQgYWdhaW5zdCBmb3VyIGFwcHJvdmVkIEdpdCBibG9icyIKICB9LAogICJhcHByb3ZlZF9vd25lcl9yZW5kZXJfYmxvYl9zaGEyNTYiOiB7CiAgICAiZGVwbG95L2xpZmVjeWNsZS9hZG1pc3Npb24uY2FuZGlkYXRlLmpzb24iOiAiOTIzODJhNTZiMzQ5YzNiODk1ZTU4MDZlOTc1MDgyNTI3YmI5OWQxYTAwMTE0MGU2OWQ4NTdlNWIwMzkxZmE1NSIsCiAgICAiZGVwbG95L2xpZmVjeWNsZS9zZXJ2aWNlLmNhbmRpZGF0ZS5qc29uIjogIjM4Yjc4YjljYmVlNWFkZTc3NTBhNThkNTE1NmNhNGM1NzczMzUyZTk0N2FjYjMwNGVlNzE0YjU5ZTc0OWNlYjQiLAogICAgImRlcGxveS9saWZlY3ljbGUva3VzdG9taXphdGlvbi55YW1sIjogIjFiYmNlODFiYzY3NTg0MzQzNTQxNTdmODYwMTUzNDMyMGM1ZDAyOTA1ODc5MDhmZDE1YTZkMjVlM2ZhNTdmNDciLAogICAgImRlcGxveS9saWZlY3ljbGUvcmVnaXN0cmllcy5jYW5kaWRhdGUuanNvbiI6ICI5YmFkNmRiNWZiYzIxNzhkMzFiMDQxMjAwMTZhNDE4MzBjMzU1MmZiYjllMjUxN2I3MThmOWJiZTg3Y2Y2NDllIgogIH0sCiAgImV4ZWN1dGlvbl9idW5kbGVfc2hhMjU2IjogIjI3ZDZkNmQzMTMzYzk2M2RhMWRkZTkyZDQ5OGQ2MzY2MTczODdjMTZlODUwYTE3YzU5ODE0OGFiYzM1Yzc3NWQiLAogICJleGVjdXRpb25faGVscGVyX21hbmlmZXN0X3NoYTI1NiI6ICJmMmZhZDZjMjUxZmJiNDQyMGUwN2MxMzI5ODAyZjUyMWI1MTNiYmY2NmU1MWY2NGM1ZDY3M2VmMDRmMTYyODRjIiwKICAiZXhlY3V0aW9uX3BsYW5fc2hhMjU2IjogImY1ZTVmYTkwNmZmMTlkM2E0NWQxMGRjZGIyODEwMzczYWUyMWY5Y2Y0NGMwNDcyZmYyYmQ0N2QzYmMzMzI4ZDYiLAogICJleGVjdXRpb25fcGhhc2VzIjogWwogICAgImRyaWxsLWJhY2t1cCIsCiAgICAiZHJpbGwtY29weSIsCiAgICAib2ZmbGluZS12ZXJpZnkiLAogICAgImNsZWFudXAtb2ZmbGluZSIsCiAgICAiY3V0b3Zlci1iYWNrdXAiLAogICAgImN1dG92ZXItY29weSIsCiAgICAicmVsZWFzZSIsCiAgICAidmVyaWZ5IiwKICAgICJyb2xsYmFjayIsCiAgICAicm9sbGJhY2stdmVyaWZ5IgogIF0sCiAgImRlYWRsaW5lX3NlbWFudGljcyI6ICJBbGwgcGhhc2VzIGluY2x1ZGluZyB2ZXJpZmljYXRpb24vcmVjb3ZlcnkgbXVzdCBiZWdpbiBiZWZvcmUgZXhlY3V0ZV9ieS4gTm8gZXh0ZW5zaW9uIG9yIGF1dG9tYXRpYyBlbWVyZ2VuY3kgZ3JhbnQ7IGJleW9uZCBkZWFkbGluZSBzdG9wIGFuZCBvYnRhaW4gYSBmcmVzaCBmb3VuZGVyIGRlY2lzaW9uLiBDb21wbGV0ZSB0aGUgYm91bmRlZCBkcmlsbCBhbmQgcm9sbG91dCBlYXJseSBlbm91Z2ggdG8gYWxsb3cgcmVjb3Zlcnkgd2l0aGluIHRoZSB3aW5kb3cuIiwKICAib2ZmbGluZV9pbml0aWFsaXplciI6ICJPbmUgaXNvbGF0ZWQgbG9jYWwgVUlEMDowL0NBUF9DSE9XTi1vbmx5IGluaXRpYWxpemVyIG9mIHRoZSBuZXdseSBjcmVhdGVkIG5vbmNlLWJvdW5kIGRpc3Bvc2FibGUgdm9sdW1lLCBleGFjdCBjYW5kaWRhdGUgaW1hZ2UsIG5ldHdvcmtub25lL3JlYWRvbmx5cm9vdC9uby1uZXdwcml2aWxlZ2VzL0NQVTEvMTI4TWk7IG5vIGhvc3QvbGl2ZVBWQy90b2tlbi9jb25maWcgbW91bnQuIFN1YnNlcXVlbnQgcHJlLW9wZW4vYWRtaW4vcG9zdC1vcGVuIGNoZWNrcyBVSUQxMDAwMToxMDAwMS4iLAogICJyb2xsYmFja19kaXNwYXRjaCI6ICJTZWFsZWQgRGVwbG95bWVudC9DTS9QVkMgYW5kIHNhbWUtc2NoZW1hIHNvdXJjZS9pbWFnZSBwYWlyIHBsdXMgYWRtaXNzaW9uIENBUzsgbm8gUmVhZHkgY2FuZGlkYXRlIG9yIFBvZC9kYXRhYmFzZSBleGVjIHByZXJlcXVpc2l0ZS4gcm9sbGJhY2stdmVyaWZ5IHNlcGFyYXRlbHkgcHJvdmVzIHJlY292ZXJlZCBvbGQgaW1hZ2UvUmVhZHkxL3Njb3BlZCBvcGVyYXRpb24gYW5kIHJlYWRvbmx5IGN1cnJlbnQgc2NoZW1hNS9pbnRlZ3JpdHkvY291bnRzLiIsCiAgInB1cnBvc2VfcHJvb2ZfbGltaXQiOiAiVGVuIGluc3RhbGxlZCBzeW50aGV0aWMtdHJhbnNwb3J0IGNoZWNrcyBvbiBhY3R1YWwgcGxhY2VtZW50OyBuYXRpdmVfcHJvdmlkZXI9ZmFsc2UuIE5vdCBhY3R1YWwgcHJvdmlkZXIvUERQIGF1dGhvcml0eSBwcm9vZiwgd2hpY2ggcmVtYWlucyBhIGRpc3RpbmN0IFQwNCBjb21wbGV0aW9uIGdhdGUuIiwKICAicmVmaW5lbWVudF9vZl9hbWVuZGVkX21hbmlmZXN0IjogImIxZTNlNjZiYzQwMjNkYzgwYzZlYTU5NTY0YzM1NTdjNzY1M2ZiM2MzMDdmNDZhMDQ5OTk3Yjc2MTk4YTkwMzMiCn0K" }, { "digest": "sha256:92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55", @@ -190,9 +190,9 @@ "content_base64": "ewogICJpbWFnZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICJzb3VyY2VfcmV2aXNpb24iOiAiM2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCIsCiAgInNjYW5uZXIiOiAiYXF1YXNlYy90cml2eUBzaGEyNTY6NjJiMWU2NWU4ODY5YmM0YjRjNmFhNGZhMmIyMTU5NTI1NmM3YzJmNjAxOGE5ZDlhZDYxY2FmODcxODdjMTk2OSIsCiAgInZlcnNpb24iOiAiMC43NC4wIiwKICAiZGJfbWV0YWRhdGEiOiB7CiAgICAiVmVyc2lvbiI6IDIsCiAgICAiTmV4dFVwZGF0ZSI6ICIyMDI2LTEwLTExVDE4OjU5OjUwLjg4OTAxMDU3MloiLAogICAgIlVwZGF0ZWRBdCI6ICIyMDI2LTEwLTEwVDE4OjU5OjUwLjg4OTAxMDkyM1oiLAogICAgIkRvd25sb2FkZWRBdCI6ICIyMDI2LTEwLTEwVDIzOjMyOjMyLjM4MDAzMzEzMVoiCiAgfSwKICAic3VwcHJlc3Npb24iOiBmYWxzZSwKICAiaWdub3JlX3VuZml4ZWQiOiBmYWxzZSwKICAic2V2ZXJpdHlfZmlsdGVyIjogbnVsbCwKICAicGFja2FnZV9jb3VudCI6IDQ0LAogICJmaW5kaW5nc19ieV9zZXZlcml0eSI6IHsKICAgICJNRURJVU0iOiAxCiAgfSwKICAiZmluZGluZ3MiOiBbCiAgICB7CiAgICAgICJpZCI6ICJDVkUtMjAyNi04NTA5MSIsCiAgICAgICJwYWNrYWdlIjogInpsaWIiLAogICAgICAiaW5zdGFsbGVkIjogIjEuMy4yLXIwIiwKICAgICAgImZpeGVkIjogIjEuMy4yLXIxIiwKICAgICAgInNldmVyaXR5IjogIk1FRElVTSIKICAgIH0KICBdLAogICJjb3ZlcmFnZV9saW1pdHMiOiBbCiAgICAiQWxwaW5lMy4yNCBhYnNlbnQgc2Nhbm5lciBFT0wgbGlzdDsgT1MgZGV0ZWN0b3IgcmFuIGFnYWluc3QgQWxwaW5lMy4yNCByZXBvc2l0b3J5IG9uMzhPUyBwYWNrYWdlcyIsCiAgICAiS25vd24gZmluZGluZ3MgYXNvZiBwaW5uZWREQiwgbm90IGNsYWltIGFic2VuY2Ugb2YgdW5rbm93biB2dWxuZXJhYmlsaXRpZXMiCiAgXSwKICAiaGlnaF9jcml0aWNhbCI6IDAsCiAgInNhbWVfc2Nhbm5lcl9hY3R1YWxfYmFzZV9zY2FuX2ZpbmRpbmdzX2lkZW50aWNhbCI6IHRydWUsCiAgImJhc2Vfc2Nhbl9maWxlIjogImJhc2UtdHJpdnktZnVsbC5qc29uIgp9Cg==" }, { - "digest": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e", + "digest": "sha256:27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d", "media_type": "application/json", - "content_base64": "ewogICJTY2hlbWFWZXJzaW9uIjogMiwKICAiVHJpdnkiOiB7CiAgICAiVmVyc2lvbiI6ICIwLjc0LjAiCiAgfSwKICAiUmVwb3J0SUQiOiAiMDFhMTI4OGQtOGRmMS03M2ZiLTkzMTMtMzY0MmRkNjRiYTcyIiwKICAiQ3JlYXRlZEF0IjogIjIwMjYtMTAtMTFUMDE6MjI6MDcuOTg1MjY0NDA0WiIsCiAgIkFydGlmYWN0SUQiOiAic2hhMjU2OjQwZjg3M2I4ZDYzNDUzNDFlMmY2NjFhNTAzOGMwOTJkMTg2ZTI4MzFkYzYwYjYxNzA0YTQxOWExZjRmNzdlZjYiLAogICJBcnRpZmFjdE5hbWUiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIiwKICAiQXJ0aWZhY3RUeXBlIjogImNvbnRhaW5lcl9pbWFnZSIsCiAgIk1ldGFkYXRhIjogewogICAgIlNpemUiOiA4ODI1ODA0OCwKICAgICJPUyI6IHsKICAgICAgIkZhbWlseSI6ICJhbHBpbmUiLAogICAgICAiTmFtZSI6ICIzLjI0LjEiCiAgICB9LAogICAgIkltYWdlSUQiOiAic2hhMjU2OmYzNGRlMjEzNzljNGY1MGVhMDM2MWNhMWQ4Mjk2YzhlNzJmOTg5NDk5YWQyODgwMTZiODEyMDQ5OTdhZTQ3NzkiLAogICAgIkRpZmZJRHMiOiBbCiAgICAgICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIsCiAgICAgICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIsCiAgICAgICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIsCiAgICAgICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIsCiAgICAgICJzaGEyNTY6ZjliNGE4YTQxMmEwYzA3YTQ4OWU0NmZiNWRiNDFmOWQwZGM4NGQ0ZWMzOGE0ZTJjNmFiOTUzMWY0NGUwZDlmMSIsCiAgICAgICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIsCiAgICAgICJzaGEyNTY6MzYxNDMwYTExMTM5Njk3NDNiOTllMjM3YjIwZjAyM2Q1NDk3NDkzYmNmOTZmYjkxYWY5OWFjMGEwZGJjNGE1OSIsCiAgICAgICJzaGEyNTY6Y2ZjNTkzOTY3NGQ2N2Y2MGI0NDExYzI0ZGZjZGU1NjIyYjcxMmVlYjczNzZjZDA5NDFhMjc1MWRhODBhNmIwMiIsCiAgICAgICJzaGEyNTY6MjFmZjkxODhjYjI5Y2E5NWZlOWJlMTEzNTVmNzBhYjU1ODZlODQ5OWUzM2I1MmEyNTNkOTUzZmIzYjc1YWVhMyIKICAgIF0sCiAgICAiUmVwb0RpZ2VzdHMiOiBbCiAgICAgICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiCiAgICBdLAogICAgIlJlZmVyZW5jZSI6ICJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2EiLAogICAgIkltYWdlQ29uZmlnIjogewogICAgICAiYXJjaGl0ZWN0dXJlIjogImFtZDY0IiwKICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0xMVQwMToyMTowNC43ODc1Mjc2OTdaIiwKICAgICAgImRvY2tlcl92ZXJzaW9uIjogIjI3LjUuMSIsCiAgICAgICJoaXN0b3J5IjogWwogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDYtMTZUMDA6MDE6MjkuOTY3MTYxOTAyWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJBREQgYWxwaW5lLW1pbmlyb290ZnMtMy4yNC4xLXg4Nl82NC50YXIuZ3ogLyAjIGJ1aWxka2l0IiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA2LTE2VDAwOjAxOjI5Ljk2NzE2MTkwMloiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiQ01EIFtcIi9iaW4vc2hcIl0iLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBBVEg9L3Vzci9sb2NhbC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0wMVQwMDowNToyNC4yMjQ1NDQ4NDNaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBMQU5HPUMuVVRGLTgiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgc2V0IC1ldXg7IFx0YXBrIGFkZCAtLW5vLWNhY2hlIFx0XHRjYS1jZXJ0aWZpY2F0ZXMgXHRcdHR6ZGF0YSBcdDsgIyBidWlsZGtpdCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0wMVQwMDowNToyNC4yMjQ1NDQ4NDNaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBHUEdfS0VZPTcxNjk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBZVEhPTl9WRVJTSU9OPTMuMTIuMTQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjA1OjI0LjIyNDU0NDg0M1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5WIFBZVEhPTl9TSEEyNTY9NWM4NDYyYWY1NzkwYmFmNDNhMzIxYTE1NTlkYmUwZGIwNmQxYmU0MzAwZmI4NWZiNTNjNDAwNjA2NjhlNTQ4YSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMDFUMDA6MTA6MzAuNjcyMjI1OTcyWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJSVU4gL2Jpbi9zaCAtYyBzZXQgLWV1eDsgXHRcdGFwayBhZGQgLS1uby1jYWNoZSAtLXZpcnR1YWwgLmJ1aWxkLWRlcHMgXHRcdGJsdWV6LWRldiBcdFx0YnppcDItZGV2IFx0XHRkcGtnLWRldiBkcGtnIFx0XHRmaW5kdXRpbHMgXHRcdGcrKyBcdFx0Z2NjIFx0XHRnZGJtLWRldiBcdFx0Z251cGcgXHRcdGxpYmMtZGV2IFx0XHRsaWJmZmktZGV2IFx0XHRsaWJuc2wtZGV2IFx0XHRsaWJ0aXJwYy1kZXYgXHRcdGxpbnV4LWhlYWRlcnMgXHRcdG1ha2UgXHRcdG5jdXJzZXMtZGV2IFx0XHRvcGVuc3NsLWRldiBcdFx0cGF4LXV0aWxzIFx0XHRyZWFkbGluZS1kZXYgXHRcdHNxbGl0ZS1kZXYgXHRcdHRhciBcdFx0dGNsLWRldiBcdFx0dGsgXHRcdHRrLWRldiBcdFx0dXRpbC1saW51eC1kZXYgXHRcdHh6IFx0XHR4ei1kZXYgXHRcdHpsaWItZGV2IFx0OyBcdFx0d2dldCAtTyBweXRob24udGFyLnh6IFwiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFlUSE9OX1ZFUlNJT04lJVthLXpdKn0vUHl0aG9uLSRQWVRIT05fVkVSU0lPTi50YXIueHpcIjsgXHRlY2hvIFwiJFBZVEhPTl9TSEEyNTYgKnB5dGhvbi50YXIueHpcIiB8IHNoYTI1NnN1bSAtYyAtOyBcdHdnZXQgLU8gcHl0aG9uLnRhci54ei5hc2MgXCJodHRwczovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQWVRIT05fVkVSU0lPTiUlW2Etel0qfS9QeXRob24tJFBZVEhPTl9WRVJTSU9OLnRhci54ei5hc2NcIjsgXHRHTlVQR0hPTUU9XCIkKG1rdGVtcCAtZClcIjsgZXhwb3J0IEdOVVBHSE9NRTsgXHRncGcgLS1iYXRjaCAtLWtleXNlcnZlciBoa3BzOi8va2V5cy5vcGVucGdwLm9yZyAtLXJlY3Yta2V5cyBcIiRHUEdfS0VZXCI7IFx0Z3BnIC0tYmF0Y2ggLS12ZXJpZnkgcHl0aG9uLnRhci54ei5hc2MgcHl0aG9uLnRhci54ejsgXHRncGdjb25mIC0ta2lsbCBhbGw7IFx0cm0gLXJmIFwiJEdOVVBHSE9NRVwiIHB5dGhvbi50YXIueHouYXNjOyBcdG1rZGlyIC1wIC91c3Ivc3JjL3B5dGhvbjsgXHR0YXIgLS1leHRyYWN0IC0tZGlyZWN0b3J5IC91c3Ivc3JjL3B5dGhvbiAtLXN0cmlwLWNvbXBvbmVudHM9MSAtLWZpbGUgcHl0aG9uLnRhci54ejsgXHRybSBweXRob24udGFyLnh6OyBcdFx0Y2QgL3Vzci9zcmMvcHl0aG9uOyBcdGdudUFyY2g9XCIkKGRwa2ctYXJjaGl0ZWN0dXJlIC0tcXVlcnkgREVCX0JVSUxEX0dOVV9UWVBFKVwiOyBcdC4vY29uZmlndXJlIFx0XHQtLWJ1aWxkPVwiJGdudUFyY2hcIiBcdFx0LS1lbmFibGUtbG9hZGFibGUtc3FsaXRlLWV4dGVuc2lvbnMgXHRcdC0tZW5hYmxlLW9wdGlvbi1jaGVja2luZz1mYXRhbCBcdFx0LS1lbmFibGUtc2hhcmVkIFx0XHQkKHRlc3QgXCIke2dudUFyY2glJS0qfVwiICE9ICdyaXNjdjY0JyBcdTAwMjZcdTAwMjYgZWNobyAnLS13aXRoLWx0bycpIFx0XHQtLXdpdGgtZW5zdXJlcGlwIFx0OyBcdG5wcm9jPVwiJChucHJvYylcIjsgXHRFWFRSQV9DRkxBR1M9XCItRFRIUkVBRF9TVEFDS19TSVpFPTB4MTAwMDAwXCI7IFx0TERGTEFHUz1cIiR7TERGTEFHUzotfSAtV2wsLS1zdHJpcC1hbGxcIjsgXHRhcmNoPVwiJChhcGsgLS1wcmludC1hcmNoKVwiOyBcdGNhc2UgXCIkYXJjaFwiIGluIFx0XHR4ODZfNjR8YWFyY2g2NCkgXHRcdFx0RVhUUkFfQ0ZMQUdTPVwiJHtFWFRSQV9DRkxBR1M6LX0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLW1uby1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlclwiOyBcdFx0XHQ7OyBcdFx0eDg2KSBcdFx0XHQ7OyBcdFx0KikgXHRcdFx0RVhUUkFfQ0ZMQUdTPVwiJHtFWFRSQV9DRkxBR1M6LX0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXJcIjsgXHRcdFx0OzsgXHRlc2FjOyBcdG1ha2UgLWogXCIkbnByb2NcIiBcdFx0XCJFWFRSQV9DRkxBR1M9JHtFWFRSQV9DRkxBR1M6LX1cIiBcdFx0XCJMREZMQUdTPSR7TERGTEFHUzotfVwiIFx0OyBcdHJtIHB5dGhvbjsgXHRtYWtlIC1qIFwiJG5wcm9jXCIgXHRcdFwiRVhUUkFfQ0ZMQUdTPSR7RVhUUkFfQ0ZMQUdTOi19XCIgXHRcdFwiTERGTEFHUz0ke0xERkxBR1M6LX0gLVdsLC1ycGF0aD0nXFwkXFwkT1JJR0lOLy4uL2xpYidcIiBcdFx0cHl0aG9uIFx0OyBcdG1ha2UgaW5zdGFsbDsgXHRcdGNkIC87IFx0cm0gLXJmIC91c3Ivc3JjL3B5dGhvbjsgXHRcdGZpbmQgL3Vzci9sb2NhbCAtZGVwdGggXHRcdFxcKCBcdFx0XHRcXCggLXR5cGUgZCAtYSBcXCggLW5hbWUgdGVzdCAtbyAtbmFtZSB0ZXN0cyAtbyAtbmFtZSBpZGxlX3Rlc3QgXFwpIFxcKSBcdFx0XHQtbyBcXCggLXR5cGUgZiAtYSBcXCggLW5hbWUgJyoucHljJyAtbyAtbmFtZSAnKi5weW8nIC1vIC1uYW1lICdsaWJweXRob24qLmEnIFxcKSBcXCkgXHRcdFxcKSAtZXhlYyBybSAtcmYgJ3t9JyArIFx0OyBcdFx0ZmluZCAvdXNyL2xvY2FsIC10eXBlIGYgLWV4ZWN1dGFibGUgLW5vdCBcXCggLW5hbWUgJyp0a2ludGVyKicgXFwpIC1leGVjIHNjYW5lbGYgLS1uZWVkZWQgLS1ub2Jhbm5lciAtLWZvcm1hdCAnJW4jcCcgJ3t9JyAnOycgXHRcdHwgdHIgJywnICdcXG4nIFx0XHR8IHNvcnQgLXUgXHRcdHwgYXdrICdzeXN0ZW0oXCJbIC1lIC91c3IvbG9jYWwvbGliL1wiICQxIFwiIF1cIikgPT0gMCB7IG5leHQgfSB7IHByaW50IFwic286XCIgJDEgfScgXHRcdHwgeGFyZ3MgLXJ0IGFwayBhZGQgLS1uby1uZXR3b3JrIC0tdmlydHVhbCAucHl0aG9uLXJ1bmRlcHMgXHQ7IFx0YXBrIGRlbCAtLW5vLW5ldHdvcmsgLmJ1aWxkLWRlcHM7IFx0XHRleHBvcnQgUFlUSE9ORE9OVFdSSVRFQllURUNPREU9MTsgXHRweXRob24zIC0tdmVyc2lvbjsgXHRwaXAzIC0tdmVyc2lvbiAjIGJ1aWxka2l0IiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTA5LTAxVDAwOjEwOjMwLjc4MjcyNjAwM1oiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgc2V0IC1ldXg7IFx0Zm9yIHNyYyBpbiBpZGxlMyBwaXAzIHB5ZG9jMyBweXRob24zIHB5dGhvbjMtY29uZmlnOyBkbyBcdFx0ZHN0PVwiJChlY2hvIFwiJHNyY1wiIHwgdHIgLWQgMylcIjsgXHRcdFsgLXMgXCIvdXNyL2xvY2FsL2Jpbi8kc3JjXCIgXTsgXHRcdFsgISAtZSBcIi91c3IvbG9jYWwvYmluLyRkc3RcIiBdOyBcdFx0bG4gLXN2VCBcIiRzcmNcIiBcIi91c3IvbG9jYWwvYmluLyRkc3RcIjsgXHRkb25lICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMDFUMDA6MTA6MzAuNzgyNzI2MDAzWiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICJDTUQgW1wicHl0aG9uM1wiXSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMDktMTFUMDA6NDk6NDcuOTYyMTU2ODc2KzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVOViBQWVRIT05ET05UV1JJVEVCWVRFQ09ERT0xIFBZVEhPTlVOQlVGRkVSRUQ9MSBQQVRIPS9vcHQvdmVudi9iaW46L3Vzci9sb2NhbC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0wOS0xMVQwMDo0OTo0Ny45NjIxNTY4NzYrMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiUlVOIC9iaW4vc2ggLWMgYXBrIGFkZCAtLW5vLWNhY2hlICdsaWJ1dWlkXHUwMDNlPTIuNDIuMy1yMScgICAgIFx1MDAyNlx1MDAyNiBhZGRncm91cCAtUyAtZyAxMDAwMSBpbmZvcm1lZCAgICAgXHUwMDI2XHUwMDI2IGFkZHVzZXIgLVMgLXUgMTAwMDEgLUcgaW5mb3JtZWQgLUggaW5mb3JtZWQgIyBidWlsZGtpdCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1NS4zNTE5NDQ5NzgrMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiQ09QWSAvb3B0L3ZlbnYgL29wdC92ZW52ICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNDYyMDkyMDcyKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIlJVTiAvYmluL3NoIC1jIHJtIC1yZiAvdXNyL2xvY2FsL2Jpbi9waXAqIC91c3IvbG9jYWwvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9waXAqICAgICAvdXNyL2xvY2FsL2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvc2V0dXB0b29scyogL3Vzci9sb2NhbC9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL3BrZ19yZXNvdXJjZXMgICAgIC9vcHQvdmVudi9iaW4vcGlwKiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9waXAqICAgICAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9zZXR1cHRvb2xzKiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9wa2dfcmVzb3VyY2VzICMgYnVpbGRraXQiLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNjc1MjE2ODIxKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIldPUktESVIgL2FwcCIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1Ni42NzUyMTY4MjErMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiVVNFUiAxMDAwMToxMDAwMSIsCiAgICAgICAgICAiY29tbWVudCI6ICJidWlsZGtpdC5kb2NrZXJmaWxlLnYwIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMDVUMDE6MDM6NTYuNjc1MjE2ODIxKzAyOjAwIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIkVYUE9TRSBbODA4MC90Y3AgODA4MS90Y3BdIiwKICAgICAgICAgICJjb21tZW50IjogImJ1aWxka2l0LmRvY2tlcmZpbGUudjAiLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0wNVQwMTowMzo1Ni42NzUyMTY4MjErMDI6MDAiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiRU5UUllQT0lOVCBbXCJpbmZvcm1lZC1kZWNpc2lvbi1jb250YWluZXJcIl0iLAogICAgICAgICAgImNvbW1lbnQiOiAiYnVpbGRraXQuZG9ja2VyZmlsZS52MCIsCiAgICAgICAgICAiZW1wdHlfbGF5ZXIiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiY3JlYXRlZCI6ICIyMDI2LTEwLTExVDAxOjE1OjExLjk5MTQ0MzY3NloiLAogICAgICAgICAgImNyZWF0ZWRfYnkiOiAiL2Jpbi9zaCAtYyAjKG5vcCkgIEFSRyBTT1VSQ0VfUkVWSVNJT04iLAogICAgICAgICAgImVtcHR5X2xheWVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImNyZWF0ZWQiOiAiMjAyNi0xMC0xMVQwMToyMTowNC43MTYxMjYzOTJaIiwKICAgICAgICAgICJjcmVhdGVkX2J5IjogIi9iaW4vc2ggLWMgIyhub3ApICBMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UucmV2aXNpb249M2U0YmNiMjZmOGVlYWE4YzY0MzQ1YzU2NTQ3N2I1YWM4Y2NiYjE2OCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYmFzZS5kaWdlc3Q9c2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMgc29jaWFsLmNvdWxvbWIuc291cmNlLnBvbGljeS5zaGEyNTY9OWQ3YzFiZTRjYjYxOTlkMTRlZjBhYWVhZDVmODU5NTFmNDViMGNjYmQ3YzgwMGE3ZmRlOTIyYTI1MzU2NmI2MiBzb2NpYWwuY291bG9tYi5yZWxlYXNlLnNjb3BlPUlORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxIiwKICAgICAgICAgICJlbXB0eV9sYXllciI6IHRydWUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJjcmVhdGVkIjogIjIwMjYtMTAtMTFUMDE6MjE6MDQuNzg3NTI3Njk3WiIsCiAgICAgICAgICAiY3JlYXRlZF9ieSI6ICIvYmluL3NoIC1jICMobm9wKSBDT1BZIGZpbGU6MmJlOWNiMzZlNzI1M2UxNTczMzY3MzM1OWNkYThjYWEyMjk4NmI2ODg4ODIyYTAwOGMxYjM2MGQ5MDk5OTRlMCBpbiAvb3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9pbmZvcm1lZF9kZWNpc2lvbi9wb2xpY3kucHkgIgogICAgICAgIH0KICAgICAgXSwKICAgICAgIm9zIjogImxpbnV4IiwKICAgICAgInJvb3RmcyI6IHsKICAgICAgICAidHlwZSI6ICJsYXllcnMiLAogICAgICAgICJkaWZmX2lkcyI6IFsKICAgICAgICAgICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIsCiAgICAgICAgICAic2hhMjU2OjNjYTRiZTJjNmU5YWMwMjIzNzE1MzU1MjUzNzI1MzgxMDAwNDg2YzJiNDViZmNiMjJjZjU3MWI2YTg1YTEyZGQiLAogICAgICAgICAgInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IiwKICAgICAgICAgICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIsCiAgICAgICAgICAic2hhMjU2OmY5YjRhOGE0MTJhMGMwN2E0ODllNDZmYjVkYjQxZjlkMGRjODRkNGVjMzhhNGUyYzZhYjk1MzFmNDRlMGQ5ZjEiLAogICAgICAgICAgInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIiwKICAgICAgICAgICJzaGEyNTY6MzYxNDMwYTExMTM5Njk3NDNiOTllMjM3YjIwZjAyM2Q1NDk3NDkzYmNmOTZmYjkxYWY5OWFjMGEwZGJjNGE1OSIsCiAgICAgICAgICAic2hhMjU2OmNmYzU5Mzk2NzRkNjdmNjBiNDQxMWMyNGRmY2RlNTYyMmI3MTJlZWI3Mzc2Y2QwOTQxYTI3NTFkYTgwYTZiMDIiLAogICAgICAgICAgInNoYTI1NjoyMWZmOTE4OGNiMjljYTk1ZmU5YmUxMTM1NWY3MGFiNTU4NmU4NDk5ZTMzYjUyYTI1M2Q5NTNmYjNiNzVhZWEzIgogICAgICAgIF0KICAgICAgfSwKICAgICAgImNvbmZpZyI6IHsKICAgICAgICAiRW50cnlwb2ludCI6IFsKICAgICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi1jb250YWluZXIiCiAgICAgICAgXSwKICAgICAgICAiRW52IjogWwogICAgICAgICAgIlBBVEg9L29wdC92ZW52L2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgIkxBTkc9Qy5VVEYtOCIsCiAgICAgICAgICAiR1BHX0tFWT03MTY5NjA1RjYyQzc1MTM1NkQwNTRBMjZBODIxRTY4MEU1RkE2MzA1IiwKICAgICAgICAgICJQWVRIT05fVkVSU0lPTj0zLjEyLjE0IiwKICAgICAgICAgICJQWVRIT05fU0hBMjU2PTVjODQ2MmFmNTc5MGJhZjQzYTMyMWExNTU5ZGJlMGRiMDZkMWJlNDMwMGZiODVmYjUzYzQwMDYwNjY4ZTU0OGEiLAogICAgICAgICAgIlBZVEhPTkRPTlRXUklURUJZVEVDT0RFPTEiLAogICAgICAgICAgIlBZVEhPTlVOQlVGRkVSRUQ9MSIKICAgICAgICBdLAogICAgICAgICJJbWFnZSI6ICJzaGEyNTY6OTBmMTU3NGY5ZWRhMzVmYTZjYjk3Mjk2MWJlYjI3YTdjYjkwNGMzNjU2MGUzODE5MzBiMGUxNDA2NWMyMzg4MyIsCiAgICAgICAgIkxhYmVscyI6IHsKICAgICAgICAgICJvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYmFzZS5kaWdlc3QiOiAic2hhMjU2OjdmNWM2Y2IyOWM5ZjcwYTAyNmJmZTMwZTcyOTM0Mjc0ZGRjNjkyNjE2NzZjZjZkNDc2ZjgxZGQzMjgxMmQxNzMiLAogICAgICAgICAgIm9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5yZXZpc2lvbiI6ICIzZTRiY2IyNmY4ZWVhYThjNjQzNDVjNTY1NDc3YjVhYzhjY2JiMTY4IiwKICAgICAgICAgICJzb2NpYWwuY291bG9tYi5yZWxlYXNlLnNjb3BlIjogIklORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxIiwKICAgICAgICAgICJzb2NpYWwuY291bG9tYi5zb3VyY2UucG9saWN5LnNoYTI1NiI6ICI5ZDdjMWJlNGNiNjE5OWQxNGVmMGFhZWFkNWY4NTk1MWY0NWIwY2NiZDdjODAwYTdmZGU5MjJhMjUzNTY2YjYyIgogICAgICAgIH0sCiAgICAgICAgIlVzZXIiOiAiMTAwMDE6MTAwMDEiLAogICAgICAgICJXb3JraW5nRGlyIjogIi9hcHAiLAogICAgICAgICJFeHBvc2VkUG9ydHMiOiB7CiAgICAgICAgICAiODA4MC90Y3AiOiB7fSwKICAgICAgICAgICI4MDgxL3RjcCI6IHt9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkxheWVycyI6IFsKICAgICAgewogICAgICAgICJTaXplIjogODY5Nzg1NiwKICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICB9LAogICAgICB7CiAgICAgICAgIlNpemUiOiAxNTM4MDQ4LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjQ3MzkzYjY2OGNlNTM1ZDA2ZTg5Njc5MTdkNDI0YzE3N2UyZWNjY2FlODM4NTZkNDhiMmU5OTE2NGY4Y2M2Y2IiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjNjYTRiZTJjNmU5YWMwMjIzNzE1MzU1MjUzNzI1MzgxMDAwNDg2YzJiNDViZmNiMjJjZjU3MWI2YTg1YTEyZGQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDQ3MTUwNTkyLAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDUxMjAsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ZWQ2MmM5MWNjZDk0ZTM2YTkyOGU5NmQ3MDRjZmNmMjA4NjEzMDI1OTAyNDVjYzEyYWE4OWExNWE1ZDZiZTI5YiIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NDA5OGFkMDMzNTI1MjYzZjkyYThhOWM1MTg2NTU5NjAyNWQ0NzAxOGUwNzhjMGIxZjdkOWNkNTY2M2ZjMWZmZSIKICAgICAgfSwKICAgICAgewogICAgICAgICJTaXplIjogMTMxNTg0LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OmYwZmUzZTA4YWIwNDZjMGM1ZTI5ZDM0ZWU3M2JjOGM3ZTAzMzk4ZWI4OTFlNDQ5OGUwYTY3MDg4YTVlYTNlODYiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmY5YjRhOGE0MTJhMGMwN2E0ODllNDZmYjVkYjQxZjlkMGRjODRkNGVjMzhhNGUyYzZhYjk1MzFmNDRlMGQ5ZjEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDMwNzA1NjY0LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDEyMjg4LAogICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjE2YTNkYmE2YjcyMGQzMDU5ZWFiOTE4Y2QzNTk2Zjk0MTQ1YWM5Y2Y0ZDQ1NmY5MjVhMjFmMGY3MjUyMjg2M2YiLAogICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM2MTQzMGExMTEzOTY5NzQzYjk5ZTIzN2IyMGYwMjNkNTQ5NzQ5M2JjZjk2ZmI5MWFmOTlhYzBhMGRiYzRhNTkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiU2l6ZSI6IDE1MzYsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ZTczZGQ0NjRmYmZmNTYwN2NjNjJhMWIyYjY2YjBlZWZlNzM3ZGZhZDRkYjhlN2I1OGE0OGNkYTdjMTJkOTRkMyIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6Y2ZjNTkzOTY3NGQ2N2Y2MGI0NDExYzI0ZGZjZGU1NjIyYjcxMmVlYjczNzZjZDA5NDFhMjc1MWRhODBhNmIwMiIKICAgICAgfSwKICAgICAgewogICAgICAgICJTaXplIjogMTUzNjAsCiAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6Y2ZlZTI5YzJmODExOWQyYTM5NzE0ZWNiZTUwOTVhMmRjMWM5ODYwNTRmMmUxZmUwYTY1NjUxNjMyNDI0MTdlMyIsCiAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MjFmZjkxODhjYjI5Y2E5NWZlOWJlMTEzNTVmNzBhYjU1ODZlODQ5OWUzM2I1MmEyNTNkOTUzZmIzYjc1YWVhMyIKICAgICAgfQogICAgXQogIH0sCiAgIlJlc3VsdHMiOiBbCiAgICB7CiAgICAgICJUYXJnZXQiOiAiZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhIChhbHBpbmUgMy4yNC4xKSIsCiAgICAgICJDbGFzcyI6ICJvcy1wa2dzIiwKICAgICAgIlR5cGUiOiAiYWxwaW5lIiwKICAgICAgIlBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJJRCI6ICIucHl0aG9uLXJ1bmRlcHNAMjAyNjA5MDEuMDAxMDI5IiwKICAgICAgICAgICJOYW1lIjogIi5weXRob24tcnVuZGVwcyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvLnB5dGhvbi1ydW5kZXBzQDIwMjYwOTAxLjAwMTAyOT9hcmNoPW5vYXJjaFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjRlMjZjOTlmZWNhYzFlOTciCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMjAyNjA5MDEuMDAxMDI5IiwKICAgICAgICAgICJBcmNoIjogIm5vYXJjaCIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiZ2RibUAxLjI2LXIwIiwKICAgICAgICAgICAgImxpYmJ6MkAxLjAuOC1yNiIsCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYmZmaUAzLjUuMi1yMSIsCiAgICAgICAgICAgICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICAgImxpYm5zbEAyLjAuMS1yMiIsCiAgICAgICAgICAgICJsaWJwYW5lbHdANi42X3AyMDI2MDUxNi1yMCIsCiAgICAgICAgICAgICJsaWJzc2wzQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnRpcnBjQDEuMy41LXIxIiwKICAgICAgICAgICAgImxpYnV1aWRAMi40Mi4zLXIxIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiLAogICAgICAgICAgICAicmVhZGxpbmVAOC4zLjMtcjEiLAogICAgICAgICAgICAic3FsaXRlLWxpYnNAMy41My40LXIwIiwKICAgICAgICAgICAgInh6LWxpYnNANS44LjMtcjAiLAogICAgICAgICAgICAiemxpYkAxLjMuMi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo1MWQwYzFlN2Q4OGE0MTQzNDU3OTlmMDMwOTE4NWM2MjUwMTNlZjMyIiwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJhbHBpbmUtYmFzZWxheW91dEAzLjcuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLWJhc2VsYXlvdXRAMy43LjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIxYjljNTQzMzAwZjgwNzNlIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuNy4yLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjcuMi1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImFscGluZS1iYXNlbGF5b3V0LWRhdGFAMy43LjItcjEiLAogICAgICAgICAgICAiYnVzeWJveC1iaW5zaEAxLjM3LjAtcjMxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmYwZmNmZGMyZjRkYTA1OGFmNjQ3M2JjNDVjNGVhYjYyOTE2MjI1YjIiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL21vdGQiLAogICAgICAgICAgICAiZXRjL2Nyb250YWJzL3Jvb3QiLAogICAgICAgICAgICAiZXRjL21vZHByb2JlLmQvYWxpYXNlcy5jb25mIiwKICAgICAgICAgICAgImV0Yy9tb2Rwcm9iZS5kL2JsYWNrbGlzdC5jb25mIiwKICAgICAgICAgICAgImV0Yy9tb2Rwcm9iZS5kL2kzODYuY29uZiIsCiAgICAgICAgICAgICJldGMvcHJvZmlsZS5kLzIwbG9jYWxlLnNoIiwKICAgICAgICAgICAgImV0Yy9wcm9maWxlLmQvUkVBRE1FIiwKICAgICAgICAgICAgImV0Yy9wcm9maWxlLmQvY29sb3JfcHJvbXB0LnNoLmRpc2FibGVkIiwKICAgICAgICAgICAgInVzci9saWIvc3lzY3RsLmQvMDAtYWxwaW5lLmNvbmYiLAogICAgICAgICAgICAidmFyL2xvY2siLAogICAgICAgICAgICAidmFyL3J1biIsCiAgICAgICAgICAgICJ2YXIvc3Bvb2wvbWFpbCIsCiAgICAgICAgICAgICJ2YXIvc3Bvb2wvY3Jvbi9jcm9udGFicyIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYWxwaW5lLWJhc2VsYXlvdXQtZGF0YUAzLjcuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtYmFzZWxheW91dC1kYXRhIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUtYmFzZWxheW91dC1kYXRhQDMuNy4yLXIxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZmNjM2NkOTAxMjJkOGFhNyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjcuMi1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYWxwaW5lLWJhc2VsYXlvdXQiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy43LjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmM2ZjliZGVkMTdkODQ0YjZmMWIwYmI1NzY2ZDJjMzVjMGQ1Yzg1MDgiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL2ZzdGFiIiwKICAgICAgICAgICAgImV0Yy9ncm91cCIsCiAgICAgICAgICAgICJldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAiZXRjL2hvc3RzIiwKICAgICAgICAgICAgImV0Yy9pbml0dGFiIiwKICAgICAgICAgICAgImV0Yy9tb2R1bGVzIiwKICAgICAgICAgICAgImV0Yy9tdGFiIiwKICAgICAgICAgICAgImV0Yy9uc3N3aXRjaC5jb25mIiwKICAgICAgICAgICAgImV0Yy9wYXNzd2QiLAogICAgICAgICAgICAiZXRjL3Byb2ZpbGUiLAogICAgICAgICAgICAiZXRjL3Byb3RvY29scyIsCiAgICAgICAgICAgICJldGMvc2VydmljZXMiLAogICAgICAgICAgICAiZXRjL3NoYWRvdyIsCiAgICAgICAgICAgICJldGMvc2hlbGxzIiwKICAgICAgICAgICAgImV0Yy9zeXNjdGwuY29uZiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYWxwaW5lLWtleXNAMi42LXIwIiwKICAgICAgICAgICJOYW1lIjogImFscGluZS1rZXlzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9hbHBpbmUta2V5c0AyLjYtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJjYjFmNmM4ZmE3NDcxM2UwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjIuNi1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYWxwaW5lLWtleXMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMi42LXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpkOGQ2YjgwZTUzYzA1OWE3N2U0OTE1ZGE3OGJhOTY0ZjNmZmVhMjQwIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAiZXRjL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI2MWNlY2IucnNhLnB1YiIsCiAgICAgICAgICAgICJldGMvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTY1ZWU1OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI0M2VmNGIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01MjRkMjdiYi5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNjFjZWNiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTgxOTlkY2MucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01OGNiYjQ3Ni5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTU4ZTRmMTdkLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNWU2OWNhNTAucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MGFjMjA5OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjVlZTU5LnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2NjZlM2YucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhOTcyNC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFiYzIzLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2YWMzYmMucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhZGZlYi5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFlMzUwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2ZGIzMGQucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02NmJhMjBmZS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hYXJjaDY0L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTgxOTlkY2MucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYWFyY2g2NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFlMzUwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FybWhmL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNTI0ZDI3YmIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvYXJtaGYvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MTZhOTcyNC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9hcm12Ny9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNGQyN2JiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL2FybXY3L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2YWRmZWIucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvbG9vbmdhcmNoNjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02NmJhMjBmZS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9taXBzNjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01ZTY5Y2E1MC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9wcGM2NGxlL2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNThjYmI0NzYucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvcHBjNjRsZS9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFiYzIzLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3Jpc2N2NjQvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy02MGFjMjA5OS5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9yaXNjdjY0L2FscGluZS1kZXZlbEBsaXN0cy5hbHBpbmVsaW51eC5vcmctNjE2ZGIzMGQucnNhLnB1YiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvYXBrL2tleXMvczM5MHgvYWxwaW5lLWRldmVsQGxpc3RzLmFscGluZWxpbnV4Lm9yZy01OGU0ZjE3ZC5yc2EucHViIiwKICAgICAgICAgICAgInVzci9zaGFyZS9hcGsva2V5cy9zMzkweC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNmFjM2JjLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNDNlZjRiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Ni9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjY2ZTNmLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTRhNmEwODQwLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTUyNjFjZWNiLnJzYS5wdWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL2Fway9rZXlzL3g4Nl82NC9hbHBpbmUtZGV2ZWxAbGlzdHMuYWxwaW5lbGludXgub3JnLTYxNjVlZTU5LnJzYS5wdWIiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImFscGluZS1yZWxlYXNlQDMuMjQuMS1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJhbHBpbmUtcmVsZWFzZSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYWxwaW5lLXJlbGVhc2VAMy4yNC4xLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNmNmYWQ2ZjM2ZTFmMzFhYSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjI0LjEtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImFscGluZS1iYXNlIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjMuMjQuMS1yMCIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImFscGluZS1rZXlzQDIuNi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpiYzY5MTJhMjVjZGM3NzMzZTAwMzVlZDUwOWVjZWFhNDAyNjk0NmUzIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy9hbHBpbmUtcmVsZWFzZSIsCiAgICAgICAgICAgICJldGMvaXNzdWUiLAogICAgICAgICAgICAiZXRjL29zLXJlbGVhc2UiLAogICAgICAgICAgICAiZXRjL3NlY2ZpeGVzLmQvYWxwaW5lIiwKICAgICAgICAgICAgInVzci9saWIvb3MtcmVsZWFzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYXBrLXRvb2xzQDMuMC42LXIwIiwKICAgICAgICAgICJOYW1lIjogImFway10b29scyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYXBrLXRvb2xzQDMuMC42LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiY2IyNjMzYzg4M2IxN2EwNCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjAuNi1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYXBrLXRvb2xzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjMuMC42LXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkdQTC0yLjAtb25seSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiY2EtY2VydGlmaWNhdGVzLWJ1bmRsZUAyMDI2MDYxMS1yMCIsCiAgICAgICAgICAgICJsaWJhcGtAMy4wLjYtcjAiLAogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIiwKICAgICAgICAgICAgInpsaWJAMS4zLjItcjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MDQzMzMzNTg5Nzk4YTFmNTJlMDlhZTYzZjAyNmM2YzhmYTY3NmQzNCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJzYmluL2FwayIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiYnVzeWJveEAxLjM3LjAtcjMxIiwKICAgICAgICAgICJOYW1lIjogImJ1c3lib3giLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2J1c3lib3hAMS4zNy4wLXIzMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjc3MTAyMGM0M2M4NDQwYmYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zNy4wLXIzMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiYnVzeWJveCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjM3LjAtcjMxIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkdQTC0yLjAtb25seSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJTw7ZyZW4gVGVtcGVsIFx1MDAzY3NvZXJlbithbHBpbmVAc29lcmVuLXRlbXBlbC5uZXRcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6YjU0MDVlYmMwMmY3ZGQ4YmU5NWI2MjY1YzU0YjI0M2Q1NDU2YWI4ZiIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJiaW4vYnVzeWJveCIsCiAgICAgICAgICAgICJldGMvc2VjdXJldHR5IiwKICAgICAgICAgICAgImV0Yy9idXN5Ym94LXBhdGhzLmQvYnVzeWJveCIsCiAgICAgICAgICAgICJldGMvbG9ncm90YXRlLmQvYWNwaWQiLAogICAgICAgICAgICAiZXRjL25ldHdvcmsvaWYtdXAuZC9kYWQiLAogICAgICAgICAgICAiZXRjL3VkaGNwYy91ZGhjcGMuY29uZiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvdWRoY3BjL2RlZmF1bHQuc2NyaXB0IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJidXN5Ym94LWJpbnNoQDEuMzcuMC1yMzEiLAogICAgICAgICAgIk5hbWUiOiAiYnVzeWJveC1iaW5zaCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvYnVzeWJveC1iaW5zaEAxLjM3LjAtcjMxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWVjOGEzZDVkMmI2MzI5NyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjM3LjAtcjMxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJidXN5Ym94IiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMzcuMC1yMzEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIlPDtnJlbiBUZW1wZWwgXHUwMDNjc29lcmVuK2FscGluZUBzb2VyZW4tdGVtcGVsLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAiYnVzeWJveEAxLjM3LjAtcjMxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjVjYmQxNGFjYzZmMTgwNGM1YmFjNmM3N2RjMmM0OTJmMDEwYjBmYzciLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiYmluL3NoIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJjYS1jZXJ0aWZpY2F0ZXNAMjAyNjA2MTEtcjAiLAogICAgICAgICAgIk5hbWUiOiAiY2EtY2VydGlmaWNhdGVzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9jYS1jZXJ0aWZpY2F0ZXNAMjAyNjA2MTEtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIyYTNjMzE2ZWU4M2M2MTk4IgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjIwMjYwNjExLXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJjYS1jZXJ0aWZpY2F0ZXMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMjAyNjA2MTEtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTVBMLTIuMCIsCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgImJ1c3lib3gtYmluc2hAMS4zNy4wLXIzMSIsCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo0NzM5M2I2NjhjZTUzNWQwNmU4OTY3OTE3ZDQyNGMxNzdlMmVjY2NhZTgzODU2ZDQ4YjJlOTkxNjRmOGNjNmNiIiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OGYyYTA0YWJlYjU0YjMzMWUyOTcwYTBhMGRmZmI3YmQ2YmRkZTU2NyIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvY2EtY2VydGlmaWNhdGVzLmNvbmYiLAogICAgICAgICAgICAiZXRjL2Fway9wcm90ZWN0ZWRfcGF0aHMuZC9jYS1jZXJ0aWZpY2F0ZXMubGlzdCIsCiAgICAgICAgICAgICJldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kL2NlcnRoYXNoIiwKICAgICAgICAgICAgInVzci9iaW4vY19yZWhhc2giLAogICAgICAgICAgICAidXNyL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQUNDVlJBSVoxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQUNfUkFJWl9GTk1ULVJDTS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FDX1JBSVpfRk5NVC1SQ01fU0VSVklET1JFU19TRUdVUk9TLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQU5GX1NlY3VyZV9TZXJ2ZXJfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FjdGFsaXNfQXV0aGVudGljYXRpb25fUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FtYXpvbl9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BbWF6b25fUm9vdF9DQV8yLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQW1hem9uX1Jvb3RfQ0FfMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0FtYXpvbl9Sb290X0NBXzQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BdG9zX1RydXN0ZWRSb290XzIwMTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9BdG9zX1RydXN0ZWRSb290X1Jvb3RfQ0FfRUNDX1RMU18yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQXRvc19UcnVzdGVkUm9vdF9Sb290X0NBX1JTQV9UTFNfMjAyMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0F1dG9yaWRhZF9kZV9DZXJ0aWZpY2FjaW9uX0Zpcm1hcHJvZmVzaW9uYWxfQ0lGX0E2MjYzNDA2OC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0JKQ0FfR2xvYmFsX1Jvb3RfQ0ExLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQkpDQV9HbG9iYWxfUm9vdF9DQTIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9CdXlwYXNzX0NsYXNzXzJfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0J1eXBhc3NfQ2xhc3NfM19Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ0FfRGlzaWdfUm9vdF9SMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NGQ0FfRVZfUk9PVC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NPTU9ET19FQ0NfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHkuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DT01PRE9fUlNBX0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ2VydGFpbmx5X1Jvb3RfRTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DZXJ0YWlubHlfUm9vdF9SMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnRpZ25hX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9DZXJ0dW1fRUMtMzg0X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvQ2VydHVtX1RydXN0ZWRfTmV0d29ya19DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnR1bV9UcnVzdGVkX05ldHdvcmtfQ0FfMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0NlcnR1bV9UcnVzdGVkX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ELVRSVVNUX0JSX1Jvb3RfQ0FfMV8yMDIwLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9CUl9Sb290X0NBXzJfMjAyMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0QtVFJVU1RfRVZfUm9vdF9DQV8xXzIwMjAuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ELVRSVVNUX0VWX1Jvb3RfQ0FfMl8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9Sb290X0NsYXNzXzNfQ0FfMl8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRC1UUlVTVF9Sb290X0NsYXNzXzNfQ0FfMl9FVl8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfQXNzdXJlZF9JRF9Sb290X0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfQXNzdXJlZF9JRF9Sb290X0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfR2xvYmFsX1Jvb3RfRzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9EaWdpQ2VydF9HbG9iYWxfUm9vdF9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0RpZ2lDZXJ0X1RMU19FQ0NfUDM4NF9Sb290X0c1LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvRGlnaUNlcnRfVExTX1JTQTQwOTZfUm9vdF9HNS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0RpZ2lDZXJ0X1RydXN0ZWRfUm9vdF9HNC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dEQ0FfVHJ1c3RBVVRIX1I1X1JPT1QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HVFNfUm9vdF9SMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dUU19Sb290X1IzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvR1RTX1Jvb3RfUjQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX0VDQ19Sb290X0NBXy1fUjQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX0VDQ19Sb290X0NBXy1fUjUuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9HbG9iYWxTaWduX1Jvb3RfQ0FfLV9SMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dsb2JhbFNpZ25fUm9vdF9DQV8tX1I2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvR2xvYmFsU2lnbl9Sb290X0U0Ni5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL0dsb2JhbFNpZ25fUm9vdF9SNDYuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9Hb19EYWRkeV9Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8tX0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSEFSSUNBX1RMU19FQ0NfUm9vdF9DQV8yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSEFSSUNBX1RMU19SU0FfUm9vdF9DQV8yMDIxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSGVsbGVuaWNfQWNhZGVtaWNfYW5kX1Jlc2VhcmNoX0luc3RpdHV0aW9uc19FQ0NfUm9vdENBXzIwMTUuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9IZWxsZW5pY19BY2FkZW1pY19hbmRfUmVzZWFyY2hfSW5zdGl0dXRpb25zX1Jvb3RDQV8yMDE1LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSGlQS0lfUm9vdF9DQV8tX0cxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvSG9uZ2tvbmdfUG9zdF9Sb290X0NBXzMuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JU1JHX1Jvb3RfWDEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JU1JHX1Jvb3RfWDIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JZGVuVHJ1c3RfQ29tbWVyY2lhbF9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JZGVuVHJ1c3RfUHVibGljX1NlY3Rvcl9Sb290X0NBXzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9JemVucGUuY29tLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zZWNfZS1Temlnbm9fUm9vdF9DQV8yMDA5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zb2Z0X0VDQ19Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8yMDE3LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTWljcm9zb2Z0X1JTQV9Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8yMDE3LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvTkFWRVJfR2xvYmFsX1Jvb3RfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHkuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9OZXRMb2NrX0FyYW55Xz1DbGFzc19Hb2xkPV9GxZF0YW7DunPDrXR2w6FueS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1NlcnZlcl9Sb290X0VDQ19HMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1NlcnZlcl9Sb290X1JTQV9HMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL09JU1RFX1dJU2VLZXlfR2xvYmFsX1Jvb3RfR0JfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9PSVNURV9XSVNlS2V5X0dsb2JhbF9Sb290X0dDX0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8xX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8yX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvUXVvVmFkaXNfUm9vdF9DQV8zX0czLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1NMLmNvbV9FVl9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5X0VDQy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NTTC5jb21fRVZfUm9vdF9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eV9SU0FfUjIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TU0wuY29tX1Jvb3RfQ2VydGlmaWNhdGlvbl9BdXRob3JpdHlfRUNDLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1NMLmNvbV9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5X1JTQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NTTC5jb21fVExTX0VDQ19Sb290X0NBXzIwMjIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TU0wuY29tX1RMU19SU0FfUm9vdF9DQV8yMDIyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU1pBRklSX1JPT1RfQ0EyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdGlnb19QdWJsaWNfU2VydmVyX0F1dGhlbnRpY2F0aW9uX1Jvb3RfRTQ2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdGlnb19QdWJsaWNfU2VydmVyX0F1dGhlbnRpY2F0aW9uX1Jvb3RfUjQ2LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU2VjdXJlU2lnbl9Sb290X0NBMTQuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TZWN1cmVTaWduX1Jvb3RfQ0ExNS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1NlY3VyaXR5X0NvbW11bmljYXRpb25fRUNDX1Jvb3RDQTEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TZWN1cml0eV9Db21tdW5pY2F0aW9uX1Jvb3RDQTIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9TdGFyZmllbGRfUm9vdF9DZXJ0aWZpY2F0ZV9BdXRob3JpdHlfLV9HMi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1N0YXJmaWVsZF9TZXJ2aWNlc19Sb290X0NlcnRpZmljYXRlX0F1dGhvcml0eV8tX0cyLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvU3dpc3NTaWduX1JTQV9UTFNfUm9vdF9DQV8yMDIyXy1fMS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1QtVGVsZVNlY19HbG9iYWxSb290X0NsYXNzXzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9ULVRlbGVTZWNfR2xvYmFsUm9vdF9DbGFzc18zLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFVCSVRBS19LYW11X1NNX1NTTF9Lb2tfU2VydGlmaWthc2lfLV9TdXJ1bV8xLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFdDQV9DWUJFUl9Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVFdDQV9HbG9iYWxfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RXQ0FfUm9vdF9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RlbGVrb21fU2VjdXJpdHlfVExTX0VDQ19Sb290XzIwMjAuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9UZWxla29tX1NlY3VyaXR5X1RMU19SU0FfUm9vdF8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVGVsaWFfUm9vdF9DQV92Mi5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9HbG9iYWxfUm9vdF9DQV9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9HbG9iYWxfUm9vdF9DQV9HNC5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1RydXN0QXNpYV9UTFNfRUNDX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9UcnVzdEFzaWFfVExTX1JTQV9Sb290X0NBLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVHVuVHJ1c3RfUm9vdF9DQS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL1VDQV9FeHRlbmRlZF9WYWxpZGF0aW9uX1Jvb3QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9VQ0FfR2xvYmFsX0cyX1Jvb3QuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9VU0VSVHJ1c3RfRUNDX0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvVVNFUlRydXN0X1JTQV9DZXJ0aWZpY2F0aW9uX0F1dGhvcml0eS5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL2NlcnRTSUdOX1Jvb3RfQ0FfRzIuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lLVN6aWdub19Sb290X0NBXzIwMTcuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lLVN6aWdub19UTFNfUm9vdF9DQV8yMDIzLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvZVBLSV9Sb290X0NlcnRpZmljYXRpb25fQXV0aG9yaXR5LmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvZW1TaWduX0VDQ19Sb290X0NBXy1fQzMuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lbVNpZ25fRUNDX1Jvb3RfQ0FfLV9HMy5jcnQiLAogICAgICAgICAgICAidXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcy9tb3ppbGxhL2VtU2lnbl9Sb290X0NBXy1fQzEuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS9lbVNpZ25fUm9vdF9DQV8tX0cxLmNydCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzL21vemlsbGEvdlRydXNfRUNDX1Jvb3RfQ0EuY3J0IiwKICAgICAgICAgICAgInVzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvbW96aWxsYS92VHJ1c19Sb290X0NBLmNydCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAiY2EtY2VydGlmaWNhdGVzLWJ1bmRsZUAyMDI2MDYxMS1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJjYS1jZXJ0aWZpY2F0ZXMtYnVuZGxlIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9jYS1jZXJ0aWZpY2F0ZXMtYnVuZGxlQDIwMjYwNjExLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMjAzMzdjMmVhMjhiZWYyOCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyMDI2MDYxMS1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiY2EtY2VydGlmaWNhdGVzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIwMjYwNjExLXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1QTC0yLjAiLAogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOmM5NTM0YTAzNzUwYmRmYWUzNDFmMTA5NjkwMTYwOTBmYzExZmViYmQiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL3NzbC9jZXJ0LnBlbSIsCiAgICAgICAgICAgICJldGMvc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiLAogICAgICAgICAgICAiZXRjL3NzbDEuMS9jZXJ0LnBlbSIsCiAgICAgICAgICAgICJldGMvc3NsMS4xL2NlcnRzIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJnZGJtQDEuMjYtcjAiLAogICAgICAgICAgIk5hbWUiOiAiZ2RibSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvZ2RibUAxLjI2LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNWViMWEzZjg2MjYyY2E3NyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjI2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJnZGJtIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMjYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTMuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo2MTk0OTNkODEyNGZlNDlhOGVlMWQ4ZjdhMTM3MmNmN2UzOTc3MzM3IiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliZ2RibS5zby42IiwKICAgICAgICAgICAgInVzci9saWIvbGliZ2RibS5zby42LjAuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdkYm1fY29tcGF0LnNvLjQiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnZGJtX2NvbXBhdC5zby40LjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAia2V5dXRpbHMtbGlic0AxLjYuMy1yNCIsCiAgICAgICAgICAiTmFtZSI6ICJrZXl1dGlscy1saWJzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9rZXl1dGlscy1saWJzQDEuNi4zLXI0P2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiYTFhMjkxMjBlYjM0MjAzMiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjYuMy1yNCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAia2V5dXRpbHMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS42LjMtcjQiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJMR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpiNzMzMWM5NmYwNzdmYzM1MjJlZTQzNjFhNDQxZDEwOTcyMDRjZDkwIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlia2V5dXRpbHMuc28uMSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtleXV0aWxzLnNvLjEuMTAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImtyYjUtY29uZkAxLjAtcjIiLAogICAgICAgICAgIk5hbWUiOiAia3JiNS1jb25mIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9rcmI1LWNvbmZAMS4wLXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZTdjZjk0YmE4YjZkYmMzMyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjAtcjIiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImtyYjUtY29uZiIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjAtcjIiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjQwYTExZTA2OTBhNTllMTEwMzY3YjYyYTgwNjYxMDI0ZTk5NDJhMmQiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL2tyYjUuY29uZiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAia3JiNS1saWJzQDEuMjIuMi1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJrcmI1LWxpYnMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2tyYjUtbGlic0AxLjIyLjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICI5NThmOGI0YTRmMDg3ZGFjIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMjIuMi1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAia3JiNSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjIyLjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJrZXl1dGlscy1saWJzQDEuNi4zLXI0IiwKICAgICAgICAgICAgImtyYjUtY29uZkAxLjAtcjIiLAogICAgICAgICAgICAibGliY29tX2VyckAxLjQ3LjQtcjAiLAogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJsaWJzc2wzQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnZlcnRvQDAuMy4yLXIyIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6ZWYwMjM0NmUyMWI4MTdmZjM3OWU0NjAxZTViMWZjOTc2MGU1ZTMxYSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdzc2FwaV9rcmI1LnNvLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnc3NhcGlfa3JiNS5zby4yLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJnc3NycGMuc28uNCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmdzc3JwYy5zby40LjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJrNWNyeXB0by5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvbGliazVjcnlwdG8uc28uMy4xIiwKICAgICAgICAgICAgInVzci9saWIvbGlia2FkbTVjbG50X21pdC5zby4xMiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01Y2xudF9taXQuc28uMTIuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01c3J2X21pdC5zby4xMiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmthZG01c3J2X21pdC5zby4xMi4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia2RiNS5zby4xMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtkYjUuc28uMTAuMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtyYWQuc28uMCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmtyYWQuc28uMC4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNS5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNS5zby4zLjMiLAogICAgICAgICAgICAidXNyL2xpYi9saWJrcmI1c3VwcG9ydC5zby4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlia3JiNXN1cHBvcnQuc28uMC4xIiwKICAgICAgICAgICAgInVzci9saWIva3JiNS9wbHVnaW5zL2tkYi9kYjIuc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvcHJlYXV0aC9vdHAuc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvcHJlYXV0aC9zcGFrZS5zbyIsCiAgICAgICAgICAgICJ1c3IvbGliL2tyYjUvcGx1Z2lucy9wcmVhdXRoL3Rlc3Quc28iLAogICAgICAgICAgICAidXNyL2xpYi9rcmI1L3BsdWdpbnMvdGxzL2s1dGxzLnNvIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJhcGtAMy4wLjYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGliYXBrIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJhcGtAMy4wLjYtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJhMzViOGI5YjMyMTk1MTNhIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuMC42LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJhcGstdG9vbHMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy4wLjYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vbmx5IgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJ6bGliQDEuMy4yLXIwIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjUyM2E4ZjU4MTA0NTg5Zjc0Zjc0M2Q1MDFjODFiZjY1MTcxNTUzNzgiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJhcGsuc28uMy4wLjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYmJ6MkAxLjAuOC1yNiIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJiejIiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYmJ6MkAxLjAuOC1yNj9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjQ4ZTE3NTM5NDA0ZTJkNTYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4wLjgtcjYiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImJ6aXAyIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMC44LXI2IiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgImJ6aXAtMi0xLjAuNiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTowODU2NmJhNWM3YWY5N2MyNTQ3NGJlOGIyNGU4YjQ4ZjAxMTZiNjdkIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliYnoyLnNvLjEiLAogICAgICAgICAgICAidXNyL2xpYi9saWJiejIuc28uMS4wLjgiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYmNvbV9lcnJAMS40Ny40LXIwIiwKICAgICAgICAgICJOYW1lIjogImxpYmNvbV9lcnIiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYmNvbV9lcnJAMS40Ny40LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiM2ZjMzVhM2Y2NmQxOTJhZiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjQ3LjQtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImUyZnNwcm9ncyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjQ3LjQtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJMR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiLAogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjRiOWZiNTg5OWVhMGIxYzBjZmJiMmEyYzU5NTI3MDQ0MzdkNGVjZWYiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJjb21fZXJyLnNvLjIiLAogICAgICAgICAgICAidXNyL2xpYi9saWJjb21fZXJyLnNvLjIuMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJjcnlwdG8zIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJjcnlwdG8zQDMuNS44LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNDI5OWJiYTJiYTljOTZhYSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjUuOC1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAib3BlbnNzbCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjUuOC1yMCIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJBcGFjaGUtMi4wIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjFiM2I5ZmMwYzEzNmY0OTM2OTMyYmNiMmVjMjE0OTlmMGFlNWRmZDMiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAiZXRjL3NzbC9jdF9sb2dfbGlzdC5jbmYiLAogICAgICAgICAgICAiZXRjL3NzbC9jdF9sb2dfbGlzdC5jbmYuZGlzdCIsCiAgICAgICAgICAgICJldGMvc3NsL29wZW5zc2wuY25mIiwKICAgICAgICAgICAgImV0Yy9zc2wvb3BlbnNzbC5jbmYuZGlzdCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmNyeXB0by5zby4zIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL2FmYWxnLnNvIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL2NhcGkuc28iLAogICAgICAgICAgICAidXNyL2xpYi9lbmdpbmVzLTMvbG9hZGVyX2F0dGljLnNvIiwKICAgICAgICAgICAgInVzci9saWIvZW5naW5lcy0zL3BhZGxvY2suc28iLAogICAgICAgICAgICAidXNyL2xpYi9vc3NsLW1vZHVsZXMvbGVnYWN5LnNvIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJmZmlAMy41LjItcjEiLAogICAgICAgICAgIk5hbWUiOiAibGliZmZpIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJmZmlAMy41LjItcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkM2VhYTkyMTI4N2IxY2NkIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuNS4yLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJsaWJmZmkiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy41LjItcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjJmN2IyNjFmN2ZjZWNjNGVlYmQ4YjMzMGU3ZjZmYjgwNzEzYmZlM2EiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJmZmkuc28uOCIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmZmaS5zby44LjIuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGliaW50bEAxLjAtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGliaW50bCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGliaW50bEAxLjAtcjA/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIyNWMxODgwOGQ4ZmM4N2UwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMC1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAiZ2V0dGV4dCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjAtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTEdQTC0yLjEtb3ItbGF0ZXIiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiQ2FybG8gTGFuZG1ldGVyIFx1MDAzY2NsYW5kbWV0ZXJAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjI4MmQ2NjQyY2NhYzg3MjM3ZTQzYTg2NDE1OWQ3M2NmNWFiZTc1NTAiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJpbnRsLnNvLjgiLAogICAgICAgICAgICAidXNyL2xpYi9saWJpbnRsLnNvLjguNC42IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJOYW1lIjogImxpYm5jdXJzZXN3IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiZTg5MzlmNDVlMjE5MWJjYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJuY3Vyc2VzLXRlcm1pbmZvLWJhc2VANi42X3AyMDI2MDUxNi1yMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo5ZjMxOGU2ZTMyNGQ2ODI3Mjc0ODI5MTk0Y2Y2YWM2YWZiYWRlZDEyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlibmN1cnNlc3cuc28uNiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYm5jdXJzZXN3LnNvLjYuNiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlibnNsQDIuMC4xLXIyIiwKICAgICAgICAgICJOYW1lIjogImxpYm5zbCIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGlibnNsQDIuMC4xLXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiM2Q4OTNjNjBkNDFkYTY3YiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyLjAuMS1yMiIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibGlibnNsIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIuMC4xLXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIkxHUEwtMi4wLW9yLWxhdGVyIgogICAgICAgICAgXSwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJpbnRsQDEuMC1yMCIsCiAgICAgICAgICAgICJsaWJ0aXJwY0AxLjMuNS1yMSIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjUxOTRhZGJmMjY1NjBiNTJiZTMxODQ4MWE3YWYyOTRhYjA1ZmQ3OTUiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJuc2wuc28uMyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYm5zbC5zby4zLjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlicGFuZWx3QDYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGlicGFuZWx3IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJwYW5lbHdANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImVmMWFkOWJiMjU2YjM3MyIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibGlibmN1cnNlc3dANi42X3AyMDI2MDUxNi1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIiwKICAgICAgICAgICAgIm5jdXJzZXMtdGVybWluZm8tYmFzZUA2LjZfcDIwMjYwNTE2LXIwIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjE0OWJkYzQzNDIzMmVkMTFmYzViYjk3NWJhNTE5YTA3MTU0YTZmNTYiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJwYW5lbHcuc28uNiIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnBhbmVsdy5zby42LjYiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgIk5hbWUiOiAibGlic3NsMyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvbGlic3NsM0AzLjUuOC1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImYyOTBhYjU5Yjg4YjFjNGEiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMy41LjgtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogIm9wZW5zc2wiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMy41LjgtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQXBhY2hlLTIuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibGliY3J5cHRvM0AzLjUuOC1yMCIsCiAgICAgICAgICAgICJtdXNsQDEuMi42LXIyIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6MjAxNGZkM2Q0N2IyYzJkZDRkZWRjNzY1ODIyYWM2MGFlMjY5ZjNlZmEwZTYxNGY0NmFlMjlmNTQwYzdmMTIzNSIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OmU1Y2NkYTBmYmY2YjU0ZDM0M2UwMjQxNTZkODc2NTUzYmE1N2QzOTI2ZDcxOTY1ODRiM2ExY2U0ZGYwMTYzNjYiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjVmOWIxZTU1ZDgyMTk1M2QyZTJiMWRiMzIyZGFkNzBhM2I1MDQxZWEiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAidXNyL2xpYi9saWJzc2wuc28uMyIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibGlidGlycGNAMS4zLjUtcjEiLAogICAgICAgICAgIk5hbWUiOiAibGlidGlycGMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjQDEuMy41LXIxP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNDcxYzhkOTU1Y2EwM2JlNSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjMuNS1yMSIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibGlidGlycGMiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zLjUtcjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogIk5hdGFuYWVsIENvcGEgXHUwMDNjbmNvcGFAYWxwaW5lbGludXgub3JnXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJrcmI1LWxpYnNAMS4yMi4yLXIxIiwKICAgICAgICAgICAgImxpYnRpcnBjLWNvbmZAMS4zLjUtcjEiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpjMzI4NjViZDg2YThiODgyOWQxNTIyNzljYWJiYzVhYzZkNDMwZWIyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlidGlycGMuc28uMyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnRpcnBjLnNvLjMuMC4wIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJ0aXJwYy1jb25mQDEuMy41LXIxIiwKICAgICAgICAgICJOYW1lIjogImxpYnRpcnBjLWNvbmYiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL2xpYnRpcnBjLWNvbmZAMS4zLjUtcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICIzNDM3MzkyYzE0YWFkMzNmIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMy41LXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJsaWJ0aXJwYyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjMuNS1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MGMxN2Q5OTg4ZGM5ODZjOTBlMjJmNzk3NzhkZjA0N2VjYTk5NzNmZiIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvYmluZHJlc3Zwb3J0LmJsYWNrbGlzdCIsCiAgICAgICAgICAgICJldGMvbmV0Y29uZmlnIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJsaWJ1dWlkQDIuNDIuMy1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJsaWJ1dWlkIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJ1dWlkQDIuNDIuMy1yMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImM0NDRlOWNkZDFiZGRhNDAiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi40Mi4zLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJ1dGlsLWxpbnV4IiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIuNDIuMy1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjpmMGZlM2UwOGFiMDQ2YzBjNWUyOWQzNGVlNzNiYzhjN2UwMzM5OGViODkxZTQ0OThlMGE2NzA4OGE1ZWEzZTg2IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZjliNGE4YTQxMmEwYzA3YTQ4OWU0NmZiNWRiNDFmOWQwZGM4NGQ0ZWMzOGE0ZTJjNmFiOTUzMWY0NGUwZDlmMSIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OGYwNDFlZjYzN2FkNzVmMzgxY2MwYzAzNGYyYWZiYmIwMzAzMjY0ZSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnV1aWQuc28uMSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnV1aWQuc28uMS4zLjAiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogImxpYnZlcnRvQDAuMy4yLXIyIiwKICAgICAgICAgICJOYW1lIjogImxpYnZlcnRvIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9saWJ2ZXJ0b0AwLjMuMi1yMj9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjlkZjQzMjFhMjgzYTZjZjYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMC4zLjItcjIiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImxpYnZlcnRvIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjAuMy4yLXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJGcmFuY2VzY28gQ29saXN0YSBcdTAwM2NmY29saXN0YUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NzMyMzMwNTkzMzgxNDJlNGFjNmQ4ZmI4YmIwMDc0ZTkzZGE3NWRjMSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnZlcnRvLnNvLjEiLAogICAgICAgICAgICAidXNyL2xpYi9saWJ2ZXJ0by5zby4xLjAuMCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAiTmFtZSI6ICJtdXNsIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9tdXNsQDEuMi42LXIyP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWY4Y2I0NGJlZmU1MDNkNCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIxLjIuNi1yMiIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAibXVzbCIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjIuNi1yMiIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MGY3ZTU4MjdlNGUxYTczNjMxYmVkYTI3Yjc4NDMxYThiYTI0MGUwNSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJsaWIvbGQtbXVzbC14ODZfNjQuc28uMSIsCiAgICAgICAgICAgICJsaWIvbGliYy5tdXNsLXg4Nl82NC5zby4xIgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJtdXNsLXV0aWxzQDEuMi42LXIyIiwKICAgICAgICAgICJOYW1lIjogIm11c2wtdXRpbHMiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzphcGsvYWxwaW5lL211c2wtdXRpbHNAMS4yLjYtcjI/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICI0NDk3NDgyZWMxZDk0M2UxIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMi42LXIyIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJtdXNsIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjEuMi42LXIyIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIsCiAgICAgICAgICAgICJCU0QtMi1DbGF1c2UiLAogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIsCiAgICAgICAgICAgICJzY2FuZWxmQDEuMy45LXIxIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIkRpZ2VzdCI6ICJzaGExOjc1YWRhM2M0OGQ2M2VjNWQ4N2M0MmZkZjkzNGEzZmRkMTEyOThkYzUiLAogICAgICAgICAgIkluc3RhbGxlZEZpbGVzIjogWwogICAgICAgICAgICAic2Jpbi9sZGNvbmZpZyIsCiAgICAgICAgICAgICJ1c3IvYmluL2dldGNvbmYiLAogICAgICAgICAgICAidXNyL2Jpbi9nZXRlbnQiLAogICAgICAgICAgICAidXNyL2Jpbi9pY29udiIsCiAgICAgICAgICAgICJ1c3IvYmluL2xkZCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAibmN1cnNlcy10ZXJtaW5mby1iYXNlQDYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIk5hbWUiOiAibmN1cnNlcy10ZXJtaW5mby1iYXNlIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9uY3Vyc2VzLXRlcm1pbmZvLWJhc2VANi42X3AyMDI2MDUxNi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImU3ZmFjNWM2YTZlOWFlOCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJuY3Vyc2VzIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjYuNl9wMjAyNjA1MTYtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWC0xMSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJNaWxhbiBQLiBTdGFuacSHIFx1MDAzY21wc0BhcnZhbnRhLm5ldFx1MDAzZSIsCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTo5ZDU1MWQ4MjhlOWM4ZWU1MmM1ODAxYzFkNjA0NjgyOGViZjE1NzUyIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9hL2FsYWNyaXR0eSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vYS9hbnNpIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9kL2R1bWIiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2cvZ25vbWUiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2cvZ25vbWUtMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2sva29uc29sZSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vay9rb25zb2xlLTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9rL2tvbnNvbGUtbGludXgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL2wvbGludXgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3AvcHV0dHkiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3AvcHV0dHktMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Ivcnh2dCIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vci9yeHZ0LTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9zL3NjcmVlbiIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zY3JlZW4tMjU2Y29sb3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMC42IiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby9zL3N0LTAuNyIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC0wLjgiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMC44LjUiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3QtMTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vcy9zdC1kaXJlY3QiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3Mvc3VuIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby90L3Rlcm1pbmF0b3IiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3kiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMC42LjEiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMS4wLjAiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdGVybWlub2xvZ3ktMS44LjEiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3QvdG11eCIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8vdC90bXV4LTI1NmNvbG9yIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MTAwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MTAyIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MjAwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0MjIwIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0NTIiLAogICAgICAgICAgICAiZXRjL3Rlcm1pbmZvL3YvdnRlIiwKICAgICAgICAgICAgImV0Yy90ZXJtaW5mby92L3Z0ZS0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybSIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS0yNTZjb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS1jb2xvciIsCiAgICAgICAgICAgICJldGMvdGVybWluZm8veC94dGVybS14ZnJlZTg2IgogICAgICAgICAgXSwKICAgICAgICAgICJBbmFseXplZEJ5IjogImFwayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJJRCI6ICJyZWFkbGluZUA4LjMuMy1yMSIsCiAgICAgICAgICAiTmFtZSI6ICJyZWFkbGluZSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvcmVhZGxpbmVAOC4zLjMtcjE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJmNTAwNTg3ODFjOTNlMWYyIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjguMy4zLXIxIiwKICAgICAgICAgICJBcmNoIjogIng4Nl82NCIsCiAgICAgICAgICAiU3JjTmFtZSI6ICJyZWFkbGluZSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICI4LjMuMy1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMy4wLW9yLWxhdGVyIgogICAgICAgICAgXSwKICAgICAgICAgICJNYWludGFpbmVyIjogInFhcWxhbmQgXHUwMDNjcWFxQHFhcS5sYW5kXHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJuY3Vyc2Vzd0A2LjZfcDIwMjYwNTE2LXIwIiwKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6OTQ1YjE2ZTM3OGJjMDBlNDRkODlkNGRlODEyNGJiYTc2NDdmZGY0ZCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJldGMvaW5wdXRyYyIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYnJlYWRsaW5lLnNvLjgiLAogICAgICAgICAgICAidXNyL2xpYi9saWJyZWFkbGluZS5zby44LjMiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNjYW5lbGZAMS4zLjktcjEiLAogICAgICAgICAgIk5hbWUiOiAic2NhbmVsZiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvc2NhbmVsZkAxLjMuOS1yMT9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogIjkzNjM5NDY1N2ExNjI2ZmIiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zLjktcjEiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInBheC11dGlscyIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIxLjMuOS1yMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo1NWFmYTFlY2MyMWQyYmI1ZTUwNDVmMzJkYWZlZTU2MjcyZmZkODk4NjBiYWMyNmY2YzMyMTIzNDM5YWYyNmE0IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6MzQ4ODRhYmJlOTI4NjNmY2U5MzNlZDdjMzljMGUwNDU2MzFhZjBlZDg2ZDVjYzBkZmJkZjlmZGNhNDI2Y2UzYyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6MDEzZjkwM2QwYmEyMTk2NzNhZWJiZGQwNGY3NGJiNWVkODJiMDFmMCIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvYmluL3NjYW5lbGYiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNxbGl0ZS1saWJzQDMuNTMuNC1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJzcWxpdGUtbGlicyIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvc3FsaXRlLWxpYnNAMy41My40LXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiOGIxMGFlZTJjY2MxOTJkZSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjUzLjQtcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInNxbGl0ZSIsCiAgICAgICAgICAiU3JjVmVyc2lvbiI6ICIzLjUzLjQtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiYmxlc3NpbmciCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiSmluZ3l1biBIdWEgXHUwMDNjaHVhamluZ3l1bkBsb29uZ3Nvbi5jblx1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjIwMTRmZDNkNDdiMmMyZGQ0ZGVkYzc2NTgyMmFjNjBhZTI2OWYzZWZhMGU2MTRmNDZhZTI5ZjU0MGM3ZjEyMzUiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjplNWNjZGEwZmJmNmI1NGQzNDNlMDI0MTU2ZDg3NjU1M2JhNTdkMzkyNmQ3MTk2NTg0YjNhMWNlNGRmMDE2MzY2IgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpmNzYzMGNlYjM3YzIzMmI2NjA5ODYxYWVhYjZjZGI5Y2QxMjBlNmZhIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGlic3FsaXRlMy5zby4wIiwKICAgICAgICAgICAgInVzci9saWIvbGlic3FsaXRlMy5zby4zLjUzLjQiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInNzbF9jbGllbnRAMS4zNy4wLXIzMSIsCiAgICAgICAgICAiTmFtZSI6ICJzc2xfY2xpZW50IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS9zc2xfY2xpZW50QDEuMzcuMC1yMzE/YXJjaD14ODZfNjRcdTAwMjZkaXN0cm89My4yNC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkNDJlMzFmMTVhNGNlNDdhIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjEuMzcuMC1yMzEiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogImJ1c3lib3giLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zNy4wLXIzMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJHUEwtMi4wLW9ubHkiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiU8O2cmVuIFRlbXBlbCBcdTAwM2Nzb2VyZW4rYWxwaW5lQHNvZXJlbi10ZW1wZWwubmV0XHUwMDNlIiwKICAgICAgICAgICJEZXBlbmRzT24iOiBbCiAgICAgICAgICAgICJsaWJjcnlwdG8zQDMuNS44LXIwIiwKICAgICAgICAgICAgImxpYnNzbDNAMy41LjgtcjAiLAogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpjMjIwZjRhNTEyNWEzMTNhZjczM2U5OGRlZjk0MTMyYmIxZTlkNDBkIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9iaW4vc3NsX2NsaWVudCIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAidHpkYXRhQDIwMjZjLXIwIiwKICAgICAgICAgICJOYW1lIjogInR6ZGF0YSIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvdHpkYXRhQDIwMjZjLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiNTJjNmI1MGVmZjYyOWY5ZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIyMDI2Yy1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAidHpkYXRhIiwKICAgICAgICAgICJTcmNWZXJzaW9uIjogIjIwMjZjLXIwIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIlB1YmxpYy1Eb21haW4iCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo0NzM5M2I2NjhjZTUzNWQwNmU4OTY3OTE3ZDQyNGMxNzdlMmVjY2NhZTgzODU2ZDQ4YjJlOTkxNjRmOGNjNmNiIiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6M2NhNGJlMmM2ZTlhYzAyMjM3MTUzNTUyNTM3MjUzODEwMDA0ODZjMmI0NWJmY2IyMmNmNTcxYjZhODVhMTJkZCIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NjFmNzU0NGVjZDhkZDYzZWFjMjNmZTNlNjQ1NzAyZmRhOTJlZjAyYSIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ0VUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DU1Q2Q0RUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DdWJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FRVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0VTVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRVNUNUVEVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRWd5cHQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0VpcmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0ZhY3RvcnkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0dCIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HQi1FaXJlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HTVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0dNVCswIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9HTVQtMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vR01UMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vR3JlZW53aWNoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9IU1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0hvbmdrb25nIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9JY2VsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9JcmFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Jc3JhZWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0phbWFpY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0phcGFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Ld2FqYWxlaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0xpYnlhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NRVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL01TVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTVNUN01EVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTloiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL05aLUNIQVQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL05hdmFqbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUFJDIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QU1Q4UERUIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Qb2xhbmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BvcnR1Z2FsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9ST0MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1JPSyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vU2luZ2Fwb3JlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9UdXJrZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VDVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVRDIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Vbml2ZXJzYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1ctU1UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1dFVCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vWnVsdSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vaXNvMzE2Ni50YWIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL2xlYXAtc2Vjb25kcy5saXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9wb3NpeHJ1bGVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby96b25lLnRhYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vem9uZTE5NzAudGFiIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQWJpZGphbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0FjY3JhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQWRkaXNfQWJhYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9BbGdpZXJzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQXNtYXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQXNtZXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFtYWtvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFuZ3VpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmFuanVsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmlzc2F1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQmxhbnR5cmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9CcmF6emF2aWxsZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0J1anVtYnVyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0NhaXJvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQ2FzYWJsYW5jYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0NldXRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvQ29uYWtyeSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0Rha2FyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRGFyX2VzX1NhbGFhbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0RqaWJvdXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRG91YWxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvRWxfQWFpdW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9GcmVldG93biIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0dhYm9yb25lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSGFyYXJlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSm9oYW5uZXNidXJnIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvSnViYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0thbXBhbGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9LaGFydG91bSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0tpZ2FsaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0tpbnNoYXNhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9MaWJyZXZpbGxlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTG9tZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0x1YW5kYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0x1YnVtYmFzaGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9MdXNha2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYWxhYm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYXB1dG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYXNlcnUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9NYmFiYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTW9nYWRpc2h1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTW9ucm92aWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9OYWlyb2JpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvTmRqYW1lbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9OaWFtZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9Ob3Vha2Nob3R0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvT3VhZ2Fkb3Vnb3UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9Qb3J0by1Ob3ZvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BZnJpY2EvU2FvX1RvbWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9UaW1idWt0dSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL1RyaXBvbGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9UdW5pcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL1dpbmRob2VrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FkYWsiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQW5jaG9yYWdlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FuZ3VpbGxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FudGlndWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJhZ3VhaW5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FydWJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FzdW5jaW9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0F0aWtva2FuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0F0a2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFoaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFoaWFfQmFuZGVyYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmFyYmFkb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmVsZW0iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQmVsaXplIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0JsYW5jLVNhYmxvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Cb2FfVmlzdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQm9nb3RhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0JvaXNlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0J1ZW5vc19BaXJlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYW1icmlkZ2VfQmF5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0NhbXBvX0dyYW5kZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYW5jdW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2FyYWNhcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYXRhbWFyY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2F5ZW5uZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DYXltYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2hpY2FnbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DaGlodWFodWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ2l1ZGFkX0p1YXJleiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Db3JhbF9IYXJib3VyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0NvcmRvYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ29zdGFfUmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Db3loYWlxdWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ3Jlc3RvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9DdWlhYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQ3VyYWNhbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9EYW5tYXJrc2hhdm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvRGF3c29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0Rhd3Nvbl9DcmVlayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9EZW52ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvRGV0cm9pdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Eb21pbmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FZG1vbnRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FaXJ1bmVwZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FbF9TYWx2YWRvciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9FbnNlbmFkYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Gb3J0X05lbHNvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Gb3J0X1dheW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0ZvcnRhbGV6YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HbGFjZV9CYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR29kdGhhYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Hb29zZV9CYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR3JhbmRfVHVyayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HcmVuYWRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0d1YWRlbG91cGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvR3VhdGVtYWxhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0d1YXlhcXVpbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9HdXlhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSGFsaWZheCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9IYXZhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSGVybW9zaWxsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9JbmRpYW5hcG9saXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW51dmlrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0lxYWx1aXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSmFtYWljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9KdWp1eSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9KdW5lYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvS25veF9JTiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9LcmFsZW5kaWprIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xhX1BheiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9MaW1hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0xvdWlzdmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTG93ZXJfUHJpbmNlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYWNlaW8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWFuYWd1YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYW5hdXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWFyaWdvdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYXJ0aW5pcXVlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01hdGFtb3JvcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NYXphdGxhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZW5kb3phIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01lbm9taW5lZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZXJpZGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTWV0bGFrYXRsYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NZXhpY29fQ2l0eSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9NaXF1ZWxvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Nb25jdG9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRlcnJleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Nb250ZXZpZGVvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRyZWFsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL01vbnRzZXJyYXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTmFzc2F1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05ld19Zb3JrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05pcGlnb24iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTm9tZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ob3JvbmhhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL051dWsiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvT2ppbmFnYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QYW5hbWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUGFuZ25pcnR1bmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUGFyYW1hcmlibyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QaG9lbml4IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1BvcnQtYXUtUHJpbmNlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1BvcnRfb2ZfU3BhaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUG9ydG9fQWNyZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Qb3J0b19WZWxobyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QdWVydG9fUmljbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9QdW50YV9BcmVuYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmFpbnlfUml2ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmFua2luX0lubGV0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1JlY2lmZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9SZWdpbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmVzb2x1dGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvUmlvX0JyYW5jbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Sb3NhcmlvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1NhbnRhX0lzYWJlbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50YXJlbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50aWFnbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TYW50b19Eb21pbmdvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1Nhb19QYXVsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TY29yZXNieXN1bmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU2hpcHJvY2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU2l0a2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU3RfQmFydGhlbGVteSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9Kb2hucyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9LaXR0cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9MdWNpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9TdF9UaG9tYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvU3RfVmluY2VudCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Td2lmdF9DdXJyZW50IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RlZ3VjaWdhbHBhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RodWxlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RodW5kZXJfQmF5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1RpanVhbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvVG9yb250byIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ub3J0b2xhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1ZhbmNvdXZlciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9WaXJnaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvV2hpdGVob3JzZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9XaW5uaXBlZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9ZYWt1dGF0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL1llbGxvd2tuaWZlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0NhdGFtYXJjYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvQ29tb2RSaXZhZGF2aWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL0p1anV5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9MYV9SaW9qYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvTWVuZG96YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvUmlvX0dhbGxlZ29zIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9TYWx0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9BcmdlbnRpbmEvU2FuX0p1YW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9UdWN1bWFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0FyZ2VudGluYS9Vc2h1YWlhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvS25veCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9JbmRpYW5hL01hcmVuZ28iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9QZXRlcnNidXJnIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvVGVsbF9DaXR5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0luZGlhbmEvVmV2YXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvSW5kaWFuYS9XaW5hbWFjIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvS2VudHVja3kvTW9udGljZWxsbyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW1lcmljYS9Ob3J0aF9EYWtvdGEvQmV1bGFoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FtZXJpY2EvTm9ydGhfRGFrb3RhL05ld19TYWxlbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9DYXNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9EYXZpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9NYWNxdWFyaWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvTWF3c29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbnRhcmN0aWNhL01jTXVyZG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvUGFsbWVyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BbnRhcmN0aWNhL1JvdGhlcmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FudGFyY3RpY2EvU291dGhfUG9sZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9TeW93YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9Ucm9sbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQW50YXJjdGljYS9Wb3N0b2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FyY3RpYy9Mb25neWVhcmJ5ZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQWRlbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9BbG1hdHkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQW1tYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQW5hZHlyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0FxdGF1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0FxdG9iZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Bc2hnYWJhdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Bc2hraGFiYWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQXR5cmF1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0JhZ2hkYWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmFocmFpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CYWt1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0Jhbmdrb2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmFybmF1bCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CZWlydXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQmlzaGtlayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9CcnVuZWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2FsY3V0dGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2hpdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2hvaWJhbHNhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9DaG9uZ3FpbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvQ2h1bmdraW5nIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0NvbG9tYm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGFjY2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGFtYXNjdXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGhha2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvRGlsaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9EdWJhaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9EdXNoYW5iZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9GYW1hZ3VzdGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvR2F6YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9IYXJiaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSGVicm9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0hvX0NoaV9NaW5oIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0hvbmdfS29uZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9Ib3ZkIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0lya3V0c2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSXN0YW5idWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvSmFrYXJ0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9KYXlhcHVyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9KZXJ1c2FsZW0iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FidWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FtY2hhdGthIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL0thcmFjaGkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2FzaGdhciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LYXRobWFuZHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2F0bWFuZHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS2hhbmR5Z2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS29sa2F0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LcmFzbm95YXJzayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LdWFsYV9MdW1wdXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvS3VjaGluZyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9LdXdhaXQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFjYW8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFjYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTWFnYWRhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9NYWthc3NhciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9NYW5pbGEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTXVzY2F0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL05pY29zaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvTm92b2t1em5ldHNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL05vdm9zaWJpcnNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL09tc2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvT3JhbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9QaG5vbV9QZW5oIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1BvbnRpYW5hayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9QeW9uZ3lhbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUWF0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUW9zdGFuYXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUXl6eWxvcmRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Jhbmdvb24iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvUml5YWRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1NhaWdvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9TYWtoYWxpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9TYW1hcmthbmQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2VvdWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2hhbmdoYWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvU2luZ2Fwb3JlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1NyZWRuZWtvbHltc2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVGFpcGVpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Rhc2hrZW50IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RiaWxpc2kiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVGVocmFuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RlbF9Bdml2IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RoaW1idSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9UaGltcGh1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1Rva3lvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1RvbXNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1VqdW5nX1BhbmRhbmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVWxhYW5iYWF0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVWxhbl9CYXRvciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXNpYS9VcnVtcWkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVXN0LU5lcmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvVmllbnRpYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1ZsYWRpdm9zdG9rIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1lha3V0c2siLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvWWFuZ29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9Bc2lhL1lla2F0ZXJpbmJ1cmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0FzaWEvWWVyZXZhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvQXpvcmVzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9CZXJtdWRhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9DYW5hcnkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0NhcGVfVmVyZGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0ZhZXJvZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvRmFyb2UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL0phbl9NYXllbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvTWFkZWlyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXRsYW50aWMvUmV5a2phdmlrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9Tb3V0aF9HZW9yZ2lhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdGxhbnRpYy9TdF9IZWxlbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F0bGFudGljL1N0YW5sZXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9BQ1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9BZGVsYWlkZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0JyaXNiYW5lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvQnJva2VuX0hpbGwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9DYW5iZXJyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0N1cnJpZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0RhcndpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL0V1Y2xhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvSG9iYXJ0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvTEhJIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvTGluZGVtYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9Mb3JkX0hvd2UiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9NZWxib3VybmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9OU1ciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9Ob3J0aCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1BlcnRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvUXVlZW5zbGFuZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1NvdXRoIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvU3lkbmV5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9BdXN0cmFsaWEvVGFzbWFuaWEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9WaWN0b3JpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQXVzdHJhbGlhL1dlc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0F1c3RyYWxpYS9ZYW5jb3dpbm5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9CcmF6aWwvQWNyZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQnJhemlsL0RlTm9yb25oYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQnJhemlsL0Vhc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0JyYXppbC9XZXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvQXRsYW50aWMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0NhbmFkYS9DZW50cmFsIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvRWFzdGVybiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL01vdW50YWluIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvTmV3Zm91bmRsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DYW5hZGEvUGFjaWZpYyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL1Nhc2thdGNoZXdhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2FuYWRhL1l1a29uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9DaGlsZS9Db250aW5lbnRhbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vQ2hpbGUvRWFzdGVySXNsYW5kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrMSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsxMiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCsyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrNCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCs1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzYiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQrNyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVCs4IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01UKzkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtMCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC0xIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEwIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTExIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEyIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTEzIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTE0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtMyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC00IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtNiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVC03IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdGMvR01ULTgiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HTVQtOSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXRjL0dNVDAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9HcmVlbndpY2giLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9VQ1QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9VVEMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9Vbml2ZXJzYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V0Yy9adWx1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQW1zdGVyZGFtIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQW5kb3JyYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0FzdHJha2hhbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0F0aGVucyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JlbGZhc3QiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9CZWxncmFkZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JlcmxpbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0JyYXRpc2xhdmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9CcnVzc2VscyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0J1Y2hhcmVzdCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0J1ZGFwZXN0IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvQnVzaW5nZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9DaGlzaW5hdSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0NvcGVuaGFnZW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9EdWJsaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9HaWJyYWx0YXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9HdWVybnNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0hlbHNpbmtpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvSXNsZV9vZl9NYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Jc3RhbmJ1bCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0plcnNleSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0thbGluaW5ncmFkIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvS2lldiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0tpcm92IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvS3lpdiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xpc2JvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xqdWJsamFuYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0xvbmRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL0x1eGVtYm91cmciLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9NYWRyaWQiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9NYWx0YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL01hcmllaGFtbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL01pbnNrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTW9uYWNvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTW9zY293IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvTmljb3NpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL09zbG8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9QYXJpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1BvZGdvcmljYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1ByYWd1ZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1JpZ2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Sb21lIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FtYXJhIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FuX01hcmlubyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1NhcmFqZXZvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvU2FyYXRvdiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1NpbWZlcm9wb2wiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Ta29wamUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9Tb2ZpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1N0b2NraG9sbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1RhbGxpbm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9UaXJhbmUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9UaXJhc3BvbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1VseWFub3ZzayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1V6aGdvcm9kIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmFkdXoiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9WYXRpY2FuIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmllbm5hIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9FdXJvcGUvVmlsbml1cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1ZvbGdvZ3JhZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1dhcnNhdyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1phZ3JlYiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vRXVyb3BlL1phcG9yb3poeWUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0V1cm9wZS9adXJpY2giLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9BbnRhbmFuYXJpdm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9DaGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9DaHJpc3RtYXMiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9Db2NvcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL0NvbW9ybyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL0tlcmd1ZWxlbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01haGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9NYWxkaXZlcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01hdXJpdGl1cyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vSW5kaWFuL01heW90dGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL0luZGlhbi9SZXVuaW9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NZXhpY28vQmFqYU5vcnRlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9NZXhpY28vQmFqYVN1ciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vTWV4aWNvL0dlbmVyYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvQXBpYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9BdWNrbGFuZCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Cb3VnYWludmlsbGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvQ2hhdGhhbSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9DaHV1ayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9FYXN0ZXIiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRWZhdGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRW5kZXJidXJ5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0Zha2FvZm8iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvRmlqaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9GdW5hZnV0aSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HYWxhcGFnb3MiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvR2FtYmllciIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HdWFkYWxjYW5hbCIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9HdWFtIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0hvbm9sdWx1IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0pvaG5zdG9uIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0thbnRvbiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9LaXJpdGltYXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL0tvc3JhZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ld2FqYWxlaW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTWFqdXJvIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL01hcnF1ZXNhcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9NaWR3YXkiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTmF1cnUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvTml1ZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ob3Jmb2xrIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL05vdW1lYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9QYWdvX1BhZ28iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUGFsYXUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUGl0Y2Fpcm4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUG9obnBlaSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Qb25hcGUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvUG9ydF9Nb3Jlc2J5IiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1Jhcm90b25nYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9TYWlwYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvU2Ftb2EiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvVGFoaXRpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1RhcmF3YSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9Ub25nYXRhcHUiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1BhY2lmaWMvVHJ1ayIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9XYWtlIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9QYWNpZmljL1dhbGxpcyIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vUGFjaWZpYy9ZYXAiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0FsYXNrYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvQWxldXRpYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0FyaXpvbmEiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0NlbnRyYWwiLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL0Vhc3QtSW5kaWFuYSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvRWFzdGVybiIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvSGF3YWlpIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9JbmRpYW5hLVN0YXJrZSIsCiAgICAgICAgICAgICJ1c3Ivc2hhcmUvem9uZWluZm8vVVMvTWljaGlnYW4iLAogICAgICAgICAgICAidXNyL3NoYXJlL3pvbmVpbmZvL1VTL01vdW50YWluIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9QYWNpZmljIiwKICAgICAgICAgICAgInVzci9zaGFyZS96b25laW5mby9VUy9TYW1vYSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiSUQiOiAieHotbGlic0A1LjguMy1yMCIsCiAgICAgICAgICAiTmFtZSI6ICJ4ei1saWJzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6YXBrL2FscGluZS94ei1saWJzQDUuOC4zLXIwP2FyY2g9eDg2XzY0XHUwMDI2ZGlzdHJvPTMuMjQuMSIsCiAgICAgICAgICAgICJVSUQiOiAiMWFlNjU4YTVmMTMyYTA5MSIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICI1LjguMy1yMCIsCiAgICAgICAgICAiQXJjaCI6ICJ4ODZfNjQiLAogICAgICAgICAgIlNyY05hbWUiOiAieHoiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiNS44LjMtcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiR1BMLTIuMC1vci1sYXRlciIsCiAgICAgICAgICAgICIwQlNEIiwKICAgICAgICAgICAgIlB1YmxpYy1Eb21haW4iLAogICAgICAgICAgICAiTEdQTC0yLjEtb3ItbGF0ZXIiCiAgICAgICAgICBdLAogICAgICAgICAgIk1haW50YWluZXIiOiAiTmF0YW5hZWwgQ29wYSBcdTAwM2NuY29wYUBhbHBpbmVsaW51eC5vcmdcdTAwM2UiLAogICAgICAgICAgIkRlcGVuZHNPbiI6IFsKICAgICAgICAgICAgIm11c2xAMS4yLjYtcjIiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1NjoyMDE0ZmQzZDQ3YjJjMmRkNGRlZGM3NjU4MjJhYzYwYWUyNjlmM2VmYTBlNjE0ZjQ2YWUyOWY1NDBjN2YxMjM1IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6ZTVjY2RhMGZiZjZiNTRkMzQzZTAyNDE1NmQ4NzY1NTNiYTU3ZDM5MjZkNzE5NjU4NGIzYTFjZTRkZjAxNjM2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAiRGlnZXN0IjogInNoYTE6NGM5MmM1YmUwYzViZWY0MDRlOTNjODgwZWJhOTAzN2E5YjE0NzM0NyIsCiAgICAgICAgICAiSW5zdGFsbGVkRmlsZXMiOiBbCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmx6bWEuc28uNSIsCiAgICAgICAgICAgICJ1c3IvbGliL2xpYmx6bWEuc28uNS44LjMiCiAgICAgICAgICBdLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAiYXBrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIklEIjogInpsaWJAMS4zLjItcjAiLAogICAgICAgICAgIk5hbWUiOiAiemxpYiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImUzNzA1NGEyOTgyZDZjMTYiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkFyY2giOiAieDg2XzY0IiwKICAgICAgICAgICJTcmNOYW1lIjogInpsaWIiLAogICAgICAgICAgIlNyY1ZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiWmxpYiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTWFpbnRhaW5lciI6ICJOYXRhbmFlbCBDb3BhIFx1MDAzY25jb3BhQGFscGluZWxpbnV4Lm9yZ1x1MDAzZSIsCiAgICAgICAgICAiRGVwZW5kc09uIjogWwogICAgICAgICAgICAibXVzbEAxLjIuNi1yMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjU1YWZhMWVjYzIxZDJiYjVlNTA0NWYzMmRhZmVlNTYyNzJmZmQ4OTg2MGJhYzI2ZjZjMzIxMjM0MzlhZjI2YTQiLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1NjozNDg4NGFiYmU5Mjg2M2ZjZTkzM2VkN2MzOWMwZTA0NTYzMWFmMGVkODZkNWNjMGRmYmRmOWZkY2E0MjZjZTNjIgogICAgICAgICAgfSwKICAgICAgICAgICJEaWdlc3QiOiAic2hhMTpkZDRjM2QxMDJhY2FlZjJhNzFhMTQ5NTk1MWQ1NWZhYmM4NjgwNjEzIiwKICAgICAgICAgICJJbnN0YWxsZWRGaWxlcyI6IFsKICAgICAgICAgICAgInVzci9saWIvbGliei5zby4xIiwKICAgICAgICAgICAgInVzci9saWIvbGliei5zby4xLjMuMiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJhcGsiCiAgICAgICAgfQogICAgICBdLAogICAgICAiVnVsbmVyYWJpbGl0aWVzIjogWwogICAgICAgIHsKICAgICAgICAgICJWdWxuZXJhYmlsaXR5SUQiOiAiQ1ZFLTIwMjYtODUwOTEiLAogICAgICAgICAgIlBrZ0lEIjogInpsaWJAMS4zLjItcjAiLAogICAgICAgICAgIlBrZ05hbWUiOiAiemxpYiIsCiAgICAgICAgICAiUGtnSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOmFway9hbHBpbmUvemxpYkAxLjMuMi1yMD9hcmNoPXg4Nl82NFx1MDAyNmRpc3Rybz0zLjI0LjEiLAogICAgICAgICAgICAiVUlEIjogImUzNzA1NGEyOTgyZDZjMTYiCiAgICAgICAgICB9LAogICAgICAgICAgIkluc3RhbGxlZFZlcnNpb24iOiAiMS4zLjItcjAiLAogICAgICAgICAgIkZpeGVkVmVyc2lvbiI6ICIxLjMuMi1yMSIsCiAgICAgICAgICAiU3RhdHVzIjogImZpeGVkIiwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6NTVhZmExZWNjMjFkMmJiNWU1MDQ1ZjMyZGFmZWU1NjI3MmZmZDg5ODYwYmFjMjZmNmMzMjEyMzQzOWFmMjZhNCIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjM0ODg0YWJiZTkyODYzZmNlOTMzZWQ3YzM5YzBlMDQ1NjMxYWYwZWQ4NmQ1Y2MwZGZiZGY5ZmRjYTQyNmNlM2MiCiAgICAgICAgICB9LAogICAgICAgICAgIlByaW1hcnlVUkwiOiAiaHR0cHM6Ly9hdmQuYXF1YXNlYy5jb20vbnZkL2N2ZS0yMDI2LTg1MDkxIiwKICAgICAgICAgICJEYXRhU291cmNlIjogewogICAgICAgICAgICAiSUQiOiAiYWxwaW5lIiwKICAgICAgICAgICAgIk5hbWUiOiAiQWxwaW5lIFNlY2RiIiwKICAgICAgICAgICAgIlVSTCI6ICJodHRwczovL3NlY2RiLmFscGluZWxpbnV4Lm9yZy8iCiAgICAgICAgICB9LAogICAgICAgICAgIkZpbmdlcnByaW50IjogInNoYTI1NjpkNzNjMDFiMDIwYzU1YWNjMTc0YTNmZGU0N2M4YWY2ZjU2MzhjNThjNzE4OWM4MTdlZGQ2ODYyMDI5ZjZjNWY1IiwKICAgICAgICAgICJUaXRsZSI6ICJ6bGliIHZlcnNpb25zIDEuMy4xLjIgdGhyb3VnaCAxLjMuMiBjb250YWluIGEgaGVhcCBidWZmZXIgb3ZlcmZsb3cgdnVsIC4uLiIsCiAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiemxpYiB2ZXJzaW9ucyAxLjMuMS4yIHRocm91Z2ggMS4zLjIgY29udGFpbiBhIGhlYXAgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGd6X3ZhY2F0ZSgpIGZ1bmN0aW9uIHdoZW4gcHJvY2Vzc2luZyBub24tYmxvY2tpbmcgZ3p3cml0ZSgpIG9wZXJhdGlvbnMgd2l0aCBzdGFsZSBleHRlcm5hbCBidWZmZXIgcG9pbnRlcnMuIEF0dGFja2VycyBjYW4gdHJpZ2dlciB0aGUgb3ZlcmZsb3cgYnkgY2FsbGluZyBnenByaW50ZigpIG9yIGd6dnByaW50ZigpIGFmdGVyIGEgd3JpdGUgc3RhbGwsIGNhdXNpbmcgYW4gdW5jaGVja2VkIG1lbW1vdmUoKSB0byB3cml0ZSBiZXlvbmQgdGhlIGludGVybmFsIGlucHV0IGJ1ZmZlciBib3VuZGFyeS4iLAogICAgICAgICAgIlNldmVyaXR5IjogIk1FRElVTSIsCiAgICAgICAgICAiQ3dlSURzIjogWwogICAgICAgICAgICAiQ1dFLTc4NyIKICAgICAgICAgIF0sCiAgICAgICAgICAiVmVuZG9yU2V2ZXJpdHkiOiB7CiAgICAgICAgICAgICJ1YnVudHUiOiAyCiAgICAgICAgICB9LAogICAgICAgICAgIlJlZmVyZW5jZXMiOiBbCiAgICAgICAgICAgICJodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aGVzbWFydHNoYWRvdy9lMGI5NDgxNzkyYWZiN2MzMWU4NmZlZTFmZjA4NDQ5MCIsCiAgICAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vbWFkbGVyL3psaWIiLAogICAgICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL21hZGxlci96bGliL2Jsb2IvdjEuMy4yL2d6d3JpdGUuYyNMMzkzIiwKICAgICAgICAgICAgImh0dHBzOi8vd3d3LmN2ZS5vcmcvQ1ZFUmVjb3JkP2lkPUNWRS0yMDI2LTg1MDkxIiwKICAgICAgICAgICAgImh0dHBzOi8vd3d3LnZ1bG5jaGVjay5jb20vYWR2aXNvcmllcy96bGliLTEuMy4xLjItdGhyb3VnaC0xLjMuMi1oZWFwLWJ1ZmZlci1vdmVyZmxvdy12aWEtZ3otdmFjYXRlIgogICAgICAgICAgXSwKICAgICAgICAgICJQdWJsaXNoZWREYXRlIjogIjIwMjYtMDktMDNUMTM6MDY6MjAuNTczWiIsCiAgICAgICAgICAiTGFzdE1vZGlmaWVkRGF0ZSI6ICIyMDI2LTA5LTA5VDIwOjQxOjA3LjEyM1oiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAiVGFyZ2V0IjogIlB5dGhvbiIsCiAgICAgICJDbGFzcyI6ICJsYW5nLXBrZ3MiLAogICAgICAiVHlwZSI6ICJweXRob24tcGtnIiwKICAgICAgIlBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogIlB5SldUIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS9weWp3dEAyLjE1LjEiLAogICAgICAgICAgICAiVUlEIjogImQzZjVmOWE0MjFiOGFiYzkiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi4xNS4xIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIgogICAgICAgICAgfSwKICAgICAgICAgICJGaWxlUGF0aCI6ICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL3B5and0LTIuMTUuMS5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogImNmZmkiLAogICAgICAgICAgIklkZW50aWZpZXIiOiB7CiAgICAgICAgICAgICJQVVJMIjogInBrZzpweXBpL2NmZmlAMi4xLjEiLAogICAgICAgICAgICAiVUlEIjogIjIxMDQyZTJmMzdlMzNjMDUiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMi4xLjEiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiTUlULTAiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9jZmZpLTIuMS4xLmRpc3QtaW5mby9NRVRBREFUQSIsCiAgICAgICAgICAiQW5hbHl6ZWRCeSI6ICJweXRob24tcGtnIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIk5hbWUiOiAiY3J5cHRvZ3JhcGh5IiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS9jcnlwdG9ncmFwaHlANTAuMC4xIiwKICAgICAgICAgICAgIlVJRCI6ICJkY2IzZGY2MzgzZmUyYTYwIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjUwLjAuMSIsCiAgICAgICAgICAiTGljZW5zZXMiOiBbCiAgICAgICAgICAgICJBcGFjaGUtMi4wIE9SIEJTRC0zLUNsYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiTGF5ZXIiOiB7CiAgICAgICAgICAgICJEaWdlc3QiOiAic2hhMjU2OjgyZmYxN2I1NTVkOTEwOTZkZDMyOGViMWU4MjlkYWFlYmE5YTQ4ZDc3NTcxNDNkMGI5N2MzNWE3MjFmNmZiODciLAogICAgICAgICAgICAiRGlmZklEIjogInNoYTI1Njo2NDg0NTFhMGRkYTg0YWQwNDY4MWUzMmI1ZWNjN2NkNWQzYTRmMGFkODRmNzgzZTk1OThkNzJiYzY5NjIwZDVjIgogICAgICAgICAgfSwKICAgICAgICAgICJGaWxlUGF0aCI6ICJvcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL2NyeXB0b2dyYXBoeS01MC4wLjEuZGlzdC1pbmZvL01FVEFEQVRBIiwKICAgICAgICAgICJBbmFseXplZEJ5IjogInB5dGhvbi1wa2ciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiTmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOnB5cGkvaW5mb3JtZWQtZGVjaXNpb25AMC4yLjAiLAogICAgICAgICAgICAiVUlEIjogIjc5ODlmMmFmYWU4ZmY1NjgiCiAgICAgICAgICB9LAogICAgICAgICAgIlZlcnNpb24iOiAiMC4yLjAiLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy9pbmZvcm1lZF9kZWNpc2lvbi0wLjIuMC5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogInB5Y3BhcnNlciIsCiAgICAgICAgICAiSWRlbnRpZmllciI6IHsKICAgICAgICAgICAgIlBVUkwiOiAicGtnOnB5cGkvcHljcGFyc2VyQDMuMCIsCiAgICAgICAgICAgICJVSUQiOiAiZTVhNGQwM2YxNWE2OTVmZiIKICAgICAgICAgIH0sCiAgICAgICAgICAiVmVyc2lvbiI6ICIzLjAiLAogICAgICAgICAgIkxpY2Vuc2VzIjogWwogICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgXSwKICAgICAgICAgICJMYXllciI6IHsKICAgICAgICAgICAgIkRpZ2VzdCI6ICJzaGEyNTY6ODJmZjE3YjU1NWQ5MTA5NmRkMzI4ZWIxZTgyOWRhYWViYTlhNDhkNzc1NzE0M2QwYjk3YzM1YTcyMWY2ZmI4NyIsCiAgICAgICAgICAgICJEaWZmSUQiOiAic2hhMjU2OjY0ODQ1MWEwZGRhODRhZDA0NjgxZTMyYjVlY2M3Y2Q1ZDNhNGYwYWQ4NGY3ODNlOTU5OGQ3MmJjNjk2MjBkNWMiCiAgICAgICAgICB9LAogICAgICAgICAgIkZpbGVQYXRoIjogIm9wdC92ZW52L2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvcHljcGFyc2VyLTMuMC5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJOYW1lIjogIndhaXRyZXNzIiwKICAgICAgICAgICJJZGVudGlmaWVyIjogewogICAgICAgICAgICAiUFVSTCI6ICJwa2c6cHlwaS93YWl0cmVzc0AzLjAuMiIsCiAgICAgICAgICAgICJVSUQiOiAiODA2ZTIxOGUxYzFlODVmIgogICAgICAgICAgfSwKICAgICAgICAgICJWZXJzaW9uIjogIjMuMC4yIiwKICAgICAgICAgICJMaWNlbnNlcyI6IFsKICAgICAgICAgICAgIlpQTC0yLjEiCiAgICAgICAgICBdLAogICAgICAgICAgIkxheWVyIjogewogICAgICAgICAgICAiRGlnZXN0IjogInNoYTI1Njo4MmZmMTdiNTU1ZDkxMDk2ZGQzMjhlYjFlODI5ZGFhZWJhOWE0OGQ3NzU3MTQzZDBiOTdjMzVhNzIxZjZmYjg3IiwKICAgICAgICAgICAgIkRpZmZJRCI6ICJzaGEyNTY6NjQ4NDUxYTBkZGE4NGFkMDQ2ODFlMzJiNWVjYzdjZDVkM2E0ZjBhZDg0Zjc4M2U5NTk4ZDcyYmM2OTYyMGQ1YyIKICAgICAgICAgIH0sCiAgICAgICAgICAiRmlsZVBhdGgiOiAib3B0L3ZlbnYvbGliL3B5dGhvbjMuMTIvc2l0ZS1wYWNrYWdlcy93YWl0cmVzcy0zLjAuMi5kaXN0LWluZm8vTUVUQURBVEEiLAogICAgICAgICAgIkFuYWx5emVkQnkiOiAicHl0aG9uLXBrZyIKICAgICAgICB9CiAgICAgIF0KICAgIH0KICBdCn0K" + "content_base64": "ewogICJraW5kIjogImluZm9ybWVkLWRlY2lzaW9uLmV4ZWN1dGlvbi1zb3VyY2UtYnVuZGxlIiwKICAidmVyc2lvbiI6IDEsCiAgInByb3Bvc2FsX2lkIjogIklORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxIiwKICAiZmlsZXMiOiB7CiAgICAiUkVBRE1FLm1kIjogewogICAgICAic2hhMjU2IjogImE2ZWNkYWJlYmNlMTJlZWFmZWE2MTE3M2VkYjZlNmQwZTM0OWE3NmUzNjY1NDY5NzhlMmVkMDJlN2IxMDlkZjIiLAogICAgICAiY29udGVudCI6ICIjIFN1cGVydmlzZWQgSW5mb3JtZWQgRGVjaXNpb24gcHVycG9zZSByZWxlYXNlIGV4ZWN1dG9yIOKAlCB1bmFwcHJvdmVkIHByZXBhcmF0aW9uXG5cbk5vIG5hdGl2ZSBkYXRhYmFzZSByZWFkLCBiYWNrdXAvZXhwb3J0L3Jlc3RvcmUgb3Igd29ya2xvYWQgYWN0aW9uIGhhcyBiZWVuIHJ1bi4gVGhpcyBzb3VyY2UgaW1wbGVtZW50cyB0aGUgcmV2aWV3ZWQgcHJvdG9jb2w7IGl0cyBhZGRpdGlvbmFsIG1lY2hhbmljYWwgZGV0YWlscyBuZWVkIHBlZXIgcmV2aWV3IGFuZCBhbiBhbWVuZGVkIGhhc2gtYm91bmQgcGFja2V0IGJlZm9yZSBmaXJzdCBodW1hbiBzdWJtaXNzaW9uLiBUaGUgb3JpZ2luYWw3OHBhdGggcGFja2V0L3Jldmlld3MgcmVtYWluIGhpc3RvcmljYWwgdGVjaG5pY2FsIGFncmVlbWVudCwgbm90IGZvdW5kZXIgYXBwcm92YWwgb2YgdGhpcyBleGVjdXRvci5cblxuUnVuIG9uZSBwaGFzZSBhdCBhIHRpbWUgb25seSBhZnRlciB0aGUgY29vcmRpbmF0b3IgaGFzIGZyZXNobHkgYXV0aGVudGljYXRlZCB0aGUgZXhhY3QgZm91bmRlciBkaXNwb3NpdGlvbiBhdCB0aGUgZXhpc3RpbmcgZml4ZWQgSW5mb3JtZWQgRGVjaXNpb24gb3JpZ2luLiBSb290IHdyaXRlcyB0aGUgcHJvdGVjdGVkMDYwMCBmaXhlZCBmaWxlcyBgL3RtcC9zZWN1cml0eS1pbmZkLXB1cnBvc2Utcm9vdC1hdXRob3JpdHkuanNvbmAgYW5kIGAvdG1wL3NlY3VyaXR5LWluZmQtcHVycG9zZS1uYXRpdmUtb3V0Y29tZS1sYXRlc3QuanNvbmAuIFRoZSByZWNlaXB0IHRlbXBsYXRlIGlzIFBFTkRJTkcgYW5kIGNhbm5vdCBhdXRob3JpemUgYW55dGhpbmcuIFRoZSBoZWxwZXIgY2hlY2tzIGV4YWN0IG5lc3RlZCBjb25maXJtZWQgcGVyc29uL3BsYXRmb3JtLXJvb3QgQUNDRVBUIHZlcnNpb24xLCBvcmlnaW5hbCBtZW1vIGlkZW50aXR5L2N1cnJlbnQgbWVtbyBTSEEsIHNvdXJjZSBjb21taXQsIHBsYW4gU0hBIGFuZCBmcmVzaG5lc3MxMjBzZWNvbmRzLiBUaGlzIGlzIHN1cGVydmlzZWQgcmVjZWlwdCBib29ra2VlcGluZywgbm90IGNyeXB0b2dyYXBoaWMgcHJvdmlkZXIgdmVyaWZpY2F0aW9uLCBhIHNpZ25lZCBncmFudCBvciBhZ2VudCBhdXRvbm9teSBwcm9tb3Rpb24uIFJvb3QvaGFybmVzcyBzdXBlcnZpc2lvbiByZW1haW5zIHRoZSBhdXRob3JpdHkgYm91bmRhcnkuIE5ldmVyIHN5bnRoZXNpemUgYW4gYXBwcm92YWwgcmVjZWlwdCBmcm9tIGEgdGVjaG5pY2FsIHJldmlldyBvciBjYWxsZXIgYXNzZXJ0aW9uLlxuXG5JbnZvY2F0aW9uIGFmdGVyIGFjdHVhbCBhcHByb3ZhbDogYHB5dGhvbjMgZXhlY3V0aW9uL2FjdHVhdG9yLnB5IC0tcGhhc2UgPGZpeGVkLXBoYXNlPiAtLXJvb3QtYXV0aG9yaXR5LXJlY2VpcHQgL3RtcC9zZWN1cml0eS1pbmZkLXB1cnBvc2Utcm9vdC1hdXRob3JpdHkuanNvbiAtLXJvb3QtbmF0aXZlLW91dGNvbWUgL3RtcC9zZWN1cml0eS1pbmZkLXB1cnBvc2UtbmF0aXZlLW91dGNvbWUtbGF0ZXN0Lmpzb24gLS1zb3VyY2UtcmV2aXNpb24gPGV4YWN0LWZpbmFsLW93bmVyLWNvbW1pdD5gLiBPcmRlcjogZHJpbGwtYmFja3VwIOKGkiBkcmlsbC1jb3B5IOKGkiBvZmZsaW5lLXZlcmlmeSDihpIgY2xlYW51cC1vZmZsaW5lIOKGkiBjdXRvdmVyLWJhY2t1cCDihpIgY3V0b3Zlci1jb3B5IOKGkiByZWxlYXNlIOKGkiB2ZXJpZnkuIFJvbGxiYWNrIGlzIGEgZGlzdGluY3QgYXV0aG9yaXplZCByZWNvdmVyeSBhZnRlciBhIHJlY29yZGVkIHJlbGVhc2UgYXR0ZW1wdCwgZm9sbG93ZWQgYnkgcm9sbGJhY2stdmVyaWZ5LiBSb2xsYmFjayBkaXNwYXRjaCBuZWVkcyBubyBSZWFkeSBQb2Qgb3IgY2FuZGlkYXRlIGRhdGFiYXNlIGV4ZWM6IHNlYWxlZCBEZXBsb3ltZW50L0NNL1BWQy9zb3VyY2UvaW1hZ2UgcGFpciBhbmQgYWRtaXNzaW9uIENBUyByZW1haW4gbWFuZGF0b3J5LiBJdHMgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlY292ZXJ5IGNvbXBsZXRpb247IHJvbGxiYWNrLXZlcmlmeSBzZXBhcmF0ZWx5IHJlcXVpcmVzIFJlYWR5MSBvZiB0aGUgb2xkIGltYWdlLCBzdWNjZWVkZWQgZXhhY3Qgc2NvcGVkIG9wZXJhdGlvbiBhbmQgcmVhZG9ubHkgc2NoZW1hNS9pbnRlZ3JpdHkvY291bnQgcHJvb2Ygb2YgdGhlIGN1cnJlbnQgcmV0YWluZWQgZGF0YWJhc2UuIFJvb3QgcmVmcmVzaGVzIGFjdHVhbCBuYXRpdmUgYWNjZXB0YW5jZSBpbW1lZGlhdGVseSBiZWZvcmUgZWFjaCBwaGFzZS5cblxuVGhlIHByaXZhdGUgaWdub3JlZCBDdXN0b2RpYW4gY3VzdG9keSBwYXJlbnQgYC5wcml2YXRlLWJhY2t1cHNgIG11c3QgYWxyZWFkeSBleGlzdCwwNzAwIG93bmVkIGJ5IHRoZSB3b3Jrc3RhdGlvbiBhZ2VudCB1c2VyOyB0aGUgZXhhY3QgY2FzZSBjaGlsZDIwMjYxMDExLWluZmQtcHVycG9zZS1yMSBpcyBjcmVhdGVkIG9ubHkgYWZ0ZXIgYXV0aG9yaXR5IGNoZWNrcy4gTmF0aXZlIHBhcmVudCBgL2RhdGEvcHJpdmF0ZS9wdXJwb3NlLW92ZXJsYXktcjFgIGlzIHVuaXF1ZWx5IGNyZWF0ZWQgYnkgVUlEMTAwMDEgZm9yIGRyaWxsL2N1dG92ZXIgU1FMaXRlLWNvbnNpc3RlbnQgc25hcHNob3RzLCBlYWNoMDYwMC9ub25zeW1saW5rL3NpbmdsZS1saW5rLiBUaGUgYXR0YWNoZWQgc3RkbGliIHJlYWRvbmx5IGNoZWNrZXIgbXVzdCByZXBvcnQgc2NoZW1hNS9pbnRlZ3JpdHkvY291bnRzIGJlZm9yZSBhbnkgU3RvcmUvYWRtaW4gb24gbmF0aXZlIHNvdXJjZSBvciBvZmZsaW5lY2xvbmUuIEludmFsaWQgc3RhdGVzL2NvdW50IHNoYXBlcyBhbmQgYWxsIHJhdyBjaGlsZCBvdXRwdXRzIGFyZSB3aXRoaGVsZC4gTWFpbi1vbmx5IHNuYXBzaG90IGNsb3N1cmUgaXMgdmVyaWZpZWQgYmVmb3JlIGJpbmFyeSB0cmFuc2Zlcjsgc3RkaW4vc3Rkb3V0IHNuYXBzaG90IGJ5dGVzIHJlYWNoIG9ubHkgcHJpdmF0ZSBmaWxlcyBvciB0aGUgaXNvbGF0ZWQgcmVzdG9yZSBjb3B5LCBuZXZlciB0b29sL2NoYXQvbG9nIG91dHB1dC4gU3RyZWFtcyBzdG9wIGJleW9uZCBmcm96ZW4gYnl0ZSBjb3VudC81MTJNaUI7IGZhaWx1cmVzIHJldGFpbiBwYXJ0aWFsIHByaXZhdGUgZXZpZGVuY2UuXG5cbk5ldyBwcml2YXRlIG9mZmxpbmUgdm9sdW1lIGBpbmZkLXB1cnBvc2UtcjEtcmVzdG9yZS0yMDI2MTAxMWAgaXMgY3JlYXRlZCBvbmx5IG9uIHRoZSBwaW5uZWQgbG9jYWwgd29ya3N0YXRpb24gRG9ja2VyIHNvY2tldC9lbmdpbmUgYm50LWxhcDAwMSwgd2l0aCBsb2NhbGRyaXZlci9ub29wdGlvbnMgYW5kIGF0dGVtcHRub25jZSBsYWJlbHMuIE9uZS10aW1lIGluaXRpYWxpemVyIHJ1bnMgZXhhY3Q3NjNjIGFzIFVJRDAgd2l0aCBvbmx5IENBUF9DSE9XTiwgbmV0d29ya25vbmUvcmVhZC1vbmx5cm9vdC9uby1uZXdwcml2aWxlZ2VzLCBvbmUgTkVXIG5hbWVkdm9sdW1lIG1vdW50LCBubyBob3N0L2xpdmVQVkMvY3JlZGVudGlhbC9jb25maWcgbW91bnRzLiBJdCByZWNlaXZlcyBvbmx5IHRoZSBwcm90ZWN0ZWQgc25hcHNob3Qgb24gc3RkaW4sIHZlcmlmaWVzIGJ5dGVzLCBzZXRzIGZvbGRlcjA3MDAvZmlsZTA2MDAgb3duZWQxMDAwMS4gVGhlbiBVSUQxMDAwMSBwZXJmb3JtcyByZWFkb25seSBwcmUtb3BlbiB2YWxpZGF0aW9uLCBgLS1lbnRyeXBvaW50IGluZm9ybWVkLWRlY2lzaW9uLWFkbWluIGluc3BlY3QgLS1kYiAvcmVzdG9yZS9yZXZpZXcuc3FsaXRlYCwgbmV2ZXIgdGhlIHNlcnZpY2UgZW50cnlwb2ludC4gQSBzZWNvbmQgVUlEMTAwMDEvbmV0d29yay1ub25lIHJlYWRvbmx5IGludGVncml0eS9zY2hlbWEvY291bnQgY2hlY2sgYWZ0ZXIgYWRtaW4gbXVzdCBleGFjdGx5IGVxdWFsIHRoZSBmcm96ZW4gc25hcHNob3QgcHJvb2YsIGFuZCB0aGUgb3JpZ2luYWwgcHJvdGVjdGVkIHNuYXBzaG90IFNIQSBtdXN0IHJlbWFpbiB1bmNoYW5nZWQuIENsZWFudXAgY29tcGFyZXMgZXhhY3Qgbm9uY2UvY3JlYXRpb24gaWRlbnRpdHkgYW5kIHJlbW92ZXMgb25seSB0aGlzIGNsb25lIHZvbHVtZSwgcmV0YWluaW5nIGFsbCBuYXRpdmUvb2ZmY2x1c3RlciBvcmlnaW5hbHMuIENQVTEvbWVtb3J5MTI4TWlCOyBwcml2YXRlIG9mZmNsdXN0ZXIgY2FwYWNpdHkgYXQgbGVhc3QxR2lCKzE2TWlCIGFuZCBuYXRpdmUgZXN0aW1hdGVkIHR3by9vbmUtc25hcHNob3QgaGVhZHJvb20gcmVxdWlyZWQuXG5cbkV2ZXJ5IHBoYXNlIGZzeW5jcyBSVU5OSU5HIGludGVudCBiZWZvcmUgZGlzcGF0Y2guIEFueSBmYWlsdXJlL2ludGVycnVwdGlvbi9hbWJpZ3VvdXMgcmVzdWx0IHJlbWFpbnMgVU5DRVJUQUlOOyBzYW1lLXBoYXNlIHJldHJ5IGlzIHJlZnVzZWQuIFNlcGFyYXRlIG9wZXJhdG9yIGRpYWdub3NpcyBhbmQgYW55IG5lZWRlZCByZWNvdmVyeSBhcmUgcmVjb3JkZWQ7IG5laXRoZXIgc25hcHNob3RzIG5vciB1bnJlc29sdmVkL25ldyByZWNvcmRzIGFyZSByZW1vdmVkIHRvIG1ha2UgY2hlY2tzIGdyZWVuLiBGcm96ZW4gc25hcHNob3QvY2xvbmUgY291bnRlcnMgbXVzdCBhZ3JlZTsgbGl2ZSBwb3N0LWN1dG92ZXIvcm9sbGJhY2sgY291bnRlcnMgY2FuIGluY2x1ZGUgbGVnaXRpbWF0ZSBjb25jdXJyZW50IGNvbW1pdHMvc3RhdGUgdHJhbnNpdGlvbnMuXG5cbkV4aXN0aW5nIEFwcGxpY2F0aW9uIFVJRCBhbmQgYWN0dWFsIERlcGxveW1lbnQvUG9kL0NNL1BWQyBjdXN0b2R5L3NvdXJjZSBhcmUgY2hlY2tlZC4gQWxsIGZvdXIgb3duZXIgcmVuZGVyIEdpdCBibG9icyBtdXN0IG1hdGNoOyBvdmVycmlkZXMvcGx1Z2lucy9tdWx0aXBsZSBzb3VyY2VzIGFuZCBldmVuIGF1dG9tYXRlZDp7fSBhcmUgcmVqZWN0ZWQuIFRoZSBleGlzdGluZyBBcHBsaWNhdGlvbi5vcGVyYXRpb24gQVBJIGlzIHVzZWQgKG5hdGl2ZSBhcmdvY2QgQ0xJIGlzIGFic2VudCksIHdpdGggc2VydmVyIGRyeS1ydW4sIHJlc291cmNlVmVyc2lvbi9VSUQvc291cmNlIHRlc3RzLCBvbmUgRGVwbG95bWVudCBvbmx5LCBwcnVuZT1mYWxzZS4gRGlzcGF0Y2ggYWNrbm93bGVkZ21lbnQgaXMgbm90IHJvbGxvdXQgY29tcGxldGlvbi4gVmVyaWZ5IHJlcXVpcmVzIGV4YWN0IHN1Y2NlZWRlZCBvcGVyYXRpb24vY29udHJvbGxlciBnZW5lcmF0aW9uL1JlYWR5MSwgc2FtZSBzY2hlbWE1IERCLCBhY3R1YWwgaW5zdGFsbGVkIGhhc2gvbW9kZS9VSUQgYW5kMTBwdXJwb3NlIGNoZWNrcyBwbHVzIGJvdW5kZWQgbG9jYWxob3N0aGVhbHRoL3JlYWRpbmVzcy4gUHVycG9zZSB0cmFuc3BvcnQgcmVtYWlucyBzeW50aGV0aWMgYW5kIGlzIGV4cGxpY2l0bHkgbm90IGEgbmF0aXZlIFBEUCBhdXRob3JpdHkgdGVzdC4gUm9sbGJhY2sgcGlucyBwcmlvcjdkYi83ZjUgdGhyb3VnaCB0aGUgc2FtZSBzY29wZWQgd29ya2Zsb3cgYW5kIHJldGFpbnMgdGhlIGN1cnJlbnQgbGl2ZSBkYXRhYmFzZTsgaXQgbmV2ZXIgcmVzdG9yZXMgYW4gb2xkZXIgc25hcHNob3Qgb3ZlciBsYXRlciB3cml0ZXMuXG5cblNpeHRlZW4gc3ludGhldGljIHRlc3RzIHBhc3MgYWdhaW5zdCBmcm96ZW4gY2FzZSBtZXRhZGF0YTogYXV0aG9yaXR5L2V4cGlyeS9hY3Rvci9hbWJpZ3VpdHkgcmVmdXNhbHMsIGNyYXNoIGludGVudC9ubyByZXRyeS9vcmRlciwgY3JlZGVudGlhbC1vdXRwdXQgd2l0aGhvbGRpbmcsIHByaXZhdGUgYm91bmRlZCBiaW5hcnljb3B5LCB2b2x1bWUgcmVjcmVhdGlvbiBjbGVhbnVwIHJlZnVzYWwsIHNvdXJjZS9hdXRvbWF0aW9uL0NNL1BWQy9SZWFkeSBkcmlmdCwgcHJlLW9wZW4gZ2F0ZSByZWZ1c2FsIGFuZCBleGFjdCBEZXBsb3ltZW50LW9ubHkgb3BlcmF0aW9uL2RyeS1ydW4uIFRoZXNlIGFyZSBzb3VyY2UgdGVzdHMsIG5vdCBuYXRpdmUgYmFja3VwIG9yIHJlbGVhc2UgcHJvb2YuXG5cbkFsbCBwaGFzZXMsIGluY2x1ZGluZyByZWNvdmVyeSBhbmQgdmVyaWZpY2F0aW9uLCBhcmUgYm91bmRlZCBieSAyMDI2LTEwLTEyVDIzOjU5OjU5Wi4gVGhpcyBleHBsaWNpdGx5IHJlZmluZXMgdGhlIGVhcmxpZXIgcGFja2V0IGRlYWRsaW5lIHdvcmRpbmcgZm9yIHVuc3RhcnRlZCByZWxlYXNlOiB0aGUgaGVscGVyIGRvZXMgbm90IGV4dGVuZCBhdXRob3JpdHkgcGFzdCB0aGUgZGVhZGxpbmUuIFN0YXJ0IHN1ZmZpY2llbnRseSBlYXJseSB0byBjb21wbGV0ZSBkcmlsbC9jdXRvdmVyL3JlY292ZXJ5OyBhZnRlciBleHBpcnkgc3RvcCBhbmQgb2J0YWluIGEgZnJlc2ggZm91bmRlciBkZWNpc2lvbi4gVGhpcyBtYXkgZGVsYXkgcmVjb3ZlcnkgaWYgdGhlIHdpbmRvdyBpcyBleGhhdXN0ZWQsIGFuZCBtdXN0IGJlIGRpc2Nsb3NlZCBiZWZvcmUgYWNjZXB0YW5jZS5cblxuVGhlIGluaXRpYWwgMTEtZmlsZSBoZWxwZXIgZnJlZXplIFNIQTY1M2I2OGMzODkxYzA2NmY0MGQxMDRiZmM2N2EzNWRhNWU0MzY2MDVjZDk5YWZkNTJmYmFjNGI0N2E5NTUzZmUgYW5kIGluZGVwZW5kZW50IGNvbmRpdGlvbmFsIGZpbmRpbmdzIHJlbWFpbiBhcmNoaXZlZCB1bmRlciBleGVjdXRpb24taGlzdG9yeS9pbml0aWFsLTY1M2I2OGMzLiBUaGlzIHJlZmluZW1lbnQgaXMgdGhlIHNhbWUgcHJvcG9zYWwvdHJpYWw7IG5vIG5hdGl2ZSBleGVjdXRpb24gb3IgaHVtYW4gYWNjZXB0YW5jZSBoYXMgb2NjdXJyZWQuXG4iCiAgICB9LAogICAgImFjdHVhdG9yLnB5IjogewogICAgICAic2hhMjU2IjogIjZiOWQ2NDM5ODYyNDU0ZjI2MWVlNzdmMDViMjY1MTlmODEwOTU5OWIxZjY3MDc4YmM0ZTFmN2M3YzQwNjFiYTUiLAogICAgICAiY29udGVudCI6ICJcIlwiXCJPbmUgZml4ZWQgc3VwZXJ2aXNlZCBwaGFzZTsgbmV2ZXIgcnVuIHRoaXMgZHVyaW5nIHNvdXJjZSBwcmVwYXJhdGlvbi5cIlwiXCJcbmltcG9ydCBhcmdwYXJzZVxuaW1wb3J0IGhhc2hsaWJcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aFxuaW1wb3J0IHJlXG5pbXBvcnQgc2VsZWN0b3JzXG5pbXBvcnQgc3RhdFxuaW1wb3J0IHN1YnByb2Nlc3NcbmltcG9ydCBzeXNcbmltcG9ydCB0aW1lXG5cbmlmIHN5cy5mbGFncy5vcHRpbWl6ZTpcbiAgICByYWlzZSBTeXN0ZW1FeGl0KCdvcHRpbWl6ZWQgaW50ZXJwcmV0ZXIgcmVmdXNlZCcpXG5cblBIQVNFUyA9ICgnZHJpbGwtYmFja3VwJywgJ2RyaWxsLWNvcHknLCAnb2ZmbGluZS12ZXJpZnknLCAnY2xlYW51cC1vZmZsaW5lJyxcbiAgICAgICAgICAnY3V0b3Zlci1iYWNrdXAnLCAnY3V0b3Zlci1jb3B5JywgJ3JlbGVhc2UnLCAndmVyaWZ5JywgJ3JvbGxiYWNrJywgJ3JvbGxiYWNrLXZlcmlmeScpXG5cblxuZGVmIHJlcXVpcmUodmFsdWUsIHJlYXNvbik6XG4gICAgaWYgbm90IHZhbHVlOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHJlYXNvbilcblxuXG5kZWYgc2hhKHBhdGgpOlxuICAgIGRpZ2VzdCA9IGhhc2hsaWIuc2hhMjU2KClcbiAgICB3aXRoIFBhdGgocGF0aCkub3BlbigncmInKSBhcyBzdHJlYW06XG4gICAgICAgIGZvciBibG9jayBpbiBpdGVyKGxhbWJkYTogc3RyZWFtLnJlYWQoMTAyNCoqMiksIGInJyk6XG4gICAgICAgICAgICBkaWdlc3QudXBkYXRlKGJsb2NrKVxuICAgIHJldHVybiBkaWdlc3QuaGV4ZGlnZXN0KClcblxuXG5kZWYgcHJpdmF0ZShwYXRoLCBkaXJlY3Rvcnk9RmFsc2UpOlxuICAgIGluZm8gPSBQYXRoKHBhdGgpLmxzdGF0KClcbiAgICByZXF1aXJlKChzdGF0LlNfSVNESVIoaW5mby5zdF9tb2RlKSBpZiBkaXJlY3RvcnkgZWxzZSBzdGF0LlNfSVNSRUcoaW5mby5zdF9tb2RlKSlcbiAgICAgICAgICAgIGFuZCBpbmZvLnN0X3VpZCA9PSBvcy5nZXR1aWQoKSBhbmQgc3RhdC5TX0lNT0RFKGluZm8uc3RfbW9kZSkgPT0gKDBvNzAwIGlmIGRpcmVjdG9yeSBlbHNlIDBvNjAwKVxuICAgICAgICAgICAgYW5kIChkaXJlY3Rvcnkgb3IgaW5mby5zdF9ubGluayA9PSAxKSwgJ3ByaXZhdGUgb3duZWQgY3VzdG9keSByZXF1aXJlZCcpXG5cblJPT1QgPSBQYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50XG5DQVNFID0gUk9PVC5wYXJlbnRcbk9XTkVSID0gUGF0aCgnL2hvbWUvd29yc2NoL2luZm9ybWVkLWRlY2lzaW9uJylcbkNVU1RPRElBTiA9IFBhdGgoJy9ob21lL3dvcnNjaC90aGUtY3VzdG9kaWFuJylcbkNVU1RPRFkgPSBDVVNUT0RJQU4gLyAnLnByaXZhdGUtYmFja3Vwcy8yMDI2MTAxMS1pbmZkLXB1cnBvc2UtcjEnXG5TT0NLRVQgPSAndW5peDovLy92YXIvcnVuL2RvY2tlci5zb2NrJ1xuSU1BR0UgPSAnZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhJ1xuVk9MVU1FID0gJ2luZmQtcHVycG9zZS1yMS1yZXN0b3JlLTIwMjYxMDExJ1xuTUFYX0JZVEVTID0gNTEyICogMTAyNCoqMlxuXG5cbmRlZiBydW4oYXJndiwgYm9keT1Ob25lLCB0aW1lb3V0PTkwKTpcbiAgICByZXR1cm4gc3VicHJvY2Vzcy5ydW4oYXJndiwgaW5wdXQ9Ym9keSwgdGV4dD1UcnVlLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0aW1lb3V0PXRpbWVvdXQpXG5cblxuZGVmIGpzb25fcmVzdWx0KHJlc3VsdCk6XG4gICAgdHJ5OlxuICAgICAgICB2YWx1ZSA9IGpzb24ubG9hZHMocmVzdWx0LnN0ZG91dClcbiAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NhZmUgcGhhc2UgcmVjZWlwdCB1bmF2YWlsYWJsZTsgb3V0Y29tZSB1bmNlcnRhaW4nKSBmcm9tIE5vbmVcbiAgICByZXF1aXJlKHJlc3VsdC5yZXR1cm5jb2RlID09IDAgYW5kIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpIGFuZCB2YWx1ZS5nZXQoJ2FsbF9jaGVja3NfcGFzcycpIGlzIFRydWUsXG4gICAgICAgICAgICAncGhhc2UgZGlkIG5vdCB2ZXJpZnkgY29tcGxldGU7IHJhdyBvdXRwdXQgd2l0aGhlbGQ7IG5vIHJldHJ5JylcbiAgICBwZXJtaXR0ZWQgPSB7J3BoYXNlJywgJ2FsbF9jaGVja3NfcGFzcycsICdyYXdfb3V0cHV0X3dpdGhoZWxkJywgJ25hdGl2ZV9hcHByb3ZhbF92ZXJpZmllZF9ieV9yb290JyxcbiAgICAgICAgICAgICAgICAgJ25hdGl2ZV9hdXRoZW50aWNhdGVkX2dyYW50JywgJ3NvdXJjZV9yZWFkb25seV9iYXNlbGluZScsICdzbmFwc2hvdF9yZWFkb25seScsXG4gICAgICAgICAgICAgICAgICdzbmFwc2hvdF9zaGEyNTYnLCAnc25hcHNob3RfYnl0ZXMnLCAnc25hcHNob3RfZmlsZScsICduYXRpdmVfcGFyZW50X3ByaXZhdGUnLFxuICAgICAgICAgICAgICAgICAnbmF0aXZlX3VpZCcsICdwb2RfbmFtZScsICdwb2RfdWlkJywgJ2xpdmVfcmVhZG9ubHlfc2NoZW1hX2ludGVncml0eV9jb3VudHMnLFxuICAgICAgICAgICAgICAgICAnbGl2ZV9jb3VudHNfbWF5X2luY2x1ZGVfY29uY3VycmVudF9jb21taXRzJywgJ29wZXJhdGlvbl9yZXF1ZXN0ZWQnLCAnc291cmNlX3JldmlzaW9uJyxcbiAgICAgICAgICAgICAgICAgJ3Jlc291cmNlcycsICdwcnVuZScsICdyb2xsb3V0X3ZlcmlmaWVkJywgJ2xhdGVzdF9saXZlX2RhdGFiYXNlX3JldGFpbmVkJyxcbiAgICAgICAgICAgICAgICAgJ2NsaWVudF9kaWZmX3NoYTI1NicsICduYXRpdmVfcm9sbG91dF92ZXJpZmllZCcsICdjdXJyZW50X3NjaGVtYTVfZGF0YWJhc2VfcmV0YWluZWQnLFxuICAgICAgICAgICAgICAgICAncHJpdmF0ZV9jb3B5X3ZlcmlmaWVkJywgJ2luc3RhbGxlZF9wdXJwb3NlX2NoZWNrcycsICdwb2xpY3lfc2hhMjU2JyxcbiAgICAgICAgICAgICAgICAgJ3BvbGljeV9tb2RlJywgJ3BvbGljeV91aWQnLCAnaGVhbHRoX3N0YXR1c2VzJywgJ25hdGl2ZV9wcm92aWRlcl9wcm9iZScsICdyZWNvdmVyeV92ZXJpZmljYXRpb24nfVxuICAgIHJlcXVpcmUoc2V0KHZhbHVlKSA8PSBwZXJtaXR0ZWQsICd1bmV4cGVjdGVkIG91dHB1dCBmaWVsZHMgd2l0aGhlbGQnKVxuICAgIGZyb20gcmVjZWlwdF9zYWZldHkgaW1wb3J0IGNvdW50c1xuICAgIGZvciBuYW1lIGluICgnc291cmNlX3JlYWRvbmx5X2Jhc2VsaW5lJywgJ3NuYXBzaG90X3JlYWRvbmx5JywgJ2xpdmVfcmVhZG9ubHlfc2NoZW1hX2ludGVncml0eV9jb3VudHMnKTpcbiAgICAgICAgaWYgbmFtZSBpbiB2YWx1ZTpcbiAgICAgICAgICAgIGNvdW50cyh2YWx1ZVtuYW1lXSlcbiAgICBmb3IgbmFtZSBpbiAoJ3NuYXBzaG90X3NoYTI1NicsICdjbGllbnRfZGlmZl9zaGEyNTYnKTpcbiAgICAgICAgaWYgbmFtZSBpbiB2YWx1ZTpcbiAgICAgICAgICAgIHJlcXVpcmUocmUuZnVsbG1hdGNoKHInW2EtZjAtOV17NjR9JywgdmFsdWVbbmFtZV0pIGlzIG5vdCBOb25lLCAnaW52YWxpZCBvdXRwdXQgZGlnZXN0IHdpdGhoZWxkJylcbiAgICBpZiAnc25hcHNob3RfYnl0ZXMnIGluIHZhbHVlOlxuICAgICAgICByZXF1aXJlKHR5cGUodmFsdWVbJ3NuYXBzaG90X2J5dGVzJ10pIGlzIGludCBhbmQgMCA8IHZhbHVlWydzbmFwc2hvdF9ieXRlcyddIDw9IE1BWF9CWVRFUyxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBvdXRwdXQgc2l6ZSB3aXRoaGVsZCcpXG4gICAgaWYgJ3NuYXBzaG90X2ZpbGUnIGluIHZhbHVlOlxuICAgICAgICByZXF1aXJlKHZhbHVlWydzbmFwc2hvdF9maWxlJ10gaW4gKCdkcmlsbC5zcWxpdGUnLCAnY3V0b3Zlci5zcWxpdGUnKSwgJ2ludmFsaWQgb3V0cHV0IGZpbGUgd2l0aGhlbGQnKVxuICAgIHJldHVybiB2YWx1ZVxuXG5cbmRlZiBkb2NrZXIoYXJndiwgYm9keT1Ob25lLCB0aW1lb3V0PTEyMCk6XG4gICAgcmV0dXJuIHJ1bihbJ2RvY2tlcicsICctLWNvbmZpZycsIHN0cihDVVNUT0RZIC8gJ2VtcHR5LWRvY2tlci1jb25maWcnKSwgJy0taG9zdCcsIFNPQ0tFVF0gKyBhcmd2LFxuICAgICAgICAgICAgICAgYm9keT1ib2R5LCB0aW1lb3V0PXRpbWVvdXQpXG5cblxuZGVmIHJlbW90ZShwaGFzZSwgcmV2aXNpb24sIGFwcHJvdmVkKTpcbiAgICAjIEZpeGVkIG1vZHVsZSBpbXBvcnRlZCBvbmx5IGFmdGVyIG1haW4gdmVyaWZpZXMgZXZlcnkgZXhlY3V0b3Igc291cmNlIGhhc2guXG4gICAgZnJvbSBuYXRpdmVfcHJvZ3JhbSBpbXBvcnQgUFJPR1JBTVxuICAgIHBheWxvYWQgPSB7J3BoYXNlJzogcGhhc2UsICdzb3VyY2VfcmV2aXNpb24nOiByZXZpc2lvbiwgJ2FwcHJvdmFsJzogYXBwcm92ZWQsXG4gICAgICAgICAgICAgICAnc2VhbGVkJzoganNvbi5sb2FkcygoQ0FTRSAvICdzZWFsZWQtbGl2ZS1kZXBsb3ltZW50Lmpzb24nKS5yZWFkX3RleHQoKSksXG4gICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoganNvbi5sb2FkcygoQ0FTRSAvICdzZWFsZWQtbmF0aXZlLWRlcGVuZGVuY2llcy5qc29uJykucmVhZF90ZXh0KCkpLFxuICAgICAgICAgICAgICAgJ2NhbmRpZGF0ZSc6IGpzb24ubG9hZHMoKENBU0UgLyAnY2FuZGlkYXRlLWRlcGxveW1lbnQuanNvbicpLnJlYWRfdGV4dCgpKSxcbiAgICAgICAgICAgICAgICdyb2xsYmFjayc6IGpzb24ubG9hZHMoKENBU0UgLyAncm9sbGJhY2stZGVwbG95bWVudC5qc29uJykucmVhZF90ZXh0KCkpLFxuICAgICAgICAgICAgICAgJ3JlY2VpcHRfc2FmZXR5JzogKFJPT1QgLyAncmVjZWlwdF9zYWZldHkucHknKS5yZWFkX3RleHQoKSxcbiAgICAgICAgICAgICAgICdwdXJwb3NlX2NoZWNrcyc6IChDQVNFIC8gJ2NoZWNrX2luc3RhbGxlZC5weScpLnJlYWRfdGV4dCgpLFxuICAgICAgICAgICAgICAgJ3JlYWRvbmx5JzogKENBU0UgLyAnc3FsaXRlX3JlYWRvbmx5LnB5JykucmVhZF90ZXh0KCl9XG4gICAgc2NyaXB0ID0gUFJPR1JBTS5yZXBsYWNlKCdfX1BBWUxPQURfXycsIHJlcHIoanNvbi5kdW1wcyhwYXlsb2FkKSkpLnJlcGxhY2UoXG4gICAgICAgICdfX0dVQVJEX18nLCByZXByKChDQVNFIC8gJ2NoYW5nZV9ndWFyZC5weScpLnJlYWRfdGV4dCgpKSlcbiAgICByZXR1cm4ganNvbl9yZXN1bHQocnVuKFsnc3NoJywgJ3JhaWxpYW5jZTAxJywgJ3B5dGhvbjMgLSddLCBzY3JpcHQsIHRpbWVvdXQ9MjAwKSlcblxuXG5kZWYgY29weV9zbmFwc2hvdChwaGFzZSwgcmV2aXNpb24sIGFwcHJvdmVkLCBqb3VybmFsKTpcbiAgICBtZXRhZGF0YSA9IHJlbW90ZShwaGFzZSwgcmV2aXNpb24sIGFwcHJvdmVkKVxuICAgIGJhY2t1cF9waGFzZSA9ICdkcmlsbC1iYWNrdXAnIGlmIHBoYXNlID09ICdkcmlsbC1jb3B5JyBlbHNlICdjdXRvdmVyLWJhY2t1cCdcbiAgICBwcmlvciA9IGpvdXJuYWwuZGF0YVsncGhhc2VzJ11bYmFja3VwX3BoYXNlXVsncmVzdWx0J11cbiAgICBmb3Iga2V5IGluICgnc25hcHNob3Rfc2hhMjU2JywgJ3NuYXBzaG90X2J5dGVzJywgJ3NuYXBzaG90X2ZpbGUnLCAnc25hcHNob3RfcmVhZG9ubHknKTpcbiAgICAgICAgcmVxdWlyZShtZXRhZGF0YVtrZXldID09IHByaW9yW2tleV0sICdjbG9zZWQgZnJvemVuIHNuYXBzaG90IGNoYW5nZWQnKVxuICAgIG5hbWUgPSBtZXRhZGF0YVsnc25hcHNob3RfZmlsZSddXG4gICAgcmVxdWlyZShuYW1lIGluICgnZHJpbGwuc3FsaXRlJywgJ2N1dG92ZXIuc3FsaXRlJykgYW5kIDAgPCBtZXRhZGF0YVsnc25hcHNob3RfYnl0ZXMnXSA8PSBNQVhfQllURVMsXG4gICAgICAgICAgICAnZml4ZWQgYm91bmRlZCBzbmFwc2hvdCByZXF1aXJlZCcpXG4gICAgcG9kID0gbWV0YWRhdGFbJ3BvZF9uYW1lJ11cbiAgICByZXF1aXJlKHJlLmZ1bGxtYXRjaChyJ1thLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JywgcG9kKSBpcyBub3QgTm9uZSwgJ2ZpeGVkIG93bmVyIHBvZCBuYW1lIHJlcXVpcmVkJylcbiAgICBsb2NhbCA9IENVU1RPRFkgLyBuYW1lXG4gICAgZmQgPSBvcy5vcGVuKGxvY2FsLCBvcy5PX1dST05MWSB8IG9zLk9fQ1JFQVQgfCBvcy5PX0VYQ0wgfCBvcy5PX05PRk9MTE9XLCAwbzYwMClcbiAgICAjIEJpbmFyeSBzbmFwc2hvdCBzdGRvdXQgZ29lcyBvbmx5IHRvIGEgcHJpdmF0ZSBmaWxlLCBuZXZlciB0b29sL2NoYXQvbG9nIG91dHB1dC5cbiAgICAjIFNuYXBzaG90IHNjaGVtYS9jb3VudCBtZXRhZGF0YSB3YXMgdmFsaWRhdGVkIGJlZm9yZSBvcGVuaW5nIHRoaXMgZGVzdGluYXRpb24uXG4gICAgd2l0aCBvcy5mZG9wZW4oZmQsICd3YicpIGFzIGRlc3RpbmF0aW9uOlxuICAgICAgICBjb21tYW5kID0gKCdrdWJlY3RsIGV4ZWMgLW4gaW5mb3JtZWQtZGVjaXNpb24gJyArIHBvZCArXG4gICAgICAgICAgICAgICAgICAgJyAtYyBpbmZvcm1lZC1kZWNpc2lvbiAtLSBjYXQgL2RhdGEvcHJpdmF0ZS9wdXJwb3NlLW92ZXJsYXktcjEvJyArIG5hbWUpXG4gICAgICAgIHRyYW5zZmVyID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3NzaCcsICdyYWlsaWFuY2UwMScsIGNvbW1hbmRdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTClcbiAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9yKClcbiAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIodHJhbnNmZXIuc3Rkb3V0LCBzZWxlY3RvcnMuRVZFTlRfUkVBRClcbiAgICAgICAgZGVhZGxpbmUgPSB0aW1lLm1vbm90b25pYygpICsgMTUwXG4gICAgICAgIHJlY2VpdmVkID0gMFxuICAgICAgICB0cnk6XG4gICAgICAgICAgICB3aGlsZSBUcnVlOlxuICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKVxuICAgICAgICAgICAgICAgIHJlcXVpcmUocmVtYWluaW5nID4gMCBhbmQgc2VsZWN0b3Iuc2VsZWN0KHJlbWFpbmluZyksICdwcml2YXRlIHRyYW5zZmVyIHRpbWVkIG91dCcpXG4gICAgICAgICAgICAgICAgYmxvY2sgPSBvcy5yZWFkKHRyYW5zZmVyLnN0ZG91dC5maWxlbm8oKSwgMTAyNCoqMilcbiAgICAgICAgICAgICAgICBpZiBub3QgYmxvY2s6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQgKz0gbGVuKGJsb2NrKVxuICAgICAgICAgICAgICAgIHJlcXVpcmUocmVjZWl2ZWQgPD0gbWV0YWRhdGFbJ3NuYXBzaG90X2J5dGVzJ10gYW5kIHJlY2VpdmVkIDw9IE1BWF9CWVRFUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwcml2YXRlIGNvcHkgZXhjZWVkcyBmcm96ZW4gc25hcHNob3Qgc2l6ZScpXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24ud3JpdGUoYmxvY2spXG4gICAgICAgICAgICB0cmFuc2Zlci53YWl0KHRpbWVvdXQ9bWF4KDEsIGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKSkpXG4gICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgICBzZWxlY3Rvci5jbG9zZSgpXG4gICAgICAgICAgICB0cmFuc2Zlci5zdGRvdXQuY2xvc2UoKVxuICAgICAgICAgICAgaWYgdHJhbnNmZXIucG9sbCgpIGlzIE5vbmU6XG4gICAgICAgICAgICAgICAgdHJhbnNmZXIua2lsbCgpXG4gICAgICAgICAgICAgICAgdHJhbnNmZXIud2FpdCgpXG4gICAgICAgIGRlc3RpbmF0aW9uLmZsdXNoKClcbiAgICAgICAgb3MuZnN5bmMoZGVzdGluYXRpb24uZmlsZW5vKCkpXG4gICAgcHJpdmF0ZShsb2NhbClcbiAgICByZXF1aXJlKHRyYW5zZmVyLnJldHVybmNvZGUgPT0gMCBhbmQgbG9jYWwuc3RhdCgpLnN0X3NpemUgPT0gbWV0YWRhdGFbJ3NuYXBzaG90X2J5dGVzJ11cbiAgICAgICAgICAgIGFuZCBzaGEobG9jYWwpID09IG1ldGFkYXRhWydzbmFwc2hvdF9zaGEyNTYnXSwgJ3ByaXZhdGUgY29weSBpbmNvbXBsZXRlL3VuY2VydGFpbjsgcmV0YWluLCBubyByZXRyeScpXG4gICAgIyBSZS1yZWFkIGlkZW50aXR5L2hhc2ggYWZ0ZXIgdHJhbnNmZXIuIFRoaXMgaXMgdmVyaWZpY2F0aW9uLCBub3QgYSB3cml0ZSByZXRyeS5cbiAgICBhZnRlciA9IHJlbW90ZShwaGFzZSwgcmV2aXNpb24sIGFwcHJvdmVkKVxuICAgIHJlcXVpcmUoYWZ0ZXJbJ3BvZF91aWQnXSA9PSBtZXRhZGF0YVsncG9kX3VpZCddIGFuZCBhZnRlclsnc25hcHNob3Rfc2hhMjU2J10gPT0gbWV0YWRhdGFbJ3NuYXBzaG90X3NoYTI1NiddLFxuICAgICAgICAgICAgJ3NvdXJjZSBpZGVudGl0eS9zbmFwc2hvdCBjaGFuZ2VkIGR1cmluZyB0cmFuc2ZlcicpXG4gICAgcmV0dXJuIHsqKm1ldGFkYXRhLCAnb2ZmX2NsdXN0ZXJfcHJpdmF0ZV9jb3B5X3ZlcmlmaWVkJzogVHJ1ZSwgJ3NuYXBzaG90X2NvbnRlbnRzX291dHB1dCc6IEZhbHNlfVxuXG5cbmRlZiBvZmZsaW5lX3ZlcmlmeShqb3VybmFsKTpcbiAgICBmcm9tIHJlY2VpcHRfc2FmZXR5IGltcG9ydCBjb3VudHNcbiAgICBzbmFwc2hvdCA9IENVU1RPRFkgLyAnZHJpbGwuc3FsaXRlJ1xuICAgIHByaXZhdGUoc25hcHNob3QpXG4gICAgcHJldmlvdXMgPSBqb3VybmFsLmRhdGFbJ3BoYXNlcyddWydkcmlsbC1jb3B5J11bJ3Jlc3VsdCddXG4gICAgcmVxdWlyZShzaGEoc25hcHNob3QpID09IHByZXZpb3VzWydzbmFwc2hvdF9zaGEyNTYnXSwgJ3Byb3RlY3RlZCBzbmFwc2hvdCBieXRlcyBjaGFuZ2VkJylcbiAgICBpZGVudGl0eSA9IGRvY2tlcihbJ2luZm8nLCAnLS1mb3JtYXQnLCAne3tqc29uIC5OYW1lfX0nXSlcbiAgICByZXF1aXJlKGlkZW50aXR5LnJldHVybmNvZGUgPT0gMCBhbmQganNvbi5sb2FkcyhpZGVudGl0eS5zdGRvdXQpID09ICdibnQtbGFwMDAxJyxcbiAgICAgICAgICAgICdsb2NhbCBvZmZsaW5lIERvY2tlciBlbmdpbmUgaWRlbnRpdHkgY2hhbmdlZCcpXG4gICAgbGlzdGVkID0gZG9ja2VyKFsndm9sdW1lJywgJ2xzJywgJy0tZm9ybWF0JywgJ3t7Lk5hbWV9fSddKVxuICAgIHJlcXVpcmUobGlzdGVkLnJldHVybmNvZGUgPT0gMCBhbmQgVk9MVU1FIG5vdCBpbiBsaXN0ZWQuc3Rkb3V0LnNwbGl0bGluZXMoKSxcbiAgICAgICAgICAgICdkaXNwb3NhYmxlIHZvbHVtZSBhYnNlbmNlIG5vdCB2ZXJpZmllZCcpXG4gICAgbm9uY2UgPSBqb3VybmFsLmRhdGFbJ3BoYXNlcyddWydvZmZsaW5lLXZlcmlmeSddWydhdHRlbXB0X2lkJ11cbiAgICBsYWJlbHMgPSB7J2luZm9ybWVkLWRlY2lzaW9uLmNhc2UnOiAnaW5mZC1wdXJwb3NlLTIwMjYxMDExLXIxJyxcbiAgICAgICAgICAgICAgJ2luZm9ybWVkLWRlY2lzaW9uLnVzZSc6ICdvZmZsaW5lLXJlc3RvcmUtb25seScsICdpbmZvcm1lZC1kZWNpc2lvbi5hdHRlbXB0Jzogbm9uY2V9XG4gICAgY3JlYXRlZCA9IGRvY2tlcihbJ3ZvbHVtZScsICdjcmVhdGUnLCAnLS1kcml2ZXInLCAnbG9jYWwnLCAnLS1sYWJlbCcsICdpbmZvcm1lZC1kZWNpc2lvbi5jYXNlPWluZmQtcHVycG9zZS0yMDI2MTAxMS1yMScsXG4gICAgICAgICAgICAgICAgICAgICAgJy0tbGFiZWwnLCAnaW5mb3JtZWQtZGVjaXNpb24uYXR0ZW1wdD0nICsgbm9uY2UsXG4gICAgICAgICAgICAgICAgICAgICAgJy0tbGFiZWwnLCAnaW5mb3JtZWQtZGVjaXNpb24udXNlPW9mZmxpbmUtcmVzdG9yZS1vbmx5JywgVk9MVU1FXSlcbiAgICByZXF1aXJlKGNyZWF0ZWQucmV0dXJuY29kZSA9PSAwIGFuZCBjcmVhdGVkLnN0ZG91dC5zdHJpcCgpID09IFZPTFVNRSwgJ3ZvbHVtZSBjcmVhdGlvbiB1bmNlcnRhaW47IG5vIHJldHJ5JylcbiAgICBpbnNwZWN0ZWQgPSBkb2NrZXIoWyd2b2x1bWUnLCAnaW5zcGVjdCcsIFZPTFVNRV0pXG4gICAgcmVxdWlyZShpbnNwZWN0ZWQucmV0dXJuY29kZSA9PSAwLCAnbmV3IHZvbHVtZSBpZGVudGl0eSB1bmF2YWlsYWJsZScpXG4gICAgdm9sdW1lID0ganNvbi5sb2FkcyhpbnNwZWN0ZWQuc3Rkb3V0KVxuICAgIHJlcXVpcmUobGVuKHZvbHVtZSkgPT0gMSBhbmQgdm9sdW1lWzBdWydOYW1lJ10gPT0gVk9MVU1FIGFuZCB2b2x1bWVbMF0uZ2V0KCdMYWJlbHMnKSA9PSBsYWJlbHNcbiAgICAgICAgICAgIGFuZCB2b2x1bWVbMF0uZ2V0KCdEcml2ZXInKSA9PSAnbG9jYWwnIGFuZCBub3Qgdm9sdW1lWzBdLmdldCgnT3B0aW9ucycpXG4gICAgICAgICAgICBhbmQgdm9sdW1lWzBdLmdldCgnU2NvcGUnKSA9PSAnbG9jYWwnLCAnbmV3IGlzb2xhdGVkIHZvbHVtZSBpZGVudGl0eSBjaGFuZ2VkJylcbiAgICBpZGVudGl0eSA9IHtrZXk6IHZvbHVtZVswXVtrZXldIGZvciBrZXkgaW4gKCdOYW1lJywgJ0xhYmVscycsICdEcml2ZXInLCAnU2NvcGUnLCAnQ3JlYXRlZEF0Jyl9XG4gICAgam91cm5hbC5ub3RlKCdvZmZsaW5lLXZlcmlmeScsICdjcmVhdGVkX3ZvbHVtZV9pZGVudGl0eScsIGlkZW50aXR5KVxuICAgICMgT25lLXRpbWUgVUlEMC9DQVBfQ0hPV04gaW5pdGlhbGl6YXRpb24gaXMgaXNvbGF0ZWQgdG8gdGhlIE5FVyBuYW1lZCB2b2x1bWUuXG4gICAgIyBObyBob3N0L2xpdmUgUFZDL2NvbmZpZy90b2tlbiBtb3VudCBleGlzdHM7IHRoaXMgZGV0YWlsIG5lZWRzIHBhY2tldCByZXZpZXcuXG4gICAgaW5pdGlhbGl6ZXIgPSBcIlwiXCJpbXBvcnQgaGFzaGxpYixvcyxzdGF0LHN5c1xuaWYgc3lzLmZsYWdzLm9wdGltaXplOnJhaXNlIFJ1bnRpbWVFcnJvcignb3B0aW1pemVkIGludGVycHJldGVyIHJlZnVzZWQnKVxuZm9sZGVyPScvcmVzdG9yZSc7ZXhwZWN0ZWQ9RVhQRUNURURcbmlmIG9zLmxpc3RkaXIoZm9sZGVyKTpyYWlzZSBWYWx1ZUVycm9yKCduZXcgZW1wdHkgcHJpdmF0ZSB2b2x1bWUgcmVxdWlyZWQnKVxub3MuY2htb2QoZm9sZGVyLDBvNzAwKVxuZmQ9b3Mub3Blbihmb2xkZXIrJy9yZXZpZXcuc3FsaXRlJyxvcy5PX0NSRUFUfG9zLk9fRVhDTHxvcy5PX05PRk9MTE9XfG9zLk9fV1JPTkxZLDBvNjAwKVxuZGlnZXN0PWhhc2hsaWIuc2hhMjU2KCk7c2l6ZT0wXG53aXRoIG9zLmZkb3BlbihmZCwnd2InKSBhcyB0YXJnZXQ6XG4gd2hpbGUgVHJ1ZTpcbiAgYmxvY2s9c3lzLnN0ZGluLmJ1ZmZlci5yZWFkKDEwMjQqKjIpXG4gIGlmIG5vdCBibG9jazpicmVha1xuICBzaXplKz1sZW4oYmxvY2spXG4gIGlmIHNpemU+NTEyKjEwMjQqKjI6cmFpc2UgVmFsdWVFcnJvcigncHJpdmF0ZSByZXN0b3JlIHNpemUgZXhjZWVkcyBib3VuZCcpXG4gIHRhcmdldC53cml0ZShibG9jayk7ZGlnZXN0LnVwZGF0ZShibG9jaylcbiB0YXJnZXQuZmx1c2goKTtvcy5mc3luYyh0YXJnZXQuZmlsZW5vKCkpXG5pZiBkaWdlc3QuaGV4ZGlnZXN0KCkhPWV4cGVjdGVkOnJhaXNlIFZhbHVlRXJyb3IoJ3ByaXZhdGUgY29waWVkIHNuYXBzaG90IGRpZmZlcnMnKVxub3MuY2hvd24oZm9sZGVyKycvcmV2aWV3LnNxbGl0ZScsMTAwMDEsMTAwMDEpO29zLmNob3duKGZvbGRlciwxMDAwMSwxMDAwMSlcbnByaW50KCd7XCJhbGxfY2hlY2tzX3Bhc3NcIjp0cnVlLFwicHJpdmF0ZV9jb3B5X3ZlcmlmaWVkXCI6dHJ1ZX0nKVxuXCJcIlwiLnJlcGxhY2UoJ0VYUEVDVEVEJywgcmVwcihwcmV2aW91c1snc25hcHNob3Rfc2hhMjU2J10pKVxuICAgIHdpdGggc25hcHNob3Qub3BlbigncmInKSBhcyBzb3VyY2U6XG4gICAgICAgIGFyZ3YgPSBbJ2RvY2tlcicsICctLWNvbmZpZycsIHN0cihDVVNUT0RZIC8gJ2VtcHR5LWRvY2tlci1jb25maWcnKSwgJy0taG9zdCcsIFNPQ0tFVCxcbiAgICAgICAgICAgICAgICAncnVuJywgJy0tcm0nLCAnLWknLCAnLS1uZXR3b3JrJywgJ25vbmUnLCAnLS1yZWFkLW9ubHknLCAnLS1jcHVzJywgJzEnLCAnLS1tZW1vcnknLCAnMTI4bScsXG4gICAgICAgICAgICAgICAgJy0tdXNlcicsICcwOjAnLCAnLS1jYXAtZHJvcCcsICdBTEwnLCAnLS1jYXAtYWRkJywgJ0NIT1dOJyxcbiAgICAgICAgICAgICAgICAnLS1zZWN1cml0eS1vcHQnLCAnbm8tbmV3LXByaXZpbGVnZXMnLCAnLS1tb3VudCcsICd0eXBlPXZvbHVtZSxzcmM9JyArIFZPTFVNRSArICcsZHN0PS9yZXN0b3JlJyxcbiAgICAgICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsIElNQUdFLCAnLWMnLCBpbml0aWFsaXplcl1cbiAgICAgICAgY29waWVkID0gc3VicHJvY2Vzcy5ydW4oYXJndiwgc3RkaW49c291cmNlLCB0ZXh0PVRydWUsIGNhcHR1cmVfb3V0cHV0PVRydWUsIHRpbWVvdXQ9MTUwKVxuICAgIGpzb25fcmVzdWx0KGNvcGllZClcbiAgICBvcHRpb25zID0gWydydW4nLCAnLS1ybScsICctaScsICctLW5ldHdvcmsnLCAnbm9uZScsICctLXJlYWQtb25seScsICctLWNwdXMnLCAnMScsICctLW1lbW9yeScsICcxMjhtJyxcbiAgICAgICAgICAgICAgICctLXVzZXInLCAnMTAwMDE6MTAwMDEnLCAnLS1jYXAtZHJvcCcsICdBTEwnLCAnLS1zZWN1cml0eS1vcHQnLCAnbm8tbmV3LXByaXZpbGVnZXMnLFxuICAgICAgICAgICAgICAgJy0tbW91bnQnLCAndHlwZT12b2x1bWUsc3JjPScgKyBWT0xVTUUgKyAnLGRzdD0vcmVzdG9yZSddXG4gICAgcmVhZG9ubHkgPSBkb2NrZXIob3B0aW9ucyArIFsnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsIElNQUdFLCAnLScsICctLWRiJywgJy9yZXN0b3JlL3Jldmlldy5zcWxpdGUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAoQ0FTRSAvICdzcWxpdGVfcmVhZG9ubHkucHknKS5yZWFkX3RleHQoKSlcbiAgICByZXF1aXJlKHJlYWRvbmx5LnJldHVybmNvZGUgPT0gMCwgJ29mZmxpbmUgcHJlLW9wZW4gc2NoZW1hL2ludGVncml0eSBnYXRlIHJlZnVzZWQ7IG5ldmVyIG9wZW4gU3RvcmUnKVxuICAgIGNoZWNrZWQgPSBjb3VudHMoanNvbi5sb2FkcyhyZWFkb25seS5zdGRvdXQpKVxuICAgIHJlcXVpcmUoY2hlY2tlZCA9PSBwcmV2aW91c1snc25hcHNob3RfcmVhZG9ubHknXSwgJ2Zyb3plbiBzbmFwc2hvdC9jbG9uZSByZWFkb25seSBjb3VudHMgZGlmZmVyJylcbiAgICBhZG1pbiA9IGRvY2tlcihvcHRpb25zICsgWyctLWVudHJ5cG9pbnQnLCAnaW5mb3JtZWQtZGVjaXNpb24tYWRtaW4nLCBJTUFHRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnNwZWN0JywgJy0tZGInLCAnL3Jlc3RvcmUvcmV2aWV3LnNxbGl0ZSddKVxuICAgIHJlcXVpcmUoYWRtaW4ucmV0dXJuY29kZSA9PSAwLCAnb2ZmbGluZSBhZG1pbiByZXN1bHQgdW5jZXJ0YWluJylcbiAgICBhZG1pbl9jb3VudHMgPSBqc29uLmxvYWRzKGFkbWluLnN0ZG91dClcbiAgICByZXF1aXJlKGFkbWluX2NvdW50cyA9PSB7a2V5OiBjaGVja2VkW2tleV0gZm9yIGtleSBpbiAoJ3NjaGVtYV92ZXJzaW9uJywgJ2xpZmVjeWNsZScsICdvdXRib3gnLCAnc3VibWlzc2lvbnMnKX0sXG4gICAgICAgICAgICAnb2ZmbGluZSBhZG1pbiBjaGFuZ2VkIGZyb3plbiBzbmFwc2hvdCBjb3VudGVycycpXG4gICAgIyBBZG1pbiBTdG9yZSBjb25zdHJ1Y3Rpb24gbXVzdCBub3Qgc2lsZW50bHkgYWx0ZXIgc2NoZW1hL2ludGVncml0eS9jb3VudGVycy5cbiAgICBwb3N0ID0gZG9ja2VyKG9wdGlvbnMgKyBbJy0tZW50cnlwb2ludCcsICdweXRob24nLCBJTUFHRSwgJy0nLCAnLS1kYicsICcvcmVzdG9yZS9yZXZpZXcuc3FsaXRlJ10sXG4gICAgICAgICAgICAgICAgICAoQ0FTRSAvICdzcWxpdGVfcmVhZG9ubHkucHknKS5yZWFkX3RleHQoKSlcbiAgICByZXF1aXJlKHBvc3QucmV0dXJuY29kZSA9PSAwLCAnb2ZmbGluZSBwb3N0LWFkbWluIHJlYWRvbmx5IGludGVncml0eSBnYXRlIHJlZnVzZWQnKVxuICAgIHBvc3RfY2hlY2tlZCA9IGNvdW50cyhqc29uLmxvYWRzKHBvc3Quc3Rkb3V0KSlcbiAgICByZXF1aXJlKHBvc3RfY2hlY2tlZCA9PSBjaGVja2VkID09IHByZXZpb3VzWydzbmFwc2hvdF9yZWFkb25seSddLFxuICAgICAgICAgICAgJ29mZmxpbmUgYWRtaW4gYWx0ZXJlZCBmcm96ZW4gc25hcHNob3QgcHJvb2YnKVxuICAgIHByaXZhdGUoc25hcHNob3QpXG4gICAgcmVxdWlyZShzaGEoc25hcHNob3QpID09IHByZXZpb3VzWydzbmFwc2hvdF9zaGEyNTYnXSwgJ29yaWdpbmFsIHByb3RlY3RlZCBzbmFwc2hvdCBjaGFuZ2VkIGR1cmluZyBkcmlsbCcpXG4gICAgcmV0dXJuIHsnYWxsX2NoZWNrc19wYXNzJzogVHJ1ZSwgJ29mZmxpbmVfdm9sdW1lJzogVk9MVU1FLCAnb2ZmbGluZV9yZWFkb25seSc6IGNoZWNrZWQsXG4gICAgICAgICAgICAnb2ZmbGluZV9wb3N0X2FkbWluX3JlYWRvbmx5JzogcG9zdF9jaGVja2VkLCAnb3JpZ2luYWxfc25hcHNob3RfaGFzaF91bmNoYW5nZWQnOiBUcnVlLFxuICAgICAgICAgICAgJ2NyZWF0ZWRfdm9sdW1lX2lkZW50aXR5JzogaWRlbnRpdHksXG4gICAgICAgICAgICAnYWRtaW5fY291bnRzJzogYWRtaW5fY291bnRzLCAnbmV0d29yayc6ICdub25lJywgJ3J1bnRpbWVfdG9rZW5zX29yX2NvbmZpZ19tb3VudGVkJzogRmFsc2UsXG4gICAgICAgICAgICAnc2VydmljZV9lbnRyeXBvaW50X3N0YXJ0ZWQnOiBGYWxzZSwgJ29yaWdpbmFsX3NuYXBzaG90X3JldGFpbmVkJzogVHJ1ZX1cblxuXG5kZWYgY2xlYW51cF9vZmZsaW5lKGpvdXJuYWwpOlxuICAgIGluc3BlY3RlZCA9IGRvY2tlcihbJ3ZvbHVtZScsICdpbnNwZWN0JywgVk9MVU1FXSlcbiAgICByZXF1aXJlKGluc3BlY3RlZC5yZXR1cm5jb2RlID09IDAsICdvd25lZCBkaXNwb3NhYmxlIHZvbHVtZSBpZGVudGl0eSB1bnZlcmlmaWVkJylcbiAgICB2YWx1ZSA9IGpzb24ubG9hZHMoaW5zcGVjdGVkLnN0ZG91dClcbiAgICBleHBlY3RlZCA9IGpvdXJuYWwuZGF0YVsncGhhc2VzJ11bJ29mZmxpbmUtdmVyaWZ5J11bJ3Jlc3VsdCddWydjcmVhdGVkX3ZvbHVtZV9pZGVudGl0eSddXG4gICAgcmVxdWlyZShsZW4odmFsdWUpID09IDEgYW5kIHtrZXk6IHZhbHVlWzBdLmdldChrZXkpIGZvciBrZXkgaW4gZXhwZWN0ZWR9ID09IGV4cGVjdGVkXG4gICAgICAgICAgICBhbmQgbm90IHZhbHVlWzBdLmdldCgnT3B0aW9ucycpLCAndm9sdW1lIG93bmVyc2hpcC9yZWNyZWF0aW9uIGNoYW5nZWQnKVxuICAgIHJlbW92ZWQgPSBkb2NrZXIoWyd2b2x1bWUnLCAncm0nLCBWT0xVTUVdKVxuICAgIHJlcXVpcmUocmVtb3ZlZC5yZXR1cm5jb2RlID09IDAgYW5kIHJlbW92ZWQuc3Rkb3V0LnN0cmlwKCkgPT0gVk9MVU1FXG4gICAgICAgICAgICBhbmQgZG9ja2VyKFsndm9sdW1lJywgJ2luc3BlY3QnLCBWT0xVTUVdKS5yZXR1cm5jb2RlICE9IDAsXG4gICAgICAgICAgICAnY2xlYW51cCBvdXRjb21lIGFtYmlndW91czsgZG8gbm90IHJldHJ5JylcbiAgICByZXR1cm4geydhbGxfY2hlY2tzX3Bhc3MnOiBUcnVlLCAnb25seV9kaXNwb3NhYmxlX29mZmxpbmVfdm9sdW1lX3JlbW92ZWQnOiBWT0xVTUUsXG4gICAgICAgICAgICAnbmF0aXZlX2FuZF9vZmZjbHVzdGVyX29yaWdpbmFsX3NuYXBzaG90c19yZXRhaW5lZCc6IFRydWV9XG5cblxuZGVmIG1haW4oKTpcbiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1fX2RvY19fKVxuICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcGhhc2UnLCBjaG9pY2VzPVBIQVNFUywgcmVxdWlyZWQ9VHJ1ZSlcbiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJvb3QtYXV0aG9yaXR5LXJlY2VpcHQnLCB0eXBlPVBhdGgsIHJlcXVpcmVkPVRydWUpXG4gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yb290LW5hdGl2ZS1vdXRjb21lJywgdHlwZT1QYXRoLCByZXF1aXJlZD1UcnVlKVxuICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc291cmNlLXJldmlzaW9uJywgcmVxdWlyZWQ9VHJ1ZSlcbiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKVxuICAgIHJlcXVpcmUoYXJncy5yb290X2F1dGhvcml0eV9yZWNlaXB0ID09IFBhdGgoJy90bXAvc2VjdXJpdHktaW5mZC1wdXJwb3NlLXJvb3QtYXV0aG9yaXR5Lmpzb24nKVxuICAgICAgICAgICAgYW5kIGFyZ3Mucm9vdF9uYXRpdmVfb3V0Y29tZSA9PSBQYXRoKCcvdG1wL3NlY3VyaXR5LWluZmQtcHVycG9zZS1uYXRpdmUtb3V0Y29tZS1sYXRlc3QuanNvbicpLFxuICAgICAgICAgICAgJ2ZpeGVkIHN1cGVydmlzZWQgcmVjZWlwdCBwYXRocyByZXF1aXJlZCcpXG4gICAgcmVxdWlyZShyZS5mdWxsbWF0Y2gocidbMC05YS1mXXs0MH0nLCBhcmdzLnNvdXJjZV9yZXZpc2lvbikgaXMgbm90IE5vbmUsICdleGFjdCBzb3VyY2UgY29tbWl0IHJlcXVpcmVkJylcbiAgICAjIFZlcmlmeSBhbGwgcHJlcGFyZWQgZXhlY3V0b3IvaW5wdXQgYnl0ZXMgYmVmb3JlIHJlYWRpbmcgYXV0aG9yaXR5IG9yIGRpc3BhdGNoaW5nLlxuICAgIHBsYW4gPSBqc29uLmxvYWRzKChST09UIC8gJ2V4ZWN1dGlvbi1wbGFuLmpzb24nKS5yZWFkX3RleHQoKSlcbiAgICByZXF1aXJlKHNldChwbGFuWydleGVjdXRvcl9maWxlcyddKSA9PSB7J2FjdHVhdG9yLnB5JywgJ2F1dGhvcml0eV9qb3VybmFsLnB5JywgJ25hdGl2ZV9wcm9ncmFtLnB5JywgJ3JlY2VpcHRfc2FmZXR5LnB5J30sXG4gICAgICAgICAgICAnZml4ZWQgZXhlY3V0b3Igc291cmNlcyByZXF1aXJlZCcpXG4gICAgcmVxdWlyZShzZXQocGxhblsnb3duZXJfc291cmNlX2ZpbGVzJ10pID09IHsnZGVwbG95L2xpZmVjeWNsZS9hZG1pc3Npb24uY2FuZGlkYXRlLmpzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBsb3kvbGlmZWN5Y2xlL3NlcnZpY2UuY2FuZGlkYXRlLmpzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBsb3kvbGlmZWN5Y2xlL2t1c3RvbWl6YXRpb24ueWFtbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcGxveS9saWZlY3ljbGUvcmVnaXN0cmllcy5jYW5kaWRhdGUuanNvbid9LFxuICAgICAgICAgICAgJ2ZpeGVkIG93bmVyIGltYWdlIHNvdXJjZXMgcmVxdWlyZWQnKVxuICAgIGZvciByZWxhdGl2ZSwgZGlnZXN0IGluIHBsYW5bJ2V4ZWN1dG9yX2ZpbGVzJ10uaXRlbXMoKTpcbiAgICAgICAgdGFyZ2V0ID0gUk9PVCAvIHJlbGF0aXZlXG4gICAgICAgIHJlcXVpcmUobm90IHRhcmdldC5pc19zeW1saW5rKCkgYW5kIHNoYSh0YXJnZXQpID09IGRpZ2VzdCwgJ2V4ZWN1dG9yIHNvdXJjZSBieXRlcyBjaGFuZ2VkJylcbiAgICBmb3IgcmVsYXRpdmUsIGRpZ2VzdCBpbiBwbGFuWydjYXNlX2ZpbGVzJ10uaXRlbXMoKTpcbiAgICAgICAgcmVxdWlyZShub3QgUGF0aChyZWxhdGl2ZSkuaXNfYWJzb2x1dGUoKSBhbmQgJy4uJyBub3QgaW4gUGF0aChyZWxhdGl2ZSkucGFydHMsXG4gICAgICAgICAgICAgICAgJ2Nhc2Ugc291cmNlIHBhdGggZXNjYXBlZCcpXG4gICAgICAgIHRhcmdldCA9IENBU0UgLyByZWxhdGl2ZVxuICAgICAgICByZXF1aXJlKG5vdCB0YXJnZXQuaXNfc3ltbGluaygpIGFuZCBzaGEodGFyZ2V0KSA9PSBkaWdlc3QsICdjYXNlIHNvdXJjZSBieXRlcyBjaGFuZ2VkJylcbiAgICBmb3IgcmVsYXRpdmUsIGRpZ2VzdCBpbiBwbGFuWydvd25lcl9zb3VyY2VfZmlsZXMnXS5pdGVtcygpOlxuICAgICAgICB0YXJnZXQgPSBPV05FUiAvIHJlbGF0aXZlXG4gICAgICAgIHJlcXVpcmUobm90IHRhcmdldC5pc19zeW1saW5rKCkgYW5kIHNoYSh0YXJnZXQpID09IGRpZ2VzdCwgJ293bmVyIGltYWdlLW9ubHkgc291cmNlIGNoYW5nZWQnKVxuICAgICAgICBjb21taXR0ZWQgPSBzdWJwcm9jZXNzLnJ1bihbJ2dpdCcsICctQycsIHN0cihPV05FUiksICdzaG93JywgYXJncy5zb3VyY2VfcmV2aXNpb24gKyAnOicgKyByZWxhdGl2ZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVfb3V0cHV0PVRydWUpXG4gICAgICAgIHJlcXVpcmUoY29tbWl0dGVkLnJldHVybmNvZGUgPT0gMCBhbmQgaGFzaGxpYi5zaGEyNTYoY29tbWl0dGVkLnN0ZG91dCkuaGV4ZGlnZXN0KCkgPT0gZGlnZXN0LFxuICAgICAgICAgICAgICAgICdjb21taXR0ZWQgb3duZXIgcmVuZGVyIHNvdXJjZSBkaWZmZXJzIGZyb20gYXBwcm92ZWQgaW5wdXRzJylcbiAgICBoZWFkID0gcnVuKFsnZ2l0JywgJy1DJywgc3RyKE9XTkVSKSwgJ3Jldi1wYXJzZScsICdIRUFEJ10pXG4gICAgcmVxdWlyZShoZWFkLnJldHVybmNvZGUgPT0gMCBhbmQgaGVhZC5zdGRvdXQuc3RyaXAoKSA9PSBhcmdzLnNvdXJjZV9yZXZpc2lvbiwgJ293bmVyIHNvdXJjZSBIRUFEIGRpZmZlcnMnKVxuICAgIGZyb20gYXV0aG9yaXR5X2pvdXJuYWwgaW1wb3J0IEpvdXJuYWwsIGF1dGhvcml0eVxuICAgIHByaXZhdGUoYXJncy5yb290X2F1dGhvcml0eV9yZWNlaXB0KVxuICAgIHByaXZhdGUoYXJncy5yb290X25hdGl2ZV9vdXRjb21lKVxuICAgIHJlY2VpcHQgPSBqc29uLmxvYWRzKGFyZ3Mucm9vdF9hdXRob3JpdHlfcmVjZWlwdC5yZWFkX3RleHQoKSlcbiAgICByZXF1aXJlKHJlY2VpcHQuZ2V0KCduYXRpdmVfb3V0Y29tZV9zaGEyNTYnKSA9PSBzaGEoYXJncy5yb290X25hdGl2ZV9vdXRjb21lKSwgJ25hdGl2ZSBvdXRjb21lIGJ5dGVzIGNoYW5nZWQnKVxuICAgIHJlcXVpcmUocmVjZWlwdC5nZXQoJ2V4ZWN1dG9yX3BsYW5fc2hhMjU2JykgPT0gc2hhKFJPT1QgLyAnZXhlY3V0aW9uLXBsYW4uanNvbicpLFxuICAgICAgICAgICAgJ3Jvb3QgdmVyaWZpZWQgZXhlY3V0b3IgcGxhbiBkaWZmZXJzJylcbiAgICBhcHByb3ZlZCA9IGF1dGhvcml0eShyZWNlaXB0LCBqc29uLmxvYWRzKGFyZ3Mucm9vdF9uYXRpdmVfb3V0Y29tZS5yZWFkX3RleHQoKSksIHNoYShDQVNFIC8gJ21lbW8uanNvbicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc291cmNlX3JldmlzaW9uLCBhcmdzLnBoYXNlKVxuICAgIHBhcmVudCA9IENVU1RPRFkucGFyZW50XG4gICAgcHJpdmF0ZShwYXJlbnQsIGRpcmVjdG9yeT1UcnVlKVxuICAgIGlnbm9yZWQgPSBydW4oWydnaXQnLCAnLUMnLCBzdHIoQ1VTVE9ESUFOKSwgJ2NoZWNrLWlnbm9yZScsICctLW5vLWluZGV4Jywgc3RyKENVU1RPRFkgLyAnZHJpbGwuc3FsaXRlJyldKVxuICAgIHJlcXVpcmUoaWdub3JlZC5yZXR1cm5jb2RlID09IDAsICdvZmZjbHVzdGVyIGN1c3RvZHkgaXMgbm90IGlnbm9yZWQnKVxuICAgIGlmIG5vdCBDVVNUT0RZLmV4aXN0cygpOlxuICAgICAgICByZXF1aXJlKGFyZ3MucGhhc2UgPT0gJ2RyaWxsLWJhY2t1cCcsICdmaXJzdCBhcHByb3ZlZCBwaGFzZSBtdXN0IGNyZWF0ZSB1bmlxdWUgcHJpdmF0ZSBjdXN0b2R5JylcbiAgICAgICAgb3MubWtkaXIoQ1VTVE9EWSwgMG83MDApXG4gICAgcHJpdmF0ZShDVVNUT0RZLCBkaXJlY3Rvcnk9VHJ1ZSlcbiAgICBjYXBhY2l0eSA9IG9zLnN0YXR2ZnMoQ1VTVE9EWSlcbiAgICByZXF1aXJlKGNhcGFjaXR5LmZfYmF2YWlsICogY2FwYWNpdHkuZl9mcnNpemUgPj0gMiAqIE1BWF9CWVRFUyArIDE2ICogMTAyNCoqMixcbiAgICAgICAgICAgICdpbmRlcGVuZGVudCBwcm90ZWN0ZWQgY3VzdG9keSBoZWFkcm9vbSBpbnN1ZmZpY2llbnQnKVxuICAgIG9zLm1ha2VkaXJzKENVU1RPRFkgLyAnZW1wdHktZG9ja2VyLWNvbmZpZycsIG1vZGU9MG83MDAsIGV4aXN0X29rPVRydWUpXG4gICAgcHJpdmF0ZShDVVNUT0RZIC8gJ2VtcHR5LWRvY2tlci1jb25maWcnLCBkaXJlY3Rvcnk9VHJ1ZSlcbiAgICByZXF1aXJlKG5vdCBsaXN0KChDVVNUT0RZIC8gJ2VtcHR5LWRvY2tlci1jb25maWcnKS5pdGVyZGlyKCkpLCAncHVibGljIERvY2tlciByZWFkIGNvbmZpZyBtdXN0IHN0YXkgZW1wdHknKVxuICAgIGpvdXJuYWwgPSBKb3VybmFsKENVU1RPRFksIHsncHJvcG9zYWwnOiBwbGFuWydwcm9wb3NhbF9pZCddLCAnc291cmNlX3JldmlzaW9uJzogYXJncy5zb3VyY2VfcmV2aXNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lbW9fc2hhMjU2Jzogc2hhKENBU0UgLyAnbWVtby5qc29uJyksICdwbGFuX3NoYTI1Nic6IHNoYShST09UIC8gJ2V4ZWN1dGlvbi1wbGFuLmpzb24nKX0pXG4gICAgdHJ5OlxuICAgICAgICBqb3VybmFsLnN0YXJ0KGFyZ3MucGhhc2UsIGFwcHJvdmVkKSAjIGZzeW5jZWQgUlVOTklORyBiZWZvcmUgYW55IHBoYXNlIGVmZmVjdC5cbiAgICAgICAgaWYgYXJncy5waGFzZSBpbiAoJ2RyaWxsLWNvcHknLCAnY3V0b3Zlci1jb3B5Jyk6XG4gICAgICAgICAgICByZXN1bHQgPSBjb3B5X3NuYXBzaG90KGFyZ3MucGhhc2UsIGFyZ3Muc291cmNlX3JldmlzaW9uLCBhcHByb3ZlZCwgam91cm5hbClcbiAgICAgICAgZWxpZiBhcmdzLnBoYXNlID09ICdvZmZsaW5lLXZlcmlmeSc6XG4gICAgICAgICAgICByZXN1bHQgPSBvZmZsaW5lX3ZlcmlmeShqb3VybmFsKVxuICAgICAgICBlbGlmIGFyZ3MucGhhc2UgPT0gJ2NsZWFudXAtb2ZmbGluZSc6XG4gICAgICAgICAgICByZXN1bHQgPSBjbGVhbnVwX29mZmxpbmUoam91cm5hbClcbiAgICAgICAgZWxzZTpcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlbW90ZShhcmdzLnBoYXNlLCBhcmdzLnNvdXJjZV9yZXZpc2lvbiwgYXBwcm92ZWQpXG4gICAgICAgIGpvdXJuYWwuZmluaXNoKGFyZ3MucGhhc2UsIHJlc3VsdClcbiAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKSAjIE9ubHkgY291bnQvaGFzaC9pZGVudGl0eSByZWNlaXB0cywgbmV2ZXIgc25hcHNob3QgYnl0ZXMuXG4gICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgIHNhZmUgPSB7J2FsbF9jaGVja3NfcGFzcyc6IEZhbHNlLCAncGhhc2UnOiBhcmdzLnBoYXNlLCAnZmFpbHVyZV9jbGFzcyc6IHR5cGUoZXJyb3IpLl9fbmFtZV9fLFxuICAgICAgICAgICAgICAgICdmYWlsdXJlJzogJ2ZpeGVkIHBoYXNlIG91dGNvbWUgdW5jZXJ0YWluOyBvcmlnaW5hbCBldmlkZW5jZSByZXRhaW5lZDsgbm8gcmV0cnknLFxuICAgICAgICAgICAgICAgICdyYXdfb3V0cHV0X3dpdGhoZWxkJzogVHJ1ZX1cbiAgICAgICAgaWYgam91cm5hbC5kYXRhWydwaGFzZXMnXS5nZXQoYXJncy5waGFzZSwge30pLmdldCgnc3RhdGUnKSA9PSAnUlVOTklORyc6XG4gICAgICAgICAgICBqb3VybmFsLmZpbmlzaChhcmdzLnBoYXNlLCBzYWZlKVxuICAgICAgICBwcmludChqc29uLmR1bXBzKHNhZmUpKVxuICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDEpIGZyb20gTm9uZVxuICAgIGZpbmFsbHk6XG4gICAgICAgIGpvdXJuYWwuY2xvc2UoKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgdHJ5OlxuICAgICAgICBtYWluKClcbiAgICBleGNlcHQgRXhjZXB0aW9uOlxuICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCdzdXBlcnZpc2VkIGV4ZWN1dGlvbiByZWZ1c2VkIGJlZm9yZSBwaGFzZTsgcmF3IG91dHB1dCB3aXRoaGVsZCcpIGZyb20gTm9uZVxuIgogICAgfSwKICAgICJhdXRob3JpdHlfam91cm5hbC5weSI6IHsKICAgICAgInNoYTI1NiI6ICI3NGQ2YTkxMTY5Mjk2YTk5ZmE3ZGFjMmQwOTAyNTY3MjgwZjkxMGFmNzQzNTgwZWM0YjQ1NGYyYWJmODM3NGFhIiwKICAgICAgImNvbnRlbnQiOiAiXCJcIlwiU3VwZXJ2aXNlZCByZWNlaXB0IGJvb2trZWVwaW5nLCBub3QgYW4gYXV0aGVudGljYXRlZCBhcHByb3ZhbCBwcm92aWRlci5cIlwiXCJcbmltcG9ydCBkYXRldGltZVxuaW1wb3J0IGZjbnRsXG5pbXBvcnQgaGFzaGxpYlxuaW1wb3J0IGpzb25cbmltcG9ydCBvc1xuaW1wb3J0IHJlXG5mcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGhcbmltcG9ydCBzdGF0XG5pbXBvcnQgdXVpZFxuXG5GT1VOREVSID0geydraW5kJzogJ3BlcnNvbicsICdzdWInOiAndWlkPXBsYXRmb3JtLXJvb3Qsb3U9cGVvcGxlLGRjPW5ldGtpbmdkb20sZGM9bG9jYWwnfVxuTUVNT19JRCA9ICdpbmZkLTIwMjYxMDExLXB1cnBvc2Utb3ZlcmxheS1yMSdcblBST1BPU0FMID0gJ0lORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxJ1xuUEhBU0VTID0gKCdkcmlsbC1iYWNrdXAnLCAnZHJpbGwtY29weScsICdvZmZsaW5lLXZlcmlmeScsICdjbGVhbnVwLW9mZmxpbmUnLFxuICAgICAgICAgICdjdXRvdmVyLWJhY2t1cCcsICdjdXRvdmVyLWNvcHknLCAncmVsZWFzZScsICd2ZXJpZnknLCAncm9sbGJhY2snLCAncm9sbGJhY2stdmVyaWZ5JylcblxuXG5kZWYgcmVxdWlyZSh2YWx1ZSwgcmVhc29uKTpcbiAgICBpZiBub3QgdmFsdWU6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IocmVhc29uKVxuXG5cbmRlZiBzaGEocGF0aCk6XG4gICAgZGlnZXN0ID0gaGFzaGxpYi5zaGEyNTYoKVxuICAgIHdpdGggUGF0aChwYXRoKS5vcGVuKCdyYicpIGFzIHN0cmVhbTpcbiAgICAgICAgZm9yIGJsb2NrIGluIGl0ZXIobGFtYmRhOiBzdHJlYW0ucmVhZCgxMDI0KioyKSwgYicnKTpcbiAgICAgICAgICAgIGRpZ2VzdC51cGRhdGUoYmxvY2spXG4gICAgcmV0dXJuIGRpZ2VzdC5oZXhkaWdlc3QoKVxuXG5cbmRlZiBwcml2YXRlKHBhdGgsIGRpcmVjdG9yeT1GYWxzZSk6XG4gICAgaW5mbyA9IFBhdGgocGF0aCkubHN0YXQoKVxuICAgIHJlcXVpcmUoKHN0YXQuU19JU0RJUihpbmZvLnN0X21vZGUpIGlmIGRpcmVjdG9yeSBlbHNlIHN0YXQuU19JU1JFRyhpbmZvLnN0X21vZGUpKVxuICAgICAgICAgICAgYW5kIGluZm8uc3RfdWlkID09IG9zLmdldHVpZCgpIGFuZCBzdGF0LlNfSU1PREUoaW5mby5zdF9tb2RlKSA9PSAoMG83MDAgaWYgZGlyZWN0b3J5IGVsc2UgMG82MDApXG4gICAgICAgICAgICBhbmQgKGRpcmVjdG9yeSBvciBpbmZvLnN0X25saW5rID09IDEpLCAncHJpdmF0ZSBvd25lZCBjdXN0b2R5IHJlcXVpcmVkJylcblxuXG5kZWYgYXV0aG9yaXR5KHJlY2VpcHQsIG91dGNvbWUsIG1lbW9fc2hhLCBzb3VyY2VfcmV2aXNpb24sIHBoYXNlLCBub3c9Tm9uZSk6XG4gICAgXCJcIlwiUm9vdCBtdXN0IGZyZXNobHkgdmVyaWZ5IG5hdGl2ZSBvdXRjb21lIGF0IGZpeGVkIE9SSUdJTiBvdXRzaWRlIHRoaXMgaGVscGVyLlxuXG4gICAgUmVjZWlwdCBmaWxlcy9mbGFncyBhcmUgbm90IHNpZ25lZCBncmFudHMuIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBleGFjdFxuICAgIHN1cGVydmlzZWQgcmVjZWlwdCByZWxhdGlvbjsgZXhpc3RpbmcgaGFybmVzcy9mb3VuZGVyIGF1dGhvcml0eSByZW1haW5zIHRoZVxuICAgIGFjdHVhbCBwZXJtaXNzaW9uIGJvdW5kYXJ5LiBJdCBuZXZlciBhdXRoZW50aWNhdGVzIGEgY2FsbGVyIGFzIGh1bWFuLlxuICAgIFwiXCJcIlxuICAgIG5vdyA9IG5vdyBvciBkYXRldGltZS5kYXRldGltZS5ub3coZGF0ZXRpbWUudGltZXpvbmUudXRjKVxuICAgIHJlcXVpcmUocGhhc2UgaW4gUEhBU0VTLCAnZml4ZWQgcGhhc2UgcmVxdWlyZWQnKVxuICAgIHJlcXVpcmUocmVjZWlwdC5nZXQoJ3Byb3Bvc2FsX2lkJykgPT0gUFJPUE9TQUwgYW5kIHJlY2VpcHQuZ2V0KCdtZW1vX2lkJykgPT0gTUVNT19JRFxuICAgICAgICAgICAgYW5kIHJlY2VpcHQuZ2V0KCdtZW1vX3ZlcnNpb24nKSA9PSAxIGFuZCByZWNlaXB0LmdldCgnbWVtb19zaGEyNTYnKSA9PSBtZW1vX3NoYVxuICAgICAgICAgICAgYW5kIHJlY2VpcHQuZ2V0KCdzb3VyY2VfcmV2aXNpb24nKSA9PSBzb3VyY2VfcmV2aXNpb25cbiAgICAgICAgICAgIGFuZCByZWNlaXB0LmdldCgnYWN0aXZhdGlvbicpID09ICdBUFBST1ZFRCdcbiAgICAgICAgICAgIGFuZCByZWNlaXB0LmdldCgnYXV0aG9yaXR5X21vZGUnKSA9PSAnQURNSU5JU1RFUidcbiAgICAgICAgICAgIGFuZCByZWNlaXB0LmdldCgndGFyZ2V0JykgPT0gJ3JlYWxtOmt1YmVybmV0ZXMvcmFpbGlhbmNlMDEvaW5mb3JtZWQtZGVjaXNpb24nXG4gICAgICAgICAgICBhbmQgcmVjZWlwdC5nZXQoJ3ZlcmlmaWNhdGlvbl9tZXRob2QnKSA9PSAncm9vdC1maXhlZC1vcmlnaW4tbmF0aXZlLXJlYWRiYWNrJ1xuICAgICAgICAgICAgYW5kIHJlY2VpcHQuZ2V0KCdydW50aW1lX2F1dGhlbnRpY2F0ZWRfZ3JhbnQnKSBpcyBGYWxzZSxcbiAgICAgICAgICAgICdleGFjdCBleHRlcm5hbGx5IHZlcmlmaWVkIHN1cGVydmlzZWQgcmVjZWlwdCByZXF1aXJlZCcpXG4gICAgdmVyaWZpZWQgPSBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KHJlY2VpcHRbJ3ZlcmlmaWVkX2F0J10ucmVwbGFjZSgnWicsICcrMDA6MDAnKSlcbiAgICByZXF1aXJlKHZlcmlmaWVkLnR6aW5mbyBpcyBub3QgTm9uZSBhbmQgMCA8PSAobm93IC0gdmVyaWZpZWQpLnRvdGFsX3NlY29uZHMoKSA8PSAxMjAsXG4gICAgICAgICAgICAnZnJlc2ggcm9vdCBuYXRpdmUgcmVhZGJhY2sgcmVxdWlyZWQgYmVmb3JlIGV2ZXJ5IHBoYXNlJylcbiAgICBkZWFkbGluZSA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjYtMTAtMTJUMjM6NTk6NTkrMDA6MDAnKVxuICAgIHJlcXVpcmUobm93IDwgZGVhZGxpbmUsICdhcHByb3ZlZCBleGVjdXRpb24gd2luZG93IGV4cGlyZWQnKVxuICAgIHJlcXVpcmUob3V0Y29tZS5nZXQoJ21lbW9faWQnKSA9PSBNRU1PX0lEIGFuZCBvdXRjb21lLmdldCgncmV2aWV3Jywge30pLmdldCgnc3RhbGUnKSBpcyBGYWxzZVxuICAgICAgICAgICAgYW5kIG91dGNvbWVbJ3JldmlldyddLmdldCgnaW50YWtlX3N0YXRlJykgPT0gJ3JlYWR5JywgJ25hdGl2ZSByZXZpZXcgaXMgbm90IHJlYWR5L2N1cnJlbnQnKVxuICAgIHJldmlld19pZCA9IG91dGNvbWVbJ3JldmlldyddWydtZW1vX2lkJ11cbiAgICByZXF1aXJlKHJldmlld19pZCA9PSByZWNlaXB0LmdldCgncmV2aWV3X21lbW9faWQnKSwgJ25hdGl2ZSByZXZpZXcgaWRlbnRpdHkgY2hhbmdlZCcpXG4gICAgYWNjZXB0ZWQgPSBbeCBmb3IgeCBpbiBvdXRjb21lLmdldCgnZGlzcG9zaXRpb25zJywgW10pXG4gICAgICAgICAgICAgICAgaWYgeC5nZXQoJ3N1Ym1pc3Npb25fc3RhdGUnKSA9PSAnY29uZmlybWVkJ1xuICAgICAgICAgICAgICAgIGFuZCB4LmdldCgnZGlzcG9zaXRpb24nLCB7fSkuZ2V0KCd2ZXJiJykgPT0gJ2FjY2VwdCdcbiAgICAgICAgICAgICAgICBhbmQgeFsnZGlzcG9zaXRpb24nXS5nZXQoJ21lbW9fdmVyc2lvbicpID09IDFdXG4gICAgcmVxdWlyZShsZW4oYWNjZXB0ZWQpID09IDEsICdvbmUgY29uZmlybWVkIGZvdW5kZXIgYWNjZXB0YW5jZSByZXF1aXJlZCcpXG4gICAgYWNjZXB0ZWQgPSBhY2NlcHRlZFswXVsnZGlzcG9zaXRpb24nXVxuICAgIHJlcXVpcmUoYWNjZXB0ZWQuZ2V0KCdhY3RvcicpID09IEZPVU5ERVIgYW5kIGFjY2VwdGVkLmdldCgnbWVtb19pZCcpID09IHJldmlld19pZFxuICAgICAgICAgICAgYW5kIGFjY2VwdGVkLmdldCgnYXBwcm92YWxfaWQnKSA9PSByZWNlaXB0LmdldCgnYXBwcm92YWxfaWQnKVxuICAgICAgICAgICAgYW5kIGFjY2VwdGVkLmdldCgnaWQnKSA9PSByZWNlaXB0LmdldCgnZGlzcG9zaXRpb25faWQnKVxuICAgICAgICAgICAgYW5kIGFjY2VwdGVkLmdldCgnYXQnKSA9PSByZWNlaXB0LmdldCgnYWNjZXB0ZWRfYXQnKSwgJ2V4YWN0IGZvdW5kZXIgZGlzcG9zaXRpb24gbWlzbWF0Y2gnKVxuICAgIHJlcXVpcmUocmUuZnVsbG1hdGNoKHInW2EtZjAtOS1dezM2fScsIGFjY2VwdGVkWydhcHByb3ZhbF9pZCddKSBpcyBub3QgTm9uZVxuICAgICAgICAgICAgYW5kIHJlLmZ1bGxtYXRjaChyJ2Rpc3AtW2EtZjAtOS1dezM2fScsIGFjY2VwdGVkWydpZCddKSBpcyBub3QgTm9uZVxuICAgICAgICAgICAgYW5kIHJlLmZ1bGxtYXRjaChyJ3Jldmlldy1bYS1mMC05LV17MzZ9JywgcmV2aWV3X2lkKSBpcyBub3QgTm9uZSxcbiAgICAgICAgICAgICduYXRpdmUgZGlzcG9zaXRpb24gaWRlbnRpZmllcnMgYXJlIG1hbGZvcm1lZCcpXG4gICAgYWNjZXB0ZWRfYXQgPSBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KGFjY2VwdGVkWydhdCddLnJlcGxhY2UoJ1onLCAnKzAwOjAwJykpXG4gICAgcmVxdWlyZShhY2NlcHRlZF9hdC50emluZm8gaXMgbm90IE5vbmUgYW5kIGFjY2VwdGVkX2F0IDw9IHZlcmlmaWVkLCAnYWNjZXB0YW5jZSB0aW1lIG5vdCBib3VuZGVkJylcbiAgICByZXR1cm4ge2tleTogcmVjZWlwdFtrZXldIGZvciBrZXkgaW4gKCdhcHByb3ZhbF9pZCcsICdkaXNwb3NpdGlvbl9pZCcsICdhY2NlcHRlZF9hdCcsICd2ZXJpZmllZF9hdCcpfVxuXG5cbmNsYXNzIEpvdXJuYWw6XG4gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgaWRlbnRpdHkpOlxuICAgICAgICBzZWxmLnBhcmVudCA9IFBhdGgocGFyZW50KVxuICAgICAgICBwcml2YXRlKHNlbGYucGFyZW50LCBkaXJlY3Rvcnk9VHJ1ZSlcbiAgICAgICAgc2VsZi5wYXRoID0gc2VsZi5wYXJlbnQgLyAnZXhlY3V0aW9uLWpvdXJuYWwuanNvbidcbiAgICAgICAgc2VsZi5sb2NrID0gb3Mub3BlbihzZWxmLnBhcmVudCAvICdleGVjdXRpb24ubG9jaycsIG9zLk9fQ1JFQVQgfCBvcy5PX05PRk9MTE9XIHwgb3MuT19SRFdSLCAwbzYwMClcbiAgICAgICAgZmNudGwuZmxvY2soc2VsZi5sb2NrLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9DS19OQilcbiAgICAgICAgcHJpdmF0ZShzZWxmLnBhcmVudCAvICdleGVjdXRpb24ubG9jaycpXG4gICAgICAgIGlmIHNlbGYucGF0aC5leGlzdHMoKTpcbiAgICAgICAgICAgIHByaXZhdGUoc2VsZi5wYXRoKVxuICAgICAgICAgICAgc2VsZi5kYXRhID0ganNvbi5sb2FkcyhzZWxmLnBhdGgucmVhZF90ZXh0KCkpXG4gICAgICAgICAgICByZXF1aXJlKHNlbGYuZGF0YVsnaWRlbnRpdHknXSA9PSBpZGVudGl0eSwgJ2pvdXJuYWwgY2FzZS9zb3VyY2UgaWRlbnRpdHkgY2hhbmdlZCcpXG4gICAgICAgIGVsc2U6XG4gICAgICAgICAgICBzZWxmLmRhdGEgPSB7J2lkZW50aXR5JzogaWRlbnRpdHksICdwaGFzZXMnOiB7fX1cbiAgICAgICAgICAgIHNlbGYuc2F2ZSgpXG5cbiAgICBkZWYgc2F2ZShzZWxmKTpcbiAgICAgICAgdGVtcG9yYXJ5ID0gc2VsZi5wYXJlbnQgLyAnZXhlY3V0aW9uLWpvdXJuYWwubmV3J1xuICAgICAgICBmZCA9IG9zLm9wZW4odGVtcG9yYXJ5LCBvcy5PX0NSRUFUIHwgb3MuT19FWENMIHwgb3MuT19OT0ZPTExPVyB8IG9zLk9fV1JPTkxZLCAwbzYwMClcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgd2l0aCBvcy5mZG9wZW4oZmQsICd3JykgYXMgc3RyZWFtOlxuICAgICAgICAgICAgICAgIGpzb24uZHVtcChzZWxmLmRhdGEsIHN0cmVhbSwgaW5kZW50PTIpXG4gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKCdcXG4nKVxuICAgICAgICAgICAgICAgIHN0cmVhbS5mbHVzaCgpXG4gICAgICAgICAgICAgICAgb3MuZnN5bmMoc3RyZWFtLmZpbGVubygpKVxuICAgICAgICAgICAgb3MucmVwbGFjZSh0ZW1wb3JhcnksIHNlbGYucGF0aClcbiAgICAgICAgICAgIGRpcmVjdG9yeSA9IG9zLm9wZW4oc2VsZi5wYXJlbnQsIG9zLk9fRElSRUNUT1JZIHwgb3MuT19SRE9OTFkpXG4gICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgb3MuZnN5bmMoZGlyZWN0b3J5KVxuICAgICAgICAgICAgZmluYWxseTpcbiAgICAgICAgICAgICAgICBvcy5jbG9zZShkaXJlY3RvcnkpXG4gICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOlxuICAgICAgICAgICAgIyBSZXRhaW4gZXZpZGVuY2UgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgYW4gdW5jZXJ0YWluIGR1cmFibGUgaW50ZW50LlxuICAgICAgICAgICAgcmFpc2VcblxuICAgIGRlZiBzdGFydChzZWxmLCBwaGFzZSwgYXBwcm92YWwpOlxuICAgICAgICByZXF1aXJlKHBoYXNlIG5vdCBpbiBzZWxmLmRhdGFbJ3BoYXNlcyddLCAnYWxyZWFkeSBhdHRlbXB0ZWQgcGhhc2U7IG5vIHJldHJ5JylcbiAgICAgICAgcHJlZGVjZXNzb3JzID0gZGljdCh6aXAoUEhBU0VTWzE6OF0sIFBIQVNFU1s6N10pKVxuICAgICAgICBwcmVkZWNlc3NvcnNbJ3JvbGxiYWNrLXZlcmlmeSddID0gJ3JvbGxiYWNrJ1xuICAgICAgICBpZiBwaGFzZSBpbiBwcmVkZWNlc3NvcnM6XG4gICAgICAgICAgICByZXF1aXJlKHNlbGYuZGF0YVsncGhhc2VzJ10uZ2V0KHByZWRlY2Vzc29yc1twaGFzZV0sIHt9KS5nZXQoJ3N0YXRlJykgPT0gJ0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgICAgICAgJ3ByZWNlZGluZyBwaGFzZSBpcyBub3QgdmVyaWZpZWQgY29tcGxldGUnKVxuICAgICAgICBpZiBwaGFzZSA9PSAncm9sbGJhY2snOlxuICAgICAgICAgICAgcmVxdWlyZSgncmVsZWFzZScgaW4gc2VsZi5kYXRhWydwaGFzZXMnXSwgJ3JvbGxiYWNrIHJlcXVpcmVzIGEgcmVjb3JkZWQgcmVsZWFzZSBhdHRlbXB0JylcbiAgICAgICAgc2VsZi5kYXRhWydwaGFzZXMnXVtwaGFzZV0gPSB7J3N0YXRlJzogJ1JVTk5JTkcnLCAnYXBwcm92YWwnOiBhcHByb3ZhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0dGVtcHRfaWQnOiBzdHIodXVpZC51dWlkNCgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0ZWRfYXQnOiBkYXRldGltZS5kYXRldGltZS5ub3coZGF0ZXRpbWUudGltZXpvbmUudXRjKS5pc29mb3JtYXQoKX1cbiAgICAgICAgc2VsZi5zYXZlKClcblxuICAgIGRlZiBub3RlKHNlbGYsIHBoYXNlLCBrZXksIHZhbHVlKTpcbiAgICAgICAgcmVxdWlyZShzZWxmLmRhdGFbJ3BoYXNlcyddW3BoYXNlXVsnc3RhdGUnXSA9PSAnUlVOTklORycsICdwaGFzZSBpbnRlbnQgbWlzc2luZycpXG4gICAgICAgIHNlbGYuZGF0YVsncGhhc2VzJ11bcGhhc2VdW2tleV0gPSB2YWx1ZVxuICAgICAgICBzZWxmLnNhdmUoKVxuXG4gICAgZGVmIGZpbmlzaChzZWxmLCBwaGFzZSwgcmVzdWx0KTpcbiAgICAgICAgZW50cnkgPSBzZWxmLmRhdGFbJ3BoYXNlcyddW3BoYXNlXVxuICAgICAgICByZXF1aXJlKGVudHJ5WydzdGF0ZSddID09ICdSVU5OSU5HJywgJ3BoYXNlIGludGVudCBtaXNzaW5nJylcbiAgICAgICAgZW50cnlbJ3Jlc3VsdCddID0gcmVzdWx0XG4gICAgICAgIGVudHJ5WydzdGF0ZSddID0gJ0NPTVBMRVRFJyBpZiByZXN1bHQuZ2V0KCdhbGxfY2hlY2tzX3Bhc3MnKSBpcyBUcnVlIGVsc2UgJ1VOQ0VSVEFJTidcbiAgICAgICAgc2VsZi5zYXZlKClcblxuICAgIGRlZiBjbG9zZShzZWxmKTpcbiAgICAgICAgb3MuY2xvc2Uoc2VsZi5sb2NrKVxuIgogICAgfSwKICAgICJleGVjdXRpb24tcGxhbi5qc29uIjogewogICAgICAic2hhMjU2IjogImY1ZTVmYTkwNmZmMTlkM2E0NWQxMGRjZGIyODEwMzczYWUyMWY5Y2Y0NGMwNDcyZmYyYmQ0N2QzYmMzMzI4ZDYiLAogICAgICAiY29udGVudCI6ICJ7XG4gIFwia2luZFwiOiBcImluZm9ybWVkLWRlY2lzaW9uLnN1cGVydmlzZWQtbWVjaGFuaWNhbC1yZWxlYXNlLXBsYW5cIixcbiAgXCJ2ZXJzaW9uXCI6IDEsXG4gIFwicHJvcG9zYWxfaWRcIjogXCJJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MVwiLFxuICBcInRyaWFsX2lkXCI6IFwiaW5mZC1wdXJwb3NlLTIwMjYxMDExLXIxXCIsXG4gIFwic3RhdGVcIjogXCJwcmVwYXJlZC11bmFwcHJvdmVkXCIsXG4gIFwiZXhlY3V0b3JfZmlsZXNcIjoge1xuICAgIFwiYWN0dWF0b3IucHlcIjogXCI2YjlkNjQzOTg2MjQ1NGYyNjFlZTc3ZjA1YjI2NTE5ZjgxMDk1OTliMWY2NzA3OGJjNGUxZjdjN2M0MDYxYmE1XCIsXG4gICAgXCJhdXRob3JpdHlfam91cm5hbC5weVwiOiBcIjc0ZDZhOTExNjkyOTZhOTlmYTdkYWMyZDA5MDI1NjcyODBmOTEwYWY3NDM1ODBlYzRiNDU0ZjJhYmY4Mzc0YWFcIixcbiAgICBcIm5hdGl2ZV9wcm9ncmFtLnB5XCI6IFwiMzQ5ZjUxNmE0ZTU1ZjdmYjQ3NDcwMTQ0Y2U3ODFhNjY1ZmIwMDNlYmZmMzgwZDA1NGY2NDJiMjIxMzNkMWNkZVwiLFxuICAgIFwicmVjZWlwdF9zYWZldHkucHlcIjogXCI1YzU0MzczZjJkYzRiMDY0MDA4MjI1YzE4NmVmYjFkNWFmZGVlYzM2ZDE1MzUwYmRhMGExMmRlZDk3NjAyZDFiXCJcbiAgfSxcbiAgXCJjYXNlX2ZpbGVzXCI6IHtcbiAgICBcImNoYW5nZV9ndWFyZC5weVwiOiBcImYzNDhlNDQ5YzQ5ZjRkOWU0OWFmOWU4MmUwMTc2NGU3MTk3ODM3ZmQzZGY5ZDc1NmY1ODkxZDliOGQ5YjM4YmVcIixcbiAgICBcInNxbGl0ZV9yZWFkb25seS5weVwiOiBcImVlZjUzZGQyMzNlZWU3NGMxN2YyMDgyM2JkN2Y1Nzg3YzYwY2FkNzlhYzY0ODAyMWM5NDc5NjQzYzZjZTllMzhcIixcbiAgICBcInByZWZsaWdodC1pbnB1dHMuanNvblwiOiBcIjc1NmU3MmRhOWVjMzY1NzIyNDI0MjFiZWE4YjZkMjI4NTM5NGUzMzRmOTkxZGI1ZTkwZTliNDA5NTYzYjVmMDZcIixcbiAgICBcInNlYWxlZC1saXZlLWRlcGxveW1lbnQuanNvblwiOiBcImQxOGQyNzA2M2QwNmY1MzVhZTg4NGVhMDFmOTY3NDdmZTMwMTY4NTUxOGFiOTRiMWNiYTA3MmExZTE1MTkzNjJcIixcbiAgICBcInNlYWxlZC1uYXRpdmUtZGVwZW5kZW5jaWVzLmpzb25cIjogXCIwNDIzMjdhMDM2ZWQyNTRjZjk1ZGJlYjBjMDU2YWMyNWIwM2E2YTg0NGI5NWEzMzJjOTkyZGYyOTQzNjkxMzY5XCIsXG4gICAgXCJjYW5kaWRhdGUtZGVwbG95bWVudC5qc29uXCI6IFwiNzIyYThlMmRjNTJiZWMyMTdiZjk2MGUyM2IyZmRkZmM3YWMyN2QzNDNhYzg3NDM3OTBlMzE4M2RiODFhNmEwZVwiLFxuICAgIFwicm9sbGJhY2stZGVwbG95bWVudC5qc29uXCI6IFwiMzliM2Y0M2JiODRlZjQ5MjFjYzNhMWZiY2RjNDQ0NjEwNzQxZWQ4ODA5MTQ5ZDhmOGYxN2VkODA1ZjI2MjEyMVwiLFxuICAgIFwiY2hlY2tfaW5zdGFsbGVkLnB5XCI6IFwiYTM0YTUxYmU5YzlmMmIxNmEwNmE4ODE3M2I1YzZjNDkyYzk5NTdmZTAyMWNmNDEyYTg2YTE3Mzc3MzA2NDBhZFwiLFxuICAgIFwicHVibGlzaGVkLXZlcmlmaWNhdGlvbi5qc29uXCI6IFwiOGE2NzZjMzhmODlmOWNhNzYyYjhlYmU5NDViNWFjYjkwZDQ3YTRjYjM1MDY5MjY4N2FiYjk4NWJiYjJkOGFlMlwiLFxuICAgIFwic2VjdXJpdHktc3VtbWFyeS5qc29uXCI6IFwiMGVlNTY0MDBkYzcwM2Y3Yzk5NjhjMmEwYTNlYTAzOTBkODM2MmY4ZDBiYmY4MDAyYTJiZDdmYTU4ZjE5Y2I0NFwiXG4gIH0sXG4gIFwib3duZXJfc291cmNlX2ZpbGVzXCI6IHtcbiAgICBcImRlcGxveS9saWZlY3ljbGUvYWRtaXNzaW9uLmNhbmRpZGF0ZS5qc29uXCI6IFwiOTIzODJhNTZiMzQ5YzNiODk1ZTU4MDZlOTc1MDgyNTI3YmI5OWQxYTAwMTE0MGU2OWQ4NTdlNWIwMzkxZmE1NVwiLFxuICAgIFwiZGVwbG95L2xpZmVjeWNsZS9zZXJ2aWNlLmNhbmRpZGF0ZS5qc29uXCI6IFwiMzhiNzhiOWNiZWU1YWRlNzc1MGE1OGQ1MTU2Y2E0YzU3NzMzNTJlOTQ3YWNiMzA0ZWU3MTRiNTllNzQ5Y2ViNFwiLFxuICAgIFwiZGVwbG95L2xpZmVjeWNsZS9rdXN0b21pemF0aW9uLnlhbWxcIjogXCIxYmJjZTgxYmM2NzU4NDM0MzU0MTU3Zjg2MDE1MzQzMjBjNWQwMjkwNTg3OTA4ZmQxNWE2ZDI1ZTNmYTU3ZjQ3XCIsXG4gICAgXCJkZXBsb3kvbGlmZWN5Y2xlL3JlZ2lzdHJpZXMuY2FuZGlkYXRlLmpzb25cIjogXCI5YmFkNmRiNWZiYzIxNzhkMzFiMDQxMjAwMTZhNDE4MzBjMzU1MmZiYjllMjUxN2I3MThmOWJiZTg3Y2Y2NDllXCJcbiAgfSxcbiAgXCJjYW5kaWRhdGVfaW1hZ2VcIjogXCJmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2FcIixcbiAgXCJwcmlvcl9pbWFnZVwiOiBcImZvcmdlam8uY291bG9tYi5zb2NpYWwvY291bG9tYi9pbmZvcm1lZC1kZWNpc2lvbkBzaGEyNTY6N2Y1YzZjYjI5YzlmNzBhMDI2YmZlMzBlNzI5MzQyNzRkZGM2OTI2MTY3NmNmNmQ0NzZmODFkZDMyODEyZDE3M1wiLFxuICBcInNvdXJjZV9yZXZpc2lvblwiOiBcIm11c3QtYmUtZXhhY3QtZmluYWwtb3duZXItSEVBRC13aXRoLWFwcHJvdmVkLWZvdXItR2l0LWJsb2JzXCIsXG4gIFwicGhhc2VzXCI6IFtcbiAgICBcImRyaWxsLWJhY2t1cFwiLFxuICAgIFwiZHJpbGwtY29weVwiLFxuICAgIFwib2ZmbGluZS12ZXJpZnlcIixcbiAgICBcImNsZWFudXAtb2ZmbGluZVwiLFxuICAgIFwiY3V0b3Zlci1iYWNrdXBcIixcbiAgICBcImN1dG92ZXItY29weVwiLFxuICAgIFwicmVsZWFzZVwiLFxuICAgIFwidmVyaWZ5XCIsXG4gICAgXCJyb2xsYmFja1wiLFxuICAgIFwicm9sbGJhY2stdmVyaWZ5XCJcbiAgXSxcbiAgXCJhdXRob3JpemF0aW9uXCI6IFwiZnJlc2ggZXh0ZXJuYWxseSBhdXRoZW50aWNhdGVkIHJvb3QgZml4ZWQtb3JpZ2luIG5hdGl2ZSByZWFkYmFjayBiZWZvcmUgZWFjaCBwaGFzZTsgZXhhY3QgY29uZmlybWVkIHBsYXRmb3JtLXJvb3QgZGlzcG9zaXRpb24gYW5kIGN1cnJlbnQgcGFja2V0IFNIQS9zb3VyY2UgY29tbWl0OyByZWNlaXB0IGJvb2trZWVwaW5nIGlzIG5vdCBhbiBhdXRvbm9tb3VzIHNpZ25lZCBncmFudFwiLFxuICBcImV4ZWN1dGVfYnlcIjogXCIyMDI2LTEwLTEyVDIzOjU5OjU5WlwiLFxuICBcInJhd19vdXRwdXRfd2l0aGhlbGRcIjogdHJ1ZSxcbiAgXCJuYXRpdmVfZGF0YV9vcl93b3JrbG9hZF9hY3Rpb25fZXhlY3V0ZWRcIjogZmFsc2UsXG4gIFwiZGVhZGxpbmVfc2VtYW50aWNzXCI6IFwiQWxsIHBoYXNlcyBpbmNsdWRpbmcgdmVyaWZpY2F0aW9uL3JlY292ZXJ5IG11c3QgYmVnaW4gYmVmb3JlIGV4ZWN1dGVfYnkuIE5vIGV4dGVuc2lvbiBvciBhdXRvbWF0aWMgZW1lcmdlbmN5IGdyYW50OyBiZXlvbmQgZGVhZGxpbmUgc3RvcCBhbmQgb2J0YWluIGEgZnJlc2ggZm91bmRlciBkZWNpc2lvbi4gQ29tcGxldGUgdGhlIGJvdW5kZWQgZHJpbGwgYW5kIHJvbGxvdXQgZWFybHkgZW5vdWdoIHRvIGFsbG93IHJlY292ZXJ5IHdpdGhpbiB0aGUgd2luZG93LlwiXG59XG4iCiAgICB9LAogICAgIm5hdGl2ZV9wcm9ncmFtLnB5IjogewogICAgICAic2hhMjU2IjogIjM0OWY1MTZhNGU1NWY3ZmI0NzQ3MDE0NGNlNzgxYTY2NWZiMDAzZWJmZjM4MGQwNTRmNjQyYjIyMTMzZDFjZGUiLAogICAgICAiY29udGVudCI6ICJcIlwiXCJGaXhlZCByZW1vdGUgc291cmNlLCBwYXNzZWQgb25seSBhZnRlciBleGFjdCBzdXBlcnZpc2VkIGFwcHJvdmFsLlwiXCJcIlxuUFJPR1JBTSA9ICdcXG5pbXBvcnQgY29weSxkYXRldGltZSxoYXNobGliLGpzb24sb3MscmUsc3VicHJvY2VzcyxzeXNcXG5pZiBzeXMuZmxhZ3Mub3B0aW1pemU6cmFpc2UgUnVudGltZUVycm9yKFxcJ29wdGltaXplZCBpbnRlcnByZXRlciByZWZ1c2VkXFwnKVxcbnBheWxvYWQ9anNvbi5sb2FkcyhfX1BBWUxPQURfXylcXG5leGVjKF9fR1VBUkRfXylcXG5waGFzZT1wYXlsb2FkW1xcJ3BoYXNlXFwnXVxcbmlmIHBoYXNlIG5vdCBpbiAoXFwnZHJpbGwtYmFja3VwXFwnLFxcJ2N1dG92ZXItYmFja3VwXFwnLFxcJ2RyaWxsLWNvcHlcXCcsXFwnY3V0b3Zlci1jb3B5XFwnLFxcJ3JlbGVhc2VcXCcsXFwndmVyaWZ5XFwnLFxcJ3JvbGxiYWNrXFwnLFxcJ3JvbGxiYWNrLXZlcmlmeVxcJyk6cmFpc2UgVmFsdWVFcnJvcihcXCdmaXhlZCBuYXRpdmUgcGhhc2UgcmVxdWlyZWRcXCcpXFxuZGVhZGxpbmU9ZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdChcXCcyMDI2LTEwLTEyVDIzOjU5OjU5KzAwOjAwXFwnKVxcbmRlZiByZXF1aXJlKHZhbHVlLHJlYXNvbik6XFxuIGlmIG5vdCB2YWx1ZTpyYWlzZSBWYWx1ZUVycm9yKHJlYXNvbilcXG5yZXF1aXJlKGRhdGV0aW1lLmRhdGV0aW1lLm5vdyhkYXRldGltZS50aW1lem9uZS51dGMpPGRlYWRsaW5lLFxcJ2V4ZWN1dGlvbiB3aW5kb3cgZXhwaXJlZFxcJylcXG5lbnY9eyoqb3MuZW52aXJvbixcXCdLVUJFQ09ORklHXFwnOlxcJy9ldGMvcmFuY2hlci9rM3MvazNzLnlhbWxcXCd9XFxuZGVmIHJ1bihhcmd2LGJvZHk9Tm9uZSx0aW1lb3V0PTkwKTpcXG4gcmV0dXJuIHN1YnByb2Nlc3MucnVuKGFyZ3YsaW5wdXQ9Ym9keSx0ZXh0PVRydWUsY2FwdHVyZV9vdXRwdXQ9VHJ1ZSx0aW1lb3V0PXRpbWVvdXQsZW52PWVudilcXG5kZWYgcmVhZChraW5kLG5hbWUsbmFtZXNwYWNlKTpcXG4gcmVzdWx0PXJ1bihbXFwna3ViZWN0bFxcJyxcXCdnZXRcXCcsa2luZCxuYW1lLFxcJy1uXFwnLG5hbWVzcGFjZSxcXCctb1xcJyxcXCdqc29uXFwnXSlcXG4gcmVxdWlyZShyZXN1bHQucmV0dXJuY29kZT09MCxcXCdmaXhlZCBtZXRhZGF0YSByZWFkIHJlZnVzZWRcXCcpXFxuIHJldHVybiBqc29uLmxvYWRzKHJlc3VsdC5zdGRvdXQpXFxuc2VhbGVkPXBheWxvYWRbXFwnc2VhbGVkXFwnXTsgZGVwZW5kZW5jaWVzPXBheWxvYWRbXFwnZGVwZW5kZW5jaWVzXFwnXVxcbmxpdmU9cmVhZChcXCdkZXBsb3ltZW50XFwnLFxcJ2luZm9ybWVkLWRlY2lzaW9uXFwnLFxcJ2luZm9ybWVkLWRlY2lzaW9uXFwnKVxcbmNtPXJlYWQoXFwnY29uZmlnbWFwXFwnLFxcJ2luZm9ybWVkLWRlY2lzaW9uLXJ1bnRpbWUtNmMyMjE4NzhkMDUxXFwnLFxcJ2luZm9ybWVkLWRlY2lzaW9uXFwnKVxcbnB2Yz1yZWFkKFxcJ3B2Y1xcJyxcXCdpbmZvcm1lZC1kZWNpc2lvbi1kYXRhXFwnLFxcJ2luZm9ybWVkLWRlY2lzaW9uXFwnKVxcbmNoZWNrX2RlcGVuZGVuY2llcyhjbSxwdmMsZGVwZW5kZW5jaWVzKVxcbmFwcD1yZWFkKFxcJ2FwcGxpY2F0aW9uXFwnLFxcJ2luZm9ybWVkLWRlY2lzaW9uXFwnLFxcJ2FyZ29jZFxcJylcXG5yZXF1aXJlKGFwcFtcXCdtZXRhZGF0YVxcJ11bXFwndWlkXFwnXT09XFwnNDk5ODY4ZjItZWFiYy00ZGY0LWFlMzEtYjg5Y2U1OGQ3NTBkXFwnLFxcJ0FwcGxpY2F0aW9uIFVJRCBjaGFuZ2VkXFwnKVxcbnJlcXVpcmUoYXBwW1xcJ3NwZWNcXCddW1xcJ3NvdXJjZVxcJ11bXFwncmVwb1VSTFxcJ109PVxcJ2h0dHBzOi8vZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uLmdpdFxcJ1xcbiBhbmQgYXBwW1xcJ3NwZWNcXCddW1xcJ3NvdXJjZVxcJ11bXFwncGF0aFxcJ109PVxcJ2RlcGxveS9saWZlY3ljbGVcXCdcXG4gYW5kIGFwcFtcXCdzcGVjXFwnXVtcXCdkZXN0aW5hdGlvblxcJ109PXtcXCduYW1lc3BhY2VcXCc6XFwnaW5mb3JtZWQtZGVjaXNpb25cXCcsXFwnc2VydmVyXFwnOlxcJ2h0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Y1xcJ31cXG4gYW5kIGFwcFtcXCdzcGVjXFwnXS5nZXQoXFwnc3luY1BvbGljeVxcJyx7fSkuZ2V0KFxcJ2F1dG9tYXRlZFxcJykgaXMgTm9uZVxcbiBhbmQgc2V0KGFwcFtcXCdzcGVjXFwnXVtcXCdzb3VyY2VcXCddKT09e1xcJ3JlcG9VUkxcXCcsXFwncGF0aFxcJyxcXCd0YXJnZXRSZXZpc2lvblxcJ30gYW5kIG5vdCBhcHBbXFwnc3BlY1xcJ10uZ2V0KFxcJ3NvdXJjZXNcXCcpLFxcJ0FwcGxpY2F0aW9uIG93bmVyL3Njb3BlIGNoYW5nZWRcXCcpXFxuZXhwZWN0ZWQ9Y29weS5kZWVwY29weShzZWFsZWQpXFxuaWYgcGhhc2U9PVxcJ3ZlcmlmeVxcJzpleHBlY3RlZFtcXCdzcGVjXFwnXVtcXCd0ZW1wbGF0ZVxcJ11bXFwnc3BlY1xcJ11bXFwnY29udGFpbmVyc1xcJ11bMF1bXFwnaW1hZ2VcXCddPUNBTkRJREFURVxcbmlmIHBoYXNlPT1cXCdyb2xsYmFja1xcJzpcXG4gaW1hZ2U9bGl2ZVtcXCdzcGVjXFwnXVtcXCd0ZW1wbGF0ZVxcJ11bXFwnc3BlY1xcJ11bXFwnY29udGFpbmVyc1xcJ11bMF1bXFwnaW1hZ2VcXCddXFxuIHJlcXVpcmUoaW1hZ2UgaW4gKEJBU0UsQ0FORElEQVRFKSxcXCdyb2xsYmFjayBpbWFnZSBpcyBvdXRzaWRlIHNhbWUtc2NoZW1hIHBhaXJcXCcpXFxuIGV4cGVjdGVkW1xcJ3NwZWNcXCddW1xcJ3RlbXBsYXRlXFwnXVtcXCdzcGVjXFwnXVtcXCdjb250YWluZXJzXFwnXVswXVtcXCdpbWFnZVxcJ109aW1hZ2VcXG5jaGVja19jdXJyZW50KGxpdmUsZXhwZWN0ZWQpXFxuaWYgcGhhc2UhPVxcJ3JvbGxiYWNrXFwnOlxcbiByZXF1aXJlKGxpdmUuZ2V0KFxcJ3N0YXR1c1xcJyx7fSkuZ2V0KFxcJ3JlYWR5UmVwbGljYXNcXCcpPT0xXFxuICBhbmQgbGl2ZVtcXCdzdGF0dXNcXCddLmdldChcXCd1cGRhdGVkUmVwbGljYXNcXCcpPT0xXFxuICBhbmQgbGl2ZVtcXCdzdGF0dXNcXCddLmdldChcXCdvYnNlcnZlZEdlbmVyYXRpb25cXCcpPT1saXZlW1xcJ21ldGFkYXRhXFwnXVtcXCdnZW5lcmF0aW9uXFwnXSxcXCdzZXJ2aWNlIG5vdCBSZWFkeTFcXCcpXFxudGFyZ2V0PXBheWxvYWRbXFwnc291cmNlX3JldmlzaW9uXFwnXSBpZiBwaGFzZT09XFwndmVyaWZ5XFwnIGVsc2UgXFwnN2RiODQ4NWZmZWNkZWJmYWJkNzdhOWRhZWMwODU1NTNjNzRiZjBiZlxcJ1xcbmlmIHBoYXNlPT1cXCdyb2xsYmFja1xcJzpyZXF1aXJlKGFwcFtcXCdzcGVjXFwnXVtcXCdzb3VyY2VcXCddW1xcJ3RhcmdldFJldmlzaW9uXFwnXSBpbiAodGFyZ2V0LHBheWxvYWRbXFwnc291cmNlX3JldmlzaW9uXFwnXSksXFwncm9sbGJhY2sgc291cmNlIGlzIG91dHNpZGUgcGFpclxcJylcXG5lbHNlOnJlcXVpcmUoYXBwW1xcJ3NwZWNcXCddW1xcJ3NvdXJjZVxcJ11bXFwndGFyZ2V0UmV2aXNpb25cXCddPT10YXJnZXQsXFwndW5leHBlY3RlZCBzb3VyY2UgcGluXFwnKVxcbnJlc3VsdD17XFwncGhhc2VcXCc6cGhhc2UsXFwnYWxsX2NoZWNrc19wYXNzXFwnOkZhbHNlLFxcJ3Jhd19vdXRwdXRfd2l0aGhlbGRcXCc6VHJ1ZSxcXG4gXFwnbmF0aXZlX2FwcHJvdmFsX3ZlcmlmaWVkX2J5X3Jvb3RcXCc6cGF5bG9hZFtcXCdhcHByb3ZhbFxcJ10sXFwnbmF0aXZlX2F1dGhlbnRpY2F0ZWRfZ3JhbnRcXCc6RmFsc2V9XFxudHJ5OlxcbiBpZiBwaGFzZSBpbiAoXFwnZHJpbGwtYmFja3VwXFwnLFxcJ2N1dG92ZXItYmFja3VwXFwnLFxcJ2RyaWxsLWNvcHlcXCcsXFwnY3V0b3Zlci1jb3B5XFwnLFxcJ3JlbGVhc2VcXCcsXFwndmVyaWZ5XFwnLFxcJ3JvbGxiYWNrLXZlcmlmeVxcJyk6XFxuICBwb2RsaXN0PXJ1bihbXFwna3ViZWN0bFxcJyxcXCdnZXRcXCcsXFwncG9kc1xcJyxcXCctblxcJyxcXCdpbmZvcm1lZC1kZWNpc2lvblxcJyxcXCctbFxcJyxcXCdhcHAua3ViZXJuZXRlcy5pby9uYW1lPWluZm9ybWVkLWRlY2lzaW9uXFwnLFxcJy1vXFwnLFxcJ2pzb25cXCddKVxcbiAgcmVxdWlyZShwb2RsaXN0LnJldHVybmNvZGU9PTAsXFwncG9kIG1ldGFkYXRhIHF1ZXJ5IHJlZnVzZWRcXCcpXFxuICBwb2RzPVtwIGZvciBwIGluIGpzb24ubG9hZHMocG9kbGlzdC5zdGRvdXQpW1xcJ2l0ZW1zXFwnXSBpZiBub3QgcFtcXCdtZXRhZGF0YVxcJ10uZ2V0KFxcJ2RlbGV0aW9uVGltZXN0YW1wXFwnKV1cXG4gIHJlcXVpcmUobGVuKHBvZHMpPT0xLFxcJ2V4YWN0IHNpbmdsZSBsaXZlIG93bmVyIHBvZCByZXF1aXJlZFxcJyk7cG9kPXBvZHNbMF1cXG4gIHJlcXVpcmUocG9kW1xcJ3N0YXR1c1xcJ10uZ2V0KFxcJ3BoYXNlXFwnKT09XFwnUnVubmluZ1xcJyBhbmQgbGVuKHBvZFtcXCdzcGVjXFwnXVtcXCdjb250YWluZXJzXFwnXSk9PTFcXG4gICBhbmQgcG9kW1xcJ3NwZWNcXCddW1xcJ2NvbnRhaW5lcnNcXCddWzBdW1xcJ2ltYWdlXFwnXT09ZXhwZWN0ZWRbXFwnc3BlY1xcJ11bXFwndGVtcGxhdGVcXCddW1xcJ3NwZWNcXCddW1xcJ2NvbnRhaW5lcnNcXCddWzBdW1xcJ2ltYWdlXFwnXVxcbiAgIGFuZCBsZW4ocG9kW1xcJ3N0YXR1c1xcJ10uZ2V0KFxcJ2NvbnRhaW5lclN0YXR1c2VzXFwnLFtdKSk9PTFcXG4gICBhbmQgcG9kW1xcJ3N0YXR1c1xcJ11bXFwnY29udGFpbmVyU3RhdHVzZXNcXCddWzBdLmdldChcXCduYW1lXFwnKT09XFwnaW5mb3JtZWQtZGVjaXNpb25cXCdcXG4gICBhbmQgcG9kW1xcJ3N0YXR1c1xcJ11bXFwnY29udGFpbmVyU3RhdHVzZXNcXCddWzBdLmdldChcXCdyZWFkeVxcJykgaXMgVHJ1ZSxcXCdvd25lciBwb2QgcmVhZGluZXNzL2ltYWdlIGNoYW5nZWRcXCcpXFxuICB0ZW1wbGF0ZT1leHBlY3RlZFtcXCdzcGVjXFwnXVtcXCd0ZW1wbGF0ZVxcJ11bXFwnc3BlY1xcJ11cXG4gIGNvbnRyb2xsZWQ9c2V0KHRlbXBsYXRlKXx7XFwnaW5pdENvbnRhaW5lcnNcXCcsXFwnaG9zdE5ldHdvcmtcXCcsXFwnaG9zdFBJRFxcJyxcXCdob3N0SVBDXFwnLFxcJ3J1bnRpbWVDbGFzc05hbWVcXCcsXFwnc2hhcmVQcm9jZXNzTmFtZXNwYWNlXFwnfVxcbiAgcmVxdWlyZShhbGwocG9kW1xcJ3NwZWNcXCddLmdldChrZXkpPT10ZW1wbGF0ZS5nZXQoa2V5KSBmb3Iga2V5IGluIGNvbnRyb2xsZWQpLFxcJ2FjdHVhbCBvd25lciBQb2QgY29uZmlndXJhdGlvbiBkcmlmdGVkXFwnKVxcbiAgb3duZXJzPXBvZFtcXCdtZXRhZGF0YVxcJ10uZ2V0KFxcJ293bmVyUmVmZXJlbmNlc1xcJyxbXSk7cmVxdWlyZShsZW4ob3duZXJzKT09MSBhbmQgb3duZXJzWzBdW1xcJ2tpbmRcXCddPT1cXCdSZXBsaWNhU2V0XFwnLFxcJ3BvZCBvd25lciBjaGFpbiBjaGFuZ2VkXFwnKVxcbiAgcnM9cmVhZChcXCdyZXBsaWNhc2V0XFwnLG93bmVyc1swXVtcXCduYW1lXFwnXSxcXCdpbmZvcm1lZC1kZWNpc2lvblxcJylcXG4gIHJlcXVpcmUocnNbXFwnbWV0YWRhdGFcXCddW1xcJ3VpZFxcJ109PW93bmVyc1swXVtcXCd1aWRcXCddIGFuZCBhbnkoby5nZXQoXFwndWlkXFwnKT09c2VhbGVkW1xcJ21ldGFkYXRhXFwnXVtcXCd1aWRcXCddXFxuICAgYW5kIG8uZ2V0KFxcJ2tpbmRcXCcpPT1cXCdEZXBsb3ltZW50XFwnIGZvciBvIGluIHJzW1xcJ21ldGFkYXRhXFwnXS5nZXQoXFwnb3duZXJSZWZlcmVuY2VzXFwnLFtdKSksXFwnUmVwbGljYVNldCBvd25lcnNoaXAgY2hhbmdlZFxcJylcXG4gIGlubmVyPXJcIlwiXCJcXG5pbXBvcnQgaGFzaGxpYixqc29uLG9zLHN0YXQsc3VicHJvY2VzcyxzeXNcXG5pZiBzeXMuZmxhZ3Mub3B0aW1pemU6cmFpc2UgUnVudGltZUVycm9yKFxcJ29wdGltaXplZCBpbnRlcnByZXRlciByZWZ1c2VkXFwnKVxcbmV4ZWMoX19SRUFET05MWV9fKVxcbmV4ZWMoX19TQUZFVFlfXylcXG5hY3Rpb249X19BQ1RJT05fXztkYj1cXCcvZGF0YS9wcml2YXRlL3Jldmlldy5zcWxpdGVcXCc7Zm9sZGVyPVxcJy9kYXRhL3ByaXZhdGUvcHVycG9zZS1vdmVybGF5LXIxXFwnXFxuZGVmIHJlcXVpcmUodixyKTpcXG4gaWYgbm90IHY6cmFpc2UgVmFsdWVFcnJvcihyKVxcbnJlcXVpcmUob3MuZ2V0dWlkKCk9PTEwMDAxIGFuZCBvcy5nZXRnaWQoKT09MTAwMDEsXFwnbmF0aXZlIG93bmVyIFVJRC9HSUQgcmVxdWlyZWRcXCcpXFxuZGVmIHByaXZhdGUocCxkaXJlY3Rvcnk9RmFsc2UpOlxcbiBzPW9zLmxzdGF0KHApO3JlcXVpcmUoKHN0YXQuU19JU0RJUihzLnN0X21vZGUpIGlmIGRpcmVjdG9yeSBlbHNlIHN0YXQuU19JU1JFRyhzLnN0X21vZGUpKVxcbiAgYW5kIHMuc3RfdWlkPT0xMDAwMSBhbmQgc3RhdC5TX0lNT0RFKHMuc3RfbW9kZSk9PSgwbzcwMCBpZiBkaXJlY3RvcnkgZWxzZSAwbzYwMClcXG4gIGFuZCAoZGlyZWN0b3J5IG9yIHMuc3Rfbmxpbms9PTEpLFxcJ3ByaXZhdGUgbmF0aXZlIGN1c3RvZHkgcmVxdWlyZWRcXCcpXFxucHJpdmF0ZShcXCcvZGF0YS9wcml2YXRlXFwnLFRydWUpO3ByaXZhdGUoZGIpXFxuYmFzZWxpbmU9Y291bnRzKGluc3BlY3RfcmVhZG9ubHkoZGIpKSAjIE1VU1QgcHJlY2VkZSBhbnkgU3RvcmUvYWRtaW4gb3Blbi5cXG5pZiBhY3Rpb24gaW4gKFxcJ2RyaWxsLWJhY2t1cFxcJyxcXCdjdXRvdmVyLWJhY2t1cFxcJyk6XFxuIHNpemU9b3Muc3RhdChkYikuc3Rfc2l6ZVxcbiBpZiBvcy5wYXRoLmV4aXN0cyhkYitcXCctd2FsXFwnKTpzaXplKz1vcy5zdGF0KGRiK1xcJy13YWxcXCcpLnN0X3NpemVcXG4gdj1vcy5zdGF0dmZzKFxcJy9kYXRhL3ByaXZhdGVcXCcpO2ZyZWU9di5mX2JhdmFpbCp2LmZfZnJzaXplXFxuIHJlcXVpcmUoc2l6ZT4wIGFuZCBzaXplPD01MTIqMTAyNCoqMiBhbmQgZnJlZT49c2l6ZSooMiBpZiBhY3Rpb249PVxcJ2RyaWxsLWJhY2t1cFxcJyBlbHNlIDEpKzE2KjEwMjQqKjIsXFwnYm91bmRlZCBuYXRpdmUgc25hcHNob3QgY2FwYWNpdHkgcmVxdWlyZWRcXCcpXFxuIGlmIGFjdGlvbj09XFwnZHJpbGwtYmFja3VwXFwnOlxcbiAgcmVxdWlyZShub3Qgb3MucGF0aC5sZXhpc3RzKGZvbGRlciksXFwnbmF0aXZlIGNhc2UgZGlyZWN0b3J5IG11c3QgYmUgdW5pcXVlXFwnKVxcbiAgb3MubWtkaXIoZm9sZGVyLDBvNzAwKTtvcy5jaG1vZChmb2xkZXIsMG83MDApXFxuIHByaXZhdGUoZm9sZGVyLFRydWUpXFxuIGZpbGVuYW1lPVxcJ2RyaWxsLnNxbGl0ZVxcJyBpZiBhY3Rpb249PVxcJ2RyaWxsLWJhY2t1cFxcJyBlbHNlIFxcJ2N1dG92ZXIuc3FsaXRlXFwnO291dHB1dD1mb2xkZXIrXFwnL1xcJytmaWxlbmFtZVxcbiByZXF1aXJlKG5vdCBvcy5wYXRoLmxleGlzdHMob3V0cHV0KSxcXCdzbmFwc2hvdCBvdXRwdXQgbXVzdCBiZSB1bmlxdWVcXCcpXFxuIGFkbWluPXN1YnByb2Nlc3MucnVuKFtcXCdpbmZvcm1lZC1kZWNpc2lvbi1hZG1pblxcJyxcXCdiYWNrdXBcXCcsXFwnLS1kYlxcJyxkYixcXCctLW91dHB1dFxcJyxvdXRwdXRdLGNhcHR1cmVfb3V0cHV0PVRydWUsdGV4dD1UcnVlLHRpbWVvdXQ9MTIwKVxcbiByZXF1aXJlKGFkbWluLnJldHVybmNvZGU9PTAgYW5kIGpzb24ubG9hZHMoYWRtaW4uc3Rkb3V0KT09e1xcJ3N0YXR1c1xcJzpcXCdiYWNrZWRfdXBcXCcsXFwnY29uc2lzdGVudF9zbmFwc2hvdFxcJzpUcnVlfSxcXCdiYWNrdXAgY29tcGxldGlvbiBub3QgdmVyaWZpZWQ7IGRvIG5vdCByZXRyeVxcJylcXG4gcHJpdmF0ZShvdXRwdXQpXFxuIGZvciBzdWZmaXggaW4gKFxcJy13YWxcXCcsXFwnLXNobVxcJyk6XFxuICByZXF1aXJlKG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwdXQrc3VmZml4KSBvciBvcy5zdGF0KG91dHB1dCtzdWZmaXgpLnN0X3NpemU9PTAsXFwnc25hcHNob3QgaXMgbm90IGNsb3NlZCBtYWluLWZpbGUgY3VzdG9keVxcJylcXG4gc25hcHNob3Q9Y291bnRzKGluc3BlY3RfcmVhZG9ubHkob3V0cHV0KSlcXG4gc2l6ZT1vcy5zdGF0KG91dHB1dCkuc3Rfc2l6ZTtyZXF1aXJlKDA8c2l6ZTw9NTEyKjEwMjQqKjIsXFwnc25hcHNob3Qgb3V0c2lkZSBib3VuZGVkIGNvcHkgc2l6ZVxcJylcXG4gZGlnZXN0PWhhc2hsaWIuc2hhMjU2KClcXG4gd2l0aCBvcGVuKG91dHB1dCxcXCdyYlxcJykgYXMgc3RyZWFtOlxcbiAgZm9yIGJsb2NrIGluIGl0ZXIobGFtYmRhOnN0cmVhbS5yZWFkKDEwMjQqKjIpLGJcXCdcXCcpOmRpZ2VzdC51cGRhdGUoYmxvY2spXFxuIHByaW50KGpzb24uZHVtcHMoe1xcJ2FsbF9jaGVja3NfcGFzc1xcJzpUcnVlLFxcJ3NvdXJjZV9yZWFkb25seV9iYXNlbGluZVxcJzpiYXNlbGluZSxcXCdzbmFwc2hvdF9yZWFkb25seVxcJzpzbmFwc2hvdCxcXCdzbmFwc2hvdF9zaGEyNTZcXCc6ZGlnZXN0LmhleGRpZ2VzdCgpLFxcJ3NuYXBzaG90X2J5dGVzXFwnOnNpemUsXFwnc25hcHNob3RfZmlsZVxcJzpmaWxlbmFtZSxcXCduYXRpdmVfcGFyZW50X3ByaXZhdGVcXCc6VHJ1ZSxcXCduYXRpdmVfdWlkXFwnOm9zLmdldHVpZCgpfSkpXFxuZWxpZiBhY3Rpb24gaW4gKFxcJ3ZlcmlmeVxcJyxcXCdyZWxlYXNlXFwnLFxcJ3JvbGxiYWNrLXZlcmlmeVxcJyk6XFxuIHByb29mPXtcXCdhbGxfY2hlY2tzX3Bhc3NcXCc6VHJ1ZSxcXCdsaXZlX3JlYWRvbmx5X3NjaGVtYV9pbnRlZ3JpdHlfY291bnRzXFwnOmJhc2VsaW5lLFxcJ2xpdmVfY291bnRzX21heV9pbmNsdWRlX2NvbmN1cnJlbnRfY29tbWl0c1xcJzpUcnVlfVxcbiBpZiBhY3Rpb249PVxcJ3ZlcmlmeVxcJzpcXG4gIGltcG9ydCB1cmxsaWIucmVxdWVzdFxcbiAgbW9kdWxlPVxcJy9vcHQvdmVudi9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL2luZm9ybWVkX2RlY2lzaW9uL3BvbGljeS5weVxcJztpbmZvPW9zLmxzdGF0KG1vZHVsZSlcXG4gIHJlcXVpcmUoc3RhdC5TX0lTUkVHKGluZm8uc3RfbW9kZSkgYW5kIGluZm8uc3RfdWlkPT0wIGFuZCBzdGF0LlNfSU1PREUoaW5mby5zdF9tb2RlKT09MG82NDQsXFwnaW5zdGFsbGVkIHBvbGljeSBtZXRhZGF0YSBkaWZmZXJzXFwnKVxcbiAgd2l0aCBvcGVuKG1vZHVsZSxcXCdyYlxcJykgYXMgc291cmNlOm1vZHVsZV9kaWdlc3Q9aGFzaGxpYi5zaGEyNTYoc291cmNlLnJlYWQoKSkuaGV4ZGlnZXN0KClcXG4gIHJlcXVpcmUobW9kdWxlX2RpZ2VzdD09XFwnOWQ3YzFiZTRjYjYxOTlkMTRlZjBhYWVhZDVmODU5NTFmNDViMGNjYmQ3YzgwMGE3ZmRlOTIyYTI1MzU2NmI2MlxcJyxcXCdpbnN0YWxsZWQgc291cmNlIG1vZHVsZSBkaWZmZXJzXFwnKVxcbiAgcHVycG9zZT1zdWJwcm9jZXNzLnJ1bihbc3lzLmV4ZWN1dGFibGUsXFwnLVxcJ10saW5wdXQ9X19QVVJQT1NFX18sdGV4dD1UcnVlLGNhcHR1cmVfb3V0cHV0PVRydWUsdGltZW91dD0zMClcXG4gIHJlcXVpcmUocHVycG9zZS5yZXR1cm5jb2RlPT0wLFxcJ2luc3RhbGxlZCBuYXRpdmUtcGxhY2VtZW50IHB1cnBvc2UgY2hlY2tzIGZhaWxlZFxcJylcXG4gIHRlc3RlZD1qc29uLmxvYWRzKHB1cnBvc2Uuc3Rkb3V0KVxcbiAgcmVxdWlyZSh0ZXN0ZWQ9PXtcXCdpbnN0YWxsZWRfaW1hZ2VfcHVycG9zZV92YXJpYW50c1xcJzoxMCxcXCdiaW5kaW5nX2Zvcm1zX2FsbG93ZWRcXCc6MixcXCdhZHZpc29yeV9vcl9tYWxmb3JtZWRfcmVmdXNlZFxcJzo4LFxcJ3N5bnRoZXRpY19vbmx5XFwnOlRydWUsXFwnbmF0aXZlX3Byb3ZpZGVyXFwnOkZhbHNlfSxcXCdwdXJwb3NlIHJlc3VsdCBkaWZmZXJzXFwnKVxcbiAgY2xhc3MgTm9SZWRpcmVjdCh1cmxsaWIucmVxdWVzdC5IVFRQUmVkaXJlY3RIYW5kbGVyKTpcXG4gICBkZWYgcmVkaXJlY3RfcmVxdWVzdChzZWxmLCphcmdzLCoqa3dhcmdzKTpyYWlzZSBWYWx1ZUVycm9yKFxcJ2hlYWx0aCByZWRpcmVjdCByZWZ1c2VkXFwnKVxcbiAgb3BlbmVyPXVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcihOb1JlZGlyZWN0KCkpO3N0YXR1c2VzPXt9XFxuICBmb3Igcm91dGUgaW4gKFxcJy9oZWFsdGh6XFwnLFxcJy9yZWFkeXpcXCcpOlxcbiAgIHdpdGggb3BlbmVyLm9wZW4oXFwnaHR0cDovLzEyNy4wLjAuMTo4MDgwXFwnK3JvdXRlLHRpbWVvdXQ9MTApIGFzIHJlc3BvbnNlOlxcbiAgICByZXF1aXJlKHJlc3BvbnNlLnN0YXR1cz09MjAwIGFuZCBsZW4ocmVzcG9uc2UucmVhZCg4MTkzKSk8PTgxOTIsXFwnYm91bmRlZCBoZWFsdGggY2hlY2sgcmVmdXNlZFxcJyk7c3RhdHVzZXNbcm91dGVdPTIwMFxcbiAgcHJvb2YudXBkYXRlKGluc3RhbGxlZF9wdXJwb3NlX2NoZWNrcz10ZXN0ZWQscG9saWN5X3NoYTI1Nj1tb2R1bGVfZGlnZXN0LHBvbGljeV9tb2RlPVxcJzA2NDRcXCcscG9saWN5X3VpZD0wLGhlYWx0aF9zdGF0dXNlcz1zdGF0dXNlcyxuYXRpdmVfcHJvdmlkZXJfcHJvYmU9RmFsc2UpXFxuIHByaW50KGpzb24uZHVtcHMocHJvb2YpKVxcbmVsaWYgYWN0aW9uIGluIChcXCdkcmlsbC1jb3B5XFwnLFxcJ2N1dG92ZXItY29weVxcJyk6XFxuIHByaXZhdGUoZm9sZGVyLFRydWUpO2ZpbGVuYW1lPVxcJ2RyaWxsLnNxbGl0ZVxcJyBpZiBhY3Rpb249PVxcJ2RyaWxsLWNvcHlcXCcgZWxzZSBcXCdjdXRvdmVyLnNxbGl0ZVxcJztvdXRwdXQ9Zm9sZGVyK1xcJy9cXCcrZmlsZW5hbWU7cHJpdmF0ZShvdXRwdXQpXFxuIGZvciBzdWZmaXggaW4gKFxcJy13YWxcXCcsXFwnLXNobVxcJyk6XFxuICByZXF1aXJlKG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwdXQrc3VmZml4KSBvciBvcy5zdGF0KG91dHB1dCtzdWZmaXgpLnN0X3NpemU9PTAsXFwnY2xvc2VkIG1haW4gc25hcHNob3QgcmVxdWlyZWRcXCcpXFxuIHNuYXBzaG90PWNvdW50cyhpbnNwZWN0X3JlYWRvbmx5KG91dHB1dCkpO3NpemU9b3Muc3RhdChvdXRwdXQpLnN0X3NpemU7cmVxdWlyZSgwPHNpemU8PTUxMioxMDI0KioyLFxcJ3NuYXBzaG90IHNpemUgb3V0c2lkZSBib3VuZFxcJylcXG4gZGlnZXN0PWhhc2hsaWIuc2hhMjU2KClcXG4gd2l0aCBvcGVuKG91dHB1dCxcXCdyYlxcJykgYXMgc3RyZWFtOlxcbiAgZm9yIGJsb2NrIGluIGl0ZXIobGFtYmRhOnN0cmVhbS5yZWFkKDEwMjQqKjIpLGJcXCdcXCcpOmRpZ2VzdC51cGRhdGUoYmxvY2spXFxuIHByaW50KGpzb24uZHVtcHMoe1xcJ2FsbF9jaGVja3NfcGFzc1xcJzpUcnVlLFxcJ3NuYXBzaG90X2ZpbGVcXCc6ZmlsZW5hbWUsXFwnc25hcHNob3RfYnl0ZXNcXCc6c2l6ZSxcXCdzbmFwc2hvdF9zaGEyNTZcXCc6ZGlnZXN0LmhleGRpZ2VzdCgpLFxcJ3NuYXBzaG90X3JlYWRvbmx5XFwnOnNuYXBzaG90fSkpXFxuZWxzZTpyYWlzZSBWYWx1ZUVycm9yKFxcJ2ZpeGVkIG5hdGl2ZSBiYWNrdXAvdmVyaWZ5IHBoYXNlIHJlcXVpcmVkXFwnKVxcblwiXCJcIlxcbiAgIyBTdHJpcCB0aGUgQ0xJIGJyYW5jaDogZXhlYyBvbmx5IHRoZSB2ZXJpZmllZCBzdGRsaWIgZnVuY3Rpb24sIG5ldmVyIFN0b3JlLlxcbiAgcmVhZG9ubHk9cGF5bG9hZFtcXCdyZWFkb25seVxcJ10uc3BsaXQoXCJpZiBfX25hbWVfXyA9PSBcXCdfX21haW5fX1xcJzpcIiwxKVswXVxcbiAgaW5uZXI9aW5uZXIucmVwbGFjZShcXCdfX1JFQURPTkxZX19cXCcscmVwcihyZWFkb25seSkpLnJlcGxhY2UoXFwnX19TQUZFVFlfX1xcJyxyZXByKHBheWxvYWRbXFwncmVjZWlwdF9zYWZldHlcXCddKSkucmVwbGFjZShcXCdfX0FDVElPTl9fXFwnLHJlcHIocGhhc2UpKS5yZXBsYWNlKFxcJ19fUFVSUE9TRV9fXFwnLHJlcHIocGF5bG9hZFtcXCdwdXJwb3NlX2NoZWNrc1xcJ10pKVxcbiAgcD1ydW4oW1xcJ2t1YmVjdGxcXCcsXFwnZXhlY1xcJyxcXCctaVxcJyxcXCctblxcJyxcXCdpbmZvcm1lZC1kZWNpc2lvblxcJyxwb2RbXFwnbWV0YWRhdGFcXCddW1xcJ25hbWVcXCddLFxcJy1jXFwnLFxcJ2luZm9ybWVkLWRlY2lzaW9uXFwnLFxcJy0tXFwnLFxcJ3B5dGhvblxcJyxcXCctXFwnXSxpbm5lciwxNTApXFxuICByZXF1aXJlKHAucmV0dXJuY29kZT09MCxcXCduYXRpdmUgcGhhc2Ugb3V0Y29tZSB1bnZlcmlmaWVkOyByYXcgb3V0cHV0IHdpdGhoZWxkLCBkbyBub3QgcmV0cnlcXCcpXFxuICBvdXRjb21lPWpzb24ubG9hZHMocC5zdGRvdXQpO3JlcXVpcmUob3V0Y29tZS5nZXQoXFwnYWxsX2NoZWNrc19wYXNzXFwnKSBpcyBUcnVlLFxcJ25hdGl2ZSBwaGFzZSBnYXRlIHJlZnVzZWRcXCcpXFxuICByZXN1bHQudXBkYXRlKG91dGNvbWUscG9kX25hbWU9cG9kW1xcJ21ldGFkYXRhXFwnXVtcXCduYW1lXFwnXSxwb2RfdWlkPXBvZFtcXCdtZXRhZGF0YVxcJ11bXFwndWlkXFwnXSlcXG4gaWYgcGhhc2UgaW4gKFxcJ3JlbGVhc2VcXCcsXFwncm9sbGJhY2tcXCcpOlxcbiAgbm9kZV9yZWFkPXJ1bihbXFwna3ViZWN0bFxcJyxcXCdnZXRcXCcsXFwnbm9kZXNcXCcsXFwnLW9cXCcsXFwnanNvblxcJ10pO3JlcXVpcmUobm9kZV9yZWFkLnJldHVybmNvZGU9PTAsXFwnbm9kZSBtZXRhZGF0YSB1bmF2YWlsYWJsZVxcJylcXG4gIG5vZGVzPWpzb24ubG9hZHMobm9kZV9yZWFkLnN0ZG91dClbXFwnaXRlbXNcXCddO3JlcXVpcmUobGVuKG5vZGVzKT09MSxcXCdvbmUgdGFyZ2V0IG5vZGUgcmVxdWlyZWRcXCcpO25vZGU9bm9kZXNbMF1cXG4gIHJlcXVpcmUoYW55KGEuZ2V0KFxcJ2FkZHJlc3NcXCcpPT1cXCc5Mi4yMDUuNjIuMjM5XFwnIGZvciBhIGluIG5vZGVbXFwnc3RhdHVzXFwnXVtcXCdhZGRyZXNzZXNcXCddKSxcXCd0YXJnZXQgbm9kZSBhZGRyZXNzIGNoYW5nZWRcXCcpXFxuICBjb25kaXRpb25zPXtjW1xcJ3R5cGVcXCddOmNbXFwnc3RhdHVzXFwnXSBmb3IgYyBpbiBub2RlW1xcJ3N0YXR1c1xcJ11bXFwnY29uZGl0aW9uc1xcJ119XFxuICByZXF1aXJlKGNvbmRpdGlvbnMuZ2V0KFxcJ1JlYWR5XFwnKT09XFwnVHJ1ZVxcJyBhbmQgYWxsKGNvbmRpdGlvbnMuZ2V0KGspPT1cXCdGYWxzZVxcJyBmb3IgayBpbiAoXFwnTWVtb3J5UHJlc3N1cmVcXCcsXFwnRGlza1ByZXNzdXJlXFwnLFxcJ1BJRFByZXNzdXJlXFwnKSksXFwnbm9kZSB1bmhlYWx0aHkgb3IgcHJlc3N1cmVkXFwnKVxcbiAgZGVzY3JpcHRpb249cnVuKFtcXCdrdWJlY3RsXFwnLFxcJ2Rlc2NyaWJlXFwnLFxcJ25vZGVcXCcsbm9kZVtcXCdtZXRhZGF0YVxcJ11bXFwnbmFtZVxcJ11dKTtyZXF1aXJlKGRlc2NyaXB0aW9uLnJldHVybmNvZGU9PTAsXFwnaGVhZHJvb20gY2FwdHVyZSB1bmF2YWlsYWJsZVxcJylcXG4gIHRhYmxlPWRlc2NyaXB0aW9uLnN0ZG91dC5zcGxpdChcXCdBbGxvY2F0ZWQgcmVzb3VyY2VzOlxcJywxKVsxXTtyZXF1ZXN0ZWQ9aW50KHJlLnNlYXJjaChyXFwnY3B1XFxcXHMrKFxcXFxkKyltXFwnLHRhYmxlKS5ncm91cCgxKSk7YWxsb2M9bm9kZVtcXCdzdGF0dXNcXCddW1xcJ2FsbG9jYXRhYmxlXFwnXVtcXCdjcHVcXCddO2NhcGFjaXR5PWludChhbGxvY1s6LTFdKSBpZiBhbGxvYy5lbmRzd2l0aChcXCdtXFwnKSBlbHNlIGludChhbGxvYykqMTAwMFxcbiAgcmVxdWlyZShyZXF1ZXN0ZWQ8PWNhcGFjaXR5LFxcJ1JlY3JlYXRlIHJlcXVlc3RlZCBDUFUgZXhjZWVkcyBjYXBhY2l0eVxcJylcXG4gIHJlcXVpcmUobm90IGFwcC5nZXQoXFwnb3BlcmF0aW9uXFwnKSBhbmQgYXBwLmdldChcXCdzdGF0dXNcXCcse30pLmdldChcXCdvcGVyYXRpb25TdGF0ZVxcJyx7fSkuZ2V0KFxcJ3BoYXNlXFwnKSBub3QgaW4gKFxcJ1J1bm5pbmdcXCcsXFwnVGVybWluYXRpbmdcXCcpLFxcJ2V4aXN0aW5nIEFyZ28gb3BlcmF0aW9uIG11c3QgYmUgc2V0dGxlZFxcJylcXG4gIGRlc3RpbmF0aW9uPXBheWxvYWRbXFwnc291cmNlX3JldmlzaW9uXFwnXSBpZiBwaGFzZT09XFwncmVsZWFzZVxcJyBlbHNlIFxcJzdkYjg0ODVmZmVjZGViZmFiZDc3YTlkYWVjMDg1NTUzYzc0YmYwYmZcXCdcXG4gIGJvZHk9Y29weS5kZWVwY29weShwYXlsb2FkW1xcJ2NhbmRpZGF0ZVxcJ10gaWYgcGhhc2U9PVxcJ3JlbGVhc2VcXCcgZWxzZSBwYXlsb2FkW1xcJ3JvbGxiYWNrXFwnXSlcXG4gIGRyeT1ydW4oW1xcJ2t1YmVjdGxcXCcsXFwnYXBwbHlcXCcsXFwnLS1kcnktcnVuPXNlcnZlclxcJyxcXCctZlxcJyxcXCctXFwnLFxcJy1vXFwnLFxcJ2pzb25cXCddLGpzb24uZHVtcHMoYm9keSkpXFxuICByZXF1aXJlKGRyeS5yZXR1cm5jb2RlPT0wLFxcJ2ZyZXNoIG93bmVyIHNlcnZlciBhZG1pc3Npb24gcmVmdXNlZFxcJylcXG4gIGFkbWl0dGVkPWpzb24ubG9hZHMoZHJ5LnN0ZG91dCk7d2FudGVkPWNvcHkuZGVlcGNvcHkoc2VhbGVkKVxcbiAgd2FudGVkW1xcJ3NwZWNcXCddW1xcJ3RlbXBsYXRlXFwnXVtcXCdzcGVjXFwnXVtcXCdjb250YWluZXJzXFwnXVswXVtcXCdpbWFnZVxcJ109Q0FORElEQVRFIGlmIHBoYXNlPT1cXCdyZWxlYXNlXFwnIGVsc2UgQkFTRVxcbiAgcmVxdWlyZShwcm9qZWN0aW9uKGFkbWl0dGVkKT09d2FudGVkLFxcJ2RyeS1ydW4gY2hhbmdlZCBhbnl0aGluZyBiZXlvbmQgZXhhY3QgaW1hZ2VcXCcpXFxuICBkaWZmPXJ1bihbXFwna3ViZWN0bFxcJyxcXCdkaWZmXFwnLFxcJy1mXFwnLFxcJy1cXCddLGpzb24uZHVtcHMoYm9keSkpO3JlcXVpcmUoZGlmZi5yZXR1cm5jb2RlIGluICgwLDEpLFxcJ2NsaWVudCBkaWZmIHVuYXZhaWxhYmxlXFwnKVxcbiAgb3BlcmF0aW9uPXtcXCdpbml0aWF0ZWRCeVxcJzp7XFwndXNlcm5hbWVcXCc6XFwnY3VzdG9kaWFuLWNvZGV4XFwnfSxcXCdzeW5jXFwnOntcXCdyZXZpc2lvblxcJzpkZXN0aW5hdGlvbixcXCdwcnVuZVxcJzpGYWxzZSxcXG4gICBcXCdyZXNvdXJjZXNcXCc6W3tcXCdncm91cFxcJzpcXCdhcHBzXFwnLFxcJ2tpbmRcXCc6XFwnRGVwbG95bWVudFxcJyxcXCduYW1lXFwnOlxcJ2luZm9ybWVkLWRlY2lzaW9uXFwnLFxcJ25hbWVzcGFjZVxcJzpcXCdpbmZvcm1lZC1kZWNpc2lvblxcJ31dfX1cXG4gIHBhdGNoPVt7XFwnb3BcXCc6XFwndGVzdFxcJyxcXCdwYXRoXFwnOlxcJy9tZXRhZGF0YS91aWRcXCcsXFwndmFsdWVcXCc6YXBwW1xcJ21ldGFkYXRhXFwnXVtcXCd1aWRcXCddfSxcXG4gICB7XFwnb3BcXCc6XFwndGVzdFxcJyxcXCdwYXRoXFwnOlxcJy9tZXRhZGF0YS9yZXNvdXJjZVZlcnNpb25cXCcsXFwndmFsdWVcXCc6YXBwW1xcJ21ldGFkYXRhXFwnXVtcXCdyZXNvdXJjZVZlcnNpb25cXCddfSxcXG4gICB7XFwnb3BcXCc6XFwndGVzdFxcJyxcXCdwYXRoXFwnOlxcJy9zcGVjL3NvdXJjZS90YXJnZXRSZXZpc2lvblxcJyxcXCd2YWx1ZVxcJzphcHBbXFwnc3BlY1xcJ11bXFwnc291cmNlXFwnXVtcXCd0YXJnZXRSZXZpc2lvblxcJ119LFxcbiAgIHtcXCdvcFxcJzpcXCdyZXBsYWNlXFwnLFxcJ3BhdGhcXCc6XFwnL3NwZWMvc291cmNlL3RhcmdldFJldmlzaW9uXFwnLFxcJ3ZhbHVlXFwnOmRlc3RpbmF0aW9ufSxcXG4gICB7XFwnb3BcXCc6XFwnYWRkXFwnLFxcJ3BhdGhcXCc6XFwnL29wZXJhdGlvblxcJyxcXCd2YWx1ZVxcJzpvcGVyYXRpb259XVxcbiAgYXJndj1bXFwna3ViZWN0bFxcJyxcXCdwYXRjaFxcJyxcXCdhcHBsaWNhdGlvblxcJyxcXCdpbmZvcm1lZC1kZWNpc2lvblxcJyxcXCctblxcJyxcXCdhcmdvY2RcXCcsXFwnLS10eXBlPWpzb25cXCcsXFwnLS1wYXRjaC1maWxlPS9kZXYvc3RkaW5cXCcsXFwnLW9cXCcsXFwnbmFtZVxcJ11cXG4gIHBhdGNoZHJ5PXJ1bihhcmd2K1tcXCctLWRyeS1ydW49c2VydmVyXFwnXSxqc29uLmR1bXBzKHBhdGNoKSk7cmVxdWlyZShwYXRjaGRyeS5yZXR1cm5jb2RlPT0wLFxcJ0FwcGxpY2F0aW9uIG9wZXJhdGlvbiBkcnktcnVuIHJlZnVzZWRcXCcpXFxuICBjaGFuZ2U9cnVuKGFyZ3YsanNvbi5kdW1wcyhwYXRjaCkpXFxuICByZXF1aXJlKGNoYW5nZS5yZXR1cm5jb2RlPT0wLFxcJ0FwcGxpY2F0aW9uIHBhdGNoIG91dGNvbWUgYW1iaWd1b3VzOyBkbyBub3QgcmV0cnlcXCcpXFxuICByZXN1bHQudXBkYXRlKGFsbF9jaGVja3NfcGFzcz1UcnVlLG9wZXJhdGlvbl9yZXF1ZXN0ZWQ9VHJ1ZSxzb3VyY2VfcmV2aXNpb249ZGVzdGluYXRpb24sXFxuICAgcmVzb3VyY2VzPW9wZXJhdGlvbltcXCdzeW5jXFwnXVtcXCdyZXNvdXJjZXNcXCddLHBydW5lPUZhbHNlLHJvbGxvdXRfdmVyaWZpZWQ9RmFsc2UsXFxuICAgbGF0ZXN0X2xpdmVfZGF0YWJhc2VfcmV0YWluZWQ9VHJ1ZSxjbGllbnRfZGlmZl9zaGEyNTY9aGFzaGxpYi5zaGEyNTYoZGlmZi5zdGRvdXQuZW5jb2RlKCkpLmhleGRpZ2VzdCgpKVxcbiBpZiBwaGFzZSBpbiAoXFwndmVyaWZ5XFwnLFxcJ3JvbGxiYWNrLXZlcmlmeVxcJyk6XFxuICBvcD1hcHAuZ2V0KFxcJ3N0YXR1c1xcJyx7fSkuZ2V0KFxcJ29wZXJhdGlvblN0YXRlXFwnLHt9KTtzeW5jPW9wLmdldChcXCdvcGVyYXRpb25cXCcse30pLmdldChcXCdzeW5jXFwnLHt9KVxcbiAgcmVxdWlyZShvcC5nZXQoXFwncGhhc2VcXCcpPT1cXCdTdWNjZWVkZWRcXCcgYW5kIHN5bmMuZ2V0KFxcJ3JldmlzaW9uXFwnKT09dGFyZ2V0IGFuZCBzeW5jLmdldChcXCdwcnVuZVxcJykgaXMgRmFsc2VcXG4gICBhbmQgc3luYy5nZXQoXFwncmVzb3VyY2VzXFwnKT09W3tcXCdncm91cFxcJzpcXCdhcHBzXFwnLFxcJ2tpbmRcXCc6XFwnRGVwbG95bWVudFxcJyxcXCduYW1lXFwnOlxcJ2luZm9ybWVkLWRlY2lzaW9uXFwnLFxcJ25hbWVzcGFjZVxcJzpcXCdpbmZvcm1lZC1kZWNpc2lvblxcJ31dLFxcJ2V4YWN0IG5hdGl2ZSBBcmdvIG9wZXJhdGlvbiBjb21wbGV0aW9uIHVudmVyaWZpZWRcXCcpXFxuICByZXF1aXJlKGxpdmVbXFwnc3RhdHVzXFwnXS5nZXQoXFwnb2JzZXJ2ZWRHZW5lcmF0aW9uXFwnKT09bGl2ZVtcXCdtZXRhZGF0YVxcJ11bXFwnZ2VuZXJhdGlvblxcJ10sXFwnY29udHJvbGxlciBnZW5lcmF0aW9uIG5vdCBzZXR0bGVkXFwnKVxcbiAgcmVzdWx0LnVwZGF0ZShuYXRpdmVfcm9sbG91dF92ZXJpZmllZD1UcnVlLGN1cnJlbnRfc2NoZW1hNV9kYXRhYmFzZV9yZXRhaW5lZD1UcnVlLHJlY292ZXJ5X3ZlcmlmaWNhdGlvbj1waGFzZT09XFwncm9sbGJhY2stdmVyaWZ5XFwnKVxcbmV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGVycm9yOlxcbiByZXN1bHQudXBkYXRlKGFsbF9jaGVja3NfcGFzcz1GYWxzZSxmYWlsdXJlX2NsYXNzPXR5cGUoZXJyb3IpLl9fbmFtZV9fLFxcbiAgZmFpbHVyZT1cXCdmaXhlZCBwaGFzZSBvdXRjb21lIHJlZnVzZWQgb3IgYW1iaWd1b3VzOyByYXcgb3V0cHV0IHdpdGhoZWxkOyBubyByZXRyeVxcJylcXG5wcmludChqc29uLmR1bXBzKHJlc3VsdCkpO3N5cy5leGl0KDAgaWYgcmVzdWx0LmdldChcXCdhbGxfY2hlY2tzX3Bhc3NcXCcpIGlzIFRydWUgZWxzZSAxKVxcbidcbiIKICAgIH0sCiAgICAicGFja2V0LXJlZmluZW1lbnQuanNvbiI6IHsKICAgICAgInNoYTI1NiI6ICJlZjM3MGE0OTE0NjhkZjI4NjgzZjMwMDJjYjZlOGJiYjdlNDdiNjVlOGU0ZDAyZmY0ZDA5ZTljMzlmMDIwYzhhIiwKICAgICAgImNvbnRlbnQiOiAie1xuICBcInByb3Bvc2FsX2lkXCI6IFwiSU5GRC1XUC0wMDA5LVQwNC9wdXJwb3NlLW92ZXJsYXktdjFcIixcbiAgXCJwcmlvcl9yZXZpZXdlZF9wYWNrZXRfbWFuaWZlc3Rfc2hhMjU2XCI6IFwiYjFlM2U2NmJjNDAyM2RjODBjNmVhNTk1NjRjMzU1N2M3NjUzZmIzYzMwN2Y0NmEwNDk5OTdiNzYxOThhOTAzM1wiLFxuICBcImtpbmRcIjogXCJtZWNoYW5pY2FsLWFjdHVhdG9yLXBhY2tldC1yZWZpbmVtZW50LXJlcXVpcmVkLWJlZm9yZS1maXJzdC1odW1hbi1wb3N0XCIsXG4gIFwiY2hhbmdlc1wiOiBbXG4gICAgXCJIYXNoLWJpbmQgYWxsIGV4ZWN1dG9yIGJ5dGVzL2V4ZWN1dGlvbnBsYW4gaW4gYW1lbmRlZDIwZG9jIHBhY2tldCwgcHJlc2VydmUgcHJpb3I3OHBhdGggdGVjaG5pY2FsIHJldmlld3MgYXMgaGlzdG9yeVwiLFxuICAgIFwiUmVxdWlyZSBmcmVzaCByb290IGZpeGVkLW9yaWdpbiBjb25maXJtZWQgZm91bmRlciByZWNlaXB0IGJlZm9yZSBlYWNoIHBoYXNlLCBubyBzaWduZWQgYXV0b25vbW91cyBncmFudFwiLFxuICAgIFwiQmluZCBhbGwgZm91ciBjb21taXR0ZWQgb3duZXIgS3VzdG9taXplIGlucHV0IGJsb2JzIGFuZCByZWplY3QgQXBwbGljYXRpb24gc291cmNlIG92ZXJyaWRlcyBvciBhdXRvbWF0ZWQ6e31cIixcbiAgICBcIkV4cGxpY2l0IG5ldyBpc29sYXRlZCBvZmZsaW5lIHZvbHVtZSBVSUQwL0NBUF9DSE9XTiBpbml0aWFsaXplciwgbm8gaG9zdC9saXZlUFZDL3Rva2VuL2NvbmZpZyBtb3VudHMsIGJvdW5kZWQ1MTJNaUIgcHJpdmF0ZSBzbmFwc2hvdCBzdHJlYW0gYW5kIG5hbWVkVm9sdW1lIG5vbmNlIG93bmVyc2hpcFwiLFxuICAgIFwiRHVyYWJsZSBwZXItcGhhc2UgUlVOTklORyBiZWZvcmUgYWN0aW9uOyBubyBzYW1lLXBoYXNlIHJldHJpZXMgYWZ0ZXIgZmFpbHVyZXMvY3Jhc2gsIGRpc3RpbmN0IHN1cGVydmlzZWQgc2FtZS1zY2hlbWEgcm9sbGJhY2sgcmV0YWlucyBsYXRlc3REQlwiLFxuICAgIFwiQWN0dWFsIG5hdGl2ZSBwcmUtb3BlbiByZWFkb25seXNjaGVtYTUvaW50ZWdyaXR5L2NvdW50IGdhdGUgYmVmb3JlIGJhY2t1cC9hZG1pbiwgYWN0dWFsIFBvZC9DTS9QVkMvc291cmNlIHNlYWxzLCBvZmZsaW5lIHByZS1vcGVuIGNoZWNrIGJlZm9yZSBhZG1pbmluc3BlY3QsIG5hdGl2ZWluc3RhbGxlZDEwc3ludGhldGljcHVycG9zZSBjaGVja3MrYm91bmRlZGxvY2FsaG9zdGhlYWx0aCBhZnRlcmNvbnRyb2xsZXJjb21wbGV0aW9uXCJcbiAgXSxcbiAgXCJ1bmNoYW5nZWRcIjogW1xuICAgIFwiaW1tdXRhYmxlNzYzYyBwdXJwb3Nlb25seSBpbWFnZVwiLFxuICAgIFwiQ29uZmlnTWFwNmMvcnVudGltZS9wb2xpY3kgcGlucy9hdWRpZW5jZXMvY3JlZGVudGlhbHNcIixcbiAgICBcIkRlcGxveW1lbnQtb25seSBtYW51YWxBcmdvIHNjb3BlZCBvcGVyYXRpb24vcHJ1bmVmYWxzZVwiLFxuICAgIFwiZXhpc3RpbmdQVkMvc2luZ2xld3JpdGVyL1JlY3JlYXRlL3NjaGVtYTVcIixcbiAgICBcImV4cGxpY2l0IGluaGVyaXRlZDFmaXhhYmxlTUVEIG93bmVyVDA1IGZvbGxvdy10aHJvdWdoXCJcbiAgXSxcbiAgXCJuYXRpdmVfYWN0aW9uX2V4ZWN1dGVkXCI6IGZhbHNlLFxuICBcImZvdW5kZXJfYXBwcm92YWxcIjogZmFsc2UsXG4gIFwibWVjaGFuaWNhbF9yZXZpZXdfcmVmaW5lbWVudFwiOiB7XG4gICAgXCJvcmlnaW5hbF9tYW5pZmVzdF9zaGEyNTZcIjogXCI2NTNiNjhjMzg5MWMwNjZmNDBkMTA0YmZjNjdhMzVkYTVlNDM2NjA1Y2Q5OWFmZDUyZmJhYzRiNDdhOTU1M2ZlXCIsXG4gICAgXCJhcmNoaXZlXCI6IFwiZXhlY3V0aW9uLWhpc3RvcnkvaW5pdGlhbC02NTNiNjhjM1wiLFxuICAgIFwiZmluZGluZ3NcIjogW1xuICAgICAgXCJyb2xsYmFjayBpbmNvcnJlY3RseSBkZXBlbmRlZCBvbiBSZWFkeSBjYW5kaWRhdGUgYW5kIGRhdGFiYXNlIGV4ZWNcIixcbiAgICAgIFwib2ZmbGluZSBhZG1pbiBsYWNrZWQgcG9zdC1vcGVuIHJlYWRvbmx5IGZ1bGwgcHJvb2YgYW5kIG9yaWdpbmFsIHNuYXBzaG90IFNIQSBjaGVja1wiLFxuICAgICAgXCJhbGwtcGhhc2UgaGVscGVyIGRlYWRsaW5lIHdhcyBub3QgZGlzY2xvc2VkIGJ5IHByaW9yIHVuc3RhcnRlZC1yZWxlYXNlIHBhY2tldCB3b3JkaW5nXCJcbiAgICBdLFxuICAgIFwicmVzb2x2ZWRfYnlcIjogW1xuICAgICAgXCJyb2xsYmFjayBkaXNwYXRjaCBleGNsdWRlcyBQb2QgbWV0YWRhdGEvZXhlYyBlbnRpcmVseTsgc2VwYXJhdGUgcm9sbGJhY2stdmVyaWZ5IHByb3ZlcyByZWNvdmVyZWQgb2xkLWltYWdlL3NjaGVtYTUgREJcIixcbiAgICAgIFwicG9zdC1hZG1pbiBVSUQxMDAwMSByZWFkb25seSBpbnRlZ3JpdHkvc2NoZW1hL2NvdW50IHByb29mIGVxdWFscyBmcm96ZW4gc25hcHNob3Q7IHJldGFpbmVkIG9yaWdpbmFsIFNIQSB1bmNoYW5nZWRcIixcbiAgICAgIFwiZXhwbGljaXQgYWxsLXBoYXNlIGluY2x1ZGluZyByZWNvdmVyeS92ZXJpZmljYXRpb24gZGVhZGxpbmUgYW5kIGZyZXNoLWZvdW5kZXItZGVjaXNpb24gcmVxdWlyZW1lbnQgYmV5b25kIGV4cGlyeVwiXG4gICAgXSxcbiAgICBcInNhbWVfcHJvcG9zYWxfdHJpYWxcIjogdHJ1ZSxcbiAgICBcIm5hdGl2ZV9hY3Rpb25zX2V4ZWN1dGVkXCI6IGZhbHNlLFxuICAgIFwiaHVtYW5fYWNjZXB0YW5jZVwiOiBmYWxzZVxuICB9XG59XG4iCiAgICB9LAogICAgInJlY2VpcHRfc2FmZXR5LnB5IjogewogICAgICAic2hhMjU2IjogIjVjNTQzNzNmMmRjNGIwNjQwMDgyMjVjMTg2ZWZiMWQ1YWZkZWVjMzZkMTUzNTBiZGEwYTEyZGVkOTc2MDJkMWIiLAogICAgICAiY29udGVudCI6ICJcIlwiXCJPbmx5IHN0cnVjdHVyYWwgY291bnQvaGFzaCByZWNlaXB0cyBjYW4gbGVhdmUgdGhlIHByaXZhdGUgZXhlY3V0aW9uIHBoYXNlLlwiXCJcIlxuZGVmIGNvdW50cyh2YWx1ZSk6XG4gICAgaWYgKHNldCh2YWx1ZSkgIT0geydzY2hlbWFfdmVyc2lvbicsICdsaWZlY3ljbGUnLCAnb3V0Ym94JywgJ3N1Ym1pc3Npb25zJywgJ2ludGVncml0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICdyZWFkX29ubHlfcHJlX29wZW4nLCAnc3RvcmVfY29uc3RydWN0ZWQnfVxuICAgICAgICAgICAgb3IgdmFsdWVbJ3NjaGVtYV92ZXJzaW9uJ10gIT0gNSBvciB2YWx1ZVsnaW50ZWdyaXR5J10gIT0gJ29rJ1xuICAgICAgICAgICAgb3IgdmFsdWVbJ3JlYWRfb25seV9wcmVfb3BlbiddIGlzIG5vdCBUcnVlIG9yIHZhbHVlWydzdG9yZV9jb25zdHJ1Y3RlZCddIGlzIG5vdCBGYWxzZVxuICAgICAgICAgICAgb3Igc2V0KHZhbHVlWydsaWZlY3ljbGUnXSkgIT0geydyZWNvcmRzJywgJ2V2ZW50cycsICdwZW5kaW5nJ31cbiAgICAgICAgICAgIG9yIG5vdCBzZXQodmFsdWVbJ291dGJveCddKSA8PSB7J3BlbmRpbmcnLCAnZGVsaXZlcmVkJywgJ2Jsb2NrZWQnfVxuICAgICAgICAgICAgb3Igbm90IHNldCh2YWx1ZVsnc3VibWlzc2lvbnMnXSkgPD0geydwcmVwYXJlZCcsICdpbl9mbGlnaHQnLCAnY29uZmlybWVkJywgJ3VucmVzb2x2ZWQnfSk6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2NvdW50LW9ubHkgcmVjZWlwdCBzaGFwZS9zdGF0ZSByZWZ1c2VkOyB2YWx1ZXMgd2l0aGhlbGQnKVxuICAgIGZvciBncm91cCBpbiAoJ2xpZmVjeWNsZScsICdvdXRib3gnLCAnc3VibWlzc2lvbnMnKTpcbiAgICAgICAgaWYgYW55KHR5cGUobnVtYmVyKSBpcyBub3QgaW50IG9yIG51bWJlciA8IDAgb3IgbnVtYmVyID4gMTAqKjEyXG4gICAgICAgICAgICAgICBmb3IgbnVtYmVyIGluIHZhbHVlW2dyb3VwXS52YWx1ZXMoKSk6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjb3VudC1vbmx5IHJlY2VpcHQgdmFsdWVzIHJlZnVzZWQnKVxuICAgIHJldHVybiB2YWx1ZVxuIgogICAgfSwKICAgICJyb290LWF1dGhvcml0eS1yZWNlaXB0LXRlbXBsYXRlLmpzb24iOiB7CiAgICAgICJzaGEyNTYiOiAiMTU5NjZiN2M2ZjA4OGEwMzNiYWYxZmVmODc4ZGRiMzUxZGUyZmEyYWU0NmI1YmM3MTAyNjVlZDE3MmFiMjgxMyIsCiAgICAgICJjb250ZW50IjogIntcbiAgXCJwcm9wb3NhbF9pZFwiOiBcIklORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxXCIsXG4gIFwibWVtb19pZFwiOiBcImluZmQtMjAyNjEwMTEtcHVycG9zZS1vdmVybGF5LXIxXCIsXG4gIFwibWVtb192ZXJzaW9uXCI6IDEsXG4gIFwibWVtb19zaGEyNTZcIjogbnVsbCxcbiAgXCJzb3VyY2VfcmV2aXNpb25cIjogbnVsbCxcbiAgXCJhY3RpdmF0aW9uXCI6IFwiUEVORElOR1wiLFxuICBcImF1dGhvcml0eV9tb2RlXCI6IFwiQURNSU5JU1RFUlwiLFxuICBcInRhcmdldFwiOiBcInJlYWxtOmt1YmVybmV0ZXMvcmFpbGlhbmNlMDEvaW5mb3JtZWQtZGVjaXNpb25cIixcbiAgXCJ2ZXJpZmljYXRpb25fbWV0aG9kXCI6IFwicm9vdC1maXhlZC1vcmlnaW4tbmF0aXZlLXJlYWRiYWNrXCIsXG4gIFwicnVudGltZV9hdXRoZW50aWNhdGVkX2dyYW50XCI6IGZhbHNlLFxuICBcInZlcmlmaWVkX2F0XCI6IG51bGwsXG4gIFwiYWNjZXB0ZWRfYXRcIjogbnVsbCxcbiAgXCJyZXZpZXdfbWVtb19pZFwiOiBudWxsLFxuICBcImFwcHJvdmFsX2lkXCI6IG51bGwsXG4gIFwiZGlzcG9zaXRpb25faWRcIjogbnVsbCxcbiAgXCJuYXRpdmVfb3V0Y29tZV9zaGEyNTZcIjogbnVsbCxcbiAgXCJleGVjdXRvcl9wbGFuX3NoYTI1NlwiOiBcIjRkNTUzMGU3NDE4ZjYzOGIxMGNjZmYwZTBkOWEwNzI3YWRjNjRhN2YzYTQ1OTA3ZjZkZWI1NzM5YWQyYWRjODVcIlxufVxuIgogICAgfSwKICAgICJ0ZXN0X2V4ZWN1dGlvbi5weSI6IHsKICAgICAgInNoYTI1NiI6ICI5Y2NmNmQ0MjFiZjIwZjBlODM1MGY2NzEzZDZkMWNlZTJiYTE5OWY0ODVkY2FmMjU1OGMzODc0MjFkOWEyYjQ4IiwKICAgICAgImNvbnRlbnQiOiAiXCJcIlwiU3ludGhldGljIGN1c3RvZHkvdHJhbnNwb3J0IHRlc3RzLiBObyBuYXRpdmUgZGF0YSwgRG9ja2VyIG9yIGNsdXN0ZXIgYWN0aW9uLlwiXCJcIlxuaW1wb3J0IGNvcHlcbmltcG9ydCBkYXRldGltZVxuaW1wb3J0IGlvXG5pbXBvcnQganNvblxuaW1wb3J0IG9zXG5mcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGhcbmltcG9ydCBzdWJwcm9jZXNzXG5pbXBvcnQgc3lzXG5pbXBvcnQgdGVtcGZpbGVcbmltcG9ydCB1bml0dGVzdFxuZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaFxuZnJvbSBjb250ZXh0bGliIGltcG9ydCByZWRpcmVjdF9zdGRvdXRcblxuaW1wb3J0IGFjdHVhdG9yXG5mcm9tIGF1dGhvcml0eV9qb3VybmFsIGltcG9ydCBKb3VybmFsLCBhdXRob3JpdHlcbmZyb20gbmF0aXZlX3Byb2dyYW0gaW1wb3J0IFBST0dSQU1cbmZyb20gcmVjZWlwdF9zYWZldHkgaW1wb3J0IGNvdW50c1xuXG5DQVNFID0gUGF0aCgnL2hvbWUvd29yc2NoL2luZm9ybWVkLWRlY2lzaW9uL2RvY3MvZXZpZGVuY2UvMjAyNi0xMC0xMS1wdXJwb3NlLWltYWdlLXJlbGVhc2UnKVxuTk9XID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAyNiwgMTAsIDExLCAyLCAwLCB0emluZm89ZGF0ZXRpbWUudGltZXpvbmUudXRjKVxuUkVWSVNJT04gPSAnZScgKiA0MFxuQ09VTlQgPSB7J3NjaGVtYV92ZXJzaW9uJzogNSwgJ2ludGVncml0eSc6ICdvaycsICdyZWFkX29ubHlfcHJlX29wZW4nOiBUcnVlLCAnc3RvcmVfY29uc3RydWN0ZWQnOiBGYWxzZSxcbiAgICAgICAgICdsaWZlY3ljbGUnOiB7J3JlY29yZHMnOiAzLCAnZXZlbnRzJzogOCwgJ3BlbmRpbmcnOiAxfSxcbiAgICAgICAgICdvdXRib3gnOiB7J3BlbmRpbmcnOiAyLCAnZGVsaXZlcmVkJzogMTB9LCAnc3VibWlzc2lvbnMnOiB7J2NvbmZpcm1lZCc6IDEsICd1bnJlc29sdmVkJzogMX19XG5cblxuZGVmIGFjY2VwdGVkKCk6XG4gICAgYXBwcm92YWwgPSAnMTExMTExMTEtMTExMS00MTExLTgxMTEtMTExMTExMTExMTExJ1xuICAgIHJldmlldyA9ICdyZXZpZXctMjIyMjIyMjItMjIyMi00MjIyLTgyMjItMjIyMjIyMjIyMjIyJ1xuICAgIGRpc3Bvc2l0aW9uID0gJ2Rpc3AtMzMzMzMzMzMtMzMzMy00MzMzLTgzMzMtMzMzMzMzMzMzMzMzJ1xuICAgIHJlY2VpcHQgPSB7J3Byb3Bvc2FsX2lkJzogJ0lORkQtV1AtMDAwOS1UMDQvcHVycG9zZS1vdmVybGF5LXYxJyxcbiAgICAgICAgICAgICAgICdtZW1vX2lkJzogJ2luZmQtMjAyNjEwMTEtcHVycG9zZS1vdmVybGF5LXIxJywgJ21lbW9fdmVyc2lvbic6IDEsXG4gICAgICAgICAgICAgICAnbWVtb19zaGEyNTYnOiAnYScgKiA2NCwgJ3NvdXJjZV9yZXZpc2lvbic6IFJFVklTSU9OLCAnYWN0aXZhdGlvbic6ICdBUFBST1ZFRCcsXG4gICAgICAgICAgICAgICAnYXV0aG9yaXR5X21vZGUnOiAnQURNSU5JU1RFUicsICd0YXJnZXQnOiAncmVhbG06a3ViZXJuZXRlcy9yYWlsaWFuY2UwMS9pbmZvcm1lZC1kZWNpc2lvbicsXG4gICAgICAgICAgICAgICAndmVyaWZpY2F0aW9uX21ldGhvZCc6ICdyb290LWZpeGVkLW9yaWdpbi1uYXRpdmUtcmVhZGJhY2snLCAncnVudGltZV9hdXRoZW50aWNhdGVkX2dyYW50JzogRmFsc2UsXG4gICAgICAgICAgICAgICAndmVyaWZpZWRfYXQnOiAnMjAyNi0xMC0xMVQwMjowMDowMFonLCAnYWNjZXB0ZWRfYXQnOiAnMjAyNi0xMC0xMVQwMTo1OTowMFonLFxuICAgICAgICAgICAgICAgJ3Jldmlld19tZW1vX2lkJzogcmV2aWV3LCAnYXBwcm92YWxfaWQnOiBhcHByb3ZhbCwgJ2Rpc3Bvc2l0aW9uX2lkJzogZGlzcG9zaXRpb259XG4gICAgb3V0Y29tZSA9IHsnbWVtb19pZCc6IHJlY2VpcHRbJ21lbW9faWQnXSwgJ3Jldmlldyc6IHsnbWVtb19pZCc6IHJldmlldywgJ3N0YWxlJzogRmFsc2UsICdpbnRha2Vfc3RhdGUnOiAncmVhZHknfSxcbiAgICAgICAgICAgICAgICdkaXNwb3NpdGlvbnMnOiBbeydhcHByb3ZhbF9pZCc6IE5vbmUsICdzdWJtaXNzaW9uX3N0YXRlJzogJ2NvbmZpcm1lZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzcG9zaXRpb24nOiB7J3ZlcmInOiAnYWNjZXB0JywgJ21lbW9fdmVyc2lvbic6IDEsICdtZW1vX2lkJzogcmV2aWV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHByb3ZhbF9pZCc6IGFwcHJvdmFsLCAnaWQnOiBkaXNwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0b3InOiB7J2tpbmQnOiAncGVyc29uJywgJ3N1Yic6ICd1aWQ9cGxhdGZvcm0tcm9vdCxvdT1wZW9wbGUsZGM9bmV0a2luZ2RvbSxkYz1sb2NhbCd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdCc6IHJlY2VpcHRbJ2FjY2VwdGVkX2F0J119fV19XG4gICAgcmV0dXJuIHJlY2VpcHQsIG91dGNvbWVcblxuXG5jbGFzcyBBdXRob3JpdHlBbmRDdXN0b2R5KHVuaXR0ZXN0LlRlc3RDYXNlKTpcbiAgICBkZWYgdGVzdF9leGFjdF9uZXN0ZWRfZm91bmRlcl9yZWNlaXB0X25vdF90b3BfbGV2ZWxfYXBwcm92YWwoc2VsZik6XG4gICAgICAgIHJlY2VpcHQsIG91dGNvbWUgPSBhY2NlcHRlZCgpXG4gICAgICAgIHJlc3VsdCA9IGF1dGhvcml0eShyZWNlaXB0LCBvdXRjb21lLCAnYScgKiA2NCwgUkVWSVNJT04sICdkcmlsbC1iYWNrdXAnLCBOT1cpXG4gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WydhcHByb3ZhbF9pZCddLCByZWNlaXB0WydhcHByb3ZhbF9pZCddKVxuXG4gICAgZGVmIHRlc3RfcGVuZGluZ19zdGFsZV93cm9uZ19hY3Rvcl92ZXJzaW9uX2FuZF9iaW5kaW5nX3JlZnVzZShzZWxmKTpcbiAgICAgICAgbXV0YXRpb25zID0gW2xhbWJkYSByLCBvOiByLnVwZGF0ZShhY3RpdmF0aW9uPSdQRU5ESU5HJyksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgciwgbzogci51cGRhdGUobWVtb19zaGEyNTY9J2NoYW5nZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSByLCBvOiByLnVwZGF0ZShzb3VyY2VfcmV2aXNpb249J2NoYW5nZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSByLCBvOiByLnVwZGF0ZSh0YXJnZXQ9J290aGVyJyksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgciwgbzogci51cGRhdGUodmVyaWZpZWRfYXQ9JzIwMjYtMTAtMTFUMDE6MDA6MDBaJyksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgciwgbzogci51cGRhdGUodmVyaWZpY2F0aW9uX21ldGhvZD0nY2FsbGVyLWFzc2VydGVkJyksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgciwgbzogci51cGRhdGUocnVudGltZV9hdXRoZW50aWNhdGVkX2dyYW50PVRydWUpLFxuICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHIsIG86IG9bJ3JldmlldyddLnVwZGF0ZShzdGFsZT1UcnVlKSxcbiAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSByLCBvOiBvWydyZXZpZXcnXS51cGRhdGUoaW50YWtlX3N0YXRlPSdwZW5kaW5nJyksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgciwgbzogb1snZGlzcG9zaXRpb25zJ11bMF0udXBkYXRlKHN1Ym1pc3Npb25fc3RhdGU9J3VucmVzb2x2ZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSByLCBvOiBvWydkaXNwb3NpdGlvbnMnXVswXVsnZGlzcG9zaXRpb24nXS51cGRhdGUobWVtb192ZXJzaW9uPTIpLFxuICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHIsIG86IG9bJ2Rpc3Bvc2l0aW9ucyddWzBdWydkaXNwb3NpdGlvbiddLnVwZGF0ZShhY3Rvcj17J2tpbmQnOiAnYWdlbnQnLCAnc3ViJzogJ3BsYXRmb3JtLXJvb3QnfSksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgciwgbzogb1snZGlzcG9zaXRpb25zJ10uYXBwZW5kKGNvcHkuZGVlcGNvcHkob1snZGlzcG9zaXRpb25zJ11bMF0pKV1cbiAgICAgICAgZm9yIG11dGF0ZSBpbiBtdXRhdGlvbnM6XG4gICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtdXRhdGU9bXV0YXRlKTpcbiAgICAgICAgICAgICAgICByLCBvID0gYWNjZXB0ZWQoKVxuICAgICAgICAgICAgICAgIG11dGF0ZShyLCBvKVxuICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6XG4gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eShyLCBvLCAnYScgKiA2NCwgUkVWSVNJT04sICdyZWxlYXNlJywgTk9XKVxuXG4gICAgZGVmIHRlc3RfZXhwaXJlZF93aW5kb3dfYW5kX3Vua25vd25fcGhhc2VfcmVmdXNlKHNlbGYpOlxuICAgICAgICByLCBvID0gYWNjZXB0ZWQoKVxuICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOlxuICAgICAgICAgICAgYXV0aG9yaXR5KHIsIG8sICdhJyAqIDY0LCBSRVZJU0lPTiwgJ2FyYml0cmFyeScsIE5PVylcbiAgICAgICAgbGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMjYsIDEwLCAxMywgdHppbmZvPWRhdGV0aW1lLnRpbWV6b25lLnV0YylcbiAgICAgICAgclsndmVyaWZpZWRfYXQnXSA9IGxhdGUuaXNvZm9ybWF0KClcbiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKTpcbiAgICAgICAgICAgIGF1dGhvcml0eShyLCBvLCAnYScgKiA2NCwgUkVWSVNJT04sICdyb2xsYmFjaycsIGxhdGUpXG5cbiAgICBkZWYgdGVzdF9kdXJhYmxlX2ludGVudF9wcmVjZWRlc19kaXNwYXRjaF9hbmRfbmV2ZXJfcmV0cmllcyhzZWxmKTpcbiAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyBkaXJlY3Rvcnk6XG4gICAgICAgICAgICBwYXJlbnQgPSBQYXRoKGRpcmVjdG9yeSlcbiAgICAgICAgICAgIG9zLmNobW9kKHBhcmVudCwgMG83MDApXG4gICAgICAgICAgICBqb3VybmFsID0gSm91cm5hbChwYXJlbnQsIHsnY2FzZSc6ICdmaXh0dXJlJ30pXG4gICAgICAgICAgICBqb3VybmFsLnN0YXJ0KCdkcmlsbC1iYWNrdXAnLCB7J2FwcHJvdmFsX2lkJzogJ2ZpeHR1cmUnfSlcbiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2Fkcyhqb3VybmFsLnBhdGgucmVhZF90ZXh0KCkpWydwaGFzZXMnXVsnZHJpbGwtYmFja3VwJ11bJ3N0YXRlJ10sICdSVU5OSU5HJylcbiAgICAgICAgICAgIGpvdXJuYWwuY2xvc2UoKSAgIyBzaW11bGF0ZWQgY3Jhc2ggYmVmb3JlIHJlc3VsdFxuICAgICAgICAgICAgcmVjb3ZlcmVkID0gSm91cm5hbChwYXJlbnQsIHsnY2FzZSc6ICdmaXh0dXJlJ30pXG4gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOlxuICAgICAgICAgICAgICAgIHJlY292ZXJlZC5zdGFydCgnZHJpbGwtYmFja3VwJywge30pXG4gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOlxuICAgICAgICAgICAgICAgIHJlY292ZXJlZC5zdGFydCgnZHJpbGwtY29weScsIHt9KVxuICAgICAgICAgICAgcmVjb3ZlcmVkLmNsb3NlKClcblxuICAgIGRlZiB0ZXN0X3BoYXNlX29yZGVyX2FuZF91bmNlcnRhaW5fcmVsZWFzZV9hbGxvd3Nfb25seV9kaXN0aW5jdF9yZWNvdmVyeShzZWxmKTpcbiAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyBkaXJlY3Rvcnk6XG4gICAgICAgICAgICBvcy5jaG1vZChkaXJlY3RvcnksIDBvNzAwKVxuICAgICAgICAgICAgaiA9IEpvdXJuYWwoZGlyZWN0b3J5LCB7J2Nhc2UnOiAnZml4dHVyZSd9KVxuICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKTpcbiAgICAgICAgICAgICAgICBqLnN0YXJ0KCdyZWxlYXNlJywge30pXG4gICAgICAgICAgICBmb3IgcGhhc2UgaW4gYWN0dWF0b3IuUEhBU0VTWzo2XTpcbiAgICAgICAgICAgICAgICBqLnN0YXJ0KHBoYXNlLCB7fSlcbiAgICAgICAgICAgICAgICBqLmZpbmlzaChwaGFzZSwgeydhbGxfY2hlY2tzX3Bhc3MnOiBUcnVlfSlcbiAgICAgICAgICAgIGouc3RhcnQoJ3JlbGVhc2UnLCB7fSlcbiAgICAgICAgICAgIGouZmluaXNoKCdyZWxlYXNlJywgeydhbGxfY2hlY2tzX3Bhc3MnOiBGYWxzZX0pXG4gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOlxuICAgICAgICAgICAgICAgIGouc3RhcnQoJ3JlbGVhc2UnLCB7fSlcbiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6XG4gICAgICAgICAgICAgICAgai5zdGFydCgndmVyaWZ5Jywge30pXG4gICAgICAgICAgICBqLnN0YXJ0KCdyb2xsYmFjaycsIHt9KVxuICAgICAgICAgICAgai5maW5pc2goJ3JvbGxiYWNrJywgeydhbGxfY2hlY2tzX3Bhc3MnOiBUcnVlfSlcbiAgICAgICAgICAgIGouY2xvc2UoKVxuXG4gICAgZGVmIHRlc3Rfc2VjcmV0X29yX3Vua25vd25fY2hpbGRfb3V0cHV0X2lzX3dpdGhoZWxkKHNlbGYpOlxuICAgICAgICBmb3IgYm9keSBpbiAoJ25vdC1qc29uJywgJ3tcImFsbF9jaGVja3NfcGFzc1wiOnRydWUsXCJ0b2tlblwiOlwicHJpdmF0ZS12YWx1ZVwifScsXG4gICAgICAgICAgICAgICAgICAgICAne1wiYWxsX2NoZWNrc19wYXNzXCI6dHJ1ZSxcInNuYXBzaG90X3JlYWRvbmx5XCI6e1wic2NoZW1hX3ZlcnNpb25cIjo1fX0nKTpcbiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6XG4gICAgICAgICAgICAgICAgYWN0dWF0b3IuanNvbl9yZXN1bHQoc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzKFtdLCAwLCBib2R5LCAnJykpXG4gICAgICAgIHdyb25nID0gY29weS5kZWVwY29weShDT1VOVClcbiAgICAgICAgd3JvbmdbJ291dGJveCddID0geydwcml2YXRlLXJvdy12YWx1ZSc6IDF9XG4gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6XG4gICAgICAgICAgICBjb3VudHMod3JvbmcpXG4gICAgICAgIGNvdW50cyhDT1VOVCkgICMgYmxvY2tlZC91bnJlc29sdmVkIGNvdW50cyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIHplcm8uXG5cbiAgICBkZWYgdGVzdF9iaW5hcnlfY29weV9pc19ib3VuZGVkX3ByaXZhdGVfYW5kX25ldmVyX2VjaG9lZChzZWxmKTpcbiAgICAgICAgYmxvYiA9IGInc3ludGhldGljIHByaXZhdGUgZml4dHVyZSBieXRlcydcbiAgICAgICAgZGlnZXN0ID0gX19pbXBvcnRfXygnaGFzaGxpYicpLnNoYTI1NihibG9iKS5oZXhkaWdlc3QoKVxuICAgICAgICBtZXRhZGF0YSA9IHsnYWxsX2NoZWNrc19wYXNzJzogVHJ1ZSwgJ3NuYXBzaG90X2ZpbGUnOiAnZHJpbGwuc3FsaXRlJywgJ3NuYXBzaG90X2J5dGVzJzogbGVuKGJsb2IpLFxuICAgICAgICAgICAgICAgICAgICAnc25hcHNob3Rfc2hhMjU2JzogZGlnZXN0LCAnc25hcHNob3RfcmVhZG9ubHknOiBDT1VOVCxcbiAgICAgICAgICAgICAgICAgICAgJ3BvZF9uYW1lJzogJ2ZpeHR1cmUtcG9kJywgJ3BvZF91aWQnOiAnZml4dHVyZS11aWQnfVxuICAgICAgICBqb3VybmFsID0gdHlwZSgnRml4dHVyZUpvdXJuYWwnLCAoKSwgeydkYXRhJzogeydwaGFzZXMnOiB7J2RyaWxsLWJhY2t1cCc6IHsncmVzdWx0JzogbWV0YWRhdGF9fX19KSgpXG4gICAgICAgIHJlYWxfcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuXG4gICAgICAgIGZvciBleHRyYSBpbiAoYicnLCBiJ292ZXJzaXplZCcpOlxuICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZXh0cmE9ZXh0cmEpLCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyBmb2xkZXI6XG4gICAgICAgICAgICAgICAgb3MuY2htb2QoZm9sZGVyLCAwbzcwMClcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpXG5cbiAgICAgICAgICAgICAgICBkZWYgY2hpbGQoKmFyZ3MsICoqa3dhcmdzKTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxfcG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAnaW1wb3J0IHN5cztzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZSgnICsgcmVwcihibG9iICsgZXh0cmEpICsgJyknXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTClcblxuICAgICAgICAgICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KGFjdHVhdG9yLCAnQ1VTVE9EWScsIFBhdGgoZm9sZGVyKSksIHBhdGNoLm9iamVjdChhY3R1YXRvciwgJ3JlbW90ZScsIHJldHVybl92YWx1ZT1tZXRhZGF0YSksIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaCgnc3VicHJvY2Vzcy5Qb3BlbicsIHNpZGVfZWZmZWN0PWNoaWxkKSwgcmVkaXJlY3Rfc3Rkb3V0KG91dHB1dCk6XG4gICAgICAgICAgICAgICAgICAgIGlmIGV4dHJhOlxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YXRvci5jb3B5X3NuYXBzaG90KCdkcmlsbC1jb3B5JywgUkVWSVNJT04sIHt9LCBqb3VybmFsKVxuICAgICAgICAgICAgICAgICAgICBlbHNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWN0dWF0b3IuY29weV9zbmFwc2hvdCgnZHJpbGwtY29weScsIFJFVklTSU9OLCB7fSwgam91cm5hbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHRbJ29mZl9jbHVzdGVyX3ByaXZhdGVfY29weV92ZXJpZmllZCddKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoUGF0aChmb2xkZXIpIC8gJ2RyaWxsLnNxbGl0ZScpLnJlYWRfYnl0ZXMoKSwgYmxvYilcbiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLCAnJylcbiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChQYXRoKGZvbGRlcikgLyAnZHJpbGwuc3FsaXRlJykuc3RhdCgpLnN0X21vZGUgJiAwbzc3NywgMG82MDApXG5cbiAgICBkZWYgdGVzdF9yZWNyZWF0ZWRfb2ZmbGluZV92b2x1bWVfY2Fubm90X2JlX2RlbGV0ZWQoc2VsZik6XG4gICAgICAgIGlkZW50aXR5ID0geydOYW1lJzogYWN0dWF0b3IuVk9MVU1FLCAnTGFiZWxzJzogeydub25jZSc6ICdvbGQnfSwgJ0NyZWF0ZWRBdCc6ICdvbGQnfVxuICAgICAgICBqb3VybmFsID0gdHlwZSgnRml4dHVyZUpvdXJuYWwnLCAoKSwgeydkYXRhJzogeydwaGFzZXMnOiB7XG4gICAgICAgICAgICAnb2ZmbGluZS12ZXJpZnknOiB7J3Jlc3VsdCc6IHsnY3JlYXRlZF92b2x1bWVfaWRlbnRpdHknOiBpZGVudGl0eX19fX19KSgpXG4gICAgICAgIGluc3BlY3RlZCA9IFt7KippZGVudGl0eSwgJ0NyZWF0ZWRBdCc6ICdyZWNyZWF0ZWQnfV1cbiAgICAgICAgd2l0aCBwYXRjaC5vYmplY3QoYWN0dWF0b3IsICdkb2NrZXInLCByZXR1cm5fdmFsdWU9c3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzKFtdLCAwLCBqc29uLmR1bXBzKGluc3BlY3RlZCksICcnKSkgYXMgbW9ja2VkOlxuICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKTpcbiAgICAgICAgICAgICAgICBhY3R1YXRvci5jbGVhbnVwX29mZmxpbmUoam91cm5hbClcbiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja2VkLmNhbGxfY291bnQsIDEpXG5cbiAgICBkZWYgdGVzdF9vZmZsaW5lX3Bvc3RfYWRtaW5faW50ZWdyaXR5X2FuZF9vcmlnaW5hbF9oYXNoX2FyZV9yZWNoZWNrZWQoc2VsZik6XG4gICAgICAgIGZvciBkZWZlY3QgaW4gKCdub25lJywgJ3Bvc3QtaW50ZWdyaXR5JywgJ29yaWdpbmFsLWhhc2gnKTpcbiAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGRlZmVjdD1kZWZlY3QpLCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyBkaXJlY3Rvcnk6XG4gICAgICAgICAgICAgICAgZm9sZGVyPVBhdGgoZGlyZWN0b3J5KTtvcy5jaG1vZChmb2xkZXIsMG83MDApXG4gICAgICAgICAgICAgICAgc25hcHNob3Q9Zm9sZGVyLydkcmlsbC5zcWxpdGUnO3NuYXBzaG90LndyaXRlX2J5dGVzKGIncHJpdmF0ZSBzeW50aGV0aWMgc25hcHNob3QnKTtvcy5jaG1vZChzbmFwc2hvdCwwbzYwMClcbiAgICAgICAgICAgICAgICBkaWdlc3Q9YWN0dWF0b3Iuc2hhKHNuYXBzaG90KVxuICAgICAgICAgICAgICAgIHByaW9yPXsnc25hcHNob3Rfc2hhMjU2JzpkaWdlc3QsJ3NuYXBzaG90X3JlYWRvbmx5JzpDT1VOVH1cbiAgICAgICAgICAgICAgICBqb3VybmFsPXR5cGUoJ0ZpeHR1cmVKb3VybmFsJywoKSx7J2RhdGEnOnsncGhhc2VzJzp7J2RyaWxsLWNvcHknOnsncmVzdWx0Jzpwcmlvcn0sJ29mZmxpbmUtdmVyaWZ5Jzp7J2F0dGVtcHRfaWQnOidub25jZSd9fX0sJ25vdGUnOmxhbWJkYSAqYXJnczpOb25lfSkoKVxuICAgICAgICAgICAgICAgIHJlYWRzPVtdXG4gICAgICAgICAgICAgICAgdm9sdW1lPXsnTmFtZSc6YWN0dWF0b3IuVk9MVU1FLCdMYWJlbHMnOnsnaW5mb3JtZWQtZGVjaXNpb24uY2FzZSc6J2luZmQtcHVycG9zZS0yMDI2MTAxMS1yMScsJ2luZm9ybWVkLWRlY2lzaW9uLnVzZSc6J29mZmxpbmUtcmVzdG9yZS1vbmx5JywnaW5mb3JtZWQtZGVjaXNpb24uYXR0ZW1wdCc6J25vbmNlJ30sJ0RyaXZlcic6J2xvY2FsJywnU2NvcGUnOidsb2NhbCcsJ0NyZWF0ZWRBdCc6J2ZpeHR1cmUnLCdPcHRpb25zJzpOb25lfVxuICAgICAgICAgICAgICAgIGRlZiBkb2NrZXIoYXJndiwgYm9keT1Ob25lLCAqKmt3YXJncyk6XG4gICAgICAgICAgICAgICAgICAgIGlmIGFyZ3ZbMF09PSdpbmZvJzpib2R5PWpzb24uZHVtcHMoJ2JudC1sYXAwMDEnKVxuICAgICAgICAgICAgICAgICAgICBlbGlmIGFyZ3ZbOjJdPT1bJ3ZvbHVtZScsJ2xzJ106Ym9keT0nJ1xuICAgICAgICAgICAgICAgICAgICBlbGlmIGFyZ3ZbOjJdPT1bJ3ZvbHVtZScsJ2NyZWF0ZSddOmJvZHk9YWN0dWF0b3IuVk9MVU1FXG4gICAgICAgICAgICAgICAgICAgIGVsaWYgYXJndls6Ml09PVsndm9sdW1lJywnaW5zcGVjdCddOmJvZHk9anNvbi5kdW1wcyhbdm9sdW1lXSlcbiAgICAgICAgICAgICAgICAgICAgZWxpZiAnaW5mb3JtZWQtZGVjaXNpb24tYWRtaW4nIGluIGFyZ3Y6XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5PWpzb24uZHVtcHMoe2tleTpDT1VOVFtrZXldIGZvciBrZXkgaW4gKCdzY2hlbWFfdmVyc2lvbicsJ2xpZmVjeWNsZScsJ291dGJveCcsJ3N1Ym1pc3Npb25zJyl9KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVmZWN0PT0nb3JpZ2luYWwtaGFzaCc6c25hcHNob3Qud3JpdGVfYnl0ZXMoYidjaGFuZ2VkIHN5bnRoZXRpYyBvcmlnaW5hbCcpXG4gICAgICAgICAgICAgICAgICAgIGVsaWYgJy0tZW50cnlwb2ludCcgaW4gYXJndiBhbmQgJ3B5dGhvbicgaW4gYXJndjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRzLmFwcGVuZChhcmd2KTtwcm9vZj1jb3B5LmRlZXBjb3B5KENPVU5UKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHJlYWRzKT09MiBhbmQgZGVmZWN0PT0ncG9zdC1pbnRlZ3JpdHknOnByb29mWydpbnRlZ3JpdHknXT0nY29ycnVwdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9anNvbi5kdW1wcyhwcm9vZilcbiAgICAgICAgICAgICAgICAgICAgZWxzZTpyYWlzZSBBc3NlcnRpb25FcnJvcigndW5leHBlY3RlZCBvZmZsaW5lIGNvbW1hbmQnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzKGFyZ3YsMCxib2R5LCcnKVxuICAgICAgICAgICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KGFjdHVhdG9yLCdDVVNUT0RZJyxmb2xkZXIpLHBhdGNoLm9iamVjdChhY3R1YXRvciwnQ0FTRScsQ0FTRSkscGF0Y2gub2JqZWN0KGFjdHVhdG9yLCdkb2NrZXInLHNpZGVfZWZmZWN0PWRvY2tlcikscGF0Y2goJ3N1YnByb2Nlc3MucnVuJyxyZXR1cm5fdmFsdWU9c3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzKFtdLDAsJ3tcImFsbF9jaGVja3NfcGFzc1wiOnRydWUsXCJwcml2YXRlX2NvcHlfdmVyaWZpZWRcIjp0cnVlfScsJycpKTpcbiAgICAgICAgICAgICAgICAgICAgaWYgZGVmZWN0PT0nbm9uZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9YWN0dWF0b3Iub2ZmbGluZV92ZXJpZnkoam91cm5hbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WydvZmZsaW5lX3Bvc3RfYWRtaW5fcmVhZG9ubHknXSxDT1VOVClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHRbJ29yaWdpbmFsX3NuYXBzaG90X2hhc2hfdW5jaGFuZ2VkJ10pXG4gICAgICAgICAgICAgICAgICAgIGVsc2U6XG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOmFjdHVhdG9yLm9mZmxpbmVfdmVyaWZ5KGpvdXJuYWwpXG4gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVhZHMpLDIpXG5cblxuY2xhc3MgRml4ZWROYXRpdmVQcm9ncmFtKHVuaXR0ZXN0LlRlc3RDYXNlKTpcbiAgICBkZWYgZml4dHVyZShzZWxmKTpcbiAgICAgICAgc2VhbGVkID0ganNvbi5sb2FkcygoQ0FTRSAvICdzZWFsZWQtbGl2ZS1kZXBsb3ltZW50Lmpzb24nKS5yZWFkX3RleHQoKSlcbiAgICAgICAgbGl2ZSA9IGNvcHkuZGVlcGNvcHkoc2VhbGVkKVxuICAgICAgICBsaXZlWydtZXRhZGF0YSddLnVwZGF0ZShnZW5lcmF0aW9uPTQyKVxuICAgICAgICBsaXZlWydzdGF0dXMnXSA9IHsncmVhZHlSZXBsaWNhcyc6IDEsICd1cGRhdGVkUmVwbGljYXMnOiAxLCAnb2JzZXJ2ZWRHZW5lcmF0aW9uJzogNDJ9XG4gICAgICAgIGRlcGVuZGVuY2llcyA9IGpzb24ubG9hZHMoKENBU0UgLyAnc2VhbGVkLW5hdGl2ZS1kZXBlbmRlbmNpZXMuanNvbicpLnJlYWRfdGV4dCgpKVxuICAgICAgICBjbSA9IGNvcHkuZGVlcGNvcHkoZGVwZW5kZW5jaWVzWydjb25maWdtYXAnXSlcbiAgICAgICAgY20ucG9wKCdjYW5vbmljYWxfZGF0YV9zaGEyNTYnKVxuICAgICAgICBzZXJ2aWNlID0ganNvbi5sb2FkcygoQ0FTRSAvICdjYW5kaWRhdGUtZGVwbG95bWVudC5qc29uJykucmVhZF90ZXh0KCkpXG4gICAgICAgIHNvdXJjZV9zZXJ2aWNlID0ganNvbi5sb2FkcygoQ0FTRS5wYXJlbnRzWzJdIC8gJ2RlcGxveS9saWZlY3ljbGUvc2VydmljZS5jYW5kaWRhdGUuanNvbicpLnJlYWRfdGV4dCgpKVxuICAgICAgICBjbVsnZGF0YSddID0gbmV4dCh4IGZvciB4IGluIHNvdXJjZV9zZXJ2aWNlWydpdGVtcyddIGlmIHhbJ2tpbmQnXSA9PSAnQ29uZmlnTWFwJylbJ2RhdGEnXVxuICAgICAgICBwdmMgPSBjb3B5LmRlZXBjb3B5KGRlcGVuZGVuY2llc1sncHZjJ10pXG4gICAgICAgIHB2Y1snc3RhdHVzJ10gPSB7J3BoYXNlJzogJ0JvdW5kJ31cbiAgICAgICAgYXBwID0geydtZXRhZGF0YSc6IHsndWlkJzogJzQ5OTg2OGYyLWVhYmMtNGRmNC1hZTMxLWI4OWNlNThkNzUwZCcsICdyZXNvdXJjZVZlcnNpb24nOiAnMTcnfSxcbiAgICAgICAgICAgICAgICdzcGVjJzogeydzb3VyY2UnOiB7J3JlcG9VUkwnOiAnaHR0cHM6Ly9mb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb24uZ2l0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhdGgnOiAnZGVwbG95L2xpZmVjeWNsZScsICd0YXJnZXRSZXZpc2lvbic6ICc3ZGI4NDg1ZmZlY2RlYmZhYmQ3N2E5ZGFlYzA4NTU1M2M3NGJmMGJmJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGVzdGluYXRpb24nOiB7J25hbWVzcGFjZSc6ICdpbmZvcm1lZC1kZWNpc2lvbicsICdzZXJ2ZXInOiAnaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjJ319fVxuICAgICAgICBvYmplY3RzID0geydkZXBsb3ltZW50JzogbGl2ZSwgJ2NvbmZpZ21hcCc6IGNtLCAncHZjJzogcHZjLCAnYXBwbGljYXRpb24nOiBhcHB9XG4gICAgICAgIHBheWxvYWQgPSB7J3BoYXNlJzogJ3JlbGVhc2UnLCAnc291cmNlX3JldmlzaW9uJzogUkVWSVNJT04sICdhcHByb3ZhbCc6IHt9LCAnc2VhbGVkJzogc2VhbGVkLFxuICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBkZXBlbmRlbmNpZXMsICdjYW5kaWRhdGUnOiBzZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICdyb2xsYmFjayc6IGpzb24ubG9hZHMoKENBU0UgLyAncm9sbGJhY2stZGVwbG95bWVudC5qc29uJykucmVhZF90ZXh0KCkpLFxuICAgICAgICAgICAgICAgICAgICdyZWFkb25seSc6IChDQVNFIC8gJ3NxbGl0ZV9yZWFkb25seS5weScpLnJlYWRfdGV4dCgpLCdwdXJwb3NlX2NoZWNrcyc6KENBU0UvJ2NoZWNrX2luc3RhbGxlZC5weScpLnJlYWRfdGV4dCgpLFxuICAgICAgICAgICAgICAgICAgICdyZWNlaXB0X3NhZmV0eSc6IChQYXRoKF9fZmlsZV9fKS5wYXJlbnQgLyAncmVjZWlwdF9zYWZldHkucHknKS5yZWFkX3RleHQoKX1cbiAgICAgICAgcmV0dXJuIG9iamVjdHMsIHBheWxvYWRcblxuICAgIGRlZiBleGVjdXRlX2Zha2Uoc2VsZiwgb2JqZWN0cywgcGF5bG9hZCwgYW1iaWd1b3VzPUZhbHNlLCBzY2hlbWFfcmVmdXNlZD1GYWxzZSk6XG4gICAgICAgIHdyaXRlcyA9IFtdXG4gICAgICAgIGNhbGxzID0gW11cblxuICAgICAgICBkZWYgZmFrZShhcmd2LCBpbnB1dD1Ob25lLCAqKmt3YXJncyk6XG4gICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJndilcbiAgICAgICAgICAgIGlmIGFyZ3ZbOjJdID09IFsna3ViZWN0bCcsICdnZXQnXTpcbiAgICAgICAgICAgICAgICBraW5kID0gYXJndlsyXVxuICAgICAgICAgICAgICAgIGlmIGtpbmQgaW4gb2JqZWN0czpcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IG9iamVjdHNba2luZF1cbiAgICAgICAgICAgICAgICBlbGlmIGtpbmQgPT0gJ3BvZHMnOlxuICAgICAgICAgICAgICAgICAgICBib2R5ID0geydpdGVtcyc6IFt7J21ldGFkYXRhJzogeyduYW1lJzogJ2ZpeHR1cmUtcG9kJywgJ3VpZCc6ICdwb2QtdWlkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lclJlZmVyZW5jZXMnOiBbeydraW5kJzogJ1JlcGxpY2FTZXQnLCAnbmFtZSc6ICdmaXh0dXJlLXJzJywgJ3VpZCc6ICdycy11aWQnfV19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlYyc6IG9iamVjdHNbJ2RlcGxveW1lbnQnXVsnc3BlYyddWyd0ZW1wbGF0ZSddWydzcGVjJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnOiB7J3BoYXNlJzogJ1J1bm5pbmcnLCAnY29udGFpbmVyU3RhdHVzZXMnOiBbeyduYW1lJzonaW5mb3JtZWQtZGVjaXNpb24nLCdyZWFkeSc6IFRydWV9XX19XX1cbiAgICAgICAgICAgICAgICBlbGlmIGtpbmQgPT0gJ3JlcGxpY2FzZXQnOlxuICAgICAgICAgICAgICAgICAgICBib2R5ID0geydtZXRhZGF0YSc6IHsndWlkJzogJ3JzLXVpZCcsICdvd25lclJlZmVyZW5jZXMnOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7J2tpbmQnOiAnRGVwbG95bWVudCcsICd1aWQnOiBwYXlsb2FkWydzZWFsZWQnXVsnbWV0YWRhdGEnXVsndWlkJ119XX19XG4gICAgICAgICAgICAgICAgZWxpZiBraW5kID09ICdub2Rlcyc6XG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB7J2l0ZW1zJzogW3snbWV0YWRhdGEnOiB7J25hbWUnOiAnZml4dHVyZS1ub2RlJ30sICdzdGF0dXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYWRkcmVzc2VzJzogW3snYWRkcmVzcyc6ICc5Mi4yMDUuNjIuMjM5J31dLCAnYWxsb2NhdGFibGUnOiB7J2NwdSc6ICc0J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFt7J3R5cGUnOiBrZXksICdzdGF0dXMnOiAnVHJ1ZScgaWYga2V5ID09ICdSZWFkeScgZWxzZSAnRmFsc2UnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiAoJ1JlYWR5JywgJ01lbW9yeVByZXNzdXJlJywgJ0Rpc2tQcmVzc3VyZScsICdQSURQcmVzc3VyZScpXX19XX1cbiAgICAgICAgICAgICAgICBlbHNlOlxuICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5leHBlY3RlZCBmaXhlZCBtZXRhZGF0YSByb3V0ZScpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuQ29tcGxldGVkUHJvY2Vzcyhhcmd2LCAwLCBqc29uLmR1bXBzKGJvZHkpLCAnJylcbiAgICAgICAgICAgIGlmIGFyZ3ZbOjJdID09IFsna3ViZWN0bCcsICdleGVjJ106XG4gICAgICAgICAgICAgICAgaWYgc2NoZW1hX3JlZnVzZWQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLkNvbXBsZXRlZFByb2Nlc3MoYXJndiwgMSwgJycsICd3aXRoaGVsZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuQ29tcGxldGVkUHJvY2Vzcyhhcmd2LCAwLCBqc29uLmR1bXBzKHtcbiAgICAgICAgICAgICAgICAgICAgJ2FsbF9jaGVja3NfcGFzcyc6IFRydWUsICdsaXZlX3JlYWRvbmx5X3NjaGVtYV9pbnRlZ3JpdHlfY291bnRzJzogQ09VTlR9KSwgJycpXG4gICAgICAgICAgICBpZiBhcmd2WzoyXSA9PSBbJ2t1YmVjdGwnLCAnYXBwbHknXTpcbiAgICAgICAgICAgICAgICBhZG1pdHRlZCA9IGNvcHkuZGVlcGNvcHkocGF5bG9hZFsnc2VhbGVkJ10pXG4gICAgICAgICAgICAgICAgYWRtaXR0ZWRbJ3NwZWMnXVsndGVtcGxhdGUnXVsnc3BlYyddWydjb250YWluZXJzJ11bMF1bJ2ltYWdlJ10gPSAoYWN0dWF0b3IuSU1BR0UgaWYgcGF5bG9hZFsncGhhc2UnXT09J3JlbGVhc2UnIGVsc2UgcGF5bG9hZFsnc2VhbGVkJ11bJ3NwZWMnXVsndGVtcGxhdGUnXVsnc3BlYyddWydjb250YWluZXJzJ11bMF1bJ2ltYWdlJ10pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuQ29tcGxldGVkUHJvY2Vzcyhhcmd2LCAwLCBqc29uLmR1bXBzKGFkbWl0dGVkKSwgJycpXG4gICAgICAgICAgICBpZiBhcmd2WzoyXSA9PSBbJ2t1YmVjdGwnLCAnZGVzY3JpYmUnXTpcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzKGFyZ3YsIDAsICdBbGxvY2F0ZWQgcmVzb3VyY2VzOlxcbiBjcHUgMzQ2MG0gKDg2JSlcXG4nLCAnJylcbiAgICAgICAgICAgIGlmIGFyZ3ZbOjJdID09IFsna3ViZWN0bCcsICdkaWZmJ106XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuQ29tcGxldGVkUHJvY2Vzcyhhcmd2LCAxLCAnLWltYWdlOiBiYXNlXFxuK2ltYWdlOiBjYW5kaWRhdGVcXG4nLCAnJylcbiAgICAgICAgICAgIGlmIGFyZ3ZbOjJdID09IFsna3ViZWN0bCcsICdwYXRjaCddOlxuICAgICAgICAgICAgICAgIGlmICctLWRyeS1ydW49c2VydmVyJyBub3QgaW4gYXJndjpcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVzLmFwcGVuZChqc29uLmxvYWRzKGlucHV0KSlcbiAgICAgICAgICAgICAgICAgICAgaWYgYW1iaWd1b3VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuQ29tcGxldGVkUHJvY2Vzcyhhcmd2LCAxLCAnJywgJ3dpdGhoZWxkJylcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzKGFyZ3YsIDAsICdhcHBsaWNhdGlvbi5hcmdvcHJvai5pby9pbmZvcm1lZC1kZWNpc2lvblxcbicsICcnKVxuICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ3VuZXhwZWN0ZWQgY29tbWFuZCcpXG5cbiAgICAgICAgc291cmNlID0gUFJPR1JBTS5yZXBsYWNlKCdfX1BBWUxPQURfXycsIHJlcHIoanNvbi5kdW1wcyhwYXlsb2FkKSkpLnJlcGxhY2UoXG4gICAgICAgICAgICAnX19HVUFSRF9fJywgcmVwcigoQ0FTRSAvICdjaGFuZ2VfZ3VhcmQucHknKS5yZWFkX3RleHQoKSkpXG4gICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKClcbiAgICAgICAgd2l0aCBwYXRjaCgnc3VicHJvY2Vzcy5ydW4nLCBzaWRlX2VmZmVjdD1mYWtlKSwgcmVkaXJlY3Rfc3Rkb3V0KG91dHB1dCk6XG4gICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgZXhlYyhjb21waWxlKHNvdXJjZSwgJ2ZpeGVkLW5hdGl2ZS1maXh0dXJlJywgJ2V4ZWMnKSwgeydfX25hbWVfXyc6ICdfX2ZpeHR1cmVfXyd9KVxuICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBTeXN0ZW1FeGl0KTpcbiAgICAgICAgICAgICAgICBwYXNzXG4gICAgICAgIHJlY2VpcHQgPSBqc29uLmxvYWRzKG91dHB1dC5nZXR2YWx1ZSgpKSBpZiBvdXRwdXQuZ2V0dmFsdWUoKSBlbHNlIHsnYWxsX2NoZWNrc19wYXNzJzogRmFsc2V9XG4gICAgICAgIHJldHVybiByZWNlaXB0LCB3cml0ZXMsIGNhbGxzXG5cbiAgICBkZWYgdGVzdF9vbmx5X2V4aXN0aW5nX2FwcGxpY2F0aW9uX29wZXJhdGlvbl9hbmRfZGVwbG95bWVudF9hcmVfcmVxdWVzdGVkKHNlbGYpOlxuICAgICAgICBvYmplY3RzLCBwYXlsb2FkID0gc2VsZi5maXh0dXJlKClcbiAgICAgICAgcmVjZWlwdCwgd3JpdGVzLCBjYWxscyA9IHNlbGYuZXhlY3V0ZV9mYWtlKG9iamVjdHMsIHBheWxvYWQpXG4gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWNlaXB0WydhbGxfY2hlY2tzX3Bhc3MnXSlcbiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWNlaXB0Wydyb2xsb3V0X3ZlcmlmaWVkJ10pXG4gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdyaXRlcyksIDEpXG4gICAgICAgIG9wZXJhdGlvbiA9IHdyaXRlc1swXVstMV1bJ3ZhbHVlJ11cbiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRpb25bJ3N5bmMnXVsncHJ1bmUnXSlcbiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRpb25bJ3N5bmMnXVsncmVzb3VyY2VzJ10sIFtcbiAgICAgICAgICAgIHsnZ3JvdXAnOiAnYXBwcycsICdraW5kJzogJ0RlcGxveW1lbnQnLCAnbmFtZSc6ICdpbmZvcm1lZC1kZWNpc2lvbicsICduYW1lc3BhY2UnOiAnaW5mb3JtZWQtZGVjaXNpb24nfV0pXG4gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJy0tZHJ5LXJ1bj1zZXJ2ZXInIGluIGFyZ3YgYW5kIGFyZ3ZbOjJdID09IFsna3ViZWN0bCcsICdwYXRjaCddIGZvciBhcmd2IGluIGNhbGxzKSlcbiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXNbMF1bMF1bJ3BhdGgnXSwgJy9tZXRhZGF0YS91aWQnKVxuXG4gICAgZGVmIHRlc3Rfc291cmNlX292ZXJyaWRlc19hdXRvbWF0aW9uX2FuZF9jdXN0b2R5X2RyaWZ0X3N0b3BfYmVmb3JlX3dyaXRlKHNlbGYpOlxuICAgICAgICBtdXRhdGlvbnMgPSBbbGFtYmRhIG86IG9bJ2FwcGxpY2F0aW9uJ11bJ21ldGFkYXRhJ10udXBkYXRlKHVpZD0ncmVjcmVhdGVkJyksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgbzogb1snYXBwbGljYXRpb24nXVsnc3BlYyddLnVwZGF0ZShzeW5jUG9saWN5PXsnYXV0b21hdGVkJzoge319KSxcbiAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBvOiBvWydhcHBsaWNhdGlvbiddWydzcGVjJ11bJ3NvdXJjZSddLnVwZGF0ZShrdXN0b21pemU9eydpbWFnZXMnOiBbJ290aGVyJ119KSxcbiAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBvOiBvWydhcHBsaWNhdGlvbiddWydzcGVjJ10udXBkYXRlKHNvdXJjZXM9W3t9XSksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgbzogb1snY29uZmlnbWFwJ11bJ21ldGFkYXRhJ10udXBkYXRlKHVpZD0ncmVjcmVhdGVkJyksXG4gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgbzogb1sncHZjJ11bJ3NwZWMnXS51cGRhdGUodm9sdW1lTmFtZT0ncmVwbGFjZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBvOiBvWydkZXBsb3ltZW50J11bJ3N0YXR1cyddLnVwZGF0ZShyZWFkeVJlcGxpY2FzPTApXVxuICAgICAgICBmb3IgbXV0YXRlIGluIG11dGF0aW9uczpcbiAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG11dGF0ZT1tdXRhdGUpOlxuICAgICAgICAgICAgICAgIG9iamVjdHMsIHBheWxvYWQgPSBzZWxmLmZpeHR1cmUoKVxuICAgICAgICAgICAgICAgIG11dGF0ZShvYmplY3RzKVxuICAgICAgICAgICAgICAgIHJlY2VpcHQsIHdyaXRlcywgY2FsbHMgPSBzZWxmLmV4ZWN1dGVfZmFrZShvYmplY3RzLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVjZWlwdFsnYWxsX2NoZWNrc19wYXNzJ10pXG4gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXMsIFtdKVxuXG4gICAgZGVmIHRlc3RfcHJlb3Blbl9zY2hlbWFfcmVmdXNhbF9wcmV2ZW50c19pbWFnZV9vcGVyYXRpb24oc2VsZik6XG4gICAgICAgIG9iamVjdHMsIHBheWxvYWQgPSBzZWxmLmZpeHR1cmUoKVxuICAgICAgICByZWNlaXB0LCB3cml0ZXMsIGNhbGxzID0gc2VsZi5leGVjdXRlX2Zha2Uob2JqZWN0cywgcGF5bG9hZCwgc2NoZW1hX3JlZnVzZWQ9VHJ1ZSlcbiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWNlaXB0WydhbGxfY2hlY2tzX3Bhc3MnXSlcbiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXMsIFtdKVxuXG5cbiAgICBkZWYgdGVzdF9yb2xsYmFja191bnJlYWR5X2NhbmRpZGF0ZV9uZXZlcl9yZWFkc19wb2Rfb3JfZGF0YWJhc2Uoc2VsZik6XG4gICAgICAgIG9iamVjdHMsIHBheWxvYWQgPSBzZWxmLmZpeHR1cmUoKVxuICAgICAgICBwYXlsb2FkWydwaGFzZSddID0gJ3JvbGxiYWNrJ1xuICAgICAgICBvYmplY3RzWydkZXBsb3ltZW50J11bJ3N0YXR1cyddLnVwZGF0ZShyZWFkeVJlcGxpY2FzPTAsIHVwZGF0ZWRSZXBsaWNhcz0wKVxuICAgICAgICBvYmplY3RzWydkZXBsb3ltZW50J11bJ3NwZWMnXVsndGVtcGxhdGUnXVsnc3BlYyddWydjb250YWluZXJzJ11bMF1bJ2ltYWdlJ10gPSBhY3R1YXRvci5JTUFHRVxuICAgICAgICBvYmplY3RzWydhcHBsaWNhdGlvbiddWydzcGVjJ11bJ3NvdXJjZSddWyd0YXJnZXRSZXZpc2lvbiddID0gUkVWSVNJT05cbiAgICAgICAgcmVjZWlwdCwgd3JpdGVzLCBjYWxscyA9IHNlbGYuZXhlY3V0ZV9mYWtlKG9iamVjdHMsIHBheWxvYWQsIHNjaGVtYV9yZWZ1c2VkPVRydWUpXG4gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWNlaXB0WydhbGxfY2hlY2tzX3Bhc3MnXSlcbiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWNlaXB0Wydyb2xsb3V0X3ZlcmlmaWVkJ10pXG4gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdyaXRlcyksIDEpXG4gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KGFyZ3ZbOjJdID09IFsna3ViZWN0bCcsICdleGVjJ10gb3IgYXJndls6M10gPT0gWydrdWJlY3RsJywgJ2dldCcsICdwb2RzJ10gZm9yIGFyZ3YgaW4gY2FsbHMpKVxuICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlc1swXVstMV1bJ3ZhbHVlJ11bJ3N5bmMnXVsncmV2aXNpb24nXSwgJzdkYjg0ODVmZmVjZGViZmFiZDc3YTlkYWVjMDg1NTUzYzc0YmYwYmYnKVxuXG4gICAgZGVmIHRlc3Rfcm9sbGJhY2tfc3RpbGxfcmVmdXNlc19jdXN0b2R5X29yX25vbnBhaXJfaW1hZ2VfZHJpZnQoc2VsZik6XG4gICAgICAgIGZvciBkZWZlY3QgaW4gKCdjbScsICdwdmMnLCAnaW1hZ2UnKTpcbiAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGRlZmVjdD1kZWZlY3QpOlxuICAgICAgICAgICAgICAgIG9iamVjdHMsIHBheWxvYWQgPSBzZWxmLmZpeHR1cmUoKTtwYXlsb2FkWydwaGFzZSddID0gJ3JvbGxiYWNrJ1xuICAgICAgICAgICAgICAgIG9iamVjdHNbJ2RlcGxveW1lbnQnXVsnc3RhdHVzJ11bJ3JlYWR5UmVwbGljYXMnXSA9IDBcbiAgICAgICAgICAgICAgICBpZiBkZWZlY3QgPT0gJ2NtJzpvYmplY3RzWydjb25maWdtYXAnXVsnbWV0YWRhdGEnXVsndWlkJ10gPSAncmVjcmVhdGVkJ1xuICAgICAgICAgICAgICAgIGVsaWYgZGVmZWN0ID09ICdwdmMnOm9iamVjdHNbJ3B2YyddWydzcGVjJ11bJ3ZvbHVtZU5hbWUnXSA9ICdyZXBsYWNlZCdcbiAgICAgICAgICAgICAgICBlbHNlOm9iamVjdHNbJ2RlcGxveW1lbnQnXVsnc3BlYyddWyd0ZW1wbGF0ZSddWydzcGVjJ11bJ2NvbnRhaW5lcnMnXVswXVsnaW1hZ2UnXSA9ICdmb3JlaWduLWltYWdlJ1xuICAgICAgICAgICAgICAgIHJlY2VpcHQsIHdyaXRlcywgY2FsbHMgPSBzZWxmLmV4ZWN1dGVfZmFrZShvYmplY3RzLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVjZWlwdFsnYWxsX2NoZWNrc19wYXNzJ10pO3NlbGYuYXNzZXJ0RXF1YWwod3JpdGVzLCBbXSlcblxuICAgIGRlZiB0ZXN0X3JlY292ZXJ5X3ZlcmlmaWNhdGlvbl9pc19zZXBhcmF0ZV9yZWFkeV9vbGRfaW1hZ2Vfc2NoZW1hX3Byb29mKHNlbGYpOlxuICAgICAgICBvYmplY3RzLCBwYXlsb2FkID0gc2VsZi5maXh0dXJlKCk7cGF5bG9hZFsncGhhc2UnXSA9ICdyb2xsYmFjay12ZXJpZnknXG4gICAgICAgIG9iamVjdHNbJ2FwcGxpY2F0aW9uJ11bJ3N0YXR1cyddID0geydvcGVyYXRpb25TdGF0ZSc6IHsncGhhc2UnOiAnU3VjY2VlZGVkJywgJ29wZXJhdGlvbic6IHsnc3luYyc6IHtcbiAgICAgICAgICAgICdyZXZpc2lvbic6ICc3ZGI4NDg1ZmZlY2RlYmZhYmQ3N2E5ZGFlYzA4NTU1M2M3NGJmMGJmJywgJ3BydW5lJzogRmFsc2UsXG4gICAgICAgICAgICAncmVzb3VyY2VzJzogW3snZ3JvdXAnOidhcHBzJywna2luZCc6J0RlcGxveW1lbnQnLCduYW1lJzonaW5mb3JtZWQtZGVjaXNpb24nLCduYW1lc3BhY2UnOidpbmZvcm1lZC1kZWNpc2lvbid9XX19fX1cbiAgICAgICAgcmVjZWlwdCwgd3JpdGVzLCBjYWxscyA9IHNlbGYuZXhlY3V0ZV9mYWtlKG9iamVjdHMsIHBheWxvYWQpXG4gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWNlaXB0WydhbGxfY2hlY2tzX3Bhc3MnXSk7c2VsZi5hc3NlcnRUcnVlKHJlY2VpcHRbJ3JlY292ZXJ5X3ZlcmlmaWNhdGlvbiddKVxuICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlcywgW10pXG4gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoYXJndls6Ml09PVsna3ViZWN0bCcsJ2V4ZWMnXSBmb3IgYXJndiBpbiBjYWxscykpXG4gICAgICAgIG9iamVjdHNbJ2RlcGxveW1lbnQnXVsnc3RhdHVzJ11bJ3JlYWR5UmVwbGljYXMnXSA9IDBcbiAgICAgICAgcmVjZWlwdCwgd3JpdGVzLCBjYWxscyA9IHNlbGYuZXhlY3V0ZV9mYWtlKG9iamVjdHMscGF5bG9hZClcbiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWNlaXB0WydhbGxfY2hlY2tzX3Bhc3MnXSlcblxuICAgIGRlZiB0ZXN0X2FtYmlndW91c19wYXRjaF9pc19uZXZlcl9yZXRyaWVkKHNlbGYpOlxuICAgICAgICBvYmplY3RzLCBwYXlsb2FkID0gc2VsZi5maXh0dXJlKClcbiAgICAgICAgcmVjZWlwdCwgd3JpdGVzLCBjYWxscyA9IHNlbGYuZXhlY3V0ZV9mYWtlKG9iamVjdHMsIHBheWxvYWQsIGFtYmlndW91cz1UcnVlKVxuICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlY2VpcHRbJ2FsbF9jaGVja3NfcGFzcyddKVxuICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3cml0ZXMpLCAxKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgdW5pdHRlc3QubWFpbigpXG4iCiAgICB9LAogICAgInZhbGlkYXRpb24uanNvbiI6IHsKICAgICAgInNoYTI1NiI6ICIyNmM1YWNmYTZlMmVmNTkwOWZmOWYzZmM4MTljYTE3NjNiNzlmM2NiNjViM2M0MzM3MWY3OTQ0YTI4NGNkZTI4IiwKICAgICAgImNvbnRlbnQiOiAie1xuICBcInRlc3RzXCI6IDE2LFxuICBcInJlc3VsdFwiOiBcInBhc3NlZFwiLFxuICBcInN5bnRoZXRpY190cmFuc3BvcnRfb25seVwiOiB0cnVlLFxuICBcInJlYWxfbmF0aXZlX2RhdGFfcmVhZFwiOiBmYWxzZSxcbiAgXCJuYXRpdmVfYmFja3VwX2V4cG9ydF9yZXN0b3JlX2V4ZWN1dGVkXCI6IGZhbHNlLFxuICBcIm5hdGl2ZV93b3JrbG9hZF9jaGFuZ2VkXCI6IGZhbHNlLFxuICBcImFjdHVhbF9mb3VuZGVyX2FwcHJvdmFsXCI6IGZhbHNlLFxuICBcImxvY2FsX3JlYWRfb25seV9jYXBhYmlsaXR5X2NoZWNrc1wiOiBbXG4gICAgXCJhcmdvY2RDTEkgYWJzZW50LCBleGlzdGluZ0FwcGxpY2F0aW9uLm9wZXJhdGlvbiBwYXRoIHJldGFpbmVkXCIsXG4gICAgXCJEb2NrZXJ1bml4c29ja2V0IGVuZ2luZU5hbWUgYm50LWxhcDAwMVwiXG4gIF0sXG4gIFwiY2FzZV9zb3VyY2VfY29tbWl0X2F0X3ByZXBhcmF0aW9uXCI6IFwiZTAzNTliYyAob3duZXIgb3JpZ2luYWw3OHNvdXJjZTsgZmluYWwgaGVscGVyY29tbWl0IG11c3RiZSBleHBsaWNpdGx5cGlubmVkKVwiLFxuICBcImFkZGl0aW9uYWxfcmVncmVzc2lvbnNcIjogW1xuICAgIFwiUmVhZHkwIGNhbmRpZGF0ZSByb2xsYmFjayBkaXNwYXRjaCBoYXMgbm8gUG9kIG1ldGFkYXRhL0RCIGV4ZWMgYW5kIG9uZSBzY29wZWQgQ0FTIG9wZXJhdGlvblwiLFxuICAgIFwicm9sbGJhY2sgc3RpbGwgcmVmdXNlcyBDTS9QVkMgb3Igbm9ucGFpci1pbWFnZSBkcmlmdFwiLFxuICAgIFwic2VwYXJhdGUgb2xkLWltYWdlIFJlYWR5L3NjaGVtYTUgcmVjb3ZlcnkgcHJvb2ZcIixcbiAgICBcInBvc3QtYWRtaW4gcmVhZG9ubHkgaW50ZWdyaXR5IHJlZnVzYWwgYW5kIG9yaWdpbmFsIHNuYXBzaG90IHRhbXBlciByZWZ1c2FsXCJcbiAgXVxufVxuIgogICAgfQogIH0sCiAgIm5hdGl2ZV9leGVjdXRpb24iOiBmYWxzZQp9Cg==" }, { "digest": "sha256:eef53dd233eee74c17f20823bd7f5787c60cad79ac648021c9479643c6ce9e38", @@ -205,9 +205,9 @@ "content_base64": "ewogICJjb25maWdtYXAiOiB7CiAgICAiYXBpVmVyc2lvbiI6ICJ2MSIsCiAgICAiaW1tdXRhYmxlIjogdHJ1ZSwKICAgICJraW5kIjogIkNvbmZpZ01hcCIsCiAgICAibWV0YWRhdGEiOiB7CiAgICAgICJhbm5vdGF0aW9ucyI6IHsKICAgICAgICAiYXJnb2NkLmFyZ29wcm9qLmlvL3RyYWNraW5nLWlkIjogImluZm9ybWVkLWRlY2lzaW9uOi9Db25maWdNYXA6aW5mb3JtZWQtZGVjaXNpb24vaW5mb3JtZWQtZGVjaXNpb24tcnVudGltZS02YzIyMTg3OGQwNTEiLAogICAgICAgICJpbmZvcm1lZC1kZWNpc2lvbi5jb3Vsb21iLnNvY2lhbC9hZG1pc3Npb24iOiAiYXBwcm92ZWQ7IElORkQtV1AtMDAwNyBjdXRvdmVyIgogICAgICB9LAogICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1ydW50aW1lLTZjMjIxODc4ZDA1MSIsCiAgICAgICJuYW1lc3BhY2UiOiAiaW5mb3JtZWQtZGVjaXNpb24iLAogICAgICAidWlkIjogIjkwMTEzZDJkLTU0ZDktNGU4Mi1iMWQzLTkwYjQ5ZWJlZDJiNSIKICAgIH0sCiAgICAiY2Fub25pY2FsX2RhdGFfc2hhMjU2IjogIjhlYzQ2MmQxMjM0NzU0OGY1MDZlZWViZjFlM2M3Y2M0NzY0ODAxOWM4YTc4MzgwNGQwOWJjYzc5YjBmMjJhZjYiCiAgfSwKICAicHZjIjogewogICAgImFwaVZlcnNpb24iOiAidjEiLAogICAgImtpbmQiOiAiUGVyc2lzdGVudFZvbHVtZUNsYWltIiwKICAgICJtZXRhZGF0YSI6IHsKICAgICAgImFubm90YXRpb25zIjogewogICAgICAgICJhcmdvY2QuYXJnb3Byb2ouaW8vdHJhY2tpbmctaWQiOiAiaW5mb3JtZWQtZGVjaXNpb246L1BlcnNpc3RlbnRWb2x1bWVDbGFpbTppbmZvcm1lZC1kZWNpc2lvbi9pbmZvcm1lZC1kZWNpc2lvbi1kYXRhIiwKICAgICAgICAiaW5mb3JtZWQtZGVjaXNpb24uY291bG9tYi5zb2NpYWwvYWRtaXNzaW9uIjogImFwcHJvdmVkOyBJTkZELVdQLTAwMDcgY3V0b3ZlciIsCiAgICAgICAgInB2Lmt1YmVybmV0ZXMuaW8vYmluZC1jb21wbGV0ZWQiOiAieWVzIiwKICAgICAgICAicHYua3ViZXJuZXRlcy5pby9ib3VuZC1ieS1jb250cm9sbGVyIjogInllcyIsCiAgICAgICAgInZvbHVtZS5iZXRhLmt1YmVybmV0ZXMuaW8vc3RvcmFnZS1wcm92aXNpb25lciI6ICJyYW5jaGVyLmlvL2xvY2FsLXBhdGgiLAogICAgICAgICJ2b2x1bWUua3ViZXJuZXRlcy5pby9zZWxlY3RlZC1ub2RlIjogIjIzOS42Mi4yMDUuOTIuaG9zdC5zZWN1cmVzZXJ2ZXIubmV0IiwKICAgICAgICAidm9sdW1lLmt1YmVybmV0ZXMuaW8vc3RvcmFnZS1wcm92aXNpb25lciI6ICJyYW5jaGVyLmlvL2xvY2FsLXBhdGgiCiAgICAgIH0sCiAgICAgICJmaW5hbGl6ZXJzIjogWwogICAgICAgICJrdWJlcm5ldGVzLmlvL3B2Yy1wcm90ZWN0aW9uIgogICAgICBdLAogICAgICAibmFtZSI6ICJpbmZvcm1lZC1kZWNpc2lvbi1kYXRhIiwKICAgICAgIm5hbWVzcGFjZSI6ICJpbmZvcm1lZC1kZWNpc2lvbiIsCiAgICAgICJ1aWQiOiAiZDgwYjI1YjEtMTQxYS00NDFiLWIyMDUtOThmYTJmZDk4YjdjIgogICAgfSwKICAgICJzcGVjIjogewogICAgICAiYWNjZXNzTW9kZXMiOiBbCiAgICAgICAgIlJlYWRXcml0ZU9uY2UiCiAgICAgIF0sCiAgICAgICJyZXNvdXJjZXMiOiB7CiAgICAgICAgInJlcXVlc3RzIjogewogICAgICAgICAgInN0b3JhZ2UiOiAiMUdpIgogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VDbGFzc05hbWUiOiAibG9jYWwtcGF0aCIsCiAgICAgICJ2b2x1bWVNb2RlIjogIkZpbGVzeXN0ZW0iLAogICAgICAidm9sdW1lTmFtZSI6ICJwdmMtZDgwYjI1YjEtMTQxYS00NDFiLWIyMDUtOThmYTJmZDk4YjdjIgogICAgfQogIH0sCiAgInB2Y19waGFzZSI6ICJCb3VuZCIKfQo=" }, { - "digest": "sha256:2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc", + "digest": "sha256:440932f5975f42f8bc3ef5c7b281f42cf843246ffc8faba64a1d80b43ffa7478", "media_type": "text/markdown", - "content_base64": "IyBQcm90ZWN0ZWQgbmF0aXZlIGJhY2t1cC9yZXN0b3JlIGFuZCBpbWFnZS1vbmx5IHJlbGVhc2UgcHJvdG9jb2wKClByZXBhcmVkIHByb3RvY29sIGZvciBgSU5GRC1XUC0wMDA5LVQwNC9wdXJwb3NlLW92ZXJsYXktdjFgLiBObyBhY3R1YWwgbmF0aXZlIGJhY2t1cCwgZGF0YSBleHBvcnQsIHJlc3RvcmUsIHdvcmtsb2FkIGNoYW5nZSBvciBhcHByb3ZhbCBpcyByZWNvcmRlZCBoZXJlLiBDYW5kaWRhdGUgcmVnaXN0cnkgaW1hZ2UgaWRlbnRpdHkgcmVtYWlucyBhIHByZXJlcXVpc2l0ZTsgb25seSBhZnRlciBhY3R1YWwgYXJ0aWZhY3QgcHJvb2YgbWF5IHRoZSBmb3VuZGVyIGFwcHJvdmUgb25lIGV4YWN0IGNvbmRpdGlvbmFsIHByb3RvY29sL3JvbGxvdXQgcGFja2V0LiBUaGUgY29uZmlnLW9ubHk3ZGI4NDg1IGFwcHJvdmFsIGlzIG91dHNpZGUgdGhpcyBzY29wZS4KCiMjIFByZWNvbmRpdGlvbnMgYW5kIHByb3RlY3RlZCBjdXN0b2R5CgpGcmVlemUgZXhhY3QgY2FuZGlkYXRlIGFuZCBwcmlvcjdmNWM2Y2IgaW1hZ2UgZGlnZXN0cywgc291cmNlL2luc3RhbGxlZCBwb2xpY3kgaGFzaGVzLCBjdXJyZW50IG1hbnVhbGx5IG1hbmFnZWQgQXJnbyBBcHBsaWNhdGlvbi9yZXZpc2lvbiwgcnVudGltZSBDb25maWdNYXA2YzIyMTg3OGQwNTEsIERlcGxveW1lbnQgVUlEL3RlbXBsYXRlL3NwZWMsIHNjaGVtYTUsIHBvbGljeSBwYWNrYWdlIHBpbnMsIGRhdGFiYXNlIHBhdGggYC9kYXRhL3ByaXZhdGUvcmV2aWV3LnNxbGl0ZWAsIFBWQyBiaW5kaW5nLCByZXBsaWNhczEvUmVjcmVhdGUgYW5kIHN0YWJsZSBrZXlzIGZvciBpbnRlbmRlZCB2ZXJpZmljYXRpb24uIENvbmZpcm0gbm8gY29uY3VycmVudCB3cml0ZXIgb3IgY3VzdG9keSBjaGFuZ2UuIFVzZSBmaXhlZCBtZXRhZGF0YTsgbmV2ZXIgZmV0Y2ggU2VjcmV0IG9iamVjdHMgb3IgdG9rZW4gdmFsdWVzLiBBIGNoYW5nZWQgaW1hZ2UvY29uZmlnL3NjaGVtYS9vd25lciBpbnZhbGlkYXRlcyB0aGUgcGFja2V0LiBGcmVzaCByZXNvdXJjZXMvaGVhZHJvb20gYW5kIGV4YWN0IHNvdXJjZS9uYXRpdmUgc2VydmVyLWRyeS1ydW4vZGlmZiByZW1haW4gcmVxdWlyZWQuCgpCYWNrdXBzIGFyZSBwcml2YXRlIGV2aWRlbmNlIGNvbnRhaW5pbmcgcmVhbCBkZWNpc2lvbiByZWNvcmRzLCBub3QgbG9ncyBvciBwYWNrZXQgYXR0YWNobWVudHMuIEFsbG9jYXRlIGEgdW5pcXVlIGJhY2t1cCBkaXJlY3RvcnkgdW5kZXIgZXhpc3RpbmcgcHJvdGVjdGVkIFBWQyBjdXN0b2R5LCBvd25lZDEwMDAxLCBtb2RlMDcwMCwgc25hcHNob3QgZmlsZTA2MDAsIG5vIHN5bWxpbmsvaGFyZGxpbmsvcmV1c2VkIG91dHB1dCBwYXRoLiBBbiBvZmYtY2x1c3RlciBjb3B5IGJlbG9uZ3Mgb25seSBpbiB0aGUgYWxyZWFkeSBlc3RhYmxpc2hlZCBpZ25vcmVkIGAucHJpdmF0ZS1iYWNrdXBzLzx1bmlxdWUtdHJpYWwtZGlyZWN0b3J5PmAgY3VzdG9keSB3aXRoMDcwMC8wNjAwIHBlcm1pc3Npb25zOyBubyBHaXQsIFN0YXRlSHViLCBwdWJsaWMgb2JqZWN0IHN0b3JlIG9yIHRlcm1pbmFsLWNvbnRlbnQgZHVtcC4gUmVjb3JkIG9ubHkgc2NoZW1hLCBpbnRlZ3JpdHkgcGFzcy9mYWlsLCBib3VuZGVkIHRhYmxlL3N0YXRlIGNvdW50cyBhbmQgcHJvdGVjdGVkIHJlY2VpcHQgaWRlbnRpZmllcjsgcmV0YWluIGJ5dGUgZGlnZXN0cyBpbiBwcm90ZWN0ZWQgY3VzdG9keSBpZiBuZWVkZWQgZm9yIGludGVybmFsIGNvcHkgaWRlbnRpdHkuIE5vIGNyZWRlbnRpYWwsIHJlY29yZCBwYXlsb2FkIG9yIHRva2VuIGZpbmdlcnByaW50IGVudGVycyBwdWJsaWMgZXZpZGVuY2UuCgojIyBBcHByb3ZlZCBvbmxpbmUgY29tcGF0aWJpbGl0eSBkcmlsbAoKV2l0aGluIHRoZSBleHBsaWNpdCBmb3VuZGVyLWFwcHJvdmVkIGFjdGlvbiwgcnVuIHRoZSBleGlzdGluZyBiYXNlIGltYWdlJ3MgYGluZm9ybWVkLWRlY2lzaW9uLWFkbWluIGJhY2t1cCAtLWRiIC9kYXRhL3ByaXZhdGUvcmV2aWV3LnNxbGl0ZSAtLW91dHB1dCA8bmV3LXByaXZhdGUtc25hcHNob3Q+YCBpbiB0aGUgYWN0dWFsIHNlcnZpbmcgd29ya2xvYWQuIFRoaXMgdXNlcyBTUUxpdGUncyBiYWNrdXAgQVBJIGZvciBhIHRyYW5zYWN0aW9uYWxseSBjb25zaXN0ZW50IHNuYXBzaG90OyBjb3B5aW5nIGEgbGl2ZSBtYWluIGRhdGFiYXNlIHdoaWxlIGlnbm9yaW5nIFdBTCBpcyBwcm9oaWJpdGVkLiBTdXBwcmVzcyByYXcgZmFpbHVyZXMvb3V0cHV0IGFuZCByZXRhaW4gb25seSBzYW5pdGl6ZWQgc3RhdHVzLiBPYnNlcnZlIHNjaGVtYS9pbnRlZ3JpdHkgYW5kIGNvdW50LW9ubHkgbWV0YWRhdGEgZnJvbSB0aGUgcmVzdWx0aW5nIHNuYXBzaG90LCBub3QgcmVjb3JkIGNvbnRlbnQuCgpUcmFuc2ZlciB0aGF0IGNvbnNpc3RlbnQgc25hcHNob3Qgb25seSBpbnRvIHByb3RlY3RlZCBvZmYtY2x1c3RlciBjdXN0b2R5IHRocm91Z2ggdGhlIGV4aXN0aW5nIGF1dGhvcml6ZWQgb3BlcmF0b3IgbGFuZS4gVGhlIGNvcHkgaXMgcmVhbCBwcm9kdWN0aW9uIGRhdGEgZXZlbiBpbiBidWlsZCBtb2RlLiBWZXJpZnkgcHJpdmF0ZSBwZXJtaXNzaW9ucywgdW5pcXVlIGlkZW50aXR5IGFuZCBwcm90ZWN0ZWQgaW50ZXJuYWwgZGlnZXN0IGFncmVlbWVudC4gRG8gbm90IGV4cG9ydCBtb3VudGVkIHdvcmtsb2FkIGNyZWRlbnRpYWxzIG9yIGRpcmVjdG9yeSB0cmVlczsgY29weSBvbmx5IHRoZSBleGFjdCBzbmFwc2hvdC4KCkNyZWF0ZSBhIHNlcGFyYXRlIHByaXZhdGUgZGlzcG9zYWJsZSByZXN0b3JlIHZvbHVtZS9kaXJlY3Rvcnk7IHJldGFpbiB0aGUgb3JpZ2luYWwgc25hcHNob3QgdW5jaGFuZ2VkLiBSdW4gdGhlIGV4YWN0IHB1Ymxpc2hlZCBjYW5kaWRhdGUgd2l0aCBuZXR3b3JrIGRpc2FibGVkLCBubyBwcm9kdWN0aW9uIENvbmZpZ01hcC90b2tlbiBtb3VudHMsIHJlYWQtb25seSBpbWFnZSBhbmQgb25seSB0aGF0IGlzb2xhdGVkIHZvbHVtZSB3cml0YWJsZS4gT3ZlcnJpZGUgdGhlIHNlcnZpY2UgZW50cnlwb2ludCB3aXRoIHRoZSBvd25lcidzIGNvdW50LW9ubHkgYWRtaW5pc3RyYXRpdmUgaW5zcGVjdGlvbi9pbnRlZ3JpdHkgY2hlY2s7IGRvIG5vdCBzdGFydCBIVFRQIGxpc3RlbmVycywgYXVkaXQgZGVsaXZlcnksIHJlcXVlc3RlciBleGNoYW5nZXMgb3IgYXBwcm92YWwgb3BlcmF0aW9ucy4gVGhlIGN1cnJlbnQgY2FuZGlkYXRlIGNoYW5nZXMgcG9saWN5LnB5IG9ubHkgYW5kIHJldGFpbnMgdGhlIHNjaGVtYS9zdG9yZSBtb2R1bGUgYnl0ZXM7IHN0aWxsIHByb3ZlIHNjaGVtYTUsIFNRTGl0ZSBpbnRlZ3JpdHkgYW5kIGV4YWN0IGJvdW5kZWQgY291bnRzIGJlZm9yZS9hZnRlciBvcGVuaW5nIHRoZSByZXN0b3JlZCBjb3B5LiBSZWZ1c2UgYW55IG1pZ3JhdGlvbi9kb3duZ3JhZGUsIGxvc3QvY2hhbmdlZCBjb3VudHMsIHVuZXhwZWN0ZWQgd3JpdGUgY2xhc3Mgb3IgdW5rbm93biBvdXRjb21lLiBLZWVwIHBlbmRpbmcvdW5jZXJ0YWluIHN1Ym1pc3Npb24gYW5kIG91dGJveCBzdGF0ZXM7IG5ldmVyIHJlcGxheSwgZGlzY2FyZCBvciBtYXJrIHRoZW0gZGVsaXZlcmVkIHRvIGdyZWVuIHRoZSBkcmlsbC4gQ2xlYW51cCBvbmx5IHRoZSBkaXNwb3NhYmxlIGNvcHkvdm9sdW1lIGFmdGVyIHZlcmlmaWVkIHJlY2VpcHQ7IHJldGFpbiB0aGUgb3JpZ2luYWwgcHJvdGVjdGVkIGJhY2t1cCBmb3IgdGhlIGFwcHJvdmVkIHJlY292ZXJ5IGludGVydmFsLgoKVGhpcyBzdGVwIGlzIGFjdHVhbCBuYXRpdmUtZGF0YSBjb21wYXRpYmlsaXR5IGV2aWRlbmNlIG9uY2UgcGVyZm9ybWVkLiBJdHMgcHJldmlvdXMgc3ludGhldGljIGZpeHR1cmUgY2hlY2tzIHJlbWFpbiBtZWNoYW5pc20gZXZpZGVuY2UgYW5kIGNhbm5vdCBiZSByZW5hbWVkIG5hdGl2ZSBzdWNjZXNzLiBBIGZhaWxlZCBkcmlsbCBzdG9wcyByb2xsb3V0IGFuZCByZW1haW5zIGEgZmFpbGVkL3VudmVyaWZpZWQgb3V0Y29tZSBpbiB0aGUgc2FtZSB0cmlhbC4KCiMjIEZyZXNoIGN1dG92ZXIgc25hcHNob3QgYW5kIHNpbmdsZS13cml0ZXIgcm9sbG91dAoKQWZ0ZXIgc3VjY2Vzc2Z1bCBhY3R1YWwtZGF0YSBjb21wYXRpYmlsaXR5IGNoZWNrcywgY3JlYXRlIGFub3RoZXIgdW5pcXVlIFNRTGl0ZS1jb25zaXN0ZW50IG9ubGluZSBzbmFwc2hvdCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGltYWdlIGN1dG92ZXIsIHJldGFpbmluZyBpdHMgcG9pbnQtaW4tdGltZSBzY2hlbWEvaW50ZWdyaXR5L2NvdW50IHJlY2VpcHQuIFRoaXMgaXMgYW4gb25saW5lIHRyYW5zYWN0aW9uYWwgc25hcHNob3QsIG5vdCBhIGNsYWltIHRoYXQgZGlzcGF0Y2hlcnMgb3IgaHVtYW4gd3JpdGVzIHdlcmUgcXVpZXNjZWQuIEV2ZXJ5IGxhdGVyIGNvbW1pdHRlZCByZWNvcmQgcmVtYWlucyBpbiB0aGUgbGl2ZSBkYXRhYmFzZTsgc2FtZS1zY2hlbWEgcm9sbGJhY2sgcmV0YWlucyB0aGF0IGRhdGFiYXNlIGFuZCBuZXZlciByZXN0b3JlcyB0aGUgZWFybGllciBzbmFwc2hvdCBvdmVyIGl0LiBUaGUgbmFycm93IGltYWdlLW9ubHkgdXBkYXRlIGRvZXMgbm90IG5lZWQgZGlzcGF0Y2hlci9jb25maWd1cmF0aW9uL1BWQy90ZW1wb3JhcnktcG9kIGNoYW5nZXMgb3IgYSBzY2hlbWEgY3V0b3Zlci4gSWYgZnJlc2ggdmVyaWZpY2F0aW9uIHNob3dzIGEgbWlncmF0aW9uIG9yIGFueSBkYXRhLXJlc3RvcmF0aW9uIHJlcXVpcmVtZW50LCBzdG9wIGFuZCByZWZpbmUgdGhlIHByb3Bvc2FsIHJhdGhlciB0aGFuIGFwcGx5aW5nIHRoaXMgcHJvdG9jb2wuCgpUaGUgZXhpc3RpbmcgUmVjcmVhdGUgcm9sbG91dCBkcmFpbnMvc3RvcHMgdGhlIHNpbmdsZSBvbGQgd3JpdGVyIGJlZm9yZSBzdGFydGluZyB0aGUgbmV3IGltYWdlIG9uIHRoZSBzYW1lIFBWQzsgdGhlIGluaGVyaXRlZCBzaW5nbGUtd3JpdGVyIGxvY2sgaW5kZXBlbmRlbnRseSByZWZ1c2VzIGNvbmN1cnJlbnQgc2VydmluZyBwcm9jZXNzZXMuIERvIG5vdCBhZGQgYW4gYWRtaW4gcG9kLCBzY2FsZS10by16ZXJvLCBkaXNwYXRjaGVyIHN0b3AsIG5ldHdvcmstcG9saWN5IHJld3JpdGUgb3Igc25hcHNob3Qgb3ZlcndyaXRlIGFzIGFuIGltcHJvdmlzZWQgaW1hZ2Utb25seSBzdGVwLiBUaGUgZXhpc3Rpbmcgb3duZXIgYWRtaW4gYmFja3VwIG9wZXJhdGlvbiBydW5zIGluc2lkZSB0aGUgYWRtaXR0ZWQgc2VydmluZyB3b3JrbG9hZCwgYW5kIGl0cyBzZXBhcmF0ZSBwcm90ZWN0ZWQgcmVzdG9yZSBkcmlsbCBydW5zIG9mZi1jbHVzdGVyIHdpdGggbmV0d29yayBkaXNhYmxlZCBhbmQgbm8gd29ya2xvYWQgY3JlZGVudGlhbHMuIFRob3NlIGV4YWN0IGN1c3RvZHkgb3BlcmF0aW9ucyBtdXN0IGJlIGVudW1lcmF0ZWQgaW4gdGhlIGZvdW5kZXIgcGFja2V0IGFsb25nc2lkZSB0aGUgb25lIERlcGxveW1lbnQgaW1hZ2UgY2hhbmdlLgoKT25jZSBiYWNrdXAvY29tcGF0aWJpbGl0eS9wcmVmbGlnaHQgZ2F0ZXMgcGFzcywgbWFudWFsbHkgcGluIHRoZSBleGlzdGluZyBBcmdvIEFwcGxpY2F0aW9uIHRvIHRoZSBleGFjdCByZXZpZXdlZCBzb3VyY2UgcmV2aXNpb24gYW5kIHN5bmMgb25seSBEZXBsb3ltZW50L2luZm9ybWVkLWRlY2lzaW9uIHdpdGggcHJ1bmUgZmFsc2UsIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW1tdXRhYmxlIHJ1bnRpbWUgQ29uZmlnTWFwIGFuZCBhbGwgb3RoZXIgcmVzb3VyY2VzLiBUaGUgc291cmNlIHBhdGNoIGNoYW5nZXMgb25seSB0aGUgaW1hZ2UgaW4gYWRtaXNzaW9uL3JlbmRlcmVkIERlcGxveW1lbnQ7IG5vIFNlY3JldCwgUFZDLCBwb2xpY3ksIGRhdGFiYXNlIG9yIGRpc3BhdGNoZXIgY2hhbmdlIGlzIGluY2x1ZGVkIHVubGVzcyBzZXBhcmF0ZWx5IGVudW1lcmF0ZWQgaW4gdGhlIGZpbmFsIHByb3Bvc2FsLiBPYnNlcnZlIGZpdmUtbWludXRlIHJlYWRpbmVzcyBhbmQgZXhhY3QgaW1hZ2UvY29uZmlnL3NjaGVtYS9waW5zLiBWZXJpZnkgbmF0aXZlIGxpZmVjeWNsZSBiaW5kaW5nIHVzaW5nIHN0YWJsZSBrZXlzIGFuZCBhbiBpc29sYXRlZCBpbnN0YWxsZWQtY2xpZW50IHByb2JlIGJhc2VkIG9uIGEgcmVhbCBwcm92aWRlciByZXNwb25zZSBjb250YW1pbmF0ZWQgd2l0aCBhZHZpc29yeSBwdXJwb3NlOyBwcm92ZSByZWZ1c2FsIGJlZm9yZSBhbnkgd3JpdGUuIERvIG5vdCBjb250YW1pbmF0ZSB0aGUgbGl2ZSBQRFAsIGNyZWF0ZSBodW1hbiBhcHByb3ZhbHMsIHJlYWQgY3JlZGVudGlhbHMgdGhyb3VnaCBDTEksIG9yIHJlcGxheSB1bmtub3duIGV4dGVybmFsIG91dGNvbWVzIGZvciB0ZXN0aW5nLgoKIyMgU2FtZS1zY2hlbWEgcm9sbGJhY2sgYW5kIGV2aWRlbmNlIHJldGVudGlvbgoKT24gc3RhcnR1cC9yZWFkaW5lc3MvYmluZGluZy9yZWZ1c2FsIGZhaWx1cmUsIHJldGFpbiBjdXJyZW50IGRhdGFiYXNlLCBjdXRvdmVyIGJhY2t1cCBhbmQgZXZlcnkgcG9zdC1jdXRvdmVyIGV2aWRlbmNlL3VuY2VydGFpbiBvdXRjb21lLiBSZXN0b3JlIG9ubHkgdGhlIHByaW9yN2Y1YzZjYiBpbWFnZSB0aHJvdWdoIHRoZSBzYW1lIG1hbnVhbCBBcmdvIG93bmVyIHBhdGgsIHJldGFpbmluZyBzY2hlbWE1IGFuZCBjdXJyZW50IERCL2NvbmZpZ3VyYXRpb247IG5ldmVyIHJlc3RvcmUgYW4gb2xkIHNuYXBzaG90IG92ZXIgY3VycmVudCBsaXZlIGV2aWRlbmNlIGp1c3QgdG8gcm9sbCB0aGUgaW1hZ2UgYmFjay4gVmVyaWZ5IG9sZCBpbWFnZS9SZWFkeTEsIHNhbWUgc2NoZW1hL2NvdW50cyBhbmQgcHJpb3IgYmVoYXZpb3IsIGFuZCByZWNvbmNpbGUgYW55IGV4dGVybmFsIGVmZmVjdHMgdXNpbmcgZXhpc3RpbmcgbGlmZWN5Y2xlL2F1ZGl0IG93bmVyc2hpcC4gVGhlIG5hcnJvdyBvdmVybGF5J3MgaWRlbnRpY2FsIHN0b3JlL3NjaGVtYS9kZXBlbmRlbmN5IGJ5dGVzIHBlcm1pdCB0aGlzIGltYWdlLW9ubHkgcm9sbGJhY2s7IGl0IGlzIG5vdCBwZXJtaXNzaW9uIGZvciBhIHNjaGVtYSBkb3duZ3JhZGUgb3IgZGF0YSBsb3NzLgoKUmVjb3JkIG9yaWdpbmFsL2FwcHJvdmVkL2V4ZWN1dGVkIHNvdXJjZSBhbmQgaW1hZ2UgcmV2aXNpb25zLCBiYWNrdXAvZHJpbGwvY3V0b3Zlci9yb2xsb3V0IHRpbWVzdGFtcHMsIGV4YWN0IGRpc3Bvc2l0aW9uIGFuZCBzYW5pdGl6ZWQgb3V0Y29tZXMgaW4gdGhlIGV4aXN0aW5nIHN1cGVydmlzZWQgdHJpYWwgcmVjZWlwdC4gRVVSMCBpbmNyZW1lbnRhbCBpbmZyYXN0cnVjdHVyZSBlc3RpbWF0ZSB1c2VzIGV4aXN0aW5nIHNlcnZpY2Uvc3RvcmFnZS9vcGVyYXRvciBsYW5lOyBwcm90ZWN0ZWQgdGVtcG9yYXJ5IGNvcHkvc3RvcmFnZSBjb25zdW1wdGlvbiBhbmQxNeKAkzMwbWludXRlIHJlY292ZXJ5IHRpbWUgcmVtYWluIG9wZXJhdGlvbmFsIGNvc3RzLiBObyBFVVIgaW5jaWRlbnQtbG9zcyBjYXAgb3IgYXV0b25vbXkgZ3JhbnQgaXMgaW5mZXJyZWQuIFRhc2tUMDQgY2Fubm90IGNsb3NlIHVudGlsIGFjdHVhbCBwdWJsaXNoZWQgaW1hZ2UsIGFwcHJvdmVkIG5hdGl2ZSBjb21wYXRpYmlsaXR5IGFuZCByZWxlYXNlIHBsdXMgcG9zdC1yZWxlYXNlIHJlZnVzYWwvYmluZGluZyBldmlkZW5jZSBhbGwgZXhpc3QuCgojIyBFeGFjdCByZWxlYXNlIGNhc2UgaWRlbnRpZmllcnMKClByb3Bvc2FsIGBJTkZELVdQLTAwMDktVDA0L3B1cnBvc2Utb3ZlcmxheS12MWAsIHRyaWFsIGBpbmZkLXB1cnBvc2UtMjAyNjEwMTEtcjFgLgpQcm90ZWN0ZWQgbmF0aXZlIHBhcmVudCBgL2RhdGEvcHJpdmF0ZS9wdXJwb3NlLW92ZXJsYXktcjFgIG11c3QgYmUgdW5pcXVlL25vbi1zeW1saW5rLCBvd25lZDEwMDAxIGFuZDA3MDAuIFRoZSBkcmlsbCBzbmFwc2hvdCBpcyBgZHJpbGwuc3FsaXRlYCwgdGhlIHJlZnJlc2hlZCBwcmUtY3V0b3ZlciBzbmFwc2hvdCBgY3V0b3Zlci5zcWxpdGVgLCBlYWNoIG5ldzA2MDAgZmlsZTsgcmVmdXNlIGFueSBleGlzdGluZyBvdXRwdXQuIE9mZi1jbHVzdGVyIGN1c3RvZHkgaXMgdGhlIGV4aXN0aW5nIGlnbm9yZWQgQ3VzdG9kaWFuIGAucHJpdmF0ZS1iYWNrdXBzLzIwMjYxMDExLWluZmQtcHVycG9zZS1yMWAgcGFyZW50MDcwMCwgZmlsZXMwNjAwOyBubyBzbmFwc2hvdCBpcyBhbiBldmlkZW5jZSBhdHRhY2htZW50LiBDaGVjayBvd25lciBVSUQsIG5vIHN5bWxpbmtzLCBpZ25vcmVkIHN0YXR1cyBhbmQgZnJlZSBjYXBhY2l0eSBmb3IgYm90aCBuYXRpdmUgc25hcHNob3RzIHBsdXMgaW5kZXBlbmRlbnRseSBwcm90ZWN0ZWQgY29waWVzIGJlZm9yZSBtYWtpbmcgYW55IHNuYXBzaG90LgoKVGhlIGRpc3Bvc2FibGUgb2ZmbGluZSByZXN0b3JlIHZvbHVtZSBpcyBgaW5mZC1wdXJwb3NlLXIxLXJlc3RvcmUtMjAyNjEwMTFgOyByZWZ1c2UgYW4gZXhpc3Rpbmcgdm9sdW1lLCBjb3B5IG9ubHkgdGhlIHNlbGVjdGVkIGZyb3plbiBzbmFwc2hvdCwgYW5kIHJ1biBleGFjdCBwdWJsaXNoZWQgY2FuZGlkYXRlNzYzYyB3aXRoIG5ldHdvcmtub25lL3JlYWQtb25seSBpbWFnZSwxMjhNaUIvY29yZTEgYW5kIG5vIHJ1bnRpbWUgY29uZmlnL3Rva2VuIG1vdW50cy4gU1FMaXRlIGBQUkFHTUEgaW50ZWdyaXR5X2NoZWNrYCBtdXN0IHJldHVybiBgb2tgLCBgUFJBR01BIHVzZXJfdmVyc2lvbmAvU3RvcmUgaW5zcGVjdGlvbiBtdXN0IGFncmVlIHdpdGggYWN0dWFsIHNjaGVtYTUgc2VtYW50aWNzLCBhbmQgaW5zdGFsbGVkIGFkbWluIGNvdW50LW9ubHkgaW5zcGVjdGlvbiBtdXN0IG1hdGNoIHRoZSBmcm96ZW4gc25hcHNob3QuIFZhbGlkYXRlIHRoZSBhY3R1YWwgc2NoZW1hIHJlcHJlc2VudGF0aW9uIHJhdGhlciB0aGFuIGFzc3VtZSBQUkFHTUEgdXNlcl92ZXJzaW9uIGlzIHRoZSBzY2hlbWEgYXV0aG9yaXR5LiBObyBzeW50aGV0aWMgcmVzdG9yYXRpb24gaXMgcmVwb3J0ZWQgYXMgbmF0aXZlIHJlc3RvcmF0aW9uLiBOYXRpdmUgb3JpZ2luYWwvb2ZmLWNsdXN0ZXIgY29waWVzIHJlbWFpbiByZXRhaW5lZDsgb25seSB0aGUgZGlzcG9zYWJsZSByZXN0b3JlIGNvcHkvdm9sdW1lIG1heSBiZSByZW1vdmVkIHVuZGVyIHRoZSBleGFjdCBhcHByb3ZlZCBjbGVhbnVwIHNjb3BlLgoKIyMgTWFuZGF0b3J5IHByZS1vcGVuIHNjaGVtYSBnYXRlIGFuZCBvZmZsaW5lIGNvbW1hbmQKCmBpbmZvcm1lZC1kZWNpc2lvbi1hZG1pbiBpbnNwZWN0YCBhbmQgYGJhY2t1cGAgY29uc3RydWN0IFN0b3JlLCB3aGljaCBjYW4gbWlncmF0ZSBzY2hlbWFzMeKAkzQgdG81LiBUaGVyZWZvcmUgKipiZWZvcmUgYW55IFN0b3JlL2FkbWluIG9wZW4qKiwgcnVuIHRoZSBleGFjdCBhdHRhY2hlZCBzdGRsaWItb25seSBgc3FsaXRlX3JlYWRvbmx5LnB5YCBhZ2FpbnN0IHRoZSBuYXRpdmUgc291cmNlIGRhdGFiYXNlIHVzaW5nIFNRTGl0ZSBVUkkgbW9kZT1ybywgcXVlcnlfb25seSBhbmQgb25lIHJlYWQgdHJhbnNhY3Rpb24uIFJlcXVpcmUgUFJBR01BIHVzZXJfdmVyc2lvbjUsIGludGVncml0eV9jaGVjaz1vayBhbmQgcmV0YWluIGNvdW50LW9ubHkgYmFzZWxpbmUuIFJlZnVzZSBhbnkgb3RoZXIvdW5rbm93biBzY2hlbWEgb3IgaW5jb21wbGV0ZSBpbnRlZ3JpdHkvY291bnQgY2hlY2sgYmVmb3JlIGNvbnN0cnVjdGluZyBTdG9yZTsgZG8gbm90IGluZmVyIG5vIG1pZ3JhdGlvbiBmcm9tIGEgcG9zdC1vcGVuIGFkbWluIHJlcG9ydC4gVGhpcyBuYXRpdmUgZ2F0ZSBoYXMgbm90IGJlZW4gZXhlY3V0ZWQgaW4gdGhpcyBzb3VyY2UtcHJlcGFyYXRpb24gc3RhZ2UuIFJlcGVhdCBiZWZvcmUgZWFjaCBuYXRpdmUgYmFja3VwL2FkbWluIG9wZXJhdGlvbi4KCkFmdGVyIGNvcHlpbmcgdGhlIHNlbGVjdGVkIGNvbnNpc3RlbnQgc25hcHNob3QgdG8gdGhlIGlzb2xhdGVkIHJlc3RvcmVkIHByaXZhdGUgcGF0aCBgL3Jlc3RvcmUvcmV2aWV3LnNxbGl0ZWAsIHJ1biB0aGUgc2FtZSByZWFkLW9ubHkgY2hlY2tlciAqKmJlZm9yZSoqIGFueSBvZmZsaW5lIGNhbmRpZGF0ZSBhZG1pbi9TdG9yZSBvcGVucyB0aGF0IGNvcHkuIEZyb3plbiBzbmFwc2hvdCBhbmQgcmVzdG9yZWQtY29weSBzY2hlbWEvaW50ZWdyaXR5L2NvdW50IHJlcG9ydHMgbXVzdCBhZ3JlZSBleGFjdGx5OyB0aGUgY29waWVkIG1haW4tZmlsZSBkaWdlc3QgbXVzdCBtYXRjaCB0aGUgc2VsZWN0ZWQgY2xvc2VkIHNuYXBzaG90LiBSZWplY3Qgb2xkc2NoZW1hIGZpeHR1cmVzIHJhdGhlciB0aGFuIGFsbG93IG1pZ3JhdGlvbi4gT25seSBhZnRlciB0aGlzIHByZS1vcGVuIGdhdGUgbWF5IHRoZSBvZmZsaW5lIGNhbmRpZGF0ZSBhZG1pbiBpbnNwZWN0IHJ1bi4KCk9mZmxpbmUgY29tbWFuZCB2ZWN0b3JzIHVzZSBleGFjdGltYWdlIGBmb3JnZWpvLmNvdWxvbWIuc29jaWFsL2NvdWxvbWIvaW5mb3JtZWQtZGVjaXNpb25Ac2hhMjU2Ojc2M2MzNjQwMmM4YmU3Y2M0YzFiZDFhNjE2MjNkMWFmZjkxMTZkNTIyNDE4Nzc0MjViNDVhNzAxOGNjMDg4M2FgLCBgLS1uZXR3b3JrIG5vbmUgLS1yZWFkLW9ubHkgLS1jcHVzIDEgLS1tZW1vcnkgMTI4bWAsIHByaXZhdGUgcmVzdG9yZWQgdm9sdW1lIG1vdW50ZWQgYXQgYC9yZXN0b3JlYCwgYW5kICoqbm8gcnVudGltZSBjb25maWcvY3JlZGVudGlhbC90b2tlbiBtb3VudHMqKi4gRmlyc3Qgb3ZlcnJpZGUgZW50cnlwb2ludCB0byBgcHl0aG9uYCwgYXJndW1lbnRzIGAtIC0tZGIgL3Jlc3RvcmUvcmV2aWV3LnNxbGl0ZWAsIHN0cmVhbWluZyBvbmx5IHRoZSB2ZXJpZmllZCBhdHRhY2hlZCBjaGVja2VyIG9uIHN0ZGluLiBUaGVuIG92ZXJyaWRlIGVudHJ5cG9pbnQgdG8gKipgaW5mb3JtZWQtZGVjaXNpb24tYWRtaW5gKiosIGFyZ3VtZW50cyAqKmBpbnNwZWN0IC0tZGIgL3Jlc3RvcmUvcmV2aWV3LnNxbGl0ZWAqKi4gVGhpcyBkb2VzIG5vdCBzdGFydCBgaW5mb3JtZWQtZGVjaXNpb24tY29udGFpbmVyYCwgdGhlIEhUVFAgc2VydmljZSwgZGlzcGF0Y2hlciBvciBkZWxpdmVyeSB3b3JrZXJzLiBDb21wYXJlIHRoZSBhZG1pbidzIHNjaGVtYS9saWZlY3ljbGUvb3V0Ym94L3N1Ym1pc3Npb24gY291bnRlcnMgdG8gdGhlIGZyb3plbiBwcmUtb3BlbiBzbmFwc2hvdCByZXBvcnQ7IGludGVncml0eSBhbmQgbWlncmF0aW9uLWZyZWUgcHJlLW9wZW4gcHJvb2YgY29tZSBmcm9tIHRoZSBzdGRsaWIgY2hlY2tlciwgbm90IGFkbWluIG91dHB1dCBhbG9uZS4KCkxpdmUgcmVhZHMgYW5kIG9ubGluZSBzbmFwc2hvdHMgbWF5IGxlZ2l0aW1hdGVseSBkaWZmZXIgYmVjYXVzZSByZXZpZXdzLCBpbnRha2UgYW5kIGRlbGl2ZXJ5IGNhbiBjb21taXQgY29uY3VycmVudGx5LiBFeGFjdCBjb3VudGVyIGVxdWFsaXR5IGlzIHJlcXVpcmVkIGJldHdlZW4gdGhlIGZyb3plbiBzZWxlY3RlZCBzbmFwc2hvdCBhbmQgaXRzIG9mZmxpbmUgcmVzdG9yZWQgY2xvbmU7IGl0IGlzICoqbm90KiogcmVxdWlyZWQgYmV0d2VlbiBhIHJ1bm5pbmcgcG9zdC1jdXRvdmVyL3JvbGxiYWNrIGRhdGFiYXNlIGFuZCBhbiBlYXJsaWVyIHNuYXBzaG90LiBMaXZlIGNvdW50IGNoYW5nZXMgbXVzdCBiZSBhY2NvdW50ZWQgZm9yIGFzIGxlZ2l0aW1hdGUgY29tbWl0dGVkIHJlY29yZHMvc3RhdGUgdHJhbnNpdGlvbnM7IHByZXNlcnZlIGFsbCBjdXJyZW50IGFuZCB1bmNlcnRhaW4gZW50cmllcy4gRG8gbm90IGRpc2NhcmQgbmV3IGNvbW1pdHMgb3IgcmVzdG9yZSB0aGUgb2xkIHNuYXBzaG90IHRvIGZvcmNlIGVxdWFsaXR5LiBTYW1lLXNjaGVtYSBpbWFnZSByb2xsYmFjayBrZWVwcyB0aGUgY3VycmVudCBsaXZlIERCLCBmb2xsb3dlZCBieSByZWFkLW9ubHkgc2NoZW1hNS9pbnRlZ3JpdHkgYW5kIGNvdW50LW9ubHkgaGVhbHRoIGNoZWNrczsgYW55IHVuZXhwbGFpbmVkIGV2aWRlbmNlIGxvc3Mgb3IgcmVxdWlyZWQgZGF0YSByZWNvdmVyeSBzdG9wcyBhbmQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBmb3VuZGVyIGRlY2lzaW9uLgoKVGhlIGZyZXNoIHByZWZsaWdodCBhbHNvIGluZGVwZW5kZW50bHkgcmVhZHMgdGhlIGFjdHVhbCBpbW11dGFibGUgbm9uc2VjcmV0IENvbmZpZ01hcCBhbmQgYm91bmQgUFZDOiBjb21wYXJlcyBzZWFsZWQgVUlEcy9mdWxsbWV0YWRhdGEvUFZDc3BlYyt2b2x1bWVOYW1lIGFuZCBjYW5vbmljYWwgcnVudGltZSBkYXRhIGNoZWNrc3VtLCByZXR1cm5pbmcgbm8gcmF3IHJ1bnRpbWUgZGF0YS4gU2FtZS1uYW1lIGRlbGV0aW9uL3JlY3JlYXRpb24gb3IgY29udGVudC9jdXN0b2R5IGRyaWZ0IHN0b3BzIGJlZm9yZSBhZG1pc3Npb24uIFNlY3JldCB2YWx1ZXMgcmVtYWluIGV4Y2x1ZGVkLiBCb3RoIGxvY2FsIGFuZCByZW1vdGUgb3B0aW1pemVkIFB5dGhvbiBpbnRlcnByZXRlcnMgYXJlIGV4cGxpY2l0bHkgcmVmdXNlZCBiZWZvcmUgYXNzZXJ0aW9uLWJhc2VkIGdhdGVzLgo=" + "content_base64": "IyBQcm90ZWN0ZWQgbmF0aXZlIGJhY2t1cC9yZXN0b3JlIGFuZCBpbWFnZS1vbmx5IHJlbGVhc2UgcHJvdG9jb2wKClByZXBhcmVkIHByb3RvY29sIGZvciBgSU5GRC1XUC0wMDA5LVQwNC9wdXJwb3NlLW92ZXJsYXktdjFgLiBObyBhY3R1YWwgbmF0aXZlIGJhY2t1cCwgZGF0YSBleHBvcnQsIHJlc3RvcmUsIHdvcmtsb2FkIGNoYW5nZSBvciBhcHByb3ZhbCBpcyByZWNvcmRlZCBoZXJlLiBDYW5kaWRhdGUgcmVnaXN0cnkgaW1hZ2UgaWRlbnRpdHkgcmVtYWlucyBhIHByZXJlcXVpc2l0ZTsgb25seSBhZnRlciBhY3R1YWwgYXJ0aWZhY3QgcHJvb2YgbWF5IHRoZSBmb3VuZGVyIGFwcHJvdmUgb25lIGV4YWN0IGNvbmRpdGlvbmFsIHByb3RvY29sL3JvbGxvdXQgcGFja2V0LiBUaGUgY29uZmlnLW9ubHk3ZGI4NDg1IGFwcHJvdmFsIGlzIG91dHNpZGUgdGhpcyBzY29wZS4KCiMjIFByZWNvbmRpdGlvbnMgYW5kIHByb3RlY3RlZCBjdXN0b2R5CgpGcmVlemUgZXhhY3QgY2FuZGlkYXRlIGFuZCBwcmlvcjdmNWM2Y2IgaW1hZ2UgZGlnZXN0cywgc291cmNlL2luc3RhbGxlZCBwb2xpY3kgaGFzaGVzLCBjdXJyZW50IG1hbnVhbGx5IG1hbmFnZWQgQXJnbyBBcHBsaWNhdGlvbi9yZXZpc2lvbiwgcnVudGltZSBDb25maWdNYXA2YzIyMTg3OGQwNTEsIERlcGxveW1lbnQgVUlEL3RlbXBsYXRlL3NwZWMsIHNjaGVtYTUsIHBvbGljeSBwYWNrYWdlIHBpbnMsIGRhdGFiYXNlIHBhdGggYC9kYXRhL3ByaXZhdGUvcmV2aWV3LnNxbGl0ZWAsIFBWQyBiaW5kaW5nLCByZXBsaWNhczEvUmVjcmVhdGUgYW5kIHN0YWJsZSBrZXlzIGZvciBpbnRlbmRlZCB2ZXJpZmljYXRpb24uIENvbmZpcm0gbm8gY29uY3VycmVudCB3cml0ZXIgb3IgY3VzdG9keSBjaGFuZ2UuIFVzZSBmaXhlZCBtZXRhZGF0YTsgbmV2ZXIgZmV0Y2ggU2VjcmV0IG9iamVjdHMgb3IgdG9rZW4gdmFsdWVzLiBBIGNoYW5nZWQgaW1hZ2UvY29uZmlnL3NjaGVtYS9vd25lciBpbnZhbGlkYXRlcyB0aGUgcGFja2V0LiBGcmVzaCByZXNvdXJjZXMvaGVhZHJvb20gYW5kIGV4YWN0IHNvdXJjZS9uYXRpdmUgc2VydmVyLWRyeS1ydW4vZGlmZiByZW1haW4gcmVxdWlyZWQuCgpCYWNrdXBzIGFyZSBwcml2YXRlIGV2aWRlbmNlIGNvbnRhaW5pbmcgcmVhbCBkZWNpc2lvbiByZWNvcmRzLCBub3QgbG9ncyBvciBwYWNrZXQgYXR0YWNobWVudHMuIEFsbG9jYXRlIGEgdW5pcXVlIGJhY2t1cCBkaXJlY3RvcnkgdW5kZXIgZXhpc3RpbmcgcHJvdGVjdGVkIFBWQyBjdXN0b2R5LCBvd25lZDEwMDAxLCBtb2RlMDcwMCwgc25hcHNob3QgZmlsZTA2MDAsIG5vIHN5bWxpbmsvaGFyZGxpbmsvcmV1c2VkIG91dHB1dCBwYXRoLiBBbiBvZmYtY2x1c3RlciBjb3B5IGJlbG9uZ3Mgb25seSBpbiB0aGUgYWxyZWFkeSBlc3RhYmxpc2hlZCBpZ25vcmVkIGAucHJpdmF0ZS1iYWNrdXBzLzx1bmlxdWUtdHJpYWwtZGlyZWN0b3J5PmAgY3VzdG9keSB3aXRoMDcwMC8wNjAwIHBlcm1pc3Npb25zOyBubyBHaXQsIFN0YXRlSHViLCBwdWJsaWMgb2JqZWN0IHN0b3JlIG9yIHRlcm1pbmFsLWNvbnRlbnQgZHVtcC4gUmVjb3JkIG9ubHkgc2NoZW1hLCBpbnRlZ3JpdHkgcGFzcy9mYWlsLCBib3VuZGVkIHRhYmxlL3N0YXRlIGNvdW50cyBhbmQgcHJvdGVjdGVkIHJlY2VpcHQgaWRlbnRpZmllcjsgcmV0YWluIGJ5dGUgZGlnZXN0cyBpbiBwcm90ZWN0ZWQgY3VzdG9keSBpZiBuZWVkZWQgZm9yIGludGVybmFsIGNvcHkgaWRlbnRpdHkuIE5vIGNyZWRlbnRpYWwsIHJlY29yZCBwYXlsb2FkIG9yIHRva2VuIGZpbmdlcnByaW50IGVudGVycyBwdWJsaWMgZXZpZGVuY2UuCgojIyBBcHByb3ZlZCBvbmxpbmUgY29tcGF0aWJpbGl0eSBkcmlsbAoKV2l0aGluIHRoZSBleHBsaWNpdCBmb3VuZGVyLWFwcHJvdmVkIGFjdGlvbiwgcnVuIHRoZSBleGlzdGluZyBiYXNlIGltYWdlJ3MgYGluZm9ybWVkLWRlY2lzaW9uLWFkbWluIGJhY2t1cCAtLWRiIC9kYXRhL3ByaXZhdGUvcmV2aWV3LnNxbGl0ZSAtLW91dHB1dCA8bmV3LXByaXZhdGUtc25hcHNob3Q+YCBpbiB0aGUgYWN0dWFsIHNlcnZpbmcgd29ya2xvYWQuIFRoaXMgdXNlcyBTUUxpdGUncyBiYWNrdXAgQVBJIGZvciBhIHRyYW5zYWN0aW9uYWxseSBjb25zaXN0ZW50IHNuYXBzaG90OyBjb3B5aW5nIGEgbGl2ZSBtYWluIGRhdGFiYXNlIHdoaWxlIGlnbm9yaW5nIFdBTCBpcyBwcm9oaWJpdGVkLiBTdXBwcmVzcyByYXcgZmFpbHVyZXMvb3V0cHV0IGFuZCByZXRhaW4gb25seSBzYW5pdGl6ZWQgc3RhdHVzLiBPYnNlcnZlIHNjaGVtYS9pbnRlZ3JpdHkgYW5kIGNvdW50LW9ubHkgbWV0YWRhdGEgZnJvbSB0aGUgcmVzdWx0aW5nIHNuYXBzaG90LCBub3QgcmVjb3JkIGNvbnRlbnQuCgpUcmFuc2ZlciB0aGF0IGNvbnNpc3RlbnQgc25hcHNob3Qgb25seSBpbnRvIHByb3RlY3RlZCBvZmYtY2x1c3RlciBjdXN0b2R5IHRocm91Z2ggdGhlIGV4aXN0aW5nIGF1dGhvcml6ZWQgb3BlcmF0b3IgbGFuZS4gVGhlIGNvcHkgaXMgcmVhbCBwcm9kdWN0aW9uIGRhdGEgZXZlbiBpbiBidWlsZCBtb2RlLiBWZXJpZnkgcHJpdmF0ZSBwZXJtaXNzaW9ucywgdW5pcXVlIGlkZW50aXR5IGFuZCBwcm90ZWN0ZWQgaW50ZXJuYWwgZGlnZXN0IGFncmVlbWVudC4gRG8gbm90IGV4cG9ydCBtb3VudGVkIHdvcmtsb2FkIGNyZWRlbnRpYWxzIG9yIGRpcmVjdG9yeSB0cmVlczsgY29weSBvbmx5IHRoZSBleGFjdCBzbmFwc2hvdC4KCkNyZWF0ZSBhIHNlcGFyYXRlIHByaXZhdGUgZGlzcG9zYWJsZSByZXN0b3JlIHZvbHVtZS9kaXJlY3Rvcnk7IHJldGFpbiB0aGUgb3JpZ2luYWwgc25hcHNob3QgdW5jaGFuZ2VkLiBSdW4gdGhlIGV4YWN0IHB1Ymxpc2hlZCBjYW5kaWRhdGUgd2l0aCBuZXR3b3JrIGRpc2FibGVkLCBubyBwcm9kdWN0aW9uIENvbmZpZ01hcC90b2tlbiBtb3VudHMsIHJlYWQtb25seSBpbWFnZSBhbmQgb25seSB0aGF0IGlzb2xhdGVkIHZvbHVtZSB3cml0YWJsZS4gT3ZlcnJpZGUgdGhlIHNlcnZpY2UgZW50cnlwb2ludCB3aXRoIHRoZSBvd25lcidzIGNvdW50LW9ubHkgYWRtaW5pc3RyYXRpdmUgaW5zcGVjdGlvbi9pbnRlZ3JpdHkgY2hlY2s7IGRvIG5vdCBzdGFydCBIVFRQIGxpc3RlbmVycywgYXVkaXQgZGVsaXZlcnksIHJlcXVlc3RlciBleGNoYW5nZXMgb3IgYXBwcm92YWwgb3BlcmF0aW9ucy4gVGhlIGN1cnJlbnQgY2FuZGlkYXRlIGNoYW5nZXMgcG9saWN5LnB5IG9ubHkgYW5kIHJldGFpbnMgdGhlIHNjaGVtYS9zdG9yZSBtb2R1bGUgYnl0ZXM7IHN0aWxsIHByb3ZlIHNjaGVtYTUsIFNRTGl0ZSBpbnRlZ3JpdHkgYW5kIGV4YWN0IGJvdW5kZWQgY291bnRzIGJlZm9yZS9hZnRlciBvcGVuaW5nIHRoZSByZXN0b3JlZCBjb3B5LiBSZWZ1c2UgYW55IG1pZ3JhdGlvbi9kb3duZ3JhZGUsIGxvc3QvY2hhbmdlZCBjb3VudHMsIHVuZXhwZWN0ZWQgd3JpdGUgY2xhc3Mgb3IgdW5rbm93biBvdXRjb21lLiBLZWVwIHBlbmRpbmcvdW5jZXJ0YWluIHN1Ym1pc3Npb24gYW5kIG91dGJveCBzdGF0ZXM7IG5ldmVyIHJlcGxheSwgZGlzY2FyZCBvciBtYXJrIHRoZW0gZGVsaXZlcmVkIHRvIGdyZWVuIHRoZSBkcmlsbC4gQ2xlYW51cCBvbmx5IHRoZSBkaXNwb3NhYmxlIGNvcHkvdm9sdW1lIGFmdGVyIHZlcmlmaWVkIHJlY2VpcHQ7IHJldGFpbiB0aGUgb3JpZ2luYWwgcHJvdGVjdGVkIGJhY2t1cCBmb3IgdGhlIGFwcHJvdmVkIHJlY292ZXJ5IGludGVydmFsLgoKVGhpcyBzdGVwIGlzIGFjdHVhbCBuYXRpdmUtZGF0YSBjb21wYXRpYmlsaXR5IGV2aWRlbmNlIG9uY2UgcGVyZm9ybWVkLiBJdHMgcHJldmlvdXMgc3ludGhldGljIGZpeHR1cmUgY2hlY2tzIHJlbWFpbiBtZWNoYW5pc20gZXZpZGVuY2UgYW5kIGNhbm5vdCBiZSByZW5hbWVkIG5hdGl2ZSBzdWNjZXNzLiBBIGZhaWxlZCBkcmlsbCBzdG9wcyByb2xsb3V0IGFuZCByZW1haW5zIGEgZmFpbGVkL3VudmVyaWZpZWQgb3V0Y29tZSBpbiB0aGUgc2FtZSB0cmlhbC4KCiMjIEZyZXNoIGN1dG92ZXIgc25hcHNob3QgYW5kIHNpbmdsZS13cml0ZXIgcm9sbG91dAoKQWZ0ZXIgc3VjY2Vzc2Z1bCBhY3R1YWwtZGF0YSBjb21wYXRpYmlsaXR5IGNoZWNrcywgY3JlYXRlIGFub3RoZXIgdW5pcXVlIFNRTGl0ZS1jb25zaXN0ZW50IG9ubGluZSBzbmFwc2hvdCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGltYWdlIGN1dG92ZXIsIHJldGFpbmluZyBpdHMgcG9pbnQtaW4tdGltZSBzY2hlbWEvaW50ZWdyaXR5L2NvdW50IHJlY2VpcHQuIFRoaXMgaXMgYW4gb25saW5lIHRyYW5zYWN0aW9uYWwgc25hcHNob3QsIG5vdCBhIGNsYWltIHRoYXQgZGlzcGF0Y2hlcnMgb3IgaHVtYW4gd3JpdGVzIHdlcmUgcXVpZXNjZWQuIEV2ZXJ5IGxhdGVyIGNvbW1pdHRlZCByZWNvcmQgcmVtYWlucyBpbiB0aGUgbGl2ZSBkYXRhYmFzZTsgc2FtZS1zY2hlbWEgcm9sbGJhY2sgcmV0YWlucyB0aGF0IGRhdGFiYXNlIGFuZCBuZXZlciByZXN0b3JlcyB0aGUgZWFybGllciBzbmFwc2hvdCBvdmVyIGl0LiBUaGUgbmFycm93IGltYWdlLW9ubHkgdXBkYXRlIGRvZXMgbm90IG5lZWQgZGlzcGF0Y2hlci9jb25maWd1cmF0aW9uL1BWQy90ZW1wb3JhcnktcG9kIGNoYW5nZXMgb3IgYSBzY2hlbWEgY3V0b3Zlci4gSWYgZnJlc2ggdmVyaWZpY2F0aW9uIHNob3dzIGEgbWlncmF0aW9uIG9yIGFueSBkYXRhLXJlc3RvcmF0aW9uIHJlcXVpcmVtZW50LCBzdG9wIGFuZCByZWZpbmUgdGhlIHByb3Bvc2FsIHJhdGhlciB0aGFuIGFwcGx5aW5nIHRoaXMgcHJvdG9jb2wuCgpUaGUgZXhpc3RpbmcgUmVjcmVhdGUgcm9sbG91dCBkcmFpbnMvc3RvcHMgdGhlIHNpbmdsZSBvbGQgd3JpdGVyIGJlZm9yZSBzdGFydGluZyB0aGUgbmV3IGltYWdlIG9uIHRoZSBzYW1lIFBWQzsgdGhlIGluaGVyaXRlZCBzaW5nbGUtd3JpdGVyIGxvY2sgaW5kZXBlbmRlbnRseSByZWZ1c2VzIGNvbmN1cnJlbnQgc2VydmluZyBwcm9jZXNzZXMuIERvIG5vdCBhZGQgYW4gYWRtaW4gcG9kLCBzY2FsZS10by16ZXJvLCBkaXNwYXRjaGVyIHN0b3AsIG5ldHdvcmstcG9saWN5IHJld3JpdGUgb3Igc25hcHNob3Qgb3ZlcndyaXRlIGFzIGFuIGltcHJvdmlzZWQgaW1hZ2Utb25seSBzdGVwLiBUaGUgZXhpc3Rpbmcgb3duZXIgYWRtaW4gYmFja3VwIG9wZXJhdGlvbiBydW5zIGluc2lkZSB0aGUgYWRtaXR0ZWQgc2VydmluZyB3b3JrbG9hZCwgYW5kIGl0cyBzZXBhcmF0ZSBwcm90ZWN0ZWQgcmVzdG9yZSBkcmlsbCBydW5zIG9mZi1jbHVzdGVyIHdpdGggbmV0d29yayBkaXNhYmxlZCBhbmQgbm8gd29ya2xvYWQgY3JlZGVudGlhbHMuIFRob3NlIGV4YWN0IGN1c3RvZHkgb3BlcmF0aW9ucyBtdXN0IGJlIGVudW1lcmF0ZWQgaW4gdGhlIGZvdW5kZXIgcGFja2V0IGFsb25nc2lkZSB0aGUgb25lIERlcGxveW1lbnQgaW1hZ2UgY2hhbmdlLgoKT25jZSBiYWNrdXAvY29tcGF0aWJpbGl0eS9wcmVmbGlnaHQgZ2F0ZXMgcGFzcywgbWFudWFsbHkgcGluIHRoZSBleGlzdGluZyBBcmdvIEFwcGxpY2F0aW9uIHRvIHRoZSBleGFjdCByZXZpZXdlZCBzb3VyY2UgcmV2aXNpb24gYW5kIHN5bmMgb25seSBEZXBsb3ltZW50L2luZm9ybWVkLWRlY2lzaW9uIHdpdGggcHJ1bmUgZmFsc2UsIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW1tdXRhYmxlIHJ1bnRpbWUgQ29uZmlnTWFwIGFuZCBhbGwgb3RoZXIgcmVzb3VyY2VzLiBUaGUgc291cmNlIHBhdGNoIGNoYW5nZXMgb25seSB0aGUgaW1hZ2UgaW4gYWRtaXNzaW9uL3JlbmRlcmVkIERlcGxveW1lbnQ7IG5vIFNlY3JldCwgUFZDLCBwb2xpY3ksIGRhdGFiYXNlIG9yIGRpc3BhdGNoZXIgY2hhbmdlIGlzIGluY2x1ZGVkIHVubGVzcyBzZXBhcmF0ZWx5IGVudW1lcmF0ZWQgaW4gdGhlIGZpbmFsIHByb3Bvc2FsLiBPYnNlcnZlIGZpdmUtbWludXRlIHJlYWRpbmVzcyBhbmQgZXhhY3QgaW1hZ2UvY29uZmlnL3NjaGVtYS9waW5zLiBSdW4gdGhlIHRlbiBpbnN0YWxsZWQgcHVycG9zZSB2YXJpYW50cyBvbiB0aGUgYWN0dWFsIG5hdGl2ZSBwbGFjZW1lbnQgdXNpbmcgc3ludGhldGljIHRyYW5zcG9ydDsgdGhleSBwcm92ZSBleGFjdCBpbnN0YWxsZWQgbW9kdWxlIHJlZnVzYWwgYmVoYXZpb3IgYW5kIGV4cGxpY2l0bHkgcmVwb3J0IG5hdGl2ZV9wcm92aWRlcj1mYWxzZS4gVGhleSBkbyBub3QgcHJvdmUgYW4gYWN0dWFsIHByb3ZpZGVyIHJlc3BvbnNlLCBQRFAgYXV0aG9yaXR5IG9yIG5hdGl2ZSBsaWZlY3ljbGUgYmluZGluZzsgYW55IHJlcXVpcmVkIGFjdHVhbC1wcm92aWRlciBwcm9vZiByZW1haW5zIGEgZGlzdGluY3QgVDA0IGNvbXBsZXRpb24gZ2F0ZSB3aXRoIHNlcGFyYXRlIGF1dGhvcml6ZWQgcHJlcGFyYXRpb24sIGFuZCBtdXN0IG5vdCBiZSBjbGFpbWVkIGJ5IHRoaXMgaGVscGVyLiBEbyBub3QgY29udGFtaW5hdGUgdGhlIGxpdmUgUERQLCBjcmVhdGUgaHVtYW4gYXBwcm92YWxzLCByZWFkIGNyZWRlbnRpYWxzIHRocm91Z2ggQ0xJLCBvciByZXBsYXkgdW5rbm93biBleHRlcm5hbCBvdXRjb21lcyBmb3IgdGVzdGluZy4KCiMjIFNhbWUtc2NoZW1hIHJvbGxiYWNrIGFuZCBldmlkZW5jZSByZXRlbnRpb24KCk9uIHN0YXJ0dXAvcmVhZGluZXNzL2JpbmRpbmcvcmVmdXNhbCBmYWlsdXJlLCByZXRhaW4gY3VycmVudCBkYXRhYmFzZSwgY3V0b3ZlciBiYWNrdXAgYW5kIGV2ZXJ5IHBvc3QtY3V0b3ZlciBldmlkZW5jZS91bmNlcnRhaW4gb3V0Y29tZS4gUmVzdG9yZSBvbmx5IHRoZSBwcmlvcjdmNWM2Y2IgaW1hZ2UgdGhyb3VnaCB0aGUgc2FtZSBtYW51YWwgQXJnbyBvd25lciBwYXRoLCByZXRhaW5pbmcgc2NoZW1hNSBhbmQgY3VycmVudCBEQi9jb25maWd1cmF0aW9uOyBuZXZlciByZXN0b3JlIGFuIG9sZCBzbmFwc2hvdCBvdmVyIGN1cnJlbnQgbGl2ZSBldmlkZW5jZSBqdXN0IHRvIHJvbGwgdGhlIGltYWdlIGJhY2suIFZlcmlmeSBvbGQgaW1hZ2UvUmVhZHkxLCBzYW1lIHNjaGVtYS9jb3VudHMgYW5kIHByaW9yIGJlaGF2aW9yLCBhbmQgcmVjb25jaWxlIGFueSBleHRlcm5hbCBlZmZlY3RzIHVzaW5nIGV4aXN0aW5nIGxpZmVjeWNsZS9hdWRpdCBvd25lcnNoaXAuIFRoZSBuYXJyb3cgb3ZlcmxheSdzIGlkZW50aWNhbCBzdG9yZS9zY2hlbWEvZGVwZW5kZW5jeSBieXRlcyBwZXJtaXQgdGhpcyBpbWFnZS1vbmx5IHJvbGxiYWNrOyBpdCBpcyBub3QgcGVybWlzc2lvbiBmb3IgYSBzY2hlbWEgZG93bmdyYWRlIG9yIGRhdGEgbG9zcy4KClJlY29yZCBvcmlnaW5hbC9hcHByb3ZlZC9leGVjdXRlZCBzb3VyY2UgYW5kIGltYWdlIHJldmlzaW9ucywgYmFja3VwL2RyaWxsL2N1dG92ZXIvcm9sbG91dCB0aW1lc3RhbXBzLCBleGFjdCBkaXNwb3NpdGlvbiBhbmQgc2FuaXRpemVkIG91dGNvbWVzIGluIHRoZSBleGlzdGluZyBzdXBlcnZpc2VkIHRyaWFsIHJlY2VpcHQuIEVVUjAgaW5jcmVtZW50YWwgaW5mcmFzdHJ1Y3R1cmUgZXN0aW1hdGUgdXNlcyBleGlzdGluZyBzZXJ2aWNlL3N0b3JhZ2Uvb3BlcmF0b3IgbGFuZTsgcHJvdGVjdGVkIHRlbXBvcmFyeSBjb3B5L3N0b3JhZ2UgY29uc3VtcHRpb24gYW5kMTXigJMzMG1pbnV0ZSByZWNvdmVyeSB0aW1lIHJlbWFpbiBvcGVyYXRpb25hbCBjb3N0cy4gTm8gRVVSIGluY2lkZW50LWxvc3MgY2FwIG9yIGF1dG9ub215IGdyYW50IGlzIGluZmVycmVkLiBUYXNrVDA0IGNhbm5vdCBjbG9zZSB1bnRpbCBhY3R1YWwgcHVibGlzaGVkIGltYWdlLCBhcHByb3ZlZCBuYXRpdmUgY29tcGF0aWJpbGl0eSBhbmQgcmVsZWFzZSBwbHVzIHBvc3QtcmVsZWFzZSByZWZ1c2FsL2JpbmRpbmcgZXZpZGVuY2UgYWxsIGV4aXN0LgoKIyMgRXhhY3QgcmVsZWFzZSBjYXNlIGlkZW50aWZpZXJzCgpQcm9wb3NhbCBgSU5GRC1XUC0wMDA5LVQwNC9wdXJwb3NlLW92ZXJsYXktdjFgLCB0cmlhbCBgaW5mZC1wdXJwb3NlLTIwMjYxMDExLXIxYC4KUHJvdGVjdGVkIG5hdGl2ZSBwYXJlbnQgYC9kYXRhL3ByaXZhdGUvcHVycG9zZS1vdmVybGF5LXIxYCBtdXN0IGJlIHVuaXF1ZS9ub24tc3ltbGluaywgb3duZWQxMDAwMSBhbmQwNzAwLiBUaGUgZHJpbGwgc25hcHNob3QgaXMgYGRyaWxsLnNxbGl0ZWAsIHRoZSByZWZyZXNoZWQgcHJlLWN1dG92ZXIgc25hcHNob3QgYGN1dG92ZXIuc3FsaXRlYCwgZWFjaCBuZXcwNjAwIGZpbGU7IHJlZnVzZSBhbnkgZXhpc3Rpbmcgb3V0cHV0LiBPZmYtY2x1c3RlciBjdXN0b2R5IGlzIHRoZSBleGlzdGluZyBpZ25vcmVkIEN1c3RvZGlhbiBgLnByaXZhdGUtYmFja3Vwcy8yMDI2MTAxMS1pbmZkLXB1cnBvc2UtcjFgIHBhcmVudDA3MDAsIGZpbGVzMDYwMDsgbm8gc25hcHNob3QgaXMgYW4gZXZpZGVuY2UgYXR0YWNobWVudC4gQ2hlY2sgb3duZXIgVUlELCBubyBzeW1saW5rcywgaWdub3JlZCBzdGF0dXMgYW5kIGZyZWUgY2FwYWNpdHkgZm9yIGJvdGggbmF0aXZlIHNuYXBzaG90cyBwbHVzIGluZGVwZW5kZW50bHkgcHJvdGVjdGVkIGNvcGllcyBiZWZvcmUgbWFraW5nIGFueSBzbmFwc2hvdC4KClRoZSBkaXNwb3NhYmxlIG9mZmxpbmUgcmVzdG9yZSB2b2x1bWUgaXMgYGluZmQtcHVycG9zZS1yMS1yZXN0b3JlLTIwMjYxMDExYDsgcmVmdXNlIGFuIGV4aXN0aW5nIHZvbHVtZSwgY29weSBvbmx5IHRoZSBzZWxlY3RlZCBmcm96ZW4gc25hcHNob3QsIGFuZCBydW4gZXhhY3QgcHVibGlzaGVkIGNhbmRpZGF0ZTc2M2Mgd2l0aCBuZXR3b3Jrbm9uZS9yZWFkLW9ubHkgaW1hZ2UsMTI4TWlCL2NvcmUxIGFuZCBubyBydW50aW1lIGNvbmZpZy90b2tlbiBtb3VudHMuIFNRTGl0ZSBgUFJBR01BIGludGVncml0eV9jaGVja2AgbXVzdCByZXR1cm4gYG9rYCwgYFBSQUdNQSB1c2VyX3ZlcnNpb25gL1N0b3JlIGluc3BlY3Rpb24gbXVzdCBhZ3JlZSB3aXRoIGFjdHVhbCBzY2hlbWE1IHNlbWFudGljcywgYW5kIGluc3RhbGxlZCBhZG1pbiBjb3VudC1vbmx5IGluc3BlY3Rpb24gbXVzdCBtYXRjaCB0aGUgZnJvemVuIHNuYXBzaG90LiBWYWxpZGF0ZSB0aGUgYWN0dWFsIHNjaGVtYSByZXByZXNlbnRhdGlvbiByYXRoZXIgdGhhbiBhc3N1bWUgUFJBR01BIHVzZXJfdmVyc2lvbiBpcyB0aGUgc2NoZW1hIGF1dGhvcml0eS4gTm8gc3ludGhldGljIHJlc3RvcmF0aW9uIGlzIHJlcG9ydGVkIGFzIG5hdGl2ZSByZXN0b3JhdGlvbi4gTmF0aXZlIG9yaWdpbmFsL29mZi1jbHVzdGVyIGNvcGllcyByZW1haW4gcmV0YWluZWQ7IG9ubHkgdGhlIGRpc3Bvc2FibGUgcmVzdG9yZSBjb3B5L3ZvbHVtZSBtYXkgYmUgcmVtb3ZlZCB1bmRlciB0aGUgZXhhY3QgYXBwcm92ZWQgY2xlYW51cCBzY29wZS4KCiMjIE1hbmRhdG9yeSBwcmUtb3BlbiBzY2hlbWEgZ2F0ZSBhbmQgb2ZmbGluZSBjb21tYW5kCgpgaW5mb3JtZWQtZGVjaXNpb24tYWRtaW4gaW5zcGVjdGAgYW5kIGBiYWNrdXBgIGNvbnN0cnVjdCBTdG9yZSwgd2hpY2ggY2FuIG1pZ3JhdGUgc2NoZW1hczHigJM0IHRvNS4gVGhlcmVmb3JlICoqYmVmb3JlIGFueSBTdG9yZS9hZG1pbiBvcGVuKiosIHJ1biB0aGUgZXhhY3QgYXR0YWNoZWQgc3RkbGliLW9ubHkgYHNxbGl0ZV9yZWFkb25seS5weWAgYWdhaW5zdCB0aGUgbmF0aXZlIHNvdXJjZSBkYXRhYmFzZSB1c2luZyBTUUxpdGUgVVJJIG1vZGU9cm8sIHF1ZXJ5X29ubHkgYW5kIG9uZSByZWFkIHRyYW5zYWN0aW9uLiBSZXF1aXJlIFBSQUdNQSB1c2VyX3ZlcnNpb241LCBpbnRlZ3JpdHlfY2hlY2s9b2sgYW5kIHJldGFpbiBjb3VudC1vbmx5IGJhc2VsaW5lLiBSZWZ1c2UgYW55IG90aGVyL3Vua25vd24gc2NoZW1hIG9yIGluY29tcGxldGUgaW50ZWdyaXR5L2NvdW50IGNoZWNrIGJlZm9yZSBjb25zdHJ1Y3RpbmcgU3RvcmU7IGRvIG5vdCBpbmZlciBubyBtaWdyYXRpb24gZnJvbSBhIHBvc3Qtb3BlbiBhZG1pbiByZXBvcnQuIFRoaXMgbmF0aXZlIGdhdGUgaGFzIG5vdCBiZWVuIGV4ZWN1dGVkIGluIHRoaXMgc291cmNlLXByZXBhcmF0aW9uIHN0YWdlLiBSZXBlYXQgYmVmb3JlIGVhY2ggbmF0aXZlIGJhY2t1cC9hZG1pbiBvcGVyYXRpb24uCgpBZnRlciBjb3B5aW5nIHRoZSBzZWxlY3RlZCBjb25zaXN0ZW50IHNuYXBzaG90IHRvIHRoZSBpc29sYXRlZCByZXN0b3JlZCBwcml2YXRlIHBhdGggYC9yZXN0b3JlL3Jldmlldy5zcWxpdGVgLCBydW4gdGhlIHNhbWUgcmVhZC1vbmx5IGNoZWNrZXIgKipiZWZvcmUqKiBhbnkgb2ZmbGluZSBjYW5kaWRhdGUgYWRtaW4vU3RvcmUgb3BlbnMgdGhhdCBjb3B5LiBGcm96ZW4gc25hcHNob3QgYW5kIHJlc3RvcmVkLWNvcHkgc2NoZW1hL2ludGVncml0eS9jb3VudCByZXBvcnRzIG11c3QgYWdyZWUgZXhhY3RseTsgdGhlIGNvcGllZCBtYWluLWZpbGUgZGlnZXN0IG11c3QgbWF0Y2ggdGhlIHNlbGVjdGVkIGNsb3NlZCBzbmFwc2hvdC4gUmVqZWN0IG9sZHNjaGVtYSBmaXh0dXJlcyByYXRoZXIgdGhhbiBhbGxvdyBtaWdyYXRpb24uIE9ubHkgYWZ0ZXIgdGhpcyBwcmUtb3BlbiBnYXRlIG1heSB0aGUgb2ZmbGluZSBjYW5kaWRhdGUgYWRtaW4gaW5zcGVjdCBydW4uCgpPZmZsaW5lIGNvbW1hbmQgdmVjdG9ycyB1c2UgZXhhY3RpbWFnZSBgZm9yZ2Vqby5jb3Vsb21iLnNvY2lhbC9jb3Vsb21iL2luZm9ybWVkLWRlY2lzaW9uQHNoYTI1Njo3NjNjMzY0MDJjOGJlN2NjNGMxYmQxYTYxNjIzZDFhZmY5MTE2ZDUyMjQxODc3NDI1YjQ1YTcwMThjYzA4ODNhYCwgYC0tbmV0d29yayBub25lIC0tcmVhZC1vbmx5IC0tY3B1cyAxIC0tbWVtb3J5IDEyOG1gLCBwcml2YXRlIHJlc3RvcmVkIHZvbHVtZSBtb3VudGVkIGF0IGAvcmVzdG9yZWAsIGFuZCAqKm5vIHJ1bnRpbWUgY29uZmlnL2NyZWRlbnRpYWwvdG9rZW4gbW91bnRzKiouIEZpcnN0IG92ZXJyaWRlIGVudHJ5cG9pbnQgdG8gYHB5dGhvbmAsIGFyZ3VtZW50cyBgLSAtLWRiIC9yZXN0b3JlL3Jldmlldy5zcWxpdGVgLCBzdHJlYW1pbmcgb25seSB0aGUgdmVyaWZpZWQgYXR0YWNoZWQgY2hlY2tlciBvbiBzdGRpbi4gVGhlbiBvdmVycmlkZSBlbnRyeXBvaW50IHRvICoqYGluZm9ybWVkLWRlY2lzaW9uLWFkbWluYCoqLCBhcmd1bWVudHMgKipgaW5zcGVjdCAtLWRiIC9yZXN0b3JlL3Jldmlldy5zcWxpdGVgKiouIFRoaXMgZG9lcyBub3Qgc3RhcnQgYGluZm9ybWVkLWRlY2lzaW9uLWNvbnRhaW5lcmAsIHRoZSBIVFRQIHNlcnZpY2UsIGRpc3BhdGNoZXIgb3IgZGVsaXZlcnkgd29ya2Vycy4gQ29tcGFyZSB0aGUgYWRtaW4ncyBzY2hlbWEvbGlmZWN5Y2xlL291dGJveC9zdWJtaXNzaW9uIGNvdW50ZXJzIHRvIHRoZSBmcm96ZW4gcHJlLW9wZW4gc25hcHNob3QgcmVwb3J0OyBpbnRlZ3JpdHkgYW5kIG1pZ3JhdGlvbi1mcmVlIHByZS1vcGVuIHByb29mIGNvbWUgZnJvbSB0aGUgc3RkbGliIGNoZWNrZXIsIG5vdCBhZG1pbiBvdXRwdXQgYWxvbmUuCgpMaXZlIHJlYWRzIGFuZCBvbmxpbmUgc25hcHNob3RzIG1heSBsZWdpdGltYXRlbHkgZGlmZmVyIGJlY2F1c2UgcmV2aWV3cywgaW50YWtlIGFuZCBkZWxpdmVyeSBjYW4gY29tbWl0IGNvbmN1cnJlbnRseS4gRXhhY3QgY291bnRlciBlcXVhbGl0eSBpcyByZXF1aXJlZCBiZXR3ZWVuIHRoZSBmcm96ZW4gc2VsZWN0ZWQgc25hcHNob3QgYW5kIGl0cyBvZmZsaW5lIHJlc3RvcmVkIGNsb25lOyBpdCBpcyAqKm5vdCoqIHJlcXVpcmVkIGJldHdlZW4gYSBydW5uaW5nIHBvc3QtY3V0b3Zlci9yb2xsYmFjayBkYXRhYmFzZSBhbmQgYW4gZWFybGllciBzbmFwc2hvdC4gTGl2ZSBjb3VudCBjaGFuZ2VzIG11c3QgYmUgYWNjb3VudGVkIGZvciBhcyBsZWdpdGltYXRlIGNvbW1pdHRlZCByZWNvcmRzL3N0YXRlIHRyYW5zaXRpb25zOyBwcmVzZXJ2ZSBhbGwgY3VycmVudCBhbmQgdW5jZXJ0YWluIGVudHJpZXMuIERvIG5vdCBkaXNjYXJkIG5ldyBjb21taXRzIG9yIHJlc3RvcmUgdGhlIG9sZCBzbmFwc2hvdCB0byBmb3JjZSBlcXVhbGl0eS4gU2FtZS1zY2hlbWEgaW1hZ2Ugcm9sbGJhY2sga2VlcHMgdGhlIGN1cnJlbnQgbGl2ZSBEQiwgZm9sbG93ZWQgYnkgcmVhZC1vbmx5IHNjaGVtYTUvaW50ZWdyaXR5IGFuZCBjb3VudC1vbmx5IGhlYWx0aCBjaGVja3M7IGFueSB1bmV4cGxhaW5lZCBldmlkZW5jZSBsb3NzIG9yIHJlcXVpcmVkIGRhdGEgcmVjb3Zlcnkgc3RvcHMgYW5kIHJlcXVpcmVzIGEgc2VwYXJhdGUgZm91bmRlciBkZWNpc2lvbi4KClRoZSBmcmVzaCBwcmVmbGlnaHQgYWxzbyBpbmRlcGVuZGVudGx5IHJlYWRzIHRoZSBhY3R1YWwgaW1tdXRhYmxlIG5vbnNlY3JldCBDb25maWdNYXAgYW5kIGJvdW5kIFBWQzogY29tcGFyZXMgc2VhbGVkIFVJRHMvZnVsbG1ldGFkYXRhL1BWQ3NwZWMrdm9sdW1lTmFtZSBhbmQgY2Fub25pY2FsIHJ1bnRpbWUgZGF0YSBjaGVja3N1bSwgcmV0dXJuaW5nIG5vIHJhdyBydW50aW1lIGRhdGEuIFNhbWUtbmFtZSBkZWxldGlvbi9yZWNyZWF0aW9uIG9yIGNvbnRlbnQvY3VzdG9keSBkcmlmdCBzdG9wcyBiZWZvcmUgYWRtaXNzaW9uLiBTZWNyZXQgdmFsdWVzIHJlbWFpbiBleGNsdWRlZC4gQm90aCBsb2NhbCBhbmQgcmVtb3RlIG9wdGltaXplZCBQeXRob24gaW50ZXJwcmV0ZXJzIGFyZSBleHBsaWNpdGx5IHJlZnVzZWQgYmVmb3JlIGFzc2VydGlvbi1iYXNlZCBnYXRlcy4KCiMjIEV4YWN0IHN1cGVydmlzZWQgbWVjaGFuaWNhbCBleGVjdXRpb24gcmVmaW5lbWVudAoKVGhlIGRpcmVjdGx5IGF0dGFjaGVkIGBleGVjdXRpb24tYnVuZGxlLmpzb25gIGNvbnRhaW5zIHRoZSBleGFjdCBoZWxwZXIgc291cmNlLCBwbGFuLCB0ZXN0cyBhbmQgUEVORElORyByZWNlaXB0IHRlbXBsYXRlLiBJdCByZXBsYWNlcyB0aGUgZGlyZWN0IHJhdyBzY2FuIGF0dGFjaG1lbnQgd2l0aGluIHRoZSB0d2VudHktZG9jdW1lbnQgbGltaXQ7IGBwdWJsaXNoZWQtdmVyaWZpY2F0aW9uLmpzb25gIHN0aWxsIGJpbmRzIHRoZSB1bmNoYW5nZWQgYWN0dWFsIHVuZmlsdGVyZWQgcmF3IHNjYW4sIHJhdyBTQk9NIGFuZCBiYXNlIHNjYW4gU0hBMjU2IHZhbHVlcywgcmV0YWluZWQgaW4gdGhlIG93bmVyIGV2aWRlbmNlIHBhY2thZ2UuIFRoZSBrbm93biBpbmhlcml0ZWQgZml4YWJsZSBNRURJVU0gcmVtYWlucyBleHBsaWNpdCwgd2l0aCBvd25lciBUMDUvcmlzayBmb2xsb3ctdGhyb3VnaC4gTmVpdGhlciBhcmNoaXZlIG5vciB0ZWNobmljYWwgYWdyZWVtZW50IHN1cHBsaWVzIGh1bWFuIGFwcHJvdmFsLgoKVGhlIHJldmlld2VkIHByb3RvY29sIGJhc2lzIGlzIG93bmVyIGNvbW1pdCBlMDM1OWJjYjZjZGZhZDlhYjNlODY4MDU0MTIxZmUwY2ViZWMyZDY4LCB3aXRoIHNvdXJjZSBmb2xsb3ctdGhyb3VnaDkyNjhjOWFjMGJiZWU1MDhmZTM1YzBiOTBkY2VmZWY0YzI0ZGEyZjUuIFRoZSBzdWJzZXF1ZW50IGV4YWN0IGFwcGxpZWQgaGVscGVyL3BhY2tldCBvd25lciBjb21taXQgbXVzdCBiZSBuYW1lZCBpbiB0aGUgZXh0ZXJuYWxseSB2ZXJpZmllZCBmb3VuZGVyIHJlY2VpcHQgYmVmb3JlIGV4ZWN1dGlvbi4gVmVyaWZ5IHRoZSBmb3VyIGNvbW1pdHRlZCBHaXQgYmxvYnMgKGFkbWlzc2lvbi5jYW5kaWRhdGUuanNvbiwgc2VydmljZS5jYW5kaWRhdGUuanNvbiwga3VzdG9taXphdGlvbi55YW1sLCByZWdpc3RyaWVzLmNhbmRpZGF0ZS5qc29uKSBhZ2FpbnN0IGV4ZWN1dGlvbi1wbGFuLmpzb24gYXMgd2VsbCBhcyBjdXJyZW50IHdvcmt0cmVlL0hFQUQ7IHJlamVjdCBvdmVycmlkZXMvcGx1Z2lucy9tdWx0aXBsZSBBcHBsaWNhdGlvbiBzb3VyY2VzIGFuZCBhbnkgcHJlc2VudCBhdXRvbWF0ZWQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIGF1dG9tYXRlZDp7fS4KClJvb3QgZnJlc2hseSBhdXRoZW50aWNhdGVzIHRoZSBleGFjdCBjb25maXJtZWQgZm91bmRlciBwZXJzb24vcGxhdGZvcm0tcm9vdCBBQ0NFUFQgb2YgdGhpcyBzdGFibGUgbWVtby92ZXJzaW9uMSBhdCB0aGUgZml4ZWQgbmF0aXZlIEluZm9ybWVkIERlY2lzaW9uIG9yaWdpbiBiZWZvcmUgZWFjaCBwaGFzZSwgYW5kIHN1cHBsaWVzIHByb3RlY3RlZDA2MDAgcmVjZWlwdC9vdXRjb21lIGZpbGVzLiBUaGUgaGVscGVyIGNoZWNrcyB0aGVpciBleGFjdCByZWxhdGlvbiBhbmQgZnJlc2huZXNzMTIwc2Vjb25kczsgdGhlc2UgZmlsZXMgYXJlIHN1cGVydmlzZWQgYm9va2tlZXBpbmcsIG5vdCBzaWduZWQgYXV0aGVudGljYXRlZCBncmFudHMsIGEgaHVtYW4tcHJvdmlkZXIgaW1wbGVtZW50YXRpb24sIG9yIGF1dG9ub21vdXMgYWdlbnQgYXV0aG9yaXR5LiBEbyBub3QgZGVyaXZlIHRoZW0gZnJvbSB0ZWNobmljYWwgcmV2aWV3cyBvciBjYWxsZXIgYXNzZXJ0aW9ucy4KCkZpeGVkIG9yZGVyOiBkcmlsbC1iYWNrdXAg4oaSIGRyaWxsLWNvcHkg4oaSIG9mZmxpbmUtdmVyaWZ5IOKGkiBjbGVhbnVwLW9mZmxpbmUg4oaSIGN1dG92ZXItYmFja3VwIOKGkiBjdXRvdmVyLWNvcHkg4oaSIHJlbGVhc2Ug4oaSIHZlcmlmeS4gQSBzZXBhcmF0ZSByZWNvcmRlZCByZWxlYXNlIGF0dGVtcHQgcGVybWl0cyByb2xsYmFjayDihpIgcm9sbGJhY2stdmVyaWZ5LiBFdmVyeSBwaGFzZSBmc3luY3MgYW4gYXR0ZW1wdCBub25jZS9SVU5OSU5HIGpvdXJuYWwgYmVmb3JlIGVmZmVjdHMuIEZhaWx1cmUvaW50ZXJydXB0aW9uL2FtYmlndW91cyBhY3R1YXRpb24gc3RheXMgVU5DRVJUQUlOIGFuZCB0aGUgc2FtZSBwaGFzZSBjYW5ub3QgYmUgcmV0cmllZC4gTm8gaW1wcm92aXNlZCBhZGFwdGVyIG9yIHdob2xlLUFwcGxpY2F0aW9uIHN5bmMgaXMgcGVybWl0dGVkLgoKVGhlIE5FVyBub25jZS1sYWJlbGxlZCBsb2NhbCB2b2x1bWUgcmVxdWlyZXMgb25lIGV4cGxpY2l0IGlzb2xhdGVkIGluaXRpYWxpemVyIGFzIFVJRDA6MCB3aXRoIG9ubHkgQ0FQX0NIT1dOLCBleGFjdDc2M2MgaW1hZ2UsIC0tbmV0d29yayBub25lIC0tcmVhZC1vbmx5IC0tY3B1cyAxIC0tbWVtb3J5IDEyOG0gLS1jYXAtZHJvcCBBTEwgLS1jYXAtYWRkIENIT1dOIC0tc2VjdXJpdHktb3B0IG5vLW5ldy1wcml2aWxlZ2VzLiBJdHMgb25seSBtb3VudCBpcyB0aGF0IG5ldyBuYW1lZCB2b2x1bWUgYXQgL3Jlc3RvcmU7IG5vIGhvc3QgbW91bnQsIG5hdGl2ZSBQVkMsIHJ1bnRpbWUgY29uZmlnIG9yIHRva2VuIG1vdW50LiBQcm90ZWN0ZWQgc25hcHNob3Qgc3RkaW4gZ29lcyBvbmx5IHRvIGEgdW5pcXVlMDYwMCBtYWluIGZpbGUgd2l0aCBleGFjdCBkaWdlc3QsIGFuZCBkaXJlY3RvcnkvZmlsZSBjdXN0b2R5IGlzIHNldDA3MDAvMDYwMCBVSUQvR0lEMTAwMDEuIFRoZW4gYWxsIHByZS1vcGVuLCBhZG1pbiBhbmQgcG9zdC1hZG1pbiBjaGVja3MgcnVuIFVJRDEwMDAxOjEwMDAxLCBjYXBhYmlsaXRpZXMgZHJvcHBlZCwgbmV0d29ya25vbmUuIFRoZSBzZWNvbmQgc3RkbGliIHJlYWRvbmx5IHNjaGVtYTUvaW50ZWdyaXR5L2NvdW50IHByb29mIGFmdGVyIGFkbWluIG11c3QgZXhhY3RseSBlcXVhbCB0aGUgZnJvemVuIHNuYXBzaG90IHByb29mOyBpbmRlcGVuZGVudGx5IHJlY2hlY2sgdGhlIHJldGFpbmVkIG9yaWdpbmFsIHByb3RlY3RlZCBzbmFwc2hvdCBTSEEuIE5vIHNlcnZpY2Ugc3RhcnR1cCBvY2N1cnMuCgpSb2xsYmFjayBkaXNwYXRjaCBtdXN0IGJlIGF2YWlsYWJsZSBpZiB0aGUgY2FuZGlkYXRlIGlzIHVucmVhZHkgb3IgY2Fubm90IHN0YXJ0OiBpdCBjaGVja3Mgc2VhbGVkIERlcGxveW1lbnQvQ00vUFZDIGN1c3RvZHksIG9ubHkgcHJpb3IvY2FuZGlkYXRlIHNvdXJjZS9pbWFnZSBwYWlyLCBub2RlIGhlYWx0aC9oZWFkcm9vbSBhbmQgZnJlc2ggb2xkLWltYWdlIHNlcnZlciBhZG1pc3Npb24gcGx1cyBBcHBsaWNhdGlvbiBVSUQvcmVzb3VyY2VWZXJzaW9uL3NvdXJjZSBDQVMsIHdpdGggbm8gZmFpbGluZyBjYW5kaWRhdGUgUG9kL2V4ZWMvZGF0YWJhc2UgcHJlcmVxdWlzaXRlLiBEaXNwYXRjaCBhY2tub3dsZWRnbWVudCBpcyBub3QgcmVjb3ZlcmVkIGhlYWx0aC4gYHJvbGxiYWNrLXZlcmlmeWAgc2VwYXJhdGVseSByZXF1aXJlcyBvbGQgaW1hZ2UgUmVhZHkxLCBzdWNjZWVkZWQgZXhhY3QgRGVwbG95bWVudC1vbmx5L3BydW5lPWZhbHNlIG9wZXJhdGlvbiBhbmQgcmVhZG9ubHkgc2NoZW1hNS9pbnRlZ3JpdHkvY291bnQgcHJvb2Ygb2YgdGhlIGxhdGVzdCByZXRhaW5lZCBsaXZlIGRhdGFiYXNlLiBObyBzbmFwc2hvdCByZXBsYWNlcyB0aGUgY3VycmVudCBkYXRhYmFzZS4KCioqRGVhZGxpbmUgcmVmaW5lbWVudDoqKiBhbGwgcGhhc2VzLCBpbmNsdWRpbmcgcm9sbGJhY2sgYW5kIHZlcmlmaWNhdGlvbiwgbXVzdCBiZWdpbiBiZWZvcmUyMDI2LTEwLTEyVDIzOjU5OjU5Wi4gVGhlIGVhcmxpZXIgYW1lbmRlZCBwYWNrZXQgZGVzY3JpYmVkIHVuc3RhcnRlZC1yZWxlYXNlIGV4cGlyeTsgdGhpcyBleGFjdCBoZWxwZXIgYWxzbyBib3VuZHMgcmVjb3ZlcnkvdmVyaWZpY2F0aW9uLiBTdGFydCBlYXJseSBlbm91Z2ggdG8gY29tcGxldGUgdGhlIGJvdW5kZWQgZHJpbGwgYW5kIGFueSByZWNvdmVyeSB3aXRoaW4gdGhlIHdpbmRvdy4gSWYgZXhoYXVzdGVkLCBzdG9wIGFuZCBvYnRhaW4gYSBmcmVzaCBmb3VuZGVyIGRlY2lzaW9uIHJhdGhlciB0aGFuIHNpbGVudGx5IGV4dGVuZCBhIGdyYW50LiBUaGlzIG1heSBkZWxheSByZWNvdmVyeSBhbmQgaXMgYW4gZXhwbGljaXQgb3BlcmF0aW9uYWwgcmlzay4gTm8gdGltZXIvY29udHJvbGxlciBhdXRvbWF0aWNhbGx5IHJvbGxzIGJhY2sgb3IgY2hhbmdlcyBzZXJ2aWNlIGF0IGV4cGlyeS4K" }, { "digest": "sha256:e8da413bf985ef2cb66c71a093ba7fc0636ab884f428e40a18b40ccff8e3b101", diff --git a/docs/evidence/2026-10-11-purpose-image-release/memo.json b/docs/evidence/2026-10-11-purpose-image-release/memo.json index da273f6..f83c393 100644 --- a/docs/evidence/2026-10-11-purpose-image-release/memo.json +++ b/docs/evidence/2026-10-11-purpose-image-release/memo.json @@ -4,7 +4,7 @@ "question": "Approve this exact Informed Decision purpose-only image release on railiance01, including protected native backup/restore gates and explicit temporary acceptance of the inherited fixable MEDIUM zlib finding with owner remediation follow-through?", "requested_act": "approve", "binding_level": "organizational", - "brief": "Actual owner CI published763c from3e4bcb26; unchanged8base layers plus one policy.py, installedUID10001 and10purpose checks pass. Full44package scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib, identical actualbase scan. Only Deploymentimage changes; manualArgo prune=false, runtime6c/schema5/PVC/identity/policies unchanged. Before ANY admin/Store, readonly schema5/integrity/count gate; protected backup/restore, sealedDeployment+actualCM/PVC identities and unoptimizedpreflight required, not executed. Live owner riskrecord/T05 dueOct18; Recreate briefly interrupts service. No priorconfigapproval reused.", + "brief": "Actual CI763c purpose-only image; eight base layers unchanged, legacy serialization disclosed. Scan0HIGH/CRITICAL,1fixable inheritedMEDIUM zlib/T05 dueOct18. Exact helper binds four Git blobs, protected real-data backup/offline drill (isolated new-volume UID0/CAP_CHOWN init, then UID10001 readonly/admin/postcheck), Deployment-only manualArgo/prune=false, currentDB retention. Rollback needs no Ready candidate; separate recovery verification. ALL phases incl recovery must begin byOct12, fresh founder decision beyond. Ten installed checks are synthetic/native_provider=false. No native backup/image action yet.", "binding": { "principal": { "id": "pending-human-session", @@ -17,19 +17,19 @@ "label": "Informed Decision image-only purpose hardening on railiance01", "environment": "production" }, - "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/off-cluster custody/offline restore plus exact owner-source pin/manual Deployment-only image release763c, prune=false. ADMINISTER activationAPPROVED only upon actualdisposition, execute by2026-10-12T23:59:59Z afterfresh sealedCM/PVC/Deploymentpreflight+pre-openreadonlyschema5+restoregates; rollbackprior7f5 retaining latestschema5DB. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 ownerreviewdue2026-10-18. No credential/policy/grant change, humanbinding, wholeAppsync or autonomygrant." + "terms": "Only attached exact INFD-WP-0009-T04/purpose-overlay-v1 trialinfd-purpose-20261011-r1: protected consistent snapshots/offcluster custody/isolated offline restore with explicit NEW-volume UID0 CAP_CHOWN-only initializer followed by UID10001 readonly schema5/admin/postproof; exact four committed source blobs and helper-bound manual Deployment-only image763c/prune=false. Fresh root-authenticated confirmed founder disposition before each phase; supervised receipt is not signed/autonomous grant. ALL phases including rollback/rollback-verify must begin before2026-10-12T23:59:59Z, new founder decision beyond; no expiry controller. Rollbackprior7f5 retains latestschema5DB and does not need Ready candidate; separate old-image/schema recovery proof. Explicit inheritedfixableMEDIUM permitted with INFD-WP-0009-T05 reviewdueOct18. Syntheticinstallednative_provider=false is not actualPDP authority proof; actualproviderT04gate distinct. No credential/policy/grant change, humanbinding or wholeAppsync." }, "step_kind": "approve", "packet": [ { "item_id": "decision-packet-md", "label": "decision-packet.md", - "hash": "sha256:23da78cf998a32af0481e68567db94bb40781cc18f147461f779d40ebd329fd1" + "hash": "sha256:a542235221890fa9ffb9c78f65d5e93227f5215d3ac68f0d1fa4addfd17bdaf6" }, { "item_id": "proposal-json", "label": "proposal.json", - "hash": "sha256:a59bcddc6c79e3ba8265a95b4b68facda2683abda8e47e5bb48ce402b9e1fa82" + "hash": "sha256:7cca98a6c159201823a42fe05218d32e46152031b3f8a2ee26795454df0016df" }, { "item_id": "candidate-admission-json", @@ -67,9 +67,9 @@ "hash": "sha256:0ee56400dc703f7c9968c2a0a3ea0390d8362f8d0bbf8002a2bd7fa58f19cb44" }, { - "item_id": "trivy-full-json", - "label": "trivy-full.json", - "hash": "sha256:f38a8f7e6c419eed9154d7762f932b9deb6680a622247b08196b7458b893434e" + "item_id": "execution-bundle-json", + "label": "execution-bundle.json", + "hash": "sha256:27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d" }, { "item_id": "sqlite-readonly-py", @@ -84,7 +84,7 @@ { "item_id": "native-backup-restore-protocol-md", "label": "native-backup-restore-protocol.md", - "hash": "sha256:2f8d4894c2861b34977ec020593b7515a8ee35a43ce2e6aef2d96a6d34a94ddc" + "hash": "sha256:440932f5975f42f8bc3ef5c7b281f42cf843246ffc8faba64a1d80b43ffa7478" }, { "item_id": "inherited-vulnerability-follow-through-json", diff --git a/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md b/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md index 6a12571..e9374f6 100644 --- a/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md +++ b/docs/evidence/2026-10-11-purpose-image-release/native-backup-restore-protocol.md @@ -24,7 +24,7 @@ After successful actual-data compatibility checks, create another unique SQLite- The existing Recreate rollout drains/stops the single old writer before starting the new image on the same PVC; the inherited single-writer lock independently refuses concurrent serving processes. Do not add an admin pod, scale-to-zero, dispatcher stop, network-policy rewrite or snapshot overwrite as an improvised image-only step. The existing owner admin backup operation runs inside the admitted serving workload, and its separate protected restore drill runs off-cluster with network disabled and no workload credentials. Those exact custody operations must be enumerated in the founder packet alongside the one Deployment image change. -Once backup/compatibility/preflight gates pass, manually pin the existing Argo Application to the exact reviewed source revision and sync only Deployment/informed-decision with prune false, keeping the current immutable runtime ConfigMap and all other resources. The source patch changes only the image in admission/rendered Deployment; no Secret, PVC, policy, database or dispatcher change is included unless separately enumerated in the final proposal. Observe five-minute readiness and exact image/config/schema/pins. Verify native lifecycle binding using stable keys and an isolated installed-client probe based on a real provider response contaminated with advisory purpose; prove refusal before any write. Do not contaminate the live PDP, create human approvals, read credentials through CLI, or replay unknown external outcomes for testing. +Once backup/compatibility/preflight gates pass, manually pin the existing Argo Application to the exact reviewed source revision and sync only Deployment/informed-decision with prune false, keeping the current immutable runtime ConfigMap and all other resources. The source patch changes only the image in admission/rendered Deployment; no Secret, PVC, policy, database or dispatcher change is included unless separately enumerated in the final proposal. Observe five-minute readiness and exact image/config/schema/pins. Run the ten installed purpose variants on the actual native placement using synthetic transport; they prove exact installed module refusal behavior and explicitly report native_provider=false. They do not prove an actual provider response, PDP authority or native lifecycle binding; any required actual-provider proof remains a distinct T04 completion gate with separate authorized preparation, and must not be claimed by this helper. Do not contaminate the live PDP, create human approvals, read credentials through CLI, or replay unknown external outcomes for testing. ## Same-schema rollback and evidence retention @@ -50,3 +50,19 @@ Offline command vectors use exactimage `forgejo.coulomb.social/coulomb/informed- Live reads and online snapshots may legitimately differ because reviews, intake and delivery can commit concurrently. Exact counter equality is required between the frozen selected snapshot and its offline restored clone; it is **not** required between a running post-cutover/rollback database and an earlier snapshot. Live count changes must be accounted for as legitimate committed records/state transitions; preserve all current and uncertain entries. Do not discard new commits or restore the old snapshot to force equality. Same-schema image rollback keeps the current live DB, followed by read-only schema5/integrity and count-only health checks; any unexplained evidence loss or required data recovery stops and requires a separate founder decision. The fresh preflight also independently reads the actual immutable nonsecret ConfigMap and bound PVC: compares sealed UIDs/fullmetadata/PVCspec+volumeName and canonical runtime data checksum, returning no raw runtime data. Same-name deletion/recreation or content/custody drift stops before admission. Secret values remain excluded. Both local and remote optimized Python interpreters are explicitly refused before assertion-based gates. + +## Exact supervised mechanical execution refinement + +The directly attached `execution-bundle.json` contains the exact helper source, plan, tests and PENDING receipt template. It replaces the direct raw scan attachment within the twenty-document limit; `published-verification.json` still binds the unchanged actual unfiltered raw scan, raw SBOM and base scan SHA256 values, retained in the owner evidence package. The known inherited fixable MEDIUM remains explicit, with owner T05/risk follow-through. Neither archive nor technical agreement supplies human approval. + +The reviewed protocol basis is owner commit e0359bcb6cdfad9ab3e868054121fe0cebec2d68, with source follow-through9268c9ac0bbee508fe35c0b90dcefef4c24da2f5. The subsequent exact applied helper/packet owner commit must be named in the externally verified founder receipt before execution. Verify the four committed Git blobs (admission.candidate.json, service.candidate.json, kustomization.yaml, registries.candidate.json) against execution-plan.json as well as current worktree/HEAD; reject overrides/plugins/multiple Application sources and any present automated configuration, including automated:{}. + +Root freshly authenticates the exact confirmed founder person/platform-root ACCEPT of this stable memo/version1 at the fixed native Informed Decision origin before each phase, and supplies protected0600 receipt/outcome files. The helper checks their exact relation and freshness120seconds; these files are supervised bookkeeping, not signed authenticated grants, a human-provider implementation, or autonomous agent authority. Do not derive them from technical reviews or caller assertions. + +Fixed order: drill-backup → drill-copy → offline-verify → cleanup-offline → cutover-backup → cutover-copy → release → verify. A separate recorded release attempt permits rollback → rollback-verify. Every phase fsyncs an attempt nonce/RUNNING journal before effects. Failure/interruption/ambiguous actuation stays UNCERTAIN and the same phase cannot be retried. No improvised adapter or whole-Application sync is permitted. + +The NEW nonce-labelled local volume requires one explicit isolated initializer as UID0:0 with only CAP_CHOWN, exact763c image, --network none --read-only --cpus 1 --memory 128m --cap-drop ALL --cap-add CHOWN --security-opt no-new-privileges. Its only mount is that new named volume at /restore; no host mount, native PVC, runtime config or token mount. Protected snapshot stdin goes only to a unique0600 main file with exact digest, and directory/file custody is set0700/0600 UID/GID10001. Then all pre-open, admin and post-admin checks run UID10001:10001, capabilities dropped, networknone. The second stdlib readonly schema5/integrity/count proof after admin must exactly equal the frozen snapshot proof; independently recheck the retained original protected snapshot SHA. No service startup occurs. + +Rollback dispatch must be available if the candidate is unready or cannot start: it checks sealed Deployment/CM/PVC custody, only prior/candidate source/image pair, node health/headroom and fresh old-image server admission plus Application UID/resourceVersion/source CAS, with no failing candidate Pod/exec/database prerequisite. Dispatch acknowledgment is not recovered health. `rollback-verify` separately requires old image Ready1, succeeded exact Deployment-only/prune=false operation and readonly schema5/integrity/count proof of the latest retained live database. No snapshot replaces the current database. + +**Deadline refinement:** all phases, including rollback and verification, must begin before2026-10-12T23:59:59Z. The earlier amended packet described unstarted-release expiry; this exact helper also bounds recovery/verification. Start early enough to complete the bounded drill and any recovery within the window. If exhausted, stop and obtain a fresh founder decision rather than silently extend a grant. This may delay recovery and is an explicit operational risk. No timer/controller automatically rolls back or changes service at expiry. diff --git a/docs/evidence/2026-10-11-purpose-image-release/proposal.json b/docs/evidence/2026-10-11-purpose-image-release/proposal.json index 2f0e2f5..3dcc48a 100644 --- a/docs/evidence/2026-10-11-purpose-image-release/proposal.json +++ b/docs/evidence/2026-10-11-purpose-image-release/proposal.json @@ -16,7 +16,7 @@ "uid": "a588e10a-90d2-4883-975e-6dd8b8feca92" }, "argo_application_uid": "499868f2-eabc-4df4-ae31-b89ce58d750d", - "source_gate": "Exact committed owner source must contain the two approved candidate file hashes in preflight-inputs.json; source preparation is not native approval", + "source_gate": "All four exact committed owner Kustomize input blobs in execution-plan.json and clean current owner HEAD must match; source preparation is not native approval", "sync_scope": [ "apps:Deployment:informed-decision" ], @@ -42,7 +42,8 @@ "Private evidence snapshot custody and disposal errors; no snapshots/tokens in public evidence", "Candidate purpose refusal may expose callers relying on advisory results as binding", "Inherited known fixable MEDIUM remains until separately approved owner remediation", - "Existing Argo OutOfSync baseline is retained; no whole-app sync or unrelated repairs permitted" + "Existing Argo OutOfSync baseline is retained; no whole-app sync or unrelated repairs permitted", + "All phases, including recovery/verification, must begin before Oct12 deadline; if recovery window is exhausted stop and obtain a fresh founder decision. No automatic expiry controller." ], "rollback": "Manual Argo source pin back to7db8485 and scoped Deployment-only sync to7f5c image; retain current schema5 database and all post-cutover evidence, never restore older snapshot over live writes", "native_executed": false, @@ -51,5 +52,36 @@ "mandatory_pre_open_gate": "stdlibSQLite mode=ro/query_only: schema5+integrity+count baseline before ANY Store/admin on native source or restoredcopy; refuseoldschemas without migration", "optimized_interpreters": "local+remote explicitlyrefused beforeassert gates", "native_dependency_gate": "sealed actualCM UID/immutable/canonicaldatahash+PVC UID/fullspec/Bound/volumeName, no rawCMdata orSecret reads", - "live_counts": "Frozen snapshot/clone exactcounter equality; postcutover/rollback livecounterchanges may reflect legitimate concurrentcommits/state transitions, latestDB alwaysretained" + "live_counts": "Frozen snapshot/clone exactcounter equality; postcutover/rollback livecounterchanges may reflect legitimate concurrentcommits/state transitions, latestDB alwaysretained", + "source_basis": { + "reviewed_protocol_commit": "e0359bcb6cdfad9ab3e868054121fe0cebec2d68", + "owner_followthrough_commit": "9268c9ac0bbee508fe35c0b90dcefef4c24da2f5", + "final_execution_source": "exact subsequent root-applied source commit must be bound by founder receipt and verified against four approved Git blobs" + }, + "approved_owner_render_blob_sha256": { + "deploy/lifecycle/admission.candidate.json": "92382a56b349c3b895e5806e975082527bb99d1a001140e69d857e5b0391fa55", + "deploy/lifecycle/service.candidate.json": "38b78b9cbee5ade7750a58d5156ca4c5773352e947acb304ee714b59e749ceb4", + "deploy/lifecycle/kustomization.yaml": "1bbce81bc6758434354157f8601534320c5d0290587908fd15a6d25e3fa57f47", + "deploy/lifecycle/registries.candidate.json": "9bad6db5fbc2178d31b04120016a41830c3552fbb9e2517b718f9bbe87cf649e" + }, + "execution_bundle_sha256": "27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d", + "execution_helper_manifest_sha256": "f2fad6c251fbb4420e07c1329802f521b513bbf66e51f64c5d673ef04f16284c", + "execution_plan_sha256": "f5e5fa906ff19d3a45d10dcdb2810373ae21f9cf44c0472ff2bd47d3bc3328d6", + "execution_phases": [ + "drill-backup", + "drill-copy", + "offline-verify", + "cleanup-offline", + "cutover-backup", + "cutover-copy", + "release", + "verify", + "rollback", + "rollback-verify" + ], + "deadline_semantics": "All phases including verification/recovery must begin before execute_by. No extension or automatic emergency grant; beyond deadline stop and obtain a fresh founder decision. Complete the bounded drill and rollout early enough to allow recovery within the window.", + "offline_initializer": "One isolated local UID0:0/CAP_CHOWN-only initializer of the newly created nonce-bound disposable volume, exact candidate image, networknone/readonlyroot/no-newprivileges/CPU1/128Mi; no host/livePVC/token/config mount. Subsequent pre-open/admin/post-open checks UID10001:10001.", + "rollback_dispatch": "Sealed Deployment/CM/PVC and same-schema source/image pair plus admission CAS; no Ready candidate or Pod/database exec prerequisite. rollback-verify separately proves recovered old image/Ready1/scoped operation and readonly current schema5/integrity/counts.", + "purpose_proof_limit": "Ten installed synthetic-transport checks on actual placement; native_provider=false. Not actual provider/PDP authority proof, which remains a distinct T04 completion gate.", + "refinement_of_amended_manifest": "b1e3e66bc4023dc80c6ea59564c3557c7653fb3c307f46a049997b76198a9033" } diff --git a/docs/evidence/2026-10-11-purpose-image-release/validation.json b/docs/evidence/2026-10-11-purpose-image-release/validation.json index 61164d7..957926b 100644 --- a/docs/evidence/2026-10-11-purpose-image-release/validation.json +++ b/docs/evidence/2026-10-11-purpose-image-release/validation.json @@ -3,14 +3,14 @@ "typed_memo_valid": true, "lifecycle_documents_valid": 20, "packet_actual_file_bytes_verified": true, - "submission_digest": "sha256:905bbf8ca21686969429f82e37d41afb4e43a82e6bf578107677e0bc9a5a7bf4", + "submission_digest": "sha256:fd78d486174670e12efb2f812bac02e68f294e7791b9302d0d458c053240f5a9", "offline_constructed_grant": "state-hub/decision-record/net-kingdom-admins", "deployed_submitter_admission_verified": false, "human_approval": false, "live_submitted": false, "native_backup_restore_executed": false, "native_workload_changed": false, - "packet_bytes_total": 184912, + "packet_bytes_total": 171910, "guard_tests": 11, "guard_drift_negative_assertions": 28, "transport_negative_cases": 6, @@ -22,5 +22,36 @@ "native_dependencies_checked": true, "native_pre_open_schema_checked": false, "original36path_snapshot_preserved": true, - "refinement_same_proposal_trial": true + "refinement_same_proposal_trial": true, + "register_json_bytes": 238209, + "mechanical_helper_tests": 16, + "mechanical_review_manifest_sha256": "80fd16e0f5841b83a012ce195b28ebf5b0dad37c87d1efa5d8cbfd219a780824", + "helper_manifest_sha256": "f2fad6c251fbb4420e07c1329802f521b513bbf66e51f64c5d673ef04f16284c", + "execution_bundle_sha256": "27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d", + "combined_source_negative_cases": [ + { + "case": "document-content-changed", + "refused": true + }, + { + "case": "helper-hash-changed", + "refused": true + }, + { + "case": "duplicate-document-identity", + "refused": true + }, + { + "case": "typed-source-bytes-changed", + "refused": true + }, + { + "case": "typed-duplicate-digest", + "refused": true + } + ], + "original78path_snapshot_preserved": true, + "actual_provider_probe": false, + "source_hash_negative_refusals_before_authority_or_dispatch": 4, + "source_boundary_receipt_sha256": "877f93485c1a6817bdfde257051f202d33e14f0ee54e03e597043c8924723337" } diff --git a/docs/reviews/2026-10-11-purpose-actuator-product-owner-review.md b/docs/reviews/2026-10-11-purpose-actuator-product-owner-review.md new file mode 100644 index 0000000..8bbde85 --- /dev/null +++ b/docs/reviews/2026-10-11-purpose-actuator-product-owner-review.md @@ -0,0 +1,80 @@ +# Purpose actuator product-owner technical review + +```yaml +reviewer: informed-decision-owner (agent informed-decision, codex) +decision: approved +work_item: INFD-WP-ADHOC-2026-10-11-T05 +scope: exact helper source and semantic refinements only +comment: >- + INTENT.md Purpose/What informed-decision Owns require retained lifecycle and + presentation evidence; Design Principles9-10 reserve identity and human + binding. Reviewed23-path manifest SHA256 + f2fad6c251fbb4420e07c1329802f521b513bbf66e51f64c5d673ef04f16284c under + INFD-WP-ADHOC-2026-10-11-T05. Actual source agrees with schema5/pre-open custody, + retained evidence, separately verified recovery and truthful provider limits. + This technical agreement approves preparation, not human/native execution. +``` + +All23 staged hashes and embedded source bundle bytes verify. Source bundle +SHA256 `27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d`,85747bytes. +Plan SHA256 `f5e5fa906ff19d3a45d10dcdb2810373ae21f9cf44c0472ff2bd47d3bc3328d6`. +Owner checkout reviewed at9268c9ac0bbee508fe35c0b90dcefef4c24da2f5. + +The helper requires stdlib read-only schema5/integrity/typed count proof before +native backup/admin or offline Store open. It transfers only a closed consistent +snapshot to uniquely created private0600 custody, checks frozen size/hash and +retains partial/uncertain evidence rather than overwriting it. Offline clone +creation is isolated to one new local named volume, bounded network-none, +read-only rootfs and no credential/runtime/host/live-PVC mounts. Its one-time +UID0 initializer carries only CAP_CHOWN, verifies received bytes and sets +0700/0600 ownership10001; UID10001 then checks schema/integrity/counts before +admin inspect and repeats full proof after it. Original snapshot hash remains +unchanged; exact frozen clone counts are distinguished from legitimate live +commits/state transitions. Native backups and actual-data compatibility remain +unperformed and separately approved operations. + +Rollback dispatch no longer depends on candidate Ready/Pod/database execution: +a recorded release attempt, exact image/source pair, sealed Deployment/CM/PVC, +headroom/admission/CAS and authority remain required. Its one Deployment-only +Argo operation/prune=false acknowledgment is not recovered health. Separate +rollback-verify requires old-image Ready1, observed controller generation, +exact scoped succeeded operation and read-only schema5/integrity/count proof +of the current retained DB. No snapshot restore overwrites later live evidence. +Durable RUNNING intent precedes phase dispatch; failure/interruption remains +UNCERTAIN and refuses same-phase retry. Root diagnoses and records separate +recovery under its actual authority; journal flags do not grant that authority. + +Fresh externally authenticated root fixed-origin native founder acceptance +must precede every phase. Protected bookkeeping files bind memo/source/plan and +120-second freshness, but are not authenticated provider verification, signed +human credentials or autonomous grants. Agent review cannot create a human +acceptance. All phase starts, including verification, cleanup and recovery, are +bounded by2026-10-12T23:59:59Z; this supersedes earlier wording limited to an +unstarted release. Insufficient recovery time can leave recovery waiting for a +fresh founder disposition after expiry; disclose that limitation before first +acceptance. There is no silent deadline extension or automatic emergency grant. + +The helper pins all four committed owner render inputs and refuses source +plugins/overrides/multiple sources/automated:{} while preserving manual scope. +Installed10 purpose variants on native placement still use synthetic transport, +with native_provider=false. They prove installed refusal mechanics, never a +real provider allow/binding or human MFA. Actual-provider/native binding +acceptance remains a distinct T04 completion gate. Retained16 synthetic helper +checks and platform5 recovery negatives are mechanism evidence; no native +backup/release proof or T04 completion is inferred. Product policy9d7/image763c +are unchanged, so prior50 source mutation/replay checks remain applicable. + +Before the first human post, amend and validate the exact20-document packet to +include this source bundle/plan, four render pins, confined initializer, separate +recovery verification, explicit all-phase expiry and recovery-delay risk. If the +107904-byte raw scan attachment is replaced, preserve its exact full unfiltered +source/hash provenance and SBOM coverage; never imply the inherited fixable +MEDIUM disappeared. T05 vulnerability follow-through remains independent. +Original78-path/initial helper/conditional reviews remain historical evidence. +The final combined packet requires its own exact frozen product acknowledgement; +this review cannot acknowledge a packet that is still being amended. + +No additional product correction was found. This entry reviews only the +informed-decision-owner role, modifies no approval/admission/bound claim, and +authorizes no native custody, login, release, temporary risk acceptance or +privileged phase. Platform technical judgement remains its own review. diff --git a/docs/reviews/2026-10-11-purpose-combined-packet-product-ack.md b/docs/reviews/2026-10-11-purpose-combined-packet-product-ack.md new file mode 100644 index 0000000..9b207ed --- /dev/null +++ b/docs/reviews/2026-10-11-purpose-combined-packet-product-ack.md @@ -0,0 +1,63 @@ +# Exact combined purpose packet product-owner acknowledgement + +```yaml +reviewer: informed-decision-owner (agent informed-decision, codex) +decision: approved +work_item: INFD-WP-ADHOC-2026-10-11-T05 +scope: exact combined source packet technical agreement only +comment: >- + INTENT.md Purpose, What informed-decision Owns/Does Not Own and Design + Principles9-10 require retained evidence and authentic human binding, while + reserving authority to its owner. Under completed existing + INFD-WP-ADHOC-2026-10-11-T05, exact112-path combined manifest SHA256 + ffa2679a94a24e69a75d1248a808825498a80e711ceda98f3639a4143c40ec1b is acknowledged + as matching the product-reviewed helper/protocol refinements. This is source + review in the same preparation trial, not founder acceptance or execution. +``` + +Exact memo file SHA256: +`506d3956beb7c62ab2bbdfda783c05905d183452a1f67a1817f3fb8c2e522937`. +Submission digest: +`sha256:fd78d486174670e12efb2f812bac02e68f294e7791b9302d0d458c053240f5a9`. +Twenty packet documents total171910 UTF-8 bytes; exact compact register body +is238209bytes. All112 staged file hashes verify. The reviewed23 helper paths +match manifestf2fad6c251fbb4420e07c1329802f521b513bbf66e51f64c5d673ef04f16284c +unchanged, and directly attached bundle27d6d6d3133c963da1dde92d498d636617387c16e850a17c598148abc35c775d +retains the exact plan/source bytes. Four proposal render pins match the plan; +all plan case/executor hashes match combined source. No unchanged policy tests +were repeated for this packet acknowledgement. + +The combined human-facing packet now explicitly binds the four owner render +inputs; confined new-volume UID0/CAP_CHOWN initialization then UID10001 +pre-open/admin/post-open schema5/integrity/count verification; protected original +snapshot retention; failed-candidate recovery without Ready/Pod/database-exec +prerequisites followed by independent old-image/scoped-operation/current-DB +proof; and the fixed all-phase start deadline including verification/recovery. +Recovery-delay risk after expiry and the need for fresh founder disposition +are explicit. Source preparation is not phase authority or autonomous approval. + +Installed ten-form checks are explicitly synthetic transport with +native_provider=false, including on actual placement. They are not a real PDP +allow/binding, browser/MFA or actual-data compatibility proof. Native-provider/ +binding acceptance remains a distinct T04 completion gate. Durable no-retry +intent, exact manual Argo Deployment-only/prune=false scope, immutable763c image, +ConfigMap6c, schema5/PVC/current live DB retention and credential/policy/audience +pins remain unchanged. No backup/export/restore/image action has occurred. + +Full raw scan, SBOM and base scan bytes/provenance are unchanged and hash-bound +by the directly attached published-verification receipt. Replacing the direct +raw-scan attachment with the helper bundle changes attachment composition, +not retained scan coverage or the inherited fixable MEDIUM finding. T05/ +INFD-RISK-20261011-ZLIB-85091 and its2026-10-18 follow-through remain visible; +this owner acknowledgement does not supply founder temporary risk acceptance. +Original78/36/helper conditional refinements remain retained, with no backfilled +approval or separate scored success. + +Retained source-guard evidence records four mutated helper/case/render refusals +before authority or dispatch; it remains synthetic source mechanism proof. +The initial helper product review's pending combined-packet source review gate +is satisfied by this exact acknowledgement. Actual founder approval/post, +protected native schema/backup/copy/restore, release, recovery if needed and +native provider/lifecycle verification remain separate unperformed gates. +No product correction was found. This entry records only informed-decision-owner +technical agreement and changes no approval/status/admission/bound claims. diff --git a/intakes/intakes.md b/intakes/intakes.md index ec89aee..3303530 100644 --- a/intakes/intakes.md +++ b/intakes/intakes.md @@ -577,4 +577,5 @@ acceptance: >- and time-basis-aware reconciliation/detection are demonstrated, not assumed. Required native actions have their own exact founder disposition. source_receipt: docs/evidence/2026-10-11-staff-evidence-source-reconciliation.md +state_hub_intake_id: "01a128c1-5d54-7885-bdda-7205a603e23c" ``` diff --git a/workplans/ADHOC-2026-10-11.md b/workplans/ADHOC-2026-10-11.md index ff35ad5..5974053 100644 --- a/workplans/ADHOC-2026-10-11.md +++ b/workplans/ADHOC-2026-10-11.md @@ -122,3 +122,31 @@ Formal source review: docs/reviews/2026-10-11-staff-evidence-source-owner-review.md. Existing Staff/PEP-shaped classification, three load-bearing class classifications, compromised-source and commitment/content availability limits remain unchanged. + +## Independently review supervised purpose actuator product boundaries + +```task +id: INFD-WP-ADHOC-2026-10-11-T05 +status: done +priority: medium +``` + +Same informed-decision-owner reviewed exact23-path helper manifest +`f2fad6c251fbb4420e07c1329802f521b513bbf66e51f64c5d673ef04f16284c`, +all staged hashes and embedded source bundle/plan. Product evidence/schema5, +private snapshot custody, confined offline UID0 initialization followed by +UID10001 pre/post-admin verification, independent failed-candidate rollback +and all-phase start deadline are technically agreed as source preparation. + +No purpose-policy or candidate image change. Retained helper16 synthetic tests +and platform5 independent recovery negatives are mechanism proof; prior50 +product policy negatives remain applicable. No new test run was needed for this +unchanged-source review. Native-provider acceptance remains distinct from the +installed10 synthetic purpose forms; T04 is not complete. Before first human +post, amend exact20-document packet to hash-bind helper/plan, four render inputs, +initializer/recovery/deadline refinements and preserved full scan provenance. +Exact combined packet acknowledgement remains a separate review gate. + +Review: docs/reviews/2026-10-11-purpose-actuator-product-owner-review.md. +No native reads/backups/export/restore/release, credentials, human disposition, +founder approval or phase authority was exercised by this review. diff --git a/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md b/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md index 780e0df..ce5c505 100644 --- a/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md +++ b/workplans/INFD-WP-0009-lifecycle-consumer-pin-repair.md @@ -141,6 +141,7 @@ Evidence: `docs/evidence/2026-10-11-purpose-image-release/`. id: INFD-WP-0009-T05 status: todo priority: medium +state_hub_task_id: "1743596f-8558-5a6b-afef-4dd5c1e9c0ae" ``` Owner follow-through `INFD-RISK-20261011-ZLIB-85091` tracks actual published