@pipeline-builder/pipeline-core 3.4.56 → 3.4.58

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.
@@ -176,6 +176,33 @@ export interface AWSConfig {
176
176
  };
177
177
  readonly codeBuild: {
178
178
  readonly computeType: ComputeType;
179
+ /**
180
+ * Image used for CodeBuild steps that don't have a plugin-baked image
181
+ * (cold-start synth bootstrap, ShellSteps with no registry, and
182
+ * `metadata_only` plugins). env: `CODEBUILD_DEFAULT_IMAGE`. Default
183
+ * `pipeline-bootstrap:1.0` — the local tag built by
184
+ * `deploy/codebuild/bootstrap/Dockerfile`, with `pipeline-manager`
185
+ * baked in.
186
+ *
187
+ * Contract: the image MUST have `pipeline-manager` on PATH. The
188
+ * bootstrap synth path no longer self-heals via `npm install -g`;
189
+ * pointing this at an image without the tool gets exit 127 on the
190
+ * first cold-start build.
191
+ *
192
+ * Resolution:
193
+ * - Bare tag (no `/`) → auto-prefixed to
194
+ * `<registry-host>:<port>/library/<tag>` using the registry config,
195
+ * with the per-org platform Secret as Basic auth (same flow as
196
+ * plugin images).
197
+ * - Fully-qualified registry URI (contains `/`) → used as-is, no
198
+ * auth wired (operator owns making it pullable).
199
+ * - When the registry isn't configured or per-org auth isn't
200
+ * available at the call site, falls back to
201
+ * `aws/codebuild/standard:7.0` with a warning — cold-start synth
202
+ * will then fail on `pipeline-manager: not found`, surfacing the
203
+ * misconfiguration loudly instead of silently swapping images.
204
+ */
205
+ readonly defaultImage: string;
179
206
  };
180
207
  }
181
208
  /** Express rate limiting configuration. */
@@ -2,4 +2,4 @@
2
2
  // Copyright 2026 Pipeline Builder Contributors
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBRdW90YVRpZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBBcmNoaXRlY3R1cmUsIFJ1bnRpbWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB0eXBlIHsgQWxnb3JpdGhtIH0gZnJvbSAnanNvbndlYnRva2VuJztcblxuLyoqXG4gKiBUeXBlLXNhZmUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBDb25maWcge1xuICByZWFkb25seSBzZXJ2ZXI6IFNlcnZlckNvbmZpZztcbiAgcmVhZG9ubHkgYXV0aDogQXV0aENvbmZpZztcbiAgcmVhZG9ubHkgZGF0YWJhc2U6IERhdGFiYXNlQ29uZmlnO1xuICByZWFkb25seSByZWdpc3RyeTogUmVnaXN0cnlDb25maWc7XG4gIHJlYWRvbmx5IHJlZGlzOiBSZWRpc0NvbmZpZztcbiAgcmVhZG9ubHkgcGx1Z2luQnVpbGQ6IFBsdWdpbkJ1aWxkQ29uZmlnO1xuICByZWFkb25seSBkb2NrZXJDb25maWc6IEJ1aWxkQ29uZmlnO1xuICByZWFkb25seSBvYnNlcnZhYmlsaXR5OiBPYnNlcnZhYmlsaXR5Q29uZmlnO1xuICByZWFkb25seSBjb21wbGlhbmNlOiBDb21wbGlhbmNlQ29uZmlnO1xuICByZWFkb25seSBhd3M6IEFXU0NvbmZpZztcbiAgcmVhZG9ubHkgcmF0ZUxpbWl0OiBSYXRlTGltaXRDb25maWc7XG4gIHJlYWRvbmx5IGJpbGxpbmc6IEJpbGxpbmdDb25maWc7XG59XG5cbi8qKiBFeHByZXNzIHNlcnZlciBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJDb25maWcge1xuICAvKiogSFRUUCBsaXN0ZW4gcG9ydCAoZW52OiBgUE9SVGApLiAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvcnM6IHtcbiAgICAvKiogV2hldGhlciB0byBpbmNsdWRlIGNyZWRlbnRpYWxzIGluIENPUlMgcmVzcG9uc2VzIChlbnY6IGBDT1JTX0NSRURFTlRJQUxTYCkuICovXG4gICAgcmVhZG9ubHkgY3JlZGVudGlhbHM6IGJvb2xlYW47XG4gICAgLyoqIEFsbG93ZWQgb3JpZ2luKHMpIOKAlCBzaW5nbGUgc3RyaW5nLCBhcnJheSwgb3IgYCcqJ2AgKGVudjogYENPUlNfT1JJR0lOYCkuICovXG4gICAgcmVhZG9ubHkgb3JpZ2luOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqIE51bWJlciBvZiByZXZlcnNlIHByb3h5IGhvcHMgdG8gdHJ1c3QgKGVudjogYFRSVVNUX1BST1hZYCkuICovXG4gIHJlYWRvbmx5IHRydXN0UHJveHk6IG51bWJlcjtcbiAgLyoqIEZyb250ZW5kIGJhc2UgVVJMLCB1c2VkIGFzIENPUlMgZmFsbGJhY2sgKGVudjogYFBMQVRGT1JNX0JBU0VfVVJMYCkuICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGh0dHBDbGllbnQ6IHtcbiAgICAvKiogRGVmYXVsdCBIVFRQIHJlcXVlc3QgdGltZW91dCBpbiBtcyAoZW52OiBgSFRUUF9DTElFTlRfVElNRU9VVGApLiAqL1xuICAgIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgICAvKiogTWF4aW11bSByZXRyeSBhdHRlbXB0cyBmb3IgZmFpbGVkIHJlcXVlc3RzIChlbnY6IGBIVFRQX0NMSUVOVF9NQVhfUkVUUklFU2ApLiAqL1xuICAgIHJlYWRvbmx5IG1heFJldHJpZXM6IG51bWJlcjtcbiAgICAvKiogQmFzZSBkZWxheSBiZXR3ZWVuIHJldHJpZXMgaW4gbXMgKGVudjogYEhUVFBfQ0xJRU5UX1JFVFJZX0RFTEFZX01TYCkuICovXG4gICAgcmVhZG9ubHkgcmV0cnlEZWxheU1zOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHNzZToge1xuICAgIC8qKiBNYXggU1NFIGNsaWVudHMgcGVyIHJlcXVlc3QgKGVudjogYFNTRV9NQVhfQ0xJRU5UU19QRVJfUkVRVUVTVGApLiAqL1xuICAgIHJlYWRvbmx5IG1heENsaWVudHNQZXJSZXF1ZXN0OiBudW1iZXI7XG4gICAgLyoqIFNTRSBjbGllbnQgdGltZW91dCBpbiBtcyAoZW52OiBgU1NFX0NMSUVOVF9USU1FT1VUX01TYCkuICovXG4gICAgcmVhZG9ubHkgY2xpZW50VGltZW91dE1zOiBudW1iZXI7XG4gICAgLyoqIFNTRSBjbGVhbnVwIGludGVydmFsIGluIG1zIChlbnY6IGBTU0VfQ0xFQU5VUF9JTlRFUlZBTF9NU2ApLiAqL1xuICAgIHJlYWRvbmx5IGNsZWFudXBJbnRlcnZhbE1zOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHNlcnZpY2VzOiB7XG4gICAgcmVhZG9ubHkgcGx1Z2luSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBsdWdpblBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBwaXBlbGluZUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBwaXBlbGluZVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBtZXNzYWdlSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG1lc3NhZ2VQb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgY29tcGxpYW5jZUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBjb21wbGlhbmNlUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJpbGxpbmdIb3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmlsbGluZ1BvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBiaWxsaW5nVGltZW91dDogbnVtYmVyO1xuICB9O1xufVxuXG4vKiogSldUIGFuZCByZWZyZXNoIHRva2VuIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDb25maWcge1xuICByZWFkb25seSBqd3Q6IHtcbiAgICAvKiogU2lnbmluZyBzZWNyZXQgZm9yIGFjY2VzcyB0b2tlbnMgKGVudjogYEpXVF9TRUNSRVRgKS4gKi9cbiAgICByZWFkb25seSBzZWNyZXQ6IHN0cmluZztcbiAgICAvKiogVG9rZW4gbGlmZXRpbWUgaW4gc2Vjb25kcyAoZW52OiBgSldUX0VYUElSRVNfSU5gKS4gKi9cbiAgICByZWFkb25seSBleHBpcmVzSW46IG51bWJlcjtcbiAgICAvKiogU2lnbmluZyBhbGdvcml0aG0sIGUuZy4gYCdIUzI1NidgIChlbnY6IGBKV1RfQUxHT1JJVEhNYCkuICovXG4gICAgcmVhZG9ubHkgYWxnb3JpdGhtOiBBbGdvcml0aG07XG4gICAgLyoqIGJjcnlwdCBzYWx0IHJvdW5kcyBmb3IgcGFzc3dvcmQgaGFzaGluZyAoZW52OiBgSldUX1NBTFRfUk9VTkRTYCkuICovXG4gICAgcmVhZG9ubHkgc2FsdFJvdW5kczogbnVtYmVyO1xuICB9O1xuICByZWFkb25seSByZWZyZXNoVG9rZW46IHtcbiAgICAvKiogU2lnbmluZyBzZWNyZXQgZm9yIHJlZnJlc2ggdG9rZW5zIChlbnY6IGBSRUZSRVNIX1RPS0VOX1NFQ1JFVGApLiAqL1xuICAgIHJlYWRvbmx5IHNlY3JldDogc3RyaW5nO1xuICAgIC8qKiBUb2tlbiBsaWZldGltZSBpbiBzZWNvbmRzIChlbnY6IGBSRUZSRVNIX1RPS0VOX0VYUElSRVNfSU5gKS4gKi9cbiAgICByZWFkb25seSBleHBpcmVzSW46IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqIFBvc3RncmVTUUwgYW5kIERyaXp6bGUgT1JNIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlQ29uZmlnIHtcbiAgcmVhZG9ubHkgcG9zdGdyZXM6IHtcbiAgICAvKiogUG9zdGdyZVNRTCBob3N0IChlbnY6IGBEQl9IT1NUYCkuICovXG4gICAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICAgIC8qKiBQb3N0Z3JlU1FMIHBvcnQgKGVudjogYERCX1BPUlRgKS4gKi9cbiAgICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gICAgLyoqIERhdGFiYXNlIG5hbWUgKGVudjogYERBVEFCQVNFYCkuICovXG4gICAgcmVhZG9ubHkgZGF0YWJhc2U6IHN0cmluZztcbiAgICAvKiogRGF0YWJhc2UgdXNlciAoZW52OiBgREJfVVNFUmApLiAqL1xuICAgIHJlYWRvbmx5IHVzZXI6IHN0cmluZztcbiAgICAvKiogRGF0YWJhc2UgcGFzc3dvcmQgKGVudjogYERCX1BBU1NXT1JEYCkuICovXG4gICAgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgZHJpenpsZToge1xuICAgIC8qKiBNYXhpbXVtIGNvbm5lY3Rpb24gcG9vbCBzaXplIChlbnY6IGBEUklaWkxFX01BWF9QT09MX1NJWkVgKS4gKi9cbiAgICByZWFkb25seSBtYXhQb29sU2l6ZTogbnVtYmVyO1xuICAgIC8qKiBJZGxlIGNvbm5lY3Rpb24gdGltZW91dCBpbiBtcyAoZW52OiBgRFJJWlpMRV9JRExFX1RJTUVPVVRfTUlMTElTYCkuICovXG4gICAgcmVhZG9ubHkgaWRsZVRpbWVvdXRNaWxsaXM6IG51bWJlcjtcbiAgICAvKiogTmV3IGNvbm5lY3Rpb24gdGltZW91dCBpbiBtcyAoZW52OiBgRFJJWlpMRV9DT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTYCkuICovXG4gICAgcmVhZG9ubHkgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IG51bWJlcjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeUNvbmZpZyB7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAvKiogRG9ja2VyIG5ldHdvcmsgZm9yIGJ1aWxkL3B1c2ggKGVtcHR5IHN0cmluZyA9IGRlZmF1bHQpLiAqL1xuICByZWFkb25seSBuZXR3b3JrOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCdWlsZEtpdCB0YWxrcyB0byB0aGUgcmVnaXN0cnkgb3ZlciBwbGFpbiBIVFRQIHdoZW4gdHJ1ZTsgSFRUUFMgd2l0aCB0aGVcbiAgICogc3lzdGVtIENBIGJ1bmRsZSBvdGhlcndpc2UuIEVudjogYElNQUdFX1JFR0lTVFJZX0hUVFBgIChkZWZhdWx0cyB0cnVlIOKAlFxuICAgKiB0aGUgaW4tY2x1c3RlciByZWdpc3RyeSBoYXMgbm8gVExTKS5cbiAgICovXG4gIHJlYWRvbmx5IGh0dHA6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXNDb25maWcge1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5CdWlsZENvbmZpZyB7XG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heEF0dGVtcHRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGJhY2tvZmZEZWxheU1zOiBudW1iZXI7XG4gIHJlYWRvbmx5IHdvcmtlclRpbWVvdXRNczogbnVtYmVyO1xuICByZWFkb25seSB0ZW1wRGlyTWF4QWdlTXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxTWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxQmFja29mZkJhc2VNczogbnVtYmVyO1xuICByZWFkb25seSBkbHFNYXhTaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRDb25maWcge1xuICAvKiogUm9vdCBkaXJlY3RvcnkgZm9yIGJ1aWxkIHRlbXAgZmlsZXMuICovXG4gIHJlYWRvbmx5IHRlbXBSb290OiBzdHJpbmc7XG4gIC8qKiBCdWlsZCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zOiBudW1iZXI7XG4gIC8qKiBQdXNoIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSBwdXNoVGltZW91dE1zOiBudW1iZXI7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBidWlsZGtpdGQgc29ja2V0IHRoZSBwbHVnaW4ncyBgYnVpbGRjdGxgIGNvbm5lY3RzIHRvLiBJbiBrOHNcbiAgICogYW5kIGNvbXBvc2UgdGhpcyBpcyBhIHNoYXJlZCBlbXB0eURpci90bXBmcyB2b2x1bWUgbW91bnRlZCBmcm9tIHRoZVxuICAgKiBidWlsZGtpdGQgc2lkZWNhci5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxka2l0QWRkcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9ic2VydmFiaWxpdHlDb25maWcge1xuICByZWFkb25seSBsb2dMZXZlbDogc3RyaW5nO1xuICByZWFkb25seSBsb2dGb3JtYXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdHJhY2luZzoge1xuICAgIHJlYWRvbmx5IGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlQ29uZmlnIHtcbiAgcmVhZG9ubHkgc2NhblNjaGVkdWxlckludGVydmFsTXM6IG51bWJlcjtcbiAgLyoqIFdoZW4gZmFsc2UsIHRoZSBzY2hlZHVsZXIgc2tpcHMgc2NhbnMvc2NoZWR1bGVzIGZvciB0aGUgc3lzdGVtIG9yZy4gRGVmYXVsdDogZmFsc2UuICovXG4gIHJlYWRvbmx5IHN5c3RlbU9yZ1NjYW5zRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBV1NDb25maWcge1xuICByZWFkb25seSBsYW1iZGE6IHtcbiAgICByZWFkb25seSBydW50aW1lOiBSdW50aW1lO1xuICAgIHJlYWRvbmx5IHRpbWVvdXQ6IER1cmF0aW9uO1xuICAgIHJlYWRvbmx5IG1lbW9yeVNpemU6IG51bWJlcjtcbiAgICByZWFkb25seSBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcbiAgICByZWFkb25seSByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zPzogbnVtYmVyO1xuICB9O1xuICByZWFkb25seSBsb2dnaW5nOiB7XG4gICAgcmVhZG9ubHkgZ3JvdXBOYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzO1xuICAgIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3k7XG4gIH07XG4gIHJlYWRvbmx5IGNvZGVCdWlsZDoge1xuICAgIHJlYWRvbmx5IGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZTtcbiAgfTtcbn1cblxuLyoqIEV4cHJlc3MgcmF0ZSBsaW1pdGluZyBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRDb25maWcge1xuICAvKiogTWF4aW11bSByZXF1ZXN0cyBwZXIgd2luZG93IChlbnY6IGBMSU1JVEVSX01BWGApLiAqL1xuICByZWFkb25seSBtYXg6IG51bWJlcjtcbiAgLyoqIFJhdGUgbGltaXQgd2luZG93IGluIG1pbGxpc2Vjb25kcyAoZW52OiBgTElNSVRFUl9XSU5ET1dNU2ApLiAqL1xuICByZWFkb25seSB3aW5kb3dNczogbnVtYmVyO1xuICAvKiogSW5jbHVkZSBsZWdhY3kgYFgtUmF0ZUxpbWl0LSpgIGhlYWRlcnMuICovXG4gIHJlYWRvbmx5IGxlZ2FjeUhlYWRlcnM6IGJvb2xlYW47XG4gIC8qKiBJbmNsdWRlIHN0YW5kYXJkIGBSYXRlTGltaXQtKmAgaGVhZGVycyAoUkZDIDY1ODUpLiAqL1xuICByZWFkb25seSBzdGFuZGFyZEhlYWRlcnM6IGJvb2xlYW47XG59XG5cbi8qKiBQcmljZSBjb25maWd1cmF0aW9uIGZvciBhIHNpbmdsZSBiaWxsaW5nIHBsYW4gKGluIGNlbnRzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ1BsYW5QcmljZXMge1xuICByZWFkb25seSBtb250aGx5OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFubnVhbDogbnVtYmVyO1xufVxuXG4vKiogRnVsbCBiaWxsaW5nIHBsYW4gZGVmaW5pdGlvbiB1c2VkIGZvciBzZWVkaW5nIGFuZCBydW50aW1lIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdQbGFuQ29uZmlnIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICByZWFkb25seSB0aWVyOiBRdW90YVRpZXI7XG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIHJlYWRvbmx5IGZlYXR1cmVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaXNBY3RpdmU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRGVmYXVsdDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc29ydE9yZGVyOiBudW1iZXI7XG59XG5cbi8qKiBCaWxsaW5nIHBsYW5zIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdDb25maWcge1xuICByZWFkb25seSBwbGFuczogcmVhZG9ubHkgQmlsbGluZ1BsYW5Db25maWdbXTtcbn1cbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBRdW90YVRpZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBBcmNoaXRlY3R1cmUsIFJ1bnRpbWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB0eXBlIHsgQWxnb3JpdGhtIH0gZnJvbSAnanNvbndlYnRva2VuJztcblxuLyoqXG4gKiBUeXBlLXNhZmUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBDb25maWcge1xuICByZWFkb25seSBzZXJ2ZXI6IFNlcnZlckNvbmZpZztcbiAgcmVhZG9ubHkgYXV0aDogQXV0aENvbmZpZztcbiAgcmVhZG9ubHkgZGF0YWJhc2U6IERhdGFiYXNlQ29uZmlnO1xuICByZWFkb25seSByZWdpc3RyeTogUmVnaXN0cnlDb25maWc7XG4gIHJlYWRvbmx5IHJlZGlzOiBSZWRpc0NvbmZpZztcbiAgcmVhZG9ubHkgcGx1Z2luQnVpbGQ6IFBsdWdpbkJ1aWxkQ29uZmlnO1xuICByZWFkb25seSBkb2NrZXJDb25maWc6IEJ1aWxkQ29uZmlnO1xuICByZWFkb25seSBvYnNlcnZhYmlsaXR5OiBPYnNlcnZhYmlsaXR5Q29uZmlnO1xuICByZWFkb25seSBjb21wbGlhbmNlOiBDb21wbGlhbmNlQ29uZmlnO1xuICByZWFkb25seSBhd3M6IEFXU0NvbmZpZztcbiAgcmVhZG9ubHkgcmF0ZUxpbWl0OiBSYXRlTGltaXRDb25maWc7XG4gIHJlYWRvbmx5IGJpbGxpbmc6IEJpbGxpbmdDb25maWc7XG59XG5cbi8qKiBFeHByZXNzIHNlcnZlciBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJDb25maWcge1xuICAvKiogSFRUUCBsaXN0ZW4gcG9ydCAoZW52OiBgUE9SVGApLiAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvcnM6IHtcbiAgICAvKiogV2hldGhlciB0byBpbmNsdWRlIGNyZWRlbnRpYWxzIGluIENPUlMgcmVzcG9uc2VzIChlbnY6IGBDT1JTX0NSRURFTlRJQUxTYCkuICovXG4gICAgcmVhZG9ubHkgY3JlZGVudGlhbHM6IGJvb2xlYW47XG4gICAgLyoqIEFsbG93ZWQgb3JpZ2luKHMpIOKAlCBzaW5nbGUgc3RyaW5nLCBhcnJheSwgb3IgYCcqJ2AgKGVudjogYENPUlNfT1JJR0lOYCkuICovXG4gICAgcmVhZG9ubHkgb3JpZ2luOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqIE51bWJlciBvZiByZXZlcnNlIHByb3h5IGhvcHMgdG8gdHJ1c3QgKGVudjogYFRSVVNUX1BST1hZYCkuICovXG4gIHJlYWRvbmx5IHRydXN0UHJveHk6IG51bWJlcjtcbiAgLyoqIEZyb250ZW5kIGJhc2UgVVJMLCB1c2VkIGFzIENPUlMgZmFsbGJhY2sgKGVudjogYFBMQVRGT1JNX0JBU0VfVVJMYCkuICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGh0dHBDbGllbnQ6IHtcbiAgICAvKiogRGVmYXVsdCBIVFRQIHJlcXVlc3QgdGltZW91dCBpbiBtcyAoZW52OiBgSFRUUF9DTElFTlRfVElNRU9VVGApLiAqL1xuICAgIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgICAvKiogTWF4aW11bSByZXRyeSBhdHRlbXB0cyBmb3IgZmFpbGVkIHJlcXVlc3RzIChlbnY6IGBIVFRQX0NMSUVOVF9NQVhfUkVUUklFU2ApLiAqL1xuICAgIHJlYWRvbmx5IG1heFJldHJpZXM6IG51bWJlcjtcbiAgICAvKiogQmFzZSBkZWxheSBiZXR3ZWVuIHJldHJpZXMgaW4gbXMgKGVudjogYEhUVFBfQ0xJRU5UX1JFVFJZX0RFTEFZX01TYCkuICovXG4gICAgcmVhZG9ubHkgcmV0cnlEZWxheU1zOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHNzZToge1xuICAgIC8qKiBNYXggU1NFIGNsaWVudHMgcGVyIHJlcXVlc3QgKGVudjogYFNTRV9NQVhfQ0xJRU5UU19QRVJfUkVRVUVTVGApLiAqL1xuICAgIHJlYWRvbmx5IG1heENsaWVudHNQZXJSZXF1ZXN0OiBudW1iZXI7XG4gICAgLyoqIFNTRSBjbGllbnQgdGltZW91dCBpbiBtcyAoZW52OiBgU1NFX0NMSUVOVF9USU1FT1VUX01TYCkuICovXG4gICAgcmVhZG9ubHkgY2xpZW50VGltZW91dE1zOiBudW1iZXI7XG4gICAgLyoqIFNTRSBjbGVhbnVwIGludGVydmFsIGluIG1zIChlbnY6IGBTU0VfQ0xFQU5VUF9JTlRFUlZBTF9NU2ApLiAqL1xuICAgIHJlYWRvbmx5IGNsZWFudXBJbnRlcnZhbE1zOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHNlcnZpY2VzOiB7XG4gICAgcmVhZG9ubHkgcGx1Z2luSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBsdWdpblBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBwaXBlbGluZUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBwaXBlbGluZVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBtZXNzYWdlSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG1lc3NhZ2VQb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgY29tcGxpYW5jZUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBjb21wbGlhbmNlUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJpbGxpbmdIb3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmlsbGluZ1BvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBiaWxsaW5nVGltZW91dDogbnVtYmVyO1xuICB9O1xufVxuXG4vKiogSldUIGFuZCByZWZyZXNoIHRva2VuIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDb25maWcge1xuICByZWFkb25seSBqd3Q6IHtcbiAgICAvKiogU2lnbmluZyBzZWNyZXQgZm9yIGFjY2VzcyB0b2tlbnMgKGVudjogYEpXVF9TRUNSRVRgKS4gKi9cbiAgICByZWFkb25seSBzZWNyZXQ6IHN0cmluZztcbiAgICAvKiogVG9rZW4gbGlmZXRpbWUgaW4gc2Vjb25kcyAoZW52OiBgSldUX0VYUElSRVNfSU5gKS4gKi9cbiAgICByZWFkb25seSBleHBpcmVzSW46IG51bWJlcjtcbiAgICAvKiogU2lnbmluZyBhbGdvcml0aG0sIGUuZy4gYCdIUzI1NidgIChlbnY6IGBKV1RfQUxHT1JJVEhNYCkuICovXG4gICAgcmVhZG9ubHkgYWxnb3JpdGhtOiBBbGdvcml0aG07XG4gICAgLyoqIGJjcnlwdCBzYWx0IHJvdW5kcyBmb3IgcGFzc3dvcmQgaGFzaGluZyAoZW52OiBgSldUX1NBTFRfUk9VTkRTYCkuICovXG4gICAgcmVhZG9ubHkgc2FsdFJvdW5kczogbnVtYmVyO1xuICB9O1xuICByZWFkb25seSByZWZyZXNoVG9rZW46IHtcbiAgICAvKiogU2lnbmluZyBzZWNyZXQgZm9yIHJlZnJlc2ggdG9rZW5zIChlbnY6IGBSRUZSRVNIX1RPS0VOX1NFQ1JFVGApLiAqL1xuICAgIHJlYWRvbmx5IHNlY3JldDogc3RyaW5nO1xuICAgIC8qKiBUb2tlbiBsaWZldGltZSBpbiBzZWNvbmRzIChlbnY6IGBSRUZSRVNIX1RPS0VOX0VYUElSRVNfSU5gKS4gKi9cbiAgICByZWFkb25seSBleHBpcmVzSW46IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqIFBvc3RncmVTUUwgYW5kIERyaXp6bGUgT1JNIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlQ29uZmlnIHtcbiAgcmVhZG9ubHkgcG9zdGdyZXM6IHtcbiAgICAvKiogUG9zdGdyZVNRTCBob3N0IChlbnY6IGBEQl9IT1NUYCkuICovXG4gICAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICAgIC8qKiBQb3N0Z3JlU1FMIHBvcnQgKGVudjogYERCX1BPUlRgKS4gKi9cbiAgICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gICAgLyoqIERhdGFiYXNlIG5hbWUgKGVudjogYERBVEFCQVNFYCkuICovXG4gICAgcmVhZG9ubHkgZGF0YWJhc2U6IHN0cmluZztcbiAgICAvKiogRGF0YWJhc2UgdXNlciAoZW52OiBgREJfVVNFUmApLiAqL1xuICAgIHJlYWRvbmx5IHVzZXI6IHN0cmluZztcbiAgICAvKiogRGF0YWJhc2UgcGFzc3dvcmQgKGVudjogYERCX1BBU1NXT1JEYCkuICovXG4gICAgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgZHJpenpsZToge1xuICAgIC8qKiBNYXhpbXVtIGNvbm5lY3Rpb24gcG9vbCBzaXplIChlbnY6IGBEUklaWkxFX01BWF9QT09MX1NJWkVgKS4gKi9cbiAgICByZWFkb25seSBtYXhQb29sU2l6ZTogbnVtYmVyO1xuICAgIC8qKiBJZGxlIGNvbm5lY3Rpb24gdGltZW91dCBpbiBtcyAoZW52OiBgRFJJWlpMRV9JRExFX1RJTUVPVVRfTUlMTElTYCkuICovXG4gICAgcmVhZG9ubHkgaWRsZVRpbWVvdXRNaWxsaXM6IG51bWJlcjtcbiAgICAvKiogTmV3IGNvbm5lY3Rpb24gdGltZW91dCBpbiBtcyAoZW52OiBgRFJJWlpMRV9DT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTYCkuICovXG4gICAgcmVhZG9ubHkgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IG51bWJlcjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeUNvbmZpZyB7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAvKiogRG9ja2VyIG5ldHdvcmsgZm9yIGJ1aWxkL3B1c2ggKGVtcHR5IHN0cmluZyA9IGRlZmF1bHQpLiAqL1xuICByZWFkb25seSBuZXR3b3JrOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCdWlsZEtpdCB0YWxrcyB0byB0aGUgcmVnaXN0cnkgb3ZlciBwbGFpbiBIVFRQIHdoZW4gdHJ1ZTsgSFRUUFMgd2l0aCB0aGVcbiAgICogc3lzdGVtIENBIGJ1bmRsZSBvdGhlcndpc2UuIEVudjogYElNQUdFX1JFR0lTVFJZX0hUVFBgIChkZWZhdWx0cyB0cnVlIOKAlFxuICAgKiB0aGUgaW4tY2x1c3RlciByZWdpc3RyeSBoYXMgbm8gVExTKS5cbiAgICovXG4gIHJlYWRvbmx5IGh0dHA6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXNDb25maWcge1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5CdWlsZENvbmZpZyB7XG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heEF0dGVtcHRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGJhY2tvZmZEZWxheU1zOiBudW1iZXI7XG4gIHJlYWRvbmx5IHdvcmtlclRpbWVvdXRNczogbnVtYmVyO1xuICByZWFkb25seSB0ZW1wRGlyTWF4QWdlTXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxTWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxQmFja29mZkJhc2VNczogbnVtYmVyO1xuICByZWFkb25seSBkbHFNYXhTaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRDb25maWcge1xuICAvKiogUm9vdCBkaXJlY3RvcnkgZm9yIGJ1aWxkIHRlbXAgZmlsZXMuICovXG4gIHJlYWRvbmx5IHRlbXBSb290OiBzdHJpbmc7XG4gIC8qKiBCdWlsZCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zOiBudW1iZXI7XG4gIC8qKiBQdXNoIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSBwdXNoVGltZW91dE1zOiBudW1iZXI7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBidWlsZGtpdGQgc29ja2V0IHRoZSBwbHVnaW4ncyBgYnVpbGRjdGxgIGNvbm5lY3RzIHRvLiBJbiBrOHNcbiAgICogYW5kIGNvbXBvc2UgdGhpcyBpcyBhIHNoYXJlZCBlbXB0eURpci90bXBmcyB2b2x1bWUgbW91bnRlZCBmcm9tIHRoZVxuICAgKiBidWlsZGtpdGQgc2lkZWNhci5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxka2l0QWRkcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9ic2VydmFiaWxpdHlDb25maWcge1xuICByZWFkb25seSBsb2dMZXZlbDogc3RyaW5nO1xuICByZWFkb25seSBsb2dGb3JtYXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdHJhY2luZzoge1xuICAgIHJlYWRvbmx5IGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlQ29uZmlnIHtcbiAgcmVhZG9ubHkgc2NhblNjaGVkdWxlckludGVydmFsTXM6IG51bWJlcjtcbiAgLyoqIFdoZW4gZmFsc2UsIHRoZSBzY2hlZHVsZXIgc2tpcHMgc2NhbnMvc2NoZWR1bGVzIGZvciB0aGUgc3lzdGVtIG9yZy4gRGVmYXVsdDogZmFsc2UuICovXG4gIHJlYWRvbmx5IHN5c3RlbU9yZ1NjYW5zRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBV1NDb25maWcge1xuICByZWFkb25seSBsYW1iZGE6IHtcbiAgICByZWFkb25seSBydW50aW1lOiBSdW50aW1lO1xuICAgIHJlYWRvbmx5IHRpbWVvdXQ6IER1cmF0aW9uO1xuICAgIHJlYWRvbmx5IG1lbW9yeVNpemU6IG51bWJlcjtcbiAgICByZWFkb25seSBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcbiAgICByZWFkb25seSByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zPzogbnVtYmVyO1xuICB9O1xuICByZWFkb25seSBsb2dnaW5nOiB7XG4gICAgcmVhZG9ubHkgZ3JvdXBOYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzO1xuICAgIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3k7XG4gIH07XG4gIHJlYWRvbmx5IGNvZGVCdWlsZDoge1xuICAgIHJlYWRvbmx5IGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZTtcbiAgICAvKipcbiAgICAgKiBJbWFnZSB1c2VkIGZvciBDb2RlQnVpbGQgc3RlcHMgdGhhdCBkb24ndCBoYXZlIGEgcGx1Z2luLWJha2VkIGltYWdlXG4gICAgICogKGNvbGQtc3RhcnQgc3ludGggYm9vdHN0cmFwLCBTaGVsbFN0ZXBzIHdpdGggbm8gcmVnaXN0cnksIGFuZFxuICAgICAqIGBtZXRhZGF0YV9vbmx5YCBwbHVnaW5zKS4gZW52OiBgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0VgLiBEZWZhdWx0XG4gICAgICogYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgIOKAlCB0aGUgbG9jYWwgdGFnIGJ1aWx0IGJ5XG4gICAgICogYGRlcGxveS9jb2RlYnVpbGQvYm9vdHN0cmFwL0RvY2tlcmZpbGVgLCB3aXRoIGBwaXBlbGluZS1tYW5hZ2VyYFxuICAgICAqIGJha2VkIGluLlxuICAgICAqXG4gICAgICogQ29udHJhY3Q6IHRoZSBpbWFnZSBNVVNUIGhhdmUgYHBpcGVsaW5lLW1hbmFnZXJgIG9uIFBBVEguIFRoZVxuICAgICAqIGJvb3RzdHJhcCBzeW50aCBwYXRoIG5vIGxvbmdlciBzZWxmLWhlYWxzIHZpYSBgbnBtIGluc3RhbGwgLWdgO1xuICAgICAqIHBvaW50aW5nIHRoaXMgYXQgYW4gaW1hZ2Ugd2l0aG91dCB0aGUgdG9vbCBnZXRzIGV4aXQgMTI3IG9uIHRoZVxuICAgICAqIGZpcnN0IGNvbGQtc3RhcnQgYnVpbGQuXG4gICAgICpcbiAgICAgKiBSZXNvbHV0aW9uOlxuICAgICAqIC0gQmFyZSB0YWcgKG5vIGAvYCkg4oaSIGF1dG8tcHJlZml4ZWQgdG9cbiAgICAgKiAgIGA8cmVnaXN0cnktaG9zdD46PHBvcnQ+L2xpYnJhcnkvPHRhZz5gIHVzaW5nIHRoZSByZWdpc3RyeSBjb25maWcsXG4gICAgICogICB3aXRoIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBhcyBCYXNpYyBhdXRoIChzYW1lIGZsb3cgYXNcbiAgICAgKiAgIHBsdWdpbiBpbWFnZXMpLlxuICAgICAqIC0gRnVsbHktcXVhbGlmaWVkIHJlZ2lzdHJ5IFVSSSAoY29udGFpbnMgYC9gKSDihpIgdXNlZCBhcy1pcywgbm9cbiAgICAgKiAgIGF1dGggd2lyZWQgKG9wZXJhdG9yIG93bnMgbWFraW5nIGl0IHB1bGxhYmxlKS5cbiAgICAgKiAtIFdoZW4gdGhlIHJlZ2lzdHJ5IGlzbid0IGNvbmZpZ3VyZWQgb3IgcGVyLW9yZyBhdXRoIGlzbid0XG4gICAgICogICBhdmFpbGFibGUgYXQgdGhlIGNhbGwgc2l0ZSwgZmFsbHMgYmFjayB0b1xuICAgICAqICAgYGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wYCB3aXRoIGEgd2FybmluZyDigJQgY29sZC1zdGFydCBzeW50aFxuICAgICAqICAgd2lsbCB0aGVuIGZhaWwgb24gYHBpcGVsaW5lLW1hbmFnZXI6IG5vdCBmb3VuZGAsIHN1cmZhY2luZyB0aGVcbiAgICAgKiAgIG1pc2NvbmZpZ3VyYXRpb24gbG91ZGx5IGluc3RlYWQgb2Ygc2lsZW50bHkgc3dhcHBpbmcgaW1hZ2VzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlZmF1bHRJbWFnZTogc3RyaW5nO1xuICB9O1xufVxuXG4vKiogRXhwcmVzcyByYXRlIGxpbWl0aW5nIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFJhdGVMaW1pdENvbmZpZyB7XG4gIC8qKiBNYXhpbXVtIHJlcXVlc3RzIHBlciB3aW5kb3cgKGVudjogYExJTUlURVJfTUFYYCkuICovXG4gIHJlYWRvbmx5IG1heDogbnVtYmVyO1xuICAvKiogUmF0ZSBsaW1pdCB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIChlbnY6IGBMSU1JVEVSX1dJTkRPV01TYCkuICovXG4gIHJlYWRvbmx5IHdpbmRvd01zOiBudW1iZXI7XG4gIC8qKiBJbmNsdWRlIGxlZ2FjeSBgWC1SYXRlTGltaXQtKmAgaGVhZGVycy4gKi9cbiAgcmVhZG9ubHkgbGVnYWN5SGVhZGVyczogYm9vbGVhbjtcbiAgLyoqIEluY2x1ZGUgc3RhbmRhcmQgYFJhdGVMaW1pdC0qYCBoZWFkZXJzIChSRkMgNjU4NSkuICovXG4gIHJlYWRvbmx5IHN0YW5kYXJkSGVhZGVyczogYm9vbGVhbjtcbn1cblxuLyoqIFByaWNlIGNvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIGJpbGxpbmcgcGxhbiAoaW4gY2VudHMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaWxsaW5nUGxhblByaWNlcyB7XG4gIHJlYWRvbmx5IG1vbnRobHk6IG51bWJlcjtcbiAgcmVhZG9ubHkgYW5udWFsOiBudW1iZXI7XG59XG5cbi8qKiBGdWxsIGJpbGxpbmcgcGxhbiBkZWZpbml0aW9uIHVzZWQgZm9yIHNlZWRpbmcgYW5kIHJ1bnRpbWUgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ1BsYW5Db25maWcge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpZXI6IFF1b3RhVGllcjtcbiAgcmVhZG9ubHkgcHJpY2VzOiBCaWxsaW5nUGxhblByaWNlcztcbiAgcmVhZG9ubHkgZmVhdHVyZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNEZWZhdWx0OiBib29sZWFuO1xuICByZWFkb25seSBzb3J0T3JkZXI6IG51bWJlcjtcbn1cblxuLyoqIEJpbGxpbmcgcGxhbnMgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ0NvbmZpZyB7XG4gIHJlYWRvbmx5IHBsYW5zOiByZWFkb25seSBCaWxsaW5nUGxhbkNvbmZpZ1tdO1xufVxuIl19
@@ -151,6 +151,7 @@ function loadAWSConfig() {
151
151
  },
152
152
  codeBuild: {
153
153
  computeType: (0, pipeline_helpers_1.getComputeType)(process.env.CODEBUILD_COMPUTE_TYPE || 'SMALL'),
154
+ defaultImage: process.env.CODEBUILD_DEFAULT_IMAGE || 'pipeline-bootstrap:1.0',
154
155
  },
155
156
  };
156
157
  }
@@ -179,4 +180,4 @@ function parseRetention(days) {
179
180
  const parsed = parseInt(days, 10);
180
181
  return VALID_RETENTION_DAYS.has(parsed) ? parsed : aws_logs_1.RetentionDays.ONE_DAY;
181
182
  }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9pbmZyYXN0cnVjdHVyZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7Ozs7O0FBcUJ0QyxnREFPQztBQUVELDBDQUtDO0FBUUQsc0RBV0M7QUFFRCxnREFlQztBQUVELDBEQVVDO0FBRUQsb0RBS0M7QUFhRCw0Q0FPQztBQWlCRCxzQ0EwQkM7QUF2SkQsZ0RBQXdCO0FBQ3hCLDZDQUFzRDtBQUN0RCx1REFBK0Q7QUFDL0QsbURBQXFEO0FBRXJELCtEQUEwRDtBQUUxRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLGtCQUFrQjtJQUNoQyxPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksVUFBVTtRQUNuRCxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUM3RCxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksRUFBRTtRQUN6QyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxPQUFPO0tBQ2xELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsZUFBZTtJQUM3QixPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVc7UUFDM0MsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDO0tBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUI7SUFDbkMsT0FBTztRQUNMLFdBQVcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFB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MjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUsIFJ1bnRpbWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgdHlwZSB7IEFXU0NvbmZpZywgQnVpbGRDb25maWcsIENvbXBsaWFuY2VDb25maWcsIERhdGFiYXNlQ29uZmlnLCBPYnNlcnZhYmlsaXR5Q29uZmlnLCBQbHVnaW5CdWlsZENvbmZpZywgUmVkaXNDb25maWcsIFJlZ2lzdHJ5Q29uZmlnIH0gZnJvbSAnLi9jb25maWctdHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q29tcHV0ZVR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLWhlbHBlcnMnO1xuXG4vKipcbiAqIExvYWQgRG9ja2VyIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgSU1BR0VfUkVHSVNUUllfSE9TVGAg4oCUIFJlZ2lzdHJ5IGhvc3RuYW1lIChkZWZhdWx0OiBgJ3JlZ2lzdHJ5J2ApXG4gKiAtIGBJTUFHRV9SRUdJU1RSWV9QT1JUYCDigJQgUmVnaXN0cnkgcG9ydCAoZGVmYXVsdDogYDUwMDBgKVxuICogLSBgRE9DS0VSX05FVFdPUktgIOKAlCBEb2NrZXIgbmV0d29yayBmb3IgYnVpbGQvcHVzaCAoZGVmYXVsdDogYCcnYClcbiAqIC0gYElNQUdFX1JFR0lTVFJZX0hUVFBgIOKAlCBVc2UgcGxhaW4gSFRUUCBpbnN0ZWFkIG9mIEhUVFBTIChkZWZhdWx0OiBgdHJ1ZWAsXG4gKiAgIHRoZSBpbi1jbHVzdGVyIHJlZ2lzdHJ5IGhhcyBubyBUTFMpLlxuICpcbiAqIEByZXR1cm5zIFJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWdpc3RyeUNvbmZpZygpOiBSZWdpc3RyeUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgaG9zdDogcHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfSE9TVCB8fCAncmVnaXN0cnknLFxuICAgIHBvcnQ6IHBhcnNlSW50KHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX1BPUlQgfHwgJzUwMDAnLCAxMCksXG4gICAgbmV0d29yazogcHJvY2Vzcy5lbnYuRE9DS0VSX05FVFdPUksgfHwgJycsXG4gICAgaHR0cDogcHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfSFRUUCAhPT0gJ2ZhbHNlJyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWRpc0NvbmZpZygpOiBSZWRpc0NvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgaG9zdDogcHJvY2Vzcy5lbnYuUkVESVNfSE9TVCB8fCAnbG9jYWxob3N0JyxcbiAgICBwb3J0OiBwYXJzZUludChwcm9jZXNzLmVudi5SRURJU19QT1JUIHx8ICc2Mzc5JywgMTApLFxuICB9O1xufVxuXG4vKipcbiAqIExvYWQgcGx1Z2luIGJ1aWxkIHF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgUExVR0lOX0JVSUxEX0NPTkNVUlJFTkNZYCDigJQgTWF4IGNvbmN1cnJlbnQgcGx1Z2luIGJ1aWxkcyAoZGVmYXVsdDogYDFgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFBsdWdpbkJ1aWxkQ29uZmlnKCk6IFBsdWdpbkJ1aWxkQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBjb25jdXJyZW5jeTogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0JVSUxEX0NPTkNVUlJFTkNZIHx8ICcxJywgMTApLFxuICAgIG1heEF0dGVtcHRzOiBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfTUFYX0FUVEVNUFRTIHx8ICcyJywgMTApLFxuICAgIGJhY2tvZmZEZWxheU1zOiBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfQkFDS09GRl9ERUxBWV9NUyB8fCAnNTAwMCcsIDEwKSxcbiAgICB3b3JrZXJUaW1lb3V0TXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9CVUlMRF9XT1JLRVJfVElNRU9VVF9NUyB8fCAnMTAwMDAnLCAxMCksXG4gICAgdGVtcERpck1heEFnZU1zOiBwYXJzZUludChwcm9jZXNzLmVudi5URU1QX0RJUl9NQVhfQUdFX01TIHx8ICcxNDQwMDAwMCcsIDEwKSxcbiAgICBkbHFNYXhBdHRlbXB0czogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0RMUV9NQVhfQVRURU1QVFMgfHwgJzMnLCAxMCksXG4gICAgZGxxQmFja29mZkJhc2VNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0RMUV9CQUNLT0ZGX0JBU0VfTVMgfHwgJzMwMDAwMCcsIDEwKSxcbiAgICBkbHFNYXhTaXplOiBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fRExRX01BWF9TSVpFIHx8ICcyMCcsIDEwKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREYXRhYmFzZUNvbmZpZygpOiBEYXRhYmFzZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgcG9zdGdyZXM6IHtcbiAgICAgIGhvc3Q6IHByb2Nlc3MuZW52LkRCX0hPU1QgfHwgJ3Bvc3RncmVzJyxcbiAgICAgIHBvcnQ6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRCX1BPUlQgfHwgJzU0MzInLCAxMCksXG4gICAgICBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuREFUQUJBU0UgfHwgJ3BpcGVsaW5lX2J1aWxkZXInLFxuICAgICAgdXNlcjogcHJvY2Vzcy5lbnYuREJfVVNFUiB8fCAncG9zdGdyZXMnLFxuICAgICAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LkRCX1BBU1NXT1JEIHx8ICcnLFxuICAgIH0sXG4gICAgZHJpenpsZToge1xuICAgICAgbWF4UG9vbFNpemU6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRSSVpaTEVfTUFYX1BPT0xfU0laRSB8fCAnMjAnLCAxMCksXG4gICAgICBpZGxlVGltZW91dE1pbGxpczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuRFJJWlpMRV9JRExFX1RJTUVPVVRfTUlMTElTIHx8ICczMDAwMCcsIDEwKSxcbiAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBwYXJzZUludChwcm9jZXNzLmVudi5EUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVMgfHwgJzEwMDAwJywgMTApLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkT2JzZXJ2YWJpbGl0eUNvbmZpZygpOiBPYnNlcnZhYmlsaXR5Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBsb2dMZXZlbDogcHJvY2Vzcy5lbnYuTE9HX0xFVkVMIHx8ICdpbmZvJyxcbiAgICBsb2dGb3JtYXQ6IHByb2Nlc3MuZW52LkxPR19GT1JNQVQgfHwgJ2pzb24nLFxuICAgIHNlcnZpY2VOYW1lOiBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ2FwaScsXG4gICAgdHJhY2luZzoge1xuICAgICAgZW5hYmxlZDogcHJvY2Vzcy5lbnYuT1RFTF9UUkFDSU5HX0VOQUJMRUQgPT09ICd0cnVlJyxcbiAgICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6NDMxOC92MS90cmFjZXMnLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29tcGxpYW5jZUNvbmZpZygpOiBDb21wbGlhbmNlQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBzY2FuU2NoZWR1bGVySW50ZXJ2YWxNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuU0NBTl9TQ0hFRFVMRVJfSU5URVJWQUxfTVMgfHwgJzYwMDAwJywgMTApLFxuICAgIHN5c3RlbU9yZ1NjYW5zRW5hYmxlZDogcHJvY2Vzcy5lbnYuU1lTVEVNX09SR19TQ0FOU19FTkFCTEVEID09PSAndHJ1ZScsXG4gIH07XG59XG5cbi8qKlxuICogTG9hZCBwbHVnaW4gYnVpbGQgY29uZmlndXJhdGlvbi4gQnVpbGRzIHJ1biBhZ2FpbnN0IGEgcm9vdGxlc3MgYG1vYnkvYnVpbGRraXRgXG4gKiBzaWRlY2FyIOKAlCBzZWUgYEJVSUxES0lUX0hPU1RgLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYERPQ0tFUl9CVUlMRF9URU1QX1JPT1RgIOKAlCBUZW1wIGRpcmVjdG9yeSBmb3IgYnVpbGQgY29udGV4dHMgKGRlZmF1bHQ6IGA8Y3dkPi90bXBgKVxuICogLSBgRE9DS0VSX0JVSUxEX1RJTUVPVVRfTVNgIOKAlCBCdWlsZCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYDkwMDAwMGAgLyAxNSBtaW4pXG4gKiAtIGBET0NLRVJfUFVTSF9USU1FT1VUX01TYCDigJQgUHVzaCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYDMwMDAwMGAgLyA1IG1pbilcbiAqIC0gYEJVSUxES0lUX0hPU1RgIOKAlCBidWlsZGN0bCBgLS1hZGRyYCB2YWx1ZSBmb3IgdGhlIGJ1aWxka2l0ZCBzaWRlY2FyXG4gKiAgIChkZWZhdWx0OiBgdW5peDovLy9ydW4vYnVpbGRraXQvYnVpbGRraXRkLnNvY2tgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZERvY2tlckNvbmZpZygpOiBCdWlsZENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdGVtcFJvb3Q6IHByb2Nlc3MuZW52LkRPQ0tFUl9CVUlMRF9URU1QX1JPT1QgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICd0bXAnKSxcbiAgICB0aW1lb3V0TXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRPQ0tFUl9CVUlMRF9USU1FT1VUX01TIHx8ICc5MDAwMDAnLCAxMCksXG4gICAgcHVzaFRpbWVvdXRNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9DS0VSX1BVU0hfVElNRU9VVF9NUyB8fCAnMzAwMDAwJywgMTApLFxuICAgIGJ1aWxka2l0QWRkcjogcHJvY2Vzcy5lbnYuQlVJTERLSVRfSE9TVCB8fCAndW5peDovLy9ydW4vYnVpbGRraXQvYnVpbGRraXRkLnNvY2snLFxuICB9O1xufVxuXG4vKipcbiAqIExvYWQgQVdTIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgTEFNQkRBX1JVTlRJTUVgIOKAlCBMYW1iZGEgcnVudGltZSAoZGVmYXVsdDogYCdub2RlanMyNC54J2A7IHN1cHBvcnRzIG5vZGVqczIyLngsIG5vZGVqczI0LngpXG4gKiAtIGBMQU1CREFfVElNRU9VVGAg4oCUIExhbWJkYSB0aW1lb3V0IGluIHNlY29uZHMgKGRlZmF1bHQ6IGA5MDBgKVxuICogLSBgTEFNQkRBX01FTU9SWV9TSVpFYCDigJQgTGFtYmRhIG1lbW9yeSBpbiBNQiAoZGVmYXVsdDogYDEyOGApXG4gKiAtIGBMQU1CREFfQVJDSElURUNUVVJFYCDigJQgYCd4ODZfNjQnYCBvciBBUk0gKGRlZmF1bHQ6IEFSTV82NClcbiAqIC0gYExPR19HUk9VUF9OQU1FYCDigJQgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgKGRlZmF1bHQ6IGAnL3BpcGVsaW5lLWJ1aWxkZXIvbG9ncydgKVxuICogLSBgTE9HX1JFVEVOVElPTmAg4oCUIExvZyByZXRlbnRpb24gaW4gZGF5cyAoZGVmYXVsdDogYDdgKVxuICogLSBgTE9HX1JFTU9WQUxfUE9MSUNZYCDigJQgYCdSRVRBSU4nYCBvciBkZXN0cm95IChkZWZhdWx0OiBERVNUUk9ZKVxuICogLSBgQ09ERUJVSUxEX0NPTVBVVEVfVFlQRWAg4oCUIENvZGVCdWlsZCBjb21wdXRlIHR5cGUgKGRlZmF1bHQ6IGAnU01BTEwnYClcbiAqXG4gKiBAcmV0dXJucyBBV1MgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFXU0NvbmZpZygpOiBBV1NDb25maWcge1xuICByZXR1cm4ge1xuICAgIGxhbWJkYToge1xuICAgICAgcnVudGltZTogcGFyc2VSdW50aW1lKHByb2Nlc3MuZW52LkxBTUJEQV9SVU5USU1FIHx8ICdub2RlanMyNC54JyksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKHBhcnNlSW50KHByb2Nlc3MuZW52LkxBTUJEQV9USU1FT1VUIHx8ICc5MDAnLCAxMCkpLFxuICAgICAgbWVtb3J5U2l6ZTogcGFyc2VJbnQocHJvY2Vzcy5lbnYuTEFNQkRBX01FTU9SWV9TSVpFIHx8ICc1MTInLCAxMCksXG4gICAgICBhcmNoaXRlY3R1cmU6IHByb2Nlc3MuZW52LkxBTUJEQV9BUkNISVRFQ1RVUkUgPT09ICd4ODZfNjQnXG4gICAgICAgID8gQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgICAgICA6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBwcm9jZXNzLmVudi5MQU1CREFfUkVTRVJWRURfQ09OQ1VSUkVOQ1lcbiAgICAgICAgPyBwYXJzZUludChwcm9jZXNzLmVudi5MQU1CREFfUkVTRVJWRURfQ09OQ1VSUkVOQ1ksIDEwKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9LFxuXG4gICAgbG9nZ2luZzoge1xuICAgICAgZ3JvdXBOYW1lOiBwcm9jZXNzLmVudi5MT0dfR1JPVVBfTkFNRSB8fCAnL3BpcGVsaW5lLWJ1aWxkZXIvbG9ncycsXG4gICAgICByZXRlbnRpb246IHBhcnNlUmV0ZW50aW9uKHByb2Nlc3MuZW52LkxPR19SRVRFTlRJT04gfHwgJzcnKSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb2Nlc3MuZW52LkxPR19SRU1PVkFMX1BPTElDWSA9PT0gJ1JFVEFJTidcbiAgICAgICAgPyBSZW1vdmFsUG9saWN5LlJFVEFJTlxuICAgICAgICA6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9LFxuXG4gICAgY29kZUJ1aWxkOiB7XG4gICAgICBjb21wdXRlVHlwZTogZ2V0Q29tcHV0ZVR5cGUocHJvY2Vzcy5lbnYuQ09ERUJVSUxEX0NPTVBVVEVfVFlQRSB8fCAnU01BTEwnKSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlIExhbWJkYSBydW50aW1lIHN0cmluZyBpbnRvIGEgQ0RLIFJ1bnRpbWUgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcnVudGltZSAtIFJ1bnRpbWUgc3RyaW5nIChlLmcuIGAnbm9kZWpzMjQueCdgKVxuICogQHJldHVybnMgQ0RLIFJ1bnRpbWUgZW51bTsgZmFsbHMgYmFjayB0byBOT0RFSlNfMjRfWCBmb3IgdW5rbm93biB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VSdW50aW1lKHJ1bnRpbWU6IHN0cmluZyk6IFJ1bnRpbWUge1xuICBjb25zdCBydW50aW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBSdW50aW1lPiA9IHtcbiAgICAnbm9kZWpzMjQueCc6IFJ1bnRpbWUuTk9ERUpTXzI0X1gsXG4gIH07XG4gIHJldHVybiBydW50aW1lTWFwW3J1bnRpbWVdIHx8IFJ1bnRpbWUuTk9ERUpTXzI0X1g7XG59XG5cbi8qKlxuICogUGFyc2UgbG9nIHJldGVudGlvbiBkYXlzIHN0cmluZyBpbnRvIGEgQ0RLIFJldGVudGlvbkRheXMgZW51bSB2YWx1ZS5cbiAqIFJldGVudGlvbkRheXMgZW51bSB2YWx1ZXMgYXJlIHRoZSBudW1lcmljIGRheSBjb3VudHMgdGhlbXNlbHZlcyxcbiAqIHNvIHdlIHBhcnNlIHRoZSBzdHJpbmcgYW5kIGNoZWNrIGlmIGl0J3MgYSB2YWxpZCBlbnVtIG1lbWJlci5cbiAqXG4gKiBAcGFyYW0gZGF5cyAtIFJldGVudGlvbiBwZXJpb2QgaW4gZGF5cyBhcyBhIHN0cmluZyAoZS5nLiBgJzMwJ2ApXG4gKiBAcmV0dXJucyBDREsgUmV0ZW50aW9uRGF5cyBlbnVtOyBmYWxscyBiYWNrIHRvIE9ORV9EQVkgZm9yIHVua25vd24gdmFsdWVzXG4gKi9cbmNvbnN0IFZBTElEX1JFVEVOVElPTl9EQVlTID0gbmV3IFNldChPYmplY3QudmFsdWVzKFJldGVudGlvbkRheXMpLmZpbHRlcigodik6IHYgaXMgbnVtYmVyID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJykpO1xuXG5mdW5jdGlvbiBwYXJzZVJldGVudGlvbihkYXlzOiBzdHJpbmcpOiBSZXRlbnRpb25EYXlzIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoZGF5cywgMTApO1xuICByZXR1cm4gVkFMSURfUkVURU5USU9OX0RBWVMuaGFzKHBhcnNlZCkgPyBwYXJzZWQgYXMgUmV0ZW50aW9uRGF5cyA6IFJldGVudGlvbkRheXMuT05FX0RBWTtcbn1cbiJdfQ==
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9pbmZyYXN0cnVjdHVyZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7Ozs7O0FBcUJ0QyxnREFPQztBQUVELDBDQUtDO0FBUUQsc0RBV0M7QUFFRCxnREFlQztBQUVELDBEQVVDO0FBRUQsb0RBS0M7QUFhRCw0Q0FPQztBQWlCRCxzQ0EyQkM7QUF4SkQsZ0RBQXdCO0FBQ3hCLDZDQUFzRDtBQUN0RCx1REFBK0Q7QUFDL0QsbURBQXFEO0FBRXJELCtEQUEwRDtBQUUxRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLGtCQUFrQjtJQUNoQyxPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksVUFBVTtRQUNuRCxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUM3RCxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksRUFBRTtRQUN6QyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxPQUFPO0tBQ2xELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsZUFBZTtJQUM3QixPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVc7UUFDM0MsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDO0tBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUI7SUFDbkMsT0FBTztRQUNMLFdBQVcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFB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QUFPLENBQUM7QUFDNUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHR5cGUgeyBBV1NDb25maWcsIEJ1aWxkQ29uZmlnLCBDb21wbGlhbmNlQ29uZmlnLCBEYXRhYmFzZUNvbmZpZywgT2JzZXJ2YWJpbGl0eUNvbmZpZywgUGx1Z2luQnVpbGRDb25maWcsIFJlZGlzQ29uZmlnLCBSZWdpc3RyeUNvbmZpZyB9IGZyb20gJy4vY29uZmlnLXR5cGVzJztcbmltcG9ydCB7IGdldENvbXB1dGVUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzJztcblxuLyoqXG4gKiBMb2FkIERvY2tlciByZWdpc3RyeSBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYElNQUdFX1JFR0lTVFJZX0hPU1RgIOKAlCBSZWdpc3RyeSBob3N0bmFtZSAoZGVmYXVsdDogYCdyZWdpc3RyeSdgKVxuICogLSBgSU1BR0VfUkVHSVNUUllfUE9SVGAg4oCUIFJlZ2lzdHJ5IHBvcnQgKGRlZmF1bHQ6IGA1MDAwYClcbiAqIC0gYERPQ0tFUl9ORVRXT1JLYCDigJQgRG9ja2VyIG5ldHdvcmsgZm9yIGJ1aWxkL3B1c2ggKGRlZmF1bHQ6IGAnJ2ApXG4gKiAtIGBJTUFHRV9SRUdJU1RSWV9IVFRQYCDigJQgVXNlIHBsYWluIEhUVFAgaW5zdGVhZCBvZiBIVFRQUyAoZGVmYXVsdDogYHRydWVgLFxuICogICB0aGUgaW4tY2x1c3RlciByZWdpc3RyeSBoYXMgbm8gVExTKS5cbiAqXG4gKiBAcmV0dXJucyBSZWdpc3RyeSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVnaXN0cnlDb25maWcoKTogUmVnaXN0cnlDb25maWcge1xuICByZXR1cm4ge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX0hPU1QgfHwgJ3JlZ2lzdHJ5JyxcbiAgICBwb3J0OiBwYXJzZUludChwcm9jZXNzLmVudi5JTUFHRV9SRUdJU1RSWV9QT1JUIHx8ICc1MDAwJywgMTApLFxuICAgIG5ldHdvcms6IHByb2Nlc3MuZW52LkRPQ0tFUl9ORVRXT1JLIHx8ICcnLFxuICAgIGh0dHA6IHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX0hUVFAgIT09ICdmYWxzZScsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVkaXNDb25maWcoKTogUmVkaXNDb25maWcge1xuICByZXR1cm4ge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlJFRElTX0hPU1QgfHwgJ2xvY2FsaG9zdCcsXG4gICAgcG9ydDogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUkVESVNfUE9SVCB8fCAnNjM3OScsIDEwKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2FkIHBsdWdpbiBidWlsZCBxdWV1ZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYFBMVUdJTl9CVUlMRF9DT05DVVJSRU5DWWAg4oCUIE1heCBjb25jdXJyZW50IHBsdWdpbiBidWlsZHMgKGRlZmF1bHQ6IGAxYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQbHVnaW5CdWlsZENvbmZpZygpOiBQbHVnaW5CdWlsZENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgY29uY3VycmVuY3k6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9CVUlMRF9DT05DVVJSRU5DWSB8fCAnMScsIDEwKSxcbiAgICBtYXhBdHRlbXB0czogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0JVSUxEX01BWF9BVFRFTVBUUyB8fCAnMicsIDEwKSxcbiAgICBiYWNrb2ZmRGVsYXlNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0JVSUxEX0JBQ0tPRkZfREVMQVlfTVMgfHwgJzUwMDAnLCAxMCksXG4gICAgd29ya2VyVGltZW91dE1zOiBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfV09SS0VSX1RJTUVPVVRfTVMgfHwgJzEwMDAwJywgMTApLFxuICAgIHRlbXBEaXJNYXhBZ2VNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuVEVNUF9ESVJfTUFYX0FHRV9NUyB8fCAnMTQ0MDAwMDAnLCAxMCksXG4gICAgZGxxTWF4QXR0ZW1wdHM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9ETFFfTUFYX0FUVEVNUFRTIHx8ICczJywgMTApLFxuICAgIGRscUJhY2tvZmZCYXNlTXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9ETFFfQkFDS09GRl9CQVNFX01TIHx8ICczMDAwMDAnLCAxMCksXG4gICAgZGxxTWF4U2l6ZTogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0RMUV9NQVhfU0laRSB8fCAnMjAnLCAxMCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGF0YWJhc2VDb25maWcoKTogRGF0YWJhc2VDb25maWcge1xuICByZXR1cm4ge1xuICAgIHBvc3RncmVzOiB7XG4gICAgICBob3N0OiBwcm9jZXNzLmVudi5EQl9IT1NUIHx8ICdwb3N0Z3JlcycsXG4gICAgICBwb3J0OiBwYXJzZUludChwcm9jZXNzLmVudi5EQl9QT1JUIHx8ICc1NDMyJywgMTApLFxuICAgICAgZGF0YWJhc2U6IHByb2Nlc3MuZW52LkRBVEFCQVNFIHx8ICdwaXBlbGluZV9idWlsZGVyJyxcbiAgICAgIHVzZXI6IHByb2Nlc3MuZW52LkRCX1VTRVIgfHwgJ3Bvc3RncmVzJyxcbiAgICAgIHBhc3N3b3JkOiBwcm9jZXNzLmVudi5EQl9QQVNTV09SRCB8fCAnJyxcbiAgICB9LFxuICAgIGRyaXp6bGU6IHtcbiAgICAgIG1heFBvb2xTaXplOiBwYXJzZUludChwcm9jZXNzLmVudi5EUklaWkxFX01BWF9QT09MX1NJWkUgfHwgJzIwJywgMTApLFxuICAgICAgaWRsZVRpbWVvdXRNaWxsaXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRSSVpaTEVfSURMRV9USU1FT1VUX01JTExJUyB8fCAnMzAwMDAnLCAxMCksXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuRFJJWlpMRV9DT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTIHx8ICcxMDAwMCcsIDEwKSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE9ic2VydmFiaWxpdHlDb25maWcoKTogT2JzZXJ2YWJpbGl0eUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbG9nTGV2ZWw6IHByb2Nlc3MuZW52LkxPR19MRVZFTCB8fCAnaW5mbycsXG4gICAgbG9nRm9ybWF0OiBwcm9jZXNzLmVudi5MT0dfRk9STUFUIHx8ICdqc29uJyxcbiAgICBzZXJ2aWNlTmFtZTogcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknLFxuICAgIHRyYWNpbmc6IHtcbiAgICAgIGVuYWJsZWQ6IHByb2Nlc3MuZW52Lk9URUxfVFJBQ0lOR19FTkFCTEVEID09PSAndHJ1ZScsXG4gICAgICBlbmRwb2ludDogcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIHx8ICdodHRwOi8vbG9jYWxob3N0OjQzMTgvdjEvdHJhY2VzJyxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbXBsaWFuY2VDb25maWcoKTogQ29tcGxpYW5jZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgc2NhblNjaGVkdWxlckludGVydmFsTXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlNDQU5fU0NIRURVTEVSX0lOVEVSVkFMX01TIHx8ICc2MDAwMCcsIDEwKSxcbiAgICBzeXN0ZW1PcmdTY2Fuc0VuYWJsZWQ6IHByb2Nlc3MuZW52LlNZU1RFTV9PUkdfU0NBTlNfRU5BQkxFRCA9PT0gJ3RydWUnLFxuICB9O1xufVxuXG4vKipcbiAqIExvYWQgcGx1Z2luIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEJ1aWxkcyBydW4gYWdhaW5zdCBhIHJvb3RsZXNzIGBtb2J5L2J1aWxka2l0YFxuICogc2lkZWNhciDigJQgc2VlIGBCVUlMREtJVF9IT1NUYC5cbiAqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4gKiAtIGBET0NLRVJfQlVJTERfVEVNUF9ST09UYCDigJQgVGVtcCBkaXJlY3RvcnkgZm9yIGJ1aWxkIGNvbnRleHRzIChkZWZhdWx0OiBgPGN3ZD4vdG1wYClcbiAqIC0gYERPQ0tFUl9CVUlMRF9USU1FT1VUX01TYCDigJQgQnVpbGQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGA5MDAwMDBgIC8gMTUgbWluKVxuICogLSBgRE9DS0VSX1BVU0hfVElNRU9VVF9NU2Ag4oCUIFB1c2ggdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGAzMDAwMDBgIC8gNSBtaW4pXG4gKiAtIGBCVUlMREtJVF9IT1NUYCDigJQgYnVpbGRjdGwgYC0tYWRkcmAgdmFsdWUgZm9yIHRoZSBidWlsZGtpdGQgc2lkZWNhclxuICogICAoZGVmYXVsdDogYHVuaXg6Ly8vcnVuL2J1aWxka2l0L2J1aWxka2l0ZC5zb2NrYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWREb2NrZXJDb25maWcoKTogQnVpbGRDb25maWcge1xuICByZXR1cm4ge1xuICAgIHRlbXBSb290OiBwcm9jZXNzLmVudi5ET0NLRVJfQlVJTERfVEVNUF9ST09UIHx8IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAndG1wJyksXG4gICAgdGltZW91dE1zOiBwYXJzZUludChwcm9jZXNzLmVudi5ET0NLRVJfQlVJTERfVElNRU9VVF9NUyB8fCAnOTAwMDAwJywgMTApLFxuICAgIHB1c2hUaW1lb3V0TXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRPQ0tFUl9QVVNIX1RJTUVPVVRfTVMgfHwgJzMwMDAwMCcsIDEwKSxcbiAgICBidWlsZGtpdEFkZHI6IHByb2Nlc3MuZW52LkJVSUxES0lUX0hPU1QgfHwgJ3VuaXg6Ly8vcnVuL2J1aWxka2l0L2J1aWxka2l0ZC5zb2NrJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2FkIEFXUyBpbmZyYXN0cnVjdHVyZSBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYExBTUJEQV9SVU5USU1FYCDigJQgTGFtYmRhIHJ1bnRpbWUgKGRlZmF1bHQ6IGAnbm9kZWpzMjQueCdgOyBzdXBwb3J0cyBub2RlanMyMi54LCBub2RlanMyNC54KVxuICogLSBgTEFNQkRBX1RJTUVPVVRgIOKAlCBMYW1iZGEgdGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0OiBgOTAwYClcbiAqIC0gYExBTUJEQV9NRU1PUllfU0laRWAg4oCUIExhbWJkYSBtZW1vcnkgaW4gTUIgKGRlZmF1bHQ6IGAxMjhgKVxuICogLSBgTEFNQkRBX0FSQ0hJVEVDVFVSRWAg4oCUIGAneDg2XzY0J2Agb3IgQVJNIChkZWZhdWx0OiBBUk1fNjQpXG4gKiAtIGBMT0dfR1JPVVBfTkFNRWAg4oCUIENsb3VkV2F0Y2ggbG9nIGdyb3VwIChkZWZhdWx0OiBgJy9waXBlbGluZS1idWlsZGVyL2xvZ3MnYClcbiAqIC0gYExPR19SRVRFTlRJT05gIOKAlCBMb2cgcmV0ZW50aW9uIGluIGRheXMgKGRlZmF1bHQ6IGA3YClcbiAqIC0gYExPR19SRU1PVkFMX1BPTElDWWAg4oCUIGAnUkVUQUlOJ2Agb3IgZGVzdHJveSAoZGVmYXVsdDogREVTVFJPWSlcbiAqIC0gYENPREVCVUlMRF9DT01QVVRFX1RZUEVgIOKAlCBDb2RlQnVpbGQgY29tcHV0ZSB0eXBlIChkZWZhdWx0OiBgJ1NNQUxMJ2ApXG4gKlxuICogQHJldHVybnMgQVdTIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBV1NDb25maWcoKTogQVdTQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBsYW1iZGE6IHtcbiAgICAgIHJ1bnRpbWU6IHBhcnNlUnVudGltZShwcm9jZXNzLmVudi5MQU1CREFfUlVOVElNRSB8fCAnbm9kZWpzMjQueCcpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyhwYXJzZUludChwcm9jZXNzLmVudi5MQU1CREFfVElNRU9VVCB8fCAnOTAwJywgMTApKSxcbiAgICAgIG1lbW9yeVNpemU6IHBhcnNlSW50KHByb2Nlc3MuZW52LkxBTUJEQV9NRU1PUllfU0laRSB8fCAnNTEyJywgMTApLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBwcm9jZXNzLmVudi5MQU1CREFfQVJDSElURUNUVVJFID09PSAneDg2XzY0J1xuICAgICAgICA/IEFyY2hpdGVjdHVyZS5YODZfNjRcbiAgICAgICAgOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogcHJvY2Vzcy5lbnYuTEFNQkRBX1JFU0VSVkVEX0NPTkNVUlJFTkNZXG4gICAgICAgID8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTEFNQkRBX1JFU0VSVkVEX0NPTkNVUlJFTkNZLCAxMClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSxcblxuICAgIGxvZ2dpbmc6IHtcbiAgICAgIGdyb3VwTmFtZTogcHJvY2Vzcy5lbnYuTE9HX0dST1VQX05BTUUgfHwgJy9waXBlbGluZS1idWlsZGVyL2xvZ3MnLFxuICAgICAgcmV0ZW50aW9uOiBwYXJzZVJldGVudGlvbihwcm9jZXNzLmVudi5MT0dfUkVURU5USU9OIHx8ICc3JyksXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9jZXNzLmVudi5MT0dfUkVNT1ZBTF9QT0xJQ1kgPT09ICdSRVRBSU4nXG4gICAgICAgID8gUmVtb3ZhbFBvbGljeS5SRVRBSU5cbiAgICAgICAgOiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSxcblxuICAgIGNvZGVCdWlsZDoge1xuICAgICAgY29tcHV0ZVR5cGU6IGdldENvbXB1dGVUeXBlKHByb2Nlc3MuZW52LkNPREVCVUlMRF9DT01QVVRFX1RZUEUgfHwgJ1NNQUxMJyksXG4gICAgICBkZWZhdWx0SW1hZ2U6IHByb2Nlc3MuZW52LkNPREVCVUlMRF9ERUZBVUxUX0lNQUdFIHx8ICdwaXBlbGluZS1ib290c3RyYXA6MS4wJyxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlIExhbWJkYSBydW50aW1lIHN0cmluZyBpbnRvIGEgQ0RLIFJ1bnRpbWUgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcnVudGltZSAtIFJ1bnRpbWUgc3RyaW5nIChlLmcuIGAnbm9kZWpzMjQueCdgKVxuICogQHJldHVybnMgQ0RLIFJ1bnRpbWUgZW51bTsgZmFsbHMgYmFjayB0byBOT0RFSlNfMjRfWCBmb3IgdW5rbm93biB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VSdW50aW1lKHJ1bnRpbWU6IHN0cmluZyk6IFJ1bnRpbWUge1xuICBjb25zdCBydW50aW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBSdW50aW1lPiA9IHtcbiAgICAnbm9kZWpzMjQueCc6IFJ1bnRpbWUuTk9ERUpTXzI0X1gsXG4gIH07XG4gIHJldHVybiBydW50aW1lTWFwW3J1bnRpbWVdIHx8IFJ1bnRpbWUuTk9ERUpTXzI0X1g7XG59XG5cbi8qKlxuICogUGFyc2UgbG9nIHJldGVudGlvbiBkYXlzIHN0cmluZyBpbnRvIGEgQ0RLIFJldGVudGlvbkRheXMgZW51bSB2YWx1ZS5cbiAqIFJldGVudGlvbkRheXMgZW51bSB2YWx1ZXMgYXJlIHRoZSBudW1lcmljIGRheSBjb3VudHMgdGhlbXNlbHZlcyxcbiAqIHNvIHdlIHBhcnNlIHRoZSBzdHJpbmcgYW5kIGNoZWNrIGlmIGl0J3MgYSB2YWxpZCBlbnVtIG1lbWJlci5cbiAqXG4gKiBAcGFyYW0gZGF5cyAtIFJldGVudGlvbiBwZXJpb2QgaW4gZGF5cyBhcyBhIHN0cmluZyAoZS5nLiBgJzMwJ2ApXG4gKiBAcmV0dXJucyBDREsgUmV0ZW50aW9uRGF5cyBlbnVtOyBmYWxscyBiYWNrIHRvIE9ORV9EQVkgZm9yIHVua25vd24gdmFsdWVzXG4gKi9cbmNvbnN0IFZBTElEX1JFVEVOVElPTl9EQVlTID0gbmV3IFNldChPYmplY3QudmFsdWVzKFJldGVudGlvbkRheXMpLmZpbHRlcigodik6IHYgaXMgbnVtYmVyID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJykpO1xuXG5mdW5jdGlvbiBwYXJzZVJldGVudGlvbihkYXlzOiBzdHJpbmcpOiBSZXRlbnRpb25EYXlzIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoZGF5cywgMTApO1xuICByZXR1cm4gVkFMSURfUkVURU5USU9OX0RBWVMuaGFzKHBhcnNlZCkgPyBwYXJzZWQgYXMgUmV0ZW50aW9uRGF5cyA6IFJldGVudGlvbkRheXMuT05FX0RBWTtcbn1cbiJdfQ==
@@ -58,6 +58,7 @@ export declare function extractMetadataEnv(metadata: MetaDataType): Record<strin
58
58
  * needs a Construct to anchor the imported secret to.
59
59
  */
60
60
  export declare function resolvePluginImage(scope: Construct | undefined, plugin: Plugin, orgId?: string): IBuildImage | undefined;
61
+ export declare function resolveDefaultBuildImage(scope?: Construct, orgId?: string): IBuildImage;
61
62
  export declare function createCodeBuildStep(options: CodeBuildStepOptions): ShellStep | CodeBuildStep | ManualApprovalStep;
62
63
  /**
63
64
  * Convert string or ComputeType enum to CDK ComputeType
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.merge = merge;
6
6
  exports.extractMetadataEnv = extractMetadataEnv;
7
7
  exports.resolvePluginImage = resolvePluginImage;
8
+ exports.resolveDefaultBuildImage = resolveDefaultBuildImage;
8
9
  exports.createCodeBuildStep = createCodeBuildStep;
9
10
  exports.getComputeType = getComputeType;
10
11
  exports.replaceNonAlphanumeric = replaceNonAlphanumeric;
@@ -245,6 +246,101 @@ function resolvePluginImage(scope, plugin, orgId) {
245
246
  secretsManagerCredentials: credentialsSecret,
246
247
  });
247
248
  }
249
+ /**
250
+ * Resolve the fallback CodeBuild image for steps without a plugin-baked one.
251
+ *
252
+ * Reads `aws.codeBuild.defaultImage` (env: `CODEBUILD_DEFAULT_IMAGE`).
253
+ * Default: `pipeline-bootstrap:1.0` — the local tag built by
254
+ * `deploy/codebuild/bootstrap/Dockerfile`.
255
+ *
256
+ * - AWS curated image (`aws/codebuild/*`): use the matching `LinuxBuildImage`
257
+ * constant so CDK emits `imagePullCredentialsType: CODEBUILD`. Using
258
+ * `fromDockerRegistry()` here would set SERVICE_ROLE credentials, which
259
+ * CFN rejects with "cannot use a CodeBuild curated image with
260
+ * imagePullCredentialsType SERVICE_ROLE".
261
+ * - Bare tag (no `/`): auto-prefixed to
262
+ * `<registry-host>:<port>/library/<tag>` using the registry config,
263
+ * with the per-org platform Secret as Basic auth — same path
264
+ * `resolvePluginImage()` uses for plugin images. Needs `scope` + `orgId`.
265
+ * - Fully-qualified registry URI (contains `/`): used as-is, no auth wired.
266
+ * - Missing registry config or scope/orgId → falls back to
267
+ * `aws/codebuild/standard:7.0` (as a CURATED image, see above), with a
268
+ * warning so synth degrades gracefully on partially configured envs.
269
+ */
270
+ const STANDARD_7_0 = 'aws/codebuild/standard:7.0';
271
+ /**
272
+ * Map AWS curated `aws/codebuild/*` image strings to the matching
273
+ * `LinuxBuildImage` static. Extend when newer standard images ship.
274
+ * Returns `undefined` for non-curated strings — caller should use
275
+ * `fromDockerRegistry()` for those.
276
+ */
277
+ function curatedLinuxBuildImage(imageId) {
278
+ if (!imageId.startsWith('aws/codebuild/'))
279
+ return undefined;
280
+ switch (imageId) {
281
+ case 'aws/codebuild/standard:7.0': return aws_codebuild_1.LinuxBuildImage.STANDARD_7_0;
282
+ case 'aws/codebuild/standard:6.0': return aws_codebuild_1.LinuxBuildImage.STANDARD_6_0;
283
+ case 'aws/codebuild/standard:5.0': return aws_codebuild_1.LinuxBuildImage.STANDARD_5_0;
284
+ // Newer codenamed images route through fromCodeBuildImageId, which
285
+ // CDK also marks as CODEBUILD credentials (curated).
286
+ default: return aws_codebuild_1.LinuxBuildImage.fromCodeBuildImageId(imageId);
287
+ }
288
+ }
289
+ function resolveDefaultBuildImage(scope, orgId) {
290
+ let configured;
291
+ try {
292
+ configured = app_config_1.Config.get('aws').codeBuild.defaultImage;
293
+ }
294
+ catch {
295
+ configured = STANDARD_7_0;
296
+ }
297
+ // AWS curated image → CODEBUILD credentials. MUST go through the
298
+ // LinuxBuildImage constants, not fromDockerRegistry().
299
+ const curated = curatedLinuxBuildImage(configured);
300
+ if (curated)
301
+ return curated;
302
+ // Fully-qualified URI — operator owns it. No registry/Secret wiring.
303
+ if (configured.includes('/')) {
304
+ return aws_codebuild_1.LinuxBuildImage.fromDockerRegistry(configured);
305
+ }
306
+ // Bare tag → auto-prefix with the platform registry, mirroring
307
+ // resolvePluginImage(). Bail to STANDARD_7_0 as a curated fallback
308
+ // (with a warning) at each missing prerequisite so synth degrades
309
+ // gracefully on partially configured environments instead of failing.
310
+ let registry;
311
+ try {
312
+ registry = app_config_1.Config.get('registry');
313
+ }
314
+ catch {
315
+ log.warn(`CODEBUILD_DEFAULT_IMAGE='${configured}' is a bare tag but registry config not loaded — ` +
316
+ `falling back to ${STANDARD_7_0}. Set IMAGE_REGISTRY_HOST + IMAGE_REGISTRY_PORT.`);
317
+ return aws_codebuild_1.LinuxBuildImage.STANDARD_7_0;
318
+ }
319
+ if (!registry?.host) {
320
+ log.warn(`CODEBUILD_DEFAULT_IMAGE='${configured}' is a bare tag but IMAGE_REGISTRY_HOST is empty — ` +
321
+ `falling back to ${STANDARD_7_0}.`);
322
+ return aws_codebuild_1.LinuxBuildImage.STANDARD_7_0;
323
+ }
324
+ if (!scope || !orgId) {
325
+ log.warn(`CODEBUILD_DEFAULT_IMAGE='${configured}' needs scope+orgId for Secret auth — ` +
326
+ `falling back to ${STANDARD_7_0}. (Caller did not supply them.)`);
327
+ return aws_codebuild_1.LinuxBuildImage.STANDARD_7_0;
328
+ }
329
+ const portPart = registry.port && registry.port !== 80 && registry.port !== 443
330
+ ? `:${registry.port}`
331
+ : '';
332
+ const imageUri = `${registry.host}${portPart}/library/${configured}`;
333
+ // Same Secret as resolvePluginImage — per-org platform Secret, CodeBuild
334
+ // sends it as Basic auth, image-registry verifies the JWT in `password`.
335
+ const stack = aws_cdk_lib_1.Stack.of(scope);
336
+ const secretName = app_config_1.CoreConstants.secretPath(orgId, 'platform');
337
+ const secretConstructId = `PlatformCreds_${secretName.replace(/[^A-Za-z0-9_-]/g, '_')}`;
338
+ const credentialsSecret = stack.node.tryFindChild(secretConstructId)
339
+ ?? aws_secretsmanager_1.Secret.fromSecretNameV2(stack, secretConstructId, secretName);
340
+ return aws_codebuild_1.LinuxBuildImage.fromDockerRegistry(imageUri, {
341
+ secretsManagerCredentials: credentialsSecret,
342
+ });
343
+ }
248
344
  function createCodeBuildStep(options) {
249
345
  const { id, input, metadata, network, scope, preInstallCommands, postInstallCommands, preCommands, postCommands, env: customEnv, additionalInputs, timeout, failureBehavior, artifactManager, stageName, stageAlias, pluginAlias, orgId, pipelineScope, } = options;
250
346
  // Resolve {{ ... }} templates in plugin spec fields against the pipeline scope.
@@ -337,7 +433,7 @@ function createCodeBuildStep(options) {
337
433
  primaryOutputDirectory: plugin.primaryOutputDirectory ?? undefined,
338
434
  buildEnvironment: {
339
435
  computeType,
340
- ...(pluginBuildImage && { buildImage: pluginBuildImage }),
436
+ buildImage: pluginBuildImage ?? resolveDefaultBuildImage(scope, orgId),
341
437
  environmentVariables: {
342
438
  ...toCodeBuildEnvVars(env),
343
439
  ...secretEnvVars,
@@ -398,4 +494,4 @@ function replaceNonAlphanumeric(input, replaceValue = '_') {
398
494
  function unwrapSecret(value) {
399
495
  return typeof value === 'string' ? value : value.unsafeUnwrap();
400
496
  }
401
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BpcGVsaW5lLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBc0J0QyxzQkFFQztBQVNELGdEQVFDO0FBa0pELGdEQXVGQztBQUVELGtEQTRJQztBQUtELHdDQXFCQztBQVFELHdEQUVDO0FBT0Qsb0NBRUM7QUEzY0QseURBQTBEO0FBRTFELDZDQUEyRDtBQUMzRCw2REFBc0k7QUFDdEksdUVBQXdEO0FBQ3hELHFEQUFxRjtBQUdyRix5REFBaUg7QUFDakgsdUNBQTJDO0FBQzNDLHFEQUE4RjtBQUM5RixxREFBNkQ7QUFFN0QsaUVBQXFFO0FBRXJFLE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVksRUFBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTdDOztHQUVHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLEdBQUcsT0FBcUM7SUFDNUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBaUIsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsUUFBc0I7SUFDdkQsTUFBTSxHQUFHLEdBQTJCLEVBQUUsQ0FBQztJQUN2QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLG9DQUFtQixDQUFDLEVBQUUsQ0FBQztZQUN6QyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sYUFBYSxH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QUFDLE1BQU0sQ0FBQyxFQUFFLDJCQUFjLENBQUMsTUFBTTtRQUMzQyxDQUFDLDRCQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsMkJBQWMsQ0FBQyxLQUFLO1FBQ3pDLENBQUMsNEJBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSwyQkFBYyxDQUFDLFFBQVE7S0FDaEQsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixHQUFHLENBQUMsSUFBSSxDQUFDLHlCQUF5QixLQUFLLDBCQUEwQixDQUFDLENBQUM7UUFDbkUsT0FBTywyQkFBYyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsS0FBYSxFQUFFLGVBQXVCLEdBQUc7SUFDOUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUEyQjtJQUN0RCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFNlY3JldFZhbHVlLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUsIENvbXB1dGVUeXBlIGFzIENES0NvbXB1dGVUeXBlLCBMaW51eEJ1aWxkSW1hZ2UsIElCdWlsZEltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCwgTWFudWFsQXBwcm92YWxTdGVwLCBTaGVsbFN0ZXAgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQXJ0aWZhY3RLZXkgfSBmcm9tICcuL2FydGlmYWN0LW1hbmFnZXInO1xuaW1wb3J0IHsgbWV0YWRhdGFGb3JTaGVsbFN0ZXAsIG1ldGFkYXRhRm9yQ29kZUJ1aWxkU3RlcCwgbWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50IH0gZnJvbSAnLi9tZXRhZGF0YS1idWlsZGVyJztcbmltcG9ydCB7IHJlc29sdmVOZXR3b3JrIH0gZnJvbSAnLi9uZXR3b3JrJztcbmltcG9ydCB7IFBsdWdpblR5cGUsIENvbXB1dGVUeXBlLCBNZXRhRGF0YVR5cGUsIENES19NRVRBREFUQV9QUkVGSVggfSBmcm9tICcuL3BpcGVsaW5lLXR5cGVzJztcbmltcG9ydCB7IENvbmZpZywgQ29yZUNvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB0eXBlIHsgQ29kZUJ1aWxkU3RlcE9wdGlvbnMsIFN0ZXBDdXN0b21pemF0aW9uIH0gZnJvbSAnLi4vcGlwZWxpbmUvc3RlcC10eXBlcyc7XG5pbXBvcnQgeyByZXNvbHZlUGx1Z2luVGVtcGxhdGVzIH0gZnJvbSAnLi4vdGVtcGxhdGUvcGx1Z2luLXJlc29sdmVyJztcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1oZWxwZXJzJyk7XG5cbi8qKlxuICogTWVyZ2UgbXVsdGlwbGUgbWV0YWRhdGEgb2JqZWN0cyBpbnRvIG9uZS4gTGF0ZXIgc291cmNlcyBvdmVycmlkZSBlYXJsaWVyIG9uZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSguLi5zb3VyY2VzOiBBcnJheTxQYXJ0aWFsPE1ldGFEYXRhVHlwZT4+KTogTWV0YURhdGFUeXBlIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnNvdXJjZXMpIGFzIE1ldGFEYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IG5vbi1uYW1lc3BhY2VkIG1ldGFkYXRhIGtleXMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUgc3RyaW5ncy5cbiAqIEtleXMgc3RhcnRpbmcgd2l0aCAnYXdzOmNkazonIGFyZSByZXNlcnZlZCBmb3IgQ0RLIGNvbnN0cnVjdCBwcm9wc1xuICogKHByb2Nlc3NlZCBieSBtZXRhZGF0YSBleHRyYWN0aW9uIGZ1bmN0aW9ucykgYW5kIGFyZSBleGNsdWRlZCBoZXJlLlxuICpcbiAqIEFsbCB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmdzIGZvciBDb2RlQnVpbGQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNZXRhZGF0YUVudihtZXRhZGF0YTogTWV0YURhdGFUeXBlKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICBpZiAoIWtleS5zdGFydHNXaXRoKENES19NRVRBREFUQV9QUkVGSVgpKSB7XG4gICAgICBlbnZba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbnY7XG59XG5cbi8qKlxuICogQnVpbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gcGx1Z2luIGNvbmZpZywgbWVyZ2VkIG1ldGFkYXRhLCBhbmQgY3VzdG9tIGVudi5cbiAqXG4gKiBNZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gcGx1Z2luLmVudiDigJQgcGx1Z2luIGRlZmF1bHQgZW52IHZhcnMgKGxvd2VzdCBwcmlvcml0eSlcbiAqICAgMi4gbm9uLW5hbWVzcGFjZWQgbWV0YWRhdGEga2V5cyDigJQgZS5nLiBQWVRIT05fVkVSU0lPTiwgV09SS0RJUlxuICogICAzLiBjdXN0b21FbnYg4oCUIHBlci1zdGVwIGN1c3RvbSBlbnYgdmFycyAoaGlnaGVzdCBwcmlvcml0eSlcbiAqL1xuY29uc3QgQk9PVFNUUkFQX0NNRCA9ICdleHBvcnQgV09SS0RJUj0ke1dPUktESVI6LS4vfTsgY2QgJHtXT1JLRElSfSc7XG5cbmZ1bmN0aW9uIGJ1aWxkRW52KHBsdWdpbjogUGx1Z2luLCBtZXRhZGF0YTogTWV0YURhdGFUeXBlLCBjdXN0b21FbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiB7XG4gICAgLi4uKHBsdWdpbi5lbnYgPz8ge30pLFxuICAgIC4uLmV4dHJhY3RNZXRhZGF0YUVudihtZXRhZGF0YSksXG4gICAgLi4uKGN1c3RvbUVudiA/PyB7fSksXG4gIH07XG59XG5cbi8qKlxuICogV3JhcCBidWlsZCBjb21tYW5kcyBiYXNlZCBvbiBmYWlsdXJlIGJlaGF2aW9yLlxuICogLSAnZmFpbCcgKGRlZmF1bHQpOiBObyB3cmFwcGluZyDigJQgY29tbWFuZHMgZmFpbCB0aGUgcGlwZWxpbmUgbmF0dXJhbGx5LlxuICogLSAnd2Fybic6IFJ1biBjb21tYW5kcyB3aXRoIGBzZXQgK2VgLCBjYXB0dXJlIGZhaWx1cmVzLCBsb2cgd2FybmluZ3MsIGNvbnRpbnVlLlxuICogLSAnaWdub3JlJzogQXBwZW5kIGB8fCB0cnVlYCB0byBlYWNoIGNvbW1hbmQg4oCUIGZhaWx1cmVzIGFyZSBzaWxlbnRseSBzd2FsbG93ZWQuXG4gKlxuICogT25seSBhcHBsaWVkIHRvIGJ1aWxkIGNvbW1hbmRzLCBub3QgaW5zdGFsbCBjb21tYW5kcyAoaW5zdGFsbCBmYWlsdXJlcyBzaG91bGQgYWx3YXlzIHN0b3AgdGhlIGJ1aWxkKS5cbiAqL1xuZnVuY3Rpb24gd3JhcENvbW1hbmRzRm9yRmFpbHVyZUJlaGF2aW9yKGNvbW1hbmRzOiBzdHJpbmdbXSwgYmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyk6IHN0cmluZ1tdIHtcbiAgaWYgKCFiZWhhdmlvciB8fCBiZWhhdmlvciA9PT0gJ2ZhaWwnKSByZXR1cm4gY29tbWFuZHM7XG5cbiAgaWYgKGJlaGF2aW9yID09PSAnaWdub3JlJykge1xuICAgIHJldHVybiBjb21tYW5kcy5tYXAoY21kID0+IGAke2NtZH0gfHwgdHJ1ZWApO1xuICB9XG5cbiAgLy8gJ3dhcm4nOiBydW4gYWxsIGNvbW1hbmRzLCBjYXB0dXJlIGZhaWx1cmVzLCBidXQgZG9uJ3Qgc3RvcFxuICByZXR1cm4gW1xuICAgICdzZXQgK2UnLFxuICAgICdfU1RFUF9FWElUPTAnLFxuICAgIC4uLmNvbW1hbmRzLm1hcChjbWQgPT4gYCR7Y21kfSB8fCB7IGVjaG8gXCJXQVJOSU5HOiBDb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAkP1wiOyBfU1RFUF9FWElUPTE7IH1gKSxcbiAgICAnc2V0IC1lJyxcbiAgICAnaWYgWyBcIiRfU1RFUF9FWElUXCIgLW5lIDAgXTsgdGhlbiBlY2hvIFwiV0FSTklORzogT25lIG9yIG1vcmUgY29tbWFuZHMgaW4gdGhpcyBzdGVwIGZhaWxlZFwiOyBmaScsXG4gIF07XG59XG5cbi8qKlxuICogQnVpbGQgYm9vdHN0cmFwLXByZWZpeGVkIGluc3RhbGwgYW5kIGJ1aWxkIGNvbW1hbmRzIGZyb20gcGx1Z2luIGNvbmZpZy5cbiAqIEVhY2ggY29tbWFuZCBsaXN0IGlzIHByZXBlbmRlZCB3aXRoIGEgV09SS0RJUiBib290c3RyYXAgdGhhdCBkZWZhdWx0cyB0byAnLi8nLlxuICogV2hlbiBjdXN0b20gY29tbWFuZHMgYXJlIHByb3ZpZGVkLCB0aGV5IGFyZSBpbmplY3RlZCBiZWZvcmUvYWZ0ZXIgdGhlIHBsdWdpbidzIGNvbW1hbmRzLlxuICogQnVpbGQgY29tbWFuZHMgYXJlIG9wdGlvbmFsbHkgd3JhcHBlZCBieSBmYWlsdXJlQmVoYXZpb3IgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZHMocGx1Z2luOiBQbHVnaW4sIGN1c3RvbT86IFN0ZXBDdXN0b21pemF0aW9uLCBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyk6IHsgaW5zdGFsbENvbW1hbmRzOiBzdHJpbmdbXTsgY29tbWFuZHM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCB1c2VyQ29tbWFuZHMgPSBbXG4gICAgLi4uKGN1c3RvbT8ucHJlQ29tbWFuZHMgPz8gW10pLFxuICAgIC4uLihwbHVnaW4uY29tbWFuZHM/Lmxlbmd0aCA/IHBsdWdpbi5jb21tYW5kcyA6IFtdKSxcbiAgICAuLi4oY3VzdG9tPy5wb3N0Q29tbWFuZHMgPz8gW10pLFxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICBCT09UU1RSQVBfQ01ELFxuICAgICAgLi4uKGN1c3RvbT8ucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihwbHVnaW4uaW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihjdXN0b20/LnBvc3RJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgIF0sXG4gICAgY29tbWFuZHM6IFtCT09UU1RSQVBfQ01ELCAuLi53cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3IodXNlckNvbW1hbmRzLCBmYWlsdXJlQmVoYXZpb3IpXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcGxhaW4gZW52IHJlY29yZCB0byBDb2RlQnVpbGQncyBlbnZpcm9ubWVudFZhcmlhYmxlcyBmb3JtYXQgKFBMQUlOVEVYVCkuXG4gKi9cbmZ1bmN0aW9uIHRvQ29kZUJ1aWxkRW52VmFycyhlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGVudikubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbbmFtZSwgeyB2YWx1ZSB9XSksXG4gICk7XG59XG5cbi8qKlxuICogQnVpbGQgU0VDUkVUU19NQU5BR0VSLXR5cGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gcGx1Z2luIHNlY3JldCBkZWNsYXJhdGlvbnMuXG4gKiBVc2VzIG5hbWluZyBjb252ZW50aW9uOiBwaXBlbGluZS1idWlsZGVyL3tvcmdJZH0ve3NlY3JldE5hbWV9XG4gKiBFYWNoIG9yZyBtYW5hZ2VzIHRoZXNlIHNlY3JldHMgaW4gdGhlaXIgb3duIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKi9cbmNvbnN0IFZBTElEX1NFQ1JFVF9OQU1FID0gL15bYS16QS1aMC05L18rPS5ALV0rJC87XG5cbmZ1bmN0aW9uIHRvU2VjcmV0RW52VmFycyhcbiAgc2VjcmV0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuIH0+LFxuICBvcmdJZDogc3RyaW5nLFxuKTogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nOyB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlIH0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBzZWNyZXRzLm1hcCgoeyBuYW1lIH0pID0+IHtcbiAgICAgIGNvbnN0IHNlY3JldFBhdGggPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsIG5hbWUpO1xuICAgICAgaWYgKCFWQUxJRF9TRUNSRVRfTkFNRS50ZXN0KHNlY3JldFBhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IHBhdGggXCIke3NlY3JldFBhdGh9XCIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciBBV1MgU2VjcmV0cyBNYW5hZ2VyYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IHNlY3JldFBhdGgsXG4gICAgICAgICAgdHlwZTogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZS5TRUNSRVRTX01BTkFHRVIsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIENvZGVCdWlsZCBzdGVwIG9yIFNoZWxsIHN0ZXAgYmFzZWQgb24gcGx1Z2luIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogTWV0YWRhdGEgbWVyZ2Ugb3JkZXIgKGxhc3Qgd2lucyk6XG4gKiAgIDEuIFN0ZXAtbGV2ZWwgbWV0YWRhdGEgKGZyb20gb3B0aW9ucy5tZXRhZGF0YSlcbiAqICAgMi4gUGx1Z2luIG1ldGFkYXRhIChmcm9tIHBsdWdpbi5tZXRhZGF0YSBpbiBkYXRhYmFzZSlcbiAqXG4gKiBFbnZpcm9ubWVudCBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gUGx1Z2luIGVudiB2YXJzIChmcm9tIHBsdWdpbi5lbnYpXG4gKiAgIDIuIEN1c3RvbSBlbnYgdmFycyAoZnJvbSBvcHRpb25zLmVudilcbiAqICAgMy4gV09SS0RJUiBmcm9tIG1lcmdlZCBtZXRhZGF0YVxuICpcbiAqIENESyBwcm9wIHNwcmVhZCBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgcHJvZ3JhbW1hdGljIGRlZmF1bHRzIChpbnB1dCwgY29tbWFuZHMsIGVudiwgbmV0d29yaykg4oaSIG1ldGFkYXRhIG92ZXJyaWRlc1xuICpcbiAqIFRoaXMgbWVhbnMgbWV0YWRhdGEga2V5cyBsaWtlIGBhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYFxuICogd2lsbCBvdmVycmlkZSB0aGUgcGx1Z2luLWRlcml2ZWQgY29tbWFuZHMgd2hlbiBleHBsaWNpdGx5IHNldC5cbiAqL1xuLyoqXG4gKiBSZXNvbHZlIHRoZSBDb2RlQnVpbGQgaW1hZ2UgdG8gdXNlIGZvciBhIHBsdWdpbi5cbiAqXG4gKiBTdHJhdGVneTpcbiAqICAgMS4gSWYgdGhlIHBsdWdpbiBzZXRzIGBhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmJ1aWxkSW1hZ2VgXG4gKiAgICAgIGV4cGxpY2l0bHkgaW4gbWV0YWRhdGEsIHRoZSBtZXRhZGF0YS1idWlsZGVyIHBhc3N0aHJvdWdoIGhhbmRsZXMgaXRcbiAqICAgICAgKHZpYSBgbWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50YCkuIFRoaXMgZnVuY3Rpb24gcmV0dXJuc1xuICogICAgICBgdW5kZWZpbmVkYCBhbmQgdGhlIG1ldGFkYXRhIHdpbnMuXG4gKiAgIDIuIE90aGVyd2lzZSwgaWYgdGhlIHBsdWdpbiBoYXMgYSBgbmFtZWArYHZlcnNpb25gIEFORCB0aGUgcmVnaXN0cnlcbiAqICAgICAgY29uZmlnIGlzIHBvcHVsYXRlZCwgYnVpbGQgYSBgTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeSgpYFxuICogICAgICBpbWFnZSBwb2ludGluZyBhdCBgPHJlZ2lzdHJ5LWhvc3Q+Ojxwb3J0Pi88bnM+LzxuYW1lPjo8dmVyc2lvbj5gXG4gKiAgICAgIHdoZXJlIGA8bnM+YCBpcyBgc3lzdGVtYCBvciBgb3JnLTxvcmdJZD5gLiBDb2RlQnVpbGQgYXV0aGVudGljYXRlcyBieVxuICogICAgICBzZW5kaW5nIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBhcyBCYXNpYyBhdXRoIHRvXG4gKiAgICAgIGBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeWAncyBgL3Rva2VuYCBlbmRwb2ludDsgdGhlIEpXVCBpbiBgcGFzc3dvcmRgXG4gKiAgICAgIHJlc29sdmVzIHRvIGEgcmVnaXN0cnkgdG9rZW4gc2NvcGVkIHRvIHRoZSBvcmcuXG4gKiAgIDMuIElmIGBtZXRhZGF0YV9vbmx5YCwgcmV0dXJuIGB1bmRlZmluZWRgIHNvIENvZGVCdWlsZCB1c2VzIGl0cyBkZWZhdWx0XG4gKiAgICAgIChgc3RhbmRhcmQ6Ny4wYCkuXG4gKlxuICogYHNjb3BlYCBhbmQgYG9yZ0lkYCBhcmUgcmVxdWlyZWQ6IHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBpcyBuYW1lZFxuICogYHBpcGVsaW5lLWJ1aWxkZXIvPG9yZ0lkPi9wbGF0Zm9ybWAsIGFuZCBgU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoKWBcbiAqIG5lZWRzIGEgQ29uc3RydWN0IHRvIGFuY2hvciB0aGUgaW1wb3J0ZWQgc2VjcmV0IHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpbkltYWdlKHNjb3BlOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQsIHBsdWdpbjogUGx1Z2luLCBvcmdJZD86IHN0cmluZyk6IElCdWlsZEltYWdlIHwgdW5kZWZpbmVkIHtcbiAgLy8gYG1ldGFkYXRhX29ubHlgIHBsdWdpbnMgbGVnaXRpbWF0ZWx5IGhhdmUgbm8gaW1hZ2Ug4oCUIHRoZWlyIHdvcmsgcnVuc1xuICAvLyBpbiB0aGUgZGVmYXVsdCBDb2RlQnVpbGQgaW1hZ2UuIFF1aWV0IHNraXAuXG4gIGlmIChwbHVnaW4uYnVpbGRUeXBlID09PSAnbWV0YWRhdGFfb25seScpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgLy8gYnVpbGRfaW1hZ2UgLyBwcmVidWlsdCBwbHVnaW5zIG11c3QgaGF2ZSBuYW1lICsgdmVyc2lvbiAoREIgY29uc3RyYWludFxuICAvLyBtYWtlcyBib3RoIE5PVCBOVUxMKS4gRGVmZW5zaXZlIGNoZWNrIGluIGNhc2UgYSBtYWxmb3JtZWQgcm93IHNsaXBzIGluLlxuICBpZiAoIXBsdWdpbi5uYW1lIHx8ICFwbHVnaW4udmVyc2lvbikge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaGFzIGJ1aWxkVHlwZT0ke3BsdWdpbi5idWlsZFR5cGV9IGJ1dCBtaXNzaW5nIG5hbWUvdmVyc2lvbiDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgcnVuIG9uIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wIGFuZCB3b25cXCd0IGhhdmUgdGhlIHBsdWdpblxcJ3MgYmFrZWQgdG9vbHMuJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgcmVnaXN0cnk7XG4gIHRyeSB7XG4gICAgcmVnaXN0cnkgPSBDb25maWcuZ2V0KCdyZWdpc3RyeScpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBDb25maWcgbmFtZXNwYWNlIG5vdCBsb2FkZWQgKGUuZy4sIHVuaXQgdGVzdHMgd2l0aG91dCBmdWxsIGNvbmZpZykuXG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBuZWVkcyB0aGUgcmVnaXN0cnkgY29uZmlnIGJ1dCBpdCdzIG5vdCBsb2FkZWQg4oCUIGAgK1xuICAgICAgJ0NvZGVCdWlsZCB3aWxsIGZhbGwgYmFjayB0byBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMC4gJyArXG4gICAgICAnU2V0IElNQUdFX1JFR0lTVFJZX0hPU1QgKyBJTUFHRV9SRUdJU1RSWV9QT1JUIGluIHBpcGVsaW5lLW1hbmFnZXJcXCdzIGVudmlyb25tZW50LicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFyZWdpc3RyeT8uaG9zdCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9OiR7cGx1Z2luLnZlcnNpb259XCIgbmVlZHMgSU1BR0VfUkVHSVNUUllfSE9TVCBidXQgaXQncyBlbXB0eSDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgZmFsbCBiYWNrIHRvIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wLiAnICtcbiAgICAgICdTZXQgSU1BR0VfUkVHSVNUUllfSE9TVCBpbiBwaXBlbGluZS1tYW5hZ2VyXFwncyBlbnZpcm9ubWVudCB0byB1c2UgdGhlIHBsdWdpbiBpbWFnZS4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNjb3BlKSB7XG4gICAgbG9nLndhcm4oYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaW1hZ2UgcmVzb2x1dGlvbiBza2lwcGVkOiBubyBjb25zdHJ1Y3Qgc2NvcGUgcHJvdmlkZWRgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gUGVyLW9yZyBhdXRoIHJlcXVpcmVzIG9yZ0lkIOKAlCB0aGUgU2VjcmV0IGlzIG5hbWVkIHBlciBvcmcuXG4gIGlmICghb3JnSWQpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGltYWdlIHJlc29sdXRpb24gc2tpcHBlZDogb3JnSWQgaXMgcmVxdWlyZWQgdG8gYCArXG4gICAgICAncmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgdXNlZCBmb3IgQ29kZUJ1aWxkIEJhc2ljIGF1dGguJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBDb21wb3NlIHRoZSBpbWFnZSBVUkkuIE5hbWVzcGFjZSBieSBvd25lcnNoaXA6XG4gIC8vICAgLSBQbHVnaW5zIG93bmVkIGJ5IHRoZSBzeXN0ZW0gb3JnIOKGkiBgc3lzdGVtLzxuYW1lPjo8dmVyc2lvbj5gLlxuICAvLyAgICAgcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkncyB0b2tlbiBzZXJ2aWNlIGdyYW50cyBwdWxsIG9uIGBzeXN0ZW0vKmBcbiAgLy8gICAgIHRvIGFueSBhdXRoZW50aWNhdGVkIG9yZyB1c2VyIChyZWFkLW9ubHkgY2F0YWxvZyBvZiBzaGFyZWQgcGx1Z2lucykuXG4gIC8vICAgLSBQbHVnaW5zIG93bmVkIGJ5IGEgdGVuYW50IG9yZyDihpIgYG9yZy08b3JnSWQ+LzxuYW1lPjo8dmVyc2lvbj5gLlxuICAvLyAgICAgVGhlIHRva2VuIHNlcnZpY2UgZ3JhbnRzIHB1bGwscHVzaCBvbmx5IHRvIG1lbWJlcnMgb2YgdGhhdCBvcmcuXG4gIC8vIFRoZSBwbHVnaW4ncyBvd24gYG9yZ0lkYCAobm90IHRoZSBjYWxsZXIncykgZGVjaWRlcyB0aGUgbmFtZXNwYWNlIOKAlFxuICAvLyB0ZW5hbnQgcGlwZWxpbmVzIHB1bGxpbmcgc2hhcmVkIHN5c3RlbSBwbHVnaW5zIHN0aWxsIGdldCB0aGUgYHN5c3RlbS9gXG4gIC8vIHBhdGggYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGltYWdlIGFjdHVhbGx5IGxpdmVzLlxuICBjb25zdCBwb3J0UGFydCA9IHJlZ2lzdHJ5LnBvcnQgJiYgcmVnaXN0cnkucG9ydCAhPT0gODAgJiYgcmVnaXN0cnkucG9ydCAhPT0gNDQzXG4gICAgPyBgOiR7cmVnaXN0cnkucG9ydH1gXG4gICAgOiAnJztcbiAgY29uc3QgU1lTVEVNX09SR19JRCA9ICdzeXN0ZW0nO1xuICBjb25zdCBuYW1lc3BhY2UgPSBwbHVnaW4ub3JnSWQgPT09IFNZU1RFTV9PUkdfSURcbiAgICA/ICdzeXN0ZW0nXG4gICAgOiBgb3JnLSR7cGx1Z2luLm9yZ0lkfWA7XG4gIGNvbnN0IGltYWdlVXJpID0gYCR7cmVnaXN0cnkuaG9zdH0ke3BvcnRQYXJ0fS8ke25hbWVzcGFjZX0vJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1gO1xuXG4gIC8vIENvZGVCdWlsZCByZWFkcyBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCBhbmQgc2VuZHMgaXRzXG4gIC8vIGB1c2VybmFtZWAvYHBhc3N3b3JkYCBmaWVsZHMgYXMgSFRUUCBCYXNpYyB0byB0aGUgcmVnaXN0cnkuIFRoZVxuICAvLyByZWdpc3RyeSBjaGFsbGVuZ2VzIHdpdGggYSBCZWFyZXIgcmVhbG0gcG9pbnRpbmcgYXRcbiAgLy8gcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkncyBgL3Rva2VuYCBlbmRwb2ludDsgdGhlIERvY2tlciBjbGllbnQgZm9yd2FyZHNcbiAgLy8gdGhvc2UgY3JlZHMsIHRoZSBwYXNzd29yZCBpcyB2ZXJpZmllZCBhcyBhIHBsYXRmb3JtIEpXVCwgYW5kIGEgcmVnaXN0cnlcbiAgLy8gdG9rZW4gc2NvcGVkIHRvIHRoZSBvcmcgaXMgaXNzdWVkLlxuICAvL1xuICAvLyBTYW1lIFNlY3JldCBpcyByZWFkIGJ5IHRoZSBwbHVnaW4tbG9va3VwIExhbWJkYSAodmlhIHRoZSBgcGFzc3dvcmRgXG4gIC8vIGZpZWxkKSDigJQgb25lIFNlY3JldCBzZXJ2ZXMgYm90aCBmbG93cy5cbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsICdwbGF0Zm9ybScpO1xuICAvLyBDREsgY29uc3RydWN0IElEcyBhbGxvdyBvbmx5IFtBLVphLXowLTlfLV07IHNhbml0aXplIHRoZSBzZWNyZXQgbmFtZS5cbiAgY29uc3Qgc2VjcmV0Q29uc3RydWN0SWQgPSBgUGxhdGZvcm1DcmVkc18ke3NlY3JldE5hbWUucmVwbGFjZSgvW15BLVphLXowLTlfLV0vZywgJ18nKX1gO1xuICBjb25zdCBjcmVkZW50aWFsc1NlY3JldCA9IChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChzZWNyZXRDb25zdHJ1Y3RJZCkgYXMgU2VjcmV0IHwgdW5kZWZpbmVkKVxuICAgID8/IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHN0YWNrLCBzZWNyZXRDb25zdHJ1Y3RJZCwgc2VjcmV0TmFtZSk7XG5cbiAgcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoaW1hZ2VVcmksIHtcbiAgICBzZWNyZXRzTWFuYWdlckNyZWRlbnRpYWxzOiBjcmVkZW50aWFsc1NlY3JldCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb2RlQnVpbGRTdGVwKG9wdGlvbnM6IENvZGVCdWlsZFN0ZXBPcHRpb25zKTogU2hlbGxTdGVwIHwgQ29kZUJ1aWxkU3RlcCB8IE1hbnVhbEFwcHJvdmFsU3RlcCB7XG4gIGNvbnN0IHtcbiAgICBpZCwgaW5wdXQsIG1ldGFkYXRhLCBuZXR3b3JrLCBzY29wZSxcbiAgICBwcmVJbnN0YWxsQ29tbWFuZHMsIHBvc3RJbnN0YWxsQ29tbWFuZHMsIHByZUNvbW1hbmRzLCBwb3N0Q29tbWFuZHMsXG4gICAgZW52OiBjdXN0b21FbnYsIGFkZGl0aW9uYWxJbnB1dHMsIHRpbWVvdXQsIGZhaWx1cmVCZWhhdmlvcixcbiAgICBhcnRpZmFjdE1hbmFnZXIsIHN0YWdlTmFtZSwgc3RhZ2VBbGlhcywgcGx1Z2luQWxpYXMsIG9yZ0lkLCBwaXBlbGluZVNjb3BlLFxuICB9ID0gb3B0aW9ucztcblxuICAvLyBSZXNvbHZlIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgaW4gcGx1Z2luIHNwZWMgZmllbGRzIGFnYWluc3QgdGhlIHBpcGVsaW5lIHNjb3BlLlxuICAvLyBFdmVyeSBjYWxsIGdvZXMgdGhyb3VnaCB0aGUgcmVzb2x2ZXIg4oCUIHBsdWdpbnMgd2l0aG91dCB0ZW1wbGF0ZSB0b2tlbnMgYXJlXG4gIC8vIGEgbm8tb3AgZmFzdCBwYXRoIGluc2lkZSByZXNvbHZlUGx1Z2luVGVtcGxhdGVzKCkuXG4gIGNvbnN0IHBsdWdpbiA9IHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMob3B0aW9ucy5wbHVnaW4sIHBpcGVsaW5lU2NvcGUpO1xuXG4gIGNvbnN0IG1lcmdlZCA9IG1lcmdlKG1ldGFkYXRhID8/IHt9LCBwbHVnaW4ubWV0YWRhdGEgPz8ge30pO1xuXG4gIC8vIE1hbnVhbEFwcHJvdmFsU3RlcDogbm8gY29tbWFuZHMsIGVudiwgY29tcHV0ZSwgb3IgbmV0d29yayDigJQganVzdCBpZCArIG9wdGlvbmFsIGNvbW1lbnRcbiAgaWYgKHBsdWdpbi5wbHVnaW5UeXBlID09PSBQbHVnaW5UeXBlLk1BTlVBTF9BUFBST1ZBTF9TVEVQKSB7XG4gICAgcmV0dXJuIG5ldyBNYW51YWxBcHByb3ZhbFN0ZXAoaWQsIHtcbiAgICAgIGNvbW1lbnQ6IHR5cGVvZiBtZXJnZWQuQVBQUk9WQUxfQ09NTUVOVCA9PT0gJ3N0cmluZycgPyBtZXJnZWQuQVBQUk9WQUxfQ09NTUVOVCA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnW0NyZWF0ZUNvZGVCdWlsZFN0ZXBdIEJ1aWxkaW5nIHN0ZXAgd2l0aCBtZXJnZWQgbWV0YWRhdGEnKTtcblxuICAvLyBXYXJuIGFib3V0IHJlcXVpcmVkIHNlY3JldHMgd2l0aG91dCBvcmdJZCAoY2FuJ3QgcmVzb2x2ZSlcbiAgY29uc3QgcmVxdWlyZWRTZWNyZXRzID0gcGx1Z2luLnNlY3JldHM/LmZpbHRlcihzID0+IHMucmVxdWlyZWQpID8/IFtdO1xuICBpZiAocmVxdWlyZWRTZWNyZXRzLmxlbmd0aCA+IDAgJiYgIW9yZ0lkKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBkZWNsYXJlcyAke3JlcXVpcmVkU2VjcmV0cy5sZW5ndGh9IHJlcXVpcmVkIHNlY3JldChzKSBidXQgbm8gb3JnSWQgaXMgYXZhaWxhYmxlLiBgICtcbiAgICAgIGBTZWNyZXRzIHdpbGwgbm90IGJlIGluamVjdGVkOiAke3JlcXVpcmVkU2VjcmV0cy5tYXAocyA9PiBzLm5hbWUpLmpvaW4oJywgJyl9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBwbHVnaW4gc2VjcmV0cyBhcyBTRUNSRVRTX01BTkFHRVIgZW52IHZhcnNcbiAgY29uc3Qgc2VjcmV0RW52VmFycyA9IChwbHVnaW4uc2VjcmV0cz8ubGVuZ3RoICYmIG9yZ0lkKVxuICAgID8gdG9TZWNyZXRFbnZWYXJzKHBsdWdpbi5zZWNyZXRzLCBvcmdJZClcbiAgICA6IHt9O1xuXG4gIGNvbnN0IGVudiA9IGJ1aWxkRW52KHBsdWdpbiwgbWVyZ2VkLCBjdXN0b21FbnYpO1xuXG4gIC8vIENvZGVQaXBlbGluZSByZXNvbHZlZCB2YXJpYWJsZXMg4oCUIG11c3QgYmUgaW4gQ29kZUJ1aWxkU3RlcC5lbnYgKGFjdGlvbi1sZXZlbCksXG4gIC8vIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKVxuICBjb25zdCBhY3Rpb25FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgUElQRUxJTkVfRVhFQ1VUSU9OX0lEOiAnI3tjb2RlcGlwZWxpbmUuUGlwZWxpbmVFeGVjdXRpb25JZH0nLFxuICB9O1xuXG4gIGNvbnN0IG91dHB1dERpciA9IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5O1xuICBjb25zdCBlbnN1cmVPdXRwdXREaXIgPSAob3V0cHV0RGlyICYmICFvdXRwdXREaXIuaW5jbHVkZXMoJyonKSlcbiAgICA/IFtgbWtkaXIgLXAgXCIke291dHB1dERpcn1cIiAmJiB0b3VjaCBcIiR7b3V0cHV0RGlyfS8uZ2l0a2VlcFwiYF1cbiAgICA6IFtdO1xuXG4gIGNvbnN0IHsgaW5zdGFsbENvbW1hbmRzLCBjb21tYW5kcyB9ID0gYnVpbGRDb21tYW5kcyhwbHVnaW4sIHtcbiAgICBwcmVJbnN0YWxsQ29tbWFuZHM6IFsuLi5lbnN1cmVPdXRwdXREaXIsIC4uLihwcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10pXSxcbiAgICBwb3N0SW5zdGFsbENvbW1hbmRzLFxuICAgIHByZUNvbW1hbmRzLFxuICAgIHBvc3RDb21tYW5kcyxcbiAgfSwgZmFpbHVyZUJlaGF2aW9yKTtcblxuICBjb25zdCBwcm9ncmFtbWF0aWMgPSB7IGlucHV0LCBpbnN0YWxsQ29tbWFuZHMsIGNvbW1hbmRzIH07XG5cbiAgLy8gUmVzb2x2ZSB0aGUgcGx1Z2luJ3MgcnVudGltZSBpbWFnZS4gQ29kZUJ1aWxkIGRlZmF1bHRzIHRvXG4gIC8vIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMGAgd2hlbiBubyBgYnVpbGRJbWFnZWAgaXMgc2V0IOKAlCB0aGF0J3MgdGhlXG4gIC8vIEFXUy1tYW5hZ2VkIFVidW50dSBpbWFnZSBhbmQgRE9FUyBOT1QgaGF2ZSBhbnkgcGx1Z2luLWJha2VkIHRvb2xzXG4gIC8vIChwaXBlbGluZS1tYW5hZ2VyLCBzbnlrLCB0ZXJyYWZvcm0sIGV0Yy4pLiBXaXJpbmcgdGhlIHBsdWdpbidzIGltYWdlXG4gIC8vIGhlcmUgbWVhbnMgQ29kZUJ1aWxkIHB1bGxzIGZyb20gb3VyIHByaXZhdGUgcmVnaXN0cnkgYW5kIHRoZSB0b29sc1xuICAvLyBpbnN0YWxsZWQgaW4gdGhlIHBsdWdpbidzIERvY2tlcmZpbGUgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZS5cbiAgY29uc3QgcGx1Z2luQnVpbGRJbWFnZSA9IHJlc29sdmVQbHVnaW5JbWFnZShzY29wZSwgcGx1Z2luLCBvcmdJZCk7XG5cbiAgLy8gU2hlbGxTdGVwIGJyYW5jaC5cbiAgLy8gU2hlbGxTdGVwIGl0c2VsZiBkb2Vzbid0IGFjY2VwdCBgYnVpbGRFbnZpcm9ubWVudGAvYGJ1aWxkSW1hZ2VgLiBDREtcbiAgLy8gcGlwZWxpbmVzIHdyYXBzIFNoZWxsU3RlcHMgaW4gYSBkZWZhdWx0IENvZGVCdWlsZCBhY3Rpb24gdGhhdCBydW5zIG9uXG4gIC8vIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMGAg4oCUIHdoaWNoIHdvbid0IGhhdmUgdGhlIHBsdWdpbidzIHRvb2xzLlxuICAvL1xuICAvLyBTbyB3aGVuIGEgU0hFTExfU1RFUCBwbHVnaW4gRE9FUyBoYXZlIGFuIGltYWdlIChiZWNhdXNlIGl0cyBhdXRob3JcbiAgLy8gYmFrZWQgdG9vbHMgaW50byBhIERvY2tlcmZpbGUpLCB3ZSBQUk9NT1RFIGl0IHRvIGEgQ29kZUJ1aWxkU3RlcCB3aXRoXG4gIC8vIHRoZSByZXNvbHZlZCBpbWFnZS4gVGhlIHBsdWdpbiBhdXRob3IncyBpbnRlbnQgKFwidXNlIG15IGJha2VkIHRvb2xzXCIpXG4gIC8vIGlzIHByZXNlcnZlZCB3aXRob3V0IGZvcmNpbmcgdGhlbSB0byBjaGFuZ2UgcGx1Z2luVHlwZS5cbiAgLy9cbiAgLy8gV2hlbiB0aGUgcGx1Z2luIGhhcyBubyBpbWFnZSAob3IgcmVnaXN0cnkgaXNuJ3QgY29uZmlndXJlZCksIHdlIGtlZXBcbiAgLy8gdGhlIG9yaWdpbmFsIFNoZWxsU3RlcCDigJQgaXQncyBsaWdodGVyIHdlaWdodCBhbmQgdGhlIGRlZmF1bHRcbiAgLy8gQ29kZUJ1aWxkIGltYWdlIGlzIGZpbmUuXG4gIGlmIChwbHVnaW4ucGx1Z2luVHlwZSA9PT0gUGx1Z2luVHlwZS5TSEVMTF9TVEVQKSB7XG4gICAgaWYgKCFwbHVnaW5CdWlsZEltYWdlKSB7XG4gICAgICByZXR1cm4gbmV3IFNoZWxsU3RlcChpZCwge1xuICAgICAgICAuLi5wcm9ncmFtbWF0aWMsXG4gICAgICAgIGVudjogeyAuLi5lbnYsIC4uLmFjdGlvbkVudiB9LFxuICAgICAgICAuLi5tZXRhZGF0YUZvclNoZWxsU3RlcChtZXJnZWQpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgW0NyZWF0ZUNvZGVCdWlsZFN0ZXBdIFNIRUxMX1NURVAgcGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBoYXMgYSByZWdpc3RyeSBpbWFnZSDigJQgcHJvbW90aW5nIHRvIENvZGVCdWlsZFN0ZXAgc28gdGhlIHBsdWdpbiBpbWFnZSBpcyBhY3R1YWxseSB1c2VkYCk7XG4gICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSBDb2RlQnVpbGRTdGVwIHBhdGggYmVsb3cuXG4gIH1cblxuICBjb25zdCBjb21wdXRlVHlwZSA9IGdldENvbXB1dGVUeXBlKFxuICAgIHBsdWdpbi5jb21wdXRlVHlwZSA/PyBvcHRpb25zLmRlZmF1bHRDb21wdXRlVHlwZSA/PyAnU01BTEwnLFxuICApO1xuXG4gIGNvbnN0IG5ldHdvcmtQcm9wcyA9IG5ldHdvcmtcbiAgICA/IHJlc29sdmVOZXR3b3JrKHNjb3BlLCBvcHRpb25zLnVuaXF1ZUlkLCBuZXR3b3JrKVxuICAgIDoge307XG5cbiAgLy8gTWV0YWRhdGEgc3ByZWFkIGxhc3Qgc28gaXQgY2FuIG92ZXJyaWRlIHByb2dyYW1tYXRpYyBkZWZhdWx0cy5cbiAgLy8gTk9URTogQ2FjaGluZyBpcyBzdXBwb3J0ZWQgdmlhIHR3byBtZXRhZGF0YSBwYXRoczpcbiAgLy8gICAxLiBNZXRhZGF0YUtleXMuQ0FDSEUgKCdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNhY2hlJykg4oCUIHBhc3NlZCBkaXJlY3RseVxuICAvLyAgICAgIGFzIHRoZSBDb2RlQnVpbGRTdGVwIGBjYWNoZWAgcHJvcCAoZXhwZWN0cyBhIGNvZGVidWlsZC5DYWNoZSBvYmplY3QpLlxuICAvLyAgIDIuIE1ldGFkYXRhS2V5cy5QQVJUSUFMX0JVSUxEX1NQRUMgKCdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnBhcnRpYWxidWlsZHNwZWMnKVxuICAvLyAgICAgIOKAlCBwYXNzZWQgYXMgYHBhcnRpYWxCdWlsZFNwZWNgLCB3aGljaCBjYW4gaW5jbHVkZSBhIGBjYWNoZTpgIHNlY3Rpb24gZm9yXG4gIC8vICAgICAgUzMgb3IgbG9jYWwgY2FjaGluZyAoZS5nLiwgQnVpbGRTcGVjLmZyb21PYmplY3QoeyBjYWNoZTogeyBwYXRoczogWy4uLl0gfSB9KSkuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgQ29kZUJ1aWxkU3RlcChpZCwge1xuICAgIC4uLnByb2dyYW1tYXRpYyxcbiAgICAuLi5uZXR3b3JrUHJvcHMsXG4gICAgLi4uKGFkZGl0aW9uYWxJbnB1dHMgJiYgeyBhZGRpdGlvbmFsSW5wdXRzIH0pLFxuICAgIC4uLih0aW1lb3V0ICYmIHsgdGltZW91dDogRHVyYXRpb24ubWludXRlcyh0aW1lb3V0KSB9KSxcbiAgICBlbnY6IGFjdGlvbkVudixcbiAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSA/PyB1bmRlZmluZWQsXG4gICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgY29tcHV0ZVR5cGUsXG4gICAgICAuLi4ocGx1Z2luQnVpbGRJbWFnZSAmJiB7IGJ1aWxkSW1hZ2U6IHBsdWdpbkJ1aWxkSW1hZ2UgfSksXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAuLi50b0NvZGVCdWlsZEVudlZhcnMoZW52KSxcbiAgICAgICAgLi4uc2VjcmV0RW52VmFycyxcbiAgICAgIH0sXG4gICAgICAuLi5tZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnQobWVyZ2VkKSxcbiAgICB9LFxuICAgIC4uLm1ldGFkYXRhRm9yQ29kZUJ1aWxkU3RlcChtZXJnZWQpLFxuICB9KTtcblxuICAvLyBSZWdpc3RlciB3aXRoIGFydGlmYWN0IG1hbmFnZXIgaWYgcHJpbWFyeU91dHB1dERpcmVjdG9yeSBpcyBzZXRcbiAgaWYgKHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5ICYmIGFydGlmYWN0TWFuYWdlciAmJiBzdGFnZU5hbWUpIHtcbiAgICBjb25zdCBhcnRpZmFjdEtleTogQXJ0aWZhY3RLZXkgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUFsaWFzOiBzdGFnZUFsaWFzID8/IGAke3N0YWdlTmFtZX0tYWxpYXNgLFxuICAgICAgcGx1Z2luTmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICBwbHVnaW5BbGlhczogcGx1Z2luQWxpYXMgPz8gYCR7cGx1Z2luLm5hbWV9LWFsaWFzYCxcbiAgICAgIG91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnksXG4gICAgfTtcbiAgICBhcnRpZmFjdE1hbmFnZXIuYWRkKGFydGlmYWN0S2V5LCBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIG9yIENvbXB1dGVUeXBlIGVudW0gdG8gQ0RLIENvbXB1dGVUeXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlVHlwZShpbnB1dDogc3RyaW5nIHwgQ0RLQ29tcHV0ZVR5cGUgPSAnU01BTEwnKTogQ0RLQ29tcHV0ZVR5cGUge1xuICAvLyBJZiBhbHJlYWR5IGEgQ0RLIENvbXB1dGVUeXBlLCByZXR1cm4gYXMtaXNcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXQudG9VcHBlckNhc2UoKSBhcyBDb21wdXRlVHlwZTtcblxuICBjb25zdCBtYXBwaW5nOiBSZWNvcmQ8Q29tcHV0ZVR5cGUsIENES0NvbXB1dGVUeXBlPiA9IHtcbiAgICBbQ29tcHV0ZVR5cGUuU01BTExdOiBDREtDb21wdXRlVHlwZS5TTUFMTCxcbiAgICBbQ29tcHV0ZVR5cGUuTUVESVVNXTogQ0RLQ29tcHV0ZVR5cGUuTUVESVVNLFxuICAgIFtDb21wdXRlVHlwZS5MQVJHRV06IENES0NvbXB1dGVUeXBlLkxBUkdFLFxuICAgIFtDb21wdXRlVHlwZS5YMl9MQVJHRV06IENES0NvbXB1dGVUeXBlLlgyX0xBUkdFLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IG1hcHBpbmdbbm9ybWFsaXplZF07XG4gIGlmICghcmVzdWx0KSB7XG4gICAgbG9nLndhcm4oYFVua25vd24gY29tcHV0ZSB0eXBlIFwiJHtpbnB1dH1cIiwgZmFsbGluZyBiYWNrIHRvIFNNQUxMYCk7XG4gICAgcmV0dXJuIENES0NvbXB1dGVUeXBlLlNNQUxMO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGxldHRlcnMgb3IgbnVtYmVycyB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBzdHJpbmcgdG8gcHJvY2Vzc1xuICogQHBhcmFtIHJlcGxhY2VWYWx1ZSAtIFRoZSBjaGFyYWN0ZXIocykgdG8gcmVwbGFjZSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd2l0aCAoZGVmYXVsdDogJ18nKVxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyByZXBsYWNlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZU5vbkFscGhhbnVtZXJpYyhpbnB1dDogc3RyaW5nLCByZXBsYWNlVmFsdWU6IHN0cmluZyA9ICdfJyk6IHN0cmluZyB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgcmVwbGFjZVZhbHVlKTtcbn1cblxuLyoqXG4gKiBVbndyYXAgYSBTZWNyZXRWYWx1ZSB8IHN0cmluZyBpbnRvIGEgcGxhaW4gc3RyaW5nLlxuICogV2hlbiBhIFNlY3JldFZhbHVlIGlzIHByb3ZpZGVkIChlLmcuIGZyb20gU2VjcmV0cyBNYW5hZ2VyKSwgY2FsbHMgdW5zYWZlVW53cmFwKClcbiAqIHRvIGV4dHJhY3QgdGhlIHVuZGVybHlpbmcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBTZWNyZXQodmFsdWU6IFNlY3JldFZhbHVlIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IHZhbHVlLnVuc2FmZVVud3JhcCgpO1xufVxuIl19
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BpcGVsaW5lLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBc0J0QyxzQkFFQztBQVNELGdEQVFDO0FBa0pELGdEQXVGQztBQTJDRCw0REErREM7QUFFRCxrREE0SUM7QUFLRCx3Q0FxQkM7QUFRRCx3REFFQztBQU9ELG9DQUVDO0FBcmpCRCx5REFBMEQ7QUFFMUQsNkNBQTJEO0FBQzNELDZEQUFzSTtBQUN0SSx1RUFBd0Q7QUFDeEQscURBQXFGO0FBR3JGLHlEQUFpSDtBQUNqSCx1Q0FBMkM7QUFDM0MscURBQThGO0FBQzlGLHFEQUE2RDtBQUU3RCxpRUFBcUU7QUFFckUsTUFBTSxHQUFHLEdBQUcsSUFBQSx1QkFBWSxFQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxTQUFnQixLQUFLLENBQUMsR0FBRyxPQUFxQztJQUM1RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFpQixDQUFDO0FBQ3ZELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxRQUFzQjtJQUN2RCxNQUFNLEdBQUcsR0FBMkIsRUFBRSxDQUFDO0lBQ3ZDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsb0NBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3pDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FB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QUFDO0FBQ3RELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEtBQTJCO0lBQ3RELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgU2VjcmV0VmFsdWUsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSwgQ29tcHV0ZVR5cGUgYXMgQ0RLQ29tcHV0ZVR5cGUsIExpbnV4QnVpbGRJbWFnZSwgSUJ1aWxkSW1hZ2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBDb2RlQnVpbGRTdGVwLCBNYW51YWxBcHByb3ZhbFN0ZXAsIFNoZWxsU3RlcCB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBBcnRpZmFjdEtleSB9IGZyb20gJy4vYXJ0aWZhY3QtbWFuYWdlcic7XG5pbXBvcnQgeyBtZXRhZGF0YUZvclNoZWxsU3RlcCwgbWV0YWRhdGFGb3JDb2RlQnVpbGRTdGVwLCBtZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnQgfSBmcm9tICcuL21ldGFkYXRhLWJ1aWxkZXInO1xuaW1wb3J0IHsgcmVzb2x2ZU5ldHdvcmsgfSBmcm9tICcuL25ldHdvcmsnO1xuaW1wb3J0IHsgUGx1Z2luVHlwZSwgQ29tcHV0ZVR5cGUsIE1ldGFEYXRhVHlwZSwgQ0RLX01FVEFEQVRBX1BSRUZJWCB9IGZyb20gJy4vcGlwZWxpbmUtdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGRTdGVwT3B0aW9ucywgU3RlcEN1c3RvbWl6YXRpb24gfSBmcm9tICcuLi9waXBlbGluZS9zdGVwLXR5cGVzJztcbmltcG9ydCB7IHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMgfSBmcm9tICcuLi90ZW1wbGF0ZS9wbHVnaW4tcmVzb2x2ZXInO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3BpcGVsaW5lLWhlbHBlcnMnKTtcblxuLyoqXG4gKiBNZXJnZSBtdWx0aXBsZSBtZXRhZGF0YSBvYmplY3RzIGludG8gb25lLiBMYXRlciBzb3VyY2VzIG92ZXJyaWRlIGVhcmxpZXIgb25lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKC4uLnNvdXJjZXM6IEFycmF5PFBhcnRpYWw8TWV0YURhdGFUeXBlPj4pOiBNZXRhRGF0YVR5cGUge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgLi4uc291cmNlcykgYXMgTWV0YURhdGFUeXBlO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgbm9uLW5hbWVzcGFjZWQgbWV0YWRhdGEga2V5cyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdHJpbmdzLlxuICogS2V5cyBzdGFydGluZyB3aXRoICdhd3M6Y2RrOicgYXJlIHJlc2VydmVkIGZvciBDREsgY29uc3RydWN0IHByb3BzXG4gKiAocHJvY2Vzc2VkIGJ5IG1ldGFkYXRhIGV4dHJhY3Rpb24gZnVuY3Rpb25zKSBhbmQgYXJlIGV4Y2x1ZGVkIGhlcmUuXG4gKlxuICogQWxsIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIHN0cmluZ3MgZm9yIENvZGVCdWlsZCBjb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1ldGFkYXRhRW52KG1ldGFkYXRhOiBNZXRhRGF0YVR5cGUpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoQ0RLX01FVEFEQVRBX1BSRUZJWCkpIHtcbiAgICAgIGVudltrZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudjtcbn1cblxuLyoqXG4gKiBCdWlsZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gY29uZmlnLCBtZXJnZWQgbWV0YWRhdGEsIGFuZCBjdXN0b20gZW52LlxuICpcbiAqIE1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBwbHVnaW4uZW52IOKAlCBwbHVnaW4gZGVmYXVsdCBlbnYgdmFycyAobG93ZXN0IHByaW9yaXR5KVxuICogICAyLiBub24tbmFtZXNwYWNlZCBtZXRhZGF0YSBrZXlzIOKAlCBlLmcuIFBZVEhPTl9WRVJTSU9OLCBXT1JLRElSXG4gKiAgIDMuIGN1c3RvbUVudiDigJQgcGVyLXN0ZXAgY3VzdG9tIGVudiB2YXJzIChoaWdoZXN0IHByaW9yaXR5KVxuICovXG5jb25zdCBCT09UU1RSQVBfQ01EID0gJ2V4cG9ydCBXT1JLRElSPSR7V09SS0RJUjotLi99OyBjZCAke1dPUktESVJ9JztcblxuZnVuY3Rpb24gYnVpbGRFbnYocGx1Z2luOiBQbHVnaW4sIG1ldGFkYXRhOiBNZXRhRGF0YVR5cGUsIGN1c3RvbUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi4ocGx1Z2luLmVudiA/PyB7fSksXG4gICAgLi4uZXh0cmFjdE1ldGFkYXRhRW52KG1ldGFkYXRhKSxcbiAgICAuLi4oY3VzdG9tRW52ID8/IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXcmFwIGJ1aWxkIGNvbW1hbmRzIGJhc2VkIG9uIGZhaWx1cmUgYmVoYXZpb3IuXG4gKiAtICdmYWlsJyAoZGVmYXVsdCk6IE5vIHdyYXBwaW5nIOKAlCBjb21tYW5kcyBmYWlsIHRoZSBwaXBlbGluZSBuYXR1cmFsbHkuXG4gKiAtICd3YXJuJzogUnVuIGNvbW1hbmRzIHdpdGggYHNldCArZWAsIGNhcHR1cmUgZmFpbHVyZXMsIGxvZyB3YXJuaW5ncywgY29udGludWUuXG4gKiAtICdpZ25vcmUnOiBBcHBlbmQgYHx8IHRydWVgIHRvIGVhY2ggY29tbWFuZCDigJQgZmFpbHVyZXMgYXJlIHNpbGVudGx5IHN3YWxsb3dlZC5cbiAqXG4gKiBPbmx5IGFwcGxpZWQgdG8gYnVpbGQgY29tbWFuZHMsIG5vdCBpbnN0YWxsIGNvbW1hbmRzIChpbnN0YWxsIGZhaWx1cmVzIHNob3VsZCBhbHdheXMgc3RvcCB0aGUgYnVpbGQpLlxuICovXG5mdW5jdGlvbiB3cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3IoY29tbWFuZHM6IHN0cmluZ1tdLCBiZWhhdmlvcj86ICdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnKTogc3RyaW5nW10ge1xuICBpZiAoIWJlaGF2aW9yIHx8IGJlaGF2aW9yID09PSAnZmFpbCcpIHJldHVybiBjb21tYW5kcztcblxuICBpZiAoYmVoYXZpb3IgPT09ICdpZ25vcmUnKSB7XG4gICAgcmV0dXJuIGNvbW1hbmRzLm1hcChjbWQgPT4gYCR7Y21kfSB8fCB0cnVlYCk7XG4gIH1cblxuICAvLyAnd2Fybic6IHJ1biBhbGwgY29tbWFuZHMsIGNhcHR1cmUgZmFpbHVyZXMsIGJ1dCBkb24ndCBzdG9wXG4gIHJldHVybiBbXG4gICAgJ3NldCArZScsXG4gICAgJ19TVEVQX0VYSVQ9MCcsXG4gICAgLi4uY29tbWFuZHMubWFwKGNtZCA9PiBgJHtjbWR9IHx8IHsgZWNobyBcIldBUk5JTkc6IENvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICQ/XCI7IF9TVEVQX0VYSVQ9MTsgfWApLFxuICAgICdzZXQgLWUnLFxuICAgICdpZiBbIFwiJF9TVEVQX0VYSVRcIiAtbmUgMCBdOyB0aGVuIGVjaG8gXCJXQVJOSU5HOiBPbmUgb3IgbW9yZSBjb21tYW5kcyBpbiB0aGlzIHN0ZXAgZmFpbGVkXCI7IGZpJyxcbiAgXTtcbn1cblxuLyoqXG4gKiBCdWlsZCBib290c3RyYXAtcHJlZml4ZWQgaW5zdGFsbCBhbmQgYnVpbGQgY29tbWFuZHMgZnJvbSBwbHVnaW4gY29uZmlnLlxuICogRWFjaCBjb21tYW5kIGxpc3QgaXMgcHJlcGVuZGVkIHdpdGggYSBXT1JLRElSIGJvb3RzdHJhcCB0aGF0IGRlZmF1bHRzIHRvICcuLycuXG4gKiBXaGVuIGN1c3RvbSBjb21tYW5kcyBhcmUgcHJvdmlkZWQsIHRoZXkgYXJlIGluamVjdGVkIGJlZm9yZS9hZnRlciB0aGUgcGx1Z2luJ3MgY29tbWFuZHMuXG4gKiBCdWlsZCBjb21tYW5kcyBhcmUgb3B0aW9uYWxseSB3cmFwcGVkIGJ5IGZhaWx1cmVCZWhhdmlvciBsb2dpYy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21tYW5kcyhwbHVnaW46IFBsdWdpbiwgY3VzdG9tPzogU3RlcEN1c3RvbWl6YXRpb24sIGZhaWx1cmVCZWhhdmlvcj86ICdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnKTogeyBpbnN0YWxsQ29tbWFuZHM6IHN0cmluZ1tdOyBjb21tYW5kczogc3RyaW5nW10gfSB7XG4gIGNvbnN0IHVzZXJDb21tYW5kcyA9IFtcbiAgICAuLi4oY3VzdG9tPy5wcmVDb21tYW5kcyA/PyBbXSksXG4gICAgLi4uKHBsdWdpbi5jb21tYW5kcz8ubGVuZ3RoID8gcGx1Z2luLmNvbW1hbmRzIDogW10pLFxuICAgIC4uLihjdXN0b20/LnBvc3RDb21tYW5kcyA/PyBbXSksXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgIEJPT1RTVFJBUF9DTUQsXG4gICAgICAuLi4oY3VzdG9tPy5wcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgICAgLi4uKHBsdWdpbi5pbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgICAgLi4uKGN1c3RvbT8ucG9zdEluc3RhbGxDb21tYW5kcyA/PyBbXSksXG4gICAgXSxcbiAgICBjb21tYW5kczogW0JPT1RTVFJBUF9DTUQsIC4uLndyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvcih1c2VyQ29tbWFuZHMsIGZhaWx1cmVCZWhhdmlvcildLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBwbGFpbiBlbnYgcmVjb3JkIHRvIENvZGVCdWlsZCdzIGVudmlyb25tZW50VmFyaWFibGVzIGZvcm1hdCAoUExBSU5URVhUKS5cbiAqL1xuZnVuY3Rpb24gdG9Db2RlQnVpbGRFbnZWYXJzKGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZW52KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCB7IHZhbHVlIH1dKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBTRUNSRVRTX01BTkFHRVItdHlwZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gc2VjcmV0IGRlY2xhcmF0aW9ucy5cbiAqIFVzZXMgbmFtaW5nIGNvbnZlbnRpb246IHBpcGVsaW5lLWJ1aWxkZXIve29yZ0lkfS97c2VjcmV0TmFtZX1cbiAqIEVhY2ggb3JnIG1hbmFnZXMgdGhlc2Ugc2VjcmV0cyBpbiB0aGVpciBvd24gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqL1xuY29uc3QgVkFMSURfU0VDUkVUX05BTUUgPSAvXlthLXpBLVowLTkvXys9LkAtXSskLztcblxuZnVuY3Rpb24gdG9TZWNyZXRFbnZWYXJzKFxuICBzZWNyZXRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcmVxdWlyZWQ6IGJvb2xlYW4gfT4sXG4gIG9yZ0lkOiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIHNlY3JldHMubWFwKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgY29uc3Qgc2VjcmV0UGF0aCA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgbmFtZSk7XG4gICAgICBpZiAoIVZBTElEX1NFQ1JFVF9OQU1FLnRlc3Qoc2VjcmV0UGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgcGF0aCBcIiR7c2VjcmV0UGF0aH1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgZm9yIEFXUyBTZWNyZXRzIE1hbmFnZXJgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogc2VjcmV0UGF0aCxcbiAgICAgICAgICB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLlNFQ1JFVFNfTUFOQUdFUixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSksXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgQ29kZUJ1aWxkIHN0ZXAgb3IgU2hlbGwgc3RlcCBiYXNlZCBvbiBwbHVnaW4gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBNZXRhZGF0YSBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gU3RlcC1sZXZlbCBtZXRhZGF0YSAoZnJvbSBvcHRpb25zLm1ldGFkYXRhKVxuICogICAyLiBQbHVnaW4gbWV0YWRhdGEgKGZyb20gcGx1Z2luLm1ldGFkYXRhIGluIGRhdGFiYXNlKVxuICpcbiAqIEVudmlyb25tZW50IG1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBQbHVnaW4gZW52IHZhcnMgKGZyb20gcGx1Z2luLmVudilcbiAqICAgMi4gQ3VzdG9tIGVudiB2YXJzIChmcm9tIG9wdGlvbnMuZW52KVxuICogICAzLiBXT1JLRElSIGZyb20gbWVyZ2VkIG1ldGFkYXRhXG4gKlxuICogQ0RLIHByb3Agc3ByZWFkIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICBwcm9ncmFtbWF0aWMgZGVmYXVsdHMgKGlucHV0LCBjb21tYW5kcywgZW52LCBuZXR3b3JrKSDihpIgbWV0YWRhdGEgb3ZlcnJpZGVzXG4gKlxuICogVGhpcyBtZWFucyBtZXRhZGF0YSBrZXlzIGxpa2UgYGF3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6Y29tbWFuZHNgXG4gKiB3aWxsIG92ZXJyaWRlIHRoZSBwbHVnaW4tZGVyaXZlZCBjb21tYW5kcyB3aGVuIGV4cGxpY2l0bHkgc2V0LlxuICovXG4vKipcbiAqIFJlc29sdmUgdGhlIENvZGVCdWlsZCBpbWFnZSB0byB1c2UgZm9yIGEgcGx1Z2luLlxuICpcbiAqIFN0cmF0ZWd5OlxuICogICAxLiBJZiB0aGUgcGx1Z2luIHNldHMgYGF3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6YnVpbGRJbWFnZWBcbiAqICAgICAgZXhwbGljaXRseSBpbiBtZXRhZGF0YSwgdGhlIG1ldGFkYXRhLWJ1aWxkZXIgcGFzc3Rocm91Z2ggaGFuZGxlcyBpdFxuICogICAgICAodmlhIGBtZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnRgKS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zXG4gKiAgICAgIGB1bmRlZmluZWRgIGFuZCB0aGUgbWV0YWRhdGEgd2lucy5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiB0aGUgcGx1Z2luIGhhcyBhIGBuYW1lYCtgdmVyc2lvbmAgQU5EIHRoZSByZWdpc3RyeVxuICogICAgICBjb25maWcgaXMgcG9wdWxhdGVkLCBidWlsZCBhIGBMaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KClgXG4gKiAgICAgIGltYWdlIHBvaW50aW5nIGF0IGA8cmVnaXN0cnktaG9zdD46PHBvcnQ+Lzxucz4vPG5hbWU+Ojx2ZXJzaW9uPmBcbiAqICAgICAgd2hlcmUgYDxucz5gIGlzIGBzeXN0ZW1gIG9yIGBvcmctPG9yZ0lkPmAuIENvZGVCdWlsZCBhdXRoZW50aWNhdGVzIGJ5XG4gKiAgICAgIHNlbmRpbmcgdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGFzIEJhc2ljIGF1dGggdG9cbiAqICAgICAgYHBpcGVsaW5lLWltYWdlLXJlZ2lzdHJ5YCdzIGAvdG9rZW5gIGVuZHBvaW50OyB0aGUgSldUIGluIGBwYXNzd29yZGBcbiAqICAgICAgcmVzb2x2ZXMgdG8gYSByZWdpc3RyeSB0b2tlbiBzY29wZWQgdG8gdGhlIG9yZy5cbiAqICAgMy4gSWYgYG1ldGFkYXRhX29ubHlgLCByZXR1cm4gYHVuZGVmaW5lZGAgc28gQ29kZUJ1aWxkIHVzZXMgaXRzIGRlZmF1bHRcbiAqICAgICAgKGBzdGFuZGFyZDo3LjBgKS5cbiAqXG4gKiBgc2NvcGVgIGFuZCBgb3JnSWRgIGFyZSByZXF1aXJlZDogdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGlzIG5hbWVkXG4gKiBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCwgYW5kIGBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMigpYFxuICogbmVlZHMgYSBDb25zdHJ1Y3QgdG8gYW5jaG9yIHRoZSBpbXBvcnRlZCBzZWNyZXQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGx1Z2luSW1hZ2Uoc2NvcGU6IENvbnN0cnVjdCB8IHVuZGVmaW5lZCwgcGx1Z2luOiBQbHVnaW4sIG9yZ0lkPzogc3RyaW5nKTogSUJ1aWxkSW1hZ2UgfCB1bmRlZmluZWQge1xuICAvLyBgbWV0YWRhdGFfb25seWAgcGx1Z2lucyBsZWdpdGltYXRlbHkgaGF2ZSBubyBpbWFnZSDigJQgdGhlaXIgd29yayBydW5zXG4gIC8vIGluIHRoZSBkZWZhdWx0IENvZGVCdWlsZCBpbWFnZS4gUXVpZXQgc2tpcC5cbiAgaWYgKHBsdWdpbi5idWlsZFR5cGUgPT09ICdtZXRhZGF0YV9vbmx5JykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBidWlsZF9pbWFnZSAvIHByZWJ1aWx0IHBsdWdpbnMgbXVzdCBoYXZlIG5hbWUgKyB2ZXJzaW9uIChEQiBjb25zdHJhaW50XG4gIC8vIG1ha2VzIGJvdGggTk9UIE5VTEwpLiBEZWZlbnNpdmUgY2hlY2sgaW4gY2FzZSBhIG1hbGZvcm1lZCByb3cgc2xpcHMgaW4uXG4gIGlmICghcGx1Z2luLm5hbWUgfHwgIXBsdWdpbi52ZXJzaW9uKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBoYXMgYnVpbGRUeXBlPSR7cGx1Z2luLmJ1aWxkVHlwZX0gYnV0IG1pc3NpbmcgbmFtZS92ZXJzaW9uIOKAlCBgICtcbiAgICAgICdDb2RlQnVpbGQgd2lsbCBydW4gb24gYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjAgYW5kIHdvblxcJ3QgaGF2ZSB0aGUgcGx1Z2luXFwncyBiYWtlZCB0b29scy4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCByZWdpc3RyeTtcbiAgdHJ5IHtcbiAgICByZWdpc3RyeSA9IENvbmZpZy5nZXQoJ3JlZ2lzdHJ5Jyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIENvbmZpZyBuYW1lc3BhY2Ugbm90IGxvYWRlZCAoZS5nLiwgdW5pdCB0ZXN0cyB3aXRob3V0IGZ1bGwgY29uZmlnKS5cbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfToke3BsdWdpbi52ZXJzaW9ufVwiIG5lZWRzIHRoZSByZWdpc3RyeSBjb25maWcgYnV0IGl0J3Mgbm90IGxvYWRlZCDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgZmFsbCBiYWNrIHRvIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wLiAnICtcbiAgICAgICdTZXQgSU1BR0VfUkVHSVNUUllfSE9TVCArIElNQUdFX1JFR0lTVFJZX1BPUlQgaW4gcGlwZWxpbmUtbWFuYWdlclxcJ3MgZW52aXJvbm1lbnQuJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIXJlZ2lzdHJ5Py5ob3N0KSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBuZWVkcyBJTUFHRV9SRUdJU1RSWV9IT1NUIGJ1dCBpdCdzIGVtcHR5IOKAlCBgICtcbiAgICAgICdDb2RlQnVpbGQgd2lsbCBmYWxsIGJhY2sgdG8gYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjAuICcgK1xuICAgICAgJ1NldCBJTUFHRV9SRUdJU1RSWV9IT1NUIGluIHBpcGVsaW5lLW1hbmFnZXJcXCdzIGVudmlyb25tZW50IHRvIHVzZSB0aGUgcGx1Z2luIGltYWdlLicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2NvcGUpIHtcbiAgICBsb2cud2FybihgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBpbWFnZSByZXNvbHV0aW9uIHNraXBwZWQ6IG5vIGNvbnN0cnVjdCBzY29wZSBwcm92aWRlZGApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBQZXItb3JnIGF1dGggcmVxdWlyZXMgb3JnSWQg4oCUIHRoZSBTZWNyZXQgaXMgbmFtZWQgcGVyIG9yZy5cbiAgaWYgKCFvcmdJZCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaW1hZ2UgcmVzb2x1dGlvbiBza2lwcGVkOiBvcmdJZCBpcyByZXF1aXJlZCB0byBgICtcbiAgICAgICdyZXNvbHZlIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCB1c2VkIGZvciBDb2RlQnVpbGQgQmFzaWMgYXV0aC4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENvbXBvc2UgdGhlIGltYWdlIFVSSS4gTmFtZXNwYWNlIGJ5IG93bmVyc2hpcDpcbiAgLy8gICAtIFBsdWdpbnMgb3duZWQgYnkgdGhlIHN5c3RlbSBvcmcg4oaSIGBzeXN0ZW0vPG5hbWU+Ojx2ZXJzaW9uPmAuXG4gIC8vICAgICBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeSdzIHRva2VuIHNlcnZpY2UgZ3JhbnRzIHB1bGwgb24gYHN5c3RlbS8qYFxuICAvLyAgICAgdG8gYW55IGF1dGhlbnRpY2F0ZWQgb3JnIHVzZXIgKHJlYWQtb25seSBjYXRhbG9nIG9mIHNoYXJlZCBwbHVnaW5zKS5cbiAgLy8gICAtIFBsdWdpbnMgb3duZWQgYnkgYSB0ZW5hbnQgb3JnIOKGkiBgb3JnLTxvcmdJZD4vPG5hbWU+Ojx2ZXJzaW9uPmAuXG4gIC8vICAgICBUaGUgdG9rZW4gc2VydmljZSBncmFudHMgcHVsbCxwdXNoIG9ubHkgdG8gbWVtYmVycyBvZiB0aGF0IG9yZy5cbiAgLy8gVGhlIHBsdWdpbidzIG93biBgb3JnSWRgIChub3QgdGhlIGNhbGxlcidzKSBkZWNpZGVzIHRoZSBuYW1lc3BhY2Ug4oCUXG4gIC8vIHRlbmFudCBwaXBlbGluZXMgcHVsbGluZyBzaGFyZWQgc3lzdGVtIHBsdWdpbnMgc3RpbGwgZ2V0IHRoZSBgc3lzdGVtL2BcbiAgLy8gcGF0aCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgaW1hZ2UgYWN0dWFsbHkgbGl2ZXMuXG4gIGNvbnN0IHBvcnRQYXJ0ID0gcmVnaXN0cnkucG9ydCAmJiByZWdpc3RyeS5wb3J0ICE9PSA4MCAmJiByZWdpc3RyeS5wb3J0ICE9PSA0NDNcbiAgICA/IGA6JHtyZWdpc3RyeS5wb3J0fWBcbiAgICA6ICcnO1xuICBjb25zdCBTWVNURU1fT1JHX0lEID0gJ3N5c3RlbSc7XG4gIGNvbnN0IG5hbWVzcGFjZSA9IHBsdWdpbi5vcmdJZCA9PT0gU1lTVEVNX09SR19JRFxuICAgID8gJ3N5c3RlbSdcbiAgICA6IGBvcmctJHtwbHVnaW4ub3JnSWR9YDtcbiAgY29uc3QgaW1hZ2VVcmkgPSBgJHtyZWdpc3RyeS5ob3N0fSR7cG9ydFBhcnR9LyR7bmFtZXNwYWNlfS8ke3BsdWdpbi5uYW1lfToke3BsdWdpbi52ZXJzaW9ufWA7XG5cbiAgLy8gQ29kZUJ1aWxkIHJlYWRzIGBwaXBlbGluZS1idWlsZGVyLzxvcmdJZD4vcGxhdGZvcm1gIGFuZCBzZW5kcyBpdHNcbiAgLy8gYHVzZXJuYW1lYC9gcGFzc3dvcmRgIGZpZWxkcyBhcyBIVFRQIEJhc2ljIHRvIHRoZSByZWdpc3RyeS4gVGhlXG4gIC8vIHJlZ2lzdHJ5IGNoYWxsZW5nZXMgd2l0aCBhIEJlYXJlciByZWFsbSBwb2ludGluZyBhdFxuICAvLyBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeSdzIGAvdG9rZW5gIGVuZHBvaW50OyB0aGUgRG9ja2VyIGNsaWVudCBmb3J3YXJkc1xuICAvLyB0aG9zZSBjcmVkcywgdGhlIHBhc3N3b3JkIGlzIHZlcmlmaWVkIGFzIGEgcGxhdGZvcm0gSldULCBhbmQgYSByZWdpc3RyeVxuICAvLyB0b2tlbiBzY29wZWQgdG8gdGhlIG9yZyBpcyBpc3N1ZWQuXG4gIC8vXG4gIC8vIFNhbWUgU2VjcmV0IGlzIHJlYWQgYnkgdGhlIHBsdWdpbi1sb29rdXAgTGFtYmRhICh2aWEgdGhlIGBwYXNzd29yZGBcbiAgLy8gZmllbGQpIOKAlCBvbmUgU2VjcmV0IHNlcnZlcyBib3RoIGZsb3dzLlxuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgJ3BsYXRmb3JtJyk7XG4gIC8vIENESyBjb25zdHJ1Y3QgSURzIGFsbG93IG9ubHkgW0EtWmEtejAtOV8tXTsgc2FuaXRpemUgdGhlIHNlY3JldCBuYW1lLlxuICBjb25zdCBzZWNyZXRDb25zdHJ1Y3RJZCA9IGBQbGF0Zm9ybUNyZWRzXyR7c2VjcmV0TmFtZS5yZXBsYWNlKC9bXkEtWmEtejAtOV8tXS9nLCAnXycpfWA7XG4gIGNvbnN0IGNyZWRlbnRpYWxzU2VjcmV0ID0gKHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKHNlY3JldENvbnN0cnVjdElkKSBhcyBTZWNyZXQgfCB1bmRlZmluZWQpXG4gICAgPz8gU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoc3RhY2ssIHNlY3JldENvbnN0cnVjdElkLCBzZWNyZXROYW1lKTtcblxuICByZXR1cm4gTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeShpbWFnZVVyaSwge1xuICAgIHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzU2VjcmV0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBmYWxsYmFjayBDb2RlQnVpbGQgaW1hZ2UgZm9yIHN0ZXBzIHdpdGhvdXQgYSBwbHVnaW4tYmFrZWQgb25lLlxuICpcbiAqIFJlYWRzIGBhd3MuY29kZUJ1aWxkLmRlZmF1bHRJbWFnZWAgKGVudjogYENPREVCVUlMRF9ERUZBVUxUX0lNQUdFYCkuXG4gKiBEZWZhdWx0OiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGAg4oCUIHRoZSBsb2NhbCB0YWcgYnVpbHQgYnlcbiAqIGBkZXBsb3kvY29kZWJ1aWxkL2Jvb3RzdHJhcC9Eb2NrZXJmaWxlYC5cbiAqXG4gKiAtIEFXUyBjdXJhdGVkIGltYWdlIChgYXdzL2NvZGVidWlsZC8qYCk6IHVzZSB0aGUgbWF0Y2hpbmcgYExpbnV4QnVpbGRJbWFnZWBcbiAqICAgY29uc3RhbnQgc28gQ0RLIGVtaXRzIGBpbWFnZVB1bGxDcmVkZW50aWFsc1R5cGU6IENPREVCVUlMRGAuIFVzaW5nXG4gKiAgIGBmcm9tRG9ja2VyUmVnaXN0cnkoKWAgaGVyZSB3b3VsZCBzZXQgU0VSVklDRV9ST0xFIGNyZWRlbnRpYWxzLCB3aGljaFxuICogICBDRk4gcmVqZWN0cyB3aXRoIFwiY2Fubm90IHVzZSBhIENvZGVCdWlsZCBjdXJhdGVkIGltYWdlIHdpdGhcbiAqICAgaW1hZ2VQdWxsQ3JlZGVudGlhbHNUeXBlIFNFUlZJQ0VfUk9MRVwiLlxuICogLSBCYXJlIHRhZyAobm8gYC9gKTogYXV0by1wcmVmaXhlZCB0b1xuICogICBgPHJlZ2lzdHJ5LWhvc3Q+Ojxwb3J0Pi9saWJyYXJ5Lzx0YWc+YCB1c2luZyB0aGUgcmVnaXN0cnkgY29uZmlnLFxuICogICB3aXRoIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBhcyBCYXNpYyBhdXRoIOKAlCBzYW1lIHBhdGhcbiAqICAgYHJlc29sdmVQbHVnaW5JbWFnZSgpYCB1c2VzIGZvciBwbHVnaW4gaW1hZ2VzLiBOZWVkcyBgc2NvcGVgICsgYG9yZ0lkYC5cbiAqIC0gRnVsbHktcXVhbGlmaWVkIHJlZ2lzdHJ5IFVSSSAoY29udGFpbnMgYC9gKTogdXNlZCBhcy1pcywgbm8gYXV0aCB3aXJlZC5cbiAqIC0gTWlzc2luZyByZWdpc3RyeSBjb25maWcgb3Igc2NvcGUvb3JnSWQg4oaSIGZhbGxzIGJhY2sgdG9cbiAqICAgYGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wYCAoYXMgYSBDVVJBVEVEIGltYWdlLCBzZWUgYWJvdmUpLCB3aXRoIGFcbiAqICAgd2FybmluZyBzbyBzeW50aCBkZWdyYWRlcyBncmFjZWZ1bGx5IG9uIHBhcnRpYWxseSBjb25maWd1cmVkIGVudnMuXG4gKi9cbmNvbnN0IFNUQU5EQVJEXzdfMCA9ICdhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMCc7XG5cbi8qKlxuICogTWFwIEFXUyBjdXJhdGVkIGBhd3MvY29kZWJ1aWxkLypgIGltYWdlIHN0cmluZ3MgdG8gdGhlIG1hdGNoaW5nXG4gKiBgTGludXhCdWlsZEltYWdlYCBzdGF0aWMuIEV4dGVuZCB3aGVuIG5ld2VyIHN0YW5kYXJkIGltYWdlcyBzaGlwLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBmb3Igbm9uLWN1cmF0ZWQgc3RyaW5ncyDigJQgY2FsbGVyIHNob3VsZCB1c2VcbiAqIGBmcm9tRG9ja2VyUmVnaXN0cnkoKWAgZm9yIHRob3NlLlxuICovXG5mdW5jdGlvbiBjdXJhdGVkTGludXhCdWlsZEltYWdlKGltYWdlSWQ6IHN0cmluZyk6IElCdWlsZEltYWdlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFpbWFnZUlkLnN0YXJ0c1dpdGgoJ2F3cy9jb2RlYnVpbGQvJykpIHJldHVybiB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoaW1hZ2VJZCkge1xuICAgIGNhc2UgJ2F3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wJzogcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF83XzA7XG4gICAgY2FzZSAnYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo2LjAnOiByZXR1cm4gTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzZfMDtcbiAgICBjYXNlICdhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjUuMCc6IHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuU1RBTkRBUkRfNV8wO1xuICAgIC8vIE5ld2VyIGNvZGVuYW1lZCBpbWFnZXMgcm91dGUgdGhyb3VnaCBmcm9tQ29kZUJ1aWxkSW1hZ2VJZCwgd2hpY2hcbiAgICAvLyBDREsgYWxzbyBtYXJrcyBhcyBDT0RFQlVJTEQgY3JlZGVudGlhbHMgKGN1cmF0ZWQpLlxuICAgIGRlZmF1bHQ6IHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuZnJvbUNvZGVCdWlsZEltYWdlSWQoaW1hZ2VJZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZShzY29wZT86IENvbnN0cnVjdCwgb3JnSWQ/OiBzdHJpbmcpOiBJQnVpbGRJbWFnZSB7XG4gIGxldCBjb25maWd1cmVkOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgY29uZmlndXJlZCA9IENvbmZpZy5nZXQoJ2F3cycpLmNvZGVCdWlsZC5kZWZhdWx0SW1hZ2U7XG4gIH0gY2F0Y2gge1xuICAgIGNvbmZpZ3VyZWQgPSBTVEFOREFSRF83XzA7XG4gIH1cblxuICAvLyBBV1MgY3VyYXRlZCBpbWFnZSDihpIgQ09ERUJVSUxEIGNyZWRlbnRpYWxzLiBNVVNUIGdvIHRocm91Z2ggdGhlXG4gIC8vIExpbnV4QnVpbGRJbWFnZSBjb25zdGFudHMsIG5vdCBmcm9tRG9ja2VyUmVnaXN0cnkoKS5cbiAgY29uc3QgY3VyYXRlZCA9IGN1cmF0ZWRMaW51eEJ1aWxkSW1hZ2UoY29uZmlndXJlZCk7XG4gIGlmIChjdXJhdGVkKSByZXR1cm4gY3VyYXRlZDtcblxuICAvLyBGdWxseS1xdWFsaWZpZWQgVVJJIOKAlCBvcGVyYXRvciBvd25zIGl0LiBObyByZWdpc3RyeS9TZWNyZXQgd2lyaW5nLlxuICBpZiAoY29uZmlndXJlZC5pbmNsdWRlcygnLycpKSB7XG4gICAgcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoY29uZmlndXJlZCk7XG4gIH1cblxuICAvLyBCYXJlIHRhZyDihpIgYXV0by1wcmVmaXggd2l0aCB0aGUgcGxhdGZvcm0gcmVnaXN0cnksIG1pcnJvcmluZ1xuICAvLyByZXNvbHZlUGx1Z2luSW1hZ2UoKS4gQmFpbCB0byBTVEFOREFSRF83XzAgYXMgYSBjdXJhdGVkIGZhbGxiYWNrXG4gIC8vICh3aXRoIGEgd2FybmluZykgYXQgZWFjaCBtaXNzaW5nIHByZXJlcXVpc2l0ZSBzbyBzeW50aCBkZWdyYWRlc1xuICAvLyBncmFjZWZ1bGx5IG9uIHBhcnRpYWxseSBjb25maWd1cmVkIGVudmlyb25tZW50cyBpbnN0ZWFkIG9mIGZhaWxpbmcuXG4gIGxldCByZWdpc3RyeTtcbiAgdHJ5IHtcbiAgICByZWdpc3RyeSA9IENvbmZpZy5nZXQoJ3JlZ2lzdHJ5Jyk7XG4gIH0gY2F0Y2gge1xuICAgIGxvZy53YXJuKFxuICAgICAgYENPREVCVUlMRF9ERUZBVUxUX0lNQUdFPScke2NvbmZpZ3VyZWR9JyBpcyBhIGJhcmUgdGFnIGJ1dCByZWdpc3RyeSBjb25maWcgbm90IGxvYWRlZCDigJQgYCArXG4gICAgICBgZmFsbGluZyBiYWNrIHRvICR7U1RBTkRBUkRfN18wfS4gU2V0IElNQUdFX1JFR0lTVFJZX0hPU1QgKyBJTUFHRV9SRUdJU1RSWV9QT1JULmAsXG4gICAgKTtcbiAgICByZXR1cm4gTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzdfMDtcbiAgfVxuICBpZiAoIXJlZ2lzdHJ5Py5ob3N0KSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0U9JyR7Y29uZmlndXJlZH0nIGlzIGEgYmFyZSB0YWcgYnV0IElNQUdFX1JFR0lTVFJZX0hPU1QgaXMgZW1wdHkg4oCUIGAgK1xuICAgICAgYGZhbGxpbmcgYmFjayB0byAke1NUQU5EQVJEXzdfMH0uYCxcbiAgICApO1xuICAgIHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuU1RBTkRBUkRfN18wO1xuICB9XG4gIGlmICghc2NvcGUgfHwgIW9yZ0lkKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0U9JyR7Y29uZmlndXJlZH0nIG5lZWRzIHNjb3BlK29yZ0lkIGZvciBTZWNyZXQgYXV0aCDigJQgYCArXG4gICAgICBgZmFsbGluZyBiYWNrIHRvICR7U1RBTkRBUkRfN18wfS4gKENhbGxlciBkaWQgbm90IHN1cHBseSB0aGVtLilgLFxuICAgICk7XG4gICAgcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF83XzA7XG4gIH1cblxuICBjb25zdCBwb3J0UGFydCA9IHJlZ2lzdHJ5LnBvcnQgJiYgcmVnaXN0cnkucG9ydCAhPT0gODAgJiYgcmVnaXN0cnkucG9ydCAhPT0gNDQzXG4gICAgPyBgOiR7cmVnaXN0cnkucG9ydH1gXG4gICAgOiAnJztcbiAgY29uc3QgaW1hZ2VVcmkgPSBgJHtyZWdpc3RyeS5ob3N0fSR7cG9ydFBhcnR9L2xpYnJhcnkvJHtjb25maWd1cmVkfWA7XG5cbiAgLy8gU2FtZSBTZWNyZXQgYXMgcmVzb2x2ZVBsdWdpbkltYWdlIOKAlCBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCwgQ29kZUJ1aWxkXG4gIC8vIHNlbmRzIGl0IGFzIEJhc2ljIGF1dGgsIGltYWdlLXJlZ2lzdHJ5IHZlcmlmaWVzIHRoZSBKV1QgaW4gYHBhc3N3b3JkYC5cbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsICdwbGF0Zm9ybScpO1xuICBjb25zdCBzZWNyZXRDb25zdHJ1Y3RJZCA9IGBQbGF0Zm9ybUNyZWRzXyR7c2VjcmV0TmFtZS5yZXBsYWNlKC9bXkEtWmEtejAtOV8tXS9nLCAnXycpfWA7XG4gIGNvbnN0IGNyZWRlbnRpYWxzU2VjcmV0ID0gKHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKHNlY3JldENvbnN0cnVjdElkKSBhcyBTZWNyZXQgfCB1bmRlZmluZWQpXG4gICAgPz8gU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoc3RhY2ssIHNlY3JldENvbnN0cnVjdElkLCBzZWNyZXROYW1lKTtcblxuICByZXR1cm4gTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeShpbWFnZVVyaSwge1xuICAgIHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzU2VjcmV0LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvZGVCdWlsZFN0ZXAob3B0aW9uczogQ29kZUJ1aWxkU3RlcE9wdGlvbnMpOiBTaGVsbFN0ZXAgfCBDb2RlQnVpbGRTdGVwIHwgTWFudWFsQXBwcm92YWxTdGVwIHtcbiAgY29uc3Qge1xuICAgIGlkLCBpbnB1dCwgbWV0YWRhdGEsIG5ldHdvcmssIHNjb3BlLFxuICAgIHByZUluc3RhbGxDb21tYW5kcywgcG9zdEluc3RhbGxDb21tYW5kcywgcHJlQ29tbWFuZHMsIHBvc3RDb21tYW5kcyxcbiAgICBlbnY6IGN1c3RvbUVudiwgYWRkaXRpb25hbElucHV0cywgdGltZW91dCwgZmFpbHVyZUJlaGF2aW9yLFxuICAgIGFydGlmYWN0TWFuYWdlciwgc3RhZ2VOYW1lLCBzdGFnZUFsaWFzLCBwbHVnaW5BbGlhcywgb3JnSWQsIHBpcGVsaW5lU2NvcGUsXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIFJlc29sdmUge3sgLi4uIH19IHRlbXBsYXRlcyBpbiBwbHVnaW4gc3BlYyBmaWVsZHMgYWdhaW5zdCB0aGUgcGlwZWxpbmUgc2NvcGUuXG4gIC8vIEV2ZXJ5IGNhbGwgZ29lcyB0aHJvdWdoIHRoZSByZXNvbHZlciDigJQgcGx1Z2lucyB3aXRob3V0IHRlbXBsYXRlIHRva2VucyBhcmVcbiAgLy8gYSBuby1vcCBmYXN0IHBhdGggaW5zaWRlIHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMoKS5cbiAgY29uc3QgcGx1Z2luID0gcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyhvcHRpb25zLnBsdWdpbiwgcGlwZWxpbmVTY29wZSk7XG5cbiAgY29uc3QgbWVyZ2VkID0gbWVyZ2UobWV0YWRhdGEgPz8ge30sIHBsdWdpbi5tZXRhZGF0YSA/PyB7fSk7XG5cbiAgLy8gTWFudWFsQXBwcm92YWxTdGVwOiBubyBjb21tYW5kcywgZW52LCBjb21wdXRlLCBvciBuZXR3b3JrIOKAlCBqdXN0IGlkICsgb3B0aW9uYWwgY29tbWVudFxuICBpZiAocGx1Z2luLnBsdWdpblR5cGUgPT09IFBsdWdpblR5cGUuTUFOVUFMX0FQUFJPVkFMX1NURVApIHtcbiAgICByZXR1cm4gbmV3IE1hbnVhbEFwcHJvdmFsU3RlcChpZCwge1xuICAgICAgY29tbWVudDogdHlwZW9mIG1lcmdlZC5BUFBST1ZBTF9DT01NRU5UID09PSAnc3RyaW5nJyA/IG1lcmdlZC5BUFBST1ZBTF9DT01NRU5UIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdbQ3JlYXRlQ29kZUJ1aWxkU3RlcF0gQnVpbGRpbmcgc3RlcCB3aXRoIG1lcmdlZCBtZXRhZGF0YScpO1xuXG4gIC8vIFdhcm4gYWJvdXQgcmVxdWlyZWQgc2VjcmV0cyB3aXRob3V0IG9yZ0lkIChjYW4ndCByZXNvbHZlKVxuICBjb25zdCByZXF1aXJlZFNlY3JldHMgPSBwbHVnaW4uc2VjcmV0cz8uZmlsdGVyKHMgPT4gcy5yZXF1aXJlZCkgPz8gW107XG4gIGlmIChyZXF1aXJlZFNlY3JldHMubGVuZ3RoID4gMCAmJiAhb3JnSWQpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGRlY2xhcmVzICR7cmVxdWlyZWRTZWNyZXRzLmxlbmd0aH0gcmVxdWlyZWQgc2VjcmV0KHMpIGJ1dCBubyBvcmdJZCBpcyBhdmFpbGFibGUuIGAgK1xuICAgICAgYFNlY3JldHMgd2lsbCBub3QgYmUgaW5qZWN0ZWQ6ICR7cmVxdWlyZWRTZWNyZXRzLm1hcChzID0+IHMubmFtZSkuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBSZXNvbHZlIHBsdWdpbiBzZWNyZXRzIGFzIFNFQ1JFVFNfTUFOQUdFUiBlbnYgdmFyc1xuICBjb25zdCBzZWNyZXRFbnZWYXJzID0gKHBsdWdpbi5zZWNyZXRzPy5sZW5ndGggJiYgb3JnSWQpXG4gICAgPyB0b1NlY3JldEVudlZhcnMocGx1Z2luLnNlY3JldHMsIG9yZ0lkKVxuICAgIDoge307XG5cbiAgY29uc3QgZW52ID0gYnVpbGRFbnYocGx1Z2luLCBtZXJnZWQsIGN1c3RvbUVudik7XG5cbiAgLy8gQ29kZVBpcGVsaW5lIHJlc29sdmVkIHZhcmlhYmxlcyDigJQgbXVzdCBiZSBpbiBDb2RlQnVpbGRTdGVwLmVudiAoYWN0aW9uLWxldmVsKSxcbiAgLy8gbm90IGJ1aWxkRW52aXJvbm1lbnQuZW52aXJvbm1lbnRWYXJpYWJsZXMgKHByb2plY3QtbGV2ZWwpXG4gIGNvbnN0IGFjdGlvbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBQSVBFTElORV9FWEVDVVRJT05fSUQ6ICcje2NvZGVwaXBlbGluZS5QaXBlbGluZUV4ZWN1dGlvbklkfScsXG4gIH07XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3Rvcnk7XG4gIGNvbnN0IGVuc3VyZU91dHB1dERpciA9IChvdXRwdXREaXIgJiYgIW91dHB1dERpci5pbmNsdWRlcygnKicpKVxuICAgID8gW2Bta2RpciAtcCBcIiR7b3V0cHV0RGlyfVwiICYmIHRvdWNoIFwiJHtvdXRwdXREaXJ9Ly5naXRrZWVwXCJgXVxuICAgIDogW107XG5cbiAgY29uc3QgeyBpbnN0YWxsQ29tbWFuZHMsIGNvbW1hbmRzIH0gPSBidWlsZENvbW1hbmRzKHBsdWdpbiwge1xuICAgIHByZUluc3RhbGxDb21tYW5kczogWy4uLmVuc3VyZU91dHB1dERpciwgLi4uKHByZUluc3RhbGxDb21tYW5kcyA/PyBbXSldLFxuICAgIHBvc3RJbnN0YWxsQ29tbWFuZHMsXG4gICAgcHJlQ29tbWFuZHMsXG4gICAgcG9zdENvbW1hbmRzLFxuICB9LCBmYWlsdXJlQmVoYXZpb3IpO1xuXG4gIGNvbnN0IHByb2dyYW1tYXRpYyA9IHsgaW5wdXQsIGluc3RhbGxDb21tYW5kcywgY29tbWFuZHMgfTtcblxuICAvLyBSZXNvbHZlIHRoZSBwbHVnaW4ncyBydW50aW1lIGltYWdlLiBDb2RlQnVpbGQgZGVmYXVsdHMgdG9cbiAgLy8gYGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wYCB3aGVuIG5vIGBidWlsZEltYWdlYCBpcyBzZXQg4oCUIHRoYXQncyB0aGVcbiAgLy8gQVdTLW1hbmFnZWQgVWJ1bnR1IGltYWdlIGFuZCBET0VTIE5PVCBoYXZlIGFueSBwbHVnaW4tYmFrZWQgdG9vbHNcbiAgLy8gKHBpcGVsaW5lLW1hbmFnZXIsIHNueWssIHRlcnJhZm9ybSwgZXRjLikuIFdpcmluZyB0aGUgcGx1Z2luJ3MgaW1hZ2VcbiAgLy8gaGVyZSBtZWFucyBDb2RlQnVpbGQgcHVsbHMgZnJvbSBvdXIgcHJpdmF0ZSByZWdpc3RyeSBhbmQgdGhlIHRvb2xzXG4gIC8vIGluc3RhbGxlZCBpbiB0aGUgcGx1Z2luJ3MgRG9ja2VyZmlsZSBhcmUgYWN0dWFsbHkgYXZhaWxhYmxlLlxuICBjb25zdCBwbHVnaW5CdWlsZEltYWdlID0gcmVzb2x2ZVBsdWdpbkltYWdlKHNjb3BlLCBwbHVnaW4sIG9yZ0lkKTtcblxuICAvLyBTaGVsbFN0ZXAgYnJhbmNoLlxuICAvLyBTaGVsbFN0ZXAgaXRzZWxmIGRvZXNuJ3QgYWNjZXB0IGBidWlsZEVudmlyb25tZW50YC9gYnVpbGRJbWFnZWAuIENES1xuICAvLyBwaXBlbGluZXMgd3JhcHMgU2hlbGxTdGVwcyBpbiBhIGRlZmF1bHQgQ29kZUJ1aWxkIGFjdGlvbiB0aGF0IHJ1bnMgb25cbiAgLy8gYGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wYCDigJQgd2hpY2ggd29uJ3QgaGF2ZSB0aGUgcGx1Z2luJ3MgdG9vbHMuXG4gIC8vXG4gIC8vIFNvIHdoZW4gYSBTSEVMTF9TVEVQIHBsdWdpbiBET0VTIGhhdmUgYW4gaW1hZ2UgKGJlY2F1c2UgaXRzIGF1dGhvclxuICAvLyBiYWtlZCB0b29scyBpbnRvIGEgRG9ja2VyZmlsZSksIHdlIFBST01PVEUgaXQgdG8gYSBDb2RlQnVpbGRTdGVwIHdpdGhcbiAgLy8gdGhlIHJlc29sdmVkIGltYWdlLiBUaGUgcGx1Z2luIGF1dGhvcidzIGludGVudCAoXCJ1c2UgbXkgYmFrZWQgdG9vbHNcIilcbiAgLy8gaXMgcHJlc2VydmVkIHdpdGhvdXQgZm9yY2luZyB0aGVtIHRvIGNoYW5nZSBwbHVnaW5UeXBlLlxuICAvL1xuICAvLyBXaGVuIHRoZSBwbHVnaW4gaGFzIG5vIGltYWdlIChvciByZWdpc3RyeSBpc24ndCBjb25maWd1cmVkKSwgd2Uga2VlcFxuICAvLyB0aGUgb3JpZ2luYWwgU2hlbGxTdGVwIOKAlCBpdCdzIGxpZ2h0ZXIgd2VpZ2h0IGFuZCB0aGUgZGVmYXVsdFxuICAvLyBDb2RlQnVpbGQgaW1hZ2UgaXMgZmluZS5cbiAgaWYgKHBsdWdpbi5wbHVnaW5UeXBlID09PSBQbHVnaW5UeXBlLlNIRUxMX1NURVApIHtcbiAgICBpZiAoIXBsdWdpbkJ1aWxkSW1hZ2UpIHtcbiAgICAgIHJldHVybiBuZXcgU2hlbGxTdGVwKGlkLCB7XG4gICAgICAgIC4uLnByb2dyYW1tYXRpYyxcbiAgICAgICAgZW52OiB7IC4uLmVudiwgLi4uYWN0aW9uRW52IH0sXG4gICAgICAgIC4uLm1ldGFkYXRhRm9yU2hlbGxTdGVwKG1lcmdlZCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBbQ3JlYXRlQ29kZUJ1aWxkU3RlcF0gU0hFTExfU1RFUCBwbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGhhcyBhIHJlZ2lzdHJ5IGltYWdlIOKAlCBwcm9tb3RpbmcgdG8gQ29kZUJ1aWxkU3RlcCBzbyB0aGUgcGx1Z2luIGltYWdlIGlzIGFjdHVhbGx5IHVzZWRgKTtcbiAgICAvLyBGYWxsIHRocm91Z2ggdG8gdGhlIENvZGVCdWlsZFN0ZXAgcGF0aCBiZWxvdy5cbiAgfVxuXG4gIGNvbnN0IGNvbXB1dGVUeXBlID0gZ2V0Q29tcHV0ZVR5cGUoXG4gICAgcGx1Z2luLmNvbXB1dGVUeXBlID8/IG9wdGlvbnMuZGVmYXVsdENvbXB1dGVUeXBlID8/ICdTTUFMTCcsXG4gICk7XG5cbiAgY29uc3QgbmV0d29ya1Byb3BzID0gbmV0d29ya1xuICAgID8gcmVzb2x2ZU5ldHdvcmsoc2NvcGUsIG9wdGlvbnMudW5pcXVlSWQsIG5ldHdvcmspXG4gICAgOiB7fTtcblxuICAvLyBNZXRhZGF0YSBzcHJlYWQgbGFzdCBzbyBpdCBjYW4gb3ZlcnJpZGUgcHJvZ3JhbW1hdGljIGRlZmF1bHRzLlxuICAvLyBOT1RFOiBDYWNoaW5nIGlzIHN1cHBvcnRlZCB2aWEgdHdvIG1ldGFkYXRhIHBhdGhzOlxuICAvLyAgIDEuIE1ldGFkYXRhS2V5cy5DQUNIRSAoJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6Y2FjaGUnKSDigJQgcGFzc2VkIGRpcmVjdGx5XG4gIC8vICAgICAgYXMgdGhlIENvZGVCdWlsZFN0ZXAgYGNhY2hlYCBwcm9wIChleHBlY3RzIGEgY29kZWJ1aWxkLkNhY2hlIG9iamVjdCkuXG4gIC8vICAgMi4gTWV0YWRhdGFLZXlzLlBBUlRJQUxfQlVJTERfU1BFQyAoJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6cGFydGlhbGJ1aWxkc3BlYycpXG4gIC8vICAgICAg4oCUIHBhc3NlZCBhcyBgcGFydGlhbEJ1aWxkU3BlY2AsIHdoaWNoIGNhbiBpbmNsdWRlIGEgYGNhY2hlOmAgc2VjdGlvbiBmb3JcbiAgLy8gICAgICBTMyBvciBsb2NhbCBjYWNoaW5nIChlLmcuLCBCdWlsZFNwZWMuZnJvbU9iamVjdCh7IGNhY2hlOiB7IHBhdGhzOiBbLi4uXSB9IH0pKS5cbiAgY29uc3Qgc3RlcCA9IG5ldyBDb2RlQnVpbGRTdGVwKGlkLCB7XG4gICAgLi4ucHJvZ3JhbW1hdGljLFxuICAgIC4uLm5ldHdvcmtQcm9wcyxcbiAgICAuLi4oYWRkaXRpb25hbElucHV0cyAmJiB7IGFkZGl0aW9uYWxJbnB1dHMgfSksXG4gICAgLi4uKHRpbWVvdXQgJiYgeyB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKHRpbWVvdXQpIH0pLFxuICAgIGVudjogYWN0aW9uRW52LFxuICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5ID8/IHVuZGVmaW5lZCxcbiAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICBjb21wdXRlVHlwZSxcbiAgICAgIGJ1aWxkSW1hZ2U6IHBsdWdpbkJ1aWxkSW1hZ2UgPz8gcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlKHNjb3BlLCBvcmdJZCksXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAuLi50b0NvZGVCdWlsZEVudlZhcnMoZW52KSxcbiAgICAgICAgLi4uc2VjcmV0RW52VmFycyxcbiAgICAgIH0sXG4gICAgICAuLi5tZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnQobWVyZ2VkKSxcbiAgICB9LFxuICAgIC4uLm1ldGFkYXRhRm9yQ29kZUJ1aWxkU3RlcChtZXJnZWQpLFxuICB9KTtcblxuICAvLyBSZWdpc3RlciB3aXRoIGFydGlmYWN0IG1hbmFnZXIgaWYgcHJpbWFyeU91dHB1dERpcmVjdG9yeSBpcyBzZXRcbiAgaWYgKHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5ICYmIGFydGlmYWN0TWFuYWdlciAmJiBzdGFnZU5hbWUpIHtcbiAgICBjb25zdCBhcnRpZmFjdEtleTogQXJ0aWZhY3RLZXkgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUFsaWFzOiBzdGFnZUFsaWFzID8/IGAke3N0YWdlTmFtZX0tYWxpYXNgLFxuICAgICAgcGx1Z2luTmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICBwbHVnaW5BbGlhczogcGx1Z2luQWxpYXMgPz8gYCR7cGx1Z2luLm5hbWV9LWFsaWFzYCxcbiAgICAgIG91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnksXG4gICAgfTtcbiAgICBhcnRpZmFjdE1hbmFnZXIuYWRkKGFydGlmYWN0S2V5LCBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIG9yIENvbXB1dGVUeXBlIGVudW0gdG8gQ0RLIENvbXB1dGVUeXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlVHlwZShpbnB1dDogc3RyaW5nIHwgQ0RLQ29tcHV0ZVR5cGUgPSAnU01BTEwnKTogQ0RLQ29tcHV0ZVR5cGUge1xuICAvLyBJZiBhbHJlYWR5IGEgQ0RLIENvbXB1dGVUeXBlLCByZXR1cm4gYXMtaXNcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXQudG9VcHBlckNhc2UoKSBhcyBDb21wdXRlVHlwZTtcblxuICBjb25zdCBtYXBwaW5nOiBSZWNvcmQ8Q29tcHV0ZVR5cGUsIENES0NvbXB1dGVUeXBlPiA9IHtcbiAgICBbQ29tcHV0ZVR5cGUuU01BTExdOiBDREtDb21wdXRlVHlwZS5TTUFMTCxcbiAgICBbQ29tcHV0ZVR5cGUuTUVESVVNXTogQ0RLQ29tcHV0ZVR5cGUuTUVESVVNLFxuICAgIFtDb21wdXRlVHlwZS5MQVJHRV06IENES0NvbXB1dGVUeXBlLkxBUkdFLFxuICAgIFtDb21wdXRlVHlwZS5YMl9MQVJHRV06IENES0NvbXB1dGVUeXBlLlgyX0xBUkdFLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IG1hcHBpbmdbbm9ybWFsaXplZF07XG4gIGlmICghcmVzdWx0KSB7XG4gICAgbG9nLndhcm4oYFVua25vd24gY29tcHV0ZSB0eXBlIFwiJHtpbnB1dH1cIiwgZmFsbGluZyBiYWNrIHRvIFNNQUxMYCk7XG4gICAgcmV0dXJuIENES0NvbXB1dGVUeXBlLlNNQUxMO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGxldHRlcnMgb3IgbnVtYmVycyB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBzdHJpbmcgdG8gcHJvY2Vzc1xuICogQHBhcmFtIHJlcGxhY2VWYWx1ZSAtIFRoZSBjaGFyYWN0ZXIocykgdG8gcmVwbGFjZSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd2l0aCAoZGVmYXVsdDogJ18nKVxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyByZXBsYWNlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZU5vbkFscGhhbnVtZXJpYyhpbnB1dDogc3RyaW5nLCByZXBsYWNlVmFsdWU6IHN0cmluZyA9ICdfJyk6IHN0cmluZyB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgcmVwbGFjZVZhbHVlKTtcbn1cblxuLyoqXG4gKiBVbndyYXAgYSBTZWNyZXRWYWx1ZSB8IHN0cmluZyBpbnRvIGEgcGxhaW4gc3RyaW5nLlxuICogV2hlbiBhIFNlY3JldFZhbHVlIGlzIHByb3ZpZGVkIChlLmcuIGZyb20gU2VjcmV0cyBNYW5hZ2VyKSwgY2FsbHMgdW5zYWZlVW53cmFwKClcbiAqIHRvIGV4dHJhY3QgdGhlIHVuZGVybHlpbmcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBTZWNyZXQodmFsdWU6IFNlY3JldFZhbHVlIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IHZhbHVlLnVuc2FmZVVud3JhcCgpO1xufVxuIl19
@@ -132,17 +132,18 @@ class PipelineBuilder extends constructs_1.Construct {
132
132
  // 1. Pre-resolved by `pipeline-manager synth/deploy` from the platform
133
133
  // API → use it. Synth step runs on the real `cdk-synth` image with
134
134
  // real commands baked into the template.
135
- // 2. Otherwise → `fallbackSynth()`: hardcoded `pipeline-manager synth`
136
- // on standard:7.0. Cold-start path used when the platform isn't
137
- // reachable at synth time (CLI logs a warning per missed plugin).
135
+ // 2. Otherwise → `bootstrap()`: cold-start `pipeline-manager synth`
136
+ // on the configured CODEBUILD_DEFAULT_IMAGE (default
137
+ // pipeline-bootstrap:1.0). Used when the platform isn't reachable
138
+ // at synth time (CLI logs a warning per missed plugin).
138
139
  //
139
140
  // pluginLookup.plugin() reads `resolvedPlugins` internally and returns
140
141
  // the cached entry when present — so calling it always wins over
141
- // fallbackSynth() when pre-resolution succeeded.
142
+ // bootstrap() when pre-resolution succeeded.
142
143
  const synthCacheKey = this.config.plugin.alias || `${this.config.plugin.name}-alias`;
143
144
  const plugin = props.resolvedPlugins?.[synthCacheKey]
144
145
  ? pluginLookup.plugin(this.config.plugin)
145
- : pluginLookup.fallbackSynth();
146
+ : pluginLookup.bootstrap();
146
147
  const defaultComputeType = awsConfig.codeBuild.computeType;
147
148
  const artifactManager = new artifact_manager_1.ArtifactManager();
148
149
  const synthAlias = this.config.plugin.alias ?? this.config.plugin.name;
@@ -182,7 +183,7 @@ class PipelineBuilder extends constructs_1.Construct {
182
183
  const platformSecretName = props.orgId
183
184
  ? app_config_1.CoreConstants.secretPath(props.orgId, 'platform')
184
185
  : undefined;
185
- const codeBuildDefaults = this.resolveDefaults(this.config.defaults, uniqueId, props.pipelineId, platformSecretName, serverConfig.platformUrl);
186
+ const codeBuildDefaults = this.resolveDefaults(this.config.defaults, uniqueId, props.pipelineId, platformSecretName, serverConfig.platformUrl, props.orgId);
186
187
  // Resolve IAM role if explicitly provided; otherwise let CDK auto-create
187
188
  // the pipeline role with the correct codepipeline.amazonaws.com principal.
188
189
  if (props.role?.type === 'codeBuildDefault') {
@@ -295,7 +296,7 @@ class PipelineBuilder extends constructs_1.Construct {
295
296
  * Combines network config, security groups, and pipeline-level environment variables
296
297
  * (PIPELINE_ID, EXECUTION_ID, PLATFORM_BASE_URL) available to all CodeBuild actions.
297
298
  */
298
- resolveDefaults(defaults, id, pipelineId, platformSecretName, platformUrl) {
299
+ resolveDefaults(defaults, id, pipelineId, platformSecretName, platformUrl, orgId) {
299
300
  const networkProps = defaults?.network
300
301
  ? (0, network_1.resolveNetwork)(this, id, defaults.network)
301
302
  : undefined;
@@ -322,9 +323,18 @@ class PipelineBuilder extends constructs_1.Construct {
322
323
  return {
323
324
  ...(networkProps && { vpc: networkProps.vpc, subnetSelection: networkProps.subnetSelection }),
324
325
  ...(securityGroups.length > 0 && { securityGroups }),
325
- buildEnvironment: { environmentVariables: pipelineEnvVars },
326
+ // buildImage at this level reaches CDK Pipelines' internally-wrapped
327
+ // ShellStep CodeBuild action, which otherwise hardcodes
328
+ // `LinuxBuildImage.STANDARD_7_0`. Setting it here closes the gap
329
+ // exposed in the same env var (`CODEBUILD_DEFAULT_IMAGE`) that the
330
+ // CodeBuildStep path already honors via resolvePluginImage()'s
331
+ // fallback. Per-step `buildImage` on a CodeBuildStep still wins.
332
+ buildEnvironment: {
333
+ buildImage: (0, pipeline_helpers_1.resolveDefaultBuildImage)(this, orgId),
334
+ environmentVariables: pipelineEnvVars,
335
+ },
326
336
  };
327
337
  }
328
338
  }
329
339
  exports.PipelineBuilder = PipelineBuilder;
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMseURBQTBEO0FBRTFELDZDQUE2QztBQUM3Qyx1RUFBeUQ7QUFDekQsbUVBQXdGO0FBQ3hGLCtEQUFpRDtBQUNqRCx3RUFBMEQ7QUFDMUQseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyxxREFBNEU7QUFDNUUsMkNBQXVDO0FBQ3ZDLHFFQUFpRTtBQUNqRSxtREFBK0M7QUFDL0MscURBQWlEO0FBQ2pELG1EQUErQztBQUUvQyxxREFBNkQ7QUFDN0QsK0RBQTJEO0FBQzNELHVEQUFnRDtBQUNoRCwrREFBbUU7QUFDbkUsNkNBQWlEO0FBRWpELCtEQUErRDtBQUMvRCwyREFBbUU7QUFFbkUsdUNBQTJDO0FBRTNDLDJEQUE4RDtBQUU5RCxNQUFNLGtCQUFrQixHQUErQztJQUNyRSxNQUFNLEVBQUUsNkNBQTBCLENBQUMseUJBQXlCO0lBQzVELFNBQVMsRUFBRSw2Q0FBMEIsQ0FBQyw0QkFBNEI7SUFDbEUsT0FBTyxFQUFFLDZDQUEwQixDQUFDLDBCQUEwQjtJQUM5RCxRQUFRLEVBQUUsNkNBQTBCLENBQUMsMkJBQTJCO0lBQ2hFLFVBQVUsRUFBRSw2Q0FBMEIsQ0FBQyw2QkFBNkI7Q0FDckUsQ0FBQztBQUVGLFNBQVMsdUJBQXVCLENBQUMsS0FBYztJQUM3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENB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SSxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDN0YsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDcEQsZ0JBQWdCLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUU7U0FDNUQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTFRRCwwQ0EwUUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IER1cmF0aW9uLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cywgUGlwZWxpbmVUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUsIHR5cGUgQ29kZUJ1aWxkT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBpcGVsaW5lQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGlwZWxpbmUtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAnO1xuaW1wb3J0IHsgU291cmNlQnVpbGRlciB9IGZyb20gJy4vc291cmNlLWJ1aWxkZXInO1xuaW1wb3J0IHsgU3RhZ2VCdWlsZGVyIH0gZnJvbSAnLi9zdGFnZS1idWlsZGVyJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zLCBTeW50aE9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcnO1xuaW1wb3J0IHsgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3InO1xuaW1wb3J0IHsgbWV0YWRhdGFGb3JDb2RlUGlwZWxpbmUgfSBmcm9tICcuLi9jb3JlL21ldGFkYXRhLWJ1aWxkZXInO1xuaW1wb3J0IHsgcmVzb2x2ZU5ldHdvcmsgfSBmcm9tICcuLi9jb3JlL25ldHdvcmsnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGREZWZhdWx0cyB9IGZyb20gJy4uL2NvcmUvbmV0d29yay10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVDb2RlQnVpbGRTdGVwIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzJztcbmltcG9ydCB7IE1ldGFkYXRhS2V5cywgVHJpZ2dlclR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcyc7XG5pbXBvcnQgeyByZXNvbHZlUm9sZSB9IGZyb20gJy4uL2NvcmUvcm9sZSc7XG5pbXBvcnQgdHlwZSB7IFJvbGVDb25maWcgfSBmcm9tICcuLi9jb3JlL3JvbGUtdHlwZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVNlY3VyaXR5R3JvdXAgfSBmcm9tICcuLi9jb3JlL3NlY3VyaXR5LWdyb3VwJztcblxuY29uc3QgUElQRUxJTkVfRVZFTlRfTUFQOiBSZWNvcmQ8c3RyaW5nLCBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cz4gPSB7XG4gIEZBSUxFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgU1VDQ0VFREVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1VDQ0VFREVELFxuICBTVEFSVEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1RBUlRFRCxcbiAgQ0FOQ0VMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9DQU5DRUxFRCxcbiAgU1VQRVJTRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVUEVSU0VERUQsXG59O1xuXG5mdW5jdGlvbiBwYXJzZU5vdGlmaWNhdGlvbkV2ZW50cyh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gIHJldHVybiBbJ0ZBSUxFRCcsICdTVUNDRUVERUQnXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQaXBlbGluZUJ1aWxkZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclByb3BzIHtcbiAgLyoqIFByb2plY3QgaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqIE9yZ2FuaXphdGlvbiBpZGVudGlmaWVyICh3aWxsIGJlIHNhbml0aXplZCB0byBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggdW5kZXJzY29yZXMpICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFBpcGVsaW5lIGRhdGFiYXNlIHJlY29yZCBJRCDigJQgaW5qZWN0ZWQgYXMgUElQRUxJTkVfSUQgZW52IHZhciBmb3IgYXV0b25vbW91cyBzeW50aCAqL1xuICByZWFkb25seSBwaXBlbGluZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gcGlwZWxpbmUgbmFtZS4gRGVmYXVsdHMgdG86IHtvcmdhbml6YXRpb259LXtwcm9qZWN0fS1waXBlbGluZSAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHBpcGVsaW5lIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgQ29kZUJ1aWxkIGRlZmF1bHRzIGFwcGxpZWQgdG8gYWxsIENvZGVCdWlsZCBhY3Rpb25zXG4gICAqIChzeW50aCwgc2VsZi1tdXRhdGlvbiwgYXNzZXQgcHVibGlzaGluZykgdmlhIGBjb2RlQnVpbGREZWZhdWx0c2AuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0cz86IENvZGVCdWlsZERlZmF1bHRzO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBJQU0gcm9sZSBmb3IgdGhlIENvZGVQaXBlbGluZS5cbiAgICogV2hlbiBwcm92aWRlZCwgcmVzb2x2ZXMgdG8gYSBDREsgSVJvbGUgYW5kIGlzIHBhc3NlZCB0byB0aGUgQ29kZVBpcGVsaW5lIGNvbnN0cnVjdC5cbiAgICogV2hlbiBvbWl0dGVkLCBDREsgYXV0by1jcmVhdGVzIGEgcm9sZSB3aXRoIHRoZSBjb3JyZWN0IGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tIHByaW5jaXBhbC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBSb2xlQ29uZmlnO1xuXG4gIC8qKiBTeW50aGVzaXMgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgc291cmNlIGFuZCBwbHVnaW4gZGV0YWlscyAqL1xuICByZWFkb25seSBzeW50aDogU3ludGhPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBwaXBlbGluZSBzdGFnZXMsIGVhY2ggY29udGFpbmluZyBvbmUgb3IgbW9yZSBDb2RlQnVpbGQgc3RlcHMuXG4gICAqIFN0YWdlcyBhcmUgYWRkZWQgYXMgd2F2ZXMgdG8gdGhlIENvZGVQaXBlbGluZSBhZnRlciB0aGUgc3ludGggc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlcz86IFN0YWdlT3B0aW9uc1tdO1xuXG4gIC8qKiBPcHRpb25hbCBjcm9uL3JhdGUgZXhwcmVzc2lvbiBmb3Igc2NoZWR1bGVkIHBpcGVsaW5lIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBzdHJpbmc7XG5cbiAgLyoqIEN1c3RvbSB0YWdzIGFwcGxpZWQgdG8gYWxsIHBpcGVsaW5lIHJlc291cmNlcy4gKi9cbiAgcmVhZG9ubHkgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFBsdWdpbnMgcHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEksXG4gICAqIGtleWVkIGJ5IGBhbGlhcyB8fCBuYW1lYC4gV2hlbiBwcmVzZW50LCBgUGx1Z2luTG9va3VwLnBsdWdpbigpYCByZXR1cm5zXG4gICAqIHRoZSBtYXRjaGluZyBlbnRyeSBkaXJlY3RseSBhbmQgc2tpcHMgdGhlIGN1c3RvbSByZXNvdXJjZSDigJQgc28gdGhlXG4gICAqIHN5bnRoZXNpemVkIENGTiB0ZW1wbGF0ZSBzaGlwcyB3aXRoIHRoZSByZWFsIENvZGVCdWlsZCBpbWFnZSBiYWtlZCBpbi5cbiAgICogUG9wdWxhdGVkIGJ5IHRoZSBDTEkgYmVmb3JlIGludm9raW5nIHRoZSBib2lsZXJwbGF0ZSBhcHA7IENESyBjb25zdW1lcnNcbiAgICogd2hvIGNvbnN0cnVjdCBQaXBlbGluZUJ1aWxkZXIgZGlyZWN0bHkgbm9ybWFsbHkgbGVhdmUgdGhpcyB1bnNldC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG59XG5cbi8qKlxuICogQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMgYSBDb2RlUGlwZWxpbmUgZm9yIGNvbnRpbnVvdXMgZGVwbG95bWVudC5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gTXVsdGktc291cmNlIHN1cHBvcnQgKFMzLCBHaXRIdWIsIENvZGVTdGFyKVxuICogLSBQbHVnaW4tYmFzZWQgYnVpbGQgc3RlcHNcbiAqIC0gTWV0YWRhdGEtZHJpdmVuIGNvbmZpZ3VyYXRpb25cbiAqIC0gQXV0b21hdGljIHRhZ2dpbmdcbiAqIC0gQXV0b21hdGljIHNhbml0aXphdGlvbiBvZiBwcm9qZWN0IGFuZCBvcmdhbml6YXRpb24gbmFtZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogbmV3IFBpcGVsaW5lQnVpbGRlcih0aGlzLCAnTXlQaXBlbGluZScsIHtcbiAqICAgcHJvamVjdDogJ215LWFwcCcsXG4gKiAgIG9yZ2FuaXphdGlvbjogJ215LW9yZycsXG4gKiAgIHN5bnRoOiB7XG4gKiAgICAgc291cmNlOiB7XG4gKiAgICAgICB0eXBlOiAnZ2l0aHViJyxcbiAqICAgICAgIG9wdGlvbnM6IHsgcmVwbzogJ293bmVyL3JlcG8nLCBicmFuY2g6ICdtYWluJyB9XG4gKiAgICAgfSxcbiAqICAgICBwbHVnaW46IHsgbmFtZTogJ3N5bnRoJyB9XG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBQaXBlbGluZUJ1aWxkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcGlwZWxpbmU6IENvZGVQaXBlbGluZTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogUGlwZWxpbmVDb25maWd1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWlsZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVXNlIFBpcGVsaW5lQ29uZmlndXJhdGlvbiBmb3IgYWxsIGJ1c2luZXNzIGxvZ2ljICh2YWxpZGF0aW9uLCBzYW5pdGl6YXRpb24sIG1ldGFkYXRhIG1lcmdpbmcpXG4gICAgdGhpcy5jb25maWcgPSBuZXcgUGlwZWxpbmVDb25maWd1cmF0aW9uKHByb3BzKTtcblxuICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IENvbmZpZy5nZXQoJ3NlcnZlcicpO1xuICAgIGNvbnN0IGF3c0NvbmZpZyA9IENvbmZpZy5nZXQoJ2F3cycpO1xuICAgIC8vIFBhc3Mgb3JnK3Byb2plY3Qgc28gbG9nIGdyb3VwIC8gSUFNIHJvbGUgbmFtZXMgZ2V0IGEgc3RhYmxlIGhhc2hcbiAgICAvLyBzdWZmaXggcGVyIHBpcGVsaW5lLiBQcmV2ZW50cyBgUmVzb3VyY2UgYWxyZWFkeSBleGlzdHNgIGNvbGxpc2lvbnNcbiAgICAvLyBhY3Jvc3Mgc3RhY2tzIGRlcGxveWVkIHRvIHRoZSBzYW1lIEFXUyBhY2NvdW50LlxuICAgIGNvbnN0IHVuaXF1ZUlkID0gbmV3IFVuaXF1ZUlkKHtcbiAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICB9KTtcbiAgICBjb25zdCBwbHVnaW5Mb29rdXAgPSBuZXcgUGx1Z2luTG9va3VwKFxuICAgICAgdGhpcyxcbiAgICAgIHVuaXF1ZUlkLmdlbmVyYXRlKCdwbHVnaW46bG9va3VwJyksXG4gICAgICB7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgICBwbGF0Zm9ybVVybDogc2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsLFxuICAgICAgICB1bmlxdWVJZCxcbiAgICAgICAgb3JnSWQ6IHByb3BzLm9yZ0lkLFxuICAgICAgICBydW50aW1lOiBhd3NDb25maWcubGFtYmRhLnJ1bnRpbWUsXG4gICAgICAgIHRpbWVvdXQ6IGF3c0NvbmZpZy5sYW1iZGEudGltZW91dCxcbiAgICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogYXdzQ29uZmlnLmxhbWJkYS5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgICByZXNvbHZlZFBsdWdpbnM6IHByb3BzLnJlc29sdmVkUGx1Z2lucyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBzb3VyY2UgYW5kIGJ1aWxkIHN0ZXBcbiAgICBjb25zdCBzb3VyY2VCdWlsZGVyID0gbmV3IFNvdXJjZUJ1aWxkZXIodGhpcywgdGhpcy5jb25maWcpO1xuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUJ1aWxkZXIuY3JlYXRlKHVuaXF1ZUlkKTtcblxuICAgIC8vIFN5bnRoLXBsdWdpbiByZXNvbHV0aW9uOlxuICAgIC8vICAgMS4gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoL2RlcGxveWAgZnJvbSB0aGUgcGxhdGZvcm1cbiAgICAvLyAgICAgIEFQSSDihpIgdXNlIGl0LiBTeW50aCBzdGVwIHJ1bnMgb24gdGhlIHJlYWwgYGNkay1zeW50aGAgaW1hZ2Ugd2l0aFxuICAgIC8vICAgICAgcmVhbCBjb21tYW5kcyBiYWtlZCBpbnRvIHRoZSB0ZW1wbGF0ZS5cbiAgICAvLyAgIDIuIE90aGVyd2lzZSDihpIgYGZhbGxiYWNrU3ludGgoKWA6IGhhcmRjb2RlZCBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGBcbiAgICAvLyAgICAgIG9uIHN0YW5kYXJkOjcuMC4gQ29sZC1zdGFydCBwYXRoIHVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXNuJ3RcbiAgICAvLyAgICAgIHJlYWNoYWJsZSBhdCBzeW50aCB0aW1lIChDTEkgbG9ncyBhIHdhcm5pbmcgcGVyIG1pc3NlZCBwbHVnaW4pLlxuICAgIC8vXG4gICAgLy8gcGx1Z2luTG9va3VwLnBsdWdpbigpIHJlYWRzIGByZXNvbHZlZFBsdWdpbnNgIGludGVybmFsbHkgYW5kIHJldHVybnNcbiAgICAvLyB0aGUgY2FjaGVkIGVudHJ5IHdoZW4gcHJlc2VudCDigJQgc28gY2FsbGluZyBpdCBhbHdheXMgd2lucyBvdmVyXG4gICAgLy8gZmFsbGJhY2tTeW50aCgpIHdoZW4gcHJlLXJlc29sdXRpb24gc3VjY2VlZGVkLlxuICAgIGNvbnN0IHN5bnRoQ2FjaGVLZXkgPVxuICAgICAgdGhpcy5jb25maWcucGx1Z2luLmFsaWFzIHx8IGAke3RoaXMuY29uZmlnLnBsdWdpbi5uYW1lfS1hbGlhc2A7XG4gICAgY29uc3QgcGx1Z2luID0gcHJvcHMucmVzb2x2ZWRQbHVnaW5zPy5bc3ludGhDYWNoZUtleV1cbiAgICAgID8gcGx1Z2luTG9va3VwLnBsdWdpbih0aGlzLmNvbmZpZy5wbHVnaW4pXG4gICAgICA6IHBsdWdpbkxvb2t1cC5mYWxsYmFja1N5bnRoKCk7XG4gICAgY29uc3QgZGVmYXVsdENvbXB1dGVUeXBlID0gYXdzQ29uZmlnLmNvZGVCdWlsZC5jb21wdXRlVHlwZTtcbiAgICBjb25zdCBhcnRpZmFjdE1hbmFnZXIgPSBuZXcgQXJ0aWZhY3RNYW5hZ2VyKCk7XG4gICAgY29uc3Qgc3ludGhBbGlhcyA9IHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyA/PyB0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZTtcblxuICAgIC8vIFNjb3BlIGV4cG9zZWQgdG8gcGx1Z2luLXNwZWMgdGVtcGxhdGVzIGFzIGBwaXBlbGluZS4qYC4gQnVpbHQgb25jZVxuICAgIC8vIGhlcmUgc28gYm90aCB0aGUgc3ludGggc3RlcCBhbmQgZXZlcnkgc3RhZ2Ugc3RlcCByZXNvbHZlIGFnYWluc3RcbiAgICAvLyB0aGUgc2FtZSBzbmFwc2hvdC5cbiAgICBjb25zdCBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIHBpcGVsaW5lOiB7XG4gICAgICAgIHByb2plY3ROYW1lOiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgICBvcmdJZDogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIHZhcnM6IChwcm9wcyBhcyB7IHZhcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS52YXJzID8/IHt9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3ludGggPSBjcmVhdGVDb2RlQnVpbGRTdGVwKHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLnN5bnRoQ3VzdG9taXphdGlvbixcbiAgICAgIGlkOiB1bmlxdWVJZC5nZW5lcmF0ZSgnY2RrOnN5bnRoJyksXG4gICAgICB1bmlxdWVJZCxcbiAgICAgIHBsdWdpbixcbiAgICAgIGlucHV0OiBzb3VyY2UsXG4gICAgICBtZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgbmV0d29yazogdGhpcy5jb25maWcubmV0d29yayxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgYXJ0aWZhY3RNYW5hZ2VyLFxuICAgICAgc3RhZ2VOYW1lOiAnbm8tc3RhZ2UnLFxuICAgICAgc3RhZ2VBbGlhczogJ25vLXN0YWdlLWFsaWFzJyxcbiAgICAgIHBsdWdpbkFsaWFzOiBgJHtzeW50aEFsaWFzfS1hbGlhc2AsXG4gICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICBwaXBlbGluZVNjb3BlLFxuICAgIH0pO1xuXG4gICAgLy8gUmVzb2x2ZSBwaXBlbGluZS1sZXZlbCBkZWZhdWx0cyBpbnRvIGNvZGVCdWlsZERlZmF1bHRzXG4gICAgLy8gQnVpbGQgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0IG5hbWUgZm9yIENvZGVCdWlsZCBlbnYgdmFyc1xuICAgIGNvbnN0IHBsYXRmb3JtU2VjcmV0TmFtZSA9IHByb3BzLm9yZ0lkXG4gICAgICA/IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChwcm9wcy5vcmdJZCwgJ3BsYXRmb3JtJylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29kZUJ1aWxkRGVmYXVsdHMgPSB0aGlzLnJlc29sdmVEZWZhdWx0cyh0aGlzLmNvbmZpZy5kZWZhdWx0cywgdW5pcXVlSWQsIHByb3BzLnBpcGVsaW5lSWQsIHBsYXRmb3JtU2VjcmV0TmFtZSwgc2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsKTtcblxuICAgIC8vIFJlc29sdmUgSUFNIHJvbGUgaWYgZXhwbGljaXRseSBwcm92aWRlZDsgb3RoZXJ3aXNlIGxldCBDREsgYXV0by1jcmVhdGVcbiAgICAvLyB0aGUgcGlwZWxpbmUgcm9sZSB3aXRoIHRoZSBjb3JyZWN0IGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tIHByaW5jaXBhbC5cbiAgICBpZiAocHJvcHMucm9sZT8udHlwZSA9PT0gJ2NvZGVCdWlsZERlZmF1bHQnKSB7XG4gICAgICBjcmVhdGVMb2dnZXIoJ3BpcGVsaW5lLWJ1aWxkZXInKS53YXJuKFxuICAgICAgICAnY29kZUJ1aWxkRGVmYXVsdCByb2xlIHR5cGUgdXNlcyBjb2RlYnVpbGQuYW1hem9uYXdzLmNvbSB0cnVzdCBwcmluY2lwYWwg4oCUICcgK1xuICAgICAgICAndGhpcyBpcyBub3Qgc3VpdGFibGUgYXMgdGhlIHBpcGVsaW5lLWxldmVsIHJvbGUuIENvbnNpZGVyIHVzaW5nIHJvbGVBcm4vcm9sZU5hbWUgJyArXG4gICAgICAgICdvciBvbWl0dGluZyB0aGUgcm9sZSB0byBsZXQgQ0RLIGF1dG8tY3JlYXRlIG9uZSB3aXRoIGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tLicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCByb2xlID0gcHJvcHMucm9sZVxuICAgICAgPyByZXNvbHZlUm9sZSh0aGlzLCB1bmlxdWVJZCwgcHJvcHMucm9sZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gQ3JlYXRlIENvZGVQaXBlbGluZSBjb25zdHJ1Y3RcbiAgICB0aGlzLnBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCB1bmlxdWVJZC5nZW5lcmF0ZSgncGlwZWxpbmVzOmNvZGVwaXBlbGluZScpLCB7XG4gICAgICAuLi4oY29kZUJ1aWxkRGVmYXVsdHMgJiYgeyBjb2RlQnVpbGREZWZhdWx0cyB9KSxcbiAgICAgIC4uLihyb2xlICYmIHsgcm9sZSB9KSxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUsXG4gICAgICBzeW50aCxcbiAgICAgIC4uLm1ldGFkYXRhRm9yQ29kZVBpcGVsaW5lKHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZCksXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc3RhZ2VzKSB7XG4gICAgICBjb25zdCBzdGFnZUJ1aWxkZXIgPSBuZXcgU3RhZ2VCdWlsZGVyKHtcbiAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgIHBsdWdpbkxvb2t1cCxcbiAgICAgICAgdW5pcXVlSWQsXG4gICAgICAgIGdsb2JhbE1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIGRlZmF1bHRDb21wdXRlVHlwZSxcbiAgICAgICAgYXJ0aWZhY3RNYW5hZ2VyLFxuICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICB9KTtcbiAgICAgIHN0YWdlQnVpbGRlci5hZGRTdGFnZXModGhpcy5waXBlbGluZSwgcHJvcHMuc3RhZ2VzKTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgVGFncyDilIDilIBcbiAgICAvLyBUaGUgZmlyc3QgdGhyZWUgYXJlIG9wZXJhdGlvbnMtZXNzZW50aWFsIGFuZCB1c2VkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgLy8gYXVkaXQtc3RhY2tzYCB0byBkaWZmIENGTiBzdGFja3MgYWdhaW5zdCB0aGUgcGlwZWxpbmVfcmVnaXN0cnkgdGFibGUuXG4gICAgLy8gYE9yZ0lkYCBpcyB0aGUgY2Fub25pY2FsIGtleSBmb3IgY29zdCBhdHRyaWJ1dGlvbiAoQVdTIENvc3QgRXhwbG9yZXJcbiAgICAvLyBncm91cHMgYnkgdGFnIGtleS92YWx1ZSB3aGVuIGFjdGl2YXRlZCBpbiBCaWxsaW5nIHNldHRpbmdzKS5cbiAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgncGlwZWxpbmUtYnVpbGRlcicsICd0cnVlJyk7XG4gICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ3Byb2plY3QnLCB0aGlzLmNvbmZpZy5wcm9qZWN0KTtcbiAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnb3JnYW5pemF0aW9uJywgdGhpcy5jb25maWcub3JnYW5pemF0aW9uKTtcbiAgICBpZiAocHJvcHMub3JnSWQpIHtcbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdPcmdJZCcsIHByb3BzLm9yZ0lkKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpKSB7XG4gICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIHRoZSBpbnRlcm5hbCBwaXBlbGluZSBiZWZvcmUgYWNjZXNzaW5nIGl0cyBwcm9wZXJ0aWVzXG4gICAgdGhpcy5waXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG4gICAgY29uc3QgY2RrUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQ7XG5cbiAgICAvLyDilIDilIAgU05TIE5vdGlmaWNhdGlvbnMg4pSA4pSAXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uVG9waWNBcm4gPSBtZXRhW01ldGFkYXRhS2V5cy5OT1RJRklDQVRJT05fVE9QSUNfQVJOXTtcbiAgICBpZiAodHlwZW9mIG5vdGlmaWNhdGlvblRvcGljQXJuID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkV2ZW50cyA9IHBhcnNlTm90aWZpY2F0aW9uRXZlbnRzKG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9FVkVOVFNdKVxuICAgICAgICAubWFwKGUgPT4gUElQRUxJTkVfRVZFTlRfTUFQW2UudG9VcHBlckNhc2UoKV0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBpZiAobm90aWZpY2F0aW9uRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2RrUGlwZWxpbmUubm90aWZ5T24oJ1BpcGVsaW5lTm90aWZpY2F0aW9uJywgdG9waWMsIHsgZXZlbnRzOiBub3RpZmljYXRpb25FdmVudHMgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIFNjaGVkdWxlZCBFeGVjdXRpb24g4pSA4pSAXG4gICAgaWYgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zPy50cmlnZ2VyID09PSBUcmlnZ2VyVHlwZS5TQ0hFRFVMRSB8fCBwcm9wcy5zY2hlZHVsZSkge1xuICAgICAgY29uc3QgZXhwciA9IHByb3BzLnNjaGVkdWxlIHx8IChwcm9wcy5zeW50aC5zb3VyY2Uub3B0aW9ucyBhcyB7IHNjaGVkdWxlPzogc3RyaW5nIH0pPy5zY2hlZHVsZSB8fCAncmF0ZSgxIGRheSknO1xuICAgICAgbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdTY2hlZHVsZVJ1bGUnLCB7XG4gICAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihleHByKSxcbiAgICAgICAgdGFyZ2V0czogW25ldyB0YXJnZXRzLkNvZGVQaXBlbGluZShjZGtQaXBlbGluZSldLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIEV4ZWN1dGlvbiBFdmVudCBUcmFja2luZyAoZm9yd2FyZCBwaXBlbGluZSBzdGF0ZSBjaGFuZ2VzIHRvIFNOUykg4pSA4pSAXG4gICAgaWYgKG1ldGFbTWV0YWRhdGFLZXlzLkVOQUJMRV9FWEVDVVRJT05fRVZFTlRTXSAmJiB0eXBlb2Ygbm90aWZpY2F0aW9uVG9waWNBcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0V4ZWN1dGlvbkV2ZW50UnVsZScsIHtcbiAgICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgICAgc291cmNlOiBbJ2F3cy5jb2RlcGlwZWxpbmUnXSxcbiAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbY2RrUGlwZWxpbmUucGlwZWxpbmVBcm5dLFxuICAgICAgICB9LFxuICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuU25zVG9waWMoXG4gICAgICAgICAgc25zLlRvcGljLmZyb21Ub3BpY0Fybih0aGlzLCAnRXhlY3V0aW9uRXZlbnRUb3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKSxcbiAgICAgICAgKV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgQXJ0aWZhY3QgRW5jcnlwdGlvbiAoS01TIGtleSkg4pSA4pSAXG4gICAgY29uc3Qga21zS2V5QXJuID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkW01ldGFkYXRhS2V5cy5LTVNfS0VZX0FSTl07XG4gICAgaWYgKHR5cGVvZiBrbXNLZXlBcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBrZXkgPSBrbXMuS2V5LmZyb21LZXlBcm4odGhpcywgJ0FydGlmYWN0S2V5Jywga21zS2V5QXJuKTtcbiAgICAgIFRhZ3Mub2Yoa2V5KS5hZGQoJ3BpcGVsaW5lJywgdGhpcy5jb25maWcucGlwZWxpbmVOYW1lKTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgUGlwZWxpbmUgTWV0cmljcyAmIEFsYXJtcyDilIDilIBcbiAgICBjb25zdCBlbmFibGVNZXRyaWNzID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkW01ldGFkYXRhS2V5cy5FTkFCTEVfTUVUUklDU107XG4gICAgaWYgKGVuYWJsZU1ldHJpY3MpIHtcbiAgICAgIG5ldyBjbG91ZHdhdGNoLkFsYXJtKHRoaXMsICdQaXBlbGluZUZhaWx1cmVBbGFybScsIHtcbiAgICAgICAgbWV0cmljOiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICAgIG5hbWVzcGFjZTogJ0FXUy9Db2RlUGlwZWxpbmUnLFxuICAgICAgICAgIG1ldHJpY05hbWU6ICdGYWlsZWRQaXBlbGluZUV4ZWN1dGlvbkNvdW50JyxcbiAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7IFBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lIH0sXG4gICAgICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgIH0pLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgUGlwZWxpbmUgJHt0aGlzLmNvbmZpZy5waXBlbGluZU5hbWV9IGV4ZWN1dGlvbiBmYWlsZWRgLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIENvZGVCdWlsZERlZmF1bHRzIGludG8gdGhlIHNoYXBlIGV4cGVjdGVkIGJ5IENESydzIGNvZGVCdWlsZERlZmF1bHRzLlxuICAgKiBDb21iaW5lcyBuZXR3b3JrIGNvbmZpZywgc2VjdXJpdHkgZ3JvdXBzLCBhbmQgcGlwZWxpbmUtbGV2ZWwgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIChQSVBFTElORV9JRCwgRVhFQ1VUSU9OX0lELCBQTEFURk9STV9CQVNFX1VSTCkgYXZhaWxhYmxlIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZURlZmF1bHRzKFxuICAgIGRlZmF1bHRzOiBDb2RlQnVpbGREZWZhdWx0cyB8IHVuZGVmaW5lZCxcbiAgICBpZDogVW5pcXVlSWQsXG4gICAgcGlwZWxpbmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBsYXRmb3JtU2VjcmV0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBsYXRmb3JtVXJsOiBzdHJpbmcsXG4gICk6IENvZGVCdWlsZE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG5ldHdvcmtQcm9wcyA9IGRlZmF1bHRzPy5uZXR3b3JrXG4gICAgICA/IHJlc29sdmVOZXR3b3JrKHRoaXMsIGlkLCBkZWZhdWx0cy5uZXR3b3JrKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzdGFuZGFsb25lU2VjdXJpdHlHcm91cHMgPSBkZWZhdWx0cz8uc2VjdXJpdHlHcm91cHNcbiAgICAgID8gcmVzb2x2ZVNlY3VyaXR5R3JvdXAodGhpcywgaWQsIGRlZmF1bHRzLnNlY3VyaXR5R3JvdXBzKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBQaXBlbGluZS1sZXZlbCBlbnYgdmFycyBhdmFpbGFibGUgdG8gYWxsIENvZGVCdWlsZCBhY3Rpb25zXG4gICAgLy8gTm90ZTogI3tjb2RlcGlwZWxpbmUuKn0gcmVzb2x2ZWQgdmFyaWFibGVzIG11c3QgZ28gdGhyb3VnaCBDb2RlQnVpbGRTdGVwLmVudlxuICAgIC8vIChhY3Rpb24tbGV2ZWwpLCBub3QgYnVpbGRFbnZpcm9ubWVudC5lbnZpcm9ubWVudFZhcmlhYmxlcyAocHJvamVjdC1sZXZlbCkuXG4gICAgY29uc3QgcGlwZWxpbmVFbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT4gPSB7XG4gICAgICBQTEFURk9STV9CQVNFX1VSTDogeyB2YWx1ZTogcGxhdGZvcm1VcmwgfSxcbiAgICAgIC4uLihwaXBlbGluZUlkICYmIHsgUElQRUxJTkVfSUQ6IHsgdmFsdWU6IHBpcGVsaW5lSWQgfSB9KSxcbiAgICAgIC4uLihwbGF0Zm9ybVNlY3JldE5hbWUgJiYgeyBQTEFURk9STV9TRUNSRVRfTkFNRTogeyB2YWx1ZTogcGxhdGZvcm1TZWNyZXROYW1lIH0gfSksXG4gICAgICAvLyBQcm9wYWdhdGUgVExTIHZlcmlmaWNhdGlvbiBzZXR0aW5nIHNvIGFsbCBDb2RlQnVpbGQgc3RlcHMgY2FuIHJlYWNoXG4gICAgICAvLyB0aGUgcGxhdGZvcm0gQVBJIHdoZW4gdXNpbmcgc2VsZi1zaWduZWQgY2VydGlmaWNhdGVzXG4gICAgICAuLi4ocHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJzAnICYmIHtcbiAgICAgICAgTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRDogeyB2YWx1ZTogJzAnIH0sXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cHMgPSBbXG4gICAgICAuLi4obmV0d29ya1Byb3BzPy5zZWN1cml0eUdyb3VwcyA/PyBbXSksXG4gICAgICAuLi4oc3RhbmRhbG9uZVNlY3VyaXR5R3JvdXBzID8/IFtdKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihuZXR3b3JrUHJvcHMgJiYgeyB2cGM6IG5ldHdvcmtQcm9wcy52cGMsIHN1Ym5ldFNlbGVjdGlvbjogbmV0d29ya1Byb3BzLnN1Ym5ldFNlbGVjdGlvbiB9KSxcbiAgICAgIC4uLihzZWN1cml0eUdyb3Vwcy5sZW5ndGggPiAwICYmIHsgc2VjdXJpdHlHcm91cHMgfSksXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7IGVudmlyb25tZW50VmFyaWFibGVzOiBwaXBlbGluZUVudlZhcnMgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMseURBQTBEO0FBRTFELDZDQUE2QztBQUM3Qyx1RUFBeUQ7QUFDekQsbUVBQXdGO0FBQ3hGLCtEQUFpRDtBQUNqRCx3RUFBMEQ7QUFDMUQseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyxxREFBNEU7QUFDNUUsMkNBQXVDO0FBQ3ZDLHFFQUFpRTtBQUNqRSxtREFBK0M7QUFDL0MscURBQWlEO0FBQ2pELG1EQUErQztBQUUvQyxxREFBNkQ7QUFDN0QsK0RBQTJEO0FBQzNELHVEQUFnRDtBQUNoRCwrREFBbUU7QUFDbkUsNkNBQWlEO0FBRWpELCtEQUF5RjtBQUN6RiwyREFBbUU7QUFFbkUsdUNBQTJDO0FBRTNDLDJEQUE4RDtBQUU5RCxNQUFNLGtCQUFrQixHQUErQztJQUNyRSxNQUFNLEVBQUUsNkNBQTBCLENBQUMseUJBQXlCO0lBQzVELFNBQVMsRUFBRSw2Q0FBMEIsQ0FBQyw0QkFBNEI7SUFDbEUsT0FBTyxFQUFFLDZDQUEwQixDQUFDLDBCQUEwQjtJQUM5RCxRQUFRLEVBQUUsNkNBQTBCLENBQUMsMkJBQTJCO0lBQ2hFLFVBQVUsRUFBRSw2Q0FBMEIsQ0FBQyw2QkFBNkI7Q0FDckUsQ0FBQztBQUVGLFNBQVMsdUJBQXVCLENBQUMsS0FBYztJQUM3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENB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O1NBQ3BDLENBQUM7UUFFRixPQUFPO1lBQ0wsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDN0YsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDcEQscUVBQXFFO1lBQ3JFLHdEQUF3RDtZQUN4RCxpRUFBaUU7WUFDakUsbUVBQW1FO1lBQ25FLCtEQUErRDtZQUMvRCxpRUFBaUU7WUFDakUsZ0JBQWdCLEVBQUU7Z0JBQ2hCLFVBQVUsRUFBRSxJQUFBLDJDQUF3QixFQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQ2pELG9CQUFvQixFQUFFLGVBQWU7YUFDdEM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBclJELDBDQXFSQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLCBQaXBlbGluZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCB7IENvZGVQaXBlbGluZSwgdHlwZSBDb2RlQnVpbGRPcHRpb25zIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGlwZWxpbmVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9waXBlbGluZS1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IFBsdWdpbkxvb2t1cCB9IGZyb20gJy4vcGx1Z2luLWxvb2t1cCc7XG5pbXBvcnQgeyBTb3VyY2VCdWlsZGVyIH0gZnJvbSAnLi9zb3VyY2UtYnVpbGRlcic7XG5pbXBvcnQgeyBTdGFnZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWdlLWJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU9wdGlvbnMsIFN5bnRoT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcyc7XG5pbXBvcnQgeyBDb25maWcsIENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5pbXBvcnQgeyBBcnRpZmFjdE1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL2FydGlmYWN0LW1hbmFnZXInO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvcic7XG5pbXBvcnQgeyBtZXRhZGF0YUZvckNvZGVQaXBlbGluZSB9IGZyb20gJy4uL2NvcmUvbWV0YWRhdGEtYnVpbGRlcic7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yayB9IGZyb20gJy4uL2NvcmUvbmV0d29yayc7XG5pbXBvcnQgdHlwZSB7IENvZGVCdWlsZERlZmF1bHRzIH0gZnJvbSAnLi4vY29yZS9uZXR3b3JrLXR5cGVzJztcbmltcG9ydCB7IGNyZWF0ZUNvZGVCdWlsZFN0ZXAsIHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtaGVscGVycyc7XG5pbXBvcnQgeyBNZXRhZGF0YUtleXMsIFRyaWdnZXJUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGFEYXRhVHlwZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtdHlwZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVJvbGUgfSBmcm9tICcuLi9jb3JlL3JvbGUnO1xuaW1wb3J0IHR5cGUgeyBSb2xlQ29uZmlnIH0gZnJvbSAnLi4vY29yZS9yb2xlLXR5cGVzJztcbmltcG9ydCB7IHJlc29sdmVTZWN1cml0eUdyb3VwIH0gZnJvbSAnLi4vY29yZS9zZWN1cml0eS1ncm91cCc7XG5cbmNvbnN0IFBJUEVMSU5FX0VWRU5UX01BUDogUmVjb3JkPHN0cmluZywgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHM+ID0ge1xuICBGQUlMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRUQsXG4gIFNVQ0NFRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVQ0NFRURFRCxcbiAgU1RBUlRFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NUQVJURUQsXG4gIENBTkNFTEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fQ0FOQ0VMRUQsXG4gIFNVUEVSU0VERUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9TVVBFUlNFREVELFxufTtcblxuZnVuY3Rpb24gcGFyc2VOb3RpZmljYXRpb25FdmVudHModmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHMgPT4gcy50cmltKCkpO1xuICByZXR1cm4gWydGQUlMRUQnLCAnU1VDQ0VFREVEJ107XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUGlwZWxpbmVCdWlsZGVyIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJQcm9wcyB7XG4gIC8qKiBQcm9qZWN0IGlkZW50aWZpZXIgKHdpbGwgYmUgc2FuaXRpemVkIHRvIGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgd2l0aCB1bmRlcnNjb3JlcykgKi9cbiAgcmVhZG9ubHkgcHJvamVjdDogc3RyaW5nO1xuXG4gIC8qKiBPcmdhbml6YXRpb24gaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb246IHN0cmluZztcblxuICAvKiogVGVuYW50IGlkZW50aWZpZXIgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKiBQaXBlbGluZSBkYXRhYmFzZSByZWNvcmQgSUQg4oCUIGluamVjdGVkIGFzIFBJUEVMSU5FX0lEIGVudiB2YXIgZm9yIGF1dG9ub21vdXMgc3ludGggKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVJZD86IHN0cmluZztcblxuICAvKiogT3B0aW9uYWwgY3VzdG9tIHBpcGVsaW5lIG5hbWUuIERlZmF1bHRzIHRvOiB7b3JnYW5pemF0aW9ufS17cHJvamVjdH0tcGlwZWxpbmUgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBHbG9iYWwgbWV0YWRhdGEgaW5oZXJpdGVkIGJ5IGFsbCBwaXBlbGluZSBzdGVwcyAqL1xuICByZWFkb25seSBnbG9iYWw/OiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIENvZGVCdWlsZCBkZWZhdWx0cyBhcHBsaWVkIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgKiAoc3ludGgsIHNlbGYtbXV0YXRpb24sIGFzc2V0IHB1Ymxpc2hpbmcpIHZpYSBgY29kZUJ1aWxkRGVmYXVsdHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBDb2RlQnVpbGREZWZhdWx0cztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHJvbGUgZm9yIHRoZSBDb2RlUGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHJlc29sdmVzIHRvIGEgQ0RLIElSb2xlIGFuZCBpcyBwYXNzZWQgdG8gdGhlIENvZGVQaXBlbGluZSBjb25zdHJ1Y3QuXG4gICAqIFdoZW4gb21pdHRlZCwgQ0RLIGF1dG8tY3JlYXRlcyBhIHJvbGUgd2l0aCB0aGUgY29ycmVjdCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbSBwcmluY2lwYWwuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZUNvbmZpZztcblxuICAvKiogU3ludGhlc2lzIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNvdXJjZSBhbmQgcGx1Z2luIGRldGFpbHMgKi9cbiAgcmVhZG9ubHkgc3ludGg6IFN5bnRoT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcGlwZWxpbmUgc3RhZ2VzLCBlYWNoIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgQ29kZUJ1aWxkIHN0ZXBzLlxuICAgKiBTdGFnZXMgYXJlIGFkZGVkIGFzIHdhdmVzIHRvIHRoZSBDb2RlUGlwZWxpbmUgYWZ0ZXIgdGhlIHN5bnRoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM/OiBTdGFnZU9wdGlvbnNbXTtcblxuICAvKiogT3B0aW9uYWwgY3Jvbi9yYXRlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBwaXBlbGluZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gdGFncyBhcHBsaWVkIHRvIGFsbCBwaXBlbGluZSByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLFxuICAgKiBrZXllZCBieSBgYWxpYXMgfHwgbmFtZWAuIFdoZW4gcHJlc2VudCwgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgcmV0dXJuc1xuICAgKiB0aGUgbWF0Y2hpbmcgZW50cnkgZGlyZWN0bHkgYW5kIHNraXBzIHRoZSBjdXN0b20gcmVzb3VyY2Ug4oCUIHNvIHRoZVxuICAgKiBzeW50aGVzaXplZCBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAqIFBvcHVsYXRlZCBieSB0aGUgQ0xJIGJlZm9yZSBpbnZva2luZyB0aGUgYm9pbGVycGxhdGUgYXBwOyBDREsgY29uc3VtZXJzXG4gICAqIHdobyBjb25zdHJ1Y3QgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xufVxuXG4vKipcbiAqIENESyBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGEgQ29kZVBpcGVsaW5lIGZvciBjb250aW51b3VzIGRlcGxveW1lbnQuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpLXNvdXJjZSBzdXBwb3J0IChTMywgR2l0SHViLCBDb2RlU3RhcilcbiAqIC0gUGx1Z2luLWJhc2VkIGJ1aWxkIHN0ZXBzXG4gKiAtIE1ldGFkYXRhLWRyaXZlbiBjb25maWd1cmF0aW9uXG4gKiAtIEF1dG9tYXRpYyB0YWdnaW5nXG4gKiAtIEF1dG9tYXRpYyBzYW5pdGl6YXRpb24gb2YgcHJvamVjdCBhbmQgb3JnYW5pemF0aW9uIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBQaXBlbGluZUJ1aWxkZXIodGhpcywgJ015UGlwZWxpbmUnLCB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBzeW50aDoge1xuICogICAgIHNvdXJjZToge1xuICogICAgICAgdHlwZTogJ2dpdGh1YicsXG4gKiAgICAgICBvcHRpb25zOiB7IHJlcG86ICdvd25lci9yZXBvJywgYnJhbmNoOiAnbWFpbicgfVxuICogICAgIH0sXG4gKiAgICAgcGx1Z2luOiB7IG5hbWU6ICdzeW50aCcgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBDb2RlUGlwZWxpbmU7XG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IFBpcGVsaW5lQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIFVzZSBQaXBlbGluZUNvbmZpZ3VyYXRpb24gZm9yIGFsbCBidXNpbmVzcyBsb2dpYyAodmFsaWRhdGlvbiwgc2FuaXRpemF0aW9uLCBtZXRhZGF0YSBtZXJnaW5nKVxuICAgIHRoaXMuY29uZmlnID0gbmV3IFBpcGVsaW5lQ29uZmlndXJhdGlvbihwcm9wcyk7XG5cbiAgICBjb25zdCBzZXJ2ZXJDb25maWcgPSBDb25maWcuZ2V0KCdzZXJ2ZXInKTtcbiAgICBjb25zdCBhd3NDb25maWcgPSBDb25maWcuZ2V0KCdhd3MnKTtcbiAgICAvLyBQYXNzIG9yZytwcm9qZWN0IHNvIGxvZyBncm91cCAvIElBTSByb2xlIG5hbWVzIGdldCBhIHN0YWJsZSBoYXNoXG4gICAgLy8gc3VmZml4IHBlciBwaXBlbGluZS4gUHJldmVudHMgYFJlc291cmNlIGFscmVhZHkgZXhpc3RzYCBjb2xsaXNpb25zXG4gICAgLy8gYWNyb3NzIHN0YWNrcyBkZXBsb3llZCB0byB0aGUgc2FtZSBBV1MgYWNjb3VudC5cbiAgICBjb25zdCB1bmlxdWVJZCA9IG5ldyBVbmlxdWVJZCh7XG4gICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgIHByb2plY3Q6IHRoaXMuY29uZmlnLnByb2plY3QsXG4gICAgfSk7XG4gICAgY29uc3QgcGx1Z2luTG9va3VwID0gbmV3IFBsdWdpbkxvb2t1cChcbiAgICAgIHRoaXMsXG4gICAgICB1bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLFxuICAgICAge1xuICAgICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgcGxhdGZvcm1Vcmw6IHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCxcbiAgICAgICAgdW5pcXVlSWQsXG4gICAgICAgIG9yZ0lkOiBwcm9wcy5vcmdJZCxcbiAgICAgICAgcnVudGltZTogYXdzQ29uZmlnLmxhbWJkYS5ydW50aW1lLFxuICAgICAgICB0aW1lb3V0OiBhd3NDb25maWcubGFtYmRhLnRpbWVvdXQsXG4gICAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IGF3c0NvbmZpZy5sYW1iZGEucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgICAgcmVzb2x2ZWRQbHVnaW5zOiBwcm9wcy5yZXNvbHZlZFBsdWdpbnMsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgc291cmNlIGFuZCBidWlsZCBzdGVwXG4gICAgY29uc3Qgc291cmNlQnVpbGRlciA9IG5ldyBTb3VyY2VCdWlsZGVyKHRoaXMsIHRoaXMuY29uZmlnKTtcbiAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VCdWlsZGVyLmNyZWF0ZSh1bmlxdWVJZCk7XG5cbiAgICAvLyBTeW50aC1wbHVnaW4gcmVzb2x1dGlvbjpcbiAgICAvLyAgIDEuIFByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aC9kZXBsb3lgIGZyb20gdGhlIHBsYXRmb3JtXG4gICAgLy8gICAgICBBUEkg4oaSIHVzZSBpdC4gU3ludGggc3RlcCBydW5zIG9uIHRoZSByZWFsIGBjZGstc3ludGhgIGltYWdlIHdpdGhcbiAgICAvLyAgICAgIHJlYWwgY29tbWFuZHMgYmFrZWQgaW50byB0aGUgdGVtcGxhdGUuXG4gICAgLy8gICAyLiBPdGhlcndpc2Ug4oaSIGBib290c3RyYXAoKWA6IGNvbGQtc3RhcnQgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGhgXG4gICAgLy8gICAgICBvbiB0aGUgY29uZmlndXJlZCBDT0RFQlVJTERfREVGQVVMVF9JTUFHRSAoZGVmYXVsdFxuICAgIC8vICAgICAgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMCkuIFVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXNuJ3QgcmVhY2hhYmxlXG4gICAgLy8gICAgICBhdCBzeW50aCB0aW1lIChDTEkgbG9ncyBhIHdhcm5pbmcgcGVyIG1pc3NlZCBwbHVnaW4pLlxuICAgIC8vXG4gICAgLy8gcGx1Z2luTG9va3VwLnBsdWdpbigpIHJlYWRzIGByZXNvbHZlZFBsdWdpbnNgIGludGVybmFsbHkgYW5kIHJldHVybnNcbiAgICAvLyB0aGUgY2FjaGVkIGVudHJ5IHdoZW4gcHJlc2VudCDigJQgc28gY2FsbGluZyBpdCBhbHdheXMgd2lucyBvdmVyXG4gICAgLy8gYm9vdHN0cmFwKCkgd2hlbiBwcmUtcmVzb2x1dGlvbiBzdWNjZWVkZWQuXG4gICAgY29uc3Qgc3ludGhDYWNoZUtleSA9XG4gICAgICB0aGlzLmNvbmZpZy5wbHVnaW4uYWxpYXMgfHwgYCR7dGhpcy5jb25maWcucGx1Z2luLm5hbWV9LWFsaWFzYDtcbiAgICBjb25zdCBwbHVnaW4gPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM/LltzeW50aENhY2hlS2V5XVxuICAgICAgPyBwbHVnaW5Mb29rdXAucGx1Z2luKHRoaXMuY29uZmlnLnBsdWdpbilcbiAgICAgIDogcGx1Z2luTG9va3VwLmJvb3RzdHJhcCgpO1xuICAgIGNvbnN0IGRlZmF1bHRDb21wdXRlVHlwZSA9IGF3c0NvbmZpZy5jb2RlQnVpbGQuY29tcHV0ZVR5cGU7XG4gICAgY29uc3QgYXJ0aWZhY3RNYW5hZ2VyID0gbmV3IEFydGlmYWN0TWFuYWdlcigpO1xuICAgIGNvbnN0IHN5bnRoQWxpYXMgPSB0aGlzLmNvbmZpZy5wbHVnaW4uYWxpYXMgPz8gdGhpcy5jb25maWcucGx1Z2luLm5hbWU7XG5cbiAgICAvLyBTY29wZSBleHBvc2VkIHRvIHBsdWdpbi1zcGVjIHRlbXBsYXRlcyBhcyBgcGlwZWxpbmUuKmAuIEJ1aWx0IG9uY2VcbiAgICAvLyBoZXJlIHNvIGJvdGggdGhlIHN5bnRoIHN0ZXAgYW5kIGV2ZXJ5IHN0YWdlIHN0ZXAgcmVzb2x2ZSBhZ2FpbnN0XG4gICAgLy8gdGhlIHNhbWUgc25hcHNob3QuXG4gICAgY29uc3QgcGlwZWxpbmVTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBwaXBlbGluZToge1xuICAgICAgICBwcm9qZWN0TmFtZTogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgb3JnSWQ6IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24sXG4gICAgICAgIHBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lLFxuICAgICAgICBtZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgICB2YXJzOiAocHJvcHMgYXMgeyB2YXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkudmFycyA/PyB7fSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHN5bnRoID0gY3JlYXRlQ29kZUJ1aWxkU3RlcCh7XG4gICAgICAuLi50aGlzLmNvbmZpZy5zeW50aEN1c3RvbWl6YXRpb24sXG4gICAgICBpZDogdW5pcXVlSWQuZ2VuZXJhdGUoJ2NkazpzeW50aCcpLFxuICAgICAgdW5pcXVlSWQsXG4gICAgICBwbHVnaW4sXG4gICAgICBpbnB1dDogc291cmNlLFxuICAgICAgbWV0YWRhdGE6IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZCxcbiAgICAgIG5ldHdvcms6IHRoaXMuY29uZmlnLm5ldHdvcmssXG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIGRlZmF1bHRDb21wdXRlVHlwZSxcbiAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgIHN0YWdlTmFtZTogJ25vLXN0YWdlJyxcbiAgICAgIHN0YWdlQWxpYXM6ICduby1zdGFnZS1hbGlhcycsXG4gICAgICBwbHVnaW5BbGlhczogYCR7c3ludGhBbGlhc30tYWxpYXNgLFxuICAgICAgb3JnSWQ6IHByb3BzLm9yZ0lkLFxuICAgICAgcGlwZWxpbmVTY29wZSxcbiAgICB9KTtcblxuICAgIC8vIFJlc29sdmUgcGlwZWxpbmUtbGV2ZWwgZGVmYXVsdHMgaW50byBjb2RlQnVpbGREZWZhdWx0c1xuICAgIC8vIEJ1aWxkIHRoZSBwZXItb3JnIHBsYXRmb3JtIHNlY3JldCBuYW1lIGZvciBDb2RlQnVpbGQgZW52IHZhcnNcbiAgICBjb25zdCBwbGF0Zm9ybVNlY3JldE5hbWUgPSBwcm9wcy5vcmdJZFxuICAgICAgPyBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgocHJvcHMub3JnSWQsICdwbGF0Zm9ybScpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvZGVCdWlsZERlZmF1bHRzID0gdGhpcy5yZXNvbHZlRGVmYXVsdHModGhpcy5jb25maWcuZGVmYXVsdHMsIHVuaXF1ZUlkLCBwcm9wcy5waXBlbGluZUlkLCBwbGF0Zm9ybVNlY3JldE5hbWUsIHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCwgcHJvcHMub3JnSWQpO1xuXG4gICAgLy8gUmVzb2x2ZSBJQU0gcm9sZSBpZiBleHBsaWNpdGx5IHByb3ZpZGVkOyBvdGhlcndpc2UgbGV0IENESyBhdXRvLWNyZWF0ZVxuICAgIC8vIHRoZSBwaXBlbGluZSByb2xlIHdpdGggdGhlIGNvcnJlY3QgY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20gcHJpbmNpcGFsLlxuICAgIGlmIChwcm9wcy5yb2xlPy50eXBlID09PSAnY29kZUJ1aWxkRGVmYXVsdCcpIHtcbiAgICAgIGNyZWF0ZUxvZ2dlcigncGlwZWxpbmUtYnVpbGRlcicpLndhcm4oXG4gICAgICAgICdjb2RlQnVpbGREZWZhdWx0IHJvbGUgdHlwZSB1c2VzIGNvZGVidWlsZC5hbWF6b25hd3MuY29tIHRydXN0IHByaW5jaXBhbCDigJQgJyArXG4gICAgICAgICd0aGlzIGlzIG5vdCBzdWl0YWJsZSBhcyB0aGUgcGlwZWxpbmUtbGV2ZWwgcm9sZS4gQ29uc2lkZXIgdXNpbmcgcm9sZUFybi9yb2xlTmFtZSAnICtcbiAgICAgICAgJ29yIG9taXR0aW5nIHRoZSByb2xlIHRvIGxldCBDREsgYXV0by1jcmVhdGUgb25lIHdpdGggY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20uJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHJvbGUgPSBwcm9wcy5yb2xlXG4gICAgICA/IHJlc29sdmVSb2xlKHRoaXMsIHVuaXF1ZUlkLCBwcm9wcy5yb2xlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDcmVhdGUgQ29kZVBpcGVsaW5lIGNvbnN0cnVjdFxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgQ29kZVBpcGVsaW5lKHRoaXMsIHVuaXF1ZUlkLmdlbmVyYXRlKCdwaXBlbGluZXM6Y29kZXBpcGVsaW5lJyksIHtcbiAgICAgIC4uLihjb2RlQnVpbGREZWZhdWx0cyAmJiB7IGNvZGVCdWlsZERlZmF1bHRzIH0pLFxuICAgICAgLi4uKHJvbGUgJiYgeyByb2xlIH0pLFxuICAgICAgcGlwZWxpbmVUeXBlOiBQaXBlbGluZVR5cGUuVjIsXG4gICAgICBwaXBlbGluZU5hbWU6IHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSxcbiAgICAgIHN5bnRoLFxuICAgICAgLi4ubWV0YWRhdGFGb3JDb2RlUGlwZWxpbmUodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKSxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5zdGFnZXMpIHtcbiAgICAgIGNvbnN0IHN0YWdlQnVpbGRlciA9IG5ldyBTdGFnZUJ1aWxkZXIoe1xuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgICAgcGx1Z2luTG9va3VwLFxuICAgICAgICB1bmlxdWVJZCxcbiAgICAgICAgZ2xvYmFsTWV0YWRhdGE6IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZCxcbiAgICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgICBhcnRpZmFjdE1hbmFnZXIsXG4gICAgICAgIG9yZ0lkOiBwcm9wcy5vcmdJZCxcbiAgICAgICAgcGlwZWxpbmVTY29wZSxcbiAgICAgIH0pO1xuICAgICAgc3RhZ2VCdWlsZGVyLmFkZFN0YWdlcyh0aGlzLnBpcGVsaW5lLCBwcm9wcy5zdGFnZXMpO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBUYWdzIOKUgOKUgFxuICAgIC8vIFRoZSBmaXJzdCB0aHJlZSBhcmUgb3BlcmF0aW9ucy1lc3NlbnRpYWwgYW5kIHVzZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXJcbiAgICAvLyBhdWRpdC1zdGFja3NgIHRvIGRpZmYgQ0ZOIHN0YWNrcyBhZ2FpbnN0IHRoZSBwaXBlbGluZV9yZWdpc3RyeSB0YWJsZS5cbiAgICAvLyBgT3JnSWRgIGlzIHRoZSBjYW5vbmljYWwga2V5IGZvciBjb3N0IGF0dHJpYnV0aW9uIChBV1MgQ29zdCBFeHBsb3JlclxuICAgIC8vIGdyb3VwcyBieSB0YWcga2V5L3ZhbHVlIHdoZW4gYWN0aXZhdGVkIGluIEJpbGxpbmcgc2V0dGluZ3MpLlxuICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwaXBlbGluZS1idWlsZGVyJywgJ3RydWUnKTtcbiAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgncHJvamVjdCcsIHRoaXMuY29uZmlnLnByb2plY3QpO1xuICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdvcmdhbml6YXRpb24nLCB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24pO1xuICAgIGlmIChwcm9wcy5vcmdJZCkge1xuICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ09yZ0lkJywgcHJvcHMub3JnSWQpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudGFncykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMudGFncykpIHtcbiAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGhlIGludGVybmFsIHBpcGVsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXNcbiAgICB0aGlzLnBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcbiAgICBjb25zdCBjZGtQaXBlbGluZSA9IHRoaXMucGlwZWxpbmUucGlwZWxpbmU7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcblxuICAgIC8vIOKUgOKUgCBTTlMgTm90aWZpY2F0aW9ucyDilIDilIBcbiAgICBjb25zdCBub3RpZmljYXRpb25Ub3BpY0FybiA9IG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9UT1BJQ19BUk5dO1xuICAgIGlmICh0eXBlb2Ygbm90aWZpY2F0aW9uVG9waWNBcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0b3BpYyA9IHNucy5Ub3BpYy5mcm9tVG9waWNBcm4odGhpcywgJ05vdGlmaWNhdGlvblRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pO1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uRXZlbnRzID0gcGFyc2VOb3RpZmljYXRpb25FdmVudHMobWV0YVtNZXRhZGF0YUtleXMuTk9USUZJQ0FUSU9OX0VWRU5UU10pXG4gICAgICAgIC5tYXAoZSA9PiBQSVBFTElORV9FVkVOVF9NQVBbZS50b1VwcGVyQ2FzZSgpXSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGlmIChub3RpZmljYXRpb25FdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjZGtQaXBlbGluZS5ub3RpZnlPbignUGlwZWxpbmVOb3RpZmljYXRpb24nLCB0b3BpYywgeyBldmVudHM6IG5vdGlmaWNhdGlvbkV2ZW50cyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDilIDilIAgU2NoZWR1bGVkIEV4ZWN1dGlvbiDilIDilIBcbiAgICBpZiAocHJvcHMuc3ludGguc291cmNlLm9wdGlvbnM/LnRyaWdnZXIgPT09IFRyaWdnZXJUeXBlLlNDSEVEVUxFIHx8IHByb3BzLnNjaGVkdWxlKSB7XG4gICAgICBjb25zdCBleHByID0gcHJvcHMuc2NoZWR1bGUgfHwgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zIGFzIHsgc2NoZWR1bGU/OiBzdHJpbmcgfSk/LnNjaGVkdWxlIHx8ICdyYXRlKDEgZGF5KSc7XG4gICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1NjaGVkdWxlUnVsZScsIHtcbiAgICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5leHByZXNzaW9uKGV4cHIpLFxuICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKGNka1BpcGVsaW5lKV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgRXhlY3V0aW9uIEV2ZW50IFRyYWNraW5nIChmb3J3YXJkIHBpcGVsaW5lIHN0YXRlIGNoYW5nZXMgdG8gU05TKSDilIDilIBcbiAgICBpZiAobWV0YVtNZXRhZGF0YUtleXMuRU5BQkxFX0VYRUNVVElPTl9FVkVOVFNdICYmIHR5cGVvZiBub3RpZmljYXRpb25Ub3BpY0FybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnRXhlY3V0aW9uRXZlbnRSdWxlJywge1xuICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICBzb3VyY2U6IFsnYXdzLmNvZGVwaXBlbGluZSddLFxuICAgICAgICAgIGRldGFpbFR5cGU6IFsnQ29kZVBpcGVsaW5lIFBpcGVsaW5lIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtjZGtQaXBlbGluZS5waXBlbGluZUFybl0sXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldHM6IFtuZXcgdGFyZ2V0cy5TbnNUb3BpYyhcbiAgICAgICAgICBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdFeGVjdXRpb25FdmVudFRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pLFxuICAgICAgICApXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBBcnRpZmFjdCBFbmNyeXB0aW9uIChLTVMga2V5KSDilIDilIBcbiAgICBjb25zdCBrbXNLZXlBcm4gPSB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWRbTWV0YWRhdGFLZXlzLktNU19LRVlfQVJOXTtcbiAgICBpZiAodHlwZW9mIGttc0tleUFybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGtleSA9IGttcy5LZXkuZnJvbUtleUFybih0aGlzLCAnQXJ0aWZhY3RLZXknLCBrbXNLZXlBcm4pO1xuICAgICAgVGFncy5vZihrZXkpLmFkZCgncGlwZWxpbmUnLCB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUpO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBQaXBlbGluZSBNZXRyaWNzICYgQWxhcm1zIOKUgOKUgFxuICAgIGNvbnN0IGVuYWJsZU1ldHJpY3MgPSB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWRbTWV0YWRhdGFLZXlzLkVOQUJMRV9NRVRSSUNTXTtcbiAgICBpZiAoZW5hYmxlTWV0cmljcykge1xuICAgICAgbmV3IGNsb3Vkd2F0Y2guQWxhcm0odGhpcywgJ1BpcGVsaW5lRmFpbHVyZUFsYXJtJywge1xuICAgICAgICBtZXRyaWM6IG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgICAgbmFtZXNwYWNlOiAnQVdTL0NvZGVQaXBlbGluZScsXG4gICAgICAgICAgbWV0cmljTmFtZTogJ0ZhaWxlZFBpcGVsaW5lRXhlY3V0aW9uQ291bnQnLFxuICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHsgUGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUgfSxcbiAgICAgICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgfSksXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBQaXBlbGluZSAke3RoaXMuY29uZmlnLnBpcGVsaW5lTmFtZX0gZXhlY3V0aW9uIGZhaWxlZGAsXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgQ29kZUJ1aWxkRGVmYXVsdHMgaW50byB0aGUgc2hhcGUgZXhwZWN0ZWQgYnkgQ0RLJ3MgY29kZUJ1aWxkRGVmYXVsdHMuXG4gICAqIENvbWJpbmVzIG5ldHdvcmsgY29uZmlnLCBzZWN1cml0eSBncm91cHMsIGFuZCBwaXBlbGluZS1sZXZlbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogKFBJUEVMSU5FX0lELCBFWEVDVVRJT05fSUQsIFBMQVRGT1JNX0JBU0VfVVJMKSBhdmFpbGFibGUgdG8gYWxsIENvZGVCdWlsZCBhY3Rpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlRGVmYXVsdHMoXG4gICAgZGVmYXVsdHM6IENvZGVCdWlsZERlZmF1bHRzIHwgdW5kZWZpbmVkLFxuICAgIGlkOiBVbmlxdWVJZCxcbiAgICBwaXBlbGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGxhdGZvcm1TZWNyZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGxhdGZvcm1Vcmw6IHN0cmluZyxcbiAgICBvcmdJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICApOiBDb2RlQnVpbGRPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuZXR3b3JrUHJvcHMgPSBkZWZhdWx0cz8ubmV0d29ya1xuICAgICAgPyByZXNvbHZlTmV0d29yayh0aGlzLCBpZCwgZGVmYXVsdHMubmV0d29yaylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgc3RhbmRhbG9uZVNlY3VyaXR5R3JvdXBzID0gZGVmYXVsdHM/LnNlY3VyaXR5R3JvdXBzXG4gICAgICA/IHJlc29sdmVTZWN1cml0eUdyb3VwKHRoaXMsIGlkLCBkZWZhdWx0cy5zZWN1cml0eUdyb3VwcylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gUGlwZWxpbmUtbGV2ZWwgZW52IHZhcnMgYXZhaWxhYmxlIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgIC8vIE5vdGU6ICN7Y29kZXBpcGVsaW5lLip9IHJlc29sdmVkIHZhcmlhYmxlcyBtdXN0IGdvIHRocm91Z2ggQ29kZUJ1aWxkU3RlcC5lbnZcbiAgICAvLyAoYWN0aW9uLWxldmVsKSwgbm90IGJ1aWxkRW52aXJvbm1lbnQuZW52aXJvbm1lbnRWYXJpYWJsZXMgKHByb2plY3QtbGV2ZWwpLlxuICAgIGNvbnN0IHBpcGVsaW5lRW52VmFyczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nIH0+ID0ge1xuICAgICAgUExBVEZPUk1fQkFTRV9VUkw6IHsgdmFsdWU6IHBsYXRmb3JtVXJsIH0sXG4gICAgICAuLi4ocGlwZWxpbmVJZCAmJiB7IFBJUEVMSU5FX0lEOiB7IHZhbHVlOiBwaXBlbGluZUlkIH0gfSksXG4gICAgICAuLi4ocGxhdGZvcm1TZWNyZXROYW1lICYmIHsgUExBVEZPUk1fU0VDUkVUX05BTUU6IHsgdmFsdWU6IHBsYXRmb3JtU2VjcmV0TmFtZSB9IH0pLFxuICAgICAgLy8gUHJvcGFnYXRlIFRMUyB2ZXJpZmljYXRpb24gc2V0dGluZyBzbyBhbGwgQ29kZUJ1aWxkIHN0ZXBzIGNhbiByZWFjaFxuICAgICAgLy8gdGhlIHBsYXRmb3JtIEFQSSB3aGVuIHVzaW5nIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlc1xuICAgICAgLi4uKHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgPT09ICcwJyAmJiB7XG4gICAgICAgIE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ6IHsgdmFsdWU6ICcwJyB9LFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBzID0gW1xuICAgICAgLi4uKG5ldHdvcmtQcm9wcz8uc2VjdXJpdHlHcm91cHMgPz8gW10pLFxuICAgICAgLi4uKHN0YW5kYWxvbmVTZWN1cml0eUdyb3VwcyA/PyBbXSksXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi4obmV0d29ya1Byb3BzICYmIHsgdnBjOiBuZXR3b3JrUHJvcHMudnBjLCBzdWJuZXRTZWxlY3Rpb246IG5ldHdvcmtQcm9wcy5zdWJuZXRTZWxlY3Rpb24gfSksXG4gICAgICAuLi4oc2VjdXJpdHlHcm91cHMubGVuZ3RoID4gMCAmJiB7IHNlY3VyaXR5R3JvdXBzIH0pLFxuICAgICAgLy8gYnVpbGRJbWFnZSBhdCB0aGlzIGxldmVsIHJlYWNoZXMgQ0RLIFBpcGVsaW5lcycgaW50ZXJuYWxseS13cmFwcGVkXG4gICAgICAvLyBTaGVsbFN0ZXAgQ29kZUJ1aWxkIGFjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIGhhcmRjb2Rlc1xuICAgICAgLy8gYExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF83XzBgLiBTZXR0aW5nIGl0IGhlcmUgY2xvc2VzIHRoZSBnYXBcbiAgICAgIC8vIGV4cG9zZWQgaW4gdGhlIHNhbWUgZW52IHZhciAoYENPREVCVUlMRF9ERUZBVUxUX0lNQUdFYCkgdGhhdCB0aGVcbiAgICAgIC8vIENvZGVCdWlsZFN0ZXAgcGF0aCBhbHJlYWR5IGhvbm9ycyB2aWEgcmVzb2x2ZVBsdWdpbkltYWdlKCknc1xuICAgICAgLy8gZmFsbGJhY2suIFBlci1zdGVwIGBidWlsZEltYWdlYCBvbiBhIENvZGVCdWlsZFN0ZXAgc3RpbGwgd2lucy5cbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlKHRoaXMsIG9yZ0lkKSxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHBpcGVsaW5lRW52VmFycyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -102,11 +102,19 @@ export declare class PluginLookup extends Construct {
102
102
  /** Fallback for unresolved plugin lookup tokens during synthesis. */
103
103
  private fallback;
104
104
  /**
105
- * Synth plugin with pipeline-manager commands. Cold-start fallback for the
106
- * synth step when pre-resolution by `pipeline-manager synth/deploy` didn't
107
- * populate `resolvedPlugins` for the synth plugin. Runs on `standard:7.0`
108
- * via the default CodeBuild image and self-bootstraps the real synth via
105
+ * Synth plugin with pipeline-manager commands. Cold-start bootstrap for
106
+ * the synth step when pre-resolution by `pipeline-manager synth/deploy`
107
+ * didn't populate `resolvedPlugins` for the synth plugin. Runs on the
108
+ * configured `CODEBUILD_DEFAULT_IMAGE` (default `pipeline-bootstrap:1.0`)
109
+ * and self-bootstraps the real synth via
109
110
  * `pipeline-manager synth --id ${PIPELINE_ID}`.
111
+ *
112
+ * No `installCommands`: the default image already has `pipeline-manager`
113
+ * baked in (that's the whole point of `pipeline-bootstrap:1.0`). If the
114
+ * operator points CODEBUILD_DEFAULT_IMAGE at an image lacking it (e.g.
115
+ * vanilla aws/codebuild/standard:7.0), this step exits 127 — fix that
116
+ * by using an image with pipeline-manager rather than papering over it
117
+ * with a per-build `npm install -g`.
110
118
  */
111
- fallbackSynth(): Plugin;
119
+ bootstrap(): Plugin;
112
120
  }
@@ -249,20 +249,25 @@ class PluginLookup extends constructs_1.Construct {
249
249
  };
250
250
  }
251
251
  /**
252
- * Synth plugin with pipeline-manager commands. Cold-start fallback for the
253
- * synth step when pre-resolution by `pipeline-manager synth/deploy` didn't
254
- * populate `resolvedPlugins` for the synth plugin. Runs on `standard:7.0`
255
- * via the default CodeBuild image and self-bootstraps the real synth via
252
+ * Synth plugin with pipeline-manager commands. Cold-start bootstrap for
253
+ * the synth step when pre-resolution by `pipeline-manager synth/deploy`
254
+ * didn't populate `resolvedPlugins` for the synth plugin. Runs on the
255
+ * configured `CODEBUILD_DEFAULT_IMAGE` (default `pipeline-bootstrap:1.0`)
256
+ * and self-bootstraps the real synth via
256
257
  * `pipeline-manager synth --id ${PIPELINE_ID}`.
258
+ *
259
+ * No `installCommands`: the default image already has `pipeline-manager`
260
+ * baked in (that's the whole point of `pipeline-bootstrap:1.0`). If the
261
+ * operator points CODEBUILD_DEFAULT_IMAGE at an image lacking it (e.g.
262
+ * vanilla aws/codebuild/standard:7.0), this step exits 127 — fix that
263
+ * by using an image with pipeline-manager rather than papering over it
264
+ * with a per-build `npm install -g`.
257
265
  */
258
- fallbackSynth() {
266
+ bootstrap() {
259
267
  return {
260
268
  ...PluginLookup.basePlugin(),
261
269
  name: 'cdk-synth',
262
270
  primaryOutputDirectory: 'cdk.out',
263
- installCommands: [
264
- 'command -v pipeline-manager >/dev/null 2>&1 || npm install -g @pipeline-builder/pipeline-manager',
265
- ],
266
271
  commands: [
267
272
  'pipeline-manager synth --id ${PIPELINE_ID} --store-tokens --quiet --no-notices --no-verify-ssl',
268
273
  ],
@@ -270,4 +275,4 @@ class PluginLookup extends constructs_1.Construct {
270
275
  }
271
276
  }
272
277
  exports.PluginLookup = PluginLookup;
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7QUFFdEMsK0JBQTRCO0FBQzVCLHlEQUEwRDtBQUUxRCw2Q0FBOEQ7QUFDOUQsaURBQThEO0FBQzlELHVEQUErRDtBQUMvRCxxRUFBK0Q7QUFDL0QsbURBQStEO0FBQy9ELG1FQUF3RDtBQUN4RCwyQ0FBdUM7QUFFdkMscURBQTZEO0FBRzdELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVksRUFBQyxlQUFlLENBQUMsQ0FBQztBQXFDMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBQ3hCLFNBQVMsQ0FBVztJQUNwQixTQUFTLENBQVc7SUFDcEIsWUFBWSxDQUFTO0lBQ3JCLFFBQVEsQ0FBVTtJQUNsQixRQUFRLENBQVc7SUFDbkIsV0FBVyxDQUFTO0lBQ3BCLDZCQUE2QixDQUFVO0lBQ3ZDLE1BQU0sQ0FBVTtJQUNoQixnQkFBZ0IsQ0FBMEI7SUFFM0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFB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LFFBQVEsRUFBRSxTQUFTO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLGVBQWU7WUFDM0IsV0FBVyxFQUFFLE9BQU87WUFDcEIsT0FBTyxFQUFFLElBQUk7WUFDYixlQUFlLEVBQUUsTUFBTTtZQUN2QixPQUFPLEVBQUUsRUFBRTtZQUNYLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLGVBQWU7WUFDMUIsY0FBYyxFQUFFLFFBQVE7WUFDeEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQscUVBQXFFO0lBQzdELFFBQVE7UUFDZCxPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLFFBQVEsRUFBRSxDQUFDLGlGQUFpRixDQUFDO1NBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYTtRQUNsQixPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLElBQUksRUFBRSxXQUFXO1lBQ2pCLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsZUFBZSxFQUFFO2dCQUNmLGtHQUFrRzthQUNuRztZQUNELFFBQVEsRUFBRTtnQkFDUixnR0FBZ0c7YUFDakc7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBclFELG9DQXFRQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFRva2VuLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSdW50aW1lLCBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvcic7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcigncGx1Z2luLWxvb2t1cCcpO1xuXG5pbnRlcmZhY2UgSW5wdXRQcm9wcyB7XG4gIHJlYWRvbmx5IGJhc2VVUkw6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luRmlsdGVyOiBQbHVnaW5GaWx0ZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgUGx1Z2luTG9va3VwIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkxvb2t1cFByb3BzIHtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2plY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICAvKiogT3JnYW5pemF0aW9uIElEIGZvciByZXNvbHZpbmcgcGVyLW9yZyBzZWNyZXRzIGZyb20gU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lPzogUnVudGltZTtcbiAgLyoqIExhbWJkYSB0aW1lb3V0IChkZWZhdWx0OiAzMHMpICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqIExhbWJkYSBtZW1vcnkgaW4gTUIgKGRlZmF1bHQ6IDUxMikgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqIExvZyByZXRlbnRpb24gKGRlZmF1bHQ6IE9ORV9XRUVLKSAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBSZXRlbnRpb25EYXlzO1xuICAvKiogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgbG9va3VwIExhbWJkYSAoZGVmYXVsdDogMzApICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLlxuICAgKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgKG1hdGNoZXMgdGhlIGNvbnN0cnVjdCdzIG5vcm1hbGl6ZSgpIG91dHB1dCkuXG4gICAqIFdoZW4gYSBsb29rdXAgaGl0cyB0aGlzIG1hcCwgYHBsdWdpbigpYCByZXR1cm5zIHRoZSByZXNvbHZlZCBQbHVnaW5cbiAgICogZGlyZWN0bHkg4oCUIG5vIGN1c3RvbSByZXNvdXJjZSBpcyBjcmVhdGVkLiBUaGlzIGlzIHdoYXQgbWFrZXMgdGhlXG4gICAqIG5hbWUsIHZlcnNpb24sIGNvbW1hbmRzLCBlbnYsIGV0Yy4gYXZhaWxhYmxlIGF0IHN5bnRoIHRpbWUgc28gdGhlIHJlc3VsdGluZ1xuICAgKiBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCB2YWx1ZXMgYmFrZWQgaW4uXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xufVxuXG4vKipcbiAqIENESyBDb25zdHJ1Y3QgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgcGx1Z2luIGNvbmZpZ3VyYXRpb25zIGZyb20gYW4gZXh0ZXJuYWwgcGxhdGZvcm1cbiAqIHVzaW5nIEFXUyBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2VzIGJhY2tlZCBieSBhIExhbWJkYSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzOlxuICogLSBBIExhbWJkYSBmdW5jdGlvbiAocGx1Z2luLWxvb2t1cC1oYW5kbGVyKSB0aGF0IGZldGNoZXMgcGx1Z2luIGNvbmZpZ3NcbiAqIC0gQSBDbG91ZFdhdGNoIExvZyBHcm91cCBmb3IgdGhlIExhbWJkYVxuICogLSBBIEN1c3RvbSBSZXNvdXJjZSBQcm92aWRlciB0aGF0IGludm9rZXMgdGhlIExhbWJkYVxuICogLSBBbiBJQU0gcG9saWN5IGdyYW50aW5nIHRoZSBMYW1iZGEgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFscyBzZWNyZXRcbiAqXG4gKiAjIyBQcmVyZXF1aXNpdGVzXG4gKlxuICogQmVmb3JlIGRlcGxveWluZywgc3RvcmUgYSBKV1QgdG9rZW4gaW4gU2VjcmV0cyBNYW5hZ2VyOlxuICogYGBgc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIDxyZWdpb24+XG4gKiBgYGBcbiAqXG4gKiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZSBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lOlxuICogYHtTRUNSRVRTX1BBVEhfUFJFRklYfS97b3JnSWR9L3BsYXRmb3JtYFxuICpcbiAqIEBzZWUgaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLnRzIGZvciB0aGUgTGFtYmRhIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb29rdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF91bmlxdWVJZDogVW5pcXVlSWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3ZpZGVyOiBQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVudGltZTogUnVudGltZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogRHVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbW9yeVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3JnSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBsdWdpbkxvb2t1cFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICghcHJvcHMub3JnYW5pemF0aW9uIHx8ICFwcm9wcy5wcm9qZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggb3JnYW5pemF0aW9uIGFuZCBwcm9qZWN0IGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl91bmlxdWVJZCA9IHByb3BzLnVuaXF1ZUlkO1xuICAgIHRoaXMuX3BsYXRmb3JtVXJsID0gcHJvcHMucGxhdGZvcm1Vcmw7XG4gICAgdGhpcy5fb3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLl9ydW50aW1lID0gcHJvcHMucnVudGltZSA/PyBSdW50aW1lLk5PREVKU18yNF9YO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBwcm9wcy50aW1lb3V0ID8/IER1cmF0aW9uLnNlY29uZHMoMzApO1xuICAgIHRoaXMuX21lbW9yeVNpemUgPSBwcm9wcy5tZW1vcnlTaXplID8/IENvbmZpZy5nZXQoJ2F3cycpLmxhbWJkYS5tZW1vcnlTaXplO1xuICAgIHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgPSBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zO1xuICAgIHRoaXMuX3Jlc29sdmVkUGx1Z2lucyA9IHByb3BzLnJlc29sdmVkUGx1Z2lucztcblxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbigpO1xuXG4gICAgLy8gTG9nLWdyb3VwIHN0cmF0ZWd5OlxuICAgIC8vICAgUHJldmlvdXMgY29kZSBjcmVhdGVkIGFuIGBBV1M6OkxvZ3M6OkxvZ0dyb3VwYCByZXNvdXJjZSB3aXRoIGFuXG4gICAgLy8gICBFWFBMSUNJVCBuYW1lIChgL2F3cy9sYW1iZGEvcGx1Z2luLWxvb2t1cC1OYCkuIFRoYXQgYnJlYWtzIGV2ZXJ5XG4gICAgLy8gICByZS1kZXBsb3kgYWZ0ZXIgYSByb2xsZWQtYmFjayBzdGFjazogQVdTIGF1dG8tY3JlYXRlcyB0aGUgZ3JvdXAgb25cbiAgICAvLyAgIGZpcnN0IExhbWJkYSBpbnZvY2F0aW9uLCB0aGUgcm9sbGJhY2sgbGVhdmVzIGl0IGFzIGFuIG9ycGhhbiwgYW5kXG4gICAgLy8gICB0aGUgbmV4dCBDREsgcnVuIGZhaWxzIHdpdGggXCJSZXNvdXJjZSAuLi4gYWxyZWFkeSBleGlzdHNcIiBiZWNhdXNlXG4gICAgLy8gICB0aGUgZXhwbGljaXQgbmFtZSBjb2xsaWRlcyB3aXRoIHRoZSBvcnBoYW4uXG4gICAgLy9cbiAgICAvLyAgIEZpeDogdXNlIGBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKClgIHRvIGFkb3B0LW9yLXBhc3MtdGhyb3VnaC5cbiAgICAvLyAgIElmIHRoZSBncm91cCBleGlzdHMsIENESyByZWZlcmVuY2VzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJlY3JlYXRlLlxuICAgIC8vICAgSWYgaXQgZG9lc24ndCwgQVdTIExhbWJkYSBhdXRvLWNyZWF0ZXMgaXQgb24gZmlyc3QgaW52b2NhdGlvbi5cbiAgICAvLyAgIFJldGVudGlvbiBpcyB0aGVuIHNldCB2aWEgYSBzZXBhcmF0ZSByZXRlbnRpb24tcG9saWN5IGN1c3RvbVxuICAgIC8vICAgcmVzb3VyY2Ugd2hpY2ggaXMgaWRlbXBvdGVudCAoc2FmZSB0byBhcHBseSB0byBleGlzdGluZyBncm91cHMpLlxuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS8ke3RoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdwbHVnaW46bG9va3VwJykucmVwbGFjZSgvOi9nLCAnLScpfWA7XG4gICAgY29uc3QgbG9nR3JvdXAgPSBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdsb2c6Z3JvdXAnKSxcbiAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICApO1xuXG4gICAgdGhpcy5fcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ3Jlc291cmNlOnByb3ZpZGVyJyksIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nR3JvdXAsXG4gICAgfSk7XG5cbiAgICBsb2cuZGVidWcoYFBsdWdpbkxvb2t1cCBpbml0aWFsaXplZCBmb3IgJHtwcm9wcy5vcmdhbml6YXRpb259LyR7cHJvcHMucHJvamVjdH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCBhbmQgcmVzb2x2ZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gdXNpbmcgZWl0aGVyIGEgc2ltcGxlIG5hbWUgb3IgZnVsbCBQbHVnaW5PcHRpb25zIG9iamVjdFxuICAgKiBEdXJpbmcgc3ludGhlc2lzLCBpZiB0aGUgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pLCByZXR1cm5zIGZhbGxiYWNrIHBsdWdpblxuICAgKiBEdXJpbmcgZGVwbG95bWVudCwgYXR0ZW1wdHMgdG8gcGFyc2UgdGhlIGFjdHVhbCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgY3VzdG9tIHJlc291cmNlXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBQbHVnaW4gbmFtZSAoc3RyaW5nKSBvciBjb21wbGV0ZSBQbHVnaW5PcHRpb25zIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUmVzb2x2ZWQgUGx1Z2luIG9iamVjdCBvciBmYWxsYmFjayBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBwbHVnaW4ocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMubm9ybWFsaXplKHBsdWdpbik7XG5cbiAgICAvLyBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSS5cbiAgICAvLyBTa2lwIHRoZSBjdXN0b20gcmVzb3VyY2UgZW50aXJlbHkg4oCUIHdlIGFscmVhZHkga25vdyB0aGUgcGx1Z2luJ3NcbiAgICAvLyBuYW1lLCB2ZXJzaW9uLCBjb21tYW5kcywgZW52LCBldGMuIGF0IHN5bnRoIHRpbWUsIHNvIHRoZSByZXN1bHRpbmcgQ0ZOXG4gICAgLy8gdGVtcGxhdGUgY2FuIHNoaXAgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAgY29uc3QgY2FjaGVLZXkgPSBwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lO1xuICAgIGNvbnN0IHByZVJlc29sdmVkID0gdGhpcy5fcmVzb2x2ZWRQbHVnaW5zPy5bY2FjaGVLZXldO1xuICAgIGlmIChwcmVSZXNvbHZlZCkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgcHJlLXJlc29sdmVkIChhbGlhcz0ke2NhY2hlS2V5fSkg4oCUIHNraXBwaW5nIGN1c3RvbSByZXNvdXJjZWApO1xuICAgICAgcmV0dXJuIHByZVJlc29sdmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHMpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBjdXN0b20uZ2V0QXR0U3RyaW5nKCdSZXN1bHRWYWx1ZScpO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChlbmNvZGVkKSkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pIGR1cmluZyBzeW50aGVzaXMg4oCUIHVzaW5nIGZhbGxiYWNrLiBUaGUgYWN0dWFsIHBsdWdpbiB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZS5gKTtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcblxuICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCAhZGF0YS5uYW1lIHx8ICFBcnJheS5pc0FycmF5KGRhdGEuY29tbWFuZHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbHVnaW4gcmVzcG9uc2U6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzIChuYW1lLCBjb21tYW5kcyknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgUGx1Z2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIGRhdGE6ICR7ZXJyb3JNc2d9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlci5cbiAgICpcbiAgICogSldUIHRva2VuIGlzIHN0b3JlZCBpbiBhIHByZS1leGlzdGluZyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGF0XG4gICAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWAuIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlXG4gICAqIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWUgdXNpbmcgYENvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWGAuXG4gICAqXG4gICAqIENyZWF0ZSB0aGUgc2VjcmV0IGJlZm9yZSBkZXBsb3lpbmcgd2l0aDpcbiAgICogICBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvbigpOiBOb2RlanNGdW5jdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9vcmdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmdJZCBpcyByZXF1aXJlZCBmb3IgUGx1Z2luTG9va3VwIOKAlCBuZWVkZWQgdG8gcmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aCh0aGlzLl9vcmdJZCwgJ3BsYXRmb3JtJyk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnb25ldmVudDpoYW5kbGVyJyksIHtcbiAgICAgIHJ1bnRpbWU6IHRoaXMuX3J1bnRpbWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLl90aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogdGhpcy5fbWVtb3J5U2l6ZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIGVudHJ5OiBqb2luKF9fZGlybmFtZSwgJy8uLi9oYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIuanMnKSxcbiAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IGpvaW4oX19kaXJuYW1lLCAnLy4uL2hhbmRsZXJzL3BucG0tbG9jay55YW1sJyksXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgUExBVEZPUk1fU0VDUkVUX05BTUU6IHNlY3JldE5hbWUsXG4gICAgICAgIC8vIEFsbG93IHNlbGYtc2lnbmVkIGNlcnRzIHdoZW4gcGxhdGZvcm0gdXNlcyBIVFRQUyB3aXRob3V0IGEgQ0Etc2lnbmVkIGNlcnRpZmljYXRlXG4gICAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICAgIE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ6ICcwJyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICBzb3VyY2VNYXA6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICBleHRlcm5hbE1vZHVsZXM6IFsnQGF3cy1zZGsvKiddLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHRoZSBMYW1iZGEgcGVybWlzc2lvbiB0byByZWFkIHRoZSBwZXItb3JnIHBsYXRmb3JtIHNlY3JldC5cbiAgICAvLyBUaGUgd2lsZGNhcmQgc3VmZml4IGhhbmRsZXMgdGhlIDYtY2hhciByYW5kb20gSUQgdGhhdCBTZWNyZXRzIE1hbmFnZXIgYXBwZW5kcy5cbiAgICBmbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOnNlY3JldHNtYW5hZ2VyOio6KjpzZWNyZXQ6JHtzZWNyZXROYW1lfS0qYF0sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBkZWZhdWx0IHBsdWdpbiBmaWx0ZXIuXG4gICAqIEFjY2VzcyBjb250cm9sIChvcmdJZCBzY29waW5nLCBwdWJsaWMvcHJpdmF0ZSB2aXNpYmlsaXR5KSBpcyBoYW5kbGVkIGJ5XG4gICAqIHRoZSBwbGF0Zm9ybSdzIGFjY2VzcyBjb250cm9sIHF1ZXJ5IGJ1aWxkZXIgYmFzZWQgb24gdGhlIEpXVCdzIG9yZ2FuaXphdGlvbklkLlxuICAgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyKG5hbWU6IHN0cmluZyk6IFBsdWdpbkZpbHRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemUocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luT3B0aW9ucyB7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBwbHVnaW4sXG4gICAgICAgIGZpbHRlcjogdGhpcy5kZWZhdWx0RmlsdGVyKHBsdWdpbiksXG4gICAgICAgIGFsaWFzOiBgJHtwbHVnaW59LWFsaWFzYCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgYWxpYXM6IHBsdWdpbi5hbGlhcyA/PyBgJHtwbHVnaW4ubmFtZX0tYWxpYXNgLFxuICAgICAgZmlsdGVyOiBwbHVnaW4uZmlsdGVyID8/IHRoaXMuZGVmYXVsdEZpbHRlcihwbHVnaW4ubmFtZSksXG4gICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEN1c3RvbVJlc291cmNlIGluc3RhbmNlIHRoYXQgdHJpZ2dlcnMgcGx1Z2luIGxvb2t1cCBkdXJpbmcgZGVwbG95bWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21SZXNvdXJjZShwcm9wczogUGx1Z2luT3B0aW9ucyk6IEN1c3RvbVJlc291cmNlIHtcbiAgICBjb25zdCByZXNvdXJjZUlkID0gdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUocHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIHJlc291cmNlSWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5fcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpQbHVnaW5Mb29rdXAnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBiYXNlVVJMOiB0aGlzLl9wbGF0Zm9ybVVybCxcbiAgICAgICAgcGx1Z2luRmlsdGVyOiBwcm9wcy5maWx0ZXIsXG4gICAgICB9IGFzIElucHV0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQmFzZSBwbHVnaW4gc2hhcGUgd2l0aCBuby1vcCBkZWZhdWx0cyBmb3IgZmllbGRzIENESyBkb2Vzbid0IHVzZS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZVBsdWdpbigpOiBQbHVnaW4ge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyxcbiAgICAgIG9yZ0lkOiAnc3lzdGVtJyxcbiAgICAgIGNyZWF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgIHVwZGF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgIG5hbWU6ICdmYWxsYmFjaycsXG4gICAgICBkZXNjcmlwdGlvbjogbnVsbCxcbiAgICAgIGtleXdvcmRzOiBbXSxcbiAgICAgIGNhdGVnb3J5OiAndW5rbm93bicsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgcGx1Z2luVHlwZTogJ0NvZGVCdWlsZFN0ZXAnLFxuICAgICAgY29tcHV0ZVR5cGU6ICdTTUFMTCcsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgZmFpbHVyZUJlaGF2aW9yOiAnZmFpbCcsXG4gICAgICBzZWNyZXRzOiBbXSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGVudjoge30sXG4gICAgICBidWlsZEFyZ3M6IHt9LFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXSxcbiAgICAgIGNvbW1hbmRzOiBbXSxcbiAgICAgIGRvY2tlcmZpbGU6IG51bGwsXG4gICAgICBidWlsZFR5cGU6ICdtZXRhZGF0YV9vbmx5JyxcbiAgICAgIGFjY2Vzc01vZGlmaWVyOiAncHVibGljJyxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICAgIGRlbGV0ZWRCeTogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEZhbGxiYWNrIGZvciB1bnJlc29sdmVkIHBsdWdpbiBsb29rdXAgdG9rZW5zIGR1cmluZyBzeW50aGVzaXMuICovXG4gIHByaXZhdGUgZmFsbGJhY2soKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIGNvbW1hbmRzOiBbJ2VjaG8gXCJGQUxMQkFDSzogUGx1Z2luIGxvb2t1cCB1bnJlc29sdmVkIOKAlCB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZVwiJ10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aCBwbHVnaW4gd2l0aCBwaXBlbGluZS1tYW5hZ2VyIGNvbW1hbmRzLiBDb2xkLXN0YXJ0IGZhbGxiYWNrIGZvciB0aGVcbiAgICogc3ludGggc3RlcCB3aGVuIHByZS1yZXNvbHV0aW9uIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoL2RlcGxveWAgZGlkbid0XG4gICAqIHBvcHVsYXRlIGByZXNvbHZlZFBsdWdpbnNgIGZvciB0aGUgc3ludGggcGx1Z2luLiBSdW5zIG9uIGBzdGFuZGFyZDo3LjBgXG4gICAqIHZpYSB0aGUgZGVmYXVsdCBDb2RlQnVpbGQgaW1hZ2UgYW5kIHNlbGYtYm9vdHN0cmFwcyB0aGUgcmVhbCBzeW50aCB2aWFcbiAgICogYHBpcGVsaW5lLW1hbmFnZXIgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfWAuXG4gICAqL1xuICBwdWJsaWMgZmFsbGJhY2tTeW50aCgpOiBQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5QbHVnaW5Mb29rdXAuYmFzZVBsdWdpbigpLFxuICAgICAgbmFtZTogJ2Nkay1zeW50aCcsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiAnY2RrLm91dCcsXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgICAgJ2NvbW1hbmQgLXYgcGlwZWxpbmUtbWFuYWdlciA+L2Rldi9udWxsIDI+JjEgfHwgbnBtIGluc3RhbGwgLWcgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtbWFuYWdlcicsXG4gICAgICBdLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ3BpcGVsaW5lLW1hbmFnZXIgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfSAtLXN0b3JlLXRva2VucyAtLXF1aWV0IC0tbm8tbm90aWNlcyAtLW5vLXZlcmlmeS1zc2wnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7QUFFdEMsK0JBQTRCO0FBQzVCLHlEQUEwRDtBQUUxRCw2Q0FBOEQ7QUFDOUQsaURBQThEO0FBQzlELHVEQUErRDtBQUMvRCxxRUFBK0Q7QUFDL0QsbURBQStEO0FBQy9ELG1FQUF3RDtBQUN4RCwyQ0FBdUM7QUFFdkMscURBQTZEO0FBRzdELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVksRUFBQyxlQUFlLENBQUMsQ0FBQztBQXFDMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBQ3hCLFNBQVMsQ0FBVztJQUNwQixTQUFTLENBQVc7SUFDcEIsWUFBWSxDQUFTO0lBQ3JCLFFBQVEsQ0FBVTtJQUNsQixRQUFRLENBQVc7SUFDbkIsV0FBVyxDQUFTO0lBQ3BCLDZCQUE2QixDQUFVO0lBQ3ZDLE1BQU0sQ0FBVTtJQUNoQixnQkFBZ0IsQ0FBMEI7SUFFM0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFB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LFFBQVEsRUFBRSxTQUFTO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLGVBQWU7WUFDM0IsV0FBVyxFQUFFLE9BQU87WUFDcEIsT0FBTyxFQUFFLElBQUk7WUFDYixlQUFlLEVBQUUsTUFBTTtZQUN2QixPQUFPLEVBQUUsRUFBRTtZQUNYLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLGVBQWU7WUFDMUIsY0FBYyxFQUFFLFFBQVE7WUFDeEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQscUVBQXFFO0lBQzdELFFBQVE7UUFDZCxPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLFFBQVEsRUFBRSxDQUFDLGlGQUFpRixDQUFDO1NBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxTQUFTO1FBQ2QsT0FBTztZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUM1QixJQUFJLEVBQUUsV0FBVztZQUNqQixzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLFFBQVEsRUFBRTtnQkFDUixnR0FBZ0c7YUFDakc7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBMVFELG9DQTBRQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFRva2VuLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSdW50aW1lLCBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvcic7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcigncGx1Z2luLWxvb2t1cCcpO1xuXG5pbnRlcmZhY2UgSW5wdXRQcm9wcyB7XG4gIHJlYWRvbmx5IGJhc2VVUkw6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luRmlsdGVyOiBQbHVnaW5GaWx0ZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgUGx1Z2luTG9va3VwIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkxvb2t1cFByb3BzIHtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2plY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICAvKiogT3JnYW5pemF0aW9uIElEIGZvciByZXNvbHZpbmcgcGVyLW9yZyBzZWNyZXRzIGZyb20gU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lPzogUnVudGltZTtcbiAgLyoqIExhbWJkYSB0aW1lb3V0IChkZWZhdWx0OiAzMHMpICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqIExhbWJkYSBtZW1vcnkgaW4gTUIgKGRlZmF1bHQ6IDUxMikgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqIExvZyByZXRlbnRpb24gKGRlZmF1bHQ6IE9ORV9XRUVLKSAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBSZXRlbnRpb25EYXlzO1xuICAvKiogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgbG9va3VwIExhbWJkYSAoZGVmYXVsdDogMzApICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLlxuICAgKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgKG1hdGNoZXMgdGhlIGNvbnN0cnVjdCdzIG5vcm1hbGl6ZSgpIG91dHB1dCkuXG4gICAqIFdoZW4gYSBsb29rdXAgaGl0cyB0aGlzIG1hcCwgYHBsdWdpbigpYCByZXR1cm5zIHRoZSByZXNvbHZlZCBQbHVnaW5cbiAgICogZGlyZWN0bHkg4oCUIG5vIGN1c3RvbSByZXNvdXJjZSBpcyBjcmVhdGVkLiBUaGlzIGlzIHdoYXQgbWFrZXMgdGhlXG4gICAqIG5hbWUsIHZlcnNpb24sIGNvbW1hbmRzLCBlbnYsIGV0Yy4gYXZhaWxhYmxlIGF0IHN5bnRoIHRpbWUgc28gdGhlIHJlc3VsdGluZ1xuICAgKiBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCB2YWx1ZXMgYmFrZWQgaW4uXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xufVxuXG4vKipcbiAqIENESyBDb25zdHJ1Y3QgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgcGx1Z2luIGNvbmZpZ3VyYXRpb25zIGZyb20gYW4gZXh0ZXJuYWwgcGxhdGZvcm1cbiAqIHVzaW5nIEFXUyBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2VzIGJhY2tlZCBieSBhIExhbWJkYSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzOlxuICogLSBBIExhbWJkYSBmdW5jdGlvbiAocGx1Z2luLWxvb2t1cC1oYW5kbGVyKSB0aGF0IGZldGNoZXMgcGx1Z2luIGNvbmZpZ3NcbiAqIC0gQSBDbG91ZFdhdGNoIExvZyBHcm91cCBmb3IgdGhlIExhbWJkYVxuICogLSBBIEN1c3RvbSBSZXNvdXJjZSBQcm92aWRlciB0aGF0IGludm9rZXMgdGhlIExhbWJkYVxuICogLSBBbiBJQU0gcG9saWN5IGdyYW50aW5nIHRoZSBMYW1iZGEgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFscyBzZWNyZXRcbiAqXG4gKiAjIyBQcmVyZXF1aXNpdGVzXG4gKlxuICogQmVmb3JlIGRlcGxveWluZywgc3RvcmUgYSBKV1QgdG9rZW4gaW4gU2VjcmV0cyBNYW5hZ2VyOlxuICogYGBgc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIDxyZWdpb24+XG4gKiBgYGBcbiAqXG4gKiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZSBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lOlxuICogYHtTRUNSRVRTX1BBVEhfUFJFRklYfS97b3JnSWR9L3BsYXRmb3JtYFxuICpcbiAqIEBzZWUgaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLnRzIGZvciB0aGUgTGFtYmRhIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb29rdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF91bmlxdWVJZDogVW5pcXVlSWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3ZpZGVyOiBQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVudGltZTogUnVudGltZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogRHVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbW9yeVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3JnSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBsdWdpbkxvb2t1cFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICghcHJvcHMub3JnYW5pemF0aW9uIHx8ICFwcm9wcy5wcm9qZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggb3JnYW5pemF0aW9uIGFuZCBwcm9qZWN0IGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl91bmlxdWVJZCA9IHByb3BzLnVuaXF1ZUlkO1xuICAgIHRoaXMuX3BsYXRmb3JtVXJsID0gcHJvcHMucGxhdGZvcm1Vcmw7XG4gICAgdGhpcy5fb3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLl9ydW50aW1lID0gcHJvcHMucnVudGltZSA/PyBSdW50aW1lLk5PREVKU18yNF9YO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBwcm9wcy50aW1lb3V0ID8/IER1cmF0aW9uLnNlY29uZHMoMzApO1xuICAgIHRoaXMuX21lbW9yeVNpemUgPSBwcm9wcy5tZW1vcnlTaXplID8/IENvbmZpZy5nZXQoJ2F3cycpLmxhbWJkYS5tZW1vcnlTaXplO1xuICAgIHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgPSBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zO1xuICAgIHRoaXMuX3Jlc29sdmVkUGx1Z2lucyA9IHByb3BzLnJlc29sdmVkUGx1Z2lucztcblxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbigpO1xuXG4gICAgLy8gTG9nLWdyb3VwIHN0cmF0ZWd5OlxuICAgIC8vICAgUHJldmlvdXMgY29kZSBjcmVhdGVkIGFuIGBBV1M6OkxvZ3M6OkxvZ0dyb3VwYCByZXNvdXJjZSB3aXRoIGFuXG4gICAgLy8gICBFWFBMSUNJVCBuYW1lIChgL2F3cy9sYW1iZGEvcGx1Z2luLWxvb2t1cC1OYCkuIFRoYXQgYnJlYWtzIGV2ZXJ5XG4gICAgLy8gICByZS1kZXBsb3kgYWZ0ZXIgYSByb2xsZWQtYmFjayBzdGFjazogQVdTIGF1dG8tY3JlYXRlcyB0aGUgZ3JvdXAgb25cbiAgICAvLyAgIGZpcnN0IExhbWJkYSBpbnZvY2F0aW9uLCB0aGUgcm9sbGJhY2sgbGVhdmVzIGl0IGFzIGFuIG9ycGhhbiwgYW5kXG4gICAgLy8gICB0aGUgbmV4dCBDREsgcnVuIGZhaWxzIHdpdGggXCJSZXNvdXJjZSAuLi4gYWxyZWFkeSBleGlzdHNcIiBiZWNhdXNlXG4gICAgLy8gICB0aGUgZXhwbGljaXQgbmFtZSBjb2xsaWRlcyB3aXRoIHRoZSBvcnBoYW4uXG4gICAgLy9cbiAgICAvLyAgIEZpeDogdXNlIGBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKClgIHRvIGFkb3B0LW9yLXBhc3MtdGhyb3VnaC5cbiAgICAvLyAgIElmIHRoZSBncm91cCBleGlzdHMsIENESyByZWZlcmVuY2VzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJlY3JlYXRlLlxuICAgIC8vICAgSWYgaXQgZG9lc24ndCwgQVdTIExhbWJkYSBhdXRvLWNyZWF0ZXMgaXQgb24gZmlyc3QgaW52b2NhdGlvbi5cbiAgICAvLyAgIFJldGVudGlvbiBpcyB0aGVuIHNldCB2aWEgYSBzZXBhcmF0ZSByZXRlbnRpb24tcG9saWN5IGN1c3RvbVxuICAgIC8vICAgcmVzb3VyY2Ugd2hpY2ggaXMgaWRlbXBvdGVudCAoc2FmZSB0byBhcHBseSB0byBleGlzdGluZyBncm91cHMpLlxuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS8ke3RoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdwbHVnaW46bG9va3VwJykucmVwbGFjZSgvOi9nLCAnLScpfWA7XG4gICAgY29uc3QgbG9nR3JvdXAgPSBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdsb2c6Z3JvdXAnKSxcbiAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICApO1xuXG4gICAgdGhpcy5fcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ3Jlc291cmNlOnByb3ZpZGVyJyksIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nR3JvdXAsXG4gICAgfSk7XG5cbiAgICBsb2cuZGVidWcoYFBsdWdpbkxvb2t1cCBpbml0aWFsaXplZCBmb3IgJHtwcm9wcy5vcmdhbml6YXRpb259LyR7cHJvcHMucHJvamVjdH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCBhbmQgcmVzb2x2ZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gdXNpbmcgZWl0aGVyIGEgc2ltcGxlIG5hbWUgb3IgZnVsbCBQbHVnaW5PcHRpb25zIG9iamVjdFxuICAgKiBEdXJpbmcgc3ludGhlc2lzLCBpZiB0aGUgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pLCByZXR1cm5zIGZhbGxiYWNrIHBsdWdpblxuICAgKiBEdXJpbmcgZGVwbG95bWVudCwgYXR0ZW1wdHMgdG8gcGFyc2UgdGhlIGFjdHVhbCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgY3VzdG9tIHJlc291cmNlXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBQbHVnaW4gbmFtZSAoc3RyaW5nKSBvciBjb21wbGV0ZSBQbHVnaW5PcHRpb25zIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUmVzb2x2ZWQgUGx1Z2luIG9iamVjdCBvciBmYWxsYmFjayBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBwbHVnaW4ocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMubm9ybWFsaXplKHBsdWdpbik7XG5cbiAgICAvLyBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSS5cbiAgICAvLyBTa2lwIHRoZSBjdXN0b20gcmVzb3VyY2UgZW50aXJlbHkg4oCUIHdlIGFscmVhZHkga25vdyB0aGUgcGx1Z2luJ3NcbiAgICAvLyBuYW1lLCB2ZXJzaW9uLCBjb21tYW5kcywgZW52LCBldGMuIGF0IHN5bnRoIHRpbWUsIHNvIHRoZSByZXN1bHRpbmcgQ0ZOXG4gICAgLy8gdGVtcGxhdGUgY2FuIHNoaXAgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAgY29uc3QgY2FjaGVLZXkgPSBwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lO1xuICAgIGNvbnN0IHByZVJlc29sdmVkID0gdGhpcy5fcmVzb2x2ZWRQbHVnaW5zPy5bY2FjaGVLZXldO1xuICAgIGlmIChwcmVSZXNvbHZlZCkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgcHJlLXJlc29sdmVkIChhbGlhcz0ke2NhY2hlS2V5fSkg4oCUIHNraXBwaW5nIGN1c3RvbSByZXNvdXJjZWApO1xuICAgICAgcmV0dXJuIHByZVJlc29sdmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHMpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBjdXN0b20uZ2V0QXR0U3RyaW5nKCdSZXN1bHRWYWx1ZScpO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChlbmNvZGVkKSkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pIGR1cmluZyBzeW50aGVzaXMg4oCUIHVzaW5nIGZhbGxiYWNrLiBUaGUgYWN0dWFsIHBsdWdpbiB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZS5gKTtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcblxuICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCAhZGF0YS5uYW1lIHx8ICFBcnJheS5pc0FycmF5KGRhdGEuY29tbWFuZHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbHVnaW4gcmVzcG9uc2U6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzIChuYW1lLCBjb21tYW5kcyknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgUGx1Z2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIGRhdGE6ICR7ZXJyb3JNc2d9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlci5cbiAgICpcbiAgICogSldUIHRva2VuIGlzIHN0b3JlZCBpbiBhIHByZS1leGlzdGluZyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGF0XG4gICAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWAuIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlXG4gICAqIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWUgdXNpbmcgYENvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWGAuXG4gICAqXG4gICAqIENyZWF0ZSB0aGUgc2VjcmV0IGJlZm9yZSBkZXBsb3lpbmcgd2l0aDpcbiAgICogICBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvbigpOiBOb2RlanNGdW5jdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9vcmdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmdJZCBpcyByZXF1aXJlZCBmb3IgUGx1Z2luTG9va3VwIOKAlCBuZWVkZWQgdG8gcmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aCh0aGlzLl9vcmdJZCwgJ3BsYXRmb3JtJyk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnb25ldmVudDpoYW5kbGVyJyksIHtcbiAgICAgIHJ1bnRpbWU6IHRoaXMuX3J1bnRpbWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLl90aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogdGhpcy5fbWVtb3J5U2l6ZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIGVudHJ5OiBqb2luKF9fZGlybmFtZSwgJy8uLi9oYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIuanMnKSxcbiAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IGpvaW4oX19kaXJuYW1lLCAnLy4uL2hhbmRsZXJzL3BucG0tbG9jay55YW1sJyksXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgUExBVEZPUk1fU0VDUkVUX05BTUU6IHNlY3JldE5hbWUsXG4gICAgICAgIC8vIEFsbG93IHNlbGYtc2lnbmVkIGNlcnRzIHdoZW4gcGxhdGZvcm0gdXNlcyBIVFRQUyB3aXRob3V0IGEgQ0Etc2lnbmVkIGNlcnRpZmljYXRlXG4gICAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICAgIE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ6ICcwJyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICBzb3VyY2VNYXA6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICBleHRlcm5hbE1vZHVsZXM6IFsnQGF3cy1zZGsvKiddLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHRoZSBMYW1iZGEgcGVybWlzc2lvbiB0byByZWFkIHRoZSBwZXItb3JnIHBsYXRmb3JtIHNlY3JldC5cbiAgICAvLyBUaGUgd2lsZGNhcmQgc3VmZml4IGhhbmRsZXMgdGhlIDYtY2hhciByYW5kb20gSUQgdGhhdCBTZWNyZXRzIE1hbmFnZXIgYXBwZW5kcy5cbiAgICBmbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOnNlY3JldHNtYW5hZ2VyOio6KjpzZWNyZXQ6JHtzZWNyZXROYW1lfS0qYF0sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBkZWZhdWx0IHBsdWdpbiBmaWx0ZXIuXG4gICAqIEFjY2VzcyBjb250cm9sIChvcmdJZCBzY29waW5nLCBwdWJsaWMvcHJpdmF0ZSB2aXNpYmlsaXR5KSBpcyBoYW5kbGVkIGJ5XG4gICAqIHRoZSBwbGF0Zm9ybSdzIGFjY2VzcyBjb250cm9sIHF1ZXJ5IGJ1aWxkZXIgYmFzZWQgb24gdGhlIEpXVCdzIG9yZ2FuaXphdGlvbklkLlxuICAgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyKG5hbWU6IHN0cmluZyk6IFBsdWdpbkZpbHRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemUocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luT3B0aW9ucyB7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBwbHVnaW4sXG4gICAgICAgIGZpbHRlcjogdGhpcy5kZWZhdWx0RmlsdGVyKHBsdWdpbiksXG4gICAgICAgIGFsaWFzOiBgJHtwbHVnaW59LWFsaWFzYCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgYWxpYXM6IHBsdWdpbi5hbGlhcyA/PyBgJHtwbHVnaW4ubmFtZX0tYWxpYXNgLFxuICAgICAgZmlsdGVyOiBwbHVnaW4uZmlsdGVyID8/IHRoaXMuZGVmYXVsdEZpbHRlcihwbHVnaW4ubmFtZSksXG4gICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEN1c3RvbVJlc291cmNlIGluc3RhbmNlIHRoYXQgdHJpZ2dlcnMgcGx1Z2luIGxvb2t1cCBkdXJpbmcgZGVwbG95bWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21SZXNvdXJjZShwcm9wczogUGx1Z2luT3B0aW9ucyk6IEN1c3RvbVJlc291cmNlIHtcbiAgICBjb25zdCByZXNvdXJjZUlkID0gdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUocHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIHJlc291cmNlSWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5fcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpQbHVnaW5Mb29rdXAnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBiYXNlVVJMOiB0aGlzLl9wbGF0Zm9ybVVybCxcbiAgICAgICAgcGx1Z2luRmlsdGVyOiBwcm9wcy5maWx0ZXIsXG4gICAgICB9IGFzIElucHV0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQmFzZSBwbHVnaW4gc2hhcGUgd2l0aCBuby1vcCBkZWZhdWx0cyBmb3IgZmllbGRzIENESyBkb2Vzbid0IHVzZS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZVBsdWdpbigpOiBQbHVnaW4ge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyxcbiAgICAgIG9yZ0lkOiAnc3lzdGVtJyxcbiAgICAgIGNyZWF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgIHVwZGF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgIG5hbWU6ICdmYWxsYmFjaycsXG4gICAgICBkZXNjcmlwdGlvbjogbnVsbCxcbiAgICAgIGtleXdvcmRzOiBbXSxcbiAgICAgIGNhdGVnb3J5OiAndW5rbm93bicsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgcGx1Z2luVHlwZTogJ0NvZGVCdWlsZFN0ZXAnLFxuICAgICAgY29tcHV0ZVR5cGU6ICdTTUFMTCcsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgZmFpbHVyZUJlaGF2aW9yOiAnZmFpbCcsXG4gICAgICBzZWNyZXRzOiBbXSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGVudjoge30sXG4gICAgICBidWlsZEFyZ3M6IHt9LFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXSxcbiAgICAgIGNvbW1hbmRzOiBbXSxcbiAgICAgIGRvY2tlcmZpbGU6IG51bGwsXG4gICAgICBidWlsZFR5cGU6ICdtZXRhZGF0YV9vbmx5JyxcbiAgICAgIGFjY2Vzc01vZGlmaWVyOiAncHVibGljJyxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICAgIGRlbGV0ZWRCeTogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEZhbGxiYWNrIGZvciB1bnJlc29sdmVkIHBsdWdpbiBsb29rdXAgdG9rZW5zIGR1cmluZyBzeW50aGVzaXMuICovXG4gIHByaXZhdGUgZmFsbGJhY2soKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIGNvbW1hbmRzOiBbJ2VjaG8gXCJGQUxMQkFDSzogUGx1Z2luIGxvb2t1cCB1bnJlc29sdmVkIOKAlCB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZVwiJ10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aCBwbHVnaW4gd2l0aCBwaXBlbGluZS1tYW5hZ2VyIGNvbW1hbmRzLiBDb2xkLXN0YXJ0IGJvb3RzdHJhcCBmb3JcbiAgICogdGhlIHN5bnRoIHN0ZXAgd2hlbiBwcmUtcmVzb2x1dGlvbiBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aC9kZXBsb3lgXG4gICAqIGRpZG4ndCBwb3B1bGF0ZSBgcmVzb2x2ZWRQbHVnaW5zYCBmb3IgdGhlIHN5bnRoIHBsdWdpbi4gUnVucyBvbiB0aGVcbiAgICogY29uZmlndXJlZCBgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0VgIChkZWZhdWx0IGBwaXBlbGluZS1ib290c3RyYXA6MS4wYClcbiAgICogYW5kIHNlbGYtYm9vdHN0cmFwcyB0aGUgcmVhbCBzeW50aCB2aWFcbiAgICogYHBpcGVsaW5lLW1hbmFnZXIgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfWAuXG4gICAqXG4gICAqIE5vIGBpbnN0YWxsQ29tbWFuZHNgOiB0aGUgZGVmYXVsdCBpbWFnZSBhbHJlYWR5IGhhcyBgcGlwZWxpbmUtbWFuYWdlcmBcbiAgICogYmFrZWQgaW4gKHRoYXQncyB0aGUgd2hvbGUgcG9pbnQgb2YgYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgKS4gSWYgdGhlXG4gICAqIG9wZXJhdG9yIHBvaW50cyBDT0RFQlVJTERfREVGQVVMVF9JTUFHRSBhdCBhbiBpbWFnZSBsYWNraW5nIGl0IChlLmcuXG4gICAqIHZhbmlsbGEgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjApLCB0aGlzIHN0ZXAgZXhpdHMgMTI3IOKAlCBmaXggdGhhdFxuICAgKiBieSB1c2luZyBhbiBpbWFnZSB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgcmF0aGVyIHRoYW4gcGFwZXJpbmcgb3ZlciBpdFxuICAgKiB3aXRoIGEgcGVyLWJ1aWxkIGBucG0gaW5zdGFsbCAtZ2AuXG4gICAqL1xuICBwdWJsaWMgYm9vdHN0cmFwKCk6IFBsdWdpbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlBsdWdpbkxvb2t1cC5iYXNlUGx1Z2luKCksXG4gICAgICBuYW1lOiAnY2RrLXN5bnRoJyxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICdwaXBlbGluZS1tYW5hZ2VyIHN5bnRoIC0taWQgJHtQSVBFTElORV9JRH0gLS1zdG9yZS10b2tlbnMgLS1xdWlldCAtLW5vLW5vdGljZXMgLS1uby12ZXJpZnktc3NsJyxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -30,8 +30,8 @@
30
30
  "constructs": "10.5.1",
31
31
  "jsonwebtoken": "9.0.3",
32
32
  "uuid": "13.0.0",
33
- "@pipeline-builder/pipeline-data": "3.4.55",
34
- "@pipeline-builder/api-core": "3.4.54"
33
+ "@pipeline-builder/api-core": "3.4.54",
34
+ "@pipeline-builder/pipeline-data": "3.4.55"
35
35
  },
36
36
  "keywords": [
37
37
  "aws",
@@ -75,7 +75,7 @@
75
75
  "access": "public",
76
76
  "registry": "https://registry.npmjs.org/"
77
77
  },
78
- "version": "3.4.56",
78
+ "version": "3.4.58",
79
79
  "bugs": {
80
80
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
81
81
  },