@pipeline-builder/pipeline-manager 4.5.2 → 4.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +62 -37
  2. package/dist/agent/post-steps.d.ts +5 -4
  3. package/dist/agent/post-steps.d.ts.map +1 -1
  4. package/dist/agent/post-steps.js +19 -7
  5. package/dist/agent/targets.d.ts +12 -2
  6. package/dist/agent/targets.d.ts.map +1 -1
  7. package/dist/agent/targets.js +20 -4
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +16 -7
  10. package/dist/commands/audit-stacks.d.ts +42 -1
  11. package/dist/commands/audit-stacks.d.ts.map +1 -1
  12. package/dist/commands/audit-stacks.js +104 -23
  13. package/dist/commands/audit-tokens.d.ts.map +1 -1
  14. package/dist/commands/audit-tokens.js +3 -4
  15. package/dist/commands/create-pat.d.ts.map +1 -1
  16. package/dist/commands/create-pat.js +9 -6
  17. package/dist/commands/deploy.d.ts.map +1 -1
  18. package/dist/commands/deploy.js +15 -2
  19. package/dist/commands/login.d.ts +3 -2
  20. package/dist/commands/login.d.ts.map +1 -1
  21. package/dist/commands/login.js +19 -10
  22. package/dist/commands/logout.d.ts +24 -0
  23. package/dist/commands/logout.d.ts.map +1 -0
  24. package/dist/commands/logout.js +105 -0
  25. package/dist/commands/new-plugin.js +5 -5
  26. package/dist/commands/org-export.js +2 -2
  27. package/dist/commands/pipeline-remove.d.ts +26 -0
  28. package/dist/commands/pipeline-remove.d.ts.map +1 -0
  29. package/dist/commands/pipeline-remove.js +84 -0
  30. package/dist/commands/provision-steps.d.ts.map +1 -1
  31. package/dist/commands/provision-steps.js +1 -2
  32. package/dist/commands/provision.d.ts.map +1 -1
  33. package/dist/commands/provision.js +6 -5
  34. package/dist/commands/register.d.ts.map +1 -1
  35. package/dist/commands/register.js +3 -4
  36. package/dist/commands/status.d.ts +5 -2
  37. package/dist/commands/status.d.ts.map +1 -1
  38. package/dist/commands/status.js +65 -25
  39. package/dist/commands/toolchain.d.ts +21 -0
  40. package/dist/commands/toolchain.d.ts.map +1 -0
  41. package/dist/commands/toolchain.js +70 -0
  42. package/dist/commands/validate-templates.d.ts.map +1 -1
  43. package/dist/commands/validate-templates.js +4 -5
  44. package/dist/config/cli.constants.d.ts +8 -0
  45. package/dist/config/cli.constants.d.ts.map +1 -1
  46. package/dist/config/cli.constants.js +21 -2
  47. package/dist/types/plugin.d.ts +0 -6
  48. package/dist/types/plugin.d.ts.map +1 -1
  49. package/dist/types/plugin.js +1 -1
  50. package/dist/utils/command-utils.d.ts +13 -0
  51. package/dist/utils/command-utils.d.ts.map +1 -1
  52. package/dist/utils/command-utils.js +31 -17
  53. package/dist/utils/config-loader.d.ts +2 -1
  54. package/dist/utils/config-loader.d.ts.map +1 -1
  55. package/dist/utils/config-loader.js +14 -4
  56. package/dist/utils/credential-store.d.ts +9 -1
  57. package/dist/utils/credential-store.d.ts.map +1 -1
  58. package/dist/utils/credential-store.js +21 -2
  59. package/dist/utils/error-handler.d.ts +10 -1
  60. package/dist/utils/error-handler.d.ts.map +1 -1
  61. package/dist/utils/error-handler.js +20 -8
  62. package/dist/utils/pipeline-config.d.ts +5 -2
  63. package/dist/utils/pipeline-config.d.ts.map +1 -1
  64. package/dist/utils/pipeline-config.js +12 -3
  65. package/dist/utils/plugin-resolver.d.ts +21 -6
  66. package/dist/utils/plugin-resolver.d.ts.map +1 -1
  67. package/dist/utils/plugin-resolver.js +42 -9
  68. package/dist/utils/response-utils.d.ts +11 -0
  69. package/dist/utils/response-utils.d.ts.map +1 -1
  70. package/dist/utils/response-utils.js +23 -1
  71. package/dist/utils/toolchain.d.ts +78 -0
  72. package/dist/utils/toolchain.d.ts.map +1 -0
  73. package/dist/utils/toolchain.js +195 -0
  74. package/package.json +4 -4
package/README.md CHANGED
@@ -16,17 +16,19 @@ Requires Node.js 26.13.1+.
16
16
 
17
17
  ```bash
18
18
  # Sign in — prints a short code, opens your browser to approve it, and stores
19
- # the session in ~/.pipeline-manager/credentials.json (no password on the CLI)
19
+ # the session in ~/.pipeline-manager/credentials.json (no password on the CLI).
20
+ # The platform you sign in to becomes the one every later command talks to.
20
21
  pipeline-manager auth login --url https://platform.example.com
21
22
 
22
- # Bootstrap a new project in the current directory
23
- pipeline-manager infra bootstrap
23
+ # One-time per AWS account/region: deploy the CDK toolkit stack pipelines deploy into
24
+ pipeline-manager infra bootstrap --account 123456789012 --region us-east-1
24
25
 
25
- # Synthesize the CDK app into a CloudFormation template
26
- pipeline-manager pipeline synth
26
+ # Register a pipeline definition (props.json from `template instantiate`, or your own)
27
+ pipeline-manager pipeline create -f props.json
27
28
 
28
- # Deploy the pipeline to AWS
29
- pipeline-manager pipeline deploy
29
+ # Synthesize the CDK app into a CloudFormation template, then deploy it to AWS
30
+ pipeline-manager pipeline synth --id <pipelineId>
31
+ pipeline-manager pipeline deploy --id <pipelineId>
30
32
  ```
31
33
 
32
34
  ## Install the platform (`provision`)
@@ -62,62 +64,85 @@ pipeline-manager infra provision --target docker --repo --with-all --with-smoke-
62
64
  - **AI-optional.** Set `ANTHROPIC_API_KEY` (or `AI_PROVIDER` + its key) to parse a natural-language `--prompt` and add free-form failure diagnosis; without a key it falls back to the deterministic issue matcher.
63
65
  - **Bootstrap a fresh machine (`--repo`).** Without a checkout, `--repo` git-clones the platform repo first, then runs from it. The clone is **sparse + partial** (`--filter=blob:none` + cone `sparse-checkout`, git ≥ 2.27 — else a full-clone fallback): it materializes only the deploy folders the selected target + options need. The common base is just `deploy/bin`; each target adds its own folder (e.g. `deploy/local/docker`; minikube is self-contained), and each post-install load adds its folder. Re-syncs are **additive** — a single `--workdir` can accumulate multiple targets. Override with `--repo <url>`, `--ref <branch|tag>`, `--workdir <dir>`.
64
66
  - **Run in Docker, zero host installs.** Don't want `git`/`yq`/AWS CLI on your machine? [`deploy/bin/provision-docker.sh`](../../deploy/bin/provision-docker.sh) runs `provision` inside a throwaway `node:26-slim` container, installing only the tools the chosen target needs: **ec2** → git + AWS CLI (mounts `~/.aws` read-only); **eks** → + openssl + envsubst + eksctl + kubectl (mounts `~/.aws` + `~/.kube`); **local** → git + yq + openssl, with **Docker + Docker Compose used *externally*** from the host via the mounted socket (Docker Desktop already provides them — they're never installed in the image). Host footprint = just Docker. Args pass straight through: `deploy/bin/provision-docker.sh --target eks --repo --domain … --yes`. (On macOS the container can't drive Docker Desktop's CLI, so run **local** on the host instead — the wrapper shines for the AWS targets.)
65
- - **Post-install steps.** After deploy + health, `provision` registers the admin (non-interactive with `--admin-email`/`--admin-password`) and runs the opt-in loads — passed as flags, or **offered interactively after the clone** when none are given (each picked load is then fetched via an additive sparse re-sync): `--with-plugins` (adds `deploy/plugins` + `deploy/codebuild`), `--with-compliance` (`deploy/compliance`), `--with-samples` (`deploy/samples`), or `--with-all`. Plus `--with-smoke-test` (read-only API check), **`--with-events`** (AWS event ingestion — a two-step bundle: **`store-token`** writes a platform JWT to Secrets Manager at pipeline-builder's own pattern `pipeline-builder/{orgId}/platform`, then **`setup-events`** deploys the EventBridge → SQS → Lambda that reads it), and repeatable `--post-step "<cmd>"`. Default is register-only; `--init skip` skips even that. All steps are idempotent, so re-running with more options just layers them on.
67
+ - **Post-install steps.** After deploy + health, `provision` registers the admin (non-interactive with `--admin-email`/`--admin-password`) and runs the opt-in loads — passed as flags, or **offered interactively after the clone** when none are given (each picked load is then fetched via an additive sparse re-sync): `--with-plugins` (adds `deploy/plugins`), `--with-compliance` (`deploy/compliance`), `--with-samples` (`deploy/samples`), or `--with-all`. Plus `--with-smoke-test` (read-only API check), **`--with-events`** (AWS event ingestion — a two-step bundle: **`store-token`** writes a platform JWT to Secrets Manager at pipeline-builder's own pattern `pipeline-builder/{orgId}/platform`, then **`setup-events`** deploys the EventBridge → SQS → Lambda that reads it), and repeatable `--post-step "<cmd>"`. Default is register-only; `--init skip` skips even that. All steps are idempotent, so re-running with more options just layers them on.
66
68
 
67
69
  The underlying `bin/setup.sh` / `bin/shutdown.sh` scripts (and `aws cloudformation delete-stack` for ec2) remain the source of truth and can always be run directly. Full guide: [AWS deployment → AI-assisted install](https://mwashburn160.github.io/pipeline-builder/docs/aws-deployment#ai-assisted-install-provision).
68
70
 
69
71
  ## Commands
70
72
 
71
- ### Platform installation
73
+ Commands are grouped by task: `pipeline-manager <group> <verb>`. `pipeline-manager --help` lists the groups and `pipeline-manager <group> --help` a group's verbs.
74
+
75
+ ### `auth` — credentials
72
76
 
73
77
  | Command | Purpose |
74
78
  | --- | --- |
75
- | `provision` | Install (or tear down) the **platform** on local/Minikube/EC2/EKS: prereq checks + assembles the exact `bin/setup.sh` command, then **deploys it** (gated by confirmation; `--yes` for CI, `--json` to print the plan and run nothing), verifying health + running post-install steps. `--repo` bootstraps a fresh machine via a **sparse** clone of only the needed deploy folders; `--with-plugins`/`--with-compliance`/`--with-samples`/`--with-all`/`--with-smoke-test`/`--with-events`/`--post-step` add post-install steps; `--teardown` removes it. On failure it diagnoses + auto-fixes/retries known issues. See [Install the platform](#install-the-platform-provision). |
79
+ | `auth login` | Sign in through your browser (device authorization — no password on the command line) and store the session for that platform. The platform becomes the active one for later commands (`PLATFORM_BASE_URL` still overrides it). `--org <orgId>` switches organization; `--token` / `--quiet` print the token for `export PLATFORM_TOKEN=…` |
80
+ | `auth logout` | Revoke the stored session on the platform (`POST /auth/logout`) and delete it from this device. The local copy is removed even when the platform can't be reached — the command then says to revoke the device from Settings → Sessions and devices |
81
+ | `auth pat` | Create a named access key (`pb_pat_…`, long-lived, for CI as `PLATFORM_TOKEN`). The step-up is approved in the browser; the key is printed once |
76
82
 
77
- ### Project lifecycle
83
+ ### `pipeline` — define, deploy and reconcile pipelines
78
84
 
79
85
  | Command | Purpose |
80
86
  | --- | --- |
81
- | `bootstrap` | Scaffold a new pipeline project with `cdk.json` and starter config |
82
- | `synth` | Run CDK synth to emit the CloudFormation template for the pipeline |
83
- | `deploy` | Deploy the synthesized pipeline stack to AWS (also registers the pipeline with the platform by its `pipelineId`) |
84
- | `register` | Re-register a deployed pipeline with the platform and drain pending intents queued by prior failed deploys (recovery path; exits non-zero if any registration still fails) |
85
- | `status` | Report the current deployment and execution status |
87
+ | `pipeline create` | Register a pipeline definition from a props file (`--deploy` to also deploy it) |
88
+ | `pipeline list` / `pipeline get` | Inspect the pipelines your organization can see |
89
+ | `pipeline synth` | Run CDK synth to emit the CloudFormation template for a pipeline |
90
+ | `pipeline deploy` | Deploy the synthesized stack to AWS (also registers the deployment by its `pipelineId`). `--local-spec <pipeline.json>` deploys without the platform and needs `--toolchain-file` (from `toolchain export`) |
91
+ | `pipeline register` | Re-register a deployed pipeline and drain registrations queued by failed deploys (recovery path; non-zero exit if any still fails) |
92
+ | `pipeline deregister` | Remove one `pipeline_registry` row by its registry id (`--yes` required) — the fix for an `audit stacks` missing-stack finding |
93
+ | `pipeline delete` | Delete a pipeline definition (`--yes` required). A deployed stack is left in AWS |
94
+
95
+ ### `plugin` — author and publish plugins
86
96
 
87
- ### Resource management
97
+ | Command | Purpose |
98
+ | --- | --- |
99
+ | `plugin new` | Scaffold a plugin from a `plugin-<eco>-base` image (Dockerfile, spec, README, LICENSE) |
100
+ | `plugin validate` | Validate a local plugin with the server's schemas and report its catalog metadata |
101
+ | `plugin test` | Run a plugin's install + build commands locally in its image against a sample workspace |
102
+ | `plugin publish` | Pre-flight, scan-preview and upload a plugin, then request its listing in the plugin ecosystem |
103
+ | `plugin upload` | Upload and deploy a plugin package |
104
+ | `plugin list` / `plugin get` | Browse the plugin catalog and fetch one plugin |
105
+ | `plugin deprecate` | Deprecate a version (it keeps resolving, with a warning); `--undo` clears it |
106
+ | `plugin yank` | Yank a version (stops resolving for ranges, `latest` and the default) |
107
+ | `plugin verify` | Report the current vulnerability state of a pipeline's pinned plugin images at run time (never fails on it) |
108
+
109
+ ### `template` — golden-path templates
88
110
 
89
111
  | Command | Purpose |
90
112
  | --- | --- |
91
- | `create-pipeline` | Register a new pipeline definition with the platform |
92
- | `list-pipelines` / `get-pipeline` | Inspect pipelines registered to your organization |
93
- | `list-plugins` / `get-plugin` | Browse the plugin catalog and fetch a single plugin spec |
94
- | `upload-plugin` | Publish a custom plugin spec + Dockerfile to the platform |
95
- | `validate-templates` | Parse and validate `{{ ... }}` templates in a pipeline or plugin spec (local file, registered pipeline by ID, or registered plugin by `name:version`) |
96
- | `org-export` | Export an organization's data as JSON for GDPR portability (sysadmins can export any org; org admins their own only) |
113
+ | `template instantiate` | Render a pipeline template into concrete pipeline props (creates nothing) |
114
+ | `template validate` | Parse and validate `{{ ... }}` templates in a local file, a registered pipeline (by id) or a registered plugin (`name:version`) |
97
115
 
98
- ### Auth & infrastructure
116
+ ### `infra` — AWS and platform infrastructure
99
117
 
100
118
  | Command | Purpose |
101
119
  | --- | --- |
102
- | `login` | Authenticate against the platform and persist the access token (supports `--refresh <token>` and `--org <orgId>` to switch organizations) |
103
- | `store-token` | Generate a long-lived JWT and store it in AWS Secrets Manager (used by the events Lambda and CodePipeline synth steps). Add `--schedule` to also deploy a daily auto-renewal stack so the token never lapses |
104
- | `setup-events` | Deploy the EventBridge → SQS → Lambda stack that streams CodePipeline events into the platform's reporting service |
120
+ | `infra bootstrap` | Deploy the AWS CDK toolkit stack in the target account/region (`--account`, `--qualifier`, `--trust` for cross-account) — needed once before the first `pipeline deploy` there |
121
+ | `infra setup-events` | Deploy the EventBridge → SQS → Lambda stack that streams CodePipeline events into reporting |
122
+ | `infra redrive-events` | Move dead-lettered CodePipeline events back onto the ingestion queue (manual fallback for the Lambda's own redrive) |
123
+ | `infra store-token` | Provision an org service-account key and store it in AWS Secrets Manager for CDK synth steps and the events Lambda (`--schedule` adds daily auto-renewal) |
124
+ | `infra provision` | Install (or `--teardown`) the **platform** on local/Minikube/EC2/EKS. See [Install the platform](#install-the-platform-provision) |
105
125
 
106
- ### Operator audits (cron-friendly)
126
+ ### `audit` — operator audits (cron-friendly)
107
127
 
108
- These commands report drift and exit non-zero when findings exist. Designed to run on a schedule.
128
+ These report drift and exit non-zero when there are findings. Designed to run on a schedule.
109
129
 
110
130
  | Command | Purpose | Exit codes |
111
131
  | --- | --- | --- |
112
- | `audit-stacks` | Diff CloudFormation stacks tagged `pipeline-builder` against the platform's `pipeline_registry`. Surfaces orphaned stacks (no DB row) and missing stacks (DB row but no live stack). See [docs/aws-deployment.md](https://mwashburn160.github.io/pipeline-builder/docs/aws-deployment.html#drift-detection-audit-stacks). | `0` clean / `1` findings / `2` AWS error |
113
- | `audit-tokens` | Scan platform tokens stored in AWS Secrets Manager and flag any expiring within `--warn-days` (default 7). Run before tokens lapse to avoid silent reporting outages. | `0` clean / `1` at-risk / `2` AWS error |
132
+ | `audit stacks` | Diff the CloudFormation stacks tagged `pipeline-builder` in ONE region (`--region`) against your org's `pipeline_registry` rows for that region (every page). Surfaces orphaned stacks (no registry row) and missing stacks (a row but no live stack), each with the command that reconciles it. `--org` audits another org when your credential may list it (a system admin). See [drift detection](https://mwashburn160.github.io/pipeline-builder/docs/aws-deployment.html#drift-detection-audit-stacks). | `0` clean / `1` findings or an incomplete scan / `2` AWS or platform error |
133
+ | `audit tokens` | Scan platform tokens stored in AWS Secrets Manager and flag any expiring within `--warn-days` (default 7) | `0` clean / `1` at-risk / `2` AWS error |
114
134
 
115
- ### Misc
135
+ ### Other groups
116
136
 
117
137
  | Command | Purpose |
118
138
  | --- | --- |
119
- | `completions` | Print a shell completion script for `bash`, `zsh`, or `fish`. Source it from your shell profile, e.g. `eval "$(pipeline-manager completions bash)"` in `~/.bashrc` (completions are derived from the live command list, so they never drift) |
120
- | `version` | Print CLI version info |
139
+ | `toolchain export` | Write the pipeline toolchain release your org resolves to (or `--release <V>`) as JSON: both images' repositories and signed digests, the release and its tool versions — the input to `pipeline deploy --local-spec --toolchain-file` |
140
+ | `org export` | Export an organization's data as JSON for GDPR portability (sysadmins any org; org admins their own) |
141
+ | `report list` / `create` / `run` / `publish` / `link` / `pdf` / `transfer` | Stakeholder reports: save a scheduled report, compose a period (or backfill past ones), publish it, mint a read-only link, download the PDF, hand it to a new owner |
142
+ | `security-report upload` | Upload a SARIF / trivy / grype report produced inside a pipeline |
143
+ | `status` | Show the CLI's setup: the platform it talks to, the credential it would use and its expiry, whether the platform accepts it (and as whom), CDK availability and `/health` reachability |
144
+ | `version` | Print CLI version info (`--check-config` validates the configuration) |
145
+ | `completions` | Print a shell completion script for `bash`, `zsh` or `fish`, e.g. `eval "$(pipeline-manager completions bash)"` (derived from the live command tree, so it never drifts) |
121
146
 
122
147
  Run `pipeline-manager <command> --help` for the full flag reference on any command.
123
148
 
@@ -125,8 +150,8 @@ Run `pipeline-manager <command> --help` for the full flag reference on any comma
125
150
 
126
151
  | Variable | Required | Purpose |
127
152
  | --- | --- | --- |
128
- | `PLATFORM_TOKEN` | Yes (for API ops) | Auth token for the Pipeline Builder platform |
129
- | `PLATFORM_BASE_URL` | Yes (for API ops) | Base URL of your platform deployment |
153
+ | `PLATFORM_TOKEN` | No | Access key or token; overrides the stored `auth login` session (what CI uses) |
154
+ | `PLATFORM_BASE_URL` | No | Base URL of your platform; overrides the platform `auth login` signed in to and `config.yml` |
130
155
  | `AWS_REGION` | Yes (for deploy) | Target AWS region for `synth` / `deploy` / `provision` teardown |
131
156
  | `ANTHROPIC_API_KEY` (or other provider key) | No | Enables `provision`'s natural-language `--prompt` parsing + failure diagnosis (else it falls back to the deterministic issue matcher) |
132
157
  | `AI_PROVIDER` / `AI_MODEL` | No | Provider + model for `provision` (`anthropic` \| `openai` \| `google` \| `xai` \| `bedrock`) |
@@ -137,7 +162,7 @@ Full reference: [Environment Variables](https://mwashburn160.github.io/pipeline-
137
162
 
138
163
  - [Getting started](https://mwashburn160.github.io/pipeline-builder/)
139
164
  - [CDK usage](https://mwashburn160.github.io/pipeline-builder/docs/cdk-usage)
140
- - [Plugin catalog (119 plugins)](https://mwashburn160.github.io/pipeline-builder/docs/plugins/)
165
+ - [Plugin catalog (118 plugins)](https://mwashburn160.github.io/pipeline-builder/docs/plugins/)
141
166
  - [API reference](https://mwashburn160.github.io/pipeline-builder/docs/api-reference)
142
167
  - [AWS deployment](https://mwashburn160.github.io/pipeline-builder/docs/aws-deployment)
143
168
 
@@ -2,7 +2,8 @@
2
2
  * Post-install steps.
3
3
  *
4
4
  * After the platform is deployed + health-checked, provision runs an ordered set
5
- * of post-install steps: **register** (the admin, via `init-platform.sh`, driven
5
+ * of post-install steps: an optional **build-bootstrap** (`--build-bootstrap`:
6
+ * `build-plugin-images.sh --only pipeline-bootstrap`), **register** (the admin, via `init-platform.sh`, driven
6
7
  * non-interactively by env — which also performs any opt-in plugin/compliance/
7
8
  * sample loads), then an optional **smoke-test**, **events** (AWS), and any
8
9
  * operator **--post-step** commands. Pure, deterministic assembly here — provision
@@ -36,7 +37,7 @@ export interface PostStepOptions {
36
37
  readonly region?: string;
37
38
  /** Load-step ids enabled via `--with-*` (drive init-platform's LOAD_* envs + sparse paths). */
38
39
  readonly enabledLoadIds: readonly string[];
39
- /** `--build-bootstrap`: build the CodeBuild bootstrap image during register. */
40
+ /** `--build-bootstrap`: build + publish pipeline-bootstrap before register. */
40
41
  readonly buildBootstrap: boolean;
41
42
  /** False when `--no-init` — skips the register step entirely. */
42
43
  readonly init: boolean;
@@ -52,8 +53,8 @@ export interface PostStepOptions {
52
53
  readonly steps: readonly string[];
53
54
  }
54
55
  /**
55
- * Resolve the ordered post-install step list: register → smoke-test → events →
56
- * custom. `register` carries the load + BUILD_BOOTSTRAP env so init-platform runs
56
+ * Resolve the ordered post-install step list: build-bootstrap → register →
57
+ * smoke-test → events → custom. `register` carries the LOAD_* env so init-platform runs
57
58
  * the enabled loads non-interactively. Requested-but-inapplicable steps land in
58
59
  * `skipped` so the caller can warn rather than silently drop them.
59
60
  */
@@ -1 +1 @@
1
- {"version":3,"file":"post-steps.d.ts","sources":["../../src/agent/post-steps.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;;qDAGiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CA8HzE"}
1
+ {"version":3,"file":"post-steps.d.ts","sources":["../../src/agent/post-steps.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;;qDAGiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CA0IzE"}
@@ -4,7 +4,8 @@
4
4
  * Post-install steps.
5
5
  *
6
6
  * After the platform is deployed + health-checked, provision runs an ordered set
7
- * of post-install steps: **register** (the admin, via `init-platform.sh`, driven
7
+ * of post-install steps: an optional **build-bootstrap** (`--build-bootstrap`:
8
+ * `build-plugin-images.sh --only pipeline-bootstrap`), **register** (the admin, via `init-platform.sh`, driven
8
9
  * non-interactively by env — which also performs any opt-in plugin/compliance/
9
10
  * sample loads), then an optional **smoke-test**, **events** (AWS), and any
10
11
  * operator **--post-step** commands. Pure, deterministic assembly here — provision
@@ -12,21 +13,32 @@
12
13
  */
13
14
  import { LOAD_STEPS } from './targets.js';
14
15
  /** Compute the non-interactive env that drives init-platform's prompts. */
15
- function registerEnv(enabledLoadIds, buildBootstrap) {
16
- const env = { BUILD_BOOTSTRAP: buildBootstrap ? 'y' : 'n' };
16
+ function registerEnv(enabledLoadIds) {
17
+ const env = {};
17
18
  for (const step of LOAD_STEPS)
18
19
  env[step.env] = enabledLoadIds.includes(step.id) ? 'y' : 'n';
19
20
  return env;
20
21
  }
21
22
  /**
22
- * Resolve the ordered post-install step list: register → smoke-test → events →
23
- * custom. `register` carries the load + BUILD_BOOTSTRAP env so init-platform runs
23
+ * Resolve the ordered post-install step list: build-bootstrap → register →
24
+ * smoke-test → events → custom. `register` carries the LOAD_* env so init-platform runs
24
25
  * the enabled loads non-interactively. Requested-but-inapplicable steps land in
25
26
  * `skipped` so the caller can warn rather than silently drop them.
26
27
  */
27
28
  export function resolvePostSteps(opts) {
28
29
  const steps = [];
29
30
  const skipped = [];
31
+ // Runs from the clone (TOOLCHAIN_SPARSE_PATHS), with the target's push transport.
32
+ // init-platform.sh builds the whole release (both halves) itself; this is the
33
+ // explicit bootstrap-only build, e.g. with `--init skip`.
34
+ if (opts.buildBootstrap) {
35
+ steps.push({
36
+ id: 'build-bootstrap',
37
+ label: 'Build + publish the pipeline-bootstrap image',
38
+ command: './deploy/bin/build-plugin-images.sh --only pipeline-bootstrap',
39
+ env: { DEPLOY_TARGET: opts.target },
40
+ });
41
+ }
30
42
  // `--init auto` (the default) on the AWS targets: the deploy runs init-platform itself —
31
43
  // ec2 on the instance on first boot, eks in setup.sh's final phase — so DON'T add a register
32
44
  // step here; it would duplicate the deploy-managed run. (minikube/local run init via provision.)
@@ -46,7 +58,7 @@ export function resolvePostSteps(opts) {
46
58
  id: 'register',
47
59
  label: `Register admin${loads}`,
48
60
  command: registerCommand,
49
- env: registerEnv(opts.enabledLoadIds, opts.buildBootstrap),
61
+ env: registerEnv(opts.enabledLoadIds),
50
62
  });
51
63
  }
52
64
  if (opts.smokeTest) {
@@ -148,4 +160,4 @@ export function resolvePostSteps(opts) {
148
160
  });
149
161
  return { steps, skipped };
150
162
  }
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1zdGVwcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L3Bvc3Qtc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFpQixNQUFNLGNBQWMsQ0FBQztBQWdEekQsMkVBQTJFO0FBQzNFLFNBQVMsV0FBVyxDQUFDLGNBQWlDLEVBQUUsY0FBdUI7SUFDN0UsTUFBTSxHQUFHLEdBQTJCLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNwRixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVU7UUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM1RixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFxQjtJQUNwRCxNQUFNLEtBQUssR0FBZSxFQUFFLENBQUM7SUFDN0IsTUFBTSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztJQUVsQyx5RkFBeUY7SUFDekYsNkZBQTZGO0lBQzdGLGlHQUFpRztJQUNqRyxNQUFNLGVBQWUsR0FDbkIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDMUYsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FB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LENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0csQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQb3N0LWluc3RhbGwgc3RlcHMuXG4gKlxuICogQWZ0ZXIgdGhlIHBsYXRmb3JtIGlzIGRlcGxveWVkICsgaGVhbHRoLWNoZWNrZWQsIHByb3Zpc2lvbiBydW5zIGFuIG9yZGVyZWQgc2V0XG4gKiBvZiBwb3N0LWluc3RhbGwgc3RlcHM6ICoqcmVnaXN0ZXIqKiAodGhlIGFkbWluLCB2aWEgYGluaXQtcGxhdGZvcm0uc2hgLCBkcml2ZW5cbiAqIG5vbi1pbnRlcmFjdGl2ZWx5IGJ5IGVudiDigJQgd2hpY2ggYWxzbyBwZXJmb3JtcyBhbnkgb3B0LWluIHBsdWdpbi9jb21wbGlhbmNlL1xuICogc2FtcGxlIGxvYWRzKSwgdGhlbiBhbiBvcHRpb25hbCAqKnNtb2tlLXRlc3QqKiwgKipldmVudHMqKiAoQVdTKSwgYW5kIGFueVxuICogb3BlcmF0b3IgKiotLXBvc3Qtc3RlcCoqIGNvbW1hbmRzLiBQdXJlLCBkZXRlcm1pbmlzdGljIGFzc2VtYmx5IGhlcmUg4oCUIHByb3Zpc2lvblxuICogcnVucyBlYWNoIHZpYSB0aGUgc2FtZSBnYXRlZCBgcnVuU2NyaXB0KClgIGFzIHRoZSBkZXBsb3kuXG4gKi9cblxuaW1wb3J0IHsgTE9BRF9TVEVQUywgdHlwZSBUYXJnZXRJZCB9IGZyb20gJy4vdGFyZ2V0cy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdFN0ZXAge1xuICAvKiogU3RhYmxlIGlkIChgcmVnaXN0ZXJgIC8gYHNtb2tlLXRlc3RgIC8gYGV2ZW50c2ApIG9yIGBjdXN0b20tTmAuICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbiBsYWJlbCBzaG93biBpbiB0aGUgcGxhbi4gKi9cbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSBleGFjdCBjb21tYW5kIHRvIHJ1bi4gKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogTm9uLXNlY3JldCBlbnYgYXBwbGllZCB0byB0aGUgY2hpbGQgZm9yIHRoaXMgc3RlcCAoZS5nLiBMT0FEXyogZm9yIHJlZ2lzdGVyKS4gKi9cbiAgcmVhZG9ubHkgZW52PzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG59XG5cbi8qKiBBIHJlcXVlc3RlZCBzdGVwIHRoYXQgZG9lc24ndCBhcHBseSB0byB0aGUgY2hvc2VuIHRhcmdldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2tpcHBlZFN0ZXAge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSByZWFzb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFBvc3RTdGVwcyB7XG4gIHJlYWRvbmx5IHN0ZXBzOiBQb3N0U3RlcFtdO1xuICByZWFkb25seSBza2lwcGVkOiBTa2lwcGVkU3RlcFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RTdGVwT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhcmdldDogVGFyZ2V0SWQ7XG4gIC8qKiBCYXNlIFVSTCBvZiB0aGUgZGVwbG95ZWQgcGxhdGZvcm0gKGZyb20gZGVyaXZlSGVhbHRoVXJsKSwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmcgfCBudWxsO1xuICAvKiogQVdTIHJlZ2lvbiAoZWMyL2VrcyksIGlmIHByb3ZpZGVkLiAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG4gIC8qKiBMb2FkLXN0ZXAgaWRzIGVuYWJsZWQgdmlhIGAtLXdpdGgtKmAgKGRyaXZlIGluaXQtcGxhdGZvcm0ncyBMT0FEXyogZW52cyArIHNwYXJzZSBwYXRocykuICovXG4gIHJlYWRvbmx5IGVuYWJsZWRMb2FkSWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIGAtLWJ1aWxkLWJvb3RzdHJhcGA6IGJ1aWxkIHRoZSBDb2RlQnVpbGQgYm9vdHN0cmFwIGltYWdlIGR1cmluZyByZWdpc3Rlci4gKi9cbiAgcmVhZG9ubHkgYnVpbGRCb290c3RyYXA6IGJvb2xlYW47XG4gIC8qKiBGYWxzZSB3aGVuIGAtLW5vLWluaXRgIOKAlCBza2lwcyB0aGUgcmVnaXN0ZXIgc3RlcCBlbnRpcmVseS4gKi9cbiAgcmVhZG9ubHkgaW5pdDogYm9vbGVhbjtcbiAgLyoqIFRydWUgZm9yIGAtLWluaXQgYXV0b2AgKHRoZSBkZWZhdWx0IG1vZGUpLiBPbiB0aGUgQVdTIHRhcmdldHMgdGhlIGRlcGxveSBzZWxmLXJ1bnNcbiAgICogIGluaXQtcGxhdGZvcm0gKGVjMiBvbiBmaXJzdCBib290LCBla3MgaW4gc2V0dXAuc2gncyBmaW5hbCBwaGFzZSksIHNvIHRoZSByZWdpc3RlciBzdGVwIGlzXG4gICAqICBOT1Qgc3VyZmFjZWQgaGVyZSDigJQgaXQgd291bGQgZHVwbGljYXRlIHRoYXQgZGVwbG95LW1hbmFnZWQgcnVuLiAobWluaWt1YmUvbG9jYWwgcnVuIGluaXRcbiAgICogIHZpYSBwcm92aXNpb24sIG5vdCBhIGRlcGxveS1tYW5hZ2VkIGluaXQuKSAqL1xuICByZWFkb25seSBhdXRvSW5pdD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNtb2tlVGVzdDogYm9vbGVhbjtcbiAgLyoqIGAtLXdpdGgtZXZlbnRzYDogdGhlIEFXUyBldmVudC1pbmdlc3Rpb24gYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKS4gKi9cbiAgcmVhZG9ubHkgZXZlbnRzOiBib29sZWFuO1xuICAvKiogUmF3IG9wZXJhdG9yIGAtLXBvc3Qtc3RlcGAgY29tbWFuZHMsIGluIG9yZGVyLiAqL1xuICByZWFkb25seSBzdGVwczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKiBDb21wdXRlIHRoZSBub24taW50ZXJhY3RpdmUgZW52IHRoYXQgZHJpdmVzIGluaXQtcGxhdGZvcm0ncyBwcm9tcHRzLiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJFbnYoZW5hYmxlZExvYWRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdLCBidWlsZEJvb3RzdHJhcDogYm9vbGVhbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IEJVSUxEX0JPT1RTVFJBUDogYnVpbGRCb290c3RyYXAgPyAneScgOiAnbicgfTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIExPQURfU1RFUFMpIGVudltzdGVwLmVudl0gPSBlbmFibGVkTG9hZElkcy5pbmNsdWRlcyhzdGVwLmlkKSA/ICd5JyA6ICduJztcbiAgcmV0dXJuIGVudjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBvcmRlcmVkIHBvc3QtaW5zdGFsbCBzdGVwIGxpc3Q6IHJlZ2lzdGVyIOKGkiBzbW9rZS10ZXN0IOKGkiBldmVudHMg4oaSXG4gKiBjdXN0b20uIGByZWdpc3RlcmAgY2FycmllcyB0aGUgbG9hZCArIEJVSUxEX0JPT1RTVFJBUCBlbnYgc28gaW5pdC1wbGF0Zm9ybSBydW5zXG4gKiB0aGUgZW5hYmxlZCBsb2FkcyBub24taW50ZXJhY3RpdmVseS4gUmVxdWVzdGVkLWJ1dC1pbmFwcGxpY2FibGUgc3RlcHMgbGFuZCBpblxuICogYHNraXBwZWRgIHNvIHRoZSBjYWxsZXIgY2FuIHdhcm4gcmF0aGVyIHRoYW4gc2lsZW50bHkgZHJvcCB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBvc3RTdGVwcyhvcHRzOiBQb3N0U3RlcE9wdGlvbnMpOiBSZXNvbHZlZFBvc3RTdGVwcyB7XG4gIGNvbnN0IHN0ZXBzOiBQb3N0U3RlcFtdID0gW107XG4gIGNvbnN0IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gPSBbXTtcblxuICAvLyBgLS1pbml0IGF1dG9gICh0aGUgZGVmYXVsdCkgb24gdGhlIEFXUyB0YXJnZXRzOiB0aGUgZGVwbG95IHJ1bnMgaW5pdC1wbGF0Zm9ybSBpdHNlbGYg4oCUXG4gIC8vIGVjMiBvbiB0aGUgaW5zdGFuY2Ugb24gZmlyc3QgYm9vdCwgZWtzIGluIHNldHVwLnNoJ3MgZmluYWwgcGhhc2Ug4oCUIHNvIERPTidUIGFkZCBhIHJlZ2lzdGVyXG4gIC8vIHN0ZXAgaGVyZTsgaXQgd291bGQgZHVwbGljYXRlIHRoZSBkZXBsb3ktbWFuYWdlZCBydW4uIChtaW5pa3ViZS9sb2NhbCBydW4gaW5pdCB2aWEgcHJvdmlzaW9uLilcbiAgY29uc3QgYXV0b0luaXRNYW5hZ2VkID1cbiAgICBvcHRzLmluaXQgJiYgb3B0cy5hdXRvSW5pdCA9PT0gdHJ1ZSAmJiAob3B0cy50YXJnZXQgPT09ICdlYzInIHx8IG9wdHMudGFyZ2V0ID09PSAnZWtzJyk7XG4gIGlmIChvcHRzLmluaXQgJiYgIWF1dG9Jbml0TWFuYWdlZCkge1xuICAgIGNvbnN0IGVuYWJsZWQgPSBMT0FEX1NURVBTLmZpbHRlcigocykgPT4gb3B0cy5lbmFibGVkTG9hZElkcy5pbmNsdWRlcyhzLmlkKSkubWFwKChzKSA9PiBzLmlkKTtcbiAgICBjb25zdCBsb2FkcyA9IGVuYWJsZWQubGVuZ3RoID4gMCA/IGAgKCsgJHtlbmFibGVkLmpvaW4oJywgJyl9KWAgOiAnJztcbiAgICAvLyBSZWdpc3RlciBpcyBzdXJmYWNlZCBhcyBhIG1hbnVhbCBuZXh0LXN0ZXAgb24gQVdTIChzZWUgcnVuUG9zdFN0ZXBzKS4gVGhlIGNvbW1hbmQgZGlmZmVyczpcbiAgICAvLyAgLSBlYzI6IHJ1bnMgT04gdGhlIGJveCBhcyB0aGUgbWluaWt1YmUgdXNlciwgd2hlcmUgdGhlIGluLVZQQyBVUkwgcmVzb2x2ZXMg4oaSIGJha2UgUExBVEZPUk1fQkFTRV9VUkwuXG4gICAgLy8gIC0gZWtzOiBpbml0LXBsYXRmb3JtIHBvcnQtZm9yd2FyZHMgdG8gc3ZjL25naW54LCBzbyBpdCBydW5zIGZyb20gYW55d2hlcmUgd2l0aCBrdWJlY3RsIGFjY2VzcyDigJRcbiAgICAvLyAgICBkbyBOT1QgYmFrZSBQTEFURk9STV9CQVNFX1VSTCAodGhhdCB3b3VsZCBmb3JjZSB0aGUgcHVibGljIFVSTCBhbmQgd2FpdCBvbiB0aGUgQUxCL0ROUykuXG4gICAgLy8gIC0gbG9jYWwvbWluaWt1YmU6IHBsYWluIGNvbW1hbmQgKHRoZSBVUkwgaXMgbG9jYWxob3N0KS5cbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmQgPSBvcHRzLnRhcmdldCA9PT0gJ2VjMicgJiYgb3B0cy51cmxcbiAgICAgID8gYFBMQVRGT1JNX0JBU0VfVVJMPSR7b3B0cy51cmx9IC4vZGVwbG95L2Jpbi9pbml0LXBsYXRmb3JtLnNoIGVjMmBcbiAgICAgIDogYC4vZGVwbG95L2Jpbi9pbml0LXBsYXRmb3JtLnNoICR7b3B0cy50YXJnZXR9YDtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIGlkOiAncmVnaXN0ZXInLFxuICAgICAgbGFiZWw6IGBSZWdpc3RlciBhZG1pbiR7bG9hZHN9YCxcbiAgICAgIGNvbW1hbmQ6IHJlZ2lzdGVyQ29tbWFuZCxcbiAgICAgIGVudjogcmVnaXN0ZXJFbnYob3B0cy5lbmFibGVkTG9hZElkcywgb3B0cy5idWlsZEJvb3RzdHJhcCksXG4gICAgfSk7XG4gIH1cblxuICBpZiAob3B0cy5zbW9rZVRlc3QpIHtcbiAgICBpZiAob3B0cy51cmwpIHtcbiAgICAgIC8vIC1rOiBsb2NhbC9taW5pa3ViZSBmcm9udCBhIHNlbGYtc2lnbmVkIGNlcnQ7IGhhcm1sZXNzIGFnYWluc3QgcmVhbC1jZXJ0IEFXUyBVUkxzLlxuICAgICAgLy8gUHJvYmUgL2hlYWx0aCDigJQgdGhlIG9uZSByb3V0ZSBndWFyYW50ZWVkIHRvIGV4aXN0IGFuZCBzZXJ2ZSB1bmF1dGhlbnRpY2F0ZWRcbiAgICAgIC8vIHRocm91Z2ggbmdpbnggKGV2ZXJ5IC9hcGkvKiByb3V0ZSByZXF1aXJlcyBhdXRoIOKGkiA0MDE7IC9hcGkvdmVyc2lvbiBkb2Vzbid0XG4gICAgICAvLyBleGlzdCBhbmQgd291bGQgZmFsbCB0aHJvdWdoIHRvIHRoZSBTUEEsIG1ha2luZyBgY3VybCAtZmAgbWVhbmluZ2xlc3MpLlxuICAgICAgc3RlcHMucHVzaCh7XG4gICAgICAgIGlkOiAnc21va2UtdGVzdCcsXG4gICAgICAgIGxhYmVsOiAnU21va2UgdGVzdCDigJQgZ2F0ZXdheS9BUEkgcmVhY2hhYmlsaXR5JyxcbiAgICAgICAgY29tbWFuZDogYGN1cmwgLWZzU2sgJHtvcHRzLnVybH0vaGVhbHRoICYmIGVjaG8gJ3Ntb2tlLXRlc3Q6IEFQSSByZWFjaGFibGUnYCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBza2lwcGVkLnB1c2goeyBpZDogJ3Ntb2tlLXRlc3QnLCByZWFzb246ICdubyBwbGF0Zm9ybSBVUkwgdG8gcHJvYmUgZm9yIHRoaXMgdGFyZ2V0JyB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5ldmVudHMpIHtcbiAgICBpZiAob3B0cy50YXJnZXQgPT09ICdlYzInIHx8IG9wdHMudGFyZ2V0ID09PSAnZWtzJykge1xuICAgICAgLy8gRXZlbnQgaW5nZXN0aW9uIGlzIGEgVEhSRUUtc3RlcCBidW5kbGUsIGluIHRoaXMgb3JkZXI6XG4gICAgICAvLyAgIDEuIHN0b3JlLXRva2VuICAgICAgICAgIOKAlCB0aGUgb3JnJ3MgZnVsbC1wcml2aWxlZ2UgU0VSVklDRS1BQ0NPVU5UIGtleVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeW50aC9kZXBsb3kgY2FsbGJhY2tzIGFuZCBDb2RlQnVpbGQncyByZWdpc3RyeVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzIHJlYWQgaXQ7IC0tc2NoZWR1bGUgYXV0by1yb3RhdGVzIGl0KS5cbiAgICAgIC8vICAgMi4gc3RvcmUtdG9rZW4gLS1zY29wZSByZXBvcnRpbmc6aW5nZXN0IC0tc2NoZWR1bGVcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAg4oCUIGEgRElTVElOQ1QgbGVhc3QtcHJpdmlsZWdlIEtFWSB3aG9zZSBleGNoYW5nZWRcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiBjYXJyaWVzIGV4YWN0bHkgYHJlcG9ydGluZzppbmdlc3RgIGFuZCBub1xuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIGF0IGFsbC4gVGhlIGluZ2VzdCBlbmRwb2ludCByZXF1aXJlc1xuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2NvcGUgYW5kIGBoYXNTY29wZWAgaXMgYSBzaW5nbGUtdmFsdWVcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbGl0eSBjaGVjaywgc28gdGhlIHBsYXRmb3JtIGtleSAobm8gc2NvcGUpXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIE5FVkVSIGluZ2VzdCDigJQgdGhlIExhbWJkYSBtdXN0IHJlYWQgdGhpc1xuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZGljYXRlZCBzZWNyZXQuIFN0b3JlZCBhdCBgLi4uL3JlcG9ydGluZy1pbmdlc3RgLlxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tc2NoZWR1bGUgZGVwbG95cyBpdHMgT1dOIHJvdGF0aW9uIHN0YWNrIChuYW1lZFxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtcmVwb3J0aW5nLWluZ2VzdGAsIGRpc3RpbmN0IGZyb20gdGhlIHBsYXRmb3JtXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lKSwgd2hpY2ggcm90YXRlcyB0aGUga2V5IGluIHBsYWNlIHNvIGl0IG5ldmVyXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFwc2VzLiBTZWUgc2V0dXAtZXZlbnRzIC0tc2NvcGVkLWluZ2VzdC5cbiAgICAgIC8vICAgMmIuIHN0b3JlLXRva2VuIC0tc2NvcGUgcmVnaXN0cnk6cHVzaCAtLXNjaGVkdWxlXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIOKAlCB0aGUgQ0kgcmVnaXN0cnkgY3JlZGVudGlhbCBDb2RlQnVpbGQgcHJlc2VudHNcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBCYXNpYyBhdXRoLiBTeW50aCB3aXJlc1xuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAuLi4vcmVnaXN0cnktcHVzaGAgaW50byBldmVyeSBidWlsZCBpbWFnZSdzXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHNgLCBzbyBhIGRlcGxveW1lbnRcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGl0IGNhbm5vdCBwdWxsIGl0cyBidWlsZCBpbWFnZXMuXG4gICAgICAvLyAgIDMuIHNldHVwLWV2ZW50cyAtLXNjb3BlZC1pbmdlc3RcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAg4oCUIGRlcGxveXMgdGhlIEV2ZW50QnJpZGdlIOKGkiBTUVMg4oaSIExhbWJkYSBhbmQgcG9pbnRzXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIExhbWJkYSBhdCB0aGUgcmVwb3J0aW5nLWluZ2VzdCBzZWNyZXQgZnJvbSAjMi5cbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSVRIT1VUIC0tc2NvcGVkLWluZ2VzdCB0aGUgTGFtYmRhIHJlYWRzIHRoZVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtIHNlY3JldCBhbmQgZXZlcnkgaW5nZXN0IDQwM3NcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJUb2tlbiBtdXN0IGNhcnJ5IHRoZSAncmVwb3J0aW5nOmluZ2VzdCcgc2NvcGVcIikuXG4gICAgICAvLyBCb3RoIHN0b3JlLXRva2VuIHN0ZXBzIGFyZSBzdGVwLXVwIGdhdGVkIG9uIHRoZSBwbGF0Zm9ybSwgc28gdGhleSBuZWVkXG4gICAgICAvLyBQTEFURk9STV9QQVNTV09SRCBpbiB0aGUgZW52aXJvbm1lbnQgKHByb3Zpc2lvbiBhbHJlYWR5IHBhc3NlcyBpdCkuXG4gICAgICAvLyBwcm92aXNpb24gc3VyZmFjZXMgKGRvZXMgbm90IGF1dG8tcnVuKSB0aGUgYnVuZGxlIG9uIEFXUyDigJQgaXQgbmVlZHMgYVxuICAgICAgLy8gcmVnaXN0ZXJlZCwgaW4tVlBDIHBsYXRmb3JtLlxuICAgICAgY29uc3QgcmVnaW9uID0gb3B0cy5yZWdpb24gPyBgIC0tcmVnaW9uICR7b3B0cy5yZWdpb259YCA6ICcnO1xuICAgICAgLy8gTWlycm9yIHRoZSByZWdpc3RlciBicmFuY2gncyB0YXJnZXQgcnVsZTogYmFrZSBQTEFURk9STV9CQVNFX1VSTCBvbmx5IG9uXG4gICAgICAvLyBlYzIgKHRoZSBpbi1WUEMgVVJMIHJlc29sdmVzIG9uIHRoZSBib3gpLiBPbiBla3MgdGhlIHB1YmxpYyBBTEIvRE5TIGlzbid0XG4gICAgICAvLyB1cCB5ZXQsIHNvIGJha2luZyBpdCB3b3VsZCBwb2ludCBzdG9yZS10b2tlbi9zZXR1cC1ldmVudHMgYXQgYW5cbiAgICAgIC8vIHVucmVzb2x2YWJsZSBob3N0IOKAlCB0aGUgb3BlcmF0b3Igc2V0cyBQTEFURk9STV9CQVNFX1VSTCB3aGVuIHJ1bm5pbmcgdGhlXG4gICAgICAvLyBzdXJmYWNlZCBidW5kbGUsIG9uY2UgdGhlIEFMQiBpcyByZWFkeS5cbiAgICAgIGNvbnN0IGVudiA9IG9wdHMudGFyZ2V0ID09PSAnZWMyJyAmJiBvcHRzLnVybCA/IHsgUExBVEZPUk1fQkFTRV9VUkw6IG9wdHMudXJsIH0gOiB1bmRlZmluZWQ7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6ICdzdG9yZS10b2tlbicsXG4gICAgICAgIGxhYmVsOiAnU3RvcmUgdGhlIHBsYXRmb3JtIHNlcnZpY2UtYWNjb3VudCBrZXkgaW4gQVdTIFNlY3JldHMgTWFuYWdlciAoKyBkYWlseSBhdXRvLXJvdGF0aW9uKScsXG4gICAgICAgIC8vIC0tc2NoZWR1bGU6IHN5bnRoL2RlcGxveSBjYWxsYmFja3MgcmVhZCB0aGlzIGtleSwgc28gaW5zdGFsbCB0aGVcbiAgICAgICAgLy8gcm90YXRpb24gc3RhY2sgc28gaXQgbmV2ZXIgbGFwc2VzIChzdG9yZS10b2tlbiBkb2VzIG5vdCBkZXBsb3kgaXQgYnkgZGVmYXVsdCkuXG4gICAgICAgIGNvbW1hbmQ6IGBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tc2NoZWR1bGUke3JlZ2lvbn1gLFxuICAgICAgICBlbnYsXG4gICAgICB9KTtcbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBpZDogJ3N0b3JlLXRva2VuLXJlZ2lzdHJ5JyxcbiAgICAgICAgbGFiZWw6ICdTdG9yZSB0aGUgcmVnaXN0cnktcHVzaCAoc2NvcGVkKSBzZXJ2aWNlLWFjY291bnQga2V5IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgKCsgYXV0by1yb3RhdGlvbiknLFxuICAgICAgICAvLyBDb2RlQnVpbGQncyBgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsc2AgcmVhZHMgVEhJUyBzZWNyZXQsIG5vdCB0aGVcbiAgICAgICAgLy8gcGxhdGZvcm0gb25lOiBpdHMgZXhjaGFuZ2VkIHRva2VuIGNhcnJpZXMgb25seSBgcmVnaXN0cnk6cHVzaGAsIHNvIGFcbiAgICAgICAgLy8gbGVha2VkIGJ1aWxkIGNyZWRlbnRpYWwgY2FuIG1vdmUgaW1hZ2VzIGluc2lkZSB0aGUgb3JnJ3MgbmFtZXNwYWNlIGFuZFxuICAgICAgICAvLyBub3RoaW5nIGVsc2UuIFN5bnRoIHBvaW50cyBhdCBgLi4uL3JlZ2lzdHJ5LXB1c2hgIHVuY29uZGl0aW9uYWxseSwgc29cbiAgICAgICAgLy8gdGhpcyBzdGVwIGlzIG5vdCBvcHRpb25hbCBvbiBBV1MuXG4gICAgICAgIGNvbW1hbmQ6IGBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tc2NvcGUgcmVnaXN0cnk6cHVzaCAtLXNjaGVkdWxlJHtyZWdpb259YCxcbiAgICAgICAgZW52LFxuICAgICAgfSk7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6ICdzdG9yZS10b2tlbi1pbmdlc3QnLFxuICAgICAgICBsYWJlbDogJ1N0b3JlIHRoZSByZXBvcnRpbmctaW5nZXN0IChzY29wZWQpIHNlcnZpY2UtYWNjb3VudCBrZXkgaW4gQVdTIFNlY3JldHMgTWFuYWdlciAoKyBhdXRvLXJvdGF0aW9uKScsXG4gICAgICAgIGNvbW1hbmQ6IGBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tc2NvcGUgcmVwb3J0aW5nOmluZ2VzdCAtLXNjaGVkdWxlJHtyZWdpb259YCxcbiAgICAgICAgZW52LFxuICAgICAgfSk7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6ICdldmVudHMnLFxuICAgICAgICBsYWJlbDogJ0V2ZW50QnJpZGdlIGluZ2VzdGlvbiAoc2V0dXAtZXZlbnRzLCBzY29wZWQtaW5nZXN0KScsXG4gICAgICAgIGNvbW1hbmQ6IGBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHNldHVwLWV2ZW50cyAtLXNjb3BlZC1pbmdlc3Qke3JlZ2lvbn1gLFxuICAgICAgICBlbnYsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2tpcHBlZC5wdXNoKHsgaWQ6ICdldmVudHMnLCByZWFzb246IGBub3QgYXBwbGljYWJsZSB0byB0YXJnZXQgJyR7b3B0cy50YXJnZXR9JyAoZWMyL2VrcyBvbmx5KWAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3B0cy5zdGVwcy5mb3JFYWNoKChjb21tYW5kLCBpKSA9PiB7XG4gICAgaWYgKGNvbW1hbmQudHJpbSgpICE9PSAnJykgc3RlcHMucHVzaCh7IGlkOiBgY3VzdG9tLSR7aSArIDF9YCwgbGFiZWw6IGBDdXN0b20gc3RlcCAke2kgKyAxfWAsIGNvbW1hbmQgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7IHN0ZXBzLCBza2lwcGVkIH07XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1zdGVwcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L3Bvc3Qtc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxjQUFjLENBQUM7QUFnRHpELDJFQUEyRTtBQUMzRSxTQUFTLFdBQVcsQ0FBQyxjQUFpQztJQUNwRCxNQUFNLEdBQUcsR0FBMkIsRUFBRSxDQUFDO0lBQ3ZDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVTtRQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzVGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQXFCO0lBQ3BELE1BQU0sS0FBSyxHQUFlLEVBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBRWxDLGtGQUFrRjtJQUNsRiw4RUFBOEU7SUFDOUUsMERBQTBEO0lBQzFELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDVCxFQUFFLEVBQUUsaUJBQWlCO1lBQ3JCLEtBQUssRUFBRSw4Q0FBOEM7WUFDckQsT0FBTyxFQUFFLCtEQUErRDtZQUN4RSxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUZBQXlGO0lBQ3pGLDZGQUE2RjtJQUM3RixpR0FBaUc7SUFDakcsTUFBTSxlQUFlLEdBQ25CLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQzFGLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLDZGQUE2RjtRQUM3Rix3R0FBd0c7UUFDeEcsbUdBQW1HO1FBQ25HLDhGQUE4RjtRQUM5RiwyREFBMkQ7UUFDM0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUc7WUFDdkQsQ0FBQyxDQUFDLHFCQUFxQixJQUFJLENBQUMsR0FBRyxvQ0FBb0M7WUFDbkUsQ0FBQyxDQUFDLGlDQUFpQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkQsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNULEVBQUUsRUFBRSxVQUFVO1lBQ2QsS0FBSyxFQUFFLGlCQUFpQixLQUFLLEVBQUU7WUFDL0IsT0FBTyxFQUFFLGVBQWU7WUFDeEIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLG9GQUFvRjtZQUNwRiw4RUFBOEU7WUFDOUUsOEVBQThFO1lBQzlFLDBFQUEwRTtZQUMxRSxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULEVBQUUsRUFBRSxZQUFZO2dCQUNoQixLQUFLLEVBQUUsdUNBQXVDO2dCQUM5QyxPQUFPLEVBQUUsY0FBYyxJQUFJLENBQUMsR0FBRyw2Q0FBNkM7YUFDN0UsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsMENBQTBDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25ELHlEQUF5RDtZQUN6RCwyRUFBMkU7WUFDM0UsK0VBQStFO1lBQy9FLGdGQUFnRjtZQUNoRix1REFBdUQ7WUFDdkQsNkVBQTZFO1lBQzdFLDhFQUE4RTtZQUM5RSwrRUFBK0U7WUFDL0UsMEVBQTBFO1lBQzFFLDZFQUE2RTtZQUM3RSwyRUFBMkU7WUFDM0Usa0ZBQWtGO1lBQ2xGLCtFQUErRTtZQUMvRSw4RUFBOEU7WUFDOUUsK0VBQStFO1lBQy9FLHdFQUF3RTtZQUN4RSxxREFBcUQ7WUFDckQsNEVBQTRFO1lBQzVFLHlEQUF5RDtZQUN6RCwyRUFBMkU7WUFDM0UsMkVBQTJFO1lBQzNFLHVFQUF1RTtZQUN2RSxvQ0FBb0M7WUFDcEMsZ0ZBQWdGO1lBQ2hGLGlGQUFpRjtZQUNqRiwyRUFBMkU7WUFDM0Usb0VBQW9FO1lBQ3BFLGlGQUFpRjtZQUNqRix5RUFBeUU7WUFDekUsc0VBQXNFO1lBQ3RFLHdFQUF3RTtZQUN4RSwrQkFBK0I7WUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM3RCwyRUFBMkU7WUFDM0UsNEVBQTRFO1lBQzVFLGtFQUFrRTtZQUNsRSwyRUFBMkU7WUFDM0UsMENBQTBDO1lBQzFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUYsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxFQUFFLEVBQUUsYUFBYTtnQkFDakIsS0FBSyxFQUFFLHVGQUF1RjtnQkFDOUYsbUVBQW1FO2dCQUNuRSxpRkFBaUY7Z0JBQ2pGLE9BQU8sRUFBRSxnREFBZ0QsTUFBTSxFQUFFO2dCQUNqRSxHQUFHO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxFQUFFLEVBQUUsc0JBQXNCO2dCQUMxQixLQUFLLEVBQUUsK0ZBQStGO2dCQUN0RyxxRUFBcUU7Z0JBQ3JFLHVFQUF1RTtnQkFDdkUseUVBQXlFO2dCQUN6RSx3RUFBd0U7Z0JBQ3hFLG9DQUFvQztnQkFDcEMsT0FBTyxFQUFFLHNFQUFzRSxNQUFNLEVBQUU7Z0JBQ3ZGLEdBQUc7YUFDSixDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULEVBQUUsRUFBRSxvQkFBb0I7Z0JBQ3hCLEtBQUssRUFBRSxrR0FBa0c7Z0JBQ3pHLE9BQU8sRUFBRSx5RUFBeUUsTUFBTSxFQUFFO2dCQUMxRixHQUFHO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxFQUFFLEVBQUUsUUFBUTtnQkFDWixLQUFLLEVBQUUscURBQXFEO2dCQUM1RCxPQUFPLEVBQUUsc0RBQXNELE1BQU0sRUFBRTtnQkFDdkUsR0FBRzthQUNKLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLDZCQUE2QixJQUFJLENBQUMsTUFBTSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDckcsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzRyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBvc3QtaW5zdGFsbCBzdGVwcy5cbiAqXG4gKiBBZnRlciB0aGUgcGxhdGZvcm0gaXMgZGVwbG95ZWQgKyBoZWFsdGgtY2hlY2tlZCwgcHJvdmlzaW9uIHJ1bnMgYW4gb3JkZXJlZCBzZXRcbiAqIG9mIHBvc3QtaW5zdGFsbCBzdGVwczogYW4gb3B0aW9uYWwgKipidWlsZC1ib290c3RyYXAqKiAoYC0tYnVpbGQtYm9vdHN0cmFwYDpcbiAqIGBidWlsZC1wbHVnaW4taW1hZ2VzLnNoIC0tb25seSBwaXBlbGluZS1ib290c3RyYXBgKSwgKipyZWdpc3RlcioqICh0aGUgYWRtaW4sIHZpYSBgaW5pdC1wbGF0Zm9ybS5zaGAsIGRyaXZlblxuICogbm9uLWludGVyYWN0aXZlbHkgYnkgZW52IOKAlCB3aGljaCBhbHNvIHBlcmZvcm1zIGFueSBvcHQtaW4gcGx1Z2luL2NvbXBsaWFuY2UvXG4gKiBzYW1wbGUgbG9hZHMpLCB0aGVuIGFuIG9wdGlvbmFsICoqc21va2UtdGVzdCoqLCAqKmV2ZW50cyoqIChBV1MpLCBhbmQgYW55XG4gKiBvcGVyYXRvciAqKi0tcG9zdC1zdGVwKiogY29tbWFuZHMuIFB1cmUsIGRldGVybWluaXN0aWMgYXNzZW1ibHkgaGVyZSDigJQgcHJvdmlzaW9uXG4gKiBydW5zIGVhY2ggdmlhIHRoZSBzYW1lIGdhdGVkIGBydW5TY3JpcHQoKWAgYXMgdGhlIGRlcGxveS5cbiAqL1xuXG5pbXBvcnQgeyBMT0FEX1NURVBTLCB0eXBlIFRhcmdldElkIH0gZnJvbSAnLi90YXJnZXRzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBQb3N0U3RlcCB7XG4gIC8qKiBTdGFibGUgaWQgKGByZWdpc3RlcmAgLyBgc21va2UtdGVzdGAgLyBgZXZlbnRzYCkgb3IgYGN1c3RvbS1OYC4gKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuIGxhYmVsIHNob3duIGluIHRoZSBwbGFuLiAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAvKiogVGhlIGV4YWN0IGNvbW1hbmQgdG8gcnVuLiAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIC8qKiBOb24tc2VjcmV0IGVudiBhcHBsaWVkIHRvIHRoZSBjaGlsZCBmb3IgdGhpcyBzdGVwIChlLmcuIExPQURfKiBmb3IgcmVnaXN0ZXIpLiAqL1xuICByZWFkb25seSBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pjtcbn1cblxuLyoqIEEgcmVxdWVzdGVkIHN0ZXAgdGhhdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBjaG9zZW4gdGFyZ2V0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTa2lwcGVkU3RlcCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlYXNvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkUG9zdFN0ZXBzIHtcbiAgcmVhZG9ubHkgc3RlcHM6IFBvc3RTdGVwW107XG4gIHJlYWRvbmx5IHNraXBwZWQ6IFNraXBwZWRTdGVwW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdFN0ZXBPcHRpb25zIHtcbiAgcmVhZG9ubHkgdGFyZ2V0OiBUYXJnZXRJZDtcbiAgLyoqIEJhc2UgVVJMIG9mIHRoZSBkZXBsb3llZCBwbGF0Zm9ybSAoZnJvbSBkZXJpdmVIZWFsdGhVcmwpLCBvciBudWxsLiAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBBV1MgcmVnaW9uIChlYzIvZWtzKSwgaWYgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgLyoqIExvYWQtc3RlcCBpZHMgZW5hYmxlZCB2aWEgYC0td2l0aC0qYCAoZHJpdmUgaW5pdC1wbGF0Zm9ybSdzIExPQURfKiBlbnZzICsgc3BhcnNlIHBhdGhzKS4gKi9cbiAgcmVhZG9ubHkgZW5hYmxlZExvYWRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogYC0tYnVpbGQtYm9vdHN0cmFwYDogYnVpbGQgKyBwdWJsaXNoIHBpcGVsaW5lLWJvb3RzdHJhcCBiZWZvcmUgcmVnaXN0ZXIuICovXG4gIHJlYWRvbmx5IGJ1aWxkQm9vdHN0cmFwOiBib29sZWFuO1xuICAvKiogRmFsc2Ugd2hlbiBgLS1uby1pbml0YCDigJQgc2tpcHMgdGhlIHJlZ2lzdGVyIHN0ZXAgZW50aXJlbHkuICovXG4gIHJlYWRvbmx5IGluaXQ6IGJvb2xlYW47XG4gIC8qKiBUcnVlIGZvciBgLS1pbml0IGF1dG9gICh0aGUgZGVmYXVsdCBtb2RlKS4gT24gdGhlIEFXUyB0YXJnZXRzIHRoZSBkZXBsb3kgc2VsZi1ydW5zXG4gICAqICBpbml0LXBsYXRmb3JtIChlYzIgb24gZmlyc3QgYm9vdCwgZWtzIGluIHNldHVwLnNoJ3MgZmluYWwgcGhhc2UpLCBzbyB0aGUgcmVnaXN0ZXIgc3RlcCBpc1xuICAgKiAgTk9UIHN1cmZhY2VkIGhlcmUg4oCUIGl0IHdvdWxkIGR1cGxpY2F0ZSB0aGF0IGRlcGxveS1tYW5hZ2VkIHJ1bi4gKG1pbmlrdWJlL2xvY2FsIHJ1biBpbml0XG4gICAqICB2aWEgcHJvdmlzaW9uLCBub3QgYSBkZXBsb3ktbWFuYWdlZCBpbml0LikgKi9cbiAgcmVhZG9ubHkgYXV0b0luaXQ/OiBib29sZWFuO1xuICByZWFkb25seSBzbW9rZVRlc3Q6IGJvb2xlYW47XG4gIC8qKiBgLS13aXRoLWV2ZW50c2A6IHRoZSBBV1MgZXZlbnQtaW5nZXN0aW9uIGJ1bmRsZSAoc3RvcmUtdG9rZW4g4oaSIHNldHVwLWV2ZW50cykuICovXG4gIHJlYWRvbmx5IGV2ZW50czogYm9vbGVhbjtcbiAgLyoqIFJhdyBvcGVyYXRvciBgLS1wb3N0LXN0ZXBgIGNvbW1hbmRzLCBpbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgc3RlcHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKiogQ29tcHV0ZSB0aGUgbm9uLWludGVyYWN0aXZlIGVudiB0aGF0IGRyaXZlcyBpbml0LXBsYXRmb3JtJ3MgcHJvbXB0cy4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyRW52KGVuYWJsZWRMb2FkSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIExPQURfU1RFUFMpIGVudltzdGVwLmVudl0gPSBlbmFibGVkTG9hZElkcy5pbmNsdWRlcyhzdGVwLmlkKSA/ICd5JyA6ICduJztcbiAgcmV0dXJuIGVudjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBvcmRlcmVkIHBvc3QtaW5zdGFsbCBzdGVwIGxpc3Q6IGJ1aWxkLWJvb3RzdHJhcCDihpIgcmVnaXN0ZXIg4oaSXG4gKiBzbW9rZS10ZXN0IOKGkiBldmVudHMg4oaSIGN1c3RvbS4gYHJlZ2lzdGVyYCBjYXJyaWVzIHRoZSBMT0FEXyogZW52IHNvIGluaXQtcGxhdGZvcm0gcnVuc1xuICogdGhlIGVuYWJsZWQgbG9hZHMgbm9uLWludGVyYWN0aXZlbHkuIFJlcXVlc3RlZC1idXQtaW5hcHBsaWNhYmxlIHN0ZXBzIGxhbmQgaW5cbiAqIGBza2lwcGVkYCBzbyB0aGUgY2FsbGVyIGNhbiB3YXJuIHJhdGhlciB0aGFuIHNpbGVudGx5IGRyb3AgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQb3N0U3RlcHMob3B0czogUG9zdFN0ZXBPcHRpb25zKTogUmVzb2x2ZWRQb3N0U3RlcHMge1xuICBjb25zdCBzdGVwczogUG9zdFN0ZXBbXSA9IFtdO1xuICBjb25zdCBza2lwcGVkOiBTa2lwcGVkU3RlcFtdID0gW107XG5cbiAgLy8gUnVucyBmcm9tIHRoZSBjbG9uZSAoVE9PTENIQUlOX1NQQVJTRV9QQVRIUyksIHdpdGggdGhlIHRhcmdldCdzIHB1c2ggdHJhbnNwb3J0LlxuICAvLyBpbml0LXBsYXRmb3JtLnNoIGJ1aWxkcyB0aGUgd2hvbGUgcmVsZWFzZSAoYm90aCBoYWx2ZXMpIGl0c2VsZjsgdGhpcyBpcyB0aGVcbiAgLy8gZXhwbGljaXQgYm9vdHN0cmFwLW9ubHkgYnVpbGQsIGUuZy4gd2l0aCBgLS1pbml0IHNraXBgLlxuICBpZiAob3B0cy5idWlsZEJvb3RzdHJhcCkge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgaWQ6ICdidWlsZC1ib290c3RyYXAnLFxuICAgICAgbGFiZWw6ICdCdWlsZCArIHB1Ymxpc2ggdGhlIHBpcGVsaW5lLWJvb3RzdHJhcCBpbWFnZScsXG4gICAgICBjb21tYW5kOiAnLi9kZXBsb3kvYmluL2J1aWxkLXBsdWdpbi1pbWFnZXMuc2ggLS1vbmx5IHBpcGVsaW5lLWJvb3RzdHJhcCcsXG4gICAgICBlbnY6IHsgREVQTE9ZX1RBUkdFVDogb3B0cy50YXJnZXQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGAtLWluaXQgYXV0b2AgKHRoZSBkZWZhdWx0KSBvbiB0aGUgQVdTIHRhcmdldHM6IHRoZSBkZXBsb3kgcnVucyBpbml0LXBsYXRmb3JtIGl0c2VsZiDigJRcbiAgLy8gZWMyIG9uIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290LCBla3MgaW4gc2V0dXAuc2gncyBmaW5hbCBwaGFzZSDigJQgc28gRE9OJ1QgYWRkIGEgcmVnaXN0ZXJcbiAgLy8gc3RlcCBoZXJlOyBpdCB3b3VsZCBkdXBsaWNhdGUgdGhlIGRlcGxveS1tYW5hZ2VkIHJ1bi4gKG1pbmlrdWJlL2xvY2FsIHJ1biBpbml0IHZpYSBwcm92aXNpb24uKVxuICBjb25zdCBhdXRvSW5pdE1hbmFnZWQgPVxuICAgIG9wdHMuaW5pdCAmJiBvcHRzLmF1dG9Jbml0ID09PSB0cnVlICYmIChvcHRzLnRhcmdldCA9PT0gJ2VjMicgfHwgb3B0cy50YXJnZXQgPT09ICdla3MnKTtcbiAgaWYgKG9wdHMuaW5pdCAmJiAhYXV0b0luaXRNYW5hZ2VkKSB7XG4gICAgY29uc3QgZW5hYmxlZCA9IExPQURfU1RFUFMuZmlsdGVyKChzKSA9PiBvcHRzLmVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKHMuaWQpKS5tYXAoKHMpID0+IHMuaWQpO1xuICAgIGNvbnN0IGxvYWRzID0gZW5hYmxlZC5sZW5ndGggPiAwID8gYCAoKyAke2VuYWJsZWQuam9pbignLCAnKX0pYCA6ICcnO1xuICAgIC8vIFJlZ2lzdGVyIGlzIHN1cmZhY2VkIGFzIGEgbWFudWFsIG5leHQtc3RlcCBvbiBBV1MgKHNlZSBydW5Qb3N0U3RlcHMpLiBUaGUgY29tbWFuZCBkaWZmZXJzOlxuICAgIC8vICAtIGVjMjogcnVucyBPTiB0aGUgYm94IGFzIHRoZSBtaW5pa3ViZSB1c2VyLCB3aGVyZSB0aGUgaW4tVlBDIFVSTCByZXNvbHZlcyDihpIgYmFrZSBQTEFURk9STV9CQVNFX1VSTC5cbiAgICAvLyAgLSBla3M6IGluaXQtcGxhdGZvcm0gcG9ydC1mb3J3YXJkcyB0byBzdmMvbmdpbngsIHNvIGl0IHJ1bnMgZnJvbSBhbnl3aGVyZSB3aXRoIGt1YmVjdGwgYWNjZXNzIOKAlFxuICAgIC8vICAgIGRvIE5PVCBiYWtlIFBMQVRGT1JNX0JBU0VfVVJMICh0aGF0IHdvdWxkIGZvcmNlIHRoZSBwdWJsaWMgVVJMIGFuZCB3YWl0IG9uIHRoZSBBTEIvRE5TKS5cbiAgICAvLyAgLSBsb2NhbC9taW5pa3ViZTogcGxhaW4gY29tbWFuZCAodGhlIFVSTCBpcyBsb2NhbGhvc3QpLlxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZCA9IG9wdHMudGFyZ2V0ID09PSAnZWMyJyAmJiBvcHRzLnVybFxuICAgICAgPyBgUExBVEZPUk1fQkFTRV9VUkw9JHtvcHRzLnVybH0gLi9kZXBsb3kvYmluL2luaXQtcGxhdGZvcm0uc2ggZWMyYFxuICAgICAgOiBgLi9kZXBsb3kvYmluL2luaXQtcGxhdGZvcm0uc2ggJHtvcHRzLnRhcmdldH1gO1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgaWQ6ICdyZWdpc3RlcicsXG4gICAgICBsYWJlbDogYFJlZ2lzdGVyIGFkbWluJHtsb2Fkc31gLFxuICAgICAgY29tbWFuZDogcmVnaXN0ZXJDb21tYW5kLFxuICAgICAgZW52OiByZWdpc3RlckVudihvcHRzLmVuYWJsZWRMb2FkSWRzKSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvcHRzLnNtb2tlVGVzdCkge1xuICAgIGlmIChvcHRzLnVybCkge1xuICAgICAgLy8gLWs6IGxvY2FsL21pbmlrdWJlIGZyb250IGEgc2VsZi1zaWduZWQgY2VydDsgaGFybWxlc3MgYWdhaW5zdCByZWFsLWNlcnQgQVdTIFVSTHMuXG4gICAgICAvLyBQcm9iZSAvaGVhbHRoIOKAlCB0aGUgb25lIHJvdXRlIGd1YXJhbnRlZWQgdG8gZXhpc3QgYW5kIHNlcnZlIHVuYXV0aGVudGljYXRlZFxuICAgICAgLy8gdGhyb3VnaCBuZ2lueCAoZXZlcnkgL2FwaS8qIHJvdXRlIHJlcXVpcmVzIGF1dGgg4oaSIDQwMTsgL2FwaS92ZXJzaW9uIGRvZXNuJ3RcbiAgICAgIC8vIGV4aXN0IGFuZCB3b3VsZCBmYWxsIHRocm91Z2ggdG8gdGhlIFNQQSwgbWFraW5nIGBjdXJsIC1mYCBtZWFuaW5nbGVzcykuXG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6ICdzbW9rZS10ZXN0JyxcbiAgICAgICAgbGFiZWw6ICdTbW9rZSB0ZXN0IOKAlCBnYXRld2F5L0FQSSByZWFjaGFiaWxpdHknLFxuICAgICAgICBjb21tYW5kOiBgY3VybCAtZnNTayAke29wdHMudXJsfS9oZWFsdGggJiYgZWNobyAnc21va2UtdGVzdDogQVBJIHJlYWNoYWJsZSdgLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNraXBwZWQucHVzaCh7IGlkOiAnc21va2UtdGVzdCcsIHJlYXNvbjogJ25vIHBsYXRmb3JtIFVSTCB0byBwcm9iZSBmb3IgdGhpcyB0YXJnZXQnIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLmV2ZW50cykge1xuICAgIGlmIChvcHRzLnRhcmdldCA9PT0gJ2VjMicgfHwgb3B0cy50YXJnZXQgPT09ICdla3MnKSB7XG4gICAgICAvLyBFdmVudCBpbmdlc3Rpb24gaXMgYSBUSFJFRS1zdGVwIGJ1bmRsZSwgaW4gdGhpcyBvcmRlcjpcbiAgICAgIC8vICAgMS4gc3RvcmUtdG9rZW4gICAgICAgICAg4oCUIHRoZSBvcmcncyBmdWxsLXByaXZpbGVnZSBTRVJWSUNFLUFDQ09VTlQga2V5XG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bnRoL2RlcGxveSBjYWxsYmFja3MgYW5kIENvZGVCdWlsZCdzIHJlZ2lzdHJ5XG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHMgcmVhZCBpdDsgLS1zY2hlZHVsZSBhdXRvLXJvdGF0ZXMgaXQpLlxuICAgICAgLy8gICAyLiBzdG9yZS10b2tlbiAtLXNjb3BlIHJlcG9ydGluZzppbmdlc3QgLS1zY2hlZHVsZVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICDigJQgYSBESVNUSU5DVCBsZWFzdC1wcml2aWxlZ2UgS0VZIHdob3NlIGV4Y2hhbmdlZFxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuIGNhcnJpZXMgZXhhY3RseSBgcmVwb3J0aW5nOmluZ2VzdGAgYW5kIG5vXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgYXQgYWxsLiBUaGUgaW5nZXN0IGVuZHBvaW50IHJlcXVpcmVzXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzY29wZSBhbmQgYGhhc1Njb3BlYCBpcyBhIHNpbmdsZS12YWx1ZVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsaXR5IGNoZWNrLCBzbyB0aGUgcGxhdGZvcm0ga2V5IChubyBzY29wZSlcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gTkVWRVIgaW5nZXN0IOKAlCB0aGUgTGFtYmRhIG11c3QgcmVhZCB0aGlzXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkaWNhdGVkIHNlY3JldC4gU3RvcmVkIGF0IGAuLi4vcmVwb3J0aW5nLWluZ2VzdGAuXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1zY2hlZHVsZSBkZXBsb3lzIGl0cyBPV04gcm90YXRpb24gc3RhY2sgKG5hbWVkXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC1yZXBvcnRpbmctaW5nZXN0YCwgZGlzdGluY3QgZnJvbSB0aGUgcGxhdGZvcm1cbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUpLCB3aGljaCByb3RhdGVzIHRoZSBrZXkgaW4gcGxhY2Ugc28gaXQgbmV2ZXJcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXBzZXMuIFNlZSBzZXR1cC1ldmVudHMgLS1zY29wZWQtaW5nZXN0LlxuICAgICAgLy8gICAyYi4gc3RvcmUtdG9rZW4gLS1zY29wZSByZWdpc3RyeTpwdXNoIC0tc2NoZWR1bGVcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAg4oCUIHRoZSBDSSByZWdpc3RyeSBjcmVkZW50aWFsIENvZGVCdWlsZCBwcmVzZW50c1xuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIEJhc2ljIGF1dGguIFN5bnRoIHdpcmVzXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC4uLi9yZWdpc3RyeS1wdXNoYCBpbnRvIGV2ZXJ5IGJ1aWxkIGltYWdlJ3NcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsc2AsIHNvIGEgZGVwbG95bWVudFxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgaXQgY2Fubm90IHB1bGwgaXRzIGJ1aWxkIGltYWdlcy5cbiAgICAgIC8vICAgMy4gc2V0dXAtZXZlbnRzIC0tc2NvcGVkLWluZ2VzdFxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICDigJQgZGVwbG95cyB0aGUgRXZlbnRCcmlkZ2Ug4oaSIFNRUyDihpIgTGFtYmRhIGFuZCBwb2ludHNcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTGFtYmRhIGF0IHRoZSByZXBvcnRpbmctaW5nZXN0IHNlY3JldCBmcm9tICMyLlxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJVEhPVVQgLS1zY29wZWQtaW5nZXN0IHRoZSBMYW1iZGEgcmVhZHMgdGhlXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gc2VjcmV0IGFuZCBldmVyeSBpbmdlc3QgNDAzc1xuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcIlRva2VuIG11c3QgY2FycnkgdGhlICdyZXBvcnRpbmc6aW5nZXN0JyBzY29wZVwiKS5cbiAgICAgIC8vIEJvdGggc3RvcmUtdG9rZW4gc3RlcHMgYXJlIHN0ZXAtdXAgZ2F0ZWQgb24gdGhlIHBsYXRmb3JtLCBzbyB0aGV5IG5lZWRcbiAgICAgIC8vIFBMQVRGT1JNX1BBU1NXT1JEIGluIHRoZSBlbnZpcm9ubWVudCAocHJvdmlzaW9uIGFscmVhZHkgcGFzc2VzIGl0KS5cbiAgICAgIC8vIHByb3Zpc2lvbiBzdXJmYWNlcyAoZG9lcyBub3QgYXV0by1ydW4pIHRoZSBidW5kbGUgb24gQVdTIOKAlCBpdCBuZWVkcyBhXG4gICAgICAvLyByZWdpc3RlcmVkLCBpbi1WUEMgcGxhdGZvcm0uXG4gICAgICBjb25zdCByZWdpb24gPSBvcHRzLnJlZ2lvbiA/IGAgLS1yZWdpb24gJHtvcHRzLnJlZ2lvbn1gIDogJyc7XG4gICAgICAvLyBNaXJyb3IgdGhlIHJlZ2lzdGVyIGJyYW5jaCdzIHRhcmdldCBydWxlOiBiYWtlIFBMQVRGT1JNX0JBU0VfVVJMIG9ubHkgb25cbiAgICAgIC8vIGVjMiAodGhlIGluLVZQQyBVUkwgcmVzb2x2ZXMgb24gdGhlIGJveCkuIE9uIGVrcyB0aGUgcHVibGljIEFMQi9ETlMgaXNuJ3RcbiAgICAgIC8vIHVwIHlldCwgc28gYmFraW5nIGl0IHdvdWxkIHBvaW50IHN0b3JlLXRva2VuL3NldHVwLWV2ZW50cyBhdCBhblxuICAgICAgLy8gdW5yZXNvbHZhYmxlIGhvc3Qg4oCUIHRoZSBvcGVyYXRvciBzZXRzIFBMQVRGT1JNX0JBU0VfVVJMIHdoZW4gcnVubmluZyB0aGVcbiAgICAgIC8vIHN1cmZhY2VkIGJ1bmRsZSwgb25jZSB0aGUgQUxCIGlzIHJlYWR5LlxuICAgICAgY29uc3QgZW52ID0gb3B0cy50YXJnZXQgPT09ICdlYzInICYmIG9wdHMudXJsID8geyBQTEFURk9STV9CQVNFX1VSTDogb3B0cy51cmwgfSA6IHVuZGVmaW5lZDtcbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBpZDogJ3N0b3JlLXRva2VuJyxcbiAgICAgICAgbGFiZWw6ICdTdG9yZSB0aGUgcGxhdGZvcm0gc2VydmljZS1hY2NvdW50IGtleSBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyICgrIGRhaWx5IGF1dG8tcm90YXRpb24pJyxcbiAgICAgICAgLy8gLS1zY2hlZHVsZTogc3ludGgvZGVwbG95IGNhbGxiYWNrcyByZWFkIHRoaXMga2V5LCBzbyBpbnN0YWxsIHRoZVxuICAgICAgICAvLyByb3RhdGlvbiBzdGFjayBzbyBpdCBuZXZlciBsYXBzZXMgKHN0b3JlLXRva2VuIGRvZXMgbm90IGRlcGxveSBpdCBieSBkZWZhdWx0KS5cbiAgICAgICAgY29tbWFuZDogYHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1zY2hlZHVsZSR7cmVnaW9ufWAsXG4gICAgICAgIGVudixcbiAgICAgIH0pO1xuICAgICAgc3RlcHMucHVzaCh7XG4gICAgICAgIGlkOiAnc3RvcmUtdG9rZW4tcmVnaXN0cnknLFxuICAgICAgICBsYWJlbDogJ1N0b3JlIHRoZSByZWdpc3RyeS1wdXNoIChzY29wZWQpIHNlcnZpY2UtYWNjb3VudCBrZXkgaW4gQVdTIFNlY3JldHMgTWFuYWdlciAoKyBhdXRvLXJvdGF0aW9uKScsXG4gICAgICAgIC8vIENvZGVCdWlsZCdzIGBzZWNyZXRzTWFuYWdlckNyZWRlbnRpYWxzYCByZWFkcyBUSElTIHNlY3JldCwgbm90IHRoZVxuICAgICAgICAvLyBwbGF0Zm9ybSBvbmU6IGl0cyBleGNoYW5nZWQgdG9rZW4gY2FycmllcyBvbmx5IGByZWdpc3RyeTpwdXNoYCwgc28gYVxuICAgICAgICAvLyBsZWFrZWQgYnVpbGQgY3JlZGVudGlhbCBjYW4gbW92ZSBpbWFnZXMgaW5zaWRlIHRoZSBvcmcncyBuYW1lc3BhY2UgYW5kXG4gICAgICAgIC8vIG5vdGhpbmcgZWxzZS4gU3ludGggcG9pbnRzIGF0IGAuLi4vcmVnaXN0cnktcHVzaGAgdW5jb25kaXRpb25hbGx5LCBzb1xuICAgICAgICAvLyB0aGlzIHN0ZXAgaXMgbm90IG9wdGlvbmFsIG9uIEFXUy5cbiAgICAgICAgY29tbWFuZDogYHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1zY29wZSByZWdpc3RyeTpwdXNoIC0tc2NoZWR1bGUke3JlZ2lvbn1gLFxuICAgICAgICBlbnYsXG4gICAgICB9KTtcbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBpZDogJ3N0b3JlLXRva2VuLWluZ2VzdCcsXG4gICAgICAgIGxhYmVsOiAnU3RvcmUgdGhlIHJlcG9ydGluZy1pbmdlc3QgKHNjb3BlZCkgc2VydmljZS1hY2NvdW50IGtleSBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyICgrIGF1dG8tcm90YXRpb24pJyxcbiAgICAgICAgY29tbWFuZDogYHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1zY29wZSByZXBvcnRpbmc6aW5nZXN0IC0tc2NoZWR1bGUke3JlZ2lvbn1gLFxuICAgICAgICBlbnYsXG4gICAgICB9KTtcbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBpZDogJ2V2ZW50cycsXG4gICAgICAgIGxhYmVsOiAnRXZlbnRCcmlkZ2UgaW5nZXN0aW9uIChzZXR1cC1ldmVudHMsIHNjb3BlZC1pbmdlc3QpJyxcbiAgICAgICAgY29tbWFuZDogYHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc2V0dXAtZXZlbnRzIC0tc2NvcGVkLWluZ2VzdCR7cmVnaW9ufWAsXG4gICAgICAgIGVudixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBza2lwcGVkLnB1c2goeyBpZDogJ2V2ZW50cycsIHJlYXNvbjogYG5vdCBhcHBsaWNhYmxlIHRvIHRhcmdldCAnJHtvcHRzLnRhcmdldH0nIChlYzIvZWtzIG9ubHkpYCB9KTtcbiAgICB9XG4gIH1cblxuICBvcHRzLnN0ZXBzLmZvckVhY2goKGNvbW1hbmQsIGkpID0+IHtcbiAgICBpZiAoY29tbWFuZC50cmltKCkgIT09ICcnKSBzdGVwcy5wdXNoKHsgaWQ6IGBjdXN0b20tJHtpICsgMX1gLCBsYWJlbDogYEN1c3RvbSBzdGVwICR7aSArIDF9YCwgY29tbWFuZCB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgc3RlcHMsIHNraXBwZWQgfTtcbn1cbiJdfQ==
@@ -60,6 +60,15 @@ export declare function isTargetId(value: unknown): value is TargetId;
60
60
  * in only when their post-install option is selected (see LOAD_STEPS).
61
61
  */
62
62
  export declare const COMMON_SPARSE_PATHS: readonly string[];
63
+ /**
64
+ * The managed toolchain release's build inputs: init-platform.sh always builds
65
+ * `build-plugin-images.sh --only pipeline-bootstrap,cdk-synth` (after the `_base`
66
+ * images), and `--build-bootstrap` runs `--only pipeline-bootstrap`, so every
67
+ * clone that runs either needs these folders — with or without `--with-plugins`.
68
+ * The release has its own source root, `deploy/toolchain` (both halves), beside
69
+ * the plugin catalog; of the catalog it needs only the `_base` images.
70
+ */
71
+ export declare const TOOLCHAIN_SPARSE_PATHS: readonly string[];
63
72
  /**
64
73
  * Opt-in post-install load steps. Each maps a provision `--with-*` flag to the
65
74
  * init-platform env var that enables it AND the repo folder(s) it reads — so the
@@ -69,7 +78,7 @@ export declare const LOAD_STEPS: readonly [{
69
78
  readonly id: 'plugins';
70
79
  readonly flag: 'withPlugins';
71
80
  readonly env: 'LOAD_PLUGINS';
72
- readonly paths: readonly ['deploy/plugins', 'deploy/codebuild'];
81
+ readonly paths: readonly ['deploy/plugins'];
73
82
  }, {
74
83
  readonly id: 'compliance';
75
84
  readonly flag: 'withCompliance';
@@ -84,7 +93,8 @@ export declare const LOAD_STEPS: readonly [{
84
93
  export type LoadStepId = (typeof LOAD_STEPS)[number]['id'];
85
94
  /**
86
95
  * The de-duplicated set of sparse paths for a target plus the enabled load
87
- * steps: common base ∪ target folder(s) ∪ each enabled step's folder(s).
96
+ * steps: common base ∪ target folder(s) ∪ the toolchain build inputs ∪ each
97
+ * enabled step's folder(s).
88
98
  */
89
99
  export declare function sparsePathsFor(target: TargetId, enabledLoadIds: readonly string[]): string[];
90
100
  export interface AssembleResult {
@@ -1 +1 @@
1
- {"version":3,"file":"targets.d.ts","sources":["../../src/agent/targets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"targets.d.ts","sources":["../../src/agent/targets.ts"],"names":[],"mappings":"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"}