@pipeline-builder/pipeline-manager 3.4.106 → 3.4.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -12
- package/dist/agent/ai.d.ts +1 -1
- package/dist/agent/ai.js +2 -2
- package/dist/agent/health.d.ts +1 -1
- package/dist/agent/health.js +2 -2
- package/dist/agent/ports.d.ts +1 -1
- package/dist/agent/ports.js +4 -4
- package/dist/agent/post-steps.d.ts +4 -4
- package/dist/agent/post-steps.d.ts.map +1 -1
- package/dist/agent/post-steps.js +12 -12
- package/dist/agent/prereqs.d.ts.map +1 -1
- package/dist/agent/prereqs.js +19 -47
- package/dist/agent/targets.d.ts +9 -7
- package/dist/agent/targets.d.ts.map +1 -1
- package/dist/agent/targets.js +63 -49
- package/dist/agent/troubleshoot.js +2 -2
- package/dist/cli.js +2 -2
- package/dist/commands/provision.d.ts +9 -7
- package/dist/commands/provision.d.ts.map +1 -1
- package/dist/commands/provision.js +49 -64
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +6 -4
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +1 -2
- package/package.json +27 -15
package/dist/agent/prereqs.js
CHANGED
|
@@ -38,26 +38,6 @@ function awsIdentity() {
|
|
|
38
38
|
return null;
|
|
39
39
|
return read('aws sts get-caller-identity --query Account --output text');
|
|
40
40
|
}
|
|
41
|
-
/**
|
|
42
|
-
* State of the ECS service-linked role (`AWSServiceRoleForECS`). ECS auto-creates it on the
|
|
43
|
-
* first `CreateCluster`, but that first attempt RACES and fails ("Unable to assume the service
|
|
44
|
-
* linked role"); the role then exists and a re-run succeeds. Pre-creating it avoids the failed
|
|
45
|
-
* first stack. Returns `unknown` when we can't tell (no `aws`, no creds, or no `iam:GetRole`) —
|
|
46
|
-
* so the caller never asserts "missing" on an AccessDenied, only on a real NoSuchEntity.
|
|
47
|
-
*/
|
|
48
|
-
function ecsLinkedRoleState() {
|
|
49
|
-
if (!has('aws'))
|
|
50
|
-
return 'unknown';
|
|
51
|
-
try {
|
|
52
|
-
// stderr piped so the throw carries the AWS error; stdout ignored.
|
|
53
|
-
execSync('aws iam get-role --role-name AWSServiceRoleForECS', { stdio: ['ignore', 'ignore', 'pipe'], timeout: 15000 });
|
|
54
|
-
return 'present';
|
|
55
|
-
}
|
|
56
|
-
catch (e) {
|
|
57
|
-
const stderr = String(e.stderr ?? '');
|
|
58
|
-
return /NoSuchEntity|cannot be found/i.test(stderr) ? 'absent' : 'unknown';
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
41
|
/** Parsed `git --version` as [major, minor], or null if git is absent/unparseable. */
|
|
62
42
|
function gitVersion() {
|
|
63
43
|
const out = read('git --version');
|
|
@@ -102,7 +82,7 @@ export function checkPrereqs(target, opts = {}) {
|
|
|
102
82
|
}
|
|
103
83
|
}
|
|
104
84
|
if (target === 'local') {
|
|
105
|
-
// deploy/local/bin/setup.sh hard-checks all of these at startup and aborts if
|
|
85
|
+
// deploy/local/docker/bin/setup.sh hard-checks all of these at startup and aborts if
|
|
106
86
|
// any is missing — mirror them here so provision blocks up front instead of
|
|
107
87
|
// failing mid-deploy (e.g. the classic "yq is not installed").
|
|
108
88
|
checks.push(check('Docker', dockerRunning(), 'daemon reachable', 'install Docker and start the daemon'));
|
|
@@ -123,34 +103,26 @@ export function checkPrereqs(target, opts = {}) {
|
|
|
123
103
|
}
|
|
124
104
|
return checks;
|
|
125
105
|
}
|
|
126
|
-
// ec2 +
|
|
127
|
-
// the AWS CLI with working credentials (and nothing CDK/node-related). ec2's
|
|
128
|
-
// instance self-bootstraps over UserData, so the CLI is its only host tool.
|
|
106
|
+
// ec2 + eks — both deploy to AWS via the CLI, so both need the AWS CLI + working creds.
|
|
129
107
|
const account = awsIdentity();
|
|
130
108
|
checks.push(check('AWS CLI', has('aws'), 'on PATH', 'install the AWS CLI v2'));
|
|
131
109
|
checks.push({ name: 'AWS credentials', ok: account !== null, detail: account ? `authenticated (account ${account})` : 'run `aws configure` / set AWS_PROFILE', required: true });
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
// openssl before the
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
ok: false,
|
|
149
|
-
required: false,
|
|
150
|
-
detail: 'AWSServiceRoleForECS not found — the first ECS cluster create will create it, but that first attempt fails on the not-yet-ready role (the re-run then self-heals). To avoid the failed first stack, pre-create it: aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com',
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
// 'unknown' (no iam:GetRole / transient) → no line, rather than a misleading one.
|
|
110
|
+
// eks: setup.sh creates the Auto Mode cluster (eksctl), applies the manifests (kubectl,
|
|
111
|
+
// rendered through envsubst), and generates the registry token-signing keypair on the
|
|
112
|
+
// host (openssl) before creating the k8s secret. ec2 bootstraps its secrets on the
|
|
113
|
+
// instance, so it needs none of these.
|
|
114
|
+
if (target === 'eks') {
|
|
115
|
+
// eksctl can run from PATH OR via the official image — setup.sh falls back to
|
|
116
|
+
// `docker run public.ecr.aws/eksctl/eksctl` when the binary is absent, so a host
|
|
117
|
+
// with Docker + AWS creds is sufficient.
|
|
118
|
+
const eksctlOnPath = has('eksctl');
|
|
119
|
+
checks.push(check('eksctl', eksctlOnPath || dockerRunning(), eksctlOnPath ? 'on PATH' : 'via Docker image public.ecr.aws/eksctl/eksctl (binary not found)', 'install eksctl, or install + start Docker (setup.sh will run public.ecr.aws/eksctl/eksctl)'));
|
|
120
|
+
checks.push(check('kubectl', has('kubectl'), 'on PATH', 'install kubectl — applies the manifests to the cluster'));
|
|
121
|
+
checks.push(check('openssl', has('openssl'), 'on PATH', 'install openssl — setup.sh generates the registry token keypair'));
|
|
122
|
+
checks.push(check('envsubst', has('envsubst'), 'on PATH', 'install gettext (macOS: `brew install gettext`) — setup.sh renders cluster.yaml + manifests with envsubst'));
|
|
123
|
+
// Like minikube, --with-plugins builds plugin images on the host, which needs yq.
|
|
124
|
+
if (opts.withPlugins) {
|
|
125
|
+
checks.push(check('yq', has('yq'), 'on PATH', 'install yq (macOS: `brew install yq`) — required to build plugins'));
|
|
154
126
|
}
|
|
155
127
|
}
|
|
156
128
|
return checks;
|
|
@@ -159,4 +131,4 @@ export function checkPrereqs(target, opts = {}) {
|
|
|
159
131
|
export function prereqsSatisfied(checks) {
|
|
160
132
|
return checks.every((c) => c.ok || !c.required);
|
|
161
133
|
}
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wcmVyZXFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3pDLGdDQUFnQztBQUNoQyxTQUFTLEdBQUcsQ0FBQyxHQUFXO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsSUFBSSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsMkNBQTJDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckYsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxTQUFTLHNCQUFzQjtJQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxD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IENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBEZXRlcm1pbmlzdGljLCBSRUFELU9OTFkgcHJlcmVxdWlzaXRlIGNoZWNrcyBwZXIgdGFyZ2V0LiBObyBMTE0sIG5vIG11dGF0aW9uIOKAlFxuICogZXZlcnkgY29tbWFuZCBoZXJlIG9ubHkgaW5zcGVjdHMgKHByZXNlbmNlIGNoZWNrcywgYGF3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eWAsXG4gKiBgZG9ja2VyIGluZm9gKS4gVGhpcyBpcyB0aGUga2luZCBvZiB0aGluZyBhIHNjcmlwdCBkb2VzIGJldHRlciB0aGFuIGFuIGFnZW50LFxuICogc28gaXQgc3RheXMgZGV0ZXJtaW5pc3RpYzsgdGhlIExMTSBpcyByZXNlcnZlZCBmb3IgTkwgcGFyc2luZyArIGRpYWdub3Npcy5cbiAqL1xuXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBUYXJnZXRJZCB9IGZyb20gJy4vdGFyZ2V0cy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcmVxQ2hlY2sge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuICByZWFkb25seSBkZXRhaWw6IHN0cmluZztcbiAgLyoqIEEgZmFpbGluZyByZXF1aXJlZCBjaGVjayBibG9ja3MgZGVwbG95bWVudDsgYWR2aXNvcnkgb25lcyBhcmUgd2FybmluZ3MuICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkOiBib29sZWFuO1xufVxuXG4vKiogVHJ1ZSBpZiBgY21kYCBpcyBvbiBQQVRILiAqL1xuZnVuY3Rpb24gaGFzKGNtZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgZXhlY1N5bmMoYGNvbW1hbmQgLXYgJHtjbWR9YCwgeyBzdGRpbzogJ2lnbm9yZScsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKiogUnVuIGEgcmVhZC1vbmx5IGNvbW1hbmQ7IHJldHVybiBpdHMgdHJpbW1lZCBzdGRvdXQgb3IgbnVsbCBvbiBmYWlsdXJlLiAqL1xuZnVuY3Rpb24gcmVhZChjbWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICB0cnkge1xuICAgIHJldHVybiBleGVjU3luYyhjbWQsIHsgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAnaWdub3JlJ10sIHRpbWVvdXQ6IDE1MDAwIH0pLnRvU3RyaW5nKCkudHJpbSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkb2NrZXJSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaGFzKCdkb2NrZXInKSAmJiByZWFkKCdkb2NrZXIgaW5mbyAtLWZvcm1hdCBcInt7LlNlcnZlclZlcnNpb259fVwiJykgIT09IG51bGw7XG59XG5cbi8qKiBEb2NrZXIgQ29tcG9zZSB2MiAoYGRvY2tlciBjb21wb3NlYCkgb3IgbGVnYWN5IHYxIChgZG9ja2VyLWNvbXBvc2VgKSDigJQgc2V0dXAuc2ggbmVlZHMgb25lLiAqL1xuZnVuY3Rpb24gZG9ja2VyQ29tcG9zZUF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlYWQoJ2RvY2tlciBjb21wb3NlIHZlcnNpb24nKSAhPT0gbnVsbCB8fCBoYXMoJ2RvY2tlci1jb21wb3NlJyk7XG59XG5cbmZ1bmN0aW9uIGF3c0lkZW50aXR5KCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWhhcygnYXdzJykpIHJldHVybiBudWxsO1xuICByZXR1cm4gcmVhZCgnYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5IC0tcXVlcnkgQWNjb3VudCAtLW91dHB1dCB0ZXh0Jyk7XG59XG5cbi8qKlxuICogU3RhdGUgb2YgdGhlIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlIChgQVdTU2VydmljZVJvbGVGb3JFQ1NgKS4gRUNTIGF1dG8tY3JlYXRlcyBpdCBvbiB0aGVcbiAqIGZpcnN0IGBDcmVhdGVDbHVzdGVyYCwgYnV0IHRoYXQgZmlyc3QgYXR0ZW1wdCBSQUNFUyBhbmQgZmFpbHMgKFwiVW5hYmxlIHRvIGFzc3VtZSB0aGUgc2VydmljZVxuICogbGlua2VkIHJvbGVcIik7IHRoZSByb2xlIHRoZW4gZXhpc3RzIGFuZCBhIHJlLXJ1biBzdWNjZWVkcy4gUHJlLWNyZWF0aW5nIGl0IGF2b2lkcyB0aGUgZmFpbGVkXG4gKiBmaXJzdCBzdGFjay4gUmV0dXJucyBgdW5rbm93bmAgd2hlbiB3ZSBjYW4ndCB0ZWxsIChubyBgYXdzYCwgbm8gY3JlZHMsIG9yIG5vIGBpYW06R2V0Um9sZWApIOKAlFxuICogc28gdGhlIGNhbGxlciBuZXZlciBhc3NlcnRzIFwibWlzc2luZ1wiIG9uIGFuIEFjY2Vzc0RlbmllZCwgb25seSBvbiBhIHJlYWwgTm9TdWNoRW50aXR5LlxuICovXG5mdW5jdGlvbiBlY3NMaW5rZWRSb2xlU3RhdGUoKTogJ3ByZXNlbnQnIHwgJ2Fic2VudCcgfCAndW5rbm93bicge1xuICBpZiAoIWhhcygnYXdzJykpIHJldHVybiAndW5rbm93bic7XG4gIHRyeSB7XG4gICAgLy8gc3RkZXJyIHBpcGVkIHNvIHRoZSB0aHJvdyBjYXJyaWVzIHRoZSBBV1MgZXJyb3I7IHN0ZG91dCBpZ25vcmVkLlxuICAgIGV4ZWNTeW5jKCdhd3MgaWFtIGdldC1yb2xlIC0tcm9sZS1uYW1lIEFXU1NlcnZpY2VSb2xlRm9yRUNTJywgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ3BpcGUnXSwgdGltZW91dDogMTUwMDAgfSk7XG4gICAgcmV0dXJuICdwcmVzZW50JztcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIGNvbnN0IHN0ZGVyciA9IFN0cmluZygoZSBhcyB7IHN0ZGVycj86IEJ1ZmZlciB8IHN0cmluZyB9KS5zdGRlcnIgPz8gJycpO1xuICAgIHJldHVybiAvTm9TdWNoRW50aXR5fGNhbm5vdCBiZSBmb3VuZC9pLnRlc3Qoc3RkZXJyKSA/ICdhYnNlbnQnIDogJ3Vua25vd24nO1xuICB9XG59XG5cbi8qKiBQYXJzZWQgYGdpdCAtLXZlcnNpb25gIGFzIFttYWpvciwgbWlub3JdLCBvciBudWxsIGlmIGdpdCBpcyBhYnNlbnQvdW5wYXJzZWFibGUuICovXG5mdW5jdGlvbiBnaXRWZXJzaW9uKCk6IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3Qgb3V0ID0gcmVhZCgnZ2l0IC0tdmVyc2lvbicpO1xuICBjb25zdCBtID0gb3V0Py5tYXRjaCgvKFxcZCspXFwuKFxcZCspLyk7XG4gIHJldHVybiBtID8gW051bWJlcihtWzFdKSwgTnVtYmVyKG1bMl0pXSA6IG51bGw7XG59XG5cbi8qKiBUcnVlIHdoZW4gZ2l0IGlzIG9uIFBBVEggKHJlcXVpcmVkIHRvIGJvb3RzdHJhcCBhIGNsb25lIGF0IGFsbCkuICovXG5leHBvcnQgZnVuY3Rpb24gZ2l0QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2l0VmVyc2lvbigpICE9PSBudWxsO1xufVxuXG4vKipcbiAqIENvbmUgYHNwYXJzZS1jaGVja291dGAgKCsgYC0tZmlsdGVyPWJsb2I6bm9uZWApIG5lZWRzIGdpdCDiiaUgMi4yNy4gQmVsb3cgdGhhdCxcbiAqIHRoZSBib290c3RyYXAgZmFsbHMgYmFjayB0byBhIChjb3JyZWN0LCBqdXN0IGxhcmdlcikgZnVsbCBjbG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IHYgPSBnaXRWZXJzaW9uKCk7XG4gIHJldHVybiB2ICE9PSBudWxsICYmICh2WzBdID4gMiB8fCAodlswXSA9PT0gMiAmJiB2WzFdID49IDI3KSk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBQcmVyZXFDaGVjayBmcm9tIGEgU0lOR0xFIHByZXNlbmNlIGV2YWx1YXRpb24uIENvbGxhcHNlcyB0aGUgcmVwZWF0ZWRcbiAqIGB7IG9rOiBwcm9iZSgpLCBkZXRhaWw6IHByb2JlKCkgPyBhIDogYiB9YCBzaGFwZSDigJQgd2hpY2ggYWxzbyBjYWxsZWQgdGhlIHByb2JlXG4gKiB0d2ljZSDigJQgaW50byBvbmUgcGxhY2U7IHRoZSBjYWxsZXIgZXZhbHVhdGVzIHRoZSBwcm9iZSBvbmNlIGFuZCBwYXNzZXMgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gY2hlY2sobmFtZTogc3RyaW5nLCBwcmVzZW50OiBib29sZWFuLCBwcmVzZW50RGV0YWlsOiBzdHJpbmcsIG1pc3NpbmdEZXRhaWw6IHN0cmluZywgcmVxdWlyZWQgPSB0cnVlKTogUHJlcmVxQ2hlY2sge1xuICByZXR1cm4geyBuYW1lLCBvazogcHJlc2VudCwgZGV0YWlsOiBwcmVzZW50ID8gcHJlc2VudERldGFpbCA6IG1pc3NpbmdEZXRhaWwsIHJlcXVpcmVkIH07XG59XG5cbi8qKlxuICogUnVuIHRoZSByZWFkLW9ubHkgcHJlcmVxdWlzaXRlIGNoZWNrcyBmb3IgYSB0YXJnZXQuIFB1cmUgaW5zcGVjdGlvbiDigJQgc2FmZSB0b1xuICogcnVuIHVuY29uZGl0aW9uYWxseSAodGhlIHBsYW4gYXNzZW1ibGVzIHRoaXMgYmVmb3JlIHRoZSBnYXRlZCBleGVjdXRpb24pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcmVyZXFzKHRhcmdldDogVGFyZ2V0SWQsIG9wdHM6IHsgYm9vdHN0cmFwPzogYm9vbGVhbjsgd2l0aFBsdWdpbnM/OiBib29sZWFuIH0gPSB7fSk6IFByZXJlcUNoZWNrW10ge1xuICBjb25zdCBjaGVja3M6IFByZXJlcUNoZWNrW10gPSBbXTtcbiAgLy8gc2V0dXAuc2ggKGxvY2FsKSArIHNldHVwLnNoIChtaW5pa3ViZSkgYm90aCBnZW5lcmF0ZSB0aGUgVExTIGNlcnQgKyByZWdpc3RyeSBKV1Qga2V5IHdpdGggb3BlbnNzbC5cbiAgY29uc3QgT1BFTlNTTF9UTFMgPSAnaW5zdGFsbCBvcGVuc3NsIOKAlCBzZXR1cC5zaCBnZW5lcmF0ZXMgdGhlIFRMUyBjZXJ0ICsgcmVnaXN0cnkgSldUIGtleSB3aXRoIGl0JztcblxuICAvLyBgLS1yZXBvYCBib290c3RyYXAgZ2l0LWNsb25lcyB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCDihpIgZ2l0IGlzIHJlcXVpcmVkLiBBXG4gIC8vIGdpdCBiZWxvdyAyLjI3IHN0aWxsIHdvcmtzIChmdWxsLWNsb25lIGZhbGxiYWNrKSwgc28gdGhlIHZlcnNpb24gaXMgYWR2aXNvcnkuXG4gIGlmIChvcHRzLmJvb3RzdHJhcCkge1xuICAgIGNvbnN0IHYgPSBnaXRWZXJzaW9uKCk7XG4gICAgY2hlY2tzLnB1c2goeyBuYW1lOiAnZ2l0Jywgb2s6IHYgIT09IG51bGwsIGRldGFpbDogdiA/IGBvbiBQQVRIICgke3ZbMF19LiR7dlsxXX0pYCA6ICdpbnN0YWxsIGdpdCcsIHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgIGlmICh2ICE9PSBudWxsICYmICFnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCkpIHtcbiAgICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ2dpdCDiiaUgMi4yNycsIG9rOiBmYWxzZSwgZGV0YWlsOiAnc3BhcnNlIGNsb25lIG5lZWRzIGdpdCDiiaUgMi4yNyDigJQgZmFsbGluZyBiYWNrIHRvIGEgZnVsbCBjbG9uZScsIHJlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFyZ2V0ID09PSAnbG9jYWwnKSB7XG4gICAgLy8gZGVwbG95L2xvY2FsL2Jpbi9zZXR1cC5zaCBoYXJkLWNoZWNrcyBhbGwgb2YgdGhlc2UgYXQgc3RhcnR1cCBhbmQgYWJvcnRzIGlmXG4gICAgLy8gYW55IGlzIG1pc3Npbmcg4oCUIG1pcnJvciB0aGVtIGhlcmUgc28gcHJvdmlzaW9uIGJsb2NrcyB1cCBmcm9udCBpbnN0ZWFkIG9mXG4gICAgLy8gZmFpbGluZyBtaWQtZGVwbG95IChlLmcuIHRoZSBjbGFzc2ljIFwieXEgaXMgbm90IGluc3RhbGxlZFwiKS5cbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyJywgZG9ja2VyUnVubmluZygpLCAnZGFlbW9uIHJlYWNoYWJsZScsICdpbnN0YWxsIERvY2tlciBhbmQgc3RhcnQgdGhlIGRhZW1vbicpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyIENvbXBvc2UnLCBkb2NrZXJDb21wb3NlQXZhaWxhYmxlKCksICdhdmFpbGFibGUnLCAnbmVlZHMgYGRvY2tlciBjb21wb3NlYCAodjIgcGx1Z2luKSBvciBgZG9ja2VyLWNvbXBvc2VgICh2MSknKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ3lxJywgaGFzKCd5cScpLCAnb24gUEFUSCcsICdpbnN0YWxsIHlxIChtYWNPUzogYGJyZXcgaW5zdGFsbCB5cWApIOKAlCBzZXR1cC5zaCByZXF1aXJlcyBpdCcpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnb3BlbnNzbCcsIGhhcygnb3BlbnNzbCcpLCAnb24gUEFUSCcsIE9QRU5TU0xfVExTKSk7XG4gICAgcmV0dXJuIGNoZWNrcztcbiAgfVxuXG4gIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyJywgZG9ja2VyUnVubmluZygpLCAnZGFlbW9uIHJlYWNoYWJsZScsICdpbnN0YWxsIERvY2tlciBhbmQgc3RhcnQgdGhlIGRhZW1vbicpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnbWluaWt1YmUnLCBoYXMoJ21pbmlrdWJlJyksICdvbiBQQVRIJywgJ2luc3RhbGwgbWluaWt1YmUnKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2t1YmVjdGwnLCBoYXMoJ2t1YmVjdGwnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBrdWJlY3RsJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgT1BFTlNTTF9UTFMpKTtcbiAgICAvLyBtaW5pa3ViZSdzIHNldHVwLnNoIGRvZXNuJ3QgbmVlZCB5cSwgYnV0IC0td2l0aC1wbHVnaW5zIGJ1aWxkcyBpbWFnZXNcbiAgICAvLyAoYnVpbGQtcGx1Z2luLWltYWdlcy5zaCAvIGdlbmVyYXRlLXBsdWdpbnMuc2gpIHdoaWNoIGRvLlxuICAgIGlmIChvcHRzLndpdGhQbHVnaW5zKSB7XG4gICAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHJlcXVpcmVkIHRvIGJ1aWxkIHBsdWdpbnMnKSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja3M7XG4gIH1cblxuICAvLyBlYzIgKyBmYXJnYXRlIOKAlCBib3RoIGRlcGxveSB2aWEgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXBsb3lgLCBzbyBib3RoIG5lZWRcbiAgLy8gdGhlIEFXUyBDTEkgd2l0aCB3b3JraW5nIGNyZWRlbnRpYWxzIChhbmQgbm90aGluZyBDREsvbm9kZS1yZWxhdGVkKS4gZWMyJ3NcbiAgLy8gaW5zdGFuY2Ugc2VsZi1ib290c3RyYXBzIG92ZXIgVXNlckRhdGEsIHNvIHRoZSBDTEkgaXMgaXRzIG9ubHkgaG9zdCB0b29sLlxuICBjb25zdCBhY2NvdW50ID0gYXdzSWRlbnRpdHkoKTtcbiAgY2hlY2tzLnB1c2goY2hlY2soJ0FXUyBDTEknLCBoYXMoJ2F3cycpLCAnb24gUEFUSCcsICdpbnN0YWxsIHRoZSBBV1MgQ0xJIHYyJykpO1xuICBjaGVja3MucHVzaCh7IG5hbWU6ICdBV1MgY3JlZGVudGlhbHMnLCBvazogYWNjb3VudCAhPT0gbnVsbCwgZGV0YWlsOiBhY2NvdW50ID8gYGF1dGhlbnRpY2F0ZWQgKGFjY291bnQgJHthY2NvdW50fSlgIDogJ3J1biBgYXdzIGNvbmZpZ3VyZWAgLyBzZXQgQVdTX1BST0ZJTEUnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgLy8gZmFyZ2F0ZSBydW5zIGluaXQtc2VjcmV0cy5zaCBvbiB0aGUgaG9zdCB0byBnZW5lcmF0ZSB0aGUgcGxhdGZvcm0gc2VjcmV0c1xuICAvLyAoSldUL3JlZnJlc2ggc2VjcmV0cywgREIgcGFzc3dvcmRzLCB0aGUgcmVnaXN0cnkncyBSU0Egc2lnbmluZyBrZXkpIHdpdGhcbiAgLy8gb3BlbnNzbCBiZWZvcmUgdGhlIGZpcnN0IGRlcGxveS4gZWMyIGJvb3RzdHJhcHMgaXRzIHNlY3JldHMgb24gdGhlIGluc3RhbmNlLlxuICBpZiAodGFyZ2V0ID09PSAnZmFyZ2F0ZScpIHtcbiAgICBjaGVja3MucHVzaChjaGVjaygnb3BlbnNzbCcsIGhhcygnb3BlbnNzbCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIG9wZW5zc2wg4oCUIGluaXQtc2VjcmV0cy5zaCBuZWVkcyBpdCB0byBnZW5lcmF0ZSBwbGF0Zm9ybSBzZWNyZXRzJykpO1xuICAgIC8vIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlOiBzdXJmYWNlIGl0IGFzIGEgaGVhZHMtdXAgKGFkdmlzb3J5IOKAlCB0aGUgZGVwbG95IHNlbGYtaGVhbHMsXG4gICAgLy8gYW5kIHRoZSBwcmluY2lwYWwgbWF5IGxhY2sgaWFtOkdldFJvbGUpLiBPbmx5IGNoZWNrZWQgd2hlbiB3ZSBoYXZlIHdvcmtpbmcgY3JlZHMsIGFuZFxuICAgIC8vIG9ubHkgYXNzZXJ0ZWQgXCJtaXNzaW5nXCIgb24gYSBjb25maXJtZWQgTm9TdWNoRW50aXR5LiBlYzIgZG9lc24ndCB1c2UgRUNTLCBzbyBmYXJnYXRlLW9ubHkuXG4gICAgaWYgKGFjY291bnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNsciA9IGVjc0xpbmtlZFJvbGVTdGF0ZSgpO1xuICAgICAgaWYgKHNsciA9PT0gJ3ByZXNlbnQnKSB7XG4gICAgICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ0VDUyBzZXJ2aWNlLWxpbmtlZCByb2xlJywgb2s6IHRydWUsIGRldGFpbDogJ0FXU1NlcnZpY2VSb2xlRm9yRUNTIGV4aXN0cycsIHJlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoc2xyID09PSAnYWJzZW50Jykge1xuICAgICAgICBjaGVja3MucHVzaCh7XG4gICAgICAgICAgbmFtZTogJ0VDUyBzZXJ2aWNlLWxpbmtlZCByb2xlJyxcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDogJ0FXU1NlcnZpY2VSb2xlRm9yRUNTIG5vdCBmb3VuZCDigJQgdGhlIGZpcnN0IEVDUyBjbHVzdGVyIGNyZWF0ZSB3aWxsIGNyZWF0ZSBpdCwgYnV0IHRoYXQgZmlyc3QgYXR0ZW1wdCBmYWlscyBvbiB0aGUgbm90LXlldC1yZWFkeSByb2xlICh0aGUgcmUtcnVuIHRoZW4gc2VsZi1oZWFscykuIFRvIGF2b2lkIHRoZSBmYWlsZWQgZmlyc3Qgc3RhY2ssIHByZS1jcmVhdGUgaXQ6IGF3cyBpYW0gY3JlYXRlLXNlcnZpY2UtbGlua2VkLXJvbGUgLS1hd3Mtc2VydmljZS1uYW1lIGVjcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyAndW5rbm93bicgKG5vIGlhbTpHZXRSb2xlIC8gdHJhbnNpZW50KSDihpIgbm8gbGluZSwgcmF0aGVyIHRoYW4gYSBtaXNsZWFkaW5nIG9uZS5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoZWNrcztcbn1cblxuLyoqIFRydWUgd2hlbiBldmVyeSBSRVFVSVJFRCBwcmVyZXF1aXNpdGUgcGFzc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXJlcXNTYXRpc2ZpZWQoY2hlY2tzOiByZWFkb25seSBQcmVyZXFDaGVja1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja3MuZXZlcnkoKGMpID0+IGMub2sgfHwgIWMucmVxdWlyZWQpO1xufVxuIl19
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wcmVyZXFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3pDLGdDQUFnQztBQUNoQyxTQUFTLEdBQUcsQ0FBQyxHQUFXO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsSUFBSSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsMkNBQTJDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckYsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxTQUFTLHNCQUFzQjtJQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxD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QUFDLENBQUMsQ0FBQztRQUM1SCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSwyR0FBMkcsQ0FBQyxDQUFDLENBQUM7UUFDeEssa0ZBQWtGO1FBQ2xGLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1FQUFtRSxDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQThCO0lBQzdELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYywgUkVBRC1PTkxZIHByZXJlcXVpc2l0ZSBjaGVja3MgcGVyIHRhcmdldC4gTm8gTExNLCBubyBtdXRhdGlvbiDigJRcbiAqIGV2ZXJ5IGNvbW1hbmQgaGVyZSBvbmx5IGluc3BlY3RzIChwcmVzZW5jZSBjaGVja3MsIGBhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHlgLFxuICogYGRvY2tlciBpbmZvYCkuIFRoaXMgaXMgdGhlIGtpbmQgb2YgdGhpbmcgYSBzY3JpcHQgZG9lcyBiZXR0ZXIgdGhhbiBhbiBhZ2VudCxcbiAqIHNvIGl0IHN0YXlzIGRldGVybWluaXN0aWM7IHRoZSBMTE0gaXMgcmVzZXJ2ZWQgZm9yIE5MIHBhcnNpbmcgKyBkaWFnbm9zaXMuXG4gKi9cblxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlcUNoZWNrIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBvazogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0YWlsOiBzdHJpbmc7XG4gIC8qKiBBIGZhaWxpbmcgcmVxdWlyZWQgY2hlY2sgYmxvY2tzIGRlcGxveW1lbnQ7IGFkdmlzb3J5IG9uZXMgYXJlIHdhcm5pbmdzLiAqL1xuICByZWFkb25seSByZXF1aXJlZDogYm9vbGVhbjtcbn1cblxuLyoqIFRydWUgaWYgYGNtZGAgaXMgb24gUEFUSC4gKi9cbmZ1bmN0aW9uIGhhcyhjbWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGV4ZWNTeW5jKGBjb21tYW5kIC12ICR7Y21kfWAsIHsgc3RkaW86ICdpZ25vcmUnLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIFJ1biBhIHJlYWQtb25seSBjb21tYW5kOyByZXR1cm4gaXRzIHRyaW1tZWQgc3Rkb3V0IG9yIG51bGwgb24gZmFpbHVyZS4gKi9cbmZ1bmN0aW9uIHJlYWQoY21kOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXhlY1N5bmMoY21kLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ2lnbm9yZSddLCB0aW1lb3V0OiAxNTAwMCB9KS50b1N0cmluZygpLnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZG9ja2VyUnVubmluZygpOiBib29sZWFuIHtcbiAgcmV0dXJuIGhhcygnZG9ja2VyJykgJiYgcmVhZCgnZG9ja2VyIGluZm8gLS1mb3JtYXQgXCJ7ey5TZXJ2ZXJWZXJzaW9ufX1cIicpICE9PSBudWxsO1xufVxuXG4vKiogRG9ja2VyIENvbXBvc2UgdjIgKGBkb2NrZXIgY29tcG9zZWApIG9yIGxlZ2FjeSB2MSAoYGRvY2tlci1jb21wb3NlYCkg4oCUIHNldHVwLnNoIG5lZWRzIG9uZS4gKi9cbmZ1bmN0aW9uIGRvY2tlckNvbXBvc2VBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWFkKCdkb2NrZXIgY29tcG9zZSB2ZXJzaW9uJykgIT09IG51bGwgfHwgaGFzKCdkb2NrZXItY29tcG9zZScpO1xufVxuXG5mdW5jdGlvbiBhd3NJZGVudGl0eSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFoYXMoJ2F3cycpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHJlYWQoJ2F3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eSAtLXF1ZXJ5IEFjY291bnQgLS1vdXRwdXQgdGV4dCcpO1xufVxuXG4vKiogUGFyc2VkIGBnaXQgLS12ZXJzaW9uYCBhcyBbbWFqb3IsIG1pbm9yXSwgb3IgbnVsbCBpZiBnaXQgaXMgYWJzZW50L3VucGFyc2VhYmxlLiAqL1xuZnVuY3Rpb24gZ2l0VmVyc2lvbigpOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbCB7XG4gIGNvbnN0IG91dCA9IHJlYWQoJ2dpdCAtLXZlcnNpb24nKTtcbiAgY29uc3QgbSA9IG91dD8ubWF0Y2goLyhcXGQrKVxcLihcXGQrKS8pO1xuICByZXR1cm4gbSA/IFtOdW1iZXIobVsxXSksIE51bWJlcihtWzJdKV0gOiBudWxsO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGdpdCBpcyBvbiBQQVRIIChyZXF1aXJlZCB0byBib290c3RyYXAgYSBjbG9uZSBhdCBhbGwpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdpdEF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdpdFZlcnNpb24oKSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBDb25lIGBzcGFyc2UtY2hlY2tvdXRgICgrIGAtLWZpbHRlcj1ibG9iOm5vbmVgKSBuZWVkcyBnaXQg4omlIDIuMjcuIEJlbG93IHRoYXQsXG4gKiB0aGUgYm9vdHN0cmFwIGZhbGxzIGJhY2sgdG8gYSAoY29ycmVjdCwganVzdCBsYXJnZXIpIGZ1bGwgY2xvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCk6IGJvb2xlYW4ge1xuICBjb25zdCB2ID0gZ2l0VmVyc2lvbigpO1xuICByZXR1cm4gdiAhPT0gbnVsbCAmJiAodlswXSA+IDIgfHwgKHZbMF0gPT09IDIgJiYgdlsxXSA+PSAyNykpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgUHJlcmVxQ2hlY2sgZnJvbSBhIFNJTkdMRSBwcmVzZW5jZSBldmFsdWF0aW9uLiBDb2xsYXBzZXMgdGhlIHJlcGVhdGVkXG4gKiBgeyBvazogcHJvYmUoKSwgZGV0YWlsOiBwcm9iZSgpID8gYSA6IGIgfWAgc2hhcGUg4oCUIHdoaWNoIGFsc28gY2FsbGVkIHRoZSBwcm9iZVxuICogdHdpY2Ug4oCUIGludG8gb25lIHBsYWNlOyB0aGUgY2FsbGVyIGV2YWx1YXRlcyB0aGUgcHJvYmUgb25jZSBhbmQgcGFzc2VzIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrKG5hbWU6IHN0cmluZywgcHJlc2VudDogYm9vbGVhbiwgcHJlc2VudERldGFpbDogc3RyaW5nLCBtaXNzaW5nRGV0YWlsOiBzdHJpbmcsIHJlcXVpcmVkID0gdHJ1ZSk6IFByZXJlcUNoZWNrIHtcbiAgcmV0dXJuIHsgbmFtZSwgb2s6IHByZXNlbnQsIGRldGFpbDogcHJlc2VudCA/IHByZXNlbnREZXRhaWwgOiBtaXNzaW5nRGV0YWlsLCByZXF1aXJlZCB9O1xufVxuXG4vKipcbiAqIFJ1biB0aGUgcmVhZC1vbmx5IHByZXJlcXVpc2l0ZSBjaGVja3MgZm9yIGEgdGFyZ2V0LiBQdXJlIGluc3BlY3Rpb24g4oCUIHNhZmUgdG9cbiAqIHJ1biB1bmNvbmRpdGlvbmFsbHkgKHRoZSBwbGFuIGFzc2VtYmxlcyB0aGlzIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUHJlcmVxcyh0YXJnZXQ6IFRhcmdldElkLCBvcHRzOiB7IGJvb3RzdHJhcD86IGJvb2xlYW47IHdpdGhQbHVnaW5zPzogYm9vbGVhbiB9ID0ge30pOiBQcmVyZXFDaGVja1tdIHtcbiAgY29uc3QgY2hlY2tzOiBQcmVyZXFDaGVja1tdID0gW107XG4gIC8vIHNldHVwLnNoIChsb2NhbCkgKyBzZXR1cC5zaCAobWluaWt1YmUpIGJvdGggZ2VuZXJhdGUgdGhlIFRMUyBjZXJ0ICsgcmVnaXN0cnkgSldUIGtleSB3aXRoIG9wZW5zc2wuXG4gIGNvbnN0IE9QRU5TU0xfVExTID0gJ2luc3RhbGwgb3BlbnNzbCDigJQgc2V0dXAuc2ggZ2VuZXJhdGVzIHRoZSBUTFMgY2VydCArIHJlZ2lzdHJ5IEpXVCBrZXkgd2l0aCBpdCc7XG5cbiAgLy8gYC0tcmVwb2AgYm9vdHN0cmFwIGdpdC1jbG9uZXMgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3Qg4oaSIGdpdCBpcyByZXF1aXJlZC4gQVxuICAvLyBnaXQgYmVsb3cgMi4yNyBzdGlsbCB3b3JrcyAoZnVsbC1jbG9uZSBmYWxsYmFjayksIHNvIHRoZSB2ZXJzaW9uIGlzIGFkdmlzb3J5LlxuICBpZiAob3B0cy5ib290c3RyYXApIHtcbiAgICBjb25zdCB2ID0gZ2l0VmVyc2lvbigpO1xuICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ2dpdCcsIG9rOiB2ICE9PSBudWxsLCBkZXRhaWw6IHYgPyBgb24gUEFUSCAoJHt2WzBdfS4ke3ZbMV19KWAgOiAnaW5zdGFsbCBnaXQnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICBpZiAodiAhPT0gbnVsbCAmJiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpKSB7XG4gICAgICBjaGVja3MucHVzaCh7IG5hbWU6ICdnaXQg4omlIDIuMjcnLCBvazogZmFsc2UsIGRldGFpbDogJ3NwYXJzZSBjbG9uZSBuZWVkcyBnaXQg4omlIDIuMjcg4oCUIGZhbGxpbmcgYmFjayB0byBhIGZ1bGwgY2xvbmUnLCByZXF1aXJlZDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRhcmdldCA9PT0gJ2xvY2FsJykge1xuICAgIC8vIGRlcGxveS9sb2NhbC9kb2NrZXIvYmluL3NldHVwLnNoIGhhcmQtY2hlY2tzIGFsbCBvZiB0aGVzZSBhdCBzdGFydHVwIGFuZCBhYm9ydHMgaWZcbiAgICAvLyBhbnkgaXMgbWlzc2luZyDigJQgbWlycm9yIHRoZW0gaGVyZSBzbyBwcm92aXNpb24gYmxvY2tzIHVwIGZyb250IGluc3RlYWQgb2ZcbiAgICAvLyBmYWlsaW5nIG1pZC1kZXBsb3kgKGUuZy4gdGhlIGNsYXNzaWMgXCJ5cSBpcyBub3QgaW5zdGFsbGVkXCIpLlxuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXInLCBkb2NrZXJSdW5uaW5nKCksICdkYWVtb24gcmVhY2hhYmxlJywgJ2luc3RhbGwgRG9ja2VyIGFuZCBzdGFydCB0aGUgZGFlbW9uJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXIgQ29tcG9zZScsIGRvY2tlckNvbXBvc2VBdmFpbGFibGUoKSwgJ2F2YWlsYWJsZScsICduZWVkcyBgZG9ja2VyIGNvbXBvc2VgICh2MiBwbHVnaW4pIG9yIGBkb2NrZXItY29tcG9zZWAgKHYxKScpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHNldHVwLnNoIHJlcXVpcmVzIGl0JykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgT1BFTlNTTF9UTFMpKTtcbiAgICByZXR1cm4gY2hlY2tzO1xuICB9XG5cbiAgaWYgKHRhcmdldCA9PT0gJ21pbmlrdWJlJykge1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXInLCBkb2NrZXJSdW5uaW5nKCksICdkYWVtb24gcmVhY2hhYmxlJywgJ2luc3RhbGwgRG9ja2VyIGFuZCBzdGFydCB0aGUgZGFlbW9uJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdtaW5pa3ViZScsIGhhcygnbWluaWt1YmUnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBtaW5pa3ViZScpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygna3ViZWN0bCcsIGhhcygna3ViZWN0bCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIGt1YmVjdGwnKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ29wZW5zc2wnLCBoYXMoJ29wZW5zc2wnKSwgJ29uIFBBVEgnLCBPUEVOU1NMX1RMUykpO1xuICAgIC8vIG1pbmlrdWJlJ3Mgc2V0dXAuc2ggZG9lc24ndCBuZWVkIHlxLCBidXQgLS13aXRoLXBsdWdpbnMgYnVpbGRzIGltYWdlc1xuICAgIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoIC8gZ2VuZXJhdGUtcGx1Z2lucy5zaCkgd2hpY2ggZG8uXG4gICAgaWYgKG9wdHMud2l0aFBsdWdpbnMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKGNoZWNrKCd5cScsIGhhcygneXEnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCB5cSAobWFjT1M6IGBicmV3IGluc3RhbGwgeXFgKSDigJQgcmVxdWlyZWQgdG8gYnVpbGQgcGx1Z2lucycpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrcztcbiAgfVxuXG4gIC8vIGVjMiArIGVrcyDigJQgYm90aCBkZXBsb3kgdG8gQVdTIHZpYSB0aGUgQ0xJLCBzbyBib3RoIG5lZWQgdGhlIEFXUyBDTEkgKyB3b3JraW5nIGNyZWRzLlxuICBjb25zdCBhY2NvdW50ID0gYXdzSWRlbnRpdHkoKTtcbiAgY2hlY2tzLnB1c2goY2hlY2soJ0FXUyBDTEknLCBoYXMoJ2F3cycpLCAnb24gUEFUSCcsICdpbnN0YWxsIHRoZSBBV1MgQ0xJIHYyJykpO1xuICBjaGVja3MucHVzaCh7IG5hbWU6ICdBV1MgY3JlZGVudGlhbHMnLCBvazogYWNjb3VudCAhPT0gbnVsbCwgZGV0YWlsOiBhY2NvdW50ID8gYGF1dGhlbnRpY2F0ZWQgKGFjY291bnQgJHthY2NvdW50fSlgIDogJ3J1biBgYXdzIGNvbmZpZ3VyZWAgLyBzZXQgQVdTX1BST0ZJTEUnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgLy8gZWtzOiBzZXR1cC5zaCBjcmVhdGVzIHRoZSBBdXRvIE1vZGUgY2x1c3RlciAoZWtzY3RsKSwgYXBwbGllcyB0aGUgbWFuaWZlc3RzIChrdWJlY3RsLFxuICAvLyByZW5kZXJlZCB0aHJvdWdoIGVudnN1YnN0KSwgYW5kIGdlbmVyYXRlcyB0aGUgcmVnaXN0cnkgdG9rZW4tc2lnbmluZyBrZXlwYWlyIG9uIHRoZVxuICAvLyBob3N0IChvcGVuc3NsKSBiZWZvcmUgY3JlYXRpbmcgdGhlIGs4cyBzZWNyZXQuIGVjMiBib290c3RyYXBzIGl0cyBzZWNyZXRzIG9uIHRoZVxuICAvLyBpbnN0YW5jZSwgc28gaXQgbmVlZHMgbm9uZSBvZiB0aGVzZS5cbiAgaWYgKHRhcmdldCA9PT0gJ2VrcycpIHtcbiAgICAvLyBla3NjdGwgY2FuIHJ1biBmcm9tIFBBVEggT1IgdmlhIHRoZSBvZmZpY2lhbCBpbWFnZSDigJQgc2V0dXAuc2ggZmFsbHMgYmFjayB0b1xuICAgIC8vIGBkb2NrZXIgcnVuIHB1YmxpYy5lY3IuYXdzL2Vrc2N0bC9la3NjdGxgIHdoZW4gdGhlIGJpbmFyeSBpcyBhYnNlbnQsIHNvIGEgaG9zdFxuICAgIC8vIHdpdGggRG9ja2VyICsgQVdTIGNyZWRzIGlzIHN1ZmZpY2llbnQuXG4gICAgY29uc3QgZWtzY3RsT25QYXRoID0gaGFzKCdla3NjdGwnKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnZWtzY3RsJywgZWtzY3RsT25QYXRoIHx8IGRvY2tlclJ1bm5pbmcoKSxcbiAgICAgIGVrc2N0bE9uUGF0aCA/ICdvbiBQQVRIJyA6ICd2aWEgRG9ja2VyIGltYWdlIHB1YmxpYy5lY3IuYXdzL2Vrc2N0bC9la3NjdGwgKGJpbmFyeSBub3QgZm91bmQpJyxcbiAgICAgICdpbnN0YWxsIGVrc2N0bCwgb3IgaW5zdGFsbCArIHN0YXJ0IERvY2tlciAoc2V0dXAuc2ggd2lsbCBydW4gcHVibGljLmVjci5hd3MvZWtzY3RsL2Vrc2N0bCknKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2t1YmVjdGwnLCBoYXMoJ2t1YmVjdGwnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBrdWJlY3RsIOKAlCBhcHBsaWVzIHRoZSBtYW5pZmVzdHMgdG8gdGhlIGNsdXN0ZXInKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ29wZW5zc2wnLCBoYXMoJ29wZW5zc2wnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBvcGVuc3NsIOKAlCBzZXR1cC5zaCBnZW5lcmF0ZXMgdGhlIHJlZ2lzdHJ5IHRva2VuIGtleXBhaXInKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2VudnN1YnN0JywgaGFzKCdlbnZzdWJzdCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIGdldHRleHQgKG1hY09TOiBgYnJldyBpbnN0YWxsIGdldHRleHRgKSDigJQgc2V0dXAuc2ggcmVuZGVycyBjbHVzdGVyLnlhbWwgKyBtYW5pZmVzdHMgd2l0aCBlbnZzdWJzdCcpKTtcbiAgICAvLyBMaWtlIG1pbmlrdWJlLCAtLXdpdGgtcGx1Z2lucyBidWlsZHMgcGx1Z2luIGltYWdlcyBvbiB0aGUgaG9zdCwgd2hpY2ggbmVlZHMgeXEuXG4gICAgaWYgKG9wdHMud2l0aFBsdWdpbnMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKGNoZWNrKCd5cScsIGhhcygneXEnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCB5cSAobWFjT1M6IGBicmV3IGluc3RhbGwgeXFgKSDigJQgcmVxdWlyZWQgdG8gYnVpbGQgcGx1Z2lucycpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoZWNrcztcbn1cblxuLyoqIFRydWUgd2hlbiBldmVyeSBSRVFVSVJFRCBwcmVyZXF1aXNpdGUgcGFzc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXJlcXNTYXRpc2ZpZWQoY2hlY2tzOiByZWFkb25seSBQcmVyZXFDaGVja1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja3MuZXZlcnkoKGMpID0+IGMub2sgfHwgIWMucmVxdWlyZWQpO1xufVxuIl19
|
package/dist/agent/targets.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type TargetId = 'local' | 'minikube' | 'ec2' | '
|
|
1
|
+
export type TargetId = 'local' | 'minikube' | 'ec2' | 'eks';
|
|
2
2
|
/** A single input the underlying deploy script accepts. */
|
|
3
3
|
export interface InputSpec {
|
|
4
4
|
/** Flag name passed to the script (without the leading `--`). */
|
|
@@ -43,7 +43,7 @@ export interface TargetSpec {
|
|
|
43
43
|
* cloned deploy source at runtime (ports.ts `discoverHostPorts`): local from
|
|
44
44
|
* docker-compose.yml's published ports, minikube from setup.sh's port-forwards. This
|
|
45
45
|
* static copy is used only when that source can't be read. Empty for remote targets
|
|
46
|
-
* (ec2/
|
|
46
|
+
* (ec2/eks bind nothing on the operator's machine).
|
|
47
47
|
*/
|
|
48
48
|
readonly hostPorts: readonly {
|
|
49
49
|
service: string;
|
|
@@ -112,15 +112,17 @@ export interface TeardownResult {
|
|
|
112
112
|
/**
|
|
113
113
|
* Assemble the teardown command for a target. Pure and deterministic — mirrors
|
|
114
114
|
* `assembleCommand` for the destroy path. local/minikube STOP the stack
|
|
115
|
-
* (non-destructive — on-disk / PVC data survives); ec2
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* native prompt, which is exactly why the agent gate is mandatory there.
|
|
115
|
+
* (non-destructive — on-disk / PVC data survives); ec2 DELETEs its CloudFormation
|
|
116
|
+
* stack and eks DELETEs its cluster (eksctl) — both irreversible. EC2 `delete-stack`
|
|
117
|
+
* and `eksctl delete cluster` have no native prompt, which is exactly why the agent's
|
|
118
|
+
* typed-confirmation gate is mandatory there.
|
|
120
119
|
*/
|
|
121
120
|
export declare function teardownCommand(target: TargetId, opts?: {
|
|
122
121
|
stackName?: string;
|
|
122
|
+
clusterName?: string;
|
|
123
123
|
region?: string;
|
|
124
|
+
domain?: string;
|
|
125
|
+
hostedZoneId?: string;
|
|
124
126
|
assumeYes?: boolean;
|
|
125
127
|
}): TeardownResult;
|
|
126
128
|
//# sourceMappingURL=targets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/agent/targets.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/agent/targets.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/targets.js
CHANGED
|
@@ -18,19 +18,20 @@ const REGION = { flag: 'region', key: 'region', description: 'AWS region' };
|
|
|
18
18
|
const DEPLOY_MODE = { flag: 'deploy-mode', key: 'deployMode', description: 'public (internet-facing ALB) or private (internal, default)' };
|
|
19
19
|
const KEY_PAIR = { flag: 'key-pair', key: 'keyPair', description: 'EC2 key pair in the region (break-glass serial console; routine access is SSM)' };
|
|
20
20
|
const INSTANCE_TYPE = { flag: 'instance-type', key: 'instanceType', description: 'EC2 instance type (default t3.2xlarge)' };
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
// so a single --stack-name CLI option drives the right flag per target.
|
|
21
|
+
// ec2 deploy/teardown stack name (CloudFormation). The `stackName` param key is also reused
|
|
22
|
+
// by the teardown path as the resource identifier (ec2 stack / eks cluster name).
|
|
24
23
|
const STACK_NAME = { flag: 'stack-name', key: 'stackName', description: 'CloudFormation stack name (default pipeline-builder) — set to run a second ec2 environment' };
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
// from its flag the way the other
|
|
30
|
-
// `x` option); provision.ts assembles
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
// eks cluster name (eksctl). Set to run a second EKS environment in one account.
|
|
25
|
+
const CLUSTER_NAME = { flag: 'cluster-name', key: 'clusterName', description: 'EKS cluster name (default pipeline-builder)' };
|
|
26
|
+
// Auto-init is ON BY DEFAULT on ec2 (setup.sh/template default true), so `--no-auto-init`
|
|
27
|
+
// is the load-bearing opt-out and `--auto-init` is a no-op reaffirm — mirrors --email/--no-email.
|
|
28
|
+
// NOTE: `--no-auto-init`'s key (noAutoInit) is NOT derivable from its flag the way the other
|
|
29
|
+
// specs' keys are (commander folds --x/--no-x into a single `x` option); provision.ts assembles
|
|
30
|
+
// both keys explicitly — see the param-assembly there. (eks/minikube run init via provision, not
|
|
31
|
+
// a deploy-managed auto-init, so they ignore these.)
|
|
32
|
+
const AUTO_INIT = { flag: 'auto-init', key: 'autoInit', description: 'ec2: the instance self-runs init-platform on first boot (register + all loads) — the DEFAULT on ec2', boolean: true };
|
|
33
|
+
const NO_AUTO_INIT = { flag: 'no-auto-init', key: 'noAutoInit', description: 'ec2: skip the on-boot auto-init and run init-platform manually on the box instead', boolean: true };
|
|
34
|
+
// SES / email family — shared by ec2 + eks. SES is provisioned BY DEFAULT
|
|
34
35
|
// on AWS deploys; `--no-email` is the opt-out (`--email` is a harmless no-op kept
|
|
35
36
|
// for back-compat).
|
|
36
37
|
const EMAIL = [
|
|
@@ -46,17 +47,17 @@ export const TARGETS = {
|
|
|
46
47
|
local: {
|
|
47
48
|
id: 'local',
|
|
48
49
|
label: 'Local (Docker Compose)',
|
|
49
|
-
dir: 'deploy/local',
|
|
50
|
+
dir: 'deploy/local/docker',
|
|
50
51
|
entrypoint: 'bin/setup.sh',
|
|
51
|
-
sparsePaths: ['deploy/local'],
|
|
52
|
+
sparsePaths: ['deploy/local/docker'],
|
|
52
53
|
required: [],
|
|
53
54
|
optional: [],
|
|
54
55
|
postDeploy: './deploy/bin/init-platform.sh local',
|
|
55
56
|
cost: 'Free',
|
|
56
57
|
bestFor: 'Development',
|
|
57
58
|
deploys: 'the platform as a Docker Compose stack — an nginx TLS proxy, the API services (platform, plugin, pipeline, message, reporting, compliance, quota, billing, image-registry), the frontend, and postgres + mongo + redis. First run pulls the ghcr.io images and generates a local TLS cert (a few minutes).',
|
|
58
|
-
destroys: 'stops all containers — data under deploy/local/data persists on disk (delete it manually for a clean slate)',
|
|
59
|
-
// Mirrors the published ports in deploy/local/docker-compose.yml.
|
|
59
|
+
destroys: 'stops all containers — data under deploy/local/docker/data persists on disk (delete it manually for a clean slate)',
|
|
60
|
+
// Mirrors the published ports in deploy/local/docker/docker-compose.yml.
|
|
60
61
|
hostPorts: [
|
|
61
62
|
{ service: 'nginx — HTTPS gateway (UI/API)', port: 8443 },
|
|
62
63
|
{ service: 'nginx — HTTP redirect', port: 8080 },
|
|
@@ -69,9 +70,9 @@ export const TARGETS = {
|
|
|
69
70
|
minikube: {
|
|
70
71
|
id: 'minikube',
|
|
71
72
|
label: 'Minikube (local Kubernetes)',
|
|
72
|
-
dir: 'deploy/minikube',
|
|
73
|
+
dir: 'deploy/local/minikube',
|
|
73
74
|
entrypoint: 'bin/setup.sh',
|
|
74
|
-
sparsePaths: ['deploy/minikube'],
|
|
75
|
+
sparsePaths: ['deploy/local/minikube'],
|
|
75
76
|
required: [],
|
|
76
77
|
optional: [],
|
|
77
78
|
postDeploy: './deploy/bin/init-platform.sh minikube',
|
|
@@ -79,7 +80,7 @@ export const TARGETS = {
|
|
|
79
80
|
bestFor: 'Local Kubernetes',
|
|
80
81
|
deploys: 'the platform onto a local Minikube cluster — the same services as Kubernetes Deployments/Services behind an ingress, plus in-cluster postgres + mongo + redis. First run pulls images, builds the cluster, and generates a TLS cert (several minutes).',
|
|
81
82
|
destroys: 'stops the minikube stack — persistent volumes (PVC data) remain until the cluster is deleted',
|
|
82
|
-
// Mirrors the kubectl port-forwards started in deploy/minikube/bin/setup.sh.
|
|
83
|
+
// Mirrors the kubectl port-forwards started in deploy/local/minikube/bin/setup.sh.
|
|
83
84
|
hostPorts: [
|
|
84
85
|
{ service: 'nginx — HTTPS gateway (UI/API)', port: 8443 },
|
|
85
86
|
{ service: 'Mongo Express (Mongo UI)', port: 8081 },
|
|
@@ -101,23 +102,23 @@ export const TARGETS = {
|
|
|
101
102
|
destroys: 'DELETES the CloudFormation stack: the VPC, EC2 instance, and its EBS data volume (databases, registry, plugin builds). Irreversible.',
|
|
102
103
|
hostPorts: [], // remote (AWS) — binds nothing on the operator's machine
|
|
103
104
|
},
|
|
104
|
-
|
|
105
|
-
id: '
|
|
106
|
-
label: 'AWS
|
|
107
|
-
dir: 'deploy/aws/
|
|
105
|
+
eks: {
|
|
106
|
+
id: 'eks',
|
|
107
|
+
label: 'AWS EKS Auto Mode (managed Kubernetes)',
|
|
108
|
+
dir: 'deploy/aws/eks',
|
|
108
109
|
entrypoint: 'bin/setup.sh',
|
|
109
|
-
sparsePaths: ['deploy/aws/
|
|
110
|
+
sparsePaths: ['deploy/aws/eks'],
|
|
110
111
|
required: [DOMAIN, HOSTED_ZONE],
|
|
111
|
-
optional: [REGION, DEPLOY_MODE, GHCR_TOKEN,
|
|
112
|
-
postDeploy: './deploy/bin/init-platform.sh
|
|
113
|
-
cost: '~$
|
|
112
|
+
optional: [REGION, DEPLOY_MODE, GHCR_TOKEN, CLUSTER_NAME, ...EMAIL],
|
|
113
|
+
postDeploy: './deploy/bin/init-platform.sh eks # register admin + load plugins (run with kubectl access to the cluster)',
|
|
114
|
+
cost: '~$150-400/mo',
|
|
114
115
|
bestFor: 'Production',
|
|
115
|
-
deploys: 'the platform on
|
|
116
|
-
destroys: 'DELETES
|
|
116
|
+
deploys: 'the platform on Amazon EKS Auto Mode — an AWS-managed Kubernetes cluster (Karpenter-scaled EC2 nodes, AWS Load Balancer Controller, EBS/EFS CSI), the same Kubernetes workloads as the other k8s targets, an ALB Ingress + ACM for the domain, and (by default) SES email. Plugin builds run on the in-cluster rootless buildkitd (EC2 nodes allow it).',
|
|
117
|
+
destroys: 'Runs bin/shutdown.sh: DELETES the EKS cluster + nodes (eksctl), the EFS filesystem, and — when --domain is set — the ACM cert + Route 53 alias. EBS volumes on the Retain StorageClass are NOT auto-deleted (reported at the end). Irreversible.',
|
|
117
118
|
hostPorts: [], // remote (AWS) — binds nothing on the operator's machine
|
|
118
119
|
},
|
|
119
120
|
};
|
|
120
|
-
export const TARGET_IDS = ['local', 'minikube', 'ec2', '
|
|
121
|
+
export const TARGET_IDS = ['local', 'minikube', 'ec2', 'eks'];
|
|
121
122
|
export function isTargetId(value) {
|
|
122
123
|
return typeof value === 'string' && TARGET_IDS.includes(value);
|
|
123
124
|
}
|
|
@@ -190,29 +191,34 @@ export function assembleCommand(target, params, opts = {}) {
|
|
|
190
191
|
}
|
|
191
192
|
/** CloudFormation stack name the EC2 setup.sh defaults to. */
|
|
192
193
|
const DEFAULT_EC2_STACK = 'pipeline-builder';
|
|
193
|
-
/**
|
|
194
|
-
const
|
|
194
|
+
/** EKS cluster name eksctl defaults to. */
|
|
195
|
+
const DEFAULT_EKS_CLUSTER = 'pipeline-builder';
|
|
195
196
|
/**
|
|
196
197
|
* Assemble the teardown command for a target. Pure and deterministic — mirrors
|
|
197
198
|
* `assembleCommand` for the destroy path. local/minikube STOP the stack
|
|
198
|
-
* (non-destructive — on-disk / PVC data survives); ec2
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
* native prompt, which is exactly why the agent gate is mandatory there.
|
|
199
|
+
* (non-destructive — on-disk / PVC data survives); ec2 DELETEs its CloudFormation
|
|
200
|
+
* stack and eks DELETEs its cluster (eksctl) — both irreversible. EC2 `delete-stack`
|
|
201
|
+
* and `eksctl delete cluster` have no native prompt, which is exactly why the agent's
|
|
202
|
+
* typed-confirmation gate is mandatory there.
|
|
203
203
|
*/
|
|
204
204
|
export function teardownCommand(target, opts = {}) {
|
|
205
205
|
const region = opts.region || process.env.AWS_REGION || 'us-east-1';
|
|
206
|
-
//
|
|
207
|
-
//
|
|
206
|
+
// Anything flowing unquoted into a shell-executed teardown command is rejected
|
|
207
|
+
// for shell metacharacters (mirrors assembleCommand).
|
|
208
208
|
assertShellSafe(region, 'region');
|
|
209
209
|
if (opts.stackName)
|
|
210
210
|
assertShellSafe(opts.stackName, 'stack-name');
|
|
211
|
+
if (opts.clusterName)
|
|
212
|
+
assertShellSafe(opts.clusterName, 'cluster-name');
|
|
213
|
+
if (opts.domain)
|
|
214
|
+
assertShellSafe(opts.domain, 'domain');
|
|
215
|
+
if (opts.hostedZoneId)
|
|
216
|
+
assertShellSafe(opts.hostedZoneId, 'hosted-zone-id');
|
|
211
217
|
switch (target) {
|
|
212
218
|
case 'local':
|
|
213
|
-
return { command: 'cd deploy/local && bash bin/shutdown.sh', destructive: false };
|
|
219
|
+
return { command: 'cd deploy/local/docker && bash bin/shutdown.sh', destructive: false };
|
|
214
220
|
case 'minikube':
|
|
215
|
-
return { command: 'cd deploy/minikube && bash bin/shutdown.sh', destructive: false };
|
|
221
|
+
return { command: 'cd deploy/local/minikube && bash bin/shutdown.sh', destructive: false };
|
|
216
222
|
case 'ec2': {
|
|
217
223
|
const stack = opts.stackName || DEFAULT_EC2_STACK;
|
|
218
224
|
return {
|
|
@@ -221,14 +227,22 @@ export function teardownCommand(target, opts = {}) {
|
|
|
221
227
|
destructive: true,
|
|
222
228
|
};
|
|
223
229
|
}
|
|
224
|
-
case '
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
230
|
+
case 'eks': {
|
|
231
|
+
// eks tears down via bin/shutdown.sh (like local/minikube use bin/shutdown.sh):
|
|
232
|
+
// it deletes the cluster AND the resources eksctl alone would orphan — the EFS
|
|
233
|
+
// filesystem and, when --domain is given, the ACM cert + Route 53 alias. The
|
|
234
|
+
// agent's typed-confirmation gate already ran, so pass --yes to skip the
|
|
235
|
+
// script's own prompt.
|
|
236
|
+
const cluster = opts.clusterName || DEFAULT_EKS_CLUSTER;
|
|
237
|
+
let command = `cd deploy/aws/eks && bash bin/shutdown.sh --cluster-name ${cluster} --region ${region}`;
|
|
238
|
+
if (opts.domain)
|
|
239
|
+
command += ` --domain ${opts.domain}`;
|
|
240
|
+
if (opts.hostedZoneId)
|
|
241
|
+
command += ` --hosted-zone-id ${opts.hostedZoneId}`;
|
|
242
|
+
if (opts.assumeYes)
|
|
243
|
+
command += ' --yes';
|
|
244
|
+
return { command, destructive: true };
|
|
231
245
|
}
|
|
232
246
|
}
|
|
233
247
|
}
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC90YXJnZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFzRDdELCtFQUErRTtBQUUvRSxNQUFNLE1BQU0sR0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsdURBQXVELEVBQUUsQ0FBQztBQUNsSSxNQUFNLFdBQVcsR0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQzNKLE1BQU0sVUFBVSxHQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxzRUFBc0UsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUssTUFBTSxNQUFNLEdBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFjLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQ3RKLE1BQU0sUUFBUSxHQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnRkFBZ0YsRUFBRSxDQUFDO0FBQ2hLLE1BQU0sYUFBYSxHQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxDQUFDO0FBQ3ZJLG9GQUFvRjtBQUNw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QUFJLHNCQUFzQixDQUFDO1lBQ3hELE9BQU87Z0JBQ0wsT0FBTyxFQUNMLGdFQUFnRSxNQUFNLGFBQWEsTUFBTSxFQUFFO29CQUMzRixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyByZWdpc3RyeSBvZiBwbGF0Zm9ybSBkZXBsb3kgdGFyZ2V0cyDigJQgdGhlIHNvdXJjZSBvZiB0cnV0aCB0aGVcbiAqIGBwcm92aXNpb25gIGFkdmlzb3IgdXNlcyB0byBhc3NlbWJsZSB0aGUgRVhBQ1QgZGVwbG95IGNvbW1hbmQuIFRoZSBhZ2VudCBpcyBhXG4gKiB0aGluIHdyYXBwZXIgb3ZlciB0aGUgZXhpc3RpbmcgZGVwbG95IHNjcmlwdHM7IGl0IG5ldmVyIHJlaW1wbGVtZW50c1xuICogZGVwbG95bWVudCwgb25seSB2YWxpZGF0ZXMgaW5wdXRzIGFuZCBhc3NlbWJsZXMgdGhlIGNvbW1hbmQgdG8gcnVuLlxuICpcbiAqIEtlZXAgdGhpcyBpbiBsb2NrLXN0ZXAgd2l0aCB0aGUgZmxhZ3MgdGhlIHNjcmlwdHMgYWNjZXB0IOKAlCBldmVyeSB0YXJnZXQnc1xuICogb3BlcmF0b3IgZW50cnlwb2ludCBpcyBgYmluL3NldHVwLnNoYCAoZGVwbG95Lzx0YXJnZXQ+L2Jpbi9zZXR1cC5zaCkuXG4gKi9cblxuaW1wb3J0IHsgYXNzZXJ0U2hlbGxTYWZlIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuXG5leHBvcnQgdHlwZSBUYXJnZXRJZCA9ICdsb2NhbCcgfCAnbWluaWt1YmUnIHwgJ2VjMicgfCAnZmFyZ2F0ZSc7XG5cbi8qKiBBIHNpbmdsZSBpbnB1dCB0aGUgdW5kZXJseWluZyBkZXBsb3kgc2NyaXB0IGFjY2VwdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0U3BlYyB7XG4gIC8qKiBGbGFnIG5hbWUgcGFzc2VkIHRvIHRoZSBzY3JpcHQgKHdpdGhvdXQgdGhlIGxlYWRpbmcgYC0tYCkuICovXG4gIHJlYWRvbmx5IGZsYWc6IHN0cmluZztcbiAgLyoqIEtleSBvbiB0aGUgcHJvdmlzaW9uIHBhcmFtcyBvYmplY3QuICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKiogSHVtYW4gZGVzY3JpcHRpb24g4oCUIHNob3duIHdoZW4gYSByZXF1aXJlZCBpbnB1dCBpcyBtaXNzaW5nLiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogU2VjcmV0IOKAlCBuZXZlciBwcmludGVkIGluIHRoZSBhc3NlbWJsZWQgY29tbWFuZCAobWFza2VkIGFzIGAqKipgKS4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0PzogYm9vbGVhbjtcbiAgLyoqIEJvb2xlYW4gZmxhZyB3aXRoIG5vIHZhbHVlIChlLmcuIGAtLWVtYWlsYCkuICovXG4gIHJlYWRvbmx5IGJvb2xlYW4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFNwZWMge1xuICByZWFkb25seSBpZDogVGFyZ2V0SWQ7XG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBEaXJlY3RvcnkgdGhlIGVudHJ5cG9pbnQgcnVucyBmcm9tIChyZWxhdGl2ZSB0byByZXBvIHJvb3QpLiAqL1xuICByZWFkb25seSBkaXI6IHN0cmluZztcbiAgLyoqIEVudHJ5cG9pbnQgc2NyaXB0IChyZWxhdGl2ZSB0byBgZGlyYCkuICovXG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ6IHN0cmluZztcbiAgLyoqIElucHV0cyB0aGUgc2NyaXB0IFJFUVVJUkVTIOKAlCB0aGUgYWR2aXNvciByZXBvcnRzIGFueSB0aGF0IGFyZSBtaXNzaW5nLiAqL1xuICByZWFkb25seSByZXF1aXJlZDogcmVhZG9ubHkgSW5wdXRTcGVjW107XG4gIC8qKiBPcHRpb25hbCBpbnB1dHMsIHBhc3NlZCB0aHJvdWdoIG9ubHkgd2hlbiBwcm92aWRlZC4gKi9cbiAgcmVhZG9ubHkgb3B0aW9uYWw6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xuICAvKipcbiAgICogUmVwbyBmb2xkZXIocykgdGhpcyB0YXJnZXQncyBkZXBsb3kgbmVlZHMsIGZvciBhIHNwYXJzZSBgLS1yZXBvYCBib290c3RyYXAuXG4gICAqIENvbWJpbmVkIHdpdGggQ09NTU9OX1NQQVJTRV9QQVRIUyBhbmQgYW55IHNlbGVjdGVkIGxvYWQgc3RlcHMnIHBhdGhzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BhcnNlUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogUG9zdC1kZXBsb3kgc3RlcCB0byBzdXJmYWNlIChyZWdpc3RlcnMgYWRtaW4gKyBsb2FkcyBwbHVnaW5zKS4gKi9cbiAgcmVhZG9ubHkgcG9zdERlcGxveT86IHN0cmluZztcbiAgLyoqIFJvdWdoIG1vbnRobHkgY29zdCAoZnJvbSBkb2NzKS4gKi9cbiAgcmVhZG9ubHkgY29zdDogc3RyaW5nO1xuICAvKiogT25lLWxpbmUgXCJiZXN0IGZvclwiLiAqL1xuICByZWFkb25seSBiZXN0Rm9yOiBzdHJpbmc7XG4gIC8qKiBXaGF0IHRoZSBkZXBsb3kgY3JlYXRlcyDigJQgc2hvd24gd2hlbiBkZXBsb3lpbmcgc28gXCJEZXBsb3lpbmdcIiBpc24ndCBvcGFxdWUuICovXG4gIHJlYWRvbmx5IGRlcGxveXM6IHN0cmluZztcbiAgLyoqIFdoYXQgYSB0ZWFyZG93biBvZiB0aGlzIHRhcmdldCBkZXN0cm95cyDigJQgc2hvd24gYmVmb3JlIGEgKGdhdGVkKSB0ZWFyZG93bi4gKi9cbiAgcmVhZG9ubHkgZGVzdHJveXM6IHN0cmluZztcbiAgLyoqXG4gICAqIEhvc3QgcG9ydHMgdGhlIGRlcGxveSBiaW5kcyDigJQgYSBGQUxMQkFDSyBvbmx5LiBUaGUgbGl2ZSBsaXN0IGlzIERFUklWRUQgZnJvbSB0aGVcbiAgICogY2xvbmVkIGRlcGxveSBzb3VyY2UgYXQgcnVudGltZSAocG9ydHMudHMgYGRpc2NvdmVySG9zdFBvcnRzYCk6IGxvY2FsIGZyb21cbiAgICogZG9ja2VyLWNvbXBvc2UueW1sJ3MgcHVibGlzaGVkIHBvcnRzLCBtaW5pa3ViZSBmcm9tIHNldHVwLnNoJ3MgcG9ydC1mb3J3YXJkcy4gVGhpc1xuICAgKiBzdGF0aWMgY29weSBpcyB1c2VkIG9ubHkgd2hlbiB0aGF0IHNvdXJjZSBjYW4ndCBiZSByZWFkLiBFbXB0eSBmb3IgcmVtb3RlIHRhcmdldHNcbiAgICogKGVjMi9mYXJnYXRlIGJpbmQgbm90aGluZyBvbiB0aGUgb3BlcmF0b3IncyBtYWNoaW5lKS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RQb3J0czogcmVhZG9ubHkgeyBzZXJ2aWNlOiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9W107XG59XG5cbi8vIC0tLSBTaGFyZWQgaW5wdXQgc3BlY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgRE9NQUlOOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkb21haW4nLCBrZXk6ICdkb21haW4nLCBkZXNjcmlwdGlvbjogJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoQUxCIEFDTSBjZXJ0ICsgU0VTIERLSU0pJyB9O1xuY29uc3QgSE9TVEVEX1pPTkU6IElucHV0U3BlYyA9IHsgZmxhZzogJ2hvc3RlZC16b25lLWlkJywga2V5OiAnaG9zdGVkWm9uZUlkJywgZGVzY3JpcHRpb246ICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGRvbWFpbicgfTtcbmNvbnN0IEdIQ1JfVE9LRU46IElucHV0U3BlYyA9IHsgZmxhZzogJ2doY3ItdG9rZW4nLCBrZXk6ICdnaGNyVG9rZW4nLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBQQVQgd2l0aCByZWFkOnBhY2thZ2VzIChhdm9pZHMgZ2hjci5pbyBhbm9ueW1vdXMgcmF0ZSBsaW1pdHMpJywgc2VjcmV0OiB0cnVlIH07XG5jb25zdCBSRUdJT046IElucHV0U3BlYyA9IHsgZmxhZzogJ3JlZ2lvbicsIGtleTogJ3JlZ2lvbicsIGRlc2NyaXB0aW9uOiAnQVdTIHJlZ2lvbicgfTtcbmNvbnN0IERFUExPWV9NT0RFOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkZXBsb3ktbW9kZScsIGtleTogJ2RlcGxveU1vZGUnLCBkZXNjcmlwdGlvbjogJ3B1YmxpYyAoaW50ZXJuZXQtZmFjaW5nIEFMQikgb3IgcHJpdmF0ZSAoaW50ZXJuYWwsIGRlZmF1bHQpJyB9O1xuY29uc3QgS0VZX1BBSVI6IElucHV0U3BlYyA9IHsgZmxhZzogJ2tleS1wYWlyJywga2V5OiAna2V5UGFpcicsIGRlc2NyaXB0aW9uOiAnRUMyIGtleSBwYWlyIGluIHRoZSByZWdpb24gKGJyZWFrLWdsYXNzIHNlcmlhbCBjb25zb2xlOyByb3V0aW5lIGFjY2VzcyBpcyBTU00pJyB9O1xuY29uc3QgSU5TVEFOQ0VfVFlQRTogSW5wdXRTcGVjID0geyBmbGFnOiAnaW5zdGFuY2UtdHlwZScsIGtleTogJ2luc3RhbmNlVHlwZScsIGRlc2NyaXB0aW9uOiAnRUMyIGluc3RhbmNlIHR5cGUgKGRlZmF1bHQgdDMuMnhsYXJnZSknIH07XG4vLyBEZXBsb3ktdGltZSBzdGFjayBpZGVudGl0eSAoYWxzbyByZXVzZWQgYXMgdGhlIHRlYXJkb3duIHRhcmdldCkuIGVjMiB0YWtlcyBhIGZ1bGxcbi8vIC0tc3RhY2stbmFtZTsgZmFyZ2F0ZSB0YWtlcyBhIC0tc3RhY2stcHJlZml4LiBCb3RoIHJlYWQgdGhlIHNhbWUgYHN0YWNrTmFtZWAgcGFyYW0ga2V5LFxuLy8gc28gYSBzaW5nbGUgLS1zdGFjay1uYW1lIENMSSBvcHRpb24gZHJpdmVzIHRoZSByaWdodCBmbGFnIHBlciB0YXJnZXQuXG5jb25zdCBTVEFDS19OQU1FOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdzdGFjay1uYW1lJywga2V5OiAnc3RhY2tOYW1lJywgZGVzY3JpcHRpb246ICdDbG91ZEZvcm1hdGlvbiBzdGFjayBuYW1lIChkZWZhdWx0IHBpcGVsaW5lLWJ1aWxkZXIpIOKAlCBzZXQgdG8gcnVuIGEgc2Vjb25kIGVjMiBlbnZpcm9ubWVudCcgfTtcbmNvbnN0IFNUQUNLX1BSRUZJWDogSW5wdXRTcGVjID0geyBmbGFnOiAnc3RhY2stcHJlZml4Jywga2V5OiAnc3RhY2tOYW1lJywgZGVzY3JpcHRpb246ICdDbG91ZEZvcm1hdGlvbiBzdGFjayBwcmVmaXggKGRlZmF1bHQgcGIpIOKAlCBzZXQgdG8gcnVuIGEgc2Vjb25kIGZhcmdhdGUgZW52aXJvbm1lbnQnIH07XG4vLyBBdXRvLWluaXQgaXMgT04gQlkgREVGQVVMVCBvbiB0aGUgQVdTIHRhcmdldHMgKGVjMiArIGZhcmdhdGUgc2V0dXAuc2ggZGVmYXVsdCB0cnVlKSwgc29cbi8vIGAtLW5vLWF1dG8taW5pdGAgaXMgdGhlIGxvYWQtYmVhcmluZyBvcHQtb3V0IGFuZCBgLS1hdXRvLWluaXRgIGlzIGEgbm8tb3AgcmVhZmZpcm0g4oCUXG4vLyBtaXJyb3JzIC0tZW1haWwvLS1uby1lbWFpbC4gTk9URTogYC0tbm8tYXV0by1pbml0YCdzIGtleSAobm9BdXRvSW5pdCkgaXMgTk9UIGRlcml2YWJsZVxuLy8gZnJvbSBpdHMgZmxhZyB0aGUgd2F5IHRoZSBvdGhlciBzcGVjcycga2V5cyBhcmUgKGNvbW1hbmRlciBmb2xkcyAtLXgvLS1uby14IGludG8gYSBzaW5nbGVcbi8vIGB4YCBvcHRpb24pOyBwcm92aXNpb24udHMgYXNzZW1ibGVzIGJvdGgga2V5cyBleHBsaWNpdGx5IOKAlCBzZWUgdGhlIHBhcmFtLWFzc2VtYmx5IHRoZXJlLlxuY29uc3QgQVVUT19JTklUOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdhdXRvLWluaXQnLCBrZXk6ICdhdXRvSW5pdCcsIGRlc2NyaXB0aW9uOiAnRGVwbG95IHNlbGYtcnVucyBpbml0LXBsYXRmb3JtIG9uY2UgdGhlIHBsYXRmb3JtIGlzIHVwIOKAlCB0aGUgREVGQVVMVCBvbiBlYzIvZmFyZ2F0ZSAoZWMyOiBvbiBmaXJzdCBib290OyBmYXJnYXRlOiBhIG9uZS1zaG90IEVDUyB0YXNrOyByZWdpc3RlciArIGFsbCBsb2FkcyknLCBib29sZWFuOiB0cnVlIH07XG5jb25zdCBOT19BVVRPX0lOSVQ6IElucHV0U3BlYyA9IHsgZmxhZzogJ25vLWF1dG8taW5pdCcsIGtleTogJ25vQXV0b0luaXQnLCBkZXNjcmlwdGlvbjogJ1NraXAgdGhlIGRlcGxveS1tYW5hZ2VkIGF1dG8taW5pdDsgcnVuIGluaXQtcGxhdGZvcm0gbWFudWFsbHkgKGVjMjogb24gdGhlIGJveDsgZmFyZ2F0ZTogZnJvbSBhIFZQQy1hdHRhY2hlZCBob3N0KScsIGJvb2xlYW46IHRydWUgfTtcblxuLy8gU0VTIC8gZW1haWwgZmFtaWx5IOKAlCBzaGFyZWQgYnkgZWMyICsgZmFyZ2F0ZS4gU0VTIGlzIHByb3Zpc2lvbmVkIEJZIERFRkFVTFRcbi8vIG9uIEFXUyBkZXBsb3lzOyBgLS1uby1lbWFpbGAgaXMgdGhlIG9wdC1vdXQgKGAtLWVtYWlsYCBpcyBhIGhhcm1sZXNzIG5vLW9wIGtlcHRcbi8vIGZvciBiYWNrLWNvbXBhdCkuXG5jb25zdCBFTUFJTDogcmVhZG9ubHkgSW5wdXRTcGVjW10gPSBbXG4gIHsgZmxhZzogJ2VtYWlsJywga2V5OiAnZW1haWwnLCBkZXNjcmlwdGlvbjogJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScsIGJvb2xlYW46IHRydWUgfSxcbiAgeyBmbGFnOiAnbm8tZW1haWwnLCBrZXk6ICdub0VtYWlsJywgZGVzY3JpcHRpb246ICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0KScsIGJvb2xlYW46IHRydWUgfSxcbiAgeyBmbGFnOiAnZW1haWwtZnJvbScsIGtleTogJ2VtYWlsRnJvbScsIGRlc2NyaXB0aW9uOiAnRnJvbSBhZGRyZXNzIChkZWZhdWx0IG5vcmVwbHlAPGRvbWFpbj4pJyB9LFxuICB7IGZsYWc6ICdlbWFpbC1mcm9tLW5hbWUnLCBrZXk6ICdlbWFpbEZyb21OYW1lJywgZGVzY3JpcHRpb246ICdEaXNwbGF5IG5hbWUgb24gb3V0Ym91bmQgZW1haWwnIH0sXG4gIHsgZmxhZzogJ2FsZXJ0LWVtYWlsJywga2V5OiAnYWxlcnRFbWFpbCcsIGRlc2NyaXB0aW9uOiAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJyB9LFxuICB7IGZsYWc6ICduby1jcmVhdGUtc2VzLWlkZW50aXR5Jywga2V5OiAnbm9DcmVhdGVTZXNJZGVudGl0eScsIGRlc2NyaXB0aW9uOiAnU2tpcCBTRVMgaWRlbnRpdHkgY3JlYXRpb24gKGRvbWFpbiBhbHJlYWR5IHZlcmlmaWVkKScsIGJvb2xlYW46IHRydWUgfSxcbl07XG5cbi8vIC0tLSBUYXJnZXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFRBUkdFVFM6IFJlYWRvbmx5PFJlY29yZDxUYXJnZXRJZCwgVGFyZ2V0U3BlYz4+ID0ge1xuICBsb2NhbDoge1xuICAgIGlkOiAnbG9jYWwnLFxuICAgIGxhYmVsOiAnTG9jYWwgKERvY2tlciBDb21wb3NlKScsXG4gICAgZGlyOiAnZGVwbG95L2xvY2FsJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvbG9jYWwnXSxcbiAgICByZXF1aXJlZDogW10sXG4gICAgb3B0aW9uYWw6IFtdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBsb2NhbCcsXG4gICAgY29zdDogJ0ZyZWUnLFxuICAgIGJlc3RGb3I6ICdEZXZlbG9wbWVudCcsXG4gICAgZGVwbG95czogJ3RoZSBwbGF0Zm9ybSBhcyBhIERvY2tlciBDb21wb3NlIHN0YWNrIOKAlCBhbiBuZ2lueCBUTFMgcHJveHksIHRoZSBBUEkgc2VydmljZXMgKHBsYXRmb3JtLCBwbHVnaW4sIHBpcGVsaW5lLCBtZXNzYWdlLCByZXBvcnRpbmcsIGNvbXBsaWFuY2UsIHF1b3RhLCBiaWxsaW5nLCBpbWFnZS1yZWdpc3RyeSksIHRoZSBmcm9udGVuZCwgYW5kIHBvc3RncmVzICsgbW9uZ28gKyByZWRpcy4gRmlyc3QgcnVuIHB1bGxzIHRoZSBnaGNyLmlvIGltYWdlcyBhbmQgZ2VuZXJhdGVzIGEgbG9jYWwgVExTIGNlcnQgKGEgZmV3IG1pbnV0ZXMpLicsXG4gICAgZGVzdHJveXM6ICdzdG9wcyBhbGwgY29udGFpbmVycyDigJQgZGF0YSB1bmRlciBkZXBsb3kvbG9jYWwvZGF0YSBwZXJzaXN0cyBvbiBkaXNrIChkZWxldGUgaXQgbWFudWFsbHkgZm9yIGEgY2xlYW4gc2xhdGUpJyxcbiAgICAvLyBNaXJyb3JzIHRoZSBwdWJsaXNoZWQgcG9ydHMgaW4gZGVwbG95L2xvY2FsL2RvY2tlci1jb21wb3NlLnltbC5cbiAgICBob3N0UG9ydHM6IFtcbiAgICAgIHsgc2VydmljZTogJ25naW54IOKAlCBIVFRQUyBnYXRld2F5IChVSS9BUEkpJywgcG9ydDogODQ0MyB9LFxuICAgICAgeyBzZXJ2aWNlOiAnbmdpbngg4oCUIEhUVFAgcmVkaXJlY3QnLCBwb3J0OiA4MDgwIH0sXG4gICAgICB7IHNlcnZpY2U6ICdwZ0FkbWluIChQb3N0Z3JlcyBVSSknLCBwb3J0OiA1NDgwIH0sXG4gICAgICB7IHNlcnZpY2U6ICdNb25nbyBFeHByZXNzIChNb25nbyBVSSknLCBwb3J0OiAyNzA4MSB9LFxuICAgICAgeyBzZXJ2aWNlOiAnRG9ja2VyIHJlZ2lzdHJ5JywgcG9ydDogNTAwMCB9LFxuICAgICAgeyBzZXJ2aWNlOiAnSmFlZ2VyICh0cmFjaW5nIFVJKScsIHBvcnQ6IDE2Njg2IH0sXG4gICAgXSxcbiAgfSxcbiAgbWluaWt1YmU6IHtcbiAgICBpZDogJ21pbmlrdWJlJyxcbiAgICBsYWJlbDogJ01pbmlrdWJlIChsb2NhbCBLdWJlcm5ldGVzKScsXG4gICAgZGlyOiAnZGVwbG95L21pbmlrdWJlJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvbWluaWt1YmUnXSxcbiAgICByZXF1aXJlZDogW10sXG4gICAgb3B0aW9uYWw6IFtdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBtaW5pa3ViZScsXG4gICAgY29zdDogJ0ZyZWUnLFxuICAgIGJlc3RGb3I6ICdMb2NhbCBLdWJlcm5ldGVzJyxcbiAgICBkZXBsb3lzOiAndGhlIHBsYXRmb3JtIG9udG8gYSBsb2NhbCBNaW5pa3ViZSBjbHVzdGVyIOKAlCB0aGUgc2FtZSBzZXJ2aWNlcyBhcyBLdWJlcm5ldGVzIERlcGxveW1lbnRzL1NlcnZpY2VzIGJlaGluZCBhbiBpbmdyZXNzLCBwbHVzIGluLWNsdXN0ZXIgcG9zdGdyZXMgKyBtb25nbyArIHJlZGlzLiBGaXJzdCBydW4gcHVsbHMgaW1hZ2VzLCBidWlsZHMgdGhlIGNsdXN0ZXIsIGFuZCBnZW5lcmF0ZXMgYSBUTFMgY2VydCAoc2V2ZXJhbCBtaW51dGVzKS4nLFxuICAgIGRlc3Ryb3lzOiAnc3RvcHMgdGhlIG1pbmlrdWJlIHN0YWNrIOKAlCBwZXJzaXN0ZW50IHZvbHVtZXMgKFBWQyBkYXRhKSByZW1haW4gdW50aWwgdGhlIGNsdXN0ZXIgaXMgZGVsZXRlZCcsXG4gICAgLy8gTWlycm9ycyB0aGUga3ViZWN0bCBwb3J0LWZvcndhcmRzIHN0YXJ0ZWQgaW4gZGVwbG95L21pbmlrdWJlL2Jpbi9zZXR1cC5zaC5cbiAgICBob3N0UG9ydHM6IFtcbiAgICAgIHsgc2VydmljZTogJ25naW54IOKAlCBIVFRQUyBnYXRld2F5IChVSS9BUEkpJywgcG9ydDogODQ0MyB9LFxuICAgICAgeyBzZXJ2aWNlOiAnTW9uZ28gRXhwcmVzcyAoTW9uZ28gVUkpJywgcG9ydDogODA4MSB9LFxuICAgICAgeyBzZXJ2aWNlOiAncGdBZG1pbiAoUG9zdGdyZXMgVUkpJywgcG9ydDogNTQ4MCB9LFxuICAgIF0sXG4gIH0sXG4gIGVjMjoge1xuICAgIGlkOiAnZWMyJyxcbiAgICBsYWJlbDogJ0FXUyBFQzIgKHNpbmdsZSBNaW5pa3ViZSBpbnN0YW5jZSBiZWhpbmQgYW4gQUxCKScsXG4gICAgZGlyOiAnZGVwbG95L2F3cy9lYzInLFxuICAgIGVudHJ5cG9pbnQ6ICdiaW4vc2V0dXAuc2gnLFxuICAgIHNwYXJzZVBhdGhzOiBbJ2RlcGxveS9hd3MvZWMyJ10sXG4gICAgcmVxdWlyZWQ6IFtLRVlfUEFJUiwgRE9NQUlOLCBIT1NURURfWk9ORV0sXG4gICAgb3B0aW9uYWw6IFtSRUdJT04sIERFUExPWV9NT0RFLCBHSENSX1RPS0VOLCBJTlNUQU5DRV9UWVBFLCBTVEFDS19OQU1FLCBBVVRPX0lOSVQsIE5PX0FVVE9fSU5JVCwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBlYzIgICMgYXV0by1ydW5zIG9uIHRoZSBpbnN0YW5jZSBieSBkZWZhdWx0OyAtLW5vLWF1dG8taW5pdCB0byBkbyBpdCBtYW51YWxseScsXG4gICAgY29zdDogJ34kMTQwLTI2NS9tbycsXG4gICAgYmVzdEZvcjogJ0RldiAvIHN0YWdpbmcnLFxuICAgIGRlcGxveXM6ICd0aGUgcGxhdGZvcm0gb24gYSBzaW5nbGUgRUMyIGluc3RhbmNlIHZpYSBDbG91ZEZvcm1hdGlvbiDigJQgYSBWUEMsIHRoZSBpbnN0YW5jZSAocnVubmluZyB0aGUgTWluaWt1YmUgc3RhY2spLCBhbiBBTEIsIGEgUm91dGUgNTMgcmVjb3JkICsgQUNNIGNlcnQgZm9yIHRoZSBkb21haW4sIGFuZCAoYnkgZGVmYXVsdCkgU0VTIGVtYWlsLiBUaGUgaW5zdGFuY2UgcHVsbHMgaW1hZ2VzIG9uIGZpcnN0IGJvb3QuJyxcbiAgICBkZXN0cm95czogJ0RFTEVURVMgdGhlIENsb3VkRm9ybWF0aW9uIHN0YWNrOiB0aGUgVlBDLCBFQzIgaW5zdGFuY2UsIGFuZCBpdHMgRUJTIGRhdGEgdm9sdW1lIChkYXRhYmFzZXMsIHJlZ2lzdHJ5LCBwbHVnaW4gYnVpbGRzKS4gSXJyZXZlcnNpYmxlLicsXG4gICAgaG9zdFBvcnRzOiBbXSwgLy8gcmVtb3RlIChBV1MpIOKAlCBiaW5kcyBub3RoaW5nIG9uIHRoZSBvcGVyYXRvcidzIG1hY2hpbmVcbiAgfSxcbiAgZmFyZ2F0ZToge1xuICAgIGlkOiAnZmFyZ2F0ZScsXG4gICAgbGFiZWw6ICdBV1MgRmFyZ2F0ZSAoc2VydmVybGVzcyBFQ1MsIDYgQ2xvdWRGb3JtYXRpb24gc3RhY2tzKScsXG4gICAgZGlyOiAnZGVwbG95L2F3cy9mYXJnYXRlJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvYXdzL2ZhcmdhdGUnXSxcbiAgICByZXF1aXJlZDogW0RPTUFJTiwgSE9TVEVEX1pPTkVdLFxuICAgIG9wdGlvbmFsOiBbUkVHSU9OLCBERVBMT1lfTU9ERSwgR0hDUl9UT0tFTiwgU1RBQ0tfUFJFRklYLCBBVVRPX0lOSVQsIE5PX0FVVE9fSU5JVCwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBmYXJnYXRlICAjIGF1dG8tcnVucyBhcyBhIG9uZS1zaG90IEVDUyB0YXNrIGJ5IGRlZmF1bHQ7IC0tbm8tYXV0by1pbml0IHRvIHJ1biBpdCBtYW51YWxseSBmcm9tIGEgVlBDIGhvc3QnLFxuICAgIGNvc3Q6ICd+JDEwMC0zMDAvbW8nLFxuICAgIGJlc3RGb3I6ICdQcm9kdWN0aW9uJyxcbiAgICBkZXBsb3lzOiAndGhlIHBsYXRmb3JtIG9uIHNlcnZlcmxlc3MgRUNTIEZhcmdhdGUgdmlhIDYgQ2xvdWRGb3JtYXRpb24gc3RhY2tzIOKAlCBhIFZQQywgYW4gQUxCLCB0aGUgRUNTIHNlcnZpY2VzLCBFRlMtYmFja2VkIGRhdGFiYXNlcyArIHJlZ2lzdHJ5LCBSb3V0ZSA1MyArIEFDTSBmb3IgdGhlIGRvbWFpbiwgYW5kIChieSBkZWZhdWx0KSBTRVMgZW1haWwuIFNlY3JldHMgYXJlIGdlbmVyYXRlZCBpbnRvIFNlY3JldHMgTWFuYWdlciBmaXJzdC4nLFxuICAgIGRlc3Ryb3lzOiAnREVMRVRFUyBhbGwgcGItKiBDbG91ZEZvcm1hdGlvbiBzdGFja3M6IEVGUyBkYXRhLCBkYXRhYmFzZXMsIGFuZCByZWdpc3RyeS4gU2VjcmV0cyBNYW5hZ2VyIGVudHJpZXMgYXJlIE5PVCBhdXRvLWRlbGV0ZWQuIElycmV2ZXJzaWJsZS4nLFxuICAgIGhvc3RQb3J0czogW10sIC8vIHJlbW90ZSAoQVdTKSDigJQgYmluZHMgbm90aGluZyBvbiB0aGUgb3BlcmF0b3IncyBtYWNoaW5lXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgVEFSR0VUX0lEUzogcmVhZG9ubHkgVGFyZ2V0SWRbXSA9IFsnbG9jYWwnLCAnbWluaWt1YmUnLCAnZWMyJywgJ2ZhcmdhdGUnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFyZ2V0SWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUYXJnZXRJZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIChUQVJHRVRfSURTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh2YWx1ZSk7XG59XG5cbi8vIC0tLSBTcGFyc2UgYm9vdHN0cmFwIHBhdGhzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBGb2xkZXJzIGV2ZXJ5IGAtLXJlcG9gIGJvb3RzdHJhcCBuZWVkcyByZWdhcmRsZXNzIG9mIHRhcmdldDogdGhlIG9yY2hlc3RyYXRpb25cbiAqIHNjcmlwdHMuIEVhY2ggdGFyZ2V0J3Mgc2V0dXAuc2ggKyBpbml0LXBsYXRmb3JtLnNoIGxpdmUgaW4gLyBkcml2ZSB0aGVzZS5cbiAqIERlbGliZXJhdGVseSBtaW5pbWFsIOKAlCBoZWF2aWVyIGZvbGRlcnMgKHBsdWdpbnMvY29tcGxpYW5jZS9zYW1wbGVzKSBhcmUgcHVsbGVkXG4gKiBpbiBvbmx5IHdoZW4gdGhlaXIgcG9zdC1pbnN0YWxsIG9wdGlvbiBpcyBzZWxlY3RlZCAoc2VlIExPQURfU1RFUFMpLlxuICovXG5leHBvcnQgY29uc3QgQ09NTU9OX1NQQVJTRV9QQVRIUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ2RlcGxveS9iaW4nXTtcblxuLyoqXG4gKiBPcHQtaW4gcG9zdC1pbnN0YWxsIGxvYWQgc3RlcHMuIEVhY2ggbWFwcyBhIHByb3Zpc2lvbiBgLS13aXRoLSpgIGZsYWcgdG8gdGhlXG4gKiBpbml0LXBsYXRmb3JtIGVudiB2YXIgdGhhdCBlbmFibGVzIGl0IEFORCB0aGUgcmVwbyBmb2xkZXIocykgaXQgcmVhZHMg4oCUIHNvIHRoZVxuICogc3BhcnNlIGNoZWNrb3V0IGdyb3dzIGV4YWN0bHkgd2l0aCB0aGUgc2VsZWN0ZWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IExPQURfU1RFUFMgPSBbXG4gIC8vIFRoZSBwbHVnaW4gYnVpbGQgcmVhZHMgZGVwbG95L3BsdWdpbnMvX2Jhc2UgQU5EIGRlcGxveS9jb2RlYnVpbGQvYm9vdHN0cmFwLlxuICB7IGlkOiAncGx1Z2lucycsIGZsYWc6ICd3aXRoUGx1Z2lucycsIGVudjogJ0xPQURfUExVR0lOUycsIHBhdGhzOiBbJ2RlcGxveS9wbHVnaW5zJywgJ2RlcGxveS9jb2RlYnVpbGQnXSB9LFxuICB7IGlkOiAnY29tcGxpYW5jZScsIGZsYWc6ICd3aXRoQ29tcGxpYW5jZScsIGVudjogJ0xPQURfQ09NUExJQU5DRScsIHBhdGhzOiBbJ2RlcGxveS9jb21wbGlhbmNlJ10gfSxcbiAgeyBpZDogJ3NhbXBsZXMnLCBmbGFnOiAnd2l0aFNhbXBsZXMnLCBlbnY6ICdMT0FEX1BJUEVMSU5FUycsIHBhdGhzOiBbJ2RlcGxveS9zYW1wbGVzJ10gfSxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIExvYWRTdGVwSWQgPSAodHlwZW9mIExPQURfU1RFUFMpW251bWJlcl1bJ2lkJ107XG5cbi8qKlxuICogVGhlIGRlLWR1cGxpY2F0ZWQgc2V0IG9mIHNwYXJzZSBwYXRocyBmb3IgYSB0YXJnZXQgcGx1cyB0aGUgZW5hYmxlZCBsb2FkXG4gKiBzdGVwczogY29tbW9uIGJhc2Ug4oiqIHRhcmdldCBmb2xkZXIocykg4oiqIGVhY2ggZW5hYmxlZCBzdGVwJ3MgZm9sZGVyKHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BhcnNlUGF0aHNGb3IodGFyZ2V0OiBUYXJnZXRJZCwgZW5hYmxlZExvYWRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXRocyA9IG5ldyBTZXQ8c3RyaW5nPihDT01NT05fU1BBUlNFX1BBVEhTKTtcbiAgZm9yIChjb25zdCBwIG9mIFRBUkdFVFNbdGFyZ2V0XS5zcGFyc2VQYXRocykgcGF0aHMuYWRkKHApO1xuICBmb3IgKGNvbnN0IHN0ZXAgb2YgTE9BRF9TVEVQUykge1xuICAgIGlmIChlbmFibGVkTG9hZElkcy5pbmNsdWRlcyhzdGVwLmlkKSkgZm9yIChjb25zdCBwIG9mIHN0ZXAucGF0aHMpIHBhdGhzLmFkZChwKTtcbiAgfVxuICByZXR1cm4gWy4uLnBhdGhzXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3NlbWJsZVJlc3VsdCB7XG4gIC8qKiBUaGUgZXhhY3QgY29tbWFuZCB0byBydW4g4oCUIHNlY3JldHMgbWFza2VkIGFzIGAqKipgLiAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIC8qKiBSZXF1aXJlZCBpbnB1dHMgdGhhdCB3ZXJlIG5vdCBzdXBwbGllZC4gKi9cbiAgcmVhZG9ubHkgbWlzc2luZzogcmVhZG9ubHkgSW5wdXRTcGVjW107XG59XG5cbi8qKlxuICogQXNzZW1ibGUgdGhlIGRlcGxveSBjb21tYW5kIGZvciBhIHRhcmdldCBmcm9tIHRoZSBwcm92aWRlZCBwYXJhbXMuIFB1cmUgYW5kXG4gKiBkZXRlcm1pbmlzdGljIOKAlCBubyBzaGVsbCwgbm8gTExNLiBNaXNzaW5nIHJlcXVpcmVkIGlucHV0cyBhcmUgcmVwb3J0ZWQgKG5ldmVyXG4gKiBndWVzc2VkKS4gQnkgZGVmYXVsdCBzZWNyZXRzIGFyZSBtYXNrZWQgKGAqKipgKSBmb3IgRElTUExBWTsgcGFzcyBgbWFzazogZmFsc2VgXG4gKiB0byBidWlsZCB0aGUgcmVhbCBjb21tYW5kIGZvciBFWEVDVVRJT04g4oCUIHRoYXQgc3RyaW5nIG11c3QgbmV2ZXIgYmUgbG9nZ2VkIG9yXG4gKiBzaG93biB0byB0aGUgbW9kZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlbWJsZUNvbW1hbmQoXG4gIHRhcmdldDogVGFyZ2V0U3BlYyxcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0czogeyBtYXNrPzogYm9vbGVhbiB9ID0ge30sXG4pOiBBc3NlbWJsZVJlc3VsdCB7XG4gIGNvbnN0IG1hc2sgPSBvcHRzLm1hc2sgPz8gdHJ1ZTtcbiAgY29uc3QgcHJvdmlkZWQgPSAoc3BlYzogSW5wdXRTcGVjKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgdiA9IHBhcmFtc1tzcGVjLmtleV07XG4gICAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSAnJyAmJiB2ICE9PSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBtaXNzaW5nID0gdGFyZ2V0LnJlcXVpcmVkLmZpbHRlcigoc3BlYykgPT4gIXByb3ZpZGVkKHNwZWMpKTtcblxuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbYGNkICR7dGFyZ2V0LmRpcn0gJiYgYmFzaCAke3RhcmdldC5lbnRyeXBvaW50fWBdO1xuICBmb3IgKGNvbnN0IHNwZWMgb2YgWy4uLnRhcmdldC5yZXF1aXJlZCwgLi4udGFyZ2V0Lm9wdGlvbmFsXSkge1xuICAgIGlmICghcHJvdmlkZWQoc3BlYykpIGNvbnRpbnVlO1xuICAgIGlmIChzcGVjLmJvb2xlYW4pIHtcbiAgICAgIHBhcnRzLnB1c2goYC0tJHtzcGVjLmZsYWd9YCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcmF3ID0gU3RyaW5nKHBhcmFtc1tzcGVjLmtleV0pO1xuICAgIC8vIFRoZSBhc3NlbWJsZWQgY29tbWFuZCBpcyBleGVjdXRlZCB2aWEgYSBzaGVsbCAocnVuU2NyaXB0KSwgc28gYSBwYXJhbVxuICAgIC8vIHZhbHVlIGNhcnJ5aW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHdvdWxkIGJlIGNvbW1hbmQgaW5qZWN0aW9uLiBWYWxpZGF0ZVxuICAgIC8vIHRoZSBSRUFMIHZhbHVlIGV2ZW4gd2hlbiBtYXNraW5nIGZvciBkaXNwbGF5IOKAlCB0aGUgZXhlY3V0ZWQgY29tbWFuZCB1c2VzXG4gICAgLy8gdGhlIHVubWFza2VkIHZhbHVlLiBSZWRhY3Qgc2VjcmV0cyBzbyB0aGUgZXJyb3IgbmV2ZXIgZWNob2VzIGEgdG9rZW4uXG4gICAgYXNzZXJ0U2hlbGxTYWZlKHJhdywgYC0tJHtzcGVjLmZsYWd9YCwgeyByZWRhY3RWYWx1ZTogc3BlYy5zZWNyZXQgfSk7XG4gICAgY29uc3QgdmFsdWUgPSBzcGVjLnNlY3JldCAmJiBtYXNrID8gJyoqKicgOiByYXc7XG4gICAgcGFydHMucHVzaChgLS0ke3NwZWMuZmxhZ30gJHt2YWx1ZX1gKTtcbiAgfVxuXG4gIHJldHVybiB7IGNvbW1hbmQ6IHBhcnRzLmpvaW4oJyBcXFxcXFxuICAnKSwgbWlzc2luZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlYXJkb3duUmVzdWx0IHtcbiAgLyoqIFRoZSBleGFjdCB0ZWFyZG93biBjb21tYW5kIHRvIHJ1bi4gKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGlzIHRlYXJkb3duIGlycmV2ZXJzaWJseSBkZXN0cm95cyBkYXRhIChBV1MgdGFyZ2V0cykuICovXG4gIHJlYWRvbmx5IGRlc3RydWN0aXZlOiBib29sZWFuO1xufVxuXG4vKiogQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZSB0aGUgRUMyIHNldHVwLnNoIGRlZmF1bHRzIHRvLiAqL1xuY29uc3QgREVGQVVMVF9FQzJfU1RBQ0sgPSAncGlwZWxpbmUtYnVpbGRlcic7XG4vKiogU3RhY2sgcHJlZml4IHRoZSBGYXJnYXRlIHRlYXJkb3duLnNoIGRlZmF1bHRzIHRvLiAqL1xuY29uc3QgREVGQVVMVF9GQVJHQVRFX1BSRUZJWCA9ICdwYic7XG5cbi8qKlxuICogQXNzZW1ibGUgdGhlIHRlYXJkb3duIGNvbW1hbmQgZm9yIGEgdGFyZ2V0LiBQdXJlIGFuZCBkZXRlcm1pbmlzdGljIOKAlCBtaXJyb3JzXG4gKiBgYXNzZW1ibGVDb21tYW5kYCBmb3IgdGhlIGRlc3Ryb3kgcGF0aC4gbG9jYWwvbWluaWt1YmUgU1RPUCB0aGUgc3RhY2tcbiAqIChub24tZGVzdHJ1Y3RpdmUg4oCUIG9uLWRpc2sgLyBQVkMgZGF0YSBzdXJ2aXZlcyk7IGVjMi9mYXJnYXRlIERFTEVURSB0aGVpclxuICogQ2xvdWRGb3JtYXRpb24gc3RhY2tzIGFuZCBhcmUgaXJyZXZlcnNpYmxlLiBGb3IgRmFyZ2F0ZSwgYGFzc3VtZVllc2AgZm9yd2FyZHNcbiAqIHRoZSBuYXRpdmUgc2NyaXB0J3Mgb3duIGAtLXllc2AgKHRoZSBhZ2VudCBydW5zIGl0cyBvd24gdHlwZWQgY29uZmlybWF0aW9uXG4gKiBmaXJzdCwgc28gdGhlIHNjcmlwdCBtdXN0IG5vdCBhbHNvIGJsb2NrIG9uIHN0ZGluKTsgRUMyIGBkZWxldGUtc3RhY2tgIGhhcyBub1xuICogbmF0aXZlIHByb21wdCwgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhlIGFnZW50IGdhdGUgaXMgbWFuZGF0b3J5IHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGVhcmRvd25Db21tYW5kKFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBvcHRzOiB7IHN0YWNrTmFtZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBhc3N1bWVZZXM/OiBib29sZWFuIH0gPSB7fSxcbik6IFRlYXJkb3duUmVzdWx0IHtcbiAgY29uc3QgcmVnaW9uID0gb3B0cy5yZWdpb24gfHwgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCAndXMtZWFzdC0xJztcbiAgLy8gc3RhY2tOYW1lL3JlZ2lvbiBmbG93IHVucXVvdGVkIGludG8gYSBzaGVsbC1leGVjdXRlZCB0ZWFyZG93biBjb21tYW5kIOKAlFxuICAvLyByZWplY3Qgc2hlbGwgbWV0YWNoYXJhY3RlcnMgKG1pcnJvcnMgYXNzZW1ibGVDb21tYW5kKS5cbiAgYXNzZXJ0U2hlbGxTYWZlKHJlZ2lvbiwgJ3JlZ2lvbicpO1xuICBpZiAob3B0cy5zdGFja05hbWUpIGFzc2VydFNoZWxsU2FmZShvcHRzLnN0YWNrTmFtZSwgJ3N0YWNrLW5hbWUnKTtcbiAgc3dpdGNoICh0YXJnZXQpIHtcbiAgICBjYXNlICdsb2NhbCc6XG4gICAgICByZXR1cm4geyBjb21tYW5kOiAnY2QgZGVwbG95L2xvY2FsICYmIGJhc2ggYmluL3NodXRkb3duLnNoJywgZGVzdHJ1Y3RpdmU6IGZhbHNlIH07XG4gICAgY2FzZSAnbWluaWt1YmUnOlxuICAgICAgcmV0dXJuIHsgY29tbWFuZDogJ2NkIGRlcGxveS9taW5pa3ViZSAmJiBiYXNoIGJpbi9zaHV0ZG93bi5zaCcsIGRlc3RydWN0aXZlOiBmYWxzZSB9O1xuICAgIGNhc2UgJ2VjMic6IHtcbiAgICAgIGNvbnN0IHN0YWNrID0gb3B0cy5zdGFja05hbWUgfHwgREVGQVVMVF9FQzJfU1RBQ0s7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kOlxuICAgICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVsZXRlLXN0YWNrIC0tc3RhY2stbmFtZSAke3N0YWNrfSAtLXJlZ2lvbiAke3JlZ2lvbn0gJiYgYCArXG4gICAgICAgICAgYGF3cyBjbG91ZGZvcm1hdGlvbiB3YWl0IHN0YWNrLWRlbGV0ZS1jb21wbGV0ZSAtLXN0YWNrLW5hbWUgJHtzdGFja30gLS1yZWdpb24gJHtyZWdpb259YCxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdmYXJnYXRlJzoge1xuICAgICAgY29uc3QgcHJlZml4ID0gb3B0cy5zdGFja05hbWUgfHwgREVGQVVMVF9GQVJHQVRFX1BSRUZJWDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQ6XG4gICAgICAgICAgYGNkIGRlcGxveS9hd3MvZmFyZ2F0ZSAmJiBiYXNoIGJpbi90ZWFyZG93bi5zaCAtLXN0YWNrLXByZWZpeCAke3ByZWZpeH0gLS1yZWdpb24gJHtyZWdpb259YCArXG4gICAgICAgICAgKG9wdHMuYXNzdW1lWWVzID8gJyAtLXllcycgOiAnJyksXG4gICAgICAgIGRlc3RydWN0aXZlOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC90YXJnZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFzRDdELCtFQUErRTtBQUUvRSxNQUFNLE1BQU0sR0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsdURBQXVELEVBQUUsQ0FBQztBQUNsSSxNQUFNLFdBQVcsR0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQzNKLE1BQU0sVUFBVSxHQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxzRUFBc0UsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUssTUFBTSxNQUFNLEdBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFjLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQ3RKLE1BQU0sUUFBUSxHQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnRkFBZ0YsRUFBRSxDQUFDO0FBQ2hLLE1BQU0sYUFBYSxHQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxDQUFDO0FBQ3ZJLDRGQUE0RjtBQUM1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QUFJLENBQUMsU0FBUyxJQUFJLGlCQUFpQixDQUFDO1lBQ2xELE9BQU87Z0JBQ0wsT0FBTyxFQUNMLGdEQUFnRCxLQUFLLGFBQWEsTUFBTSxNQUFNO29CQUM5RSw4REFBOEQsS0FBSyxhQUFhLE1BQU0sRUFBRTtnQkFDMUYsV0FBVyxFQUFFLElBQUk7YUFDbEIsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxnRkFBZ0Y7WUFDaEYsK0VBQStFO1lBQy9FLDZFQUE2RTtZQUM3RSx5RUFBeUU7WUFDekUsdUJBQXVCO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksbUJBQW1CLENBQUM7WUFDeEQsSUFBSSxPQUFPLEdBQUcsNERBQTRELE9BQU8sYUFBYSxNQUFNLEVBQUUsQ0FBQztZQUN2RyxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2RCxJQUFJLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU8sSUFBSSxxQkFBcUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNFLElBQUksSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLFFBQVEsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBEZXRlcm1pbmlzdGljIHJlZ2lzdHJ5IG9mIHBsYXRmb3JtIGRlcGxveSB0YXJnZXRzIOKAlCB0aGUgc291cmNlIG9mIHRydXRoIHRoZVxuICogYHByb3Zpc2lvbmAgYWR2aXNvciB1c2VzIHRvIGFzc2VtYmxlIHRoZSBFWEFDVCBkZXBsb3kgY29tbWFuZC4gVGhlIGFnZW50IGlzIGFcbiAqIHRoaW4gd3JhcHBlciBvdmVyIHRoZSBleGlzdGluZyBkZXBsb3kgc2NyaXB0czsgaXQgbmV2ZXIgcmVpbXBsZW1lbnRzXG4gKiBkZXBsb3ltZW50LCBvbmx5IHZhbGlkYXRlcyBpbnB1dHMgYW5kIGFzc2VtYmxlcyB0aGUgY29tbWFuZCB0byBydW4uXG4gKlxuICogS2VlcCB0aGlzIGluIGxvY2stc3RlcCB3aXRoIHRoZSBmbGFncyB0aGUgc2NyaXB0cyBhY2NlcHQg4oCUIGV2ZXJ5IHRhcmdldCdzXG4gKiBvcGVyYXRvciBlbnRyeXBvaW50IGlzIGBiaW4vc2V0dXAuc2hgIChkZXBsb3kvPHRhcmdldD4vYmluL3NldHVwLnNoKS5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnRTaGVsbFNhZmUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5cbmV4cG9ydCB0eXBlIFRhcmdldElkID0gJ2xvY2FsJyB8ICdtaW5pa3ViZScgfCAnZWMyJyB8ICdla3MnO1xuXG4vKiogQSBzaW5nbGUgaW5wdXQgdGhlIHVuZGVybHlpbmcgZGVwbG95IHNjcmlwdCBhY2NlcHRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dFNwZWMge1xuICAvKiogRmxhZyBuYW1lIHBhc3NlZCB0byB0aGUgc2NyaXB0ICh3aXRob3V0IHRoZSBsZWFkaW5nIGAtLWApLiAqL1xuICByZWFkb25seSBmbGFnOiBzdHJpbmc7XG4gIC8qKiBLZXkgb24gdGhlIHByb3Zpc2lvbiBwYXJhbXMgb2JqZWN0LiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uIOKAlCBzaG93biB3aGVuIGEgcmVxdWlyZWQgaW5wdXQgaXMgbWlzc2luZy4gKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFNlY3JldCDigJQgbmV2ZXIgcHJpbnRlZCBpbiB0aGUgYXNzZW1ibGVkIGNvbW1hbmQgKG1hc2tlZCBhcyBgKioqYCkuICovXG4gIHJlYWRvbmx5IHNlY3JldD86IGJvb2xlYW47XG4gIC8qKiBCb29sZWFuIGZsYWcgd2l0aCBubyB2YWx1ZSAoZS5nLiBgLS1lbWFpbGApLiAqL1xuICByZWFkb25seSBib29sZWFuPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRTcGVjIHtcbiAgcmVhZG9ubHkgaWQ6IFRhcmdldElkO1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAvKiogRGlyZWN0b3J5IHRoZSBlbnRyeXBvaW50IHJ1bnMgZnJvbSAocmVsYXRpdmUgdG8gcmVwbyByb290KS4gKi9cbiAgcmVhZG9ubHkgZGlyOiBzdHJpbmc7XG4gIC8qKiBFbnRyeXBvaW50IHNjcmlwdCAocmVsYXRpdmUgdG8gYGRpcmApLiAqL1xuICByZWFkb25seSBlbnRyeXBvaW50OiBzdHJpbmc7XG4gIC8qKiBJbnB1dHMgdGhlIHNjcmlwdCBSRVFVSVJFUyDigJQgdGhlIGFkdmlzb3IgcmVwb3J0cyBhbnkgdGhhdCBhcmUgbWlzc2luZy4gKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xuICAvKiogT3B0aW9uYWwgaW5wdXRzLCBwYXNzZWQgdGhyb3VnaCBvbmx5IHdoZW4gcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsOiByZWFkb25seSBJbnB1dFNwZWNbXTtcbiAgLyoqXG4gICAqIFJlcG8gZm9sZGVyKHMpIHRoaXMgdGFyZ2V0J3MgZGVwbG95IG5lZWRzLCBmb3IgYSBzcGFyc2UgYC0tcmVwb2AgYm9vdHN0cmFwLlxuICAgKiBDb21iaW5lZCB3aXRoIENPTU1PTl9TUEFSU0VfUEFUSFMgYW5kIGFueSBzZWxlY3RlZCBsb2FkIHN0ZXBzJyBwYXRocy5cbiAgICovXG4gIHJlYWRvbmx5IHNwYXJzZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFBvc3QtZGVwbG95IHN0ZXAgdG8gc3VyZmFjZSAocmVnaXN0ZXJzIGFkbWluICsgbG9hZHMgcGx1Z2lucykuICovXG4gIHJlYWRvbmx5IHBvc3REZXBsb3k/OiBzdHJpbmc7XG4gIC8qKiBSb3VnaCBtb250aGx5IGNvc3QgKGZyb20gZG9jcykuICovXG4gIHJlYWRvbmx5IGNvc3Q6IHN0cmluZztcbiAgLyoqIE9uZS1saW5lIFwiYmVzdCBmb3JcIi4gKi9cbiAgcmVhZG9ubHkgYmVzdEZvcjogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgZGVwbG95IGNyZWF0ZXMg4oCUIHNob3duIHdoZW4gZGVwbG95aW5nIHNvIFwiRGVwbG95aW5nXCIgaXNuJ3Qgb3BhcXVlLiAqL1xuICByZWFkb25seSBkZXBsb3lzOiBzdHJpbmc7XG4gIC8qKiBXaGF0IGEgdGVhcmRvd24gb2YgdGhpcyB0YXJnZXQgZGVzdHJveXMg4oCUIHNob3duIGJlZm9yZSBhIChnYXRlZCkgdGVhcmRvd24uICovXG4gIHJlYWRvbmx5IGRlc3Ryb3lzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3N0IHBvcnRzIHRoZSBkZXBsb3kgYmluZHMg4oCUIGEgRkFMTEJBQ0sgb25seS4gVGhlIGxpdmUgbGlzdCBpcyBERVJJVkVEIGZyb20gdGhlXG4gICAqIGNsb25lZCBkZXBsb3kgc291cmNlIGF0IHJ1bnRpbWUgKHBvcnRzLnRzIGBkaXNjb3Zlckhvc3RQb3J0c2ApOiBsb2NhbCBmcm9tXG4gICAqIGRvY2tlci1jb21wb3NlLnltbCdzIHB1Ymxpc2hlZCBwb3J0cywgbWluaWt1YmUgZnJvbSBzZXR1cC5zaCdzIHBvcnQtZm9yd2FyZHMuIFRoaXNcbiAgICogc3RhdGljIGNvcHkgaXMgdXNlZCBvbmx5IHdoZW4gdGhhdCBzb3VyY2UgY2FuJ3QgYmUgcmVhZC4gRW1wdHkgZm9yIHJlbW90ZSB0YXJnZXRzXG4gICAqIChlYzIvZWtzIGJpbmQgbm90aGluZyBvbiB0aGUgb3BlcmF0b3IncyBtYWNoaW5lKS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RQb3J0czogcmVhZG9ubHkgeyBzZXJ2aWNlOiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9W107XG59XG5cbi8vIC0tLSBTaGFyZWQgaW5wdXQgc3BlY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgRE9NQUlOOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkb21haW4nLCBrZXk6ICdkb21haW4nLCBkZXNjcmlwdGlvbjogJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoQUxCIEFDTSBjZXJ0ICsgU0VTIERLSU0pJyB9O1xuY29uc3QgSE9TVEVEX1pPTkU6IElucHV0U3BlYyA9IHsgZmxhZzogJ2hvc3RlZC16b25lLWlkJywga2V5OiAnaG9zdGVkWm9uZUlkJywgZGVzY3JpcHRpb246ICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGRvbWFpbicgfTtcbmNvbnN0IEdIQ1JfVE9LRU46IElucHV0U3BlYyA9IHsgZmxhZzogJ2doY3ItdG9rZW4nLCBrZXk6ICdnaGNyVG9rZW4nLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBQQVQgd2l0aCByZWFkOnBhY2thZ2VzIChhdm9pZHMgZ2hjci5pbyBhbm9ueW1vdXMgcmF0ZSBsaW1pdHMpJywgc2VjcmV0OiB0cnVlIH07XG5jb25zdCBSRUdJT046IElucHV0U3BlYyA9IHsgZmxhZzogJ3JlZ2lvbicsIGtleTogJ3JlZ2lvbicsIGRlc2NyaXB0aW9uOiAnQVdTIHJlZ2lvbicgfTtcbmNvbnN0IERFUExPWV9NT0RFOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkZXBsb3ktbW9kZScsIGtleTogJ2RlcGxveU1vZGUnLCBkZXNjcmlwdGlvbjogJ3B1YmxpYyAoaW50ZXJuZXQtZmFjaW5nIEFMQikgb3IgcHJpdmF0ZSAoaW50ZXJuYWwsIGRlZmF1bHQpJyB9O1xuY29uc3QgS0VZX1BBSVI6IElucHV0U3BlYyA9IHsgZmxhZzogJ2tleS1wYWlyJywga2V5OiAna2V5UGFpcicsIGRlc2NyaXB0aW9uOiAnRUMyIGtleSBwYWlyIGluIHRoZSByZWdpb24gKGJyZWFrLWdsYXNzIHNlcmlhbCBjb25zb2xlOyByb3V0aW5lIGFjY2VzcyBpcyBTU00pJyB9O1xuY29uc3QgSU5TVEFOQ0VfVFlQRTogSW5wdXRTcGVjID0geyBmbGFnOiAnaW5zdGFuY2UtdHlwZScsIGtleTogJ2luc3RhbmNlVHlwZScsIGRlc2NyaXB0aW9uOiAnRUMyIGluc3RhbmNlIHR5cGUgKGRlZmF1bHQgdDMuMnhsYXJnZSknIH07XG4vLyBlYzIgZGVwbG95L3RlYXJkb3duIHN0YWNrIG5hbWUgKENsb3VkRm9ybWF0aW9uKS4gVGhlIGBzdGFja05hbWVgIHBhcmFtIGtleSBpcyBhbHNvIHJldXNlZFxuLy8gYnkgdGhlIHRlYXJkb3duIHBhdGggYXMgdGhlIHJlc291cmNlIGlkZW50aWZpZXIgKGVjMiBzdGFjayAvIGVrcyBjbHVzdGVyIG5hbWUpLlxuY29uc3QgU1RBQ0tfTkFNRTogSW5wdXRTcGVjID0geyBmbGFnOiAnc3RhY2stbmFtZScsIGtleTogJ3N0YWNrTmFtZScsIGRlc2NyaXB0aW9uOiAnQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZSAoZGVmYXVsdCBwaXBlbGluZS1idWlsZGVyKSDigJQgc2V0IHRvIHJ1biBhIHNlY29uZCBlYzIgZW52aXJvbm1lbnQnIH07XG4vLyBla3MgY2x1c3RlciBuYW1lIChla3NjdGwpLiBTZXQgdG8gcnVuIGEgc2Vjb25kIEVLUyBlbnZpcm9ubWVudCBpbiBvbmUgYWNjb3VudC5cbmNvbnN0IENMVVNURVJfTkFNRTogSW5wdXRTcGVjID0geyBmbGFnOiAnY2x1c3Rlci1uYW1lJywga2V5OiAnY2x1c3Rlck5hbWUnLCBkZXNjcmlwdGlvbjogJ0VLUyBjbHVzdGVyIG5hbWUgKGRlZmF1bHQgcGlwZWxpbmUtYnVpbGRlciknIH07XG4vLyBBdXRvLWluaXQgaXMgT04gQlkgREVGQVVMVCBvbiBlYzIgKHNldHVwLnNoL3RlbXBsYXRlIGRlZmF1bHQgdHJ1ZSksIHNvIGAtLW5vLWF1dG8taW5pdGBcbi8vIGlzIHRoZSBsb2FkLWJlYXJpbmcgb3B0LW91dCBhbmQgYC0tYXV0by1pbml0YCBpcyBhIG5vLW9wIHJlYWZmaXJtIOKAlCBtaXJyb3JzIC0tZW1haWwvLS1uby1lbWFpbC5cbi8vIE5PVEU6IGAtLW5vLWF1dG8taW5pdGAncyBrZXkgKG5vQXV0b0luaXQpIGlzIE5PVCBkZXJpdmFibGUgZnJvbSBpdHMgZmxhZyB0aGUgd2F5IHRoZSBvdGhlclxuLy8gc3BlY3MnIGtleXMgYXJlIChjb21tYW5kZXIgZm9sZHMgLS14Ly0tbm8teCBpbnRvIGEgc2luZ2xlIGB4YCBvcHRpb24pOyBwcm92aXNpb24udHMgYXNzZW1ibGVzXG4vLyBib3RoIGtleXMgZXhwbGljaXRseSDigJQgc2VlIHRoZSBwYXJhbS1hc3NlbWJseSB0aGVyZS4gKGVrcy9taW5pa3ViZSBydW4gaW5pdCB2aWEgcHJvdmlzaW9uLCBub3Rcbi8vIGEgZGVwbG95LW1hbmFnZWQgYXV0by1pbml0LCBzbyB0aGV5IGlnbm9yZSB0aGVzZS4pXG5jb25zdCBBVVRPX0lOSVQ6IElucHV0U3BlYyA9IHsgZmxhZzogJ2F1dG8taW5pdCcsIGtleTogJ2F1dG9Jbml0JywgZGVzY3JpcHRpb246ICdlYzI6IHRoZSBpbnN0YW5jZSBzZWxmLXJ1bnMgaW5pdC1wbGF0Zm9ybSBvbiBmaXJzdCBib290IChyZWdpc3RlciArIGFsbCBsb2Fkcykg4oCUIHRoZSBERUZBVUxUIG9uIGVjMicsIGJvb2xlYW46IHRydWUgfTtcbmNvbnN0IE5PX0FVVE9fSU5JVDogSW5wdXRTcGVjID0geyBmbGFnOiAnbm8tYXV0by1pbml0Jywga2V5OiAnbm9BdXRvSW5pdCcsIGRlc2NyaXB0aW9uOiAnZWMyOiBza2lwIHRoZSBvbi1ib290IGF1dG8taW5pdCBhbmQgcnVuIGluaXQtcGxhdGZvcm0gbWFudWFsbHkgb24gdGhlIGJveCBpbnN0ZWFkJywgYm9vbGVhbjogdHJ1ZSB9O1xuXG4vLyBTRVMgLyBlbWFpbCBmYW1pbHkg4oCUIHNoYXJlZCBieSBlYzIgKyBla3MuIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUXG4vLyBvbiBBV1MgZGVwbG95czsgYC0tbm8tZW1haWxgIGlzIHRoZSBvcHQtb3V0IChgLS1lbWFpbGAgaXMgYSBoYXJtbGVzcyBuby1vcCBrZXB0XG4vLyBmb3IgYmFjay1jb21wYXQpLlxuY29uc3QgRU1BSUw6IHJlYWRvbmx5IElucHV0U3BlY1tdID0gW1xuICB7IGZsYWc6ICdlbWFpbCcsIGtleTogJ2VtYWlsJywgZGVzY3JpcHRpb246ICdFbmFibGUgU0VTIHRyYW5zYWN0aW9uYWwgZW1haWwgKG9uIGJ5IGRlZmF1bHQgZm9yIEFXUyknLCBib29sZWFuOiB0cnVlIH0sXG4gIHsgZmxhZzogJ25vLWVtYWlsJywga2V5OiAnbm9FbWFpbCcsIGRlc2NyaXB0aW9uOiAnU2tpcCBTRVMgKHRyYW5zYWN0aW9uYWwgZW1haWwgaXMgcHJvdmlzaW9uZWQgYnkgZGVmYXVsdCknLCBib29sZWFuOiB0cnVlIH0sXG4gIHsgZmxhZzogJ2VtYWlsLWZyb20nLCBrZXk6ICdlbWFpbEZyb20nLCBkZXNjcmlwdGlvbjogJ0Zyb20gYWRkcmVzcyAoZGVmYXVsdCBub3JlcGx5QDxkb21haW4+KScgfSxcbiAgeyBmbGFnOiAnZW1haWwtZnJvbS1uYW1lJywga2V5OiAnZW1haWxGcm9tTmFtZScsIGRlc2NyaXB0aW9uOiAnRGlzcGxheSBuYW1lIG9uIG91dGJvdW5kIGVtYWlsJyB9LFxuICB7IGZsYWc6ICdhbGVydC1lbWFpbCcsIGtleTogJ2FsZXJ0RW1haWwnLCBkZXNjcmlwdGlvbjogJ1N1YnNjcmliZSBhbiBhZGRyZXNzIHRvIHRoZSBib3VuY2UvY29tcGxhaW50IFNOUyB0b3BpYycgfSxcbiAgeyBmbGFnOiAnbm8tY3JlYXRlLXNlcy1pZGVudGl0eScsIGtleTogJ25vQ3JlYXRlU2VzSWRlbnRpdHknLCBkZXNjcmlwdGlvbjogJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknLCBib29sZWFuOiB0cnVlIH0sXG5dO1xuXG4vLyAtLS0gVGFyZ2V0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBUQVJHRVRTOiBSZWFkb25seTxSZWNvcmQ8VGFyZ2V0SWQsIFRhcmdldFNwZWM+PiA9IHtcbiAgbG9jYWw6IHtcbiAgICBpZDogJ2xvY2FsJyxcbiAgICBsYWJlbDogJ0xvY2FsIChEb2NrZXIgQ29tcG9zZSknLFxuICAgIGRpcjogJ2RlcGxveS9sb2NhbC9kb2NrZXInLFxuICAgIGVudHJ5cG9pbnQ6ICdiaW4vc2V0dXAuc2gnLFxuICAgIHNwYXJzZVBhdGhzOiBbJ2RlcGxveS9sb2NhbC9kb2NrZXInXSxcbiAgICByZXF1aXJlZDogW10sXG4gICAgb3B0aW9uYWw6IFtdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBsb2NhbCcsXG4gICAgY29zdDogJ0ZyZWUnLFxuICAgIGJlc3RGb3I6ICdEZXZlbG9wbWVudCcsXG4gICAgZGVwbG95czogJ3RoZSBwbGF0Zm9ybSBhcyBhIERvY2tlciBDb21wb3NlIHN0YWNrIOKAlCBhbiBuZ2lueCBUTFMgcHJveHksIHRoZSBBUEkgc2VydmljZXMgKHBsYXRmb3JtLCBwbHVnaW4sIHBpcGVsaW5lLCBtZXNzYWdlLCByZXBvcnRpbmcsIGNvbXBsaWFuY2UsIHF1b3RhLCBiaWxsaW5nLCBpbWFnZS1yZWdpc3RyeSksIHRoZSBmcm9udGVuZCwgYW5kIHBvc3RncmVzICsgbW9uZ28gKyByZWRpcy4gRmlyc3QgcnVuIHB1bGxzIHRoZSBnaGNyLmlvIGltYWdlcyBhbmQgZ2VuZXJhdGVzIGEgbG9jYWwgVExTIGNlcnQgKGEgZmV3IG1pbnV0ZXMpLicsXG4gICAgZGVzdHJveXM6ICdzdG9wcyBhbGwgY29udGFpbmVycyDigJQgZGF0YSB1bmRlciBkZXBsb3kvbG9jYWwvZG9ja2VyL2RhdGEgcGVyc2lzdHMgb24gZGlzayAoZGVsZXRlIGl0IG1hbnVhbGx5IGZvciBhIGNsZWFuIHNsYXRlKScsXG4gICAgLy8gTWlycm9ycyB0aGUgcHVibGlzaGVkIHBvcnRzIGluIGRlcGxveS9sb2NhbC9kb2NrZXIvZG9ja2VyLWNvbXBvc2UueW1sLlxuICAgIGhvc3RQb3J0czogW1xuICAgICAgeyBzZXJ2aWNlOiAnbmdpbngg4oCUIEhUVFBTIGdhdGV3YXkgKFVJL0FQSSknLCBwb3J0OiA4NDQzIH0sXG4gICAgICB7IHNlcnZpY2U6ICduZ2lueCDigJQgSFRUUCByZWRpcmVjdCcsIHBvcnQ6IDgwODAgfSxcbiAgICAgIHsgc2VydmljZTogJ3BnQWRtaW4gKFBvc3RncmVzIFVJKScsIHBvcnQ6IDU0ODAgfSxcbiAgICAgIHsgc2VydmljZTogJ01vbmdvIEV4cHJlc3MgKE1vbmdvIFVJKScsIHBvcnQ6IDI3MDgxIH0sXG4gICAgICB7IHNlcnZpY2U6ICdEb2NrZXIgcmVnaXN0cnknLCBwb3J0OiA1MDAwIH0sXG4gICAgICB7IHNlcnZpY2U6ICdKYWVnZXIgKHRyYWNpbmcgVUkpJywgcG9ydDogMTY2ODYgfSxcbiAgICBdLFxuICB9LFxuICBtaW5pa3ViZToge1xuICAgIGlkOiAnbWluaWt1YmUnLFxuICAgIGxhYmVsOiAnTWluaWt1YmUgKGxvY2FsIEt1YmVybmV0ZXMpJyxcbiAgICBkaXI6ICdkZXBsb3kvbG9jYWwvbWluaWt1YmUnLFxuICAgIGVudHJ5cG9pbnQ6ICdiaW4vc2V0dXAuc2gnLFxuICAgIHNwYXJzZVBhdGhzOiBbJ2RlcGxveS9sb2NhbC9taW5pa3ViZSddLFxuICAgIHJlcXVpcmVkOiBbXSxcbiAgICBvcHRpb25hbDogW10sXG4gICAgcG9zdERlcGxveTogJy4vZGVwbG95L2Jpbi9pbml0LXBsYXRmb3JtLnNoIG1pbmlrdWJlJyxcbiAgICBjb3N0OiAnRnJlZScsXG4gICAgYmVzdEZvcjogJ0xvY2FsIEt1YmVybmV0ZXMnLFxuICAgIGRlcGxveXM6ICd0aGUgcGxhdGZvcm0gb250byBhIGxvY2FsIE1pbmlrdWJlIGNsdXN0ZXIg4oCUIHRoZSBzYW1lIHNlcnZpY2VzIGFzIEt1YmVybmV0ZXMgRGVwbG95bWVudHMvU2VydmljZXMgYmVoaW5kIGFuIGluZ3Jlc3MsIHBsdXMgaW4tY2x1c3RlciBwb3N0Z3JlcyArIG1vbmdvICsgcmVkaXMuIEZpcnN0IHJ1biBwdWxscyBpbWFnZXMsIGJ1aWxkcyB0aGUgY2x1c3RlciwgYW5kIGdlbmVyYXRlcyBhIFRMUyBjZXJ0IChzZXZlcmFsIG1pbnV0ZXMpLicsXG4gICAgZGVzdHJveXM6ICdzdG9wcyB0aGUgbWluaWt1YmUgc3RhY2sg4oCUIHBlcnNpc3RlbnQgdm9sdW1lcyAoUFZDIGRhdGEpIHJlbWFpbiB1bnRpbCB0aGUgY2x1c3RlciBpcyBkZWxldGVkJyxcbiAgICAvLyBNaXJyb3JzIHRoZSBrdWJlY3RsIHBvcnQtZm9yd2FyZHMgc3RhcnRlZCBpbiBkZXBsb3kvbG9jYWwvbWluaWt1YmUvYmluL3NldHVwLnNoLlxuICAgIGhvc3RQb3J0czogW1xuICAgICAgeyBzZXJ2aWNlOiAnbmdpbngg4oCUIEhUVFBTIGdhdGV3YXkgKFVJL0FQSSknLCBwb3J0OiA4NDQzIH0sXG4gICAgICB7IHNlcnZpY2U6ICdNb25nbyBFeHByZXNzIChNb25nbyBVSSknLCBwb3J0OiA4MDgxIH0sXG4gICAgICB7IHNlcnZpY2U6ICdwZ0FkbWluIChQb3N0Z3JlcyBVSSknLCBwb3J0OiA1NDgwIH0sXG4gICAgXSxcbiAgfSxcbiAgZWMyOiB7XG4gICAgaWQ6ICdlYzInLFxuICAgIGxhYmVsOiAnQVdTIEVDMiAoc2luZ2xlIE1pbmlrdWJlIGluc3RhbmNlIGJlaGluZCBhbiBBTEIpJyxcbiAgICBkaXI6ICdkZXBsb3kvYXdzL2VjMicsXG4gICAgZW50cnlwb2ludDogJ2Jpbi9zZXR1cC5zaCcsXG4gICAgc3BhcnNlUGF0aHM6IFsnZGVwbG95L2F3cy9lYzInXSxcbiAgICByZXF1aXJlZDogW0tFWV9QQUlSLCBET01BSU4sIEhPU1RFRF9aT05FXSxcbiAgICBvcHRpb25hbDogW1JFR0lPTiwgREVQTE9ZX01PREUsIEdIQ1JfVE9LRU4sIElOU1RBTkNFX1RZUEUsIFNUQUNLX05BTUUsIEFVVE9fSU5JVCwgTk9fQVVUT19JTklULCAuLi5FTUFJTF0sXG4gICAgcG9zdERlcGxveTogJy4vZGVwbG95L2Jpbi9pbml0LXBsYXRmb3JtLnNoIGVjMiAgIyBhdXRvLXJ1bnMgb24gdGhlIGluc3RhbmNlIGJ5IGRlZmF1bHQ7IC0tbm8tYXV0by1pbml0IHRvIGRvIGl0IG1hbnVhbGx5JyxcbiAgICBjb3N0OiAnfiQxNDAtMjY1L21vJyxcbiAgICBiZXN0Rm9yOiAnRGV2IC8gc3RhZ2luZycsXG4gICAgZGVwbG95czogJ3RoZSBwbGF0Zm9ybSBvbiBhIHNpbmdsZSBFQzIgaW5zdGFuY2UgdmlhIENsb3VkRm9ybWF0aW9uIOKAlCBhIFZQQywgdGhlIGluc3RhbmNlIChydW5uaW5nIHRoZSBNaW5pa3ViZSBzdGFjayksIGFuIEFMQiwgYSBSb3V0ZSA1MyByZWNvcmQgKyBBQ00gY2VydCBmb3IgdGhlIGRvbWFpbiwgYW5kIChieSBkZWZhdWx0KSBTRVMgZW1haWwuIFRoZSBpbnN0YW5jZSBwdWxscyBpbWFnZXMgb24gZmlyc3QgYm9vdC4nLFxuICAgIGRlc3Ryb3lzOiAnREVMRVRFUyB0aGUgQ2xvdWRGb3JtYXRpb24gc3RhY2s6IHRoZSBWUEMsIEVDMiBpbnN0YW5jZSwgYW5kIGl0cyBFQlMgZGF0YSB2b2x1bWUgKGRhdGFiYXNlcywgcmVnaXN0cnksIHBsdWdpbiBidWlsZHMpLiBJcnJldmVyc2libGUuJyxcbiAgICBob3N0UG9ydHM6IFtdLCAvLyByZW1vdGUgKEFXUykg4oCUIGJpbmRzIG5vdGhpbmcgb24gdGhlIG9wZXJhdG9yJ3MgbWFjaGluZVxuICB9LFxuICBla3M6IHtcbiAgICBpZDogJ2VrcycsXG4gICAgbGFiZWw6ICdBV1MgRUtTIEF1dG8gTW9kZSAobWFuYWdlZCBLdWJlcm5ldGVzKScsXG4gICAgZGlyOiAnZGVwbG95L2F3cy9la3MnLFxuICAgIGVudHJ5cG9pbnQ6ICdiaW4vc2V0dXAuc2gnLFxuICAgIHNwYXJzZVBhdGhzOiBbJ2RlcGxveS9hd3MvZWtzJ10sXG4gICAgcmVxdWlyZWQ6IFtET01BSU4sIEhPU1RFRF9aT05FXSxcbiAgICBvcHRpb25hbDogW1JFR0lPTiwgREVQTE9ZX01PREUsIEdIQ1JfVE9LRU4sIENMVVNURVJfTkFNRSwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBla3MgICMgcmVnaXN0ZXIgYWRtaW4gKyBsb2FkIHBsdWdpbnMgKHJ1biB3aXRoIGt1YmVjdGwgYWNjZXNzIHRvIHRoZSBjbHVzdGVyKScsXG4gICAgY29zdDogJ34kMTUwLTQwMC9tbycsXG4gICAgYmVzdEZvcjogJ1Byb2R1Y3Rpb24nLFxuICAgIGRlcGxveXM6ICd0aGUgcGxhdGZvcm0gb24gQW1hem9uIEVLUyBBdXRvIE1vZGUg4oCUIGFuIEFXUy1tYW5hZ2VkIEt1YmVybmV0ZXMgY2x1c3RlciAoS2FycGVudGVyLXNjYWxlZCBFQzIgbm9kZXMsIEFXUyBMb2FkIEJhbGFuY2VyIENvbnRyb2xsZXIsIEVCUy9FRlMgQ1NJKSwgdGhlIHNhbWUgS3ViZXJuZXRlcyB3b3JrbG9hZHMgYXMgdGhlIG90aGVyIGs4cyB0YXJnZXRzLCBhbiBBTEIgSW5ncmVzcyArIEFDTSBmb3IgdGhlIGRvbWFpbiwgYW5kIChieSBkZWZhdWx0KSBTRVMgZW1haWwuIFBsdWdpbiBidWlsZHMgcnVuIG9uIHRoZSBpbi1jbHVzdGVyIHJvb3RsZXNzIGJ1aWxka2l0ZCAoRUMyIG5vZGVzIGFsbG93IGl0KS4nLFxuICAgIGRlc3Ryb3lzOiAnUnVucyBiaW4vc2h1dGRvd24uc2g6IERFTEVURVMgdGhlIEVLUyBjbHVzdGVyICsgbm9kZXMgKGVrc2N0bCksIHRoZSBFRlMgZmlsZXN5c3RlbSwgYW5kIOKAlCB3aGVuIC0tZG9tYWluIGlzIHNldCDigJQgdGhlIEFDTSBjZXJ0ICsgUm91dGUgNTMgYWxpYXMuIEVCUyB2b2x1bWVzIG9uIHRoZSBSZXRhaW4gU3RvcmFnZUNsYXNzIGFyZSBOT1QgYXV0by1kZWxldGVkIChyZXBvcnRlZCBhdCB0aGUgZW5kKS4gSXJyZXZlcnNpYmxlLicsXG4gICAgaG9zdFBvcnRzOiBbXSwgLy8gcmVtb3RlIChBV1MpIOKAlCBiaW5kcyBub3RoaW5nIG9uIHRoZSBvcGVyYXRvcidzIG1hY2hpbmVcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBUQVJHRVRfSURTOiByZWFkb25seSBUYXJnZXRJZFtdID0gWydsb2NhbCcsICdtaW5pa3ViZScsICdlYzInLCAnZWtzJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldElkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVGFyZ2V0SWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAoVEFSR0VUX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vLyAtLS0gU3BhcnNlIGJvb3RzdHJhcCBwYXRocyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRm9sZGVycyBldmVyeSBgLS1yZXBvYCBib290c3RyYXAgbmVlZHMgcmVnYXJkbGVzcyBvZiB0YXJnZXQ6IHRoZSBvcmNoZXN0cmF0aW9uXG4gKiBzY3JpcHRzLiBFYWNoIHRhcmdldCdzIHNldHVwLnNoICsgaW5pdC1wbGF0Zm9ybS5zaCBsaXZlIGluIC8gZHJpdmUgdGhlc2UuXG4gKiBEZWxpYmVyYXRlbHkgbWluaW1hbCDigJQgaGVhdmllciBmb2xkZXJzIChwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykgYXJlIHB1bGxlZFxuICogaW4gb25seSB3aGVuIHRoZWlyIHBvc3QtaW5zdGFsbCBvcHRpb24gaXMgc2VsZWN0ZWQgKHNlZSBMT0FEX1NURVBTKS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTU1PTl9TUEFSU0VfUEFUSFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydkZXBsb3kvYmluJ107XG5cbi8qKlxuICogT3B0LWluIHBvc3QtaW5zdGFsbCBsb2FkIHN0ZXBzLiBFYWNoIG1hcHMgYSBwcm92aXNpb24gYC0td2l0aC0qYCBmbGFnIHRvIHRoZVxuICogaW5pdC1wbGF0Zm9ybSBlbnYgdmFyIHRoYXQgZW5hYmxlcyBpdCBBTkQgdGhlIHJlcG8gZm9sZGVyKHMpIGl0IHJlYWRzIOKAlCBzbyB0aGVcbiAqIHNwYXJzZSBjaGVja291dCBncm93cyBleGFjdGx5IHdpdGggdGhlIHNlbGVjdGVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0FEX1NURVBTID0gW1xuICAvLyBUaGUgcGx1Z2luIGJ1aWxkIHJlYWRzIGRlcGxveS9wbHVnaW5zL19iYXNlIEFORCBkZXBsb3kvY29kZWJ1aWxkL2Jvb3RzdHJhcC5cbiAgeyBpZDogJ3BsdWdpbnMnLCBmbGFnOiAnd2l0aFBsdWdpbnMnLCBlbnY6ICdMT0FEX1BMVUdJTlMnLCBwYXRoczogWydkZXBsb3kvcGx1Z2lucycsICdkZXBsb3kvY29kZWJ1aWxkJ10gfSxcbiAgeyBpZDogJ2NvbXBsaWFuY2UnLCBmbGFnOiAnd2l0aENvbXBsaWFuY2UnLCBlbnY6ICdMT0FEX0NPTVBMSUFOQ0UnLCBwYXRoczogWydkZXBsb3kvY29tcGxpYW5jZSddIH0sXG4gIHsgaWQ6ICdzYW1wbGVzJywgZmxhZzogJ3dpdGhTYW1wbGVzJywgZW52OiAnTE9BRF9QSVBFTElORVMnLCBwYXRoczogWydkZXBsb3kvc2FtcGxlcyddIH0sXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb2FkU3RlcElkID0gKHR5cGVvZiBMT0FEX1NURVBTKVtudW1iZXJdWydpZCddO1xuXG4vKipcbiAqIFRoZSBkZS1kdXBsaWNhdGVkIHNldCBvZiBzcGFyc2UgcGF0aHMgZm9yIGEgdGFyZ2V0IHBsdXMgdGhlIGVuYWJsZWQgbG9hZFxuICogc3RlcHM6IGNvbW1vbiBiYXNlIOKIqiB0YXJnZXQgZm9sZGVyKHMpIOKIqiBlYWNoIGVuYWJsZWQgc3RlcCdzIGZvbGRlcihzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZVBhdGhzRm9yKHRhcmdldDogVGFyZ2V0SWQsIGVuYWJsZWRMb2FkSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oQ09NTU9OX1NQQVJTRV9QQVRIUyk7XG4gIGZvciAoY29uc3QgcCBvZiBUQVJHRVRTW3RhcmdldF0uc3BhcnNlUGF0aHMpIHBhdGhzLmFkZChwKTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIExPQURfU1RFUFMpIHtcbiAgICBpZiAoZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoc3RlcC5pZCkpIGZvciAoY29uc3QgcCBvZiBzdGVwLnBhdGhzKSBwYXRocy5hZGQocCk7XG4gIH1cbiAgcmV0dXJuIFsuLi5wYXRoc107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZW1ibGVSZXN1bHQge1xuICAvKiogVGhlIGV4YWN0IGNvbW1hbmQgdG8gcnVuIOKAlCBzZWNyZXRzIG1hc2tlZCBhcyBgKioqYC4gKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogUmVxdWlyZWQgaW5wdXRzIHRoYXQgd2VyZSBub3Qgc3VwcGxpZWQuICovXG4gIHJlYWRvbmx5IG1pc3Npbmc6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xufVxuXG4vKipcbiAqIEFzc2VtYmxlIHRoZSBkZXBsb3kgY29tbWFuZCBmb3IgYSB0YXJnZXQgZnJvbSB0aGUgcHJvdmlkZWQgcGFyYW1zLiBQdXJlIGFuZFxuICogZGV0ZXJtaW5pc3RpYyDigJQgbm8gc2hlbGwsIG5vIExMTS4gTWlzc2luZyByZXF1aXJlZCBpbnB1dHMgYXJlIHJlcG9ydGVkIChuZXZlclxuICogZ3Vlc3NlZCkuIEJ5IGRlZmF1bHQgc2VjcmV0cyBhcmUgbWFza2VkIChgKioqYCkgZm9yIERJU1BMQVk7IHBhc3MgYG1hc2s6IGZhbHNlYFxuICogdG8gYnVpbGQgdGhlIHJlYWwgY29tbWFuZCBmb3IgRVhFQ1VUSU9OIOKAlCB0aGF0IHN0cmluZyBtdXN0IG5ldmVyIGJlIGxvZ2dlZCBvclxuICogc2hvd24gdG8gdGhlIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVDb21tYW5kKFxuICB0YXJnZXQ6IFRhcmdldFNwZWMsXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdHM6IHsgbWFzaz86IGJvb2xlYW4gfSA9IHt9LFxuKTogQXNzZW1ibGVSZXN1bHQge1xuICBjb25zdCBtYXNrID0gb3B0cy5tYXNrID8/IHRydWU7XG4gIGNvbnN0IHByb3ZpZGVkID0gKHNwZWM6IElucHV0U3BlYyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHYgPSBwYXJhbXNbc3BlYy5rZXldO1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gJycgJiYgdiAhPT0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgbWlzc2luZyA9IHRhcmdldC5yZXF1aXJlZC5maWx0ZXIoKHNwZWMpID0+ICFwcm92aWRlZChzcGVjKSk7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW2BjZCAke3RhcmdldC5kaXJ9ICYmIGJhc2ggJHt0YXJnZXQuZW50cnlwb2ludH1gXTtcbiAgZm9yIChjb25zdCBzcGVjIG9mIFsuLi50YXJnZXQucmVxdWlyZWQsIC4uLnRhcmdldC5vcHRpb25hbF0pIHtcbiAgICBpZiAoIXByb3ZpZGVkKHNwZWMpKSBjb250aW51ZTtcbiAgICBpZiAoc3BlYy5ib29sZWFuKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAtLSR7c3BlYy5mbGFnfWApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHJhdyA9IFN0cmluZyhwYXJhbXNbc3BlYy5rZXldKTtcbiAgICAvLyBUaGUgYXNzZW1ibGVkIGNvbW1hbmQgaXMgZXhlY3V0ZWQgdmlhIGEgc2hlbGwgKHJ1blNjcmlwdCksIHNvIGEgcGFyYW1cbiAgICAvLyB2YWx1ZSBjYXJyeWluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB3b3VsZCBiZSBjb21tYW5kIGluamVjdGlvbi4gVmFsaWRhdGVcbiAgICAvLyB0aGUgUkVBTCB2YWx1ZSBldmVuIHdoZW4gbWFza2luZyBmb3IgZGlzcGxheSDigJQgdGhlIGV4ZWN1dGVkIGNvbW1hbmQgdXNlc1xuICAgIC8vIHRoZSB1bm1hc2tlZCB2YWx1ZS4gUmVkYWN0IHNlY3JldHMgc28gdGhlIGVycm9yIG5ldmVyIGVjaG9lcyBhIHRva2VuLlxuICAgIGFzc2VydFNoZWxsU2FmZShyYXcsIGAtLSR7c3BlYy5mbGFnfWAsIHsgcmVkYWN0VmFsdWU6IHNwZWMuc2VjcmV0IH0pO1xuICAgIGNvbnN0IHZhbHVlID0gc3BlYy5zZWNyZXQgJiYgbWFzayA/ICcqKionIDogcmF3O1xuICAgIHBhcnRzLnB1c2goYC0tJHtzcGVjLmZsYWd9ICR7dmFsdWV9YCk7XG4gIH1cblxuICByZXR1cm4geyBjb21tYW5kOiBwYXJ0cy5qb2luKCcgXFxcXFxcbiAgJyksIG1pc3NpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZWFyZG93blJlc3VsdCB7XG4gIC8qKiBUaGUgZXhhY3QgdGVhcmRvd24gY29tbWFuZCB0byBydW4uICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhpcyB0ZWFyZG93biBpcnJldmVyc2libHkgZGVzdHJveXMgZGF0YSAoQVdTIHRhcmdldHMpLiAqL1xuICByZWFkb25seSBkZXN0cnVjdGl2ZTogYm9vbGVhbjtcbn1cblxuLyoqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWUgdGhlIEVDMiBzZXR1cC5zaCBkZWZhdWx0cyB0by4gKi9cbmNvbnN0IERFRkFVTFRfRUMyX1NUQUNLID0gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuLyoqIEVLUyBjbHVzdGVyIG5hbWUgZWtzY3RsIGRlZmF1bHRzIHRvLiAqL1xuY29uc3QgREVGQVVMVF9FS1NfQ0xVU1RFUiA9ICdwaXBlbGluZS1idWlsZGVyJztcblxuLyoqXG4gKiBBc3NlbWJsZSB0aGUgdGVhcmRvd24gY29tbWFuZCBmb3IgYSB0YXJnZXQuIFB1cmUgYW5kIGRldGVybWluaXN0aWMg4oCUIG1pcnJvcnNcbiAqIGBhc3NlbWJsZUNvbW1hbmRgIGZvciB0aGUgZGVzdHJveSBwYXRoLiBsb2NhbC9taW5pa3ViZSBTVE9QIHRoZSBzdGFja1xuICogKG5vbi1kZXN0cnVjdGl2ZSDigJQgb24tZGlzayAvIFBWQyBkYXRhIHN1cnZpdmVzKTsgZWMyIERFTEVURXMgaXRzIENsb3VkRm9ybWF0aW9uXG4gKiBzdGFjayBhbmQgZWtzIERFTEVURXMgaXRzIGNsdXN0ZXIgKGVrc2N0bCkg4oCUIGJvdGggaXJyZXZlcnNpYmxlLiBFQzIgYGRlbGV0ZS1zdGFja2BcbiAqIGFuZCBgZWtzY3RsIGRlbGV0ZSBjbHVzdGVyYCBoYXZlIG5vIG5hdGl2ZSBwcm9tcHQsIHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoZSBhZ2VudCdzXG4gKiB0eXBlZC1jb25maXJtYXRpb24gZ2F0ZSBpcyBtYW5kYXRvcnkgdGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZWFyZG93bkNvbW1hbmQoXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyBjbHVzdGVyTmFtZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBkb21haW4/OiBzdHJpbmc7IGhvc3RlZFpvbmVJZD86IHN0cmluZzsgYXNzdW1lWWVzPzogYm9vbGVhbiB9ID0ge30sXG4pOiBUZWFyZG93blJlc3VsdCB7XG4gIGNvbnN0IHJlZ2lvbiA9IG9wdHMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgJ3VzLWVhc3QtMSc7XG4gIC8vIEFueXRoaW5nIGZsb3dpbmcgdW5xdW90ZWQgaW50byBhIHNoZWxsLWV4ZWN1dGVkIHRlYXJkb3duIGNvbW1hbmQgaXMgcmVqZWN0ZWRcbiAgLy8gZm9yIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIChtaXJyb3JzIGFzc2VtYmxlQ29tbWFuZCkuXG4gIGFzc2VydFNoZWxsU2FmZShyZWdpb24sICdyZWdpb24nKTtcbiAgaWYgKG9wdHMuc3RhY2tOYW1lKSBhc3NlcnRTaGVsbFNhZmUob3B0cy5zdGFja05hbWUsICdzdGFjay1uYW1lJyk7XG4gIGlmIChvcHRzLmNsdXN0ZXJOYW1lKSBhc3NlcnRTaGVsbFNhZmUob3B0cy5jbHVzdGVyTmFtZSwgJ2NsdXN0ZXItbmFtZScpO1xuICBpZiAob3B0cy5kb21haW4pIGFzc2VydFNoZWxsU2FmZShvcHRzLmRvbWFpbiwgJ2RvbWFpbicpO1xuICBpZiAob3B0cy5ob3N0ZWRab25lSWQpIGFzc2VydFNoZWxsU2FmZShvcHRzLmhvc3RlZFpvbmVJZCwgJ2hvc3RlZC16b25lLWlkJyk7XG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSAnbG9jYWwnOlxuICAgICAgcmV0dXJuIHsgY29tbWFuZDogJ2NkIGRlcGxveS9sb2NhbC9kb2NrZXIgJiYgYmFzaCBiaW4vc2h1dGRvd24uc2gnLCBkZXN0cnVjdGl2ZTogZmFsc2UgfTtcbiAgICBjYXNlICdtaW5pa3ViZSc6XG4gICAgICByZXR1cm4geyBjb21tYW5kOiAnY2QgZGVwbG95L2xvY2FsL21pbmlrdWJlICYmIGJhc2ggYmluL3NodXRkb3duLnNoJywgZGVzdHJ1Y3RpdmU6IGZhbHNlIH07XG4gICAgY2FzZSAnZWMyJzoge1xuICAgICAgY29uc3Qgc3RhY2sgPSBvcHRzLnN0YWNrTmFtZSB8fCBERUZBVUxUX0VDMl9TVEFDSztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQ6XG4gICAgICAgICAgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZWxldGUtc3RhY2sgLS1zdGFjay1uYW1lICR7c3RhY2t9IC0tcmVnaW9uICR7cmVnaW9ufSAmJiBgICtcbiAgICAgICAgICBgYXdzIGNsb3VkZm9ybWF0aW9uIHdhaXQgc3RhY2stZGVsZXRlLWNvbXBsZXRlIC0tc3RhY2stbmFtZSAke3N0YWNrfSAtLXJlZ2lvbiAke3JlZ2lvbn1gLFxuICAgICAgICBkZXN0cnVjdGl2ZTogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ2Vrcyc6IHtcbiAgICAgIC8vIGVrcyB0ZWFycyBkb3duIHZpYSBiaW4vc2h1dGRvd24uc2ggKGxpa2UgbG9jYWwvbWluaWt1YmUgdXNlIGJpbi9zaHV0ZG93bi5zaCk6XG4gICAgICAvLyBpdCBkZWxldGVzIHRoZSBjbHVzdGVyIEFORCB0aGUgcmVzb3VyY2VzIGVrc2N0bCBhbG9uZSB3b3VsZCBvcnBoYW4g4oCUIHRoZSBFRlNcbiAgICAgIC8vIGZpbGVzeXN0ZW0gYW5kLCB3aGVuIC0tZG9tYWluIGlzIGdpdmVuLCB0aGUgQUNNIGNlcnQgKyBSb3V0ZSA1MyBhbGlhcy4gVGhlXG4gICAgICAvLyBhZ2VudCdzIHR5cGVkLWNvbmZpcm1hdGlvbiBnYXRlIGFscmVhZHkgcmFuLCBzbyBwYXNzIC0teWVzIHRvIHNraXAgdGhlXG4gICAgICAvLyBzY3JpcHQncyBvd24gcHJvbXB0LlxuICAgICAgY29uc3QgY2x1c3RlciA9IG9wdHMuY2x1c3Rlck5hbWUgfHwgREVGQVVMVF9FS1NfQ0xVU1RFUjtcbiAgICAgIGxldCBjb21tYW5kID0gYGNkIGRlcGxveS9hd3MvZWtzICYmIGJhc2ggYmluL3NodXRkb3duLnNoIC0tY2x1c3Rlci1uYW1lICR7Y2x1c3Rlcn0gLS1yZWdpb24gJHtyZWdpb259YDtcbiAgICAgIGlmIChvcHRzLmRvbWFpbikgY29tbWFuZCArPSBgIC0tZG9tYWluICR7b3B0cy5kb21haW59YDtcbiAgICAgIGlmIChvcHRzLmhvc3RlZFpvbmVJZCkgY29tbWFuZCArPSBgIC0taG9zdGVkLXpvbmUtaWQgJHtvcHRzLmhvc3RlZFpvbmVJZH1gO1xuICAgICAgaWYgKG9wdHMuYXNzdW1lWWVzKSBjb21tYW5kICs9ICcgLS15ZXMnO1xuICAgICAgcmV0dXJuIHsgY29tbWFuZCwgZGVzdHJ1Y3RpdmU6IHRydWUgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|