cdktn 0.26.0-pre.2 → 0.26.0-pre.21
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/.jsii +1200 -1116
- package/eslint.config.mjs +18 -7
- package/jest.config.js +0 -1
- package/lib/_tokens.d.ts +7 -0
- package/lib/_tokens.js +8 -2
- package/lib/annotations.js +1 -1
- package/lib/app.js +8 -4
- package/lib/aspect.js +1 -1
- package/lib/asset-hash.js +1 -1
- package/lib/asset-staging.js +1 -1
- package/lib/assets.js +4 -4
- package/lib/backends/azurerm-backend.d.ts +6 -0
- package/lib/backends/azurerm-backend.js +9 -5
- package/lib/backends/cloud-backend.js +4 -4
- package/lib/backends/consul-backend.d.ts +6 -0
- package/lib/backends/consul-backend.js +9 -5
- package/lib/backends/cos-backend.d.ts +6 -0
- package/lib/backends/cos-backend.js +9 -5
- package/lib/backends/gcs-backend.d.ts +6 -0
- package/lib/backends/gcs-backend.js +9 -5
- package/lib/backends/http-backend.d.ts +6 -0
- package/lib/backends/http-backend.js +9 -5
- package/lib/backends/local-backend.d.ts +6 -0
- package/lib/backends/local-backend.js +9 -5
- package/lib/backends/oss-backend.d.ts +6 -0
- package/lib/backends/oss-backend.js +9 -5
- package/lib/backends/pg-backend.d.ts +6 -0
- package/lib/backends/pg-backend.js +9 -5
- package/lib/backends/remote-backend.d.ts +12 -0
- package/lib/backends/remote-backend.js +17 -9
- package/lib/backends/s3-backend.d.ts +6 -0
- package/lib/backends/s3-backend.js +9 -5
- package/lib/backends/swift-backend.js +2 -2
- package/lib/complex-computed-list.d.ts +85 -0
- package/lib/complex-computed-list.js +112 -54
- package/lib/functions/helpers.d.ts +72 -0
- package/lib/functions/helpers.js +73 -14
- package/lib/functions/provider-function.js +1 -1
- package/lib/functions/terraform-functions.generated.d.ts +3 -0
- package/lib/functions/terraform-functions.generated.js +5 -3
- package/lib/hcl/quoted-string-key.d.ts +25 -0
- package/lib/hcl/quoted-string-key.js +42 -0
- package/lib/hcl/render.js +41 -7
- package/lib/ignore-strategy.js +1 -1
- package/lib/importable-resource.js +1 -1
- package/lib/manifest.d.ts +4 -0
- package/lib/manifest.js +6 -3
- package/lib/private/unique.js +11 -3
- package/lib/resource.js +1 -1
- package/lib/runtime.d.ts +6 -0
- package/lib/runtime.js +12 -3
- package/lib/synthesize/required-version.d.ts +32 -0
- package/lib/synthesize/required-version.js +205 -0
- package/lib/synthesize/synthesizer.d.ts +13 -0
- package/lib/synthesize/synthesizer.js +42 -8
- package/lib/terraform-asset.d.ts +4 -0
- package/lib/terraform-asset.js +6 -3
- package/lib/terraform-backend.d.ts +3 -0
- package/lib/terraform-backend.js +5 -3
- package/lib/terraform-conditions.js +1 -2
- package/lib/terraform-count.js +1 -1
- package/lib/terraform-data-resource.js +1 -1
- package/lib/terraform-data-source.d.ts +4 -0
- package/lib/terraform-data-source.js +8 -6
- package/lib/terraform-dependable.js +1 -1
- package/lib/terraform-dynamic-block.d.ts +4 -0
- package/lib/terraform-dynamic-block.js +5 -2
- package/lib/terraform-element.d.ts +4 -0
- package/lib/terraform-element.js +6 -3
- package/lib/terraform-ephemeral-resource.d.ts +4 -0
- package/lib/terraform-ephemeral-resource.js +8 -6
- package/lib/terraform-functions.d.ts +4 -0
- package/lib/terraform-functions.js +10 -5
- package/lib/terraform-hcl-module.d.ts +4 -0
- package/lib/terraform-hcl-module.js +6 -3
- package/lib/terraform-iterator.d.ts +19 -0
- package/lib/terraform-iterator.js +25 -11
- package/lib/terraform-local.d.ts +4 -0
- package/lib/terraform-local.js +6 -3
- package/lib/terraform-module.js +1 -1
- package/lib/terraform-operators.js +1 -1
- package/lib/terraform-output.d.ts +5 -0
- package/lib/terraform-output.js +23 -3
- package/lib/terraform-provider.d.ts +4 -0
- package/lib/terraform-provider.js +6 -3
- package/lib/terraform-provisioner.js +1 -1
- package/lib/terraform-remote-state.d.ts +3 -0
- package/lib/terraform-remote-state.js +5 -3
- package/lib/terraform-resource-targets.js +1 -1
- package/lib/terraform-resource.d.ts +5 -1
- package/lib/terraform-resource.js +16 -9
- package/lib/terraform-stack.d.ts +4 -0
- package/lib/terraform-stack.js +28 -9
- package/lib/terraform-variable.d.ts +7 -0
- package/lib/terraform-variable.js +16 -7
- package/lib/testing/adapters/jest.d.ts +3 -0
- package/lib/testing/adapters/jest.js +10 -1
- package/lib/testing/index.js +14 -4
- package/lib/testing/matchers.js +61 -19
- package/lib/tfExpression.d.ts +50 -0
- package/lib/tfExpression.js +114 -33
- package/lib/tokens/lazy.d.ts +4 -0
- package/lib/tokens/lazy.js +21 -8
- package/lib/tokens/private/dependency.js +2 -6
- package/lib/tokens/private/resolve.js +3 -3
- package/lib/tokens/private/stack-trace.d.ts +1 -1
- package/lib/tokens/private/stack-trace.js +1 -2
- package/lib/tokens/resolvable.js +2 -2
- package/lib/tokens/string-fragments.js +4 -4
- package/lib/tokens/token.js +2 -2
- package/lib/upgrade-id-aspect.js +1 -1
- package/lib/util.d.ts +0 -1
- package/lib/util.js +4 -4
- package/lib/validations/target-versions.d.ts +12 -0
- package/lib/validations/target-versions.js +40 -1
- package/package.json +112 -109
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { IConstruct } from "constructs";
|
|
2
|
+
/**
|
|
3
|
+
* Checks whether `required_version` should be written from `targetVersions` for the given scope: `targetVersions` is
|
|
4
|
+
* declared, rather than falling back to the defaults.
|
|
5
|
+
* @param scope - construct whose context is read, usually a stack
|
|
6
|
+
* @returns true if the settings files should be written
|
|
7
|
+
*/
|
|
8
|
+
export declare function writesRequiredVersion(scope: IConstruct): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Writes a settings file for each product in `targetVersions` into the stack's working directory, in the stack's
|
|
11
|
+
* output format:
|
|
12
|
+
*
|
|
13
|
+
* - A product that isn't targeted gets no file, except that an OpenTofu-only project also writes its OpenTofu
|
|
14
|
+
* constraint to the Terraform file, which OpenTofu 1.6 and 1.7 read in place of the OpenTofu file.
|
|
15
|
+
* - A product whose range allows every version gets a file without `required_version`, so that OpenTofu doesn't
|
|
16
|
+
* fall back to the Terraform constraint.
|
|
17
|
+
* - A range with alternatives (`||`) can't be written as a constraint. It adds a warning, and the Terraform file is
|
|
18
|
+
* skipped, or the OpenTofu file is written without `required_version`.
|
|
19
|
+
* - If targeted OpenTofu releases before 1.8 would be rejected by the Terraform constraint, it adds a warning and
|
|
20
|
+
* skips the Terraform file.
|
|
21
|
+
* @param scope - construct whose `targetVersions` context is read and that receives warnings, usually a stack
|
|
22
|
+
* @param workingDirectory - absolute path of the stack's working directory
|
|
23
|
+
* @param hclOutput - whether to write `settings.tf` / `settings.tofu` instead of `settings.tf.json` /
|
|
24
|
+
* `settings.tofu.json`
|
|
25
|
+
*/
|
|
26
|
+
export declare function writeRequiredVersionFiles(scope: IConstruct, workingDirectory: string, hclOutput: boolean): void;
|
|
27
|
+
/**
|
|
28
|
+
* Removes the settings files, in either format, written by a previous synth, so they don't outlive a change to
|
|
29
|
+
* `targetVersions` or the output format.
|
|
30
|
+
* @param workingDirectory - absolute path of the stack's working directory
|
|
31
|
+
*/
|
|
32
|
+
export declare function removeRequiredVersionFiles(workingDirectory: string): void;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.writesRequiredVersion = writesRequiredVersion;
|
|
37
|
+
exports.writeRequiredVersionFiles = writeRequiredVersionFiles;
|
|
38
|
+
exports.removeRequiredVersionFiles = removeRequiredVersionFiles;
|
|
39
|
+
// Copyright (c) HashiCorp, Inc
|
|
40
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const semver = __importStar(require("semver"));
|
|
44
|
+
const annotations_1 = require("../annotations");
|
|
45
|
+
const target_versions_1 = require("../validations/target-versions");
|
|
46
|
+
/**
|
|
47
|
+
* Names of the files, in the stack's working directory, that hold each product's `required_version`, in the stack's
|
|
48
|
+
* output format. Terraform reads every `.tf` / `.tf.json` file in the directory and never reads `.tofu` /
|
|
49
|
+
* `.tofu.json` files. OpenTofu 1.8+ loads the OpenTofu file in place of the Terraform file of the same format, and
|
|
50
|
+
* OpenTofu 1.12+ only reads `required_version` from `.tofu` / `.tofu.json` files.
|
|
51
|
+
*/
|
|
52
|
+
const SETTINGS_FILES = {
|
|
53
|
+
json: { terraform: "settings.tf.json", opentofu: "settings.tofu.json" },
|
|
54
|
+
hcl: { terraform: "settings.tf", opentofu: "settings.tofu" },
|
|
55
|
+
};
|
|
56
|
+
// The first OpenTofu release
|
|
57
|
+
const OPENTOFU_FIRST_RELEASE = "1.6.0";
|
|
58
|
+
// The first OpenTofu release that loads the OpenTofu settings file in place of the Terraform one
|
|
59
|
+
const OPENTOFU_TOFU_FILES_SINCE = "1.8.0";
|
|
60
|
+
/**
|
|
61
|
+
* Checks whether `required_version` should be written from `targetVersions` for the given scope: `targetVersions` is
|
|
62
|
+
* declared, rather than falling back to the defaults.
|
|
63
|
+
* @param scope - construct whose context is read, usually a stack
|
|
64
|
+
* @returns true if the settings files should be written
|
|
65
|
+
*/
|
|
66
|
+
function writesRequiredVersion(scope) {
|
|
67
|
+
return scope.node.tryGetContext(target_versions_1.TARGET_VERSIONS_CONTEXT_KEY) !== undefined;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Converts one comparator set of a normalised npm range into a Terraform version constraint, e.g. the set for `^1.8.0`
|
|
71
|
+
* into `>= 1.8.0, < 2.0.0`. Terraform's syntax can express any single comparator set, but not alternatives (`||`).
|
|
72
|
+
* @param comparators - the comparators of a range without alternatives
|
|
73
|
+
* @returns the Terraform version constraint, or `undefined` when the comparators allow every version
|
|
74
|
+
*/
|
|
75
|
+
function toTerraformConstraint(comparators) {
|
|
76
|
+
const constraints = comparators
|
|
77
|
+
.filter((comparator) => comparator.value !== "") // "*" normalises to a comparator that matches any version
|
|
78
|
+
.map((comparator) => `${comparator.operator || "="} ${constraintVersion(comparator)}`);
|
|
79
|
+
return constraints.length > 0 ? constraints.join(", ") : undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Renders a comparator's version for a Terraform constraint. npm writes upper bounds as `<2.0.0-0` so that
|
|
83
|
+
* prereleases of 2.0.0 are excluded; Terraform's `< 2.0.0` already excludes them, since Terraform only matches a
|
|
84
|
+
* prerelease when the constraint names one.
|
|
85
|
+
* @param comparator - one comparator of a normalised npm range
|
|
86
|
+
* @returns the version to write after the operator
|
|
87
|
+
*/
|
|
88
|
+
function constraintVersion(comparator) {
|
|
89
|
+
const version = comparator.semver;
|
|
90
|
+
const isUpperBoundSentinel = comparator.operator === "<" &&
|
|
91
|
+
version.prerelease.length === 1 &&
|
|
92
|
+
version.prerelease[0] === 0;
|
|
93
|
+
return isUpperBoundSentinel
|
|
94
|
+
? `${version.major}.${version.minor}.${version.patch}`
|
|
95
|
+
: version.version;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Narrows an OpenTofu range to the released versions that read the Terraform settings file: 1.6 and 1.7.
|
|
99
|
+
* @param opentofu - the project's OpenTofu range
|
|
100
|
+
* @returns an npm range of the targeted OpenTofu releases that don't load the OpenTofu settings file
|
|
101
|
+
*/
|
|
102
|
+
function opentofuReadingTerraformFile(opentofu) {
|
|
103
|
+
return new semver.Range(opentofu).set
|
|
104
|
+
.map((comparators) => [
|
|
105
|
+
...comparators.map((comparator) => comparator.value),
|
|
106
|
+
`>=${OPENTOFU_FIRST_RELEASE}`,
|
|
107
|
+
`<${OPENTOFU_TOFU_FILES_SINCE}`,
|
|
108
|
+
].join(" "))
|
|
109
|
+
.join(" || ");
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Writes a settings file for each product in `targetVersions` into the stack's working directory, in the stack's
|
|
113
|
+
* output format:
|
|
114
|
+
*
|
|
115
|
+
* - A product that isn't targeted gets no file, except that an OpenTofu-only project also writes its OpenTofu
|
|
116
|
+
* constraint to the Terraform file, which OpenTofu 1.6 and 1.7 read in place of the OpenTofu file.
|
|
117
|
+
* - A product whose range allows every version gets a file without `required_version`, so that OpenTofu doesn't
|
|
118
|
+
* fall back to the Terraform constraint.
|
|
119
|
+
* - A range with alternatives (`||`) can't be written as a constraint. It adds a warning, and the Terraform file is
|
|
120
|
+
* skipped, or the OpenTofu file is written without `required_version`.
|
|
121
|
+
* - If targeted OpenTofu releases before 1.8 would be rejected by the Terraform constraint, it adds a warning and
|
|
122
|
+
* skips the Terraform file.
|
|
123
|
+
* @param scope - construct whose `targetVersions` context is read and that receives warnings, usually a stack
|
|
124
|
+
* @param workingDirectory - absolute path of the stack's working directory
|
|
125
|
+
* @param hclOutput - whether to write `settings.tf` / `settings.tofu` instead of `settings.tf.json` /
|
|
126
|
+
* `settings.tofu.json`
|
|
127
|
+
*/
|
|
128
|
+
function writeRequiredVersionFiles(scope, workingDirectory, hclOutput) {
|
|
129
|
+
const { targets } = (0, target_versions_1.resolveTargetVersions)(scope);
|
|
130
|
+
if (!targets) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const files = SETTINGS_FILES[hclOutput ? "hcl" : "json"];
|
|
134
|
+
const { terraform, opentofu } = targets;
|
|
135
|
+
const warnAboutAlternatives = (product, range, outcome) => annotations_1.Annotations.of(scope).addWarning(`targetVersions.${product} "${range}" uses "||", which can't be written as a required_version constraint, so ${files[product]} ${outcome}.`);
|
|
136
|
+
// the constraint to write for each file; a file with an undefined constraint is written without required_version
|
|
137
|
+
const constraints = new Map();
|
|
138
|
+
if (opentofu !== undefined) {
|
|
139
|
+
const comparatorSets = new semver.Range(opentofu).set;
|
|
140
|
+
if (comparatorSets.length > 1) {
|
|
141
|
+
warnAboutAlternatives("opentofu", opentofu, "is written without one");
|
|
142
|
+
constraints.set("opentofu", undefined);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
constraints.set("opentofu", toTerraformConstraint(comparatorSets[0]));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (terraform !== undefined) {
|
|
149
|
+
const comparatorSets = new semver.Range(terraform).set;
|
|
150
|
+
if (comparatorSets.length > 1) {
|
|
151
|
+
warnAboutAlternatives("terraform", terraform, "isn't written");
|
|
152
|
+
}
|
|
153
|
+
else if (opentofu !== undefined &&
|
|
154
|
+
!semver.subset(opentofuReadingTerraformFile(opentofu), terraform)) {
|
|
155
|
+
annotations_1.Annotations.of(scope).addWarning(`targetVersions.opentofu "${opentofu}" allows OpenTofu releases before ${OPENTOFU_TOFU_FILES_SINCE}, which read ${files.terraform} instead of ${files.opentofu}, and targetVersions.terraform "${terraform}" would reject some of them, so ${files.terraform} isn't written. Set targetVersions.opentofu to ">=${OPENTOFU_TOFU_FILES_SINCE}" or narrower to constrain Terraform as well.`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
constraints.set("terraform", toTerraformConstraint(comparatorSets[0]));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else if (constraints.get("opentofu") !== undefined) {
|
|
162
|
+
// Terraform isn't targeted, so the Terraform file can carry the OpenTofu constraint for OpenTofu 1.6 and 1.7
|
|
163
|
+
constraints.set("terraform", constraints.get("opentofu"));
|
|
164
|
+
}
|
|
165
|
+
for (const [product, requiredVersion] of constraints) {
|
|
166
|
+
fs.writeFileSync(path.join(workingDirectory, files[product]), hclOutput
|
|
167
|
+
? renderHclSettings(requiredVersion)
|
|
168
|
+
: renderJsonSettings(requiredVersion));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Renders a settings file as Terraform JSON configuration.
|
|
173
|
+
* @param requiredVersion - the Terraform version constraint, or `undefined` for an empty configuration
|
|
174
|
+
* @returns the file's content
|
|
175
|
+
*/
|
|
176
|
+
function renderJsonSettings(requiredVersion) {
|
|
177
|
+
const content = requiredVersion === undefined
|
|
178
|
+
? {}
|
|
179
|
+
: { terraform: { required_version: requiredVersion } };
|
|
180
|
+
return JSON.stringify(content, null, 2);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Renders a settings file as HCL.
|
|
184
|
+
* @param requiredVersion - the Terraform version constraint, or `undefined` for an empty configuration
|
|
185
|
+
* @returns the file's content
|
|
186
|
+
*/
|
|
187
|
+
function renderHclSettings(requiredVersion) {
|
|
188
|
+
// a constraint holds only operators, versions, commas and spaces, so a JSON string literal is a valid HCL one
|
|
189
|
+
return requiredVersion === undefined
|
|
190
|
+
? ""
|
|
191
|
+
: `terraform {\n required_version = ${JSON.stringify(requiredVersion)}\n}\n`;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Removes the settings files, in either format, written by a previous synth, so they don't outlive a change to
|
|
195
|
+
* `targetVersions` or the output format.
|
|
196
|
+
* @param workingDirectory - absolute path of the stack's working directory
|
|
197
|
+
*/
|
|
198
|
+
function removeRequiredVersionFiles(workingDirectory) {
|
|
199
|
+
for (const files of Object.values(SETTINGS_FILES)) {
|
|
200
|
+
for (const file of Object.values(files)) {
|
|
201
|
+
fs.rmSync(path.join(workingDirectory, file), { force: true });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZWQtdmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW50aGVzaXplL3JlcXVpcmVkLXZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0Esc0RBRUM7QUF3RUQsOERBNkRDO0FBZ0NELGdFQU1DO0FBbk5ELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QiwrQ0FBaUM7QUFFakMsZ0RBQTZDO0FBQzdDLG9FQUl3QztBQUl4Qzs7Ozs7R0FLRztBQUNILE1BQU0sY0FBYyxHQUFvRDtJQUN0RSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFO0lBQ3ZFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRTtDQUM3RCxDQUFDO0FBRUYsNkJBQTZCO0FBQzdCLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBRXZDLGlHQUFpRztBQUNqRyxNQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FBQztBQUUxQzs7Ozs7R0FLRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLEtBQWlCO0lBQ3JELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsNkNBQTJCLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDN0UsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsV0FBeUM7SUFFekMsTUFBTSxXQUFXLEdBQUcsV0FBVztTQUM1QixNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsMERBQTBEO1NBQzFHLEdBQUcsQ0FDRixDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ2IsR0FBRyxVQUFVLENBQUMsUUFBUSxJ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LENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tIFwiLi4vYW5ub3RhdGlvbnNcIjtcbmltcG9ydCB7XG4gIHJlc29sdmVUYXJnZXRWZXJzaW9ucyxcbiAgVEFSR0VUX1ZFUlNJT05TX0NPTlRFWFRfS0VZLFxuICBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyxcbn0gZnJvbSBcIi4uL3ZhbGlkYXRpb25zL3RhcmdldC12ZXJzaW9uc1wiO1xuXG50eXBlIFByb2R1Y3QgPSBrZXlvZiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucztcblxuLyoqXG4gKiBOYW1lcyBvZiB0aGUgZmlsZXMsIGluIHRoZSBzdGFjaydzIHdvcmtpbmcgZGlyZWN0b3J5LCB0aGF0IGhvbGQgZWFjaCBwcm9kdWN0J3MgYHJlcXVpcmVkX3ZlcnNpb25gLCBpbiB0aGUgc3RhY2snc1xuICogb3V0cHV0IGZvcm1hdC4gVGVycmFmb3JtIHJlYWRzIGV2ZXJ5IGAudGZgIC8gYC50Zi5qc29uYCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgYW5kIG5ldmVyIHJlYWRzIGAudG9mdWAgL1xuICogYC50b2Z1Lmpzb25gIGZpbGVzLiBPcGVuVG9mdSAxLjgrIGxvYWRzIHRoZSBPcGVuVG9mdSBmaWxlIGluIHBsYWNlIG9mIHRoZSBUZXJyYWZvcm0gZmlsZSBvZiB0aGUgc2FtZSBmb3JtYXQsIGFuZFxuICogT3BlblRvZnUgMS4xMisgb25seSByZWFkcyBgcmVxdWlyZWRfdmVyc2lvbmAgZnJvbSBgLnRvZnVgIC8gYC50b2Z1Lmpzb25gIGZpbGVzLlxuICovXG5jb25zdCBTRVRUSU5HU19GSUxFUzogUmVjb3JkPFwianNvblwiIHwgXCJoY2xcIiwgUmVjb3JkPFByb2R1Y3QsIHN0cmluZz4+ID0ge1xuICBqc29uOiB7IHRlcnJhZm9ybTogXCJzZXR0aW5ncy50Zi5qc29uXCIsIG9wZW50b2Z1OiBcInNldHRpbmdzLnRvZnUuanNvblwiIH0sXG4gIGhjbDogeyB0ZXJyYWZvcm06IFwic2V0dGluZ3MudGZcIiwgb3BlbnRvZnU6IFwic2V0dGluZ3MudG9mdVwiIH0sXG59O1xuXG4vLyBUaGUgZmlyc3QgT3BlblRvZnUgcmVsZWFzZVxuY29uc3QgT1BFTlRPRlVfRklSU1RfUkVMRUFTRSA9IFwiMS42LjBcIjtcblxuLy8gVGhlIGZpcnN0IE9wZW5Ub2Z1IHJlbGVhc2UgdGhhdCBsb2FkcyB0aGUgT3BlblRvZnUgc2V0dGluZ3MgZmlsZSBpbiBwbGFjZSBvZiB0aGUgVGVycmFmb3JtIG9uZVxuY29uc3QgT1BFTlRPRlVfVE9GVV9GSUxFU19TSU5DRSA9IFwiMS44LjBcIjtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBgcmVxdWlyZWRfdmVyc2lvbmAgc2hvdWxkIGJlIHdyaXR0ZW4gZnJvbSBgdGFyZ2V0VmVyc2lvbnNgIGZvciB0aGUgZ2l2ZW4gc2NvcGU6IGB0YXJnZXRWZXJzaW9uc2AgaXNcbiAqIGRlY2xhcmVkLCByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHRzLlxuICogQHBhcmFtIHNjb3BlIC0gY29uc3RydWN0IHdob3NlIGNvbnRleHQgaXMgcmVhZCwgdXN1YWxseSBhIHN0YWNrXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzZXR0aW5ncyBmaWxlcyBzaG91bGQgYmUgd3JpdHRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVzUmVxdWlyZWRWZXJzaW9uKHNjb3BlOiBJQ29uc3RydWN0KTogYm9vbGVhbiB7XG4gIHJldHVybiBzY29wZS5ub2RlLnRyeUdldENvbnRleHQoVEFSR0VUX1ZFUlNJT05TX0NPTlRFWFRfS0VZKSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjb21wYXJhdG9yIHNldCBvZiBhIG5vcm1hbGlzZWQgbnBtIHJhbmdlIGludG8gYSBUZXJyYWZvcm0gdmVyc2lvbiBjb25zdHJhaW50LCBlLmcuIHRoZSBzZXQgZm9yIGBeMS44LjBgXG4gKiBpbnRvIGA+PSAxLjguMCwgPCAyLjAuMGAuIFRlcnJhZm9ybSdzIHN5bnRheCBjYW4gZXhwcmVzcyBhbnkgc2luZ2xlIGNvbXBhcmF0b3Igc2V0LCBidXQgbm90IGFsdGVybmF0aXZlcyAoYHx8YCkuXG4gKiBAcGFyYW0gY29tcGFyYXRvcnMgLSB0aGUgY29tcGFyYXRvcnMgb2YgYSByYW5nZSB3aXRob3V0IGFsdGVybmF0aXZlc1xuICogQHJldHVybnMgdGhlIFRlcnJhZm9ybSB2ZXJzaW9uIGNvbnN0cmFpbnQsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIGNvbXBhcmF0b3JzIGFsbG93IGV2ZXJ5IHZlcnNpb25cbiAqL1xuZnVuY3Rpb24gdG9UZXJyYWZvcm1Db25zdHJhaW50KFxuICBjb21wYXJhdG9yczogcmVhZG9ubHkgc2VtdmVyLkNvbXBhcmF0b3JbXSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzID0gY29tcGFyYXRvcnNcbiAgICAuZmlsdGVyKChjb21wYXJhdG9yKSA9PiBjb21wYXJhdG9yLnZhbHVlICE9PSBcIlwiKSAvLyBcIipcIiBub3JtYWxpc2VzIHRvIGEgY29tcGFyYXRvciB0aGF0IG1hdGNoZXMgYW55IHZlcnNpb25cbiAgICAubWFwKFxuICAgICAgKGNvbXBhcmF0b3IpID0+XG4gICAgICAgIGAke2NvbXBhcmF0b3Iub3BlcmF0b3IgfHwgXCI9XCJ9ICR7Y29uc3RyYWludFZlcnNpb24oY29tcGFyYXRvcil9YCxcbiAgICApO1xuICByZXR1cm4gY29uc3RyYWludHMubGVuZ3RoID4gMCA/IGNvbnN0cmFpbnRzLmpvaW4oXCIsIFwiKSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgY29tcGFyYXRvcidzIHZlcnNpb24gZm9yIGEgVGVycmFmb3JtIGNvbnN0cmFpbnQuIG5wbSB3cml0ZXMgdXBwZXIgYm91bmRzIGFzIGA8Mi4wLjAtMGAgc28gdGhhdFxuICogcHJlcmVsZWFzZXMgb2YgMi4wLjAgYXJlIGV4Y2x1ZGVkOyBUZXJyYWZvcm0ncyBgPCAyLjAuMGAgYWxyZWFkeSBleGNsdWRlcyB0aGVtLCBzaW5jZSBUZXJyYWZvcm0gb25seSBtYXRjaGVzIGFcbiAqIHByZXJlbGVhc2Ugd2hlbiB0aGUgY29uc3RyYWludCBuYW1lcyBvbmUuXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIG9uZSBjb21wYXJhdG9yIG9mIGEgbm9ybWFsaXNlZCBucG0gcmFuZ2VcbiAqIEByZXR1cm5zIHRoZSB2ZXJzaW9uIHRvIHdyaXRlIGFmdGVyIHRoZSBvcGVyYXRvclxuICovXG5mdW5jdGlvbiBjb25zdHJhaW50VmVyc2lvbihjb21wYXJhdG9yOiBzZW12ZXIuQ29tcGFyYXRvcik6IHN0cmluZyB7XG4gIGNvbnN0IHZlcnNpb24gPSBjb21wYXJhdG9yLnNlbXZlcjtcbiAgY29uc3QgaXNVcHBlckJvdW5kU2VudGluZWwgPVxuICAgIGNvbXBhcmF0b3Iub3BlcmF0b3IgPT09IFwiPFwiICYmXG4gICAgdmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMSAmJlxuICAgIHZlcnNpb24ucHJlcmVsZWFzZVswXSA9PT0gMDtcbiAgcmV0dXJuIGlzVXBwZXJCb3VuZFNlbnRpbmVsXG4gICAgPyBgJHt2ZXJzaW9uLm1ham9yfS4ke3ZlcnNpb24ubWlub3J9LiR7dmVyc2lvbi5wYXRjaH1gXG4gICAgOiB2ZXJzaW9uLnZlcnNpb247XG59XG5cbi8qKlxuICogTmFycm93cyBhbiBPcGVuVG9mdSByYW5nZSB0byB0aGUgcmVsZWFzZWQgdmVyc2lvbnMgdGhhdCByZWFkIHRoZSBUZXJyYWZvcm0gc2V0dGluZ3MgZmlsZTogMS42IGFuZCAxLjcuXG4gKiBAcGFyYW0gb3BlbnRvZnUgLSB0aGUgcHJvamVjdCdzIE9wZW5Ub2Z1IHJhbmdlXG4gKiBAcmV0dXJucyBhbiBucG0gcmFuZ2Ugb2YgdGhlIHRhcmdldGVkIE9wZW5Ub2Z1IHJlbGVhc2VzIHRoYXQgZG9uJ3QgbG9hZCB0aGUgT3BlblRvZnUgc2V0dGluZ3MgZmlsZVxuICovXG5mdW5jdGlvbiBvcGVudG9mdVJlYWRpbmdUZXJyYWZvcm1GaWxlKG9wZW50b2Z1OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmV3IHNlbXZlci5SYW5nZShvcGVudG9mdSkuc2V0XG4gICAgLm1hcCgoY29tcGFyYXRvcnMpID0+XG4gICAgICBbXG4gICAgICAgIC4uLmNvbXBhcmF0b3JzLm1hcCgoY29tcGFyYXRvcikgPT4gY29tcGFyYXRvci52YWx1ZSksXG4gICAgICAgIGA+PSR7T1BFTlRPRlVfRklSU1RfUkVMRUFTRX1gLFxuICAgICAgICBgPCR7T1BFTlRPRlVfVE9GVV9GSUxFU19TSU5DRX1gLFxuICAgICAgXS5qb2luKFwiIFwiKSxcbiAgICApXG4gICAgLmpvaW4oXCIgfHwgXCIpO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhIHNldHRpbmdzIGZpbGUgZm9yIGVhY2ggcHJvZHVjdCBpbiBgdGFyZ2V0VmVyc2lvbnNgIGludG8gdGhlIHN0YWNrJ3Mgd29ya2luZyBkaXJlY3RvcnksIGluIHRoZSBzdGFjaydzXG4gKiBvdXRwdXQgZm9ybWF0OlxuICpcbiAqIC0gQSBwcm9kdWN0IHRoYXQgaXNuJ3QgdGFyZ2V0ZWQgZ2V0cyBubyBmaWxlLCBleGNlcHQgdGhhdCBhbiBPcGVuVG9mdS1vbmx5IHByb2plY3QgYWxzbyB3cml0ZXMgaXRzIE9wZW5Ub2Z1XG4gKiAgIGNvbnN0cmFpbnQgdG8gdGhlIFRlcnJhZm9ybSBmaWxlLCB3aGljaCBPcGVuVG9mdSAxLjYgYW5kIDEuNyByZWFkIGluIHBsYWNlIG9mIHRoZSBPcGVuVG9mdSBmaWxlLlxuICogLSBBIHByb2R1Y3Qgd2hvc2UgcmFuZ2UgYWxsb3dzIGV2ZXJ5IHZlcnNpb24gZ2V0cyBhIGZpbGUgd2l0aG91dCBgcmVxdWlyZWRfdmVyc2lvbmAsIHNvIHRoYXQgT3BlblRvZnUgZG9lc24ndFxuICogICBmYWxsIGJhY2sgdG8gdGhlIFRlcnJhZm9ybSBjb25zdHJhaW50LlxuICogLSBBIHJhbmdlIHdpdGggYWx0ZXJuYXRpdmVzIChgfHxgKSBjYW4ndCBiZSB3cml0dGVuIGFzIGEgY29uc3RyYWludC4gSXQgYWRkcyBhIHdhcm5pbmcsIGFuZCB0aGUgVGVycmFmb3JtIGZpbGUgaXNcbiAqICAgc2tpcHBlZCwgb3IgdGhlIE9wZW5Ub2Z1IGZpbGUgaXMgd3JpdHRlbiB3aXRob3V0IGByZXF1aXJlZF92ZXJzaW9uYC5cbiAqIC0gSWYgdGFyZ2V0ZWQgT3BlblRvZnUgcmVsZWFzZXMgYmVmb3JlIDEuOCB3b3VsZCBiZSByZWplY3RlZCBieSB0aGUgVGVycmFmb3JtIGNvbnN0cmFpbnQsIGl0IGFkZHMgYSB3YXJuaW5nIGFuZFxuICogICBza2lwcyB0aGUgVGVycmFmb3JtIGZpbGUuXG4gKiBAcGFyYW0gc2NvcGUgLSBjb25zdHJ1Y3Qgd2hvc2UgYHRhcmdldFZlcnNpb25zYCBjb250ZXh0IGlzIHJlYWQgYW5kIHRoYXQgcmVjZWl2ZXMgd2FybmluZ3MsIHVzdWFsbHkgYSBzdGFja1xuICogQHBhcmFtIHdvcmtpbmdEaXJlY3RvcnkgLSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBzdGFjaydzIHdvcmtpbmcgZGlyZWN0b3J5XG4gKiBAcGFyYW0gaGNsT3V0cHV0IC0gd2hldGhlciB0byB3cml0ZSBgc2V0dGluZ3MudGZgIC8gYHNldHRpbmdzLnRvZnVgIGluc3RlYWQgb2YgYHNldHRpbmdzLnRmLmpzb25gIC9cbiAqIGBzZXR0aW5ncy50b2Z1Lmpzb25gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlcXVpcmVkVmVyc2lvbkZpbGVzKFxuICBzY29wZTogSUNvbnN0cnVjdCxcbiAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICBoY2xPdXRwdXQ6IGJvb2xlYW4sXG4pOiB2b2lkIHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSByZXNvbHZlVGFyZ2V0VmVyc2lvbnMoc2NvcGUpO1xuICBpZiAoIXRhcmdldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmaWxlcyA9IFNFVFRJTkdTX0ZJTEVTW2hjbE91dHB1dCA/IFwiaGNsXCIgOiBcImpzb25cIl07XG4gIGNvbnN0IHsgdGVycmFmb3JtLCBvcGVudG9mdSB9ID0gdGFyZ2V0cztcbiAgY29uc3Qgd2FybkFib3V0QWx0ZXJuYXRpdmVzID0gKFxuICAgIHByb2R1Y3Q6IFByb2R1Y3QsXG4gICAgcmFuZ2U6IHN0cmluZyxcbiAgICBvdXRjb21lOiBzdHJpbmcsXG4gICkgPT5cbiAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZyhcbiAgICAgIGB0YXJnZXRWZXJzaW9ucy4ke3Byb2R1Y3R9IFwiJHtyYW5nZX1cIiB1c2VzIFwifHxcIiwgd2hpY2ggY2FuJ3QgYmUgd3JpdHRlbiBhcyBhIHJlcXVpcmVkX3ZlcnNpb24gY29uc3RyYWludCwgc28gJHtmaWxlc1twcm9kdWN0XX0gJHtvdXRjb21lfS5gLFxuICAgICk7XG5cbiAgLy8gdGhlIGNvbnN0cmFpbnQgdG8gd3JpdGUgZm9yIGVhY2ggZmlsZTsgYSBmaWxlIHdpdGggYW4gdW5kZWZpbmVkIGNvbnN0cmFpbnQgaXMgd3JpdHRlbiB3aXRob3V0IHJlcXVpcmVkX3ZlcnNpb25cbiAgY29uc3QgY29uc3RyYWludHMgPSBuZXcgTWFwPFByb2R1Y3QsIHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICBpZiAob3BlbnRvZnUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3JTZXRzID0gbmV3IHNlbXZlci5SYW5nZShvcGVudG9mdSkuc2V0O1xuICAgIGlmIChjb21wYXJhdG9yU2V0cy5sZW5ndGggPiAxKSB7XG4gICAgICB3YXJuQWJvdXRBbHRlcm5hdGl2ZXMoXCJvcGVudG9mdVwiLCBvcGVudG9mdSwgXCJpcyB3cml0dGVuIHdpdGhvdXQgb25lXCIpO1xuICAgICAgY29uc3RyYWludHMuc2V0KFwib3BlbnRvZnVcIiwgdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3RyYWludHMuc2V0KFwib3BlbnRvZnVcIiwgdG9UZXJyYWZvcm1Db25zdHJhaW50KGNvbXBhcmF0b3JTZXRzWzBdKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRlcnJhZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tcGFyYXRvclNldHMgPSBuZXcgc2VtdmVyLlJhbmdlKHRlcnJhZm9ybSkuc2V0O1xuICAgIGlmIChjb21wYXJhdG9yU2V0cy5sZW5ndGggPiAxKSB7XG4gICAgICB3YXJuQWJvdXRBbHRlcm5hdGl2ZXMoXCJ0ZXJyYWZvcm1cIiwgdGVycmFmb3JtLCBcImlzbid0IHdyaXR0ZW5cIik7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG9wZW50b2Z1ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFzZW12ZXIuc3Vic2V0KG9wZW50b2Z1UmVhZGluZ1RlcnJhZm9ybUZpbGUob3BlbnRvZnUpLCB0ZXJyYWZvcm0pXG4gICAgKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZyhcbiAgICAgICAgYHRhcmdldFZlcnNpb25zLm9wZW50b2Z1IFwiJHtvcGVudG9mdX1cIiBhbGxvd3MgT3BlblRvZnUgcmVsZWFzZXMgYmVmb3JlICR7T1BFTlRPRlVfVE9GVV9GSUxFU19TSU5DRX0sIHdoaWNoIHJlYWQgJHtmaWxlcy50ZXJyYWZvcm19IGluc3RlYWQgb2YgJHtmaWxlcy5vcGVudG9mdX0sIGFuZCB0YXJnZXRWZXJzaW9ucy50ZXJyYWZvcm0gXCIke3RlcnJhZm9ybX1cIiB3b3VsZCByZWplY3Qgc29tZSBvZiB0aGVtLCBzbyAke2ZpbGVzLnRlcnJhZm9ybX0gaXNuJ3Qgd3JpdHRlbi4gU2V0IHRhcmdldFZlcnNpb25zLm9wZW50b2Z1IHRvIFwiPj0ke09QRU5UT0ZVX1RPRlVfRklMRVNfU0lOQ0V9XCIgb3IgbmFycm93ZXIgdG8gY29uc3RyYWluIFRlcnJhZm9ybSBhcyB3ZWxsLmAsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdHJhaW50cy5zZXQoXCJ0ZXJyYWZvcm1cIiwgdG9UZXJyYWZvcm1Db25zdHJhaW50KGNvbXBhcmF0b3JTZXRzWzBdKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbnN0cmFpbnRzLmdldChcIm9wZW50b2Z1XCIpICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBUZXJyYWZvcm0gaXNuJ3QgdGFyZ2V0ZWQsIHNvIHRoZSBUZXJyYWZvcm0gZmlsZSBjYW4gY2FycnkgdGhlIE9wZW5Ub2Z1IGNvbnN0cmFpbnQgZm9yIE9wZW5Ub2Z1IDEuNiBhbmQgMS43XG4gICAgY29uc3RyYWludHMuc2V0KFwidGVycmFmb3JtXCIsIGNvbnN0cmFpbnRzLmdldChcIm9wZW50b2Z1XCIpKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3Byb2R1Y3QsIHJlcXVpcmVkVmVyc2lvbl0gb2YgY29uc3RyYWludHMpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnksIGZpbGVzW3Byb2R1Y3RdKSxcbiAgICAgIGhjbE91dHB1dFxuICAgICAgICA/IHJlbmRlckhjbFNldHRpbmdzKHJlcXVpcmVkVmVyc2lvbilcbiAgICAgICAgOiByZW5kZXJKc29uU2V0dGluZ3MocmVxdWlyZWRWZXJzaW9uKSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHNldHRpbmdzIGZpbGUgYXMgVGVycmFmb3JtIEpTT04gY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSByZXF1aXJlZFZlcnNpb24gLSB0aGUgVGVycmFmb3JtIHZlcnNpb24gY29uc3RyYWludCwgb3IgYHVuZGVmaW5lZGAgZm9yIGFuIGVtcHR5IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIHRoZSBmaWxlJ3MgY29udGVudFxuICovXG5mdW5jdGlvbiByZW5kZXJKc29uU2V0dGluZ3MocmVxdWlyZWRWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCBjb250ZW50ID1cbiAgICByZXF1aXJlZFZlcnNpb24gPT09IHVuZGVmaW5lZFxuICAgICAgPyB7fVxuICAgICAgOiB7IHRlcnJhZm9ybTogeyByZXF1aXJlZF92ZXJzaW9uOiByZXF1aXJlZFZlcnNpb24gfSB9O1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY29udGVudCwgbnVsbCwgMik7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHNldHRpbmdzIGZpbGUgYXMgSENMLlxuICogQHBhcmFtIHJlcXVpcmVkVmVyc2lvbiAtIHRoZSBUZXJyYWZvcm0gdmVyc2lvbiBjb25zdHJhaW50LCBvciBgdW5kZWZpbmVkYCBmb3IgYW4gZW1wdHkgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgdGhlIGZpbGUncyBjb250ZW50XG4gKi9cbmZ1bmN0aW9uIHJlbmRlckhjbFNldHRpbmdzKHJlcXVpcmVkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgLy8gYSBjb25zdHJhaW50IGhvbGRzIG9ubHkgb3BlcmF0b3JzLCB2ZXJzaW9ucywgY29tbWFzIGFuZCBzcGFjZXMsIHNvIGEgSlNPTiBzdHJpbmcgbGl0ZXJhbCBpcyBhIHZhbGlkIEhDTCBvbmVcbiAgcmV0dXJuIHJlcXVpcmVkVmVyc2lvbiA9PT0gdW5kZWZpbmVkXG4gICAgPyBcIlwiXG4gICAgOiBgdGVycmFmb3JtIHtcXG4gIHJlcXVpcmVkX3ZlcnNpb24gPSAke0pTT04uc3RyaW5naWZ5KHJlcXVpcmVkVmVyc2lvbil9XFxufVxcbmA7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgc2V0dGluZ3MgZmlsZXMsIGluIGVpdGhlciBmb3JtYXQsIHdyaXR0ZW4gYnkgYSBwcmV2aW91cyBzeW50aCwgc28gdGhleSBkb24ndCBvdXRsaXZlIGEgY2hhbmdlIHRvXG4gKiBgdGFyZ2V0VmVyc2lvbnNgIG9yIHRoZSBvdXRwdXQgZm9ybWF0LlxuICogQHBhcmFtIHdvcmtpbmdEaXJlY3RvcnkgLSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBzdGFjaydzIHdvcmtpbmcgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVSZXF1aXJlZFZlcnNpb25GaWxlcyh3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBmaWxlcyBvZiBPYmplY3QudmFsdWVzKFNFVFRJTkdTX0ZJTEVTKSkge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBPYmplY3QudmFsdWVzKGZpbGVzKSkge1xuICAgICAgZnMucm1TeW5jKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LCBmaWxlKSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { TerraformStack } from "../terraform-stack";
|
|
2
2
|
import { IStackSynthesizer, ISynthesisSession } from "./types";
|
|
3
3
|
import { IConstruct } from "constructs";
|
|
4
|
+
/**
|
|
5
|
+
* Default stack synthesizer: invokes aspects, runs validations, collects annotations into the manifest and writes
|
|
6
|
+
* the stack's Terraform configuration (JSON or HCL) to its working directory.
|
|
7
|
+
*/
|
|
4
8
|
export declare class StackSynthesizer implements IStackSynthesizer {
|
|
5
9
|
protected stack: TerraformStack;
|
|
6
10
|
private continueOnErrorAnnotations;
|
|
@@ -10,6 +14,9 @@ export declare class StackSynthesizer implements IStackSynthesizer {
|
|
|
10
14
|
* @param continueOnErrorAnnotations if set to true, `synthesize()` will not throw an error
|
|
11
15
|
* if it encounters an error Annotation. However, it will still add all errors to the manifest
|
|
12
16
|
* file. The cdktn-cli uses this flag to print the errors itself.
|
|
17
|
+
* @param hclOutput if set to true, the stack is always written as HCL.
|
|
18
|
+
* Otherwise it is written as HCL when the manifest names the stack file
|
|
19
|
+
* `cdk.tf`, which follows `App`'s `hclOutput` and `SYNTH_HCL_OUTPUT`.
|
|
13
20
|
*/
|
|
14
21
|
constructor(stack: TerraformStack, continueOnErrorAnnotations?: boolean, hclOutput?: boolean);
|
|
15
22
|
synthesize(session: ISynthesisSession): void;
|
|
@@ -32,4 +39,10 @@ export interface ICustomSynthesis {
|
|
|
32
39
|
*/
|
|
33
40
|
onSynthesize(session: ISynthesisSession): void;
|
|
34
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Attaches custom synthesis logic to a construct; its `onSynthesize` is called when the containing stack is
|
|
44
|
+
* synthesized
|
|
45
|
+
* @param construct Construct to attach the custom synthesis to
|
|
46
|
+
* @param synthesis Custom synthesis to run for the construct
|
|
47
|
+
*/
|
|
35
48
|
export declare function addCustomSynthesis(construct: IConstruct, synthesis: ICustomSynthesis): void;
|
|
@@ -49,7 +49,11 @@ const constructs_1 = require("constructs");
|
|
|
49
49
|
const aspect_1 = require("../aspect");
|
|
50
50
|
const target_versions_1 = require("../validations/target-versions");
|
|
51
51
|
const errors_1 = require("../errors");
|
|
52
|
-
|
|
52
|
+
const required_version_1 = require("./required-version");
|
|
53
|
+
/**
|
|
54
|
+
* Default stack synthesizer: invokes aspects, runs validations, collects annotations into the manifest and writes
|
|
55
|
+
* the stack's Terraform configuration (JSON or HCL) to its working directory.
|
|
56
|
+
*/
|
|
53
57
|
class StackSynthesizer {
|
|
54
58
|
stack;
|
|
55
59
|
continueOnErrorAnnotations;
|
|
@@ -59,6 +63,9 @@ class StackSynthesizer {
|
|
|
59
63
|
* @param continueOnErrorAnnotations if set to true, `synthesize()` will not throw an error
|
|
60
64
|
* if it encounters an error Annotation. However, it will still add all errors to the manifest
|
|
61
65
|
* file. The cdktn-cli uses this flag to print the errors itself.
|
|
66
|
+
* @param hclOutput if set to true, the stack is always written as HCL.
|
|
67
|
+
* Otherwise it is written as HCL when the manifest names the stack file
|
|
68
|
+
* `cdk.tf`, which follows `App`'s `hclOutput` and `SYNTH_HCL_OUTPUT`.
|
|
62
69
|
*/
|
|
63
70
|
constructor(stack, continueOnErrorAnnotations = false, hclOutput = false) {
|
|
64
71
|
this.stack = stack;
|
|
@@ -87,6 +94,10 @@ class StackSynthesizer {
|
|
|
87
94
|
const workingDirectory = path.join(session.outdir, stackManifest.workingDirectory);
|
|
88
95
|
if (!fs.existsSync(workingDirectory))
|
|
89
96
|
fs.mkdirSync(workingDirectory);
|
|
97
|
+
(0, required_version_1.removeRequiredVersionFiles)(workingDirectory);
|
|
98
|
+
if ((0, required_version_1.writesRequiredVersion)(this.stack)) {
|
|
99
|
+
(0, required_version_1.writeRequiredVersionFiles)(this.stack, workingDirectory, this.hclOutput);
|
|
100
|
+
}
|
|
90
101
|
// call custom synthesis on child nodes (leafs first)
|
|
91
102
|
this.stack.node
|
|
92
103
|
.findAll(constructs_1.ConstructOrder.POSTORDER)
|
|
@@ -115,7 +126,8 @@ class StackSynthesizer {
|
|
|
115
126
|
.map((a) => `[${a.constructPath}] ${a.message}`)
|
|
116
127
|
.join("\n"));
|
|
117
128
|
}
|
|
118
|
-
|
|
129
|
+
// The manifest names the stack file, so it also decides its format.
|
|
130
|
+
if (this.hclOutput || manifest.hclOutput) {
|
|
119
131
|
const hcl = this.stack.toHclTerraform();
|
|
120
132
|
fs.writeFileSync(path.join(session.outdir, stackManifest.synthesizedStackPath), hcl.hcl);
|
|
121
133
|
fs.writeFileSync(path.join(session.outdir, stackManifest.stackMetadataPath), (0, safe_stable_stringify_1.default)(hcl.metadata, null, 2));
|
|
@@ -135,7 +147,12 @@ function invokeAspects(root) {
|
|
|
135
147
|
const invokedByPath = {};
|
|
136
148
|
let nestedAspectWarning = false;
|
|
137
149
|
recurse(root, []);
|
|
138
|
-
|
|
150
|
+
/**
|
|
151
|
+
* Invokes inherited and own aspects on the construct, skipping any already invoked on it, then recurses into its
|
|
152
|
+
* children
|
|
153
|
+
* @param construct Construct to visit
|
|
154
|
+
* @param inheritedAspects Aspects applied to the construct's ancestors
|
|
155
|
+
*/
|
|
139
156
|
function recurse(construct, inheritedAspects) {
|
|
140
157
|
const node = construct.node;
|
|
141
158
|
const aspects = aspect_1.Aspects.of(construct);
|
|
@@ -169,25 +186,42 @@ const annotationMetadataEntryTypes = [
|
|
|
169
186
|
annotations_1.AnnotationMetadataEntryType.WARN,
|
|
170
187
|
annotations_1.AnnotationMetadataEntryType.ERROR,
|
|
171
188
|
];
|
|
172
|
-
|
|
189
|
+
/**
|
|
190
|
+
* Determines if the metadata entry is an info, warning or error annotation
|
|
191
|
+
* @param metadata Metadata entry to test
|
|
192
|
+
* @returns Boolean
|
|
193
|
+
*/
|
|
173
194
|
function isAnnotationMetadata(metadata) {
|
|
174
195
|
return annotationMetadataEntryTypes.includes(metadata.type);
|
|
175
196
|
}
|
|
176
|
-
|
|
197
|
+
/**
|
|
198
|
+
* Determines if the annotation has error level
|
|
199
|
+
* @param annotation Annotation to test
|
|
200
|
+
* @returns Boolean
|
|
201
|
+
*/
|
|
177
202
|
function isErrorAnnotation(annotation) {
|
|
178
203
|
return annotation.level === annotations_1.AnnotationMetadataEntryType.ERROR;
|
|
179
204
|
}
|
|
180
205
|
// originally from https://github.com/aws/aws-cdk/blob/dcae3eead0dbf9acb1ed80ba95bb104c64cb1bd7/packages/%40aws-cdk/core/lib/private/synthesis.ts#L52
|
|
181
206
|
const CUSTOM_SYNTHESIS_SYM = Symbol.for("cdktf/customSynthesis");
|
|
182
|
-
|
|
207
|
+
/**
|
|
208
|
+
* Attaches custom synthesis logic to a construct; its `onSynthesize` is called when the containing stack is
|
|
209
|
+
* synthesized
|
|
210
|
+
* @param construct Construct to attach the custom synthesis to
|
|
211
|
+
* @param synthesis Custom synthesis to run for the construct
|
|
212
|
+
*/
|
|
183
213
|
function addCustomSynthesis(construct, synthesis) {
|
|
184
214
|
Object.defineProperty(construct, CUSTOM_SYNTHESIS_SYM, {
|
|
185
215
|
value: synthesis,
|
|
186
216
|
enumerable: false,
|
|
187
217
|
});
|
|
188
218
|
}
|
|
189
|
-
|
|
219
|
+
/**
|
|
220
|
+
* Returns the custom synthesis attached to a construct via addCustomSynthesis
|
|
221
|
+
* @param construct Construct to read the custom synthesis from
|
|
222
|
+
* @returns The attached custom synthesis, or undefined if none is attached
|
|
223
|
+
*/
|
|
190
224
|
function getCustomSynthesis(construct) {
|
|
191
225
|
return construct[CUSTOM_SYNTHESIS_SYM];
|
|
192
226
|
}
|
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGhlc2l6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3ludGhlc2l6ZS9zeW50aGVzaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErSEEsc0NBeUNDO0FBbUNELGdEQVFDO0FBbk5ELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixrRkFBOEM7QUFHOUMsZ0RBQTBFO0FBQzFFLDJDQUF1RTtBQUN2RSxzQ0FBNkM7QUFFN0Msb0VBQThFO0FBQzlFLHNDQUFnRTtBQUVoRSwrQ0FBK0M7QUFDL0MsTUFBYSxnQkFBZ0I7SUFRZjtJQUNGO0lBQ0E7SUFUVjs7Ozs7T0FLRztJQUNILFlBQ1ksS0FBcUIsRUFDdkIsNkJBQTZCLEtBQUssRUFDbEMsWUFBWSxLQUFLO1FBRmYsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDdkIsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUFRO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDeEIsQ0FBQztJQUVKLFVBQVUsQ0FBQyxPQUEwQjtRQUNuQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUIsb0VBQW9FO1lBQ3BFLG9FQUFvRTtZQUNwRSwwRUFBMEU7WUFDMUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUMzQixJQUFJLDhDQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQzlELFNBQVMsRUFBRSxTQUFTO2dCQUNwQixRQUFRLEVB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QUFLLEtBQUsseUNBQTJCLENBQUMsS0FBSyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxxSkFBcUo7QUFDckosTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFlakUsK0NBQStDO0FBQy9DLFNBQWdCLGtCQUFrQixDQUNoQyxTQUFxQixFQUNyQixTQUEyQjtJQUUzQixNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsRUFBRTtRQUNyRCxLQUFLLEVBQUUsU0FBUztRQUNoQixVQUFVLEVBQUUsS0FBSztLQUNsQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsK0NBQStDO0FBQy9DLFNBQVMsa0JBQWtCLENBQ3pCLFNBQXFCO0lBRXJCLE9BQVEsU0FBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgc3RyaW5naWZ5IGZyb20gXCJzYWZlLXN0YWJsZS1zdHJpbmdpZnlcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcIi4uL3RlcnJhZm9ybS1zdGFja1wiO1xuaW1wb3J0IHsgSVN0YWNrU3ludGhlc2l6ZXIsIElTeW50aGVzaXNTZXNzaW9uIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IEFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZSwgQW5ub3RhdGlvbnMgfSBmcm9tIFwiLi4vYW5ub3RhdGlvbnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdE9yZGVyLCBJQ29uc3RydWN0LCBNZXRhZGF0YUVudHJ5IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFzcGVjdHMsIElBc3BlY3QgfSBmcm9tIFwiLi4vYXNwZWN0XCI7XG5pbXBvcnQgeyBTdGFja0Fubm90YXRpb24gfSBmcm9tIFwiLi4vbWFuaWZlc3RcIjtcbmltcG9ydCB7IFZhbGlkYXRlRmVhdHVyZVRhcmdldFN1cHBvcnQgfSBmcm9tIFwiLi4vdmFsaWRhdGlvbnMvdGFyZ2V0LXZlcnNpb25zXCI7XG5pbXBvcnQgeyBlbmNvdW50ZXJlZEFubm90YXRpb25XaXRoTGV2ZWxFcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBTdGFja1N5bnRoZXNpemVyIGltcGxlbWVudHMgSVN0YWNrU3ludGhlc2l6ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHN0YWNrIHRoZSBzdGFjayB0byBzeW50aGVzaXplXG4gICAqIEBwYXJhbSBjb250aW51ZU9uRXJyb3JBbm5vdGF0aW9ucyBpZiBzZXQgdG8gdHJ1ZSwgYHN5bnRoZXNpemUoKWAgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3JcbiAgICogaWYgaXQgZW5jb3VudGVycyBhbiBlcnJvciBBbm5vdGF0aW9uLiBIb3dldmVyLCBpdCB3aWxsIHN0aWxsIGFkZCBhbGwgZXJyb3JzIHRvIHRoZSBtYW5pZmVzdFxuICAgKiBmaWxlLiBUaGUgY2RrdG4tY2xpIHVzZXMgdGhpcyBmbGFnIHRvIHByaW50IHRoZSBlcnJvcnMgaXRzZWxmLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHN0YWNrOiBUZXJyYWZvcm1TdGFjayxcbiAgICBwcml2YXRlIGNvbnRpbnVlT25FcnJvckFubm90YXRpb25zID0gZmFsc2UsXG4gICAgcHJpdmF0ZSBoY2xPdXRwdXQgPSBmYWxzZSxcbiAgKSB7fVxuXG4gIHN5bnRoZXNpemUoc2Vzc2lvbjogSVN5bnRoZXNpc1Nlc3Npb24pIHtcbiAgICBpbnZva2VBc3BlY3RzKHRoaXMuc3RhY2spO1xuXG4gICAgaWYgKCFzZXNzaW9uLnN0YWNrc1ByZXBhcmVkKSB7XG4gICAgICAvLyBTZXNzaW9ucyBub3QgYnVpbHQgYnkgQXBwLnN5bnRoKCkgYXJyaXZlIHVucHJlcGFyZWQ6IHByZXBhcmUgdGhpc1xuICAgICAgLy8gc3RhY2sgc28gc3RhbGUgcHJvdmlkZXItZmVhdHVyZSBhbmQgZnVuY3Rpb24gdXNhZ2UgaXMgY2xlYXJlZCBhbmRcbiAgICAgIC8vIHJlZGlzY292ZXJlZCBiZWZvcmUgdmFsaWRhdGlvbnMgcnVuIChJU3ludGhlc2lzU2Vzc2lvbi5zdGFja3NQcmVwYXJlZCkuXG4gICAgICB0aGlzLnN0YWNrLnByZXBhcmVTdGFjaygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YWNrLmhhc1Jlc291cmNlTW92ZSgpKSB7XG4gICAgICB0aGlzLnN0YWNrLm5vZGUuYWRkVmFsaWRhdGlvbihcbiAgICAgICAgbmV3IFZhbGlkYXRlRmVhdHVyZVRhcmdldFN1cHBvcnQodGhpcy5zdGFjaywgXCJUaGUgbW92ZWQgYmxvY2tcIiwge1xuICAgICAgICAgIHRlcnJhZm9ybTogXCI+PTEuNS4wXCIsXG4gICAgICAgICAgb3BlbnRvZnU6IFwiPj0xLjYuMFwiLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFzZXNzaW9uLnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLnN0YWNrLnJ1bkFsbFZhbGlkYXRpb25zKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFuaWZlc3QgPSBzZXNzaW9uLm1hbmlmZXN0O1xuICAgIGNvbnN0IHN0YWNrTWFuaWZlc3QgPSBtYW5pZmVzdC5mb3JTdGFjayh0aGlzLnN0YWNrKTtcblxuICAgIGNvbnN0IHdvcmtpbmdEaXJlY3RvcnkgPSBwYXRoLmpvaW4oXG4gICAgICBzZXNzaW9uLm91dGRpcixcbiAgICAgIHN0YWNrTWFuaWZlc3Qud29ya2luZ0RpcmVjdG9yeSxcbiAgICApO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyh3b3JraW5nRGlyZWN0b3J5KSkgZnMubWtkaXJTeW5jKHdvcmtpbmdEaXJlY3RvcnkpO1xuXG4gICAgLy8gY2FsbCBjdXN0b20gc3ludGhlc2lzIG9uIGNoaWxkIG5vZGVzIChsZWFmcyBmaXJzdClcbiAgICB0aGlzLnN0YWNrLm5vZGVcbiAgICAgIC5maW5kQWxsKENvbnN0cnVjdE9yZGVyLlBPU1RPUkRFUilcbiAgICAgIC5mb3JFYWNoKChub2RlKSA9PiBnZXRDdXN0b21TeW50aGVzaXMobm9kZSk/Lm9uU3ludGhlc2l6ZShzZXNzaW9uKSk7XG5cbiAgICAvLyBjb2xsZWN0IEFubm90YXRpb25zIGludG8gTWFuaWZlc3RcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IHRoaXMuc3RhY2subm9kZVxuICAgICAgLmZpbmRBbGwoKVxuICAgICAgLm1hcCgobm9kZSkgPT4gKHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWV0YWRhdGFzOiBub2RlLm5vZGUubWV0YWRhdGEuZmlsdGVyKGlzQW5ub3RhdGlvbk1ldGFkYXRhKSxcbiAgICAgIH0pKVxuICAgICAgLm1hcDxTdGFja0Fubm90YXRpb25bXT4oKHsgbm9kZSwgbWV0YWRhdGFzIH0pID0+XG4gICAgICAgIG1ldGFkYXRhcy5tYXAoKG1ldGFkYXRhKSA9PiAoe1xuICAgICAgICAgIGNvbnN0cnVjdFBhdGg6IG5vZGUubm9kZS5wYXRoLFxuICAgICAgICAgIGxldmVsOiBtZXRhZGF0YS50eXBlIGFzIEFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZSxcbiAgICAgICAgICBtZXNzYWdlOiBtZXRhZGF0YS5kYXRhLFxuICAgICAgICAgIHN0YWNrdHJhY2U6IG1ldGFkYXRhLnRyYWNlLFxuICAgICAgICB9KSksXG4gICAgICApXG4gICAgICAucmVkdWNlKChsaXN0LCBtZXRhZGF0YXMpID0+IFsuLi5saXN0LCAuLi5tZXRhZGF0YXNdLCBbXSk7IC8vIEFycmF5LmZsYXQoKVxuXG4gICAgLy8gaXQgaXMgcmVhZG9ubHkgYnV0IHRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHdlIGFyZSBhbGxvd2VkIHRvIHdyaXRlIHRvIGl0XG4gICAgKHN0YWNrTWFuaWZlc3QuYW5ub3RhdGlvbnMgYXMgYW55KSA9IGFubm90YXRpb25zO1xuXG4gICAgLy8gYWJvcnQgaWYgb25lIG9yIG1vcmUgZXJyb3IgYW5ub3RhdGlvbnMgaGF2ZSBiZWVuIGVuY291bnRlcmVkXG4gICAgaWYgKFxuICAgICAgIXRoaXMuY29udGludWVPbkVycm9yQW5ub3RhdGlvbnMgJiZcbiAgICAgIGFubm90YXRpb25zLnNvbWUoaXNFcnJvckFubm90YXRpb24pXG4gICAgKSB7XG4gICAgICB0aHJvdyBlbmNvdW50ZXJlZEFubm90YXRpb25XaXRoTGV2ZWxFcnJvcihcbiAgICAgICAgYW5ub3RhdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKGlzRXJyb3JBbm5vdGF0aW9uKVxuICAgICAgICAgIC5tYXAoKGEpID0+IGBbJHthLmNvbnN0cnVjdFBhdGh9XSAke2EubWVzc2FnZX1gKVxuICAgICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oY2xPdXRwdXQpIHtcbiAgICAgIGNvbnN0IGhjbCA9IHRoaXMuc3RhY2sudG9IY2xUZXJyYWZvcm0oKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgIHBhdGguam9pbihzZXNzaW9uLm91dGRpciwgc3RhY2tNYW5pZmVzdC5zeW50aGVzaXplZFN0YWNrUGF0aCksXG4gICAgICAgIGhjbC5oY2wsXG4gICAgICApO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4oc2Vzc2lvbi5vdXRkaXIsIHN0YWNrTWFuaWZlc3Quc3RhY2tNZXRhZGF0YVBhdGghKSxcbiAgICAgICAgc3RyaW5naWZ5KGhjbC5tZXRhZGF0YSwgbnVsbCwgMikgYXMgc3RyaW5nLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpzb25UZkNvbmZpZyA9IHRoaXMuc3RhY2sudG9UZXJyYWZvcm0oKTtcblxuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oc2Vzc2lvbi5vdXRkaXIsIHN0YWNrTWFuaWZlc3Quc3ludGhlc2l6ZWRTdGFja1BhdGgpLFxuICAgICAgc3RyaW5naWZ5KGpzb25UZkNvbmZpZywgbnVsbCwgMikgYXMgc3RyaW5nLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2UgYXNwZWN0cyBvbiB0aGUgZ2l2ZW4gY29uc3RydWN0IHRyZWUuXG4gKlxuICogb3JpZ2luYWxseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL2RjYWUzZWVhZDBkYmY5YWNiMWVkODBiYTk1YmIxMDRjNjRjYjFiZDcvcGFja2FnZXMvQGF3cy1jZGsvY29yZS9saWIvcHJpdmF0ZS9zeW50aGVzaXMudHMjTDk5LUwxMzdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzcGVjdHMocm9vdDogSUNvbnN0cnVjdCkge1xuICBjb25zdCBpbnZva2VkQnlQYXRoOiB7IFtub2RlUGF0aDogc3RyaW5nXTogSUFzcGVjdFtdIH0gPSB7fTtcblxuICBsZXQgbmVzdGVkQXNwZWN0V2FybmluZyA9IGZhbHNlO1xuICByZWN1cnNlKHJvb3QsIFtdKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICBmdW5jdGlvbiByZWN1cnNlKGNvbnN0cnVjdDogSUNvbnN0cnVjdCwgaW5oZXJpdGVkQXNwZWN0czogSUFzcGVjdFtdKSB7XG4gICAgY29uc3Qgbm9kZSA9IGNvbnN0cnVjdC5ub2RlO1xuICAgIGNvbnN0IGFzcGVjdHMgPSBBc3BlY3RzLm9mKGNvbnN0cnVjdCk7XG4gICAgY29uc3QgYWxsQXNwZWN0c0hlcmUgPSBbLi4uKGluaGVyaXRlZEFzcGVjdHMgPz8gW10pLCAuLi5hc3BlY3RzLmFsbF07XG4gICAgY29uc3Qgbm9kZUFzcGVjdHNDb3VudCA9IGFzcGVjdHMuYWxsLmxlbmd0aDtcbiAgICBmb3IgKGNvbnN0IGFzcGVjdCBvZiBhbGxBc3BlY3RzSGVyZSkge1xuICAgICAgbGV0IGludm9rZWQgPSBpbnZva2VkQnlQYXRoW25vZGUucGF0aF07XG4gICAgICBpZiAoIWludm9rZWQpIHtcbiAgICAgICAgaW52b2tlZCA9IGludm9rZWRCeVBhdGhbbm9kZS5wYXRoXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW52b2tlZC5pbmNsdWRlcyhhc3BlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhc3BlY3QudmlzaXQoY29uc3RydWN0KTtcblxuICAgICAgLy8gaWYgYW4gYXNwZWN0IHdhcyBhZGRlZCB0byB0aGUgbm9kZSB3aGlsZSBpbnZva2luZyBhbm90aGVyIGFzcGVjdCBpdCB3aWxsIG5vdCBiZSBpbnZva2VkLCBlbWl0IGEgd2FybmluZ1xuICAgICAgLy8gdGhlIGBuZXN0ZWRBc3BlY3RXYXJuaW5nYCBmbGFnIGlzIHVzZWQgdG8gcHJldmVudCB0aGUgd2FybmluZyBmcm9tIGJlaW5nIGVtaXR0ZWQgZm9yIGV2ZXJ5IGNoaWxkXG4gICAgICBpZiAoIW5lc3RlZEFzcGVjdFdhcm5pbmcgJiYgbm9kZUFzcGVjdHNDb3VudCAhPT0gYXNwZWN0cy5hbGwubGVuZ3RoKSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKGNvbnN0cnVjdCkuYWRkV2FybmluZyhcbiAgICAgICAgICBcIldlIGRldGVjdGVkIGFuIEFzcGVjdCB3YXMgYWRkZWQgdmlhIGFub3RoZXIgQXNwZWN0LCBhbmQgd2lsbCBub3QgYmUgYXBwbGllZFwiLFxuICAgICAgICApO1xuICAgICAgICBuZXN0ZWRBc3BlY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gbWFyayBhcyBpbnZva2VkIGZvciB0aGlzIG5vZGVcbiAgICAgIGludm9rZWQucHVzaChhc3BlY3QpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY29uc3RydWN0Lm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHJlY3Vyc2UoY2hpbGQsIGFsbEFzcGVjdHNIZXJlKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgYW5ub3RhdGlvbk1ldGFkYXRhRW50cnlUeXBlcyA9IFtcbiAgQW5ub3RhdGlvbk1ldGFkYXRhRW50cnlUeXBlLklORk8sXG4gIEFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZS5XQVJOLFxuICBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUuRVJST1IsXG5dIGFzIHN0cmluZ1tdO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gaXNBbm5vdGF0aW9uTWV0YWRhdGEobWV0YWRhdGE6IE1ldGFkYXRhRW50cnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZXMuaW5jbHVkZXMobWV0YWRhdGEudHlwZSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBpc0Vycm9yQW5ub3RhdGlvbihhbm5vdGF0aW9uOiBTdGFja0Fubm90YXRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGFubm90YXRpb24ubGV2ZWwgPT09IEFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZS5FUlJPUjtcbn1cblxuLy8gb3JpZ2luYWxseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL2RjYWUzZWVhZDBkYmY5YWNiMWVkODBiYTk1YmIxMDRjNjRjYjFiZDcvcGFja2FnZXMvJTQwYXdzLWNkay9jb3JlL2xpYi9wcml2YXRlL3N5bnRoZXNpcy50cyNMNTJcbmNvbnN0IENVU1RPTV9TWU5USEVTSVNfU1lNID0gU3ltYm9sLmZvcihcImNka3RmL2N1c3RvbVN5bnRoZXNpc1wiKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGNvbnN0cnVjdHMgdGhhdCB3YW50IHRvIGRvIHNvbWV0aGluZyBjdXN0b20gZHVyaW5nIHN5bnRoZXNpc1xuICpcbiAqIFRoaXMgZmVhdHVyZSBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBDREtUTiBvbmx5OyAzcmQgcGFydHlcbiAqIGxpYnJhcnkgYXV0aG9ycyBhbmQgQ0RLIHVzZXJzIHNob3VsZCBub3QgdXNlIHRoaXMgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUN1c3RvbVN5bnRoZXNpcyB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29uc3RydWN0IGlzIHN5bnRoZXNpemVkXG4gICAqL1xuICBvblN5bnRoZXNpemUoc2Vzc2lvbjogSVN5bnRoZXNpc1Nlc3Npb24pOiB2b2lkO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEN1c3RvbVN5bnRoZXNpcyhcbiAgY29uc3RydWN0OiBJQ29uc3RydWN0LFxuICBzeW50aGVzaXM6IElDdXN0b21TeW50aGVzaXMsXG4pOiB2b2lkIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdCwgQ1VTVE9NX1NZTlRIRVNJU19TWU0sIHtcbiAgICB2YWx1ZTogc3ludGhlc2lzLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIGdldEN1c3RvbVN5bnRoZXNpcyhcbiAgY29uc3RydWN0OiBJQ29uc3RydWN0LFxuKTogSUN1c3RvbVN5bnRoZXNpcyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAoY29uc3RydWN0IGFzIGFueSlbQ1VTVE9NX1NZTlRIRVNJU19TWU1dO1xufVxuIl19
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGhlc2l6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3ludGhlc2l6ZS9zeW50aGVzaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnSkEsc0NBOENDO0FBZ0RELGdEQVFDO0FBdFBELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixrRkFBOEM7QUFHOUMsZ0RBQTBFO0FBQzFFLDJDQUF1RTtBQUN2RSxzQ0FBNkM7QUFFN0Msb0VBQThFO0FBQzlFLHNDQUFnRTtBQUNoRSx5REFJNEI7QUFFNUI7OztHQUdHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFXZjtJQUNGO0lBQ0E7SUFaVjs7Ozs7Ozs7T0FRRztJQUNILFlBQ1ksS0FBcUIsRUFDdkIsNkJBQTZCLEtBQUssRUFDbEMsWUFBWSxLQUFLO1FBRmYsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDdkIsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUFRO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDeEIsQ0FBQztJQUVKLFVBQVUsQ0FBQyxPQUEwQjtRQUNuQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUIsb0VBQW9FO1lBQ3BFLG9FQUFvRTtZQUNwRSwwRUFBMEU7WUFDMUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUMzQixJQUFJLDhDQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQzlELFNBQVMsRUFBRSxTQUFT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QyxJQUFJO0lBQ2hDLHlDQUEyQixDQUFDLElBQUk7SUFDaEMseUNBQTJCLENBQUMsS0FBSztDQUN0QixDQUFDO0FBRWQ7Ozs7R0FJRztBQUNILFNBQVMsb0JBQW9CLENBQUMsUUFBdUI7SUFDbkQsT0FBTyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxVQUEyQjtJQUNwRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUsseUNBQTJCLENBQUMsS0FBSyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxxSkFBcUo7QUFDckosTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFlakU7Ozs7O0dBS0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsU0FBcUIsRUFDckIsU0FBMkI7SUFFM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUU7UUFDckQsS0FBSyxFQUFFLFNBQVM7UUFDaEIsVUFBVSxFQUFFLEtBQUs7S0FDbEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGtCQUFrQixDQUN6QixTQUFxQjtJQUVyQixPQUFRLFNBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tIFwic2FmZS1zdGFibGUtc3RyaW5naWZ5XCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCIuLi90ZXJyYWZvcm0tc3RhY2tcIjtcbmltcG9ydCB7IElTdGFja1N5bnRoZXNpemVyLCBJU3ludGhlc2lzU2Vzc2lvbiB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUsIEFubm90YXRpb25zIH0gZnJvbSBcIi4uL2Fubm90YXRpb25zXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RPcmRlciwgSUNvbnN0cnVjdCwgTWV0YWRhdGFFbnRyeSB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBc3BlY3RzLCBJQXNwZWN0IH0gZnJvbSBcIi4uL2FzcGVjdFwiO1xuaW1wb3J0IHsgU3RhY2tBbm5vdGF0aW9uIH0gZnJvbSBcIi4uL21hbmlmZXN0XCI7XG5pbXBvcnQgeyBWYWxpZGF0ZUZlYXR1cmVUYXJnZXRTdXBwb3J0IH0gZnJvbSBcIi4uL3ZhbGlkYXRpb25zL3RhcmdldC12ZXJzaW9uc1wiO1xuaW1wb3J0IHsgZW5jb3VudGVyZWRBbm5vdGF0aW9uV2l0aExldmVsRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5pbXBvcnQge1xuICByZW1vdmVSZXF1aXJlZFZlcnNpb25GaWxlcyxcbiAgd3JpdGVSZXF1aXJlZFZlcnNpb25GaWxlcyxcbiAgd3JpdGVzUmVxdWlyZWRWZXJzaW9uLFxufSBmcm9tIFwiLi9yZXF1aXJlZC12ZXJzaW9uXCI7XG5cbi8qKlxuICogRGVmYXVsdCBzdGFjayBzeW50aGVzaXplcjogaW52b2tlcyBhc3BlY3RzLCBydW5zIHZhbGlkYXRpb25zLCBjb2xsZWN0cyBhbm5vdGF0aW9ucyBpbnRvIHRoZSBtYW5pZmVzdCBhbmQgd3JpdGVzXG4gKiB0aGUgc3RhY2sncyBUZXJyYWZvcm0gY29uZmlndXJhdGlvbiAoSlNPTiBvciBIQ0wpIHRvIGl0cyB3b3JraW5nIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrU3ludGhlc2l6ZXIgaW1wbGVtZW50cyBJU3RhY2tTeW50aGVzaXplciB7XG4gIC8qKlxuICAgKiBAcGFyYW0gc3RhY2sgdGhlIHN0YWNrIHRvIHN5bnRoZXNpemVcbiAgICogQHBhcmFtIGNvbnRpbnVlT25FcnJvckFubm90YXRpb25zIGlmIHNldCB0byB0cnVlLCBgc3ludGhlc2l6ZSgpYCB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvclxuICAgKiBpZiBpdCBlbmNvdW50ZXJzIGFuIGVycm9yIEFubm90YXRpb24uIEhvd2V2ZXIsIGl0IHdpbGwgc3RpbGwgYWRkIGFsbCBlcnJvcnMgdG8gdGhlIG1hbmlmZXN0XG4gICAqIGZpbGUuIFRoZSBjZGt0bi1jbGkgdXNlcyB0aGlzIGZsYWcgdG8gcHJpbnQgdGhlIGVycm9ycyBpdHNlbGYuXG4gICAqIEBwYXJhbSBoY2xPdXRwdXQgaWYgc2V0IHRvIHRydWUsIHRoZSBzdGFjayBpcyBhbHdheXMgd3JpdHRlbiBhcyBIQ0wuXG4gICAqIE90aGVyd2lzZSBpdCBpcyB3cml0dGVuIGFzIEhDTCB3aGVuIHRoZSBtYW5pZmVzdCBuYW1lcyB0aGUgc3RhY2sgZmlsZVxuICAgKiBgY2RrLnRmYCwgd2hpY2ggZm9sbG93cyBgQXBwYCdzIGBoY2xPdXRwdXRgIGFuZCBgU1lOVEhfSENMX09VVFBVVGAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc3RhY2s6IFRlcnJhZm9ybVN0YWNrLFxuICAgIHByaXZhdGUgY29udGludWVPbkVycm9yQW5ub3RhdGlvbnMgPSBmYWxzZSxcbiAgICBwcml2YXRlIGhjbE91dHB1dCA9IGZhbHNlLFxuICApIHt9XG5cbiAgc3ludGhlc2l6ZShzZXNzaW9uOiBJU3ludGhlc2lzU2Vzc2lvbikge1xuICAgIGludm9rZUFzcGVjdHModGhpcy5zdGFjayk7XG5cbiAgICBpZiAoIXNlc3Npb24uc3RhY2tzUHJlcGFyZWQpIHtcbiAgICAgIC8vIFNlc3Npb25zIG5vdCBidWlsdCBieSBBcHAuc3ludGgoKSBhcnJpdmUgdW5wcmVwYXJlZDogcHJlcGFyZSB0aGlzXG4gICAgICAvLyBzdGFjayBzbyBzdGFsZSBwcm92aWRlci1mZWF0dXJlIGFuZCBmdW5jdGlvbiB1c2FnZSBpcyBjbGVhcmVkIGFuZFxuICAgICAgLy8gcmVkaXNjb3ZlcmVkIGJlZm9yZSB2YWxpZGF0aW9ucyBydW4gKElTeW50aGVzaXNTZXNzaW9uLnN0YWNrc1ByZXBhcmVkKS5cbiAgICAgIHRoaXMuc3RhY2sucHJlcGFyZVN0YWNrKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhY2suaGFzUmVzb3VyY2VNb3ZlKCkpIHtcbiAgICAgIHRoaXMuc3RhY2subm9kZS5hZGRWYWxpZGF0aW9uKFxuICAgICAgICBuZXcgVmFsaWRhdGVGZWF0dXJlVGFyZ2V0U3VwcG9ydCh0aGlzLnN0YWNrLCBcIlRoZSBtb3ZlZCBibG9ja1wiLCB7XG4gICAgICAgICAgdGVycmFmb3JtOiBcIj49MS41LjBcIixcbiAgICAgICAgICBvcGVudG9mdTogXCI+PTEuNi4wXCIsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXNlc3Npb24uc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuc3RhY2sucnVuQWxsVmFsaWRhdGlvbnMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYW5pZmVzdCA9IHNlc3Npb24ubWFuaWZlc3Q7XG4gICAgY29uc3Qgc3RhY2tNYW5pZmVzdCA9IG1hbmlmZXN0LmZvclN0YWNrKHRoaXMuc3RhY2spO1xuXG4gICAgY29uc3Qgd29ya2luZ0RpcmVjdG9yeSA9IHBhdGguam9pbihcbiAgICAgIHNlc3Npb24ub3V0ZGlyLFxuICAgICAgc3RhY2tNYW5pZmVzdC53b3JraW5nRGlyZWN0b3J5LFxuICAgICk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHdvcmtpbmdEaXJlY3RvcnkpKSBmcy5ta2RpclN5bmMod29ya2luZ0RpcmVjdG9yeSk7XG5cbiAgICByZW1vdmVSZXF1aXJlZFZlcnNpb25GaWxlcyh3b3JraW5nRGlyZWN0b3J5KTtcbiAgICBpZiAod3JpdGVzUmVxdWlyZWRWZXJzaW9uKHRoaXMuc3RhY2spKSB7XG4gICAgICB3cml0ZVJlcXVpcmVkVmVyc2lvbkZpbGVzKHRoaXMuc3RhY2ssIHdvcmtpbmdEaXJlY3RvcnksIHRoaXMuaGNsT3V0cHV0KTtcbiAgICB9XG5cbiAgICAvLyBjYWxsIGN1c3RvbSBzeW50aGVzaXMgb24gY2hpbGQgbm9kZXMgKGxlYWZzIGZpcnN0KVxuICAgIHRoaXMuc3RhY2subm9kZVxuICAgICAgLmZpbmRBbGwoQ29uc3RydWN0T3JkZXIuUE9TVE9SREVSKVxuICAgICAgLmZvckVhY2goKG5vZGUpID0+IGdldEN1c3RvbVN5bnRoZXNpcyhub2RlKT8ub25TeW50aGVzaXplKHNlc3Npb24pKTtcblxuICAgIC8vIGNvbGxlY3QgQW5ub3RhdGlvbnMgaW50byBNYW5pZmVzdFxuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGhpcy5zdGFjay5ub2RlXG4gICAgICAuZmluZEFsbCgpXG4gICAgICAubWFwKChub2RlKSA9PiAoe1xuICAgICAgICBub2RlLFxuICAgICAgICBtZXRhZGF0YXM6IG5vZGUubm9kZS5tZXRhZGF0YS5maWx0ZXIoaXNBbm5vdGF0aW9uTWV0YWRhdGEpLFxuICAgICAgfSkpXG4gICAgICAubWFwPFN0YWNrQW5ub3RhdGlvbltdPigoeyBub2RlLCBtZXRhZGF0YXMgfSkgPT5cbiAgICAgICAgbWV0YWRhdGFzLm1hcCgobWV0YWRhdGEpID0+ICh7XG4gICAgICAgICAgY29uc3RydWN0UGF0aDogbm9kZS5ub2RlLnBhdGgsXG4gICAgICAgICAgbGV2ZWw6IG1ldGFkYXRhLnR5cGUgYXMgQW5ub3RhdGlvbk1ldGFkYXRhRW50cnlUeXBlLFxuICAgICAgICAgIG1lc3NhZ2U6IG1ldGFkYXRhLmRhdGEsXG4gICAgICAgICAgc3RhY2t0cmFjZTogbWV0YWRhdGEudHJhY2UsXG4gICAgICAgIH0pKSxcbiAgICAgIClcbiAgICAgIC5yZWR1Y2UoKGxpc3QsIG1ldGFkYXRhcykgPT4gWy4uLmxpc3QsIC4uLm1ldGFkYXRhc10sIFtdKTsgLy8gQXJyYXkuZmxhdCgpXG5cbiAgICAvLyBpdCBpcyByZWFkb25seSBidXQgdGhpcyBpcyB0aGUgcGxhY2Ugd2hlcmUgd2UgYXJlIGFsbG93ZWQgdG8gd3JpdGUgdG8gaXRcbiAgICAoc3RhY2tNYW5pZmVzdC5hbm5vdGF0aW9ucyBhcyBhbnkpID0gYW5ub3RhdGlvbnM7XG5cbiAgICAvLyBhYm9ydCBpZiBvbmUgb3IgbW9yZSBlcnJvciBhbm5vdGF0aW9ucyBoYXZlIGJlZW4gZW5jb3VudGVyZWRcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jb250aW51ZU9uRXJyb3JBbm5vdGF0aW9ucyAmJlxuICAgICAgYW5ub3RhdGlvbnMuc29tZShpc0Vycm9yQW5ub3RhdGlvbilcbiAgICApIHtcbiAgICAgIHRocm93IGVuY291bnRlcmVkQW5ub3RhdGlvbldpdGhMZXZlbEVycm9yKFxuICAgICAgICBhbm5vdGF0aW9uc1xuICAgICAgICAgIC5maWx0ZXIoaXNFcnJvckFubm90YXRpb24pXG4gICAgICAgICAgLm1hcCgoYSkgPT4gYFske2EuY29uc3RydWN0UGF0aH1dICR7YS5tZXNzYWdlfWApXG4gICAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRoZSBtYW5pZmVzdCBuYW1lcyB0aGUgc3RhY2sgZmlsZSwgc28gaXQgYWxzbyBkZWNpZGVzIGl0cyBmb3JtYXQuXG4gICAgaWYgKHRoaXMuaGNsT3V0cHV0IHx8IG1hbmlmZXN0LmhjbE91dHB1dCkge1xuICAgICAgY29uc3QgaGNsID0gdGhpcy5zdGFjay50b0hjbFRlcnJhZm9ybSgpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgcGF0aC5qb2luKHNlc3Npb24ub3V0ZGlyLCBzdGFja01hbmlmZXN0LnN5bnRoZXNpemVkU3RhY2tQYXRoKSxcbiAgICAgICAgaGNsLmhjbCxcbiAgICAgICk7XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgIHBhdGguam9pbihzZXNzaW9uLm91dGRpciwgc3RhY2tNYW5pZmVzdC5zdGFja01ldGFkYXRhUGF0aCEpLFxuICAgICAgICBzdHJpbmdpZnkoaGNsLm1ldGFkYXRhLCBudWxsLCAyKSBhcyBzdHJpbmcsXG4gICAgICApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QganNvblRmQ29uZmlnID0gdGhpcy5zdGFjay50b1RlcnJhZm9ybSgpO1xuXG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihzZXNzaW9uLm91dGRpciwgc3RhY2tNYW5pZmVzdC5zeW50aGVzaXplZFN0YWNrUGF0aCksXG4gICAgICBzdHJpbmdpZnkoanNvblRmQ29uZmlnLCBudWxsLCAyKSBhcyBzdHJpbmcsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZSBhc3BlY3RzIG9uIHRoZSBnaXZlbiBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBvcmlnaW5hbGx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvZGNhZTNlZWFkMGRiZjlhY2IxZWQ4MGJhOTViYjEwNGM2NGNiMWJkNy9wYWNrYWdlcy9AYXdzLWNkay9jb3JlL2xpYi9wcml2YXRlL3N5bnRoZXNpcy50cyNMOTktTDEzN1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQXNwZWN0cyhyb290OiBJQ29uc3RydWN0KSB7XG4gIGNvbnN0IGludm9rZWRCeVBhdGg6IHsgW25vZGVQYXRoOiBzdHJpbmddOiBJQXNwZWN0W10gfSA9IHt9O1xuXG4gIGxldCBuZXN0ZWRBc3BlY3RXYXJuaW5nID0gZmFsc2U7XG4gIHJlY3Vyc2Uocm9vdCwgW10pO1xuXG4gIC8qKlxuICAgKiBJbnZva2VzIGluaGVyaXRlZCBhbmQgb3duIGFzcGVjdHMgb24gdGhlIGNvbnN0cnVjdCwgc2tpcHBpbmcgYW55IGFscmVhZHkgaW52b2tlZCBvbiBpdCwgdGhlbiByZWN1cnNlcyBpbnRvIGl0c1xuICAgKiBjaGlsZHJlblxuICAgKiBAcGFyYW0gY29uc3RydWN0IENvbnN0cnVjdCB0byB2aXNpdFxuICAgKiBAcGFyYW0gaW5oZXJpdGVkQXNwZWN0cyBBc3BlY3RzIGFwcGxpZWQgdG8gdGhlIGNvbnN0cnVjdCdzIGFuY2VzdG9yc1xuICAgKi9cbiAgZnVuY3Rpb24gcmVjdXJzZShjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QsIGluaGVyaXRlZEFzcGVjdHM6IElBc3BlY3RbXSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb25zdHJ1Y3Qubm9kZTtcbiAgICBjb25zdCBhc3BlY3RzID0gQXNwZWN0cy5vZihjb25zdHJ1Y3QpO1xuICAgIGNvbnN0IGFsbEFzcGVjdHNIZXJlID0gWy4uLihpbmhlcml0ZWRBc3BlY3RzID8/IFtdKSwgLi4uYXNwZWN0cy5hbGxdO1xuICAgIGNvbnN0IG5vZGVBc3BlY3RzQ291bnQgPSBhc3BlY3RzLmFsbC5sZW5ndGg7XG4gICAgZm9yIChjb25zdCBhc3BlY3Qgb2YgYWxsQXNwZWN0c0hlcmUpIHtcbiAgICAgIGxldCBpbnZva2VkID0gaW52b2tlZEJ5UGF0aFtub2RlLnBhdGhdO1xuICAgICAgaWYgKCFpbnZva2VkKSB7XG4gICAgICAgIGludm9rZWQgPSBpbnZva2VkQnlQYXRoW25vZGUucGF0aF0gPSBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGludm9rZWQuaW5jbHVkZXMoYXNwZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYXNwZWN0LnZpc2l0KGNvbnN0cnVjdCk7XG5cbiAgICAgIC8vIGlmIGFuIGFzcGVjdCB3YXMgYWRkZWQgdG8gdGhlIG5vZGUgd2hpbGUgaW52b2tpbmcgYW5vdGhlciBhc3BlY3QgaXQgd2lsbCBub3QgYmUgaW52b2tlZCwgZW1pdCBhIHdhcm5pbmdcbiAgICAgIC8vIHRoZSBgbmVzdGVkQXNwZWN0V2FybmluZ2AgZmxhZyBpcyB1c2VkIHRvIHByZXZlbnQgdGhlIHdhcm5pbmcgZnJvbSBiZWluZyBlbWl0dGVkIGZvciBldmVyeSBjaGlsZFxuICAgICAgaWYgKCFuZXN0ZWRBc3BlY3RXYXJuaW5nICYmIG5vZGVBc3BlY3RzQ291bnQgIT09IGFzcGVjdHMuYWxsLmxlbmd0aCkge1xuICAgICAgICBBbm5vdGF0aW9ucy5vZihjb25zdHJ1Y3QpLmFkZFdhcm5pbmcoXG4gICAgICAgICAgXCJXZSBkZXRlY3RlZCBhbiBBc3BlY3Qgd2FzIGFkZGVkIHZpYSBhbm90aGVyIEFzcGVjdCwgYW5kIHdpbGwgbm90IGJlIGFwcGxpZWRcIixcbiAgICAgICAgKTtcbiAgICAgICAgbmVzdGVkQXNwZWN0V2FybmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIG1hcmsgYXMgaW52b2tlZCBmb3IgdGhpcyBub2RlXG4gICAgICBpbnZva2VkLnB1c2goYXNwZWN0KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNvbnN0cnVjdC5ub2RlLmNoaWxkcmVuKSB7XG4gICAgICByZWN1cnNlKGNoaWxkLCBhbGxBc3BlY3RzSGVyZSk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZXMgPSBbXG4gIEFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZS5JTkZPLFxuICBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUuV0FSTixcbiAgQW5ub3RhdGlvbk1ldGFkYXRhRW50cnlUeXBlLkVSUk9SLFxuXSBhcyBzdHJpbmdbXTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBtZXRhZGF0YSBlbnRyeSBpcyBhbiBpbmZvLCB3YXJuaW5nIG9yIGVycm9yIGFubm90YXRpb25cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBlbnRyeSB0byB0ZXN0XG4gKiBAcmV0dXJucyBCb29sZWFuXG4gKi9cbmZ1bmN0aW9uIGlzQW5ub3RhdGlvbk1ldGFkYXRhKG1ldGFkYXRhOiBNZXRhZGF0YUVudHJ5KTogYm9vbGVhbiB7XG4gIHJldHVybiBhbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGVzLmluY2x1ZGVzKG1ldGFkYXRhLnR5cGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGFubm90YXRpb24gaGFzIGVycm9yIGxldmVsXG4gKiBAcGFyYW0gYW5ub3RhdGlvbiBBbm5vdGF0aW9uIHRvIHRlc3RcbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xuZnVuY3Rpb24gaXNFcnJvckFubm90YXRpb24oYW5ub3RhdGlvbjogU3RhY2tBbm5vdGF0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBhbm5vdGF0aW9uLmxldmVsID09PSBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUuRVJST1I7XG59XG5cbi8vIG9yaWdpbmFsbHkgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9kY2FlM2VlYWQwZGJmOWFjYjFlZDgwYmE5NWJiMTA0YzY0Y2IxYmQ3L3BhY2thZ2VzLyU0MGF3cy1jZGsvY29yZS9saWIvcHJpdmF0ZS9zeW50aGVzaXMudHMjTDUyXG5jb25zdCBDVVNUT01fU1lOVEhFU0lTX1NZTSA9IFN5bWJvbC5mb3IoXCJjZGt0Zi9jdXN0b21TeW50aGVzaXNcIik7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjb25zdHJ1Y3RzIHRoYXQgd2FudCB0byBkbyBzb21ldGhpbmcgY3VzdG9tIGR1cmluZyBzeW50aGVzaXNcbiAqXG4gKiBUaGlzIGZlYXR1cmUgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB0aGUgQ0RLVE4gb25seTsgM3JkIHBhcnR5XG4gKiBsaWJyYXJ5IGF1dGhvcnMgYW5kIENESyB1c2VycyBzaG91bGQgbm90IHVzZSB0aGlzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDdXN0b21TeW50aGVzaXMge1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbnN0cnVjdCBpcyBzeW50aGVzaXplZFxuICAgKi9cbiAgb25TeW50aGVzaXplKHNlc3Npb246IElTeW50aGVzaXNTZXNzaW9uKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBdHRhY2hlcyBjdXN0b20gc3ludGhlc2lzIGxvZ2ljIHRvIGEgY29uc3RydWN0OyBpdHMgYG9uU3ludGhlc2l6ZWAgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbnRhaW5pbmcgc3RhY2sgaXNcbiAqIHN5bnRoZXNpemVkXG4gKiBAcGFyYW0gY29uc3RydWN0IENvbnN0cnVjdCB0byBhdHRhY2ggdGhlIGN1c3RvbSBzeW50aGVzaXMgdG9cbiAqIEBwYXJhbSBzeW50aGVzaXMgQ3VzdG9tIHN5bnRoZXNpcyB0byBydW4gZm9yIHRoZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEN1c3RvbVN5bnRoZXNpcyhcbiAgY29uc3RydWN0OiBJQ29uc3RydWN0LFxuICBzeW50aGVzaXM6IElDdXN0b21TeW50aGVzaXMsXG4pOiB2b2lkIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdCwgQ1VTVE9NX1NZTlRIRVNJU19TWU0sIHtcbiAgICB2YWx1ZTogc3ludGhlc2lzLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXN0b20gc3ludGhlc2lzIGF0dGFjaGVkIHRvIGEgY29uc3RydWN0IHZpYSBhZGRDdXN0b21TeW50aGVzaXNcbiAqIEBwYXJhbSBjb25zdHJ1Y3QgQ29uc3RydWN0IHRvIHJlYWQgdGhlIGN1c3RvbSBzeW50aGVzaXMgZnJvbVxuICogQHJldHVybnMgVGhlIGF0dGFjaGVkIGN1c3RvbSBzeW50aGVzaXMsIG9yIHVuZGVmaW5lZCBpZiBub25lIGlzIGF0dGFjaGVkXG4gKi9cbmZ1bmN0aW9uIGdldEN1c3RvbVN5bnRoZXNpcyhcbiAgY29uc3RydWN0OiBJQ29uc3RydWN0LFxuKTogSUN1c3RvbVN5bnRoZXNpcyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAoY29uc3RydWN0IGFzIGFueSlbQ1VTVE9NX1NZTlRIRVNJU19TWU1dO1xufVxuIl19
|
package/lib/terraform-asset.d.ts
CHANGED
|
@@ -66,6 +66,10 @@ export declare enum AssetType {
|
|
|
66
66
|
DIRECTORY = 1,
|
|
67
67
|
ARCHIVE = 2
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* A local file or directory that is hashed and copied into the stack's output directory at synthesis, optionally
|
|
71
|
+
* built by a bundler and packaged as an archive, so other resources can reference it by path.
|
|
72
|
+
*/
|
|
69
73
|
export declare class TerraformAsset extends Construct implements IAsset {
|
|
70
74
|
private stack;
|
|
71
75
|
private sourcePath;
|
package/lib/terraform-asset.js
CHANGED
|
@@ -72,9 +72,12 @@ const PACKAGING_BY_TYPE = {
|
|
|
72
72
|
[AssetType.DIRECTORY]: assets_1.AssetPackaging.DIRECTORY,
|
|
73
73
|
[AssetType.ARCHIVE]: assets_1.AssetPackaging.ZIP,
|
|
74
74
|
};
|
|
75
|
-
|
|
75
|
+
/**
|
|
76
|
+
* A local file or directory that is hashed and copied into the stack's output directory at synthesis, optionally
|
|
77
|
+
* built by a bundler and packaged as an archive, so other resources can reference it by path.
|
|
78
|
+
*/
|
|
76
79
|
class TerraformAsset extends constructs_1.Construct {
|
|
77
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformAsset", version: "0.26.0-pre.
|
|
80
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformAsset", version: "0.26.0-pre.21" };
|
|
78
81
|
stack;
|
|
79
82
|
sourcePath;
|
|
80
83
|
// hash value of the asset that can be passed to consuming constructs (e.g. to not recreate a lambda function in case the underlying files did not change)
|
|
@@ -210,4 +213,4 @@ class TerraformAsset extends constructs_1.Construct {
|
|
|
210
213
|
}
|
|
211
214
|
}
|
|
212
215
|
exports.TerraformAsset = TerraformAsset;
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWFzc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS1hc3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywyQ0FBdUM7QUFDdkMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixxQ0FNa0I7QUFDbEIsbURBQStDO0FBRS9DLHFDQUFnRDtBQUVoRCwwREFBOEQ7QUFDOUQsdURBQW1EO0FBQ25ELHFDQU1rQjtBQXNFbEIsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ25CLHlDQUFJLENBQUE7SUFDSixtREFBUyxDQUFBO0lBQ1QsK0NBQU8sQ0FBQTtBQUNULENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUNuQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUVsQywyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLCtFQUErRTtBQUMvRSxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBRXBEOzs7OztHQUtHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBdUM7SUFDNUQsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsdUJBQWMsQ0FBQyxJQUFJO0lBQ3JDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLHVCQUFjLENBQUMsU0FBUztJQUMvQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSx1QkFBYyxDQUFDLEdBQUc7Q0FDeEMsQ0FBQztBQUVGLCtDQUErQztBQUMvQyxNQUFhLGNBQWUsU0FBUSxzQkFBUzs7SUFDbkMsS0FBSyxDQUFpQjtJQUN0QixVQUFVLENBQVM7SUFDM0IsMEpBQTBKO0lBQzFJLFNBQVMsQ0FB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QztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRWpDLElBQUksU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDaEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqQyxDQUFDOztBQWpLSCx3Q0FrS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHtcbiAgQXNzZXRQYWNrYWdpbmcsXG4gIEFzc2V0SGFzaFR5cGUsXG4gIElBc3NldCxcbiAgSUFzc2V0QnVuZGxlcixcbiAgSUFzc2V0UGFja2FnaW5nLFxufSBmcm9tIFwiLi9hc3NldHNcIjtcbmltcG9ydCB7IEFzc2V0U3RhZ2luZyB9IGZyb20gXCIuL2Fzc2V0LXN0YWdpbmdcIjtcbmltcG9ydCB7IElJZ25vcmVTdHJhdGVneSB9IGZyb20gXCIuL2lnbm9yZS1zdHJhdGVneVwiO1xuaW1wb3J0IHsgZmluZEZpbGVBYm92ZUN3ZCB9IGZyb20gXCIuL3ByaXZhdGUvZnNcIjtcbmltcG9ydCB7IElTeW50aGVzaXNTZXNzaW9uIH0gZnJvbSBcIi4vc3ludGhlc2l6ZVwiO1xuaW1wb3J0IHsgYWRkQ3VzdG9tU3ludGhlc2lzIH0gZnJvbSBcIi4vc3ludGhlc2l6ZS9zeW50aGVzaXplclwiO1xuaW1wb3J0IHsgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiLi90ZXJyYWZvcm0tc3RhY2tcIjtcbmltcG9ydCB7XG4gIGFzc2V0QnVuZGxlck91dHB1dEZpbGVOYW1lSW52YWxpZCxcbiAgYXNzZXRFeHBlY3RzRGlyZWN0b3J5LFxuICBhc3NldE91dE9mU2NvcGVPZkNES1RGSnNvbixcbiAgYXNzZXRTdGFnaW5nQnVuZGxlckZpbGVPdXRwdXROZWVkc0ZpbGVQYWNrYWdpbmcsXG4gIGFzc2V0VHlwZU5vdEltcGxlbWVudGVkLFxufSBmcm9tIFwiLi9lcnJvcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1Bc3NldENvbmZpZyB7XG4gIC8vIHBhdGggdG8gdGhlIGZpbGUgb3IgZm9sZGVyIGNvbmZpZ3VyZWQuIElmIHJlbGF0aXZlLCB0aGUgcGF0aCBpcyByZXNvbHZlZCBmcm9tIHRoZSBsb2NhdGlvbiBvZiBjZGt0Zi5qc29uXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgLy8gZmlsZSB0eXBlIG9mIHRoZSBhc3NldCwgZWl0aGVyIEFzc2V0VHlwZS5GSUxFLCBBc3NldFR5cGUuRElSRUNUT1JZLCBBc3NldFR5cGUuQVJDSElWRVxuICByZWFkb25seSB0eXBlPzogQXNzZXRUeXBlO1xuICAvLyBoYXNoIHZhbHVlIG9mIHRoZSBhc3NldCwgaWYgcGFzc2VkIHdpbGwgYmUgdXNlZCBhcyByZXR1cm5lZCBhc3NldEhhc2hcbiAgcmVhZG9ubHkgYXNzZXRIYXNoPzogc3RyaW5nO1xuICAvKipcbiAgICogSG93IHRoZSBgYXNzZXRIYXNoYCBpcyBkZXJpdmVkLlxuICAgKlxuICAgKiBgU09VUkNFYCAodGhlIGRlZmF1bHQpIGhhc2hlcyB0aGUgc291cmNlIHBhdGguIGBDVVNUT01gIHVzZXMgdGhlXG4gICAqIGBhc3NldEhhc2hgIHZhbHVlIHZlcmJhdGltIGFuZCByZXF1aXJlcyBpdCB0byBiZSBzZXQuIGBPVVRQVVRgIGhhc2hlcyB0aGVcbiAgICogc291cmNlIHRvbywgdW5sZXNzIGEgYGJ1bmRsZXJgIGlzIHNldCDigJQgdGhlbiBpdCBoYXNoZXMgdGhlIGJ1bmRsZXInc1xuICAgKiBidWlsdCBvdXRwdXQsIHdoaWNoIGZvcmNlcyBhbiBlYWdlciBidWlsZCAoc2VlIGBidW5kbGVyYCkuXG4gICAqXG4gICAqIElmIGBhc3NldEhhc2hgIGlzIHNldCwgdGhpcyBtdXN0IGJlIGB1bmRlZmluZWRgIG9yIGBBc3NldEhhc2hUeXBlLkNVU1RPTWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFzc2V0SGFzaFR5cGUuU09VUkNFXG4gICAqL1xuICByZWFkb25seSBhc3NldEhhc2hUeXBlPzogQXNzZXRIYXNoVHlwZTtcblxuICAvKipcbiAgICogUGF0aHMgdG8gZXhjbHVkZSBmcm9tIHRoZSBhc3NldCwgcmVsYXRpdmUgdG8gYHBhdGhgLiBTZWVcbiAgICogYEFzc2V0U3RhZ2luZ09wdGlvbnMuZXhjbHVkZWAgZm9yIHRoZSBhY2NlcHRlZCBmb3Jtcy4gQm90aCB0aGUgY29tcHV0ZWRcbiAgICogaGFzaCBhbmQgdGhlIHN0YWdlZC9wYWNrZWQgY29udGVudCBob25vciB0aGUgZXhjbHVzaW9uLiBDYW5ub3QgYmVcbiAgICogY29tYmluZWQgd2l0aCBgaWdub3JlU3RyYXRlZ3lgLCB3aGljaCByZXBsYWNlcyB0aGlzIG1hdGNoZXIgcmF0aGVyIHRoYW5cbiAgICogbGF5ZXJpbmcgb24gdG9wIG9mIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdGhpbmcgaXMgZXhjbHVkZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRXhjbHVzaW9uIG1hdGNoaW5nLCBmb3IgY2FsbGVycyB0aGF0IG5lZWQgYC5naXRpZ25vcmVgIC8gYC5kb2NrZXJpZ25vcmVgXG4gICAqIHBhcml0eSAoaW5jbHVkaW5nIGAhYC1uZWdhdGlvbikgcmF0aGVyIHRoYW4gdGhlIGJ1aWx0LWluIGV4YWN0LXBhdGggL1xuICAgKiBzdWZmaXggLyBkaXJlY3RvcnkgbWF0Y2hlci4gU2VlIGBBc3NldFN0YWdpbmdPcHRpb25zLmlnbm9yZVN0cmF0ZWd5YC5cbiAgICpcbiAgICogYCFgLW5lZ2F0aW9uIG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZSBzdHJhdGVneSBhbHNvIHNldHNcbiAgICogYHBydW5lRXhjbHVkZWREaXJlY3RvcmllczogZmFsc2VgOyBvdGhlcndpc2UgYW4gZXhjbHVkZWQgZGlyZWN0b3J5IGlzXG4gICAqIHBydW5lZCBiZWZvcmUgaXRzIGNvbnRlbnRzIGFyZSBldmVyIGNoZWNrZWQgYWdhaW5zdCBhIHJlLWluY2x1ZGVcbiAgICogcGF0dGVybi4gU2VlIGBJSWdub3JlU3RyYXRlZ3kucHJ1bmVFeGNsdWRlZERpcmVjdG9yaWVzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgZXhjbHVkZWAgaXMgdXNlZCB3aXRoIHRoZSBidWlsdC1pbiBtYXRjaGVyXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVTdHJhdGVneT86IElJZ25vcmVTdHJhdGVneTtcblxuICAvKipcbiAgICogRXh0cmEgaW5mb3JtYXRpb24gdG8gZm9sZCBpbnRvIHRoZSBoYXNoIChlLmcuIGJ1aWxkIGluc3RydWN0aW9ucyBhbmRcbiAgICogb3RoZXIgaW5wdXRzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBleHRyYSBoYXNoXG4gICAqL1xuICByZWFkb25seSBleHRyYUhhc2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgYnVuZGxlciB0aGF0IGJ1aWxkcyB0aGUgc291cmNlIGludG8gYW4gYXJ0aWZhY3QgYmVmb3JlIHN0YWdpbmcuXG4gICAqXG4gICAqIENvcmUgc2hpcHMgbm8gYnVuZGxlcjsgaW1wbGVtZW50IGBJQXNzZXRCdW5kbGVyYCBvciB1c2Ugb25lIGZyb20gYSBidW5kbGVyXG4gICAqIHBhY2thZ2UuIFVuZGVyIHRoZSBkZWZhdWx0IGBTT1VSQ0VgIGhhc2hpbmcgdGhlIGJ1aWxkIGlzIGRlZmVycmVkIHRvIHN5bnRoXG4gICAqIGFuZCBzdGF5cyBza2lwcGFibGU7IGBPVVRQVVRgIGhhc2hpbmcgYnVpbGRzIGVhZ2VybHkgdG8gaGFzaCB0aGUgYXJ0aWZhY3QuXG4gICAqIFRoZSBidW5kbGVyJ3Mgb3V0cHV0IHNoYXBlIG11c3QgbWF0Y2ggYHR5cGVgLiBTZWVcbiAgICogYEFzc2V0U3RhZ2luZ09wdGlvbnMuYnVuZGxlcmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHNvdXJjZSBpcyBzdGFnZWQgdmVyYmF0aW0sIHdpdGggbm8gYnVpbGQgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxlcj86IElBc3NldEJ1bmRsZXI7XG59XG5cbmV4cG9ydCBlbnVtIEFzc2V0VHlwZSB7XG4gIEZJTEUsXG4gIERJUkVDVE9SWSxcbiAgQVJDSElWRSxcbn1cblxuLy8gQmFzZSBuYW1lIGZvciBhIHBhY2thZ2VkIChub24tZGlyZWN0b3J5LCBub24tdmVyYmF0aW0tZmlsZSkgYXJ0aWZhY3QuIFRoZVxuLy8gcGFja2FnaW5nJ3MgYGV4dGVuc2lvbmAgaXMgYXBwZW5kZWQsIHNvIGEgemlwIHN0YXlzIGBhcmNoaXZlLnppcGAgYW5kIGFcbi8vIGZ1dHVyZSBgdGFyLmJ6MmAgcGFja2FnaW5nIHdvdWxkIGJlIGBhcmNoaXZlLnRhci5iejJgIHdpdGggbm8gY2hhbmdlIGhlcmUuXG5jb25zdCBBUkNISVZFX0JBU0VOQU1FID0gXCJhcmNoaXZlXCI7XG5jb25zdCBBU1NFVFNfRElSRUNUT1JZID0gXCJhc3NldHNcIjtcblxuLy8gQSBidW5kbGVyJ3Mgb3V0cHV0RmlsZU5hbWUgYmVjb21lcyBhIHBhdGggc2VnbWVudCB1bmRlciB0aGUgYXNzZXQncyBoYXNoXG4vLyBkaXJlY3RvcnkgKHNlZSBgcGF0aGAvYGZpbGVOYW1lYCksIHNvIGl0IG11c3QgYmUgYSBwbGFpbiBmaWxlIG5hbWUgdGhhdFxuLy8gY2Fubm90IHRyYXZlcnNlIG9yIGFic29sdXRpemUuIFJlamVjdHMgZW1wdHksIGAuYCwgYC4uYCwgYW5kIGFueSBgL2Agb3IgYFxcYC5cbmNvbnN0IFNBRkVfT1VUUFVUX0ZJTEVfTkFNRSA9IC9eKD8hXFwuXFwuPyQpW14vXFxcXF0rJC87XG5cbi8qKlxuICogTWFwcyBlYWNoIGBBc3NldFR5cGVgIHRvIGhvdyBpdCBpcyB3cml0dGVuIHRvIGRpc2sgYXQgc3ludGhlc2lzIHRpbWUuXG4gKlxuICogSW50ZXJuYWwgb25seTogYSBmdXR1cmUgZm9ybWF0IGlzIGFkZGVkIGJ5IGNoYW5naW5nIHRoaXMgbWFwJ3MgdmFsdWVzLFxuICogd2l0aG91dCBhbnkgY2hhbmdlIHRvIHRoZSBwdWJsaWMgYEFzc2V0VHlwZWAgc3VyZmFjZS5cbiAqL1xuY29uc3QgUEFDS0FHSU5HX0JZX1RZUEU6IFJlY29yZDxBc3NldFR5cGUsIElBc3NldFBhY2thZ2luZz4gPSB7XG4gIFtBc3NldFR5cGUuRklMRV06IEFzc2V0UGFja2FnaW5nLkZJTEUsXG4gIFtBc3NldFR5cGUuRElSRUNUT1JZXTogQXNzZXRQYWNrYWdpbmcuRElSRUNUT1JZLFxuICBbQXNzZXRUeXBlLkFSQ0hJVkVdOiBBc3NldFBhY2thZ2luZy5aSVAsXG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybUFzc2V0IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUFzc2V0IHtcbiAgcHJpdmF0ZSBzdGFjazogVGVycmFmb3JtU3RhY2s7XG4gIHByaXZhdGUgc291cmNlUGF0aDogc3RyaW5nO1xuICAvLyBoYXNoIHZhbHVlIG9mIHRoZSBhc3NldCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gY29uc3VtaW5nIGNvbnN0cnVjdHMgKGUuZy4gdG8gbm90IHJlY3JlYXRlIGEgbGFtYmRhIGZ1bmN0aW9uIGluIGNhc2UgdGhlIHVuZGVybHlpbmcgZmlsZXMgZGlkIG5vdCBjaGFuZ2UpXG4gIHB1YmxpYyByZWFkb25seSBhc3NldEhhc2g6IHN0cmluZztcbiAgLy8gZmlsZSB0eXBlIG9mIHRoZSBhc3NldCwgZWl0aGVyIEFzc2V0VHlwZS5GSUxFLCBBc3NldFR5cGUuRElSRUNUT1JZLCBBc3NldFR5cGUuQVJDSElWRVxuICBwdWJsaWMgdHlwZTogQXNzZXRUeXBlO1xuICAvLyBvd25zIGhhc2hpbmcgYW5kIHBhY2tpbmc7IGBBc3NldFN0YWdpbmdgIGFsc28gdmFsaWRhdGVzIGEgY3VzdG9tIGBhc3NldEhhc2hgXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhZ2luZzogQXNzZXRTdGFnaW5nO1xuICAvLyBzZXQgd2hlbiBhIGJ1bmRsZXIgYnVpbGRzIHRoZSBhcnRpZmFjdDsgbmFtZXMgYSBzaW5nbGUtZmlsZSByZXN1bHRcbiAgcHJpdmF0ZSByZWFkb25seSBidW5kbGVyPzogSUFzc2V0QnVuZGxlcjtcblxuICAvKipcbiAgICogQSBUZXJyYWZvcm0gQXNzZXQgdGFrZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBvdXRzaWRlIG9mIHRoZSBDREsgVGVycmFpbiBjb250ZXh0IGFuZCBtb3ZlcyBpdCBpbnRvIGl0LlxuICAgKlxuICAgKiBBc3NldHMgY29weSByZWZlcmVuY2VkIGZpbGVzIGludG8gdGhlIHN0YWNrcyBjb250ZXh0IGZvciBmdXJ0aGVyIHVzYWdlIGluIG90aGVyIHJlc291cmNlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogVGVycmFmb3JtQXNzZXRDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5zdGFjayA9IFRlcnJhZm9ybVN0YWNrLm9mKHRoaXMpO1xuXG4gICAgaWYgKHBhdGguaXNBYnNvbHV0ZShjb25maWcucGF0aCkpIHtcbiAgICAgIHRoaXMuc291cmNlUGF0aCA9IGNvbmZpZy5wYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjZGt0Zkpzb25QYXRoID1cbiAgICAgICAgc2NvcGUubm9kZS50cnlHZXRDb250ZXh0KFwiY2RrdGZKc29uUGF0aFwiKSA/P1xuICAgICAgICBmaW5kRmlsZUFib3ZlQ3dkKFwiY2RrdGYuanNvblwiKTtcbiAgICAgIGlmIChjZGt0Zkpzb25QYXRoKSB7XG4gICAgICAgIC8vIFJlbGF0aXZlIHBhdGhzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBiZSByZWxhdGl2ZSB0byBjZGt0Zi5qc29uLCBidXQgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHJlbGF0aXZlIHRvIHByb2Nlc3MuY3dkXG4gICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucmVzb2x2ZShcbiAgICAgICAgICBwYXRoLmRpcm5hbWUoY2RrdGZKc29uUGF0aCksXG4gICAgICAgICAgY29uZmlnLnBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc291cmNlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgYWJzb2x1dGVQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGFzc2V0T3V0T2ZTY29wZU9mQ0RLVEZKc29uKGlkLCBjb25maWcucGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHRoaXMuc291cmNlUGF0aCk7XG4gICAgY29uc3QgaW5mZXJyZWRUeXBlID0gc3RhdC5pc0ZpbGUoKSA/IEFzc2V0VHlwZS5GSUxFIDogQXNzZXRUeXBlLkRJUkVDVE9SWTtcbiAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZSA/PyBpbmZlcnJlZFR5cGU7XG5cbiAgICAvLyBXaXRob3V0IGEgYnVuZGxlciB0aGUgc291cmNlIGlzIHN0YWdlZCB2ZXJiYXRpbSwgc28gaXRzIHNoYXBlIG11c3QgbWF0Y2hcbiAgICAvLyB0aGUgdHlwZS4gQSBidW5kbGVyIGRlY291cGxlcyB0aGVtLCBzbyB0aGUgY2hlY2sgbW92ZXMgdG8gdGhlIGJ1bmRsZXJcbiAgICAvLyBvdXRwdXQgc2hhcGUsIHZhbGlkYXRlZCBpbiBBc3NldFN0YWdpbmcgb25jZSB0aGUgYnVpbGQgcnVucy5cbiAgICBpZiAoIWNvbmZpZy5idW5kbGVyICYmIHN0YXQuaXNGaWxlKCkgIT09ICh0aGlzLnR5cGUgPT09IEFzc2V0VHlwZS5GSUxFKSkge1xuICAgICAgdGhyb3cgYXNzZXRFeHBlY3RzRGlyZWN0b3J5KGlkLCBjb25maWcucGF0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5idW5kbGVyID0gY29uZmlnLmJ1bmRsZXI7XG5cbiAgICBjb25zdCBvdXRwdXRGaWxlTmFtZSA9IGNvbmZpZy5idW5kbGVyPy5vdXRwdXRGaWxlTmFtZTtcbiAgICBpZiAob3V0cHV0RmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFTQUZFX09VVFBVVF9GSUxFX05BTUUudGVzdChvdXRwdXRGaWxlTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgYXNzZXRCdW5kbGVyT3V0cHV0RmlsZU5hbWVJbnZhbGlkKGlkLCBvdXRwdXRGaWxlTmFtZSk7XG4gICAgICB9XG4gICAgICAvLyBvdXRwdXRGaWxlTmFtZSBpcyBkZWNsYXJlZCBzdGF0aWNhbGx5LCBzbyBhIGJ1bmRsZXIgdGhhdCBzZXRzIGl0IGlzXG4gICAgICAvLyBhbm5vdW5jaW5nIEZJTEUgb3V0cHV0LiBDYXRjaCBhIEZJTEUvcGFja2FnaW5nIG1pc21hdGNoIG5vdyByYXRoZXJcbiAgICAgIC8vIHRoYW4gYWZ0ZXIgYSAocG9zc2libHkgbWludXRlcy1sb25nKSBidWlsZDsgdmFsaWRhdGVPdXRwdXRTaGFwZSBzdGF5c1xuICAgICAgLy8gdGhlIGJhY2tzdG9wIGZvciB0aGUgZHluYW1pYyBjYXNlIHdoZXJlIHRoZSBzaGFwZSBpcyBvbmx5IGtub3duIG9uY2VcbiAgICAgIC8vIGJ1bmRsZSgpIHJldHVybnMuXG4gICAgICBpZiAodGhpcy50eXBlICE9PSBBc3NldFR5cGUuRklMRSkge1xuICAgICAgICB0aHJvdyBhc3NldFN0YWdpbmdCdW5kbGVyRmlsZU91dHB1dE5lZWRzRmlsZVBhY2thZ2luZyhpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGFnaW5nID0gbmV3IEFzc2V0U3RhZ2luZyh0aGlzLCBcIlN0YWdpbmdcIiwge1xuICAgICAgc291cmNlUGF0aDogdGhpcy5zb3VyY2VQYXRoLFxuICAgICAgZGlzcGxheU5hbWU6IGlkLFxuICAgICAgcGFja2FnaW5nOiB0aGlzLnBhY2thZ2luZyxcbiAgICAgIGFzc2V0SGFzaDogY29uZmlnLmFzc2V0SGFzaCxcbiAgICAgIGFzc2V0SGFzaFR5cGU6IGNvbmZpZy5hc3NldEhhc2hUeXBlLFxuICAgICAgZXhjbHVkZTogY29uZmlnLmV4Y2x1ZGUsXG4gICAgICBpZ25vcmVTdHJhdGVneTogY29uZmlnLmlnbm9yZVN0cmF0ZWd5LFxuICAgICAgZXh0cmFIYXNoOiBjb25maWcuZXh0cmFIYXNoLFxuICAgICAgYnVuZGxlcjogY29uZmlnLmJ1bmRsZXIsXG4gICAgfSk7XG4gICAgdGhpcy5hc3NldEhhc2ggPSB0aGlzLnN0YWdpbmcuYXNzZXRIYXNoO1xuXG4gICAgYWRkQ3VzdG9tU3ludGhlc2lzKHRoaXMsIHtcbiAgICAgIG9uU3ludGhlc2l6ZTogdGhpcy5fb25TeW50aGVzaXplLmJpbmQodGhpcyksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBuYW1lZEZvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLnBvc2l4LmpvaW4oXG4gICAgICBBU1NFVFNfRElSRUNUT1JZLFxuICAgICAgdGhpcy5zdGFjay5nZXRMb2dpY2FsSWQodGhpcy5ub2RlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdyB0aGlzIGFzc2V0IGlzIHdyaXR0ZW4gdG8gZGlzay4gVGhlIGxheW91dCAoZGlyZWN0b3J5IHZzIHNpbmdsZSBmaWxlKVxuICAgKiBhbmQgdGhlIGFydGlmYWN0IG5hbWUgYXJlIGRlcml2ZWQgZnJvbSB0aGlzIHJhdGhlciB0aGFuIGZyb20gYHR5cGVgXG4gICAqIGRpcmVjdGx5LCBzbyB0aGUgdHdvIG5ldmVyIGRpc2FncmVlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgcGFja2FnaW5nKCk6IElBc3NldFBhY2thZ2luZyB7XG4gICAgY29uc3QgcGFja2FnaW5nID0gUEFDS0FHSU5HX0JZX1RZUEVbdGhpcy50eXBlXTtcbiAgICBpZiAoIXBhY2thZ2luZykge1xuICAgICAgdGhyb3cgYXNzZXRUeXBlTm90SW1wbGVtZW50ZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhY2thZ2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgdGVycmFmb3JtIGRpcmVjdG9yeSBpbiBwb3NpeCBmb3JtYXRcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVmZXJlbmNlIHRoZSBhc3NldFxuICAgKi9cbiAgcHVibGljIGdldCBwYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGgucG9zaXguam9pbihcbiAgICAgIHRoaXMubmFtZWRGb2xkZXIsIC8vIHJlYWRhYmxlIG5hbWVcbiAgICAgIHRoaXMuYXNzZXRIYXNoLCAvLyBoYXNoIGRlcGVuZGluZyBvbiBjb250ZW50IHNvIHRoYXQgcGF0aCBjaGFuZ2VzIGlmIGNvbnRlbnQgY2hhbmdlc1xuICAgICAgLy8gQSBkaXJlY3RvcnktcHJvZHVjaW5nIHBhY2thZ2luZyBoYXMgbm8gZmlsZSBzZWdtZW50OyBhbnl0aGluZyBlbHNlXG4gICAgICAvLyBjb250cmlidXRlcyBpdHMgYXJ0aWZhY3QgbmFtZS5cbiAgICAgIHRoaXMucGFja2FnaW5nLnByb2R1Y2VzRGlyZWN0b3J5ID8gXCJcIiA6IHRoaXMuZmlsZU5hbWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBhc3NldFxuICAgKi9cbiAgcHVibGljIGdldCBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgZXh0ZW5zaW9uIH0gPSB0aGlzLnBhY2thZ2luZztcbiAgICAvLyBSZXBhY2thZ2VkIGFydGlmYWN0cyAoZXh0ZW5zaW9uIHNldCkgZ2V0IGEgc3RhYmxlIGJhc2UgKyBleHRlbnNpb24uXG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIGAke0FSQ0hJVkVfQkFTRU5BTUV9JHtleHRlbnNpb259YDtcbiAgICB9XG4gICAgLy8gQSBzaW5nbGUtZmlsZSBidW5kbGVyIGFydGlmYWN0IHVzZXMgdGhlIG5hbWUgdGhlIGJ1bmRsZXIgZGVjbGFyZXMsXG4gICAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBzb3VyY2UgYmFzZW5hbWUuXG4gICAgaWYgKHRoaXMuYnVuZGxlcj8ub3V0cHV0RmlsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1bmRsZXIub3V0cHV0RmlsZU5hbWU7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLmJhc2VuYW1lKHRoaXMuc291cmNlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIF9vblN5bnRoZXNpemUoc2Vzc2lvbjogSVN5bnRoZXNpc1Nlc3Npb24pIHtcbiAgICBjb25zdCBzdGFja01hbmlmZXN0ID0gc2Vzc2lvbi5tYW5pZmVzdC5mb3JTdGFjayh0aGlzLnN0YWNrKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIHNlc3Npb24ubWFuaWZlc3Qub3V0ZGlyLFxuICAgICAgc3RhY2tNYW5pZmVzdC5zeW50aGVzaXplZFN0YWNrUGF0aCxcbiAgICAgIFwiLi5cIixcbiAgICApO1xuXG4gICAgLy8gQ2xlYW51cCBleGlzdGluZyBhc3NldHNcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb25zRm9sZGVyID0gcGF0aC5qb2luKGJhc2VQYXRoLCB0aGlzLm5hbWVkRm9sZGVyKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwcmV2aW91c1ZlcnNpb25zRm9sZGVyKSkge1xuICAgICAgZnMucm1TeW5jKHByZXZpb3VzVmVyc2lvbnNGb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIHRoaXMucGF0aCk7XG4gICAgY29uc3QgcGFja2FnaW5nID0gdGhpcy5wYWNrYWdpbmc7XG5cbiAgICBpZiAocGFja2FnaW5nLnByb2R1Y2VzRGlyZWN0b3J5KSB7XG4gICAgICBmcy5ta2RpclN5bmModGFyZ2V0UGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc3RhZ2luZy5zdGFnZSh0YXJnZXRQYXRoKTtcbiAgfVxufVxuIl19
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWFzc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS1hc3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywyQ0FBdUM7QUFDdkMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixxQ0FNa0I7QUFDbEIsbURBQStDO0FBRS9DLHFDQUFnRDtBQUVoRCwwREFBOEQ7QUFDOUQsdURBQW1EO0FBQ25ELHFDQU1rQjtBQXNFbEIsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ25CLHlDQUFJLENBQUE7SUFDSixtREFBUyxDQUFBO0lBQ1QsK0NBQU8sQ0FBQTtBQUNULENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUNuQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUVsQywyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLCtFQUErRTtBQUMvRSxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBRXBEOzs7OztHQUtHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBdUM7SUFDNUQsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsdUJBQWMsQ0FBQyxJQUFJO0lBQ3JDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLHVCQUFjLENBQUMsU0FBUztJQUMvQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSx1QkFBYyxDQUFDLEdBQUc7Q0FDeEMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQWEsY0FBZSxTQUFRLHNCQUFTOztJQUNuQyxLQUFLLENBQWlCO0lBQ3RCLFVBQVUsQ0FBUztJQUMzQiwwSkFBMEo7SUFDMUksU0FBUyxDQUFT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O1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFakMsSUFBSSxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoQyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ04sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O0FBaktILHdDQWtLQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQge1xuICBBc3NldFBhY2thZ2luZyxcbiAgQXNzZXRIYXNoVHlwZSxcbiAgSUFzc2V0LFxuICBJQXNzZXRCdW5kbGVyLFxuICBJQXNzZXRQYWNrYWdpbmcsXG59IGZyb20gXCIuL2Fzc2V0c1wiO1xuaW1wb3J0IHsgQXNzZXRTdGFnaW5nIH0gZnJvbSBcIi4vYXNzZXQtc3RhZ2luZ1wiO1xuaW1wb3J0IHsgSUlnbm9yZVN0cmF0ZWd5IH0gZnJvbSBcIi4vaWdub3JlLXN0cmF0ZWd5XCI7XG5pbXBvcnQgeyBmaW5kRmlsZUFib3ZlQ3dkIH0gZnJvbSBcIi4vcHJpdmF0ZS9mc1wiO1xuaW1wb3J0IHsgSVN5bnRoZXNpc1Nlc3Npb24gfSBmcm9tIFwiLi9zeW50aGVzaXplXCI7XG5pbXBvcnQgeyBhZGRDdXN0b21TeW50aGVzaXMgfSBmcm9tIFwiLi9zeW50aGVzaXplL3N5bnRoZXNpemVyXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCIuL3RlcnJhZm9ybS1zdGFja1wiO1xuaW1wb3J0IHtcbiAgYXNzZXRCdW5kbGVyT3V0cHV0RmlsZU5hbWVJbnZhbGlkLFxuICBhc3NldEV4cGVjdHNEaXJlY3RvcnksXG4gIGFzc2V0T3V0T2ZTY29wZU9mQ0RLVEZKc29uLFxuICBhc3NldFN0YWdpbmdCdW5kbGVyRmlsZU91dHB1dE5lZWRzRmlsZVBhY2thZ2luZyxcbiAgYXNzZXRUeXBlTm90SW1wbGVtZW50ZWQsXG59IGZyb20gXCIuL2Vycm9yc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybUFzc2V0Q29uZmlnIHtcbiAgLy8gcGF0aCB0byB0aGUgZmlsZSBvciBmb2xkZXIgY29uZmlndXJlZC4gSWYgcmVsYXRpdmUsIHRoZSBwYXRoIGlzIHJlc29sdmVkIGZyb20gdGhlIGxvY2F0aW9uIG9mIGNka3RmLmpzb25cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuICAvLyBmaWxlIHR5cGUgb2YgdGhlIGFzc2V0LCBlaXRoZXIgQXNzZXRUeXBlLkZJTEUsIEFzc2V0VHlwZS5ESVJFQ1RPUlksIEFzc2V0VHlwZS5BUkNISVZFXG4gIHJlYWRvbmx5IHR5cGU/OiBBc3NldFR5cGU7XG4gIC8vIGhhc2ggdmFsdWUgb2YgdGhlIGFzc2V0LCBpZiBwYXNzZWQgd2lsbCBiZSB1c2VkIGFzIHJldHVybmVkIGFzc2V0SGFzaFxuICByZWFkb25seSBhc3NldEhhc2g/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgdGhlIGBhc3NldEhhc2hgIGlzIGRlcml2ZWQuXG4gICAqXG4gICAqIGBTT1VSQ0VgICh0aGUgZGVmYXVsdCkgaGFzaGVzIHRoZSBzb3VyY2UgcGF0aC4gYENVU1RPTWAgdXNlcyB0aGVcbiAgICogYGFzc2V0SGFzaGAgdmFsdWUgdmVyYmF0aW0gYW5kIHJlcXVpcmVzIGl0IHRvIGJlIHNldC4gYE9VVFBVVGAgaGFzaGVzIHRoZVxuICAgKiBzb3VyY2UgdG9vLCB1bmxlc3MgYSBgYnVuZGxlcmAgaXMgc2V0IOKAlCB0aGVuIGl0IGhhc2hlcyB0aGUgYnVuZGxlcidzXG4gICAqIGJ1aWx0IG91dHB1dCwgd2hpY2ggZm9yY2VzIGFuIGVhZ2VyIGJ1aWxkIChzZWUgYGJ1bmRsZXJgKS5cbiAgICpcbiAgICogSWYgYGFzc2V0SGFzaGAgaXMgc2V0LCB0aGlzIG11c3QgYmUgYHVuZGVmaW5lZGAgb3IgYEFzc2V0SGFzaFR5cGUuQ1VTVE9NYC5cbiAgICpcbiAgICogQGRlZmF1bHQgQXNzZXRIYXNoVHlwZS5TT1VSQ0VcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0SGFzaFR5cGU/OiBBc3NldEhhc2hUeXBlO1xuXG4gIC8qKlxuICAgKiBQYXRocyB0byBleGNsdWRlIGZyb20gdGhlIGFzc2V0LCByZWxhdGl2ZSB0byBgcGF0aGAuIFNlZVxuICAgKiBgQXNzZXRTdGFnaW5nT3B0aW9ucy5leGNsdWRlYCBmb3IgdGhlIGFjY2VwdGVkIGZvcm1zLiBCb3RoIHRoZSBjb21wdXRlZFxuICAgKiBoYXNoIGFuZCB0aGUgc3RhZ2VkL3BhY2tlZCBjb250ZW50IGhvbm9yIHRoZSBleGNsdXNpb24uIENhbm5vdCBiZVxuICAgKiBjb21iaW5lZCB3aXRoIGBpZ25vcmVTdHJhdGVneWAsIHdoaWNoIHJlcGxhY2VzIHRoaXMgbWF0Y2hlciByYXRoZXIgdGhhblxuICAgKiBsYXllcmluZyBvbiB0b3Agb2YgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90aGluZyBpcyBleGNsdWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFeGNsdXNpb24gbWF0Y2hpbmcsIGZvciBjYWxsZXJzIHRoYXQgbmVlZCBgLmdpdGlnbm9yZWAgLyBgLmRvY2tlcmlnbm9yZWBcbiAgICogcGFyaXR5IChpbmNsdWRpbmcgYCFgLW5lZ2F0aW9uKSByYXRoZXIgdGhhbiB0aGUgYnVpbHQtaW4gZXhhY3QtcGF0aCAvXG4gICAqIHN1ZmZpeCAvIGRpcmVjdG9yeSBtYXRjaGVyLiBTZWUgYEFzc2V0U3RhZ2luZ09wdGlvbnMuaWdub3JlU3RyYXRlZ3lgLlxuICAgKlxuICAgKiBgIWAtbmVnYXRpb24gb25seSB0YWtlcyBlZmZlY3QgaWYgdGhlIHN0cmF0ZWd5IGFsc28gc2V0c1xuICAgKiBgcHJ1bmVFeGNsdWRlZERpcmVjdG9yaWVzOiBmYWxzZWA7IG90aGVyd2lzZSBhbiBleGNsdWRlZCBkaXJlY3RvcnkgaXNcbiAgICogcHJ1bmVkIGJlZm9yZSBpdHMgY29udGVudHMgYXJlIGV2ZXIgY2hlY2tlZCBhZ2FpbnN0IGEgcmUtaW5jbHVkZVxuICAgKiBwYXR0ZXJuLiBTZWUgYElJZ25vcmVTdHJhdGVneS5wcnVuZUV4Y2x1ZGVkRGlyZWN0b3JpZXNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBleGNsdWRlYCBpcyB1c2VkIHdpdGggdGhlIGJ1aWx0LWluIG1hdGNoZXJcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVN0cmF0ZWd5PzogSUlnbm9yZVN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBpbmZvcm1hdGlvbiB0byBmb2xkIGludG8gdGhlIGhhc2ggKGUuZy4gYnVpbGQgaW5zdHJ1Y3Rpb25zIGFuZFxuICAgKiBvdGhlciBpbnB1dHMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4dHJhIGhhc2hcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSGFzaD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBidW5kbGVyIHRoYXQgYnVpbGRzIHRoZSBzb3VyY2UgaW50byBhbiBhcnRpZmFjdCBiZWZvcmUgc3RhZ2luZy5cbiAgICpcbiAgICogQ29yZSBzaGlwcyBubyBidW5kbGVyOyBpbXBsZW1lbnQgYElBc3NldEJ1bmRsZXJgIG9yIHVzZSBvbmUgZnJvbSBhIGJ1bmRsZXJcbiAgICogcGFja2FnZS4gVW5kZXIgdGhlIGRlZmF1bHQgYFNPVVJDRWAgaGFzaGluZyB0aGUgYnVpbGQgaXMgZGVmZXJyZWQgdG8gc3ludGhcbiAgICogYW5kIHN0YXlzIHNraXBwYWJsZTsgYE9VVFBVVGAgaGFzaGluZyBidWlsZHMgZWFnZXJseSB0byBoYXNoIHRoZSBhcnRpZmFjdC5cbiAgICogVGhlIGJ1bmRsZXIncyBvdXRwdXQgc2hhcGUgbXVzdCBtYXRjaCBgdHlwZWAuIFNlZVxuICAgKiBgQXNzZXRTdGFnaW5nT3B0aW9ucy5idW5kbGVyYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgc291cmNlIGlzIHN0YWdlZCB2ZXJiYXRpbSwgd2l0aCBubyBidWlsZCBzdGVwXG4gICAqL1xuICByZWFkb25seSBidW5kbGVyPzogSUFzc2V0QnVuZGxlcjtcbn1cblxuZXhwb3J0IGVudW0gQXNzZXRUeXBlIHtcbiAgRklMRSxcbiAgRElSRUNUT1JZLFxuICBBUkNISVZFLFxufVxuXG4vLyBCYXNlIG5hbWUgZm9yIGEgcGFja2FnZWQgKG5vbi1kaXJlY3RvcnksIG5vbi12ZXJiYXRpbS1maWxlKSBhcnRpZmFjdC4gVGhlXG4vLyBwYWNrYWdpbmcncyBgZXh0ZW5zaW9uYCBpcyBhcHBlbmRlZCwgc28gYSB6aXAgc3RheXMgYGFyY2hpdmUuemlwYCBhbmQgYVxuLy8gZnV0dXJlIGB0YXIuYnoyYCBwYWNrYWdpbmcgd291bGQgYmUgYGFyY2hpdmUudGFyLmJ6MmAgd2l0aCBubyBjaGFuZ2UgaGVyZS5cbmNvbnN0IEFSQ0hJVkVfQkFTRU5BTUUgPSBcImFyY2hpdmVcIjtcbmNvbnN0IEFTU0VUU19ESVJFQ1RPUlkgPSBcImFzc2V0c1wiO1xuXG4vLyBBIGJ1bmRsZXIncyBvdXRwdXRGaWxlTmFtZSBiZWNvbWVzIGEgcGF0aCBzZWdtZW50IHVuZGVyIHRoZSBhc3NldCdzIGhhc2hcbi8vIGRpcmVjdG9yeSAoc2VlIGBwYXRoYC9gZmlsZU5hbWVgKSwgc28gaXQgbXVzdCBiZSBhIHBsYWluIGZpbGUgbmFtZSB0aGF0XG4vLyBjYW5ub3QgdHJhdmVyc2Ugb3IgYWJzb2x1dGl6ZS4gUmVqZWN0cyBlbXB0eSwgYC5gLCBgLi5gLCBhbmQgYW55IGAvYCBvciBgXFxgLlxuY29uc3QgU0FGRV9PVVRQVVRfRklMRV9OQU1FID0gL14oPyFcXC5cXC4/JClbXi9cXFxcXSskLztcblxuLyoqXG4gKiBNYXBzIGVhY2ggYEFzc2V0VHlwZWAgdG8gaG93IGl0IGlzIHdyaXR0ZW4gdG8gZGlzayBhdCBzeW50aGVzaXMgdGltZS5cbiAqXG4gKiBJbnRlcm5hbCBvbmx5OiBhIGZ1dHVyZSBmb3JtYXQgaXMgYWRkZWQgYnkgY2hhbmdpbmcgdGhpcyBtYXAncyB2YWx1ZXMsXG4gKiB3aXRob3V0IGFueSBjaGFuZ2UgdG8gdGhlIHB1YmxpYyBgQXNzZXRUeXBlYCBzdXJmYWNlLlxuICovXG5jb25zdCBQQUNLQUdJTkdfQllfVFlQRTogUmVjb3JkPEFzc2V0VHlwZSwgSUFzc2V0UGFja2FnaW5nPiA9IHtcbiAgW0Fzc2V0VHlwZS5GSUxFXTogQXNzZXRQYWNrYWdpbmcuRklMRSxcbiAgW0Fzc2V0VHlwZS5ESVJFQ1RPUlldOiBBc3NldFBhY2thZ2luZy5ESVJFQ1RPUlksXG4gIFtBc3NldFR5cGUuQVJDSElWRV06IEFzc2V0UGFja2FnaW5nLlpJUCxcbn07XG5cbi8qKlxuICogQSBsb2NhbCBmaWxlIG9yIGRpcmVjdG9yeSB0aGF0IGlzIGhhc2hlZCBhbmQgY29waWVkIGludG8gdGhlIHN0YWNrJ3Mgb3V0cHV0IGRpcmVjdG9yeSBhdCBzeW50aGVzaXMsIG9wdGlvbmFsbHlcbiAqIGJ1aWx0IGJ5IGEgYnVuZGxlciBhbmQgcGFja2FnZWQgYXMgYW4gYXJjaGl2ZSwgc28gb3RoZXIgcmVzb3VyY2VzIGNhbiByZWZlcmVuY2UgaXQgYnkgcGF0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybUFzc2V0IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUFzc2V0IHtcbiAgcHJpdmF0ZSBzdGFjazogVGVycmFmb3JtU3RhY2s7XG4gIHByaXZhdGUgc291cmNlUGF0aDogc3RyaW5nO1xuICAvLyBoYXNoIHZhbHVlIG9mIHRoZSBhc3NldCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gY29uc3VtaW5nIGNvbnN0cnVjdHMgKGUuZy4gdG8gbm90IHJlY3JlYXRlIGEgbGFtYmRhIGZ1bmN0aW9uIGluIGNhc2UgdGhlIHVuZGVybHlpbmcgZmlsZXMgZGlkIG5vdCBjaGFuZ2UpXG4gIHB1YmxpYyByZWFkb25seSBhc3NldEhhc2g6IHN0cmluZztcbiAgLy8gZmlsZSB0eXBlIG9mIHRoZSBhc3NldCwgZWl0aGVyIEFzc2V0VHlwZS5GSUxFLCBBc3NldFR5cGUuRElSRUNUT1JZLCBBc3NldFR5cGUuQVJDSElWRVxuICBwdWJsaWMgdHlwZTogQXNzZXRUeXBlO1xuICAvLyBvd25zIGhhc2hpbmcgYW5kIHBhY2tpbmc7IGBBc3NldFN0YWdpbmdgIGFsc28gdmFsaWRhdGVzIGEgY3VzdG9tIGBhc3NldEhhc2hgXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhZ2luZzogQXNzZXRTdGFnaW5nO1xuICAvLyBzZXQgd2hlbiBhIGJ1bmRsZXIgYnVpbGRzIHRoZSBhcnRpZmFjdDsgbmFtZXMgYSBzaW5nbGUtZmlsZSByZXN1bHRcbiAgcHJpdmF0ZSByZWFkb25seSBidW5kbGVyPzogSUFzc2V0QnVuZGxlcjtcblxuICAvKipcbiAgICogQSBUZXJyYWZvcm0gQXNzZXQgdGFrZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBvdXRzaWRlIG9mIHRoZSBDREsgVGVycmFpbiBjb250ZXh0IGFuZCBtb3ZlcyBpdCBpbnRvIGl0LlxuICAgKlxuICAgKiBBc3NldHMgY29weSByZWZlcmVuY2VkIGZpbGVzIGludG8gdGhlIHN0YWNrcyBjb250ZXh0IGZvciBmdXJ0aGVyIHVzYWdlIGluIG90aGVyIHJlc291cmNlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogVGVycmFmb3JtQXNzZXRDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5zdGFjayA9IFRlcnJhZm9ybVN0YWNrLm9mKHRoaXMpO1xuXG4gICAgaWYgKHBhdGguaXNBYnNvbHV0ZShjb25maWcucGF0aCkpIHtcbiAgICAgIHRoaXMuc291cmNlUGF0aCA9IGNvbmZpZy5wYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjZGt0Zkpzb25QYXRoID1cbiAgICAgICAgc2NvcGUubm9kZS50cnlHZXRDb250ZXh0KFwiY2RrdGZKc29uUGF0aFwiKSA/P1xuICAgICAgICBmaW5kRmlsZUFib3ZlQ3dkKFwiY2RrdGYuanNvblwiKTtcbiAgICAgIGlmIChjZGt0Zkpzb25QYXRoKSB7XG4gICAgICAgIC8vIFJlbGF0aXZlIHBhdGhzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBiZSByZWxhdGl2ZSB0byBjZGt0Zi5qc29uLCBidXQgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHJlbGF0aXZlIHRvIHByb2Nlc3MuY3dkXG4gICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucmVzb2x2ZShcbiAgICAgICAgICBwYXRoLmRpcm5hbWUoY2RrdGZKc29uUGF0aCksXG4gICAgICAgICAgY29uZmlnLnBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc291cmNlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgYWJzb2x1dGVQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGFzc2V0T3V0T2ZTY29wZU9mQ0RLVEZKc29uKGlkLCBjb25maWcucGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHRoaXMuc291cmNlUGF0aCk7XG4gICAgY29uc3QgaW5mZXJyZWRUeXBlID0gc3RhdC5pc0ZpbGUoKSA/IEFzc2V0VHlwZS5GSUxFIDogQXNzZXRUeXBlLkRJUkVDVE9SWTtcbiAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZSA/PyBpbmZlcnJlZFR5cGU7XG5cbiAgICAvLyBXaXRob3V0IGEgYnVuZGxlciB0aGUgc291cmNlIGlzIHN0YWdlZCB2ZXJiYXRpbSwgc28gaXRzIHNoYXBlIG11c3QgbWF0Y2hcbiAgICAvLyB0aGUgdHlwZS4gQSBidW5kbGVyIGRlY291cGxlcyB0aGVtLCBzbyB0aGUgY2hlY2sgbW92ZXMgdG8gdGhlIGJ1bmRsZXJcbiAgICAvLyBvdXRwdXQgc2hhcGUsIHZhbGlkYXRlZCBpbiBBc3NldFN0YWdpbmcgb25jZSB0aGUgYnVpbGQgcnVucy5cbiAgICBpZiAoIWNvbmZpZy5idW5kbGVyICYmIHN0YXQuaXNGaWxlKCkgIT09ICh0aGlzLnR5cGUgPT09IEFzc2V0VHlwZS5GSUxFKSkge1xuICAgICAgdGhyb3cgYXNzZXRFeHBlY3RzRGlyZWN0b3J5KGlkLCBjb25maWcucGF0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5idW5kbGVyID0gY29uZmlnLmJ1bmRsZXI7XG5cbiAgICBjb25zdCBvdXRwdXRGaWxlTmFtZSA9IGNvbmZpZy5idW5kbGVyPy5vdXRwdXRGaWxlTmFtZTtcbiAgICBpZiAob3V0cHV0RmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFTQUZFX09VVFBVVF9GSUxFX05BTUUudGVzdChvdXRwdXRGaWxlTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgYXNzZXRCdW5kbGVyT3V0cHV0RmlsZU5hbWVJbnZhbGlkKGlkLCBvdXRwdXRGaWxlTmFtZSk7XG4gICAgICB9XG4gICAgICAvLyBvdXRwdXRGaWxlTmFtZSBpcyBkZWNsYXJlZCBzdGF0aWNhbGx5LCBzbyBhIGJ1bmRsZXIgdGhhdCBzZXRzIGl0IGlzXG4gICAgICAvLyBhbm5vdW5jaW5nIEZJTEUgb3V0cHV0LiBDYXRjaCBhIEZJTEUvcGFja2FnaW5nIG1pc21hdGNoIG5vdyByYXRoZXJcbiAgICAgIC8vIHRoYW4gYWZ0ZXIgYSAocG9zc2libHkgbWludXRlcy1sb25nKSBidWlsZDsgdmFsaWRhdGVPdXRwdXRTaGFwZSBzdGF5c1xuICAgICAgLy8gdGhlIGJhY2tzdG9wIGZvciB0aGUgZHluYW1pYyBjYXNlIHdoZXJlIHRoZSBzaGFwZSBpcyBvbmx5IGtub3duIG9uY2VcbiAgICAgIC8vIGJ1bmRsZSgpIHJldHVybnMuXG4gICAgICBpZiAodGhpcy50eXBlICE9PSBBc3NldFR5cGUuRklMRSkge1xuICAgICAgICB0aHJvdyBhc3NldFN0YWdpbmdCdW5kbGVyRmlsZU91dHB1dE5lZWRzRmlsZVBhY2thZ2luZyhpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGFnaW5nID0gbmV3IEFzc2V0U3RhZ2luZyh0aGlzLCBcIlN0YWdpbmdcIiwge1xuICAgICAgc291cmNlUGF0aDogdGhpcy5zb3VyY2VQYXRoLFxuICAgICAgZGlzcGxheU5hbWU6IGlkLFxuICAgICAgcGFja2FnaW5nOiB0aGlzLnBhY2thZ2luZyxcbiAgICAgIGFzc2V0SGFzaDogY29uZmlnLmFzc2V0SGFzaCxcbiAgICAgIGFzc2V0SGFzaFR5cGU6IGNvbmZpZy5hc3NldEhhc2hUeXBlLFxuICAgICAgZXhjbHVkZTogY29uZmlnLmV4Y2x1ZGUsXG4gICAgICBpZ25vcmVTdHJhdGVneTogY29uZmlnLmlnbm9yZVN0cmF0ZWd5LFxuICAgICAgZXh0cmFIYXNoOiBjb25maWcuZXh0cmFIYXNoLFxuICAgICAgYnVuZGxlcjogY29uZmlnLmJ1bmRsZXIsXG4gICAgfSk7XG4gICAgdGhpcy5hc3NldEhhc2ggPSB0aGlzLnN0YWdpbmcuYXNzZXRIYXNoO1xuXG4gICAgYWRkQ3VzdG9tU3ludGhlc2lzKHRoaXMsIHtcbiAgICAgIG9uU3ludGhlc2l6ZTogdGhpcy5fb25TeW50aGVzaXplLmJpbmQodGhpcyksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBuYW1lZEZvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLnBvc2l4LmpvaW4oXG4gICAgICBBU1NFVFNfRElSRUNUT1JZLFxuICAgICAgdGhpcy5zdGFjay5nZXRMb2dpY2FsSWQodGhpcy5ub2RlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdyB0aGlzIGFzc2V0IGlzIHdyaXR0ZW4gdG8gZGlzay4gVGhlIGxheW91dCAoZGlyZWN0b3J5IHZzIHNpbmdsZSBmaWxlKVxuICAgKiBhbmQgdGhlIGFydGlmYWN0IG5hbWUgYXJlIGRlcml2ZWQgZnJvbSB0aGlzIHJhdGhlciB0aGFuIGZyb20gYHR5cGVgXG4gICAqIGRpcmVjdGx5LCBzbyB0aGUgdHdvIG5ldmVyIGRpc2FncmVlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgcGFja2FnaW5nKCk6IElBc3NldFBhY2thZ2luZyB7XG4gICAgY29uc3QgcGFja2FnaW5nID0gUEFDS0FHSU5HX0JZX1RZUEVbdGhpcy50eXBlXTtcbiAgICBpZiAoIXBhY2thZ2luZykge1xuICAgICAgdGhyb3cgYXNzZXRUeXBlTm90SW1wbGVtZW50ZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhY2thZ2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgdGVycmFmb3JtIGRpcmVjdG9yeSBpbiBwb3NpeCBmb3JtYXRcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVmZXJlbmNlIHRoZSBhc3NldFxuICAgKi9cbiAgcHVibGljIGdldCBwYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGgucG9zaXguam9pbihcbiAgICAgIHRoaXMubmFtZWRGb2xkZXIsIC8vIHJlYWRhYmxlIG5hbWVcbiAgICAgIHRoaXMuYXNzZXRIYXNoLCAvLyBoYXNoIGRlcGVuZGluZyBvbiBjb250ZW50IHNvIHRoYXQgcGF0aCBjaGFuZ2VzIGlmIGNvbnRlbnQgY2hhbmdlc1xuICAgICAgLy8gQSBkaXJlY3RvcnktcHJvZHVjaW5nIHBhY2thZ2luZyBoYXMgbm8gZmlsZSBzZWdtZW50OyBhbnl0aGluZyBlbHNlXG4gICAgICAvLyBjb250cmlidXRlcyBpdHMgYXJ0aWZhY3QgbmFtZS5cbiAgICAgIHRoaXMucGFja2FnaW5nLnByb2R1Y2VzRGlyZWN0b3J5ID8gXCJcIiA6IHRoaXMuZmlsZU5hbWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBhc3NldFxuICAgKi9cbiAgcHVibGljIGdldCBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgZXh0ZW5zaW9uIH0gPSB0aGlzLnBhY2thZ2luZztcbiAgICAvLyBSZXBhY2thZ2VkIGFydGlmYWN0cyAoZXh0ZW5zaW9uIHNldCkgZ2V0IGEgc3RhYmxlIGJhc2UgKyBleHRlbnNpb24uXG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIGAke0FSQ0hJVkVfQkFTRU5BTUV9JHtleHRlbnNpb259YDtcbiAgICB9XG4gICAgLy8gQSBzaW5nbGUtZmlsZSBidW5kbGVyIGFydGlmYWN0IHVzZXMgdGhlIG5hbWUgdGhlIGJ1bmRsZXIgZGVjbGFyZXMsXG4gICAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBzb3VyY2UgYmFzZW5hbWUuXG4gICAgaWYgKHRoaXMuYnVuZGxlcj8ub3V0cHV0RmlsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1bmRsZXIub3V0cHV0RmlsZU5hbWU7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLmJhc2VuYW1lKHRoaXMuc291cmNlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIF9vblN5bnRoZXNpemUoc2Vzc2lvbjogSVN5bnRoZXNpc1Nlc3Npb24pIHtcbiAgICBjb25zdCBzdGFja01hbmlmZXN0ID0gc2Vzc2lvbi5tYW5pZmVzdC5mb3JTdGFjayh0aGlzLnN0YWNrKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIHNlc3Npb24ubWFuaWZlc3Qub3V0ZGlyLFxuICAgICAgc3RhY2tNYW5pZmVzdC5zeW50aGVzaXplZFN0YWNrUGF0aCxcbiAgICAgIFwiLi5cIixcbiAgICApO1xuXG4gICAgLy8gQ2xlYW51cCBleGlzdGluZyBhc3NldHNcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb25zRm9sZGVyID0gcGF0aC5qb2luKGJhc2VQYXRoLCB0aGlzLm5hbWVkRm9sZGVyKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwcmV2aW91c1ZlcnNpb25zRm9sZGVyKSkge1xuICAgICAgZnMucm1TeW5jKHByZXZpb3VzVmVyc2lvbnNGb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIHRoaXMucGF0aCk7XG4gICAgY29uc3QgcGFja2FnaW5nID0gdGhpcy5wYWNrYWdpbmc7XG5cbiAgICBpZiAocGFja2FnaW5nLnByb2R1Y2VzRGlyZWN0b3J5KSB7XG4gICAgICBmcy5ta2RpclN5bmModGFyZ2V0UGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc3RhZ2luZy5zdGFnZSh0YXJnZXRQYXRoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
2
|
import { TerraformRemoteState } from "./terraform-remote-state";
|
|
3
3
|
import { TerraformElement } from "./terraform-element";
|
|
4
|
+
/**
|
|
5
|
+
* Base class for backends, which synthesize the `terraform.backend` block that sets where a stack stores its state.
|
|
6
|
+
*/
|
|
4
7
|
export declare abstract class TerraformBackend extends TerraformElement {
|
|
5
8
|
protected readonly name: string;
|
|
6
9
|
constructor(scope: Construct, id: string, name: string);
|