cdktn 0.25.0-pre.51 → 0.25.0-pre.53
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 +38 -19
- package/lib/annotations.js +1 -1
- package/lib/app.js +1 -1
- package/lib/aspect.js +1 -1
- package/lib/asset-hash.js +1 -1
- package/lib/asset-staging.d.ts +6 -3
- package/lib/asset-staging.js +10 -7
- package/lib/assets.js +4 -4
- package/lib/backends/azurerm-backend.js +2 -2
- package/lib/backends/cloud-backend.js +4 -4
- package/lib/backends/consul-backend.js +2 -2
- package/lib/backends/cos-backend.js +2 -2
- package/lib/backends/gcs-backend.js +2 -2
- package/lib/backends/http-backend.js +2 -2
- package/lib/backends/local-backend.js +2 -2
- package/lib/backends/oss-backend.js +2 -2
- package/lib/backends/pg-backend.js +2 -2
- package/lib/backends/remote-backend.js +4 -4
- package/lib/backends/s3-backend.js +2 -2
- package/lib/backends/swift-backend.js +2 -2
- package/lib/complex-computed-list.js +26 -26
- package/lib/errors.d.ts +1 -0
- package/lib/errors.js +6 -3
- package/lib/functions/provider-function.js +1 -1
- package/lib/functions/terraform-functions.generated.js +1 -1
- package/lib/ignore-strategy.js +1 -1
- package/lib/importable-resource.js +1 -1
- package/lib/manifest.js +1 -1
- package/lib/resource.js +1 -1
- package/lib/terraform-asset.d.ts +17 -1
- package/lib/terraform-asset.js +3 -2
- package/lib/terraform-backend.js +1 -1
- package/lib/terraform-count.js +1 -1
- package/lib/terraform-data-resource.js +1 -1
- package/lib/terraform-data-source.js +1 -1
- package/lib/terraform-element.js +1 -1
- package/lib/terraform-ephemeral-resource.js +1 -1
- package/lib/terraform-functions.js +1 -1
- package/lib/terraform-hcl-module.js +1 -1
- package/lib/terraform-iterator.js +5 -5
- package/lib/terraform-local.js +1 -1
- package/lib/terraform-module.js +1 -1
- package/lib/terraform-operators.js +1 -1
- package/lib/terraform-output.js +1 -1
- package/lib/terraform-provider.js +1 -1
- package/lib/terraform-provisioner.js +1 -1
- package/lib/terraform-remote-state.js +1 -1
- package/lib/terraform-resource-targets.js +1 -1
- package/lib/terraform-resource.js +1 -1
- package/lib/terraform-stack.js +1 -1
- package/lib/terraform-variable.js +2 -2
- package/lib/testing/index.js +1 -1
- package/lib/testing/matchers.js +1 -1
- package/lib/tokens/lazy.js +2 -2
- package/lib/tokens/resolvable.js +2 -2
- package/lib/tokens/string-fragments.js +1 -1
- package/lib/tokens/token.js +2 -2
- package/lib/upgrade-id-aspect.js +1 -1
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -1764,7 +1764,7 @@
|
|
|
1764
1764
|
},
|
|
1765
1765
|
"locationInModule": {
|
|
1766
1766
|
"filename": "src/asset-staging.ts",
|
|
1767
|
-
"line":
|
|
1767
|
+
"line": 502
|
|
1768
1768
|
},
|
|
1769
1769
|
"name": "stage",
|
|
1770
1770
|
"parameters": [
|
|
@@ -1988,7 +1988,7 @@
|
|
|
1988
1988
|
"kind": "enum",
|
|
1989
1989
|
"locationInModule": {
|
|
1990
1990
|
"filename": "src/terraform-asset.ts",
|
|
1991
|
-
"line":
|
|
1991
|
+
"line": 95
|
|
1992
1992
|
},
|
|
1993
1993
|
"members": [
|
|
1994
1994
|
{
|
|
@@ -22575,7 +22575,7 @@
|
|
|
22575
22575
|
},
|
|
22576
22576
|
"locationInModule": {
|
|
22577
22577
|
"filename": "src/terraform-asset.ts",
|
|
22578
|
-
"line":
|
|
22578
|
+
"line": 142
|
|
22579
22579
|
},
|
|
22580
22580
|
"parameters": [
|
|
22581
22581
|
{
|
|
@@ -22604,7 +22604,7 @@
|
|
|
22604
22604
|
"kind": "class",
|
|
22605
22605
|
"locationInModule": {
|
|
22606
22606
|
"filename": "src/terraform-asset.ts",
|
|
22607
|
-
"line":
|
|
22607
|
+
"line": 125
|
|
22608
22608
|
},
|
|
22609
22609
|
"name": "TerraformAsset",
|
|
22610
22610
|
"properties": [
|
|
@@ -22617,7 +22617,7 @@
|
|
|
22617
22617
|
"immutable": true,
|
|
22618
22618
|
"locationInModule": {
|
|
22619
22619
|
"filename": "src/terraform-asset.ts",
|
|
22620
|
-
"line":
|
|
22620
|
+
"line": 129
|
|
22621
22621
|
},
|
|
22622
22622
|
"name": "assetHash",
|
|
22623
22623
|
"overrides": "cdktn.IAsset",
|
|
@@ -22633,7 +22633,7 @@
|
|
|
22633
22633
|
"immutable": true,
|
|
22634
22634
|
"locationInModule": {
|
|
22635
22635
|
"filename": "src/terraform-asset.ts",
|
|
22636
|
-
"line":
|
|
22636
|
+
"line": 248
|
|
22637
22637
|
},
|
|
22638
22638
|
"name": "fileName",
|
|
22639
22639
|
"type": {
|
|
@@ -22648,7 +22648,7 @@
|
|
|
22648
22648
|
"immutable": true,
|
|
22649
22649
|
"locationInModule": {
|
|
22650
22650
|
"filename": "src/terraform-asset.ts",
|
|
22651
|
-
"line":
|
|
22651
|
+
"line": 235
|
|
22652
22652
|
},
|
|
22653
22653
|
"name": "path",
|
|
22654
22654
|
"type": {
|
|
@@ -22661,7 +22661,7 @@
|
|
|
22661
22661
|
},
|
|
22662
22662
|
"locationInModule": {
|
|
22663
22663
|
"filename": "src/terraform-asset.ts",
|
|
22664
|
-
"line":
|
|
22664
|
+
"line": 131
|
|
22665
22665
|
},
|
|
22666
22666
|
"name": "type",
|
|
22667
22667
|
"type": {
|
|
@@ -22681,7 +22681,7 @@
|
|
|
22681
22681
|
"kind": "interface",
|
|
22682
22682
|
"locationInModule": {
|
|
22683
22683
|
"filename": "src/terraform-asset.ts",
|
|
22684
|
-
"line":
|
|
22684
|
+
"line": 27
|
|
22685
22685
|
},
|
|
22686
22686
|
"name": "TerraformAssetConfig",
|
|
22687
22687
|
"properties": [
|
|
@@ -22693,7 +22693,7 @@
|
|
|
22693
22693
|
"immutable": true,
|
|
22694
22694
|
"locationInModule": {
|
|
22695
22695
|
"filename": "src/terraform-asset.ts",
|
|
22696
|
-
"line":
|
|
22696
|
+
"line": 29
|
|
22697
22697
|
},
|
|
22698
22698
|
"name": "path",
|
|
22699
22699
|
"type": {
|
|
@@ -22708,7 +22708,7 @@
|
|
|
22708
22708
|
"immutable": true,
|
|
22709
22709
|
"locationInModule": {
|
|
22710
22710
|
"filename": "src/terraform-asset.ts",
|
|
22711
|
-
"line":
|
|
22711
|
+
"line": 33
|
|
22712
22712
|
},
|
|
22713
22713
|
"name": "assetHash",
|
|
22714
22714
|
"optional": true,
|
|
@@ -22727,7 +22727,7 @@
|
|
|
22727
22727
|
"immutable": true,
|
|
22728
22728
|
"locationInModule": {
|
|
22729
22729
|
"filename": "src/terraform-asset.ts",
|
|
22730
|
-
"line":
|
|
22730
|
+
"line": 46
|
|
22731
22731
|
},
|
|
22732
22732
|
"name": "assetHashType",
|
|
22733
22733
|
"optional": true,
|
|
@@ -22746,7 +22746,7 @@
|
|
|
22746
22746
|
"immutable": true,
|
|
22747
22747
|
"locationInModule": {
|
|
22748
22748
|
"filename": "src/terraform-asset.ts",
|
|
22749
|
-
"line":
|
|
22749
|
+
"line": 92
|
|
22750
22750
|
},
|
|
22751
22751
|
"name": "bundler",
|
|
22752
22752
|
"optional": true,
|
|
@@ -22758,14 +22758,14 @@
|
|
|
22758
22758
|
"abstract": true,
|
|
22759
22759
|
"docs": {
|
|
22760
22760
|
"default": "- nothing is excluded",
|
|
22761
|
-
"remarks": "See\n`AssetStagingOptions.exclude` for the accepted forms. Both the computed\nhash and the staged/packed content honor the exclusion.",
|
|
22761
|
+
"remarks": "See\n`AssetStagingOptions.exclude` for the accepted forms. Both the computed\nhash and the staged/packed content honor the exclusion. Cannot be\ncombined with `ignoreStrategy`, which replaces this matcher rather than\nlayering on top of it.",
|
|
22762
22762
|
"stability": "experimental",
|
|
22763
22763
|
"summary": "Paths to exclude from the asset, relative to `path`."
|
|
22764
22764
|
},
|
|
22765
22765
|
"immutable": true,
|
|
22766
22766
|
"locationInModule": {
|
|
22767
22767
|
"filename": "src/terraform-asset.ts",
|
|
22768
|
-
"line":
|
|
22768
|
+
"line": 57
|
|
22769
22769
|
},
|
|
22770
22770
|
"name": "exclude",
|
|
22771
22771
|
"optional": true,
|
|
@@ -22788,7 +22788,7 @@
|
|
|
22788
22788
|
"immutable": true,
|
|
22789
22789
|
"locationInModule": {
|
|
22790
22790
|
"filename": "src/terraform-asset.ts",
|
|
22791
|
-
"line":
|
|
22791
|
+
"line": 79
|
|
22792
22792
|
},
|
|
22793
22793
|
"name": "extraHash",
|
|
22794
22794
|
"optional": true,
|
|
@@ -22796,6 +22796,25 @@
|
|
|
22796
22796
|
"primitive": "string"
|
|
22797
22797
|
}
|
|
22798
22798
|
},
|
|
22799
|
+
{
|
|
22800
|
+
"abstract": true,
|
|
22801
|
+
"docs": {
|
|
22802
|
+
"default": "- `exclude` is used with the built-in matcher",
|
|
22803
|
+
"remarks": "`!`-negation only takes effect if the strategy also sets\n`pruneExcludedDirectories: false`; otherwise an excluded directory is\npruned before its contents are ever checked against a re-include\npattern. See `IIgnoreStrategy.pruneExcludedDirectories`.",
|
|
22804
|
+
"stability": "experimental",
|
|
22805
|
+
"summary": "Exclusion matching, for callers that need `.gitignore` / `.dockerignore` parity (including `!`-negation) rather than the built-in exact-path / suffix / directory matcher. See `AssetStagingOptions.ignoreStrategy`."
|
|
22806
|
+
},
|
|
22807
|
+
"immutable": true,
|
|
22808
|
+
"locationInModule": {
|
|
22809
|
+
"filename": "src/terraform-asset.ts",
|
|
22810
|
+
"line": 71
|
|
22811
|
+
},
|
|
22812
|
+
"name": "ignoreStrategy",
|
|
22813
|
+
"optional": true,
|
|
22814
|
+
"type": {
|
|
22815
|
+
"fqn": "cdktn.IIgnoreStrategy"
|
|
22816
|
+
}
|
|
22817
|
+
},
|
|
22799
22818
|
{
|
|
22800
22819
|
"abstract": true,
|
|
22801
22820
|
"docs": {
|
|
@@ -22804,7 +22823,7 @@
|
|
|
22804
22823
|
"immutable": true,
|
|
22805
22824
|
"locationInModule": {
|
|
22806
22825
|
"filename": "src/terraform-asset.ts",
|
|
22807
|
-
"line":
|
|
22826
|
+
"line": 31
|
|
22808
22827
|
},
|
|
22809
22828
|
"name": "type",
|
|
22810
22829
|
"optional": true,
|
|
@@ -32706,6 +32725,6 @@
|
|
|
32706
32725
|
"symbolId": "src/testing/matchers:ToPlanSuccessfullyOptions"
|
|
32707
32726
|
}
|
|
32708
32727
|
},
|
|
32709
|
-
"version": "0.25.0-pre.
|
|
32710
|
-
"fingerprint": "
|
|
32728
|
+
"version": "0.25.0-pre.53",
|
|
32729
|
+
"fingerprint": "4pBVcGy6A0ygNKgZtR8CbVvKA+rZkQ0Y3SYbEdj2WEc="
|
|
32711
32730
|
}
|
package/lib/annotations.js
CHANGED
|
@@ -14,7 +14,7 @@ exports.DISABLE_STACK_TRACE_IN_METADATA = "@cdktf/disable_stack_trace_in_metadat
|
|
|
14
14
|
*/
|
|
15
15
|
class Annotations {
|
|
16
16
|
scope;
|
|
17
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Annotations", version: "0.25.0-pre.
|
|
17
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Annotations", version: "0.25.0-pre.53" };
|
|
18
18
|
/**
|
|
19
19
|
* Returns the annotations API for a construct scope.
|
|
20
20
|
* @param scope The scope
|
package/lib/app.js
CHANGED
|
@@ -51,7 +51,7 @@ exports.CONTEXT_ENV = "CDKTF_CONTEXT_JSON";
|
|
|
51
51
|
* Represents a cdktn application.
|
|
52
52
|
*/
|
|
53
53
|
class App extends constructs_1.Construct {
|
|
54
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.App", version: "0.25.0-pre.
|
|
54
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.App", version: "0.25.0-pre.53" };
|
|
55
55
|
/**
|
|
56
56
|
* The output directory into which resources will be synthesized.
|
|
57
57
|
*/
|
package/lib/aspect.js
CHANGED
|
@@ -8,7 +8,7 @@ const ASPECTS_SYMBOL = Symbol("cdktf-aspects");
|
|
|
8
8
|
* synthesis.
|
|
9
9
|
*/
|
|
10
10
|
class Aspects {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Aspects", version: "0.25.0-pre.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Aspects", version: "0.25.0-pre.53" };
|
|
12
12
|
/**
|
|
13
13
|
* Returns the `Aspects` object associated with a construct scope.
|
|
14
14
|
* @param scope The scope for which these aspects will apply.
|
package/lib/asset-hash.js
CHANGED
|
@@ -51,7 +51,7 @@ const errors_1 = require("./errors");
|
|
|
51
51
|
* staged copy; this is the identity half without the staging half.
|
|
52
52
|
*/
|
|
53
53
|
class AssetHash {
|
|
54
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AssetHash", version: "0.25.0-pre.
|
|
54
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AssetHash", version: "0.25.0-pre.53" };
|
|
55
55
|
/**
|
|
56
56
|
* Content hash of a file or directory, without staging it.
|
|
57
57
|
*
|
package/lib/asset-staging.d.ts
CHANGED
|
@@ -143,9 +143,12 @@ export declare class AssetStaging extends Construct implements IAsset {
|
|
|
143
143
|
/**
|
|
144
144
|
* Absolute path to the source the bundler should read.
|
|
145
145
|
*
|
|
146
|
-
* With no exclusions the resolved source is handed
|
|
147
|
-
*
|
|
148
|
-
*
|
|
146
|
+
* With no exclusions, or with a file source, the resolved source is handed
|
|
147
|
+
* over directly — a file has no children to filter, matching `hashSource`,
|
|
148
|
+
* which only ever applies the ignore strategy to a directory's entries and
|
|
149
|
+
* never to the root itself. Otherwise the excluded source tree is
|
|
150
|
+
* materialised into the scratch directory, so the bundler sees the same
|
|
151
|
+
* file set the hash was taken over.
|
|
149
152
|
*/
|
|
150
153
|
private filteredSource;
|
|
151
154
|
/**
|
package/lib/asset-staging.js
CHANGED
|
@@ -145,7 +145,7 @@ function registerStrandedScratch(dir) {
|
|
|
145
145
|
* describes.
|
|
146
146
|
*/
|
|
147
147
|
class AssetStaging extends constructs_1.Construct {
|
|
148
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AssetStaging", version: "0.25.0-pre.
|
|
148
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AssetStaging", version: "0.25.0-pre.53" };
|
|
149
149
|
sourcePath;
|
|
150
150
|
displayName;
|
|
151
151
|
ignoreStrategy;
|
|
@@ -177,7 +177,7 @@ class AssetStaging extends constructs_1.Construct {
|
|
|
177
177
|
this.hashCache = hashCacheFor(this.node.root);
|
|
178
178
|
this.bundler = props.bundler;
|
|
179
179
|
if (props.exclude?.length && props.ignoreStrategy) {
|
|
180
|
-
throw (0, errors_1.
|
|
180
|
+
throw (0, errors_1.assetStagingConflictingExcludeOptions)(this.displayName);
|
|
181
181
|
}
|
|
182
182
|
this.ignoreStrategy =
|
|
183
183
|
props.ignoreStrategy ?? new ignore_strategy_1.ExcludeIgnoreStrategy(props.exclude ?? []);
|
|
@@ -368,13 +368,16 @@ class AssetStaging extends constructs_1.Construct {
|
|
|
368
368
|
/**
|
|
369
369
|
* Absolute path to the source the bundler should read.
|
|
370
370
|
*
|
|
371
|
-
* With no exclusions the resolved source is handed
|
|
372
|
-
*
|
|
373
|
-
*
|
|
371
|
+
* With no exclusions, or with a file source, the resolved source is handed
|
|
372
|
+
* over directly — a file has no children to filter, matching `hashSource`,
|
|
373
|
+
* which only ever applies the ignore strategy to a directory's entries and
|
|
374
|
+
* never to the root itself. Otherwise the excluded source tree is
|
|
375
|
+
* materialised into the scratch directory, so the bundler sees the same
|
|
376
|
+
* file set the hash was taken over.
|
|
374
377
|
*/
|
|
375
378
|
filteredSource(scratch) {
|
|
376
379
|
const absoluteSource = path.resolve(this.sourcePath);
|
|
377
|
-
if (!this.hasExclusions) {
|
|
380
|
+
if (!this.hasExclusions || fs.statSync(absoluteSource).isFile()) {
|
|
378
381
|
return absoluteSource;
|
|
379
382
|
}
|
|
380
383
|
const input = path.join(scratch, "input");
|
|
@@ -458,4 +461,4 @@ class AssetStaging extends constructs_1.Construct {
|
|
|
458
461
|
}
|
|
459
462
|
}
|
|
460
463
|
exports.AssetStaging = AssetStaging;
|
|
461
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc3RhZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3NldC1zdGFnaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUFtRDtBQUNuRCwrQ0FBaUM7QUFDakMsdUNBQXlCO0FBQ3pCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IscUNBT2tCO0FBQ2xCLHFDQVdrQjtBQUNsQix5Q0FBb0Q7QUFDcEQsdURBQTJFO0FBQzNFLHFDQUFrRDtBQUVsRCxrRkFBa0Y7QUFDbEYsZ0VBQWdFO0FBQ2hFLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDO0FBRTVDOzs7O0dBSUc7QUFDVSxRQUFBLDJCQUEyQixHQUFHLHFCQUFxQixDQUFDO0FBRWpFOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUFtQyxDQUFDO0FBRXhFOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFnQjtJQUNwQyxJQUFJLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDOUMsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFL0I7O0dBRUc7QUFDSCxTQUFTLG9CQUFvQjtJQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLG1CQUFtQixFQUFFLENBQUM7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QUN4RSxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWMsQ0FBQyxPQUFlO1FBQ3BDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNLLGlCQUFpQixDQUFDLFFBQWdCLEVBQUUsVUFBa0I7UUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbEIsTUFBTSxFQUFFLFFBQVE7WUFDaEIsTUFBTSxFQUFFLFVBQVU7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE3V0gsb0NBOFdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7XG4gIEFzc2V0SGFzaFR5cGUsXG4gIEFzc2V0T3B0aW9ucyxcbiAgQnVuZGxlT3V0cHV0VHlwZSxcbiAgSUFzc2V0LFxuICBJQXNzZXRCdW5kbGVyLFxuICBJQXNzZXRQYWNrYWdpbmcsXG59IGZyb20gXCIuL2Fzc2V0c1wiO1xuaW1wb3J0IHtcbiAgYXNzZXRIYXNoQ29uZmxpY3RpbmdFeGNsdWRlT3B0aW9ucyxcbiAgYXNzZXRIYXNoQ29uZmxpY3RpbmdIYXNoVHlwZSxcbiAgYXNzZXRIYXNoSW52YWxpZCxcbiAgYXNzZXRIYXNoVHlwZUN1c3RvbVJlcXVpcmVzSGFzaCxcbiAgYXNzZXRIYXNoVHlwZVVua25vd24sXG4gIGFzc2V0U3RhZ2luZ0FscmVhZHlTdGFnZWQsXG4gIGFzc2V0U3RhZ2luZ0J1bmRsZXJEaXJlY3RvcnlPdXRwdXROZWVkc0RpcmVjdG9yeVBhY2thZ2luZyxcbiAgYXNzZXRTdGFnaW5nQnVuZGxlckZpbGVPdXRwdXROZWVkc0ZpbGVQYWNrYWdpbmcsXG4gIGFzc2V0U3RhZ2luZ0J1bmRsZXJPdXRwdXROb3REaXJlY3RvcnksXG4gIGFzc2V0U3RhZ2luZ0J1bmRsZXJPdXRwdXROb3RGaWxlLFxufSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IENBTk9OSUNBTF9BU1NFVF9IQVNIRVMgfSBmcm9tIFwiLi9mZWF0dXJlc1wiO1xuaW1wb3J0IHsgRXhjbHVkZUlnbm9yZVN0cmF0ZWd5LCBJSWdub3JlU3RyYXRlZ3kgfSBmcm9tIFwiLi9pZ25vcmUtc3RyYXRlZ3lcIjtcbmltcG9ydCB7IGNvcHlTeW5jLCBoYXNoUGF0aCB9IGZyb20gXCIuL3ByaXZhdGUvZnNcIjtcblxuLy8gQSByZXNvbHZlZCBoYXNoIGlzIHVzZWQgdmVyYmF0aW0gYXMgYSBwYXRoIHNlZ21lbnQgKHNlZSBgVGVycmFmb3JtQXNzZXQucGF0aGApLFxuLy8gc28gaXQgbWF5IG9ubHkgY29udGFpbiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFsd2F5cyBzYWZlIHRoZXJlLlxuY29uc3QgU0FGRV9BU1NFVF9IQVNIID0gL15bQS1aYS16MC05Xy4tXSskLztcblxuLyoqXG4gKiBDb250ZXh0IGtleSBmb3IgYSB2YWx1ZSBmb2xkZWQgaW50byBldmVyeSBjb21wdXRlZCBhc3NldCBoYXNoIGluIHRoZVxuICogY29uc3RydWN0IHRyZWUsIGFsb25nc2lkZSBgZXh0cmFIYXNoYC4gQSBidWxrIGNhY2hlLWJ1c3RpbmcgZXNjYXBlIGhhdGNoIOKAlFxuICogYGV4dHJhSGFzaGAgaXMgc2NvcGVkIHRvIG9uZSBhc3NldCwgdGhpcyBpcyBzY29wZWQgdG8gdGhlIHdob2xlIGFwcC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTU0VUX0hBU0hfU0FMVF9DT05URVhUX0tFWSA9IFwiY2RrdG46YXNzZXRIYXNoU2FsdFwiO1xuXG4vKipcbiAqIENhY2hlcyB0aGUgYmFzZSAocHJlIGBleHRyYUhhc2hgL3NhbHQpIGhhc2ggb2YgYSBgU09VUkNFYC9gT1VUUFVUYCB3YWxrLFxuICogc28gdGhhdCBtdWx0aXBsZSBgQXNzZXRTdGFnaW5nYCBpbnN0YW5jZXMgd2l0aCBpZGVudGljYWwgaW5wdXRzIOKAlCB0aGUgc2FtZVxuICogYXNzZXQgcmVmZXJlbmNlZCBmcm9tIG1vcmUgdGhhbiBvbmUgcmVzb3VyY2Ugb3Igc3RhY2sg4oCUIGhhc2ggdGhlIHNvdXJjZVxuICogdHJlZSBvbmNlIHBlciBzeW50aCBpbnN0ZWFkIG9mIG9uY2UgcGVyIHJlZmVyZW5jZS5cbiAqXG4gKiBLZXllZCBwZXIgY29uc3RydWN0LXRyZWUgcm9vdCAodGhlIGBBcHBgKSByYXRoZXIgdGhhbiBhdCBtb2R1bGUgc2NvcGU6IGFuXG4gKiBBcHAgaW5zdGFuY2UgbGl2ZXMgZXhhY3RseSBhcyBsb25nIGFzIG9uZSBzeW50aCwgc28gYSBsb25nLXJ1bm5pbmcgcHJvY2Vzc1xuICogdGhhdCBzeW50aHMgcmVwZWF0ZWRseSBhZ2FpbnN0IGNoYW5naW5nIGZpbGVzIChlLmcuIGBjZGt0biB3YXRjaGApIGFsd2F5c1xuICogZ2V0cyBhIGZyZXNoIGNhY2hlIGluc3RlYWQgb2YgYSBzdGFsZSBoYXNoIGZyb20gYSBwcmV2aW91cyBzeW50aC5cbiAqL1xuY29uc3QgaGFzaENhY2hlc0J5Um9vdCA9IG5ldyBXZWFrTWFwPElDb25zdHJ1Y3QsIE1hcDxzdHJpbmcsIHN0cmluZz4+KCk7XG5cbi8qKlxuICogVGhlIGhhc2ggY2FjaGUgc2NvcGVkIHRvIGEgY29uc3RydWN0LXRyZWUgcm9vdCwgY3JlYXRlZCBvbiBmaXJzdCB1c2UuXG4gKlxuICogU2VlIHtAbGluayBoYXNoQ2FjaGVzQnlSb290fSBmb3Igd2h5IHRoZSBjYWNoZSBpcyBzY29wZWQgcGVyIHJvb3QuXG4gKi9cbmZ1bmN0aW9uIGhhc2hDYWNoZUZvcihyb290OiBJQ29uc3RydWN0KTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIGxldCBjYWNoZSA9IGhhc2hDYWNoZXNCeVJvb3QuZ2V0KHJvb3QpO1xuICBpZiAoIWNhY2hlKSB7XG4gICAgY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgaGFzaENhY2hlc0J5Um9vdC5zZXQocm9vdCwgY2FjaGUpO1xuICB9XG4gIHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBFYWdlci1idWlsZCBzY3JhdGNoIGRpcmVjdG9yaWVzIGF3YWl0aW5nIGNsZWFudXAsIHN3ZXB0IG9uIHByb2Nlc3MgZXhpdCBvclxuICogYW4gaW50ZXJydXB0aW5nIHNpZ25hbC5cbiAqXG4gKiBBbiBgT1VUUFVUYC1oYXNoIGJ1aWxkIHJ1bnMgaW4gdGhlIGNvbnN0cnVjdG9yIGJ1dCBpcyBub3JtYWxseSB0b3JuIGRvd24gaW5cbiAqIGBzdGFnZSgpYC4gV2hlbiB0aGUgYXNzZXQncyBzdGFjayBpcyBub3Qgc3ludGhlc2l6ZWQgdGhpcyBwYXNzLCBgc3RhZ2UoKWBcbiAqIG5ldmVyIHJ1bnMsIHNvIHRoZSBzd2VlcCByZWNsYWltcyB3aGF0IGNhbiBiZSBsYXJnZSB0cmVlcyAoYG5vZGVfbW9kdWxlc2AsXG4gKiBidWlsZCBjYWNoZXMpIHRoYXQgYG9zLnRtcGRpcigpYCBkb2VzIG5vdCBjbGVhciByZWxpYWJseS5cbiAqL1xuY29uc3Qgc3RyYW5kZWRTY3JhdGNoRGlycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xubGV0IGV4aXRTd2VlcEluc3RhbGxlZCA9IGZhbHNlO1xuXG4vKipcbiAqIFN5bmNocm9ub3VzbHkgcmVtb3ZlIGV2ZXJ5IHN0aWxsLXJlZ2lzdGVyZWQgc2NyYXRjaCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIHN3ZWVwU3RyYW5kZWRTY3JhdGNoKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHN0cmF5IG9mIHN0cmFuZGVkU2NyYXRjaERpcnMpIHtcbiAgICB0cnkge1xuICAgICAgZnMucm1TeW5jKHN0cmF5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBCZXN0LWVmZm9ydCBvbiB0aGUgd2F5IG91dDsgbm90aGluZyB1c2VmdWwgdG8gZG8gaWYgaXQgZmFpbHMuXG4gICAgfVxuICB9XG4gIHN0cmFuZGVkU2NyYXRjaERpcnMuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBUcmFjayBhIHNjcmF0Y2ggZGlyZWN0b3J5IGZvciByZW1vdmFsIGlmIGl0IHN1cnZpdmVzIHRvIHByb2Nlc3MgZXhpdC5cbiAqXG4gKiBgZXhpdGAgYWxvbmUgbWlzc2VzIGEgQ3RybC1DIG9yIGEgYGtpbGxgIGR1cmluZyBzeW50aCDigJQgZXhhY3RseSB3aGVuIHRoZVxuICogbGFyZ2VzdCB0cmVlcyAoYG5vZGVfbW9kdWxlc2AsIGJ1aWxkIGNhY2hlcykgYXJlIGxlZnQgYmVoaW5kIOKAlCBiZWNhdXNlIE5vZGVcbiAqIGRvZXMgbm90IHJ1biBgZXhpdGAgaGFuZGxlcnMgb24gYFNJR0lOVGAvYFNJR1RFUk1gLiBUaGUgc2lnbmFsIGhhbmRsZXJzXG4gKiBzd2VlcCwgdGhlbiByZS1yYWlzZSB0aGUgc2lnbmFsIHNvIGFueSBvdGhlciBsaXN0ZW5lcnMgKHRoZSBDTEkncyBvd24pIHN0aWxsXG4gKiBydW4sIG9yIHRoZSBkZWZhdWx0IGRpc3Bvc2l0aW9uIHRlcm1pbmF0ZXMgdGhlIHByb2Nlc3MgaWYgdGhlcmUgYXJlIG5vbmUuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyU3RyYW5kZWRTY3JhdGNoKGRpcjogc3RyaW5nKTogdm9pZCB7XG4gIHN0cmFuZGVkU2NyYXRjaERpcnMuYWRkKGRpcik7XG4gIGlmICghZXhpdFN3ZWVwSW5zdGFsbGVkKSB7XG4gICAgZXhpdFN3ZWVwSW5zdGFsbGVkID0gdHJ1ZTtcbiAgICAvLyBgZXhpdGAgaGFuZGxlcnMgbXVzdCBiZSBzeW5jaHJvbm91czsgYHJtU3luY2AgaXMuXG4gICAgcHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCBzd2VlcFN0cmFuZGVkU2NyYXRjaCk7XG4gICAgZm9yIChjb25zdCBzaWduYWwgb2YgW1wiU0lHSU5UXCIsIFwiU0lHVEVSTVwiXSBhcyBjb25zdCkge1xuICAgICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICBzd2VlcFN0cmFuZGVkU2NyYXRjaCgpO1xuICAgICAgICAvLyBSZS1yYWlzZSBzbyB0aGUgc2lnbmFsIGlzIG5vdCBzd2FsbG93ZWQuIGBwcm9jZXNzLm9uY2VgIGhhcyBhbHJlYWR5XG4gICAgICAgIC8vIHJlbW92ZWQgdGhpcyBsaXN0ZW5lciwgc28gdGhlIHJlLXJhaXNlIHJlYWNoZXMgd2hhdGV2ZXIgZWxzZSBpc1xuICAgICAgICAvLyByZWdpc3RlcmVkIOKAlCB0aGUgQ0xJJ3Mgb3duIFNJR0lOVC9TSUdURVJNIGhhbmRsZXJzIOKAlCBvciwgaWYgbm90aGluZ1xuICAgICAgICAvLyBpcywgdGhlIGRlZmF1bHQgZGlzcG9zaXRpb24gdGhhdCB0ZXJtaW5hdGVzIHRoZSBwcm9jZXNzLiBSZW1vdmluZ1xuICAgICAgICAvLyBvdGhlciBsaXN0ZW5lcnMgaGVyZSB3b3VsZCBkaXNjYXJkIGV4YWN0bHkgdGhvc2UgdGhlIGFwcCByZWxpZXMgb24uXG4gICAgICAgIHByb2Nlc3Mua2lsbChwcm9jZXNzLnBpZCwgc2lnbmFsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBBc3NldFN0YWdpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0U3RhZ2luZ09wdGlvbnMgZXh0ZW5kcyBBc3NldE9wdGlvbnMge1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUgb3IgZGlyZWN0b3J5LiBSZXNvbHZpbmcgYSByZWxhdGl2ZSBwYXRoXG4gICAqIGFnYWluc3QgYGNka3RmLmpzb25gIGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogSG93IHRoZSBzdGFnZWQgcmVzdWx0IGlzIHByb2R1Y2VkIGFuZCBzaGFwZWQuIFRoZSBjYWxsZXIgZGVjaWRlcyB0aGlzXG4gICAqIChlLmcuIGZyb20gaXRzIG93biBgQXNzZXRUeXBlYCkg4oCUIGBBc3NldFN0YWdpbmdgIG5ldmVyIGluZmVycyBvciBjaGFuZ2VzXG4gICAqIGl0IGJhc2VkIG9uIGBleGNsdWRlYC9gZXh0cmFIYXNoYC5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2luZzogSUFzc2V0UGFja2FnaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRocyB0byBleGNsdWRlLCByZWxhdGl2ZSB0byBgc291cmNlUGF0aGAuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXG4gICAqIGBpZ25vcmVTdHJhdGVneWAsIHdoaWNoIHJlcGxhY2VzIHRoaXMgbWF0Y2hlciByYXRoZXIgdGhhbiBsYXllcmluZyBvblxuICAgKiB0b3Agb2YgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90aGluZyBpcyBleGNsdWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFeGNsdXNpb24gbWF0Y2hpbmcsIGZvciBjYWxsZXJzIHRoYXQgbmVlZCBgLmdpdGlnbm9yZWAgLyBgLmRvY2tlcmlnbm9yZWBcbiAgICogcGFyaXR5IHJhdGhlciB0aGFuIHRoZSBidWlsdC1pbiBleGFjdC1wYXRoIC8gc3VmZml4IC8gZGlyZWN0b3J5IG1hdGNoZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYGV4Y2x1ZGVgIGlzIHVzZWQgd2l0aCB0aGUgYnVpbHQtaW4gbWF0Y2hlclxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlU3RyYXRlZ3k/OiBJSWdub3JlU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIEV4dHJhIGluZm9ybWF0aW9uIHRvIGZvbGQgaW50byB0aGUgaGFzaCAoZS5nLiBidWlsZCBpbnN0cnVjdGlvbnMgYW5kXG4gICAqIG90aGVyIGlucHV0cykuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXh0cmEgaGFzaFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFIYXNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGJ1bmRsZXIgdGhhdCBidWlsZHMgdGhlIHNvdXJjZSBpbnRvIGFuIGFydGlmYWN0IGJlZm9yZSBzdGFnaW5nLlxuICAgKlxuICAgKiBVbmRlciB0aGUgZGVmYXVsdCBgU09VUkNFYCBoYXNoaW5nIHRoZSBidWlsZCBpcyBkZWZlcnJlZCB0byBgc3RhZ2UoKWAgYW5kXG4gICAqIHN0YXlzIHNraXBwYWJsZTsgYE9VVFBVVGAgaGFzaGluZyBidWlsZHMgZWFnZXJseSBhdCBjb25zdHJ1Y3Rpb24gdGltZSB0b1xuICAgKiBoYXNoIHRoZSBhcnRpZmFjdCwgZm9yZ29pbmcgc2tpcHBhYmlsaXR5LiBUaGUgYnVuZGxlcidzIGRlY2xhcmVkIG91dHB1dFxuICAgKiBzaGFwZSBtdXN0IG1hdGNoIHRoZSBwYWNrYWdpbmc6IGEgYEJ1bmRsZVJlc3VsdC5kaXJlY3RvcnlgIG5lZWRzIGFcbiAgICogZGlyZWN0b3J5LWFjY2VwdGluZyBwYWNrYWdpbmcsIGEgYEJ1bmRsZVJlc3VsdC5maWxlYCBhIHNpbmdsZS1maWxlIG9uZVxuICAgKiAoYEFzc2V0VHlwZS5GSUxFYCkuIFRoZSBtaXNtYXRjaCBpcyBjYXVnaHQgb25jZSB0aGUgYnVpbGQgcnVucy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgc291cmNlIGlzIHN0YWdlZCB2ZXJiYXRpbSwgd2l0aCBubyBidWlsZCBzdGVwXG4gICAqL1xuICByZWFkb25seSBidW5kbGVyPzogSUFzc2V0QnVuZGxlcjtcblxuICAvKipcbiAgICogSWRlbnRpZmllciB1c2VkIGluIGVycm9yIG1lc3NhZ2VzLCBzbyB0aGV5IG5hbWUgdGhlIHVzZXItZmFjaW5nIGNvbnN0cnVjdFxuICAgKiAoZS5nLiB0aGUgYFRlcnJhZm9ybUFzc2V0YCkgcmF0aGVyIHRoYW4gdGhpcyBpbnRlcm5hbCBzdGFnaW5nIGNoaWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBzdGFnaW5nIGNvbnN0cnVjdCdzIG93biBpZFxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYW4gYXNzZXQncyBpZGVudGl0eSBhbmQgc3RhZ2VzIGl0cyBjb250ZW50IHRvIGRpc2suXG4gKlxuICogVGhlIGhhc2ggaXMgYXZhaWxhYmxlIGltbWVkaWF0ZWx5IGFmdGVyIGNvbnN0cnVjdGlvbjsgdGhlIGZpbGVzeXN0ZW0gd3JpdGVcbiAqIGlzIGRlZmVycmVkIHRvIGBzdGFnZSgpYCwgdGhlIG9uZSB3aW5kb3cgd2hlcmUgaXQgaXMgc2FmZS4gSGFzaGluZyBpc1xuICogY2FjaGVkIHBlciBzeW50aCAoc2VlIHtAbGluayBoYXNoQ2FjaGVzQnlSb290fSkgc28gYW4gYXNzZXQgcmVmZXJlbmNlZCBmcm9tXG4gKiBzZXZlcmFsIHBsYWNlcyBpcyB3YWxrZWQgb25jZS4gV2l0aG91dCBhIGJ1bmRsZXIsIGBTT1VSQ0VgIGFuZCBgT1VUUFVUYCBib3RoXG4gKiBoYXNoIHRoZSBzb3VyY2U7IHdpdGggb25lIHRoZXkgZGl2ZXJnZSwgYXMgYEFzc2V0U3RhZ2luZ09wdGlvbnMuYnVuZGxlcmBcbiAqIGRlc2NyaWJlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0U3RhZ2luZyBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElBc3NldCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgaWdub3JlU3RyYXRlZ3k6IElJZ25vcmVTdHJhdGVneTtcbiAgcHJpdmF0ZSByZWFkb25seSBoYXNFeGNsdXNpb25zOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGhhc2hDYWNoZTogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBidW5kbGVyPzogSUFzc2V0QnVuZGxlcjtcblxuICAvKipcbiAgICogT3V0cHV0IG9mIGFuIGVhZ2VyIGBPVVRQVVRgLWhhc2ggYnVpbGQsIGNhcnJpZWQgdG8gYHN0YWdlKClgIGZvciByZXVzZS5cbiAgICpcbiAgICogVW5kZWZpbmVkIG9uIGV2ZXJ5IG90aGVyIHBhdGgsIHdoZXJlIHRoZSBidWlsZCBpcyBkZWZlcnJlZCBvciBhYnNlbnQuXG4gICAqL1xuICBwcml2YXRlIGVhZ2VyQnVpbGQ/OiB7XG4gICAgcmVhZG9ubHkgc2NyYXRjaDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHByb2R1Y2VkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgb3V0cHV0VHlwZTogQnVuZGxlT3V0cHV0VHlwZTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IG9uY2UgYHN0YWdlKClgIGhhcyBydW4sIHNvIGEgc2Vjb25kIGNhbGwgY2Fubm90IHJlYnVpbGQuIEFuIGVhZ2VyXG4gICAqIGBPVVRQVVRgIGJ1aWxkIGlzIGNhcHR1cmVkIGF0IGNvbnN0cnVjdGlvbiBhbmQgY29uc3VtZWQgYnkgdGhlIGZpcnN0XG4gICAqIGBzdGFnZSgpYDsgd2l0aG91dCB0aGlzIGd1YXJkIGEgc2Vjb25kIGNhbGwgd291bGQgZmFsbCB0aHJvdWdoIHRvIHRoZVxuICAgKiBkZWZlcnJlZCBidWlsZCBwYXRoIGFuZCBzdGFnZSBieXRlcyB0aGF0IG5vIGxvbmdlciBtYXRjaCB0aGUgaGFzaC5cbiAgICovXG4gIHByaXZhdGUgc3RhZ2VkID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2luZzogSUFzc2V0UGFja2FnaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNEaXJlY3Rvcnk6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBhc3NldEhhc2g6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFzc2V0U3RhZ2luZ09wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5zb3VyY2VQYXRoID0gcHJvcHMuc291cmNlUGF0aDtcbiAgICB0aGlzLmRpc3BsYXlOYW1lID0gcHJvcHMuZGlzcGxheU5hbWUgPz8gaWQ7XG4gICAgdGhpcy5wYWNrYWdpbmcgPSBwcm9wcy5wYWNrYWdpbmc7XG4gICAgdGhpcy5pc0RpcmVjdG9yeSA9IHByb3BzLnBhY2thZ2luZy5wcm9kdWNlc0RpcmVjdG9yeTtcbiAgICB0aGlzLmhhc2hDYWNoZSA9IGhhc2hDYWNoZUZvcih0aGlzLm5vZGUucm9vdCk7XG4gICAgdGhpcy5idW5kbGVyID0gcHJvcHMuYnVuZGxlcjtcblxuICAgIGlmIChwcm9wcy5leGNsdWRlPy5sZW5ndGggJiYgcHJvcHMuaWdub3JlU3RyYXRlZ3kpIHtcbiAgICAgIHRocm93IGFzc2V0SGFzaENvbmZsaWN0aW5nRXhjbHVkZU9wdGlvbnMoKTtcbiAgICB9XG4gICAgdGhpcy5pZ25vcmVTdHJhdGVneSA9XG4gICAgICBwcm9wcy5pZ25vcmVTdHJhdGVneSA/PyBuZXcgRXhjbHVkZUlnbm9yZVN0cmF0ZWd5KHByb3BzLmV4Y2x1ZGUgPz8gW10pO1xuICAgIC8vIEEgY3VzdG9tIHN0cmF0ZWd5IGlzIGFzc3VtZWQgdG8gZXhjbHVkZSBzb21ldGhpbmc7IHRoZSBidWlsdC1pbiBvbmUgb25seVxuICAgIC8vIGRvZXMgd2l0aCBhIG5vbi1lbXB0eSBgZXhjbHVkZWAuIERyaXZlcyB3aGV0aGVyIHRoZSBidW5kbGVyIGlzIGhhbmRlZCBhXG4gICAgLy8gbWF0ZXJpYWxpc2VkIGZpbHRlcmVkIGNvcHkgb3IgdGhlIHNvdXJjZSBkaXJlY3RseS5cbiAgICB0aGlzLmhhc0V4Y2x1c2lvbnMgPVxuICAgICAgcHJvcHMuaWdub3JlU3RyYXRlZ3kgIT09IHVuZGVmaW5lZCB8fCAhIXByb3BzLmV4Y2x1ZGU/Lmxlbmd0aDtcblxuICAgIC8vIEJ1bmRsZXIgb3V0cHV0IHNoYXBlIChkaXJlY3RvcnkgdnMgZmlsZSkgaXMgb25seSBrbm93biBvbmNlIGBidW5kbGVgXG4gICAgLy8gcnVucywgc28gaXRzIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcGFja2FnaW5nIGlzIGNoZWNrZWQgdGhlbiwgbm90IGhlcmVcbiAgICAvLyDigJQgYSBkZWZlcnJlZCBTT1VSQ0UgYnVpbGQgaGFzIG5vdCBydW4geWV0IGF0IGNvbnN0cnVjdGlvbiB0aW1lLlxuXG4gICAgdGhpcy5hc3NldEhhc2ggPSB0aGlzLnJlc29sdmVBc3NldEhhc2godGhpcy5kaXNwbGF5TmFtZSwgcHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQXNzZXRIYXNoKGlkOiBzdHJpbmcsIHByb3BzOiBBc3NldFN0YWdpbmdPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGFzc2V0SGFzaCwgYXNzZXRIYXNoVHlwZSwgZXh0cmFIYXNoIH0gPSBwcm9wcztcblxuICAgIGlmIChhc3NldEhhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICBhc3NldEhhc2hUeXBlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYXNzZXRIYXNoVHlwZSAhPT0gQXNzZXRIYXNoVHlwZS5DVVNUT01cbiAgICAgICkge1xuICAgICAgICB0aHJvdyBhc3NldEhhc2hDb25mbGljdGluZ0hhc2hUeXBlKGlkKTtcbiAgICAgIH1cbiAgICAgIGlmICghU0FGRV9BU1NFVF9IQVNILnRlc3QoYXNzZXRIYXNoKSkge1xuICAgICAgICB0aHJvdyBhc3NldEhhc2hJbnZhbGlkKGlkLCBhc3NldEhhc2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SGFzaDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFzc2V0SGFzaFR5cGUpIHtcbiAgICAgIGNhc2UgQXNzZXRIYXNoVHlwZS5DVVNUT006XG4gICAgICAgIHRocm93IGFzc2V0SGFzaFR5cGVDdXN0b21SZXF1aXJlc0hhc2goaWQpO1xuICAgICAgY2FzZSBBc3NldEhhc2hUeXBlLlNPVVJDRTpcbiAgICAgIGNhc2UgQXNzZXRIYXNoVHlwZS5PVVRQVVQ6XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBjb25zdCBjYW5vbmljYWwgPSAhIXRoaXMubm9kZS50cnlHZXRDb250ZXh0KENBTk9OSUNBTF9BU1NFVF9IQVNIRVMpO1xuICAgICAgICBjb25zdCBhcmNoaXZlID0gdGhpcy5wYWNrYWdpbmcub21pdHNEaXJlY3RvcnlFbnRyaWVzO1xuICAgICAgICBjb25zdCBzYWx0ID0gdGhpcy5ub2RlLnRyeUdldENvbnRleHQoQVNTRVRfSEFTSF9TQUxUX0NPTlRFWFRfS0VZKTtcblxuICAgICAgICAvLyBPVVRQVVQgaGFzaGVzIHRoZSBidWlsdCBhcnRpZmFjdCBhbmQgc28gbXVzdCBidWlsZCBlYWdlcmx5LCBmb3Jnb2luZ1xuICAgICAgICAvLyBza2lwcGFiaWxpdHkgKCMzODApOyBldmVyeSBvdGhlciBjYXNlIGhhc2hlcyB0aGUgc291cmNlIHZlcmJhdGltLlxuICAgICAgICBjb25zdCBiYXNlSGFzaCA9XG4gICAgICAgICAgdGhpcy5idW5kbGVyICYmIGFzc2V0SGFzaFR5cGUgPT09IEFzc2V0SGFzaFR5cGUuT1VUUFVUXG4gICAgICAgICAgICA/IHRoaXMuaGFzaE91dHB1dChjYW5vbmljYWwsIGFyY2hpdmUpXG4gICAgICAgICAgICA6IHRoaXMuaGFzaFNvdXJjZShjYW5vbmljYWwsIGFyY2hpdmUpO1xuXG4gICAgICAgIC8vIEZvciBTT1VSQ0UsIGZvbGRpbmcgaW4gYnVuZGxlcktleSBpcyB0aGUgb25seSB3YXkgYnVpbGQgaWRlbnRpdHlcbiAgICAgICAgLy8gcmVhY2hlcyB0aGUgaGFzaCwgc2luY2UgdGhlIHNvdXJjZSB0cmVlIGNhbm5vdCBzZWUgdGhlIGJ1aWxkLlxuICAgICAgICBjb25zdCBidW5kbGVyS2V5ID0gdGhpcy5idW5kbGVyPy5idW5kbGVyS2V5O1xuICAgICAgICBpZiAoIWV4dHJhSGFzaCAmJiAhc2FsdCAmJiAhYnVuZGxlcktleSkge1xuICAgICAgICAgIHJldHVybiBiYXNlSGFzaDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2xkZWQgPSBjcnlwdG8uY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUoYmFzZUhhc2gpO1xuICAgICAgICBpZiAoZXh0cmFIYXNoKSB7XG4gICAgICAgICAgZm9sZGVkLnVwZGF0ZShleHRyYUhhc2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidW5kbGVyS2V5KSB7XG4gICAgICAgICAgZm9sZGVkLnVwZGF0ZShidW5kbGVyS2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FsdCkge1xuICAgICAgICAgIGZvbGRlZC51cGRhdGUoU3RyaW5nKHNhbHQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sZGVkLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCAzMikudG9VcHBlckNhc2UoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIE91dC1vZi1yYW5nZSB2YWx1ZSBmcm9tIGEgbm9uLVR5cGVTY3JpcHQgY2FsbGVyLlxuICAgICAgICB0aHJvdyBhc3NldEhhc2hUeXBlVW5rbm93bihpZCwgYXNzZXRIYXNoVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhc2ggdGhlIHNvdXJjZSB0cmVlLCBob25vcmluZyB0aGUgaWdub3JlIHN0cmF0ZWd5LlxuICAgKlxuICAgKiBDYWNoZWQgcGVyIHN5bnRoIHNvIGFuIGFzc2V0IHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaXMgd2Fsa2VkIG9uY2UuXG4gICAqL1xuICBwcml2YXRlIGhhc2hTb3VyY2UoY2Fub25pY2FsOiBib29sZWFuLCBhcmNoaXZlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAvLyBPbmx5IGNhY2hlYWJsZSB3aGVuIHRoZSBpZ25vcmUgc3RyYXRlZ3kgY2FuIHN1bW1hcml6ZSBpdHMgYmVoYXZpb3JcbiAgICAvLyBhcyBhIHN0cmluZyAoc2VlIGBJSWdub3JlU3RyYXRlZ3kuY2FjaGVLZXlgKTsgb3RoZXJ3aXNlIGV2ZXJ5IGNhbGxcbiAgICAvLyBpcyB0cmVhdGVkIGFzIHVuaXF1ZS5cbiAgICBjb25zdCBjYWNoZUtleSA9XG4gICAgICB0aGlzLmlnbm9yZVN0cmF0ZWd5LmNhY2hlS2V5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzb3VyY2VQYXRoOiB0aGlzLnNvdXJjZVBhdGgsXG4gICAgICAgICAgICBjYW5vbmljYWwsXG4gICAgICAgICAgICBhcmNoaXZlLFxuICAgICAgICAgICAgaWdub3JlOiB0aGlzLmlnbm9yZVN0cmF0ZWd5LmNhY2hlS2V5LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY2FjaGVkID0gY2FjaGVLZXkgPyB0aGlzLmhhc2hDYWNoZS5nZXQoY2FjaGVLZXkpIDogdW5kZWZpbmVkO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNoID0gaGFzaFBhdGgodGhpcy5zb3VyY2VQYXRoLCB7XG4gICAgICBjYW5vbmljYWwsXG4gICAgICBhcmNoaXZlLFxuICAgICAgc2hvdWxkRXhjbHVkZTogKHJlbGF0aXZlUGF0aCwgaXNEaXJlY3RvcnkpID0+XG4gICAgICAgIHRoaXMuaWdub3JlU3RyYXRlZ3kuaWdub3Jlcyh7IHJlbGF0aXZlUGF0aCwgaXNEaXJlY3RvcnkgfSksXG4gICAgICBkZXNjZW5kSW50b0V4Y2x1ZGVkRGlyZWN0b3JpZXM6XG4gICAgICAgIHRoaXMuaWdub3JlU3RyYXRlZ3kucHJ1bmVFeGNsdWRlZERpcmVjdG9yaWVzID09PSBmYWxzZSxcbiAgICB9KTtcbiAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgIHRoaXMuaGFzaENhY2hlLnNldChjYWNoZUtleSwgaGFzaCk7XG4gICAgfVxuICAgIHJldHVybiBoYXNoO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBidW5kbGVyJ3Mgb3V0cHV0IGVhZ2VybHkgYW5kIGhhc2ggdGhlIGJ1aWx0IGFydGlmYWN0LlxuICAgKlxuICAgKiBUaGUgb3V0cHV0IGlzIHN0YXNoZWQgZm9yIGBzdGFnZSgpYCB0byByZXVzZSwgc28gdGhlIGJ1aWxkIGlzIG5vdFxuICAgKiByZXBlYXRlZC4gSXQgaXMgaGFzaGVkIHZlcmJhdGltOiBgZXhjbHVkZWAgZmlsdGVycyB0aGUgc291cmNlIGEgYnVuZGxlclxuICAgKiByZWFkcywgbm90IHRoZSBhcnRpZmFjdCBpdCBwcm9kdWNlcy5cbiAgICovXG4gIHByaXZhdGUgaGFzaE91dHB1dChjYW5vbmljYWw6IGJvb2xlYW4sIGFyY2hpdmU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNjcmF0Y2ggPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY2RrdG4tYnVuZGxlLVwiKSk7XG4gICAgLy8gUmVnaXN0ZXJlZCBzbyB0aGUgZXhpdCBzd2VlcCByZWNsYWltcyBpdCBpZiBzdGFnZSgpIG5ldmVyIHJ1bnMgZm9yIGFuXG4gICAgLy8gdW5zeW50aGVzaXplZCBzdGFjazsgc3RhZ2UoKSByZW1vdmVzIGFuZCB1bnJlZ2lzdGVycyBpdCBvdGhlcndpc2UuXG4gICAgcmVnaXN0ZXJTdHJhbmRlZFNjcmF0Y2goc2NyYXRjaCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcHJvZHVjZWQsIG91dHB1dFR5cGUgfSA9IHRoaXMucnVuQnVuZGxlKHNjcmF0Y2gpO1xuICAgICAgdGhpcy5lYWdlckJ1aWxkID0geyBzY3JhdGNoLCBwcm9kdWNlZCwgb3V0cHV0VHlwZSB9O1xuICAgICAgLy8gQSBzaW5nbGUtZmlsZSBhcnRpZmFjdCBpcyBoYXNoZWQgYXMgYSBmaWxlIChubyBhcmNoaXZlIGZyYW1pbmcpOyBhXG4gICAgICAvLyBkaXJlY3RvcnkgaXMgaGFzaGVkIGFzIHRoZSBwYWNrYWdlZCB0cmVlIHdvdWxkIGJlLlxuICAgICAgY29uc3QgaXNGaWxlID0gb3V0cHV0VHlwZSA9PT0gQnVuZGxlT3V0cHV0VHlwZS5GSUxFO1xuICAgICAgcmV0dXJuIGhhc2hQYXRoKHByb2R1Y2VkLCB7IGNhbm9uaWNhbCwgYXJjaGl2ZTogYXJjaGl2ZSAmJiAhaXNGaWxlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFRoZSBidWlsZCBmYWlsZWQgYmVmb3JlIGBlYWdlckJ1aWxkYCB3YXMgc2V0LCBzbyBzdGFnZSgpIGNhbiBuZXZlclxuICAgICAgLy8gcmVhY2ggdGhpcyBzY3JhdGNoIHRvIGNsZWFuIGl0LiBSZWNsYWltIGl0IG5vdyByYXRoZXIgdGhhbiBsZWF2aW5nIGFcbiAgICAgIC8vIHBvdGVudGlhbGx5IGxhcmdlIHRyZWUgKG5vZGVfbW9kdWxlcywgYnVpbGQgY2FjaGVzKSB0byB0aGUgZXhpdCBzd2VlcC5cbiAgICAgIHRoaXMuY2xlYW51cFNjcmF0Y2goc2NyYXRjaCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGJ1bmRsZXIgYWdhaW5zdCB0aGUgZmlsdGVyZWQgc291cmNlIGFuZCByZXR1cm4gaXRzIG91dHB1dC5cbiAgICpcbiAgICogVGhlIGJ1bmRsZXIgaXMgaGFuZGVkIGFuIGFic29sdXRlIGBzb3VyY2VgIChpdHMgY3dkIGlzIGl0cyBvd24sIHNvIGFcbiAgICogcmVsYXRpdmUgcGF0aCB3b3VsZCByZXNvbHZlIGVsc2V3aGVyZSkgdGhhdCBoYXMgYWxyZWFkeSBoYWQgYGV4Y2x1ZGVgXG4gICAqIGFwcGxpZWQuIE1hdGVyaWFsaXNpbmcgdGhlIGZpbHRlcmVkIGlucHV0IGhlcmUgaXMgd2hhdCBtYWtlcyB0aGUgYnVuZGxlclxuICAgKiByZWFkIGV4YWN0bHkgdGhlIHRyZWUgdGhlIGhhc2ggd2FzIHRha2VuIG92ZXIsIHdoaWNoIGEgcmF3IHNvdXJjZVxuICAgKiBoYW5kLW9mZiB3b3VsZCBub3QsIHNpbmNlIGBoYXNoU291cmNlYCBob25vdXJzIGBleGNsdWRlYC5cbiAgICovXG4gIHByaXZhdGUgcnVuQnVuZGxlKHNjcmF0Y2g6IHN0cmluZyk6IHtcbiAgICBwcm9kdWNlZDogc3RyaW5nO1xuICAgIG91dHB1dFR5cGU6IEJ1bmRsZU91dHB1dFR5cGU7XG4gIH0ge1xuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGguam9pbihzY3JhdGNoLCBcIm91dHB1dFwiKTtcbiAgICBmcy5ta2RpclN5bmMob3V0cHV0RGlyKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmJ1bmRsZXIhLmJ1bmRsZSh7XG4gICAgICBzb3VyY2U6IHRoaXMuZmlsdGVyZWRTb3VyY2Uoc2NyYXRjaCksXG4gICAgICBvdXRwdXREaXIsXG4gICAgfSk7XG5cbiAgICAvLyBBIGJhcmUgYnVuZGxlciB0aGF0IGRlY2xpbmVzIGhhcyBub3RoaW5nIHRvIGZhbGwgYmFjayB0byDigJQgZGVjbGluaW5nIGlzXG4gICAgLy8gb25seSBtZWFuaW5nZnVsIGluc2lkZSBhIENoYWluQnVuZGxlciwgd2hpY2ggY29uc3VtZXMgaXQgYmVmb3JlIGl0XG4gICAgLy8gcmVhY2hlcyBoZXJlLiBBIG5vbi1kZWNsaW5lZCByZXN1bHQgYWx3YXlzIGNhcnJpZXMgYSBwYXRoIGFuZCBzaGFwZS5cbiAgICBpZiAoXG4gICAgICByZXN1bHQuaXNEZWNsaW5lZCB8fFxuICAgICAgcmVzdWx0LnBhdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcmVzdWx0Lm91dHB1dFR5cGUgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgYXNzZXRTdGFnaW5nQnVuZGxlck91dHB1dE5vdERpcmVjdG9yeShcbiAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSxcbiAgICAgICAgU3RyaW5nKHJlc3VsdC5wYXRoKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZHVjZWQgPSByZXN1bHQucGF0aDtcbiAgICB0aGlzLnZhbGlkYXRlT3V0cHV0U2hhcGUocHJvZHVjZWQsIHJlc3VsdC5vdXRwdXRUeXBlKTtcbiAgICByZXR1cm4geyBwcm9kdWNlZCwgb3V0cHV0VHlwZTogcmVzdWx0Lm91dHB1dFR5cGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWplY3QgYSBidW5kbGVyIHJlc3VsdCB3aG9zZSBkZWNsYXJlZCBzaGFwZSBkb2VzIG5vdCBtYXRjaCB3aGF0IGlzIG9uXG4gICAqIGRpc2ssIG9yIGRvZXMgbm90IG1hdGNoIHRoZSBwYWNrYWdpbmcuXG4gICAqXG4gICAqIENhdGNoaW5nIHRoZSBtaXNtYXRjaCBoZXJlIHR1cm5zIGFuIG9wYXF1ZSBFSVNESVIvRVBFUk0gYXQgcGFjayB0aW1lIGludG9cbiAgICogYSBjbGVhciBlcnJvciBuYW1pbmcgdGhlIHBhY2thZ2luZyB0aGUgYnVuZGxlcidzIG91dHB1dCBzaGFwZSBuZWVkcy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVPdXRwdXRTaGFwZShcbiAgICBwcm9kdWNlZDogc3RyaW5nLFxuICAgIG91dHB1dFR5cGU6IEJ1bmRsZU91dHB1dFR5cGUsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMocHJvZHVjZWQpO1xuICAgIGNvbnN0IHN0YXQgPSBleGlzdHMgPyBmcy5zdGF0U3luYyhwcm9kdWNlZCkgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3V0cHV0VHlwZSA9PT0gQnVuZGxlT3V0cHV0VHlwZS5GSUxFKSB7XG4gICAgICBpZiAoIXN0YXQ/LmlzRmlsZSgpKSB7XG4gICAgICAgIHRocm93IGFzc2V0U3RhZ2luZ0J1bmRsZXJPdXRwdXROb3RGaWxlKHRoaXMuZGlzcGxheU5hbWUsIHByb2R1Y2VkKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zdGFnZXNTaW5nbGVGaWxlKSB7XG4gICAgICAgIHRocm93IGFzc2V0U3RhZ2luZ0J1bmRsZXJGaWxlT3V0cHV0TmVlZHNGaWxlUGFja2FnaW5nKHRoaXMuZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghc3RhdD8uaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgYXNzZXRTdGFnaW5nQnVuZGxlck91dHB1dE5vdERpcmVjdG9yeSh0aGlzLmRpc3BsYXlOYW1lLCBwcm9kdWNlZCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5wYWNrYWdpbmcuYWNjZXB0c0RpcmVjdG9yeVNvdXJjZSkge1xuICAgICAgdGhyb3cgYXNzZXRTdGFnaW5nQnVuZGxlckRpcmVjdG9yeU91dHB1dE5lZWRzRGlyZWN0b3J5UGFja2FnaW5nKFxuICAgICAgICB0aGlzLmRpc3BsYXlOYW1lLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGFja2FnaW5nIHN0YWdlcyBhIHNpbmdsZSBmaWxlIHZlcmJhdGltIChBc3NldFR5cGUuRklMRSkuXG4gICAqXG4gICAqIEEgdmVyYmF0aW0tZmlsZSBwYWNrYWdpbmcgbmVpdGhlciBwcm9kdWNlcyBhIGRpcmVjdG9yeSBub3IgcmVhZHMgb25lIGFzXG4gICAqIGl0cyBzb3VyY2UuIERlcml2ZWQgZnJvbSBleGlzdGluZyBgSUFzc2V0UGFja2FnaW5nYCBmbGFncyBzbyBvdXQtb2YtdHJlZVxuICAgKiBwYWNrYWdpbmdzIG5lZWQgbm8gbmV3IGludGVyZmFjZSBtZW1iZXIuXG4gICAqL1xuICBwcml2YXRlIGdldCBzdGFnZXNTaW5nbGVGaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5wYWNrYWdpbmcucHJvZHVjZXNEaXJlY3RvcnkgJiZcbiAgICAgICF0aGlzLnBhY2thZ2luZy5hY2NlcHRzRGlyZWN0b3J5U291cmNlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBzb3VyY2UgdGhlIGJ1bmRsZXIgc2hvdWxkIHJlYWQuXG4gICAqXG4gICAqIFdpdGggbm8gZXhjbHVzaW9ucyB0aGUgcmVzb2x2ZWQgc291cmNlIGlzIGhhbmRlZCBvdmVyIGRpcmVjdGx5LiBPdGhlcndpc2VcbiAgICogdGhlIGV4Y2x1ZGVkIHNvdXJjZSB0cmVlIGlzIG1hdGVyaWFsaXNlZCBpbnRvIHRoZSBzY3JhdGNoIGRpcmVjdG9yeSwgc29cbiAgICogdGhlIGJ1bmRsZXIgc2VlcyB0aGUgc2FtZSBmaWxlIHNldCB0aGUgaGFzaCB3YXMgdGFrZW4gb3Zlci5cbiAgICovXG4gIHByaXZhdGUgZmlsdGVyZWRTb3VyY2Uoc2NyYXRjaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBhYnNvbHV0ZVNvdXJjZSA9IHBhdGgucmVzb2x2ZSh0aGlzLnNvdXJjZVBhdGgpO1xuICAgIGlmICghdGhpcy5oYXNFeGNsdXNpb25zKSB7XG4gICAgICByZXR1cm4gYWJzb2x1dGVTb3VyY2U7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0ID0gcGF0aC5qb2luKHNjcmF0Y2gsIFwiaW5wdXRcIik7XG4gICAgZnMubWtkaXJTeW5jKGlucHV0KTtcbiAgICBjb3B5U3luYyhhYnNvbHV0ZVNvdXJjZSwgaW5wdXQsIHtcbiAgICAgIHNob3VsZEV4Y2x1ZGU6IChyZWxhdGl2ZVBhdGgsIGlzRGlyZWN0b3J5KSA9PlxuICAgICAgICB0aGlzLmlnbm9yZVN0cmF0ZWd5Lmlnbm9yZXMoeyByZWxhdGl2ZVBhdGgsIGlzRGlyZWN0b3J5IH0pLFxuICAgICAgZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzOlxuICAgICAgICB0aGlzLmlnbm9yZVN0cmF0ZWd5LnBydW5lRXhjbHVkZWREaXJlY3RvcmllcyA9PT0gZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWdlIHRoZSBhc3NldCdzIGNvbnRlbnQgdG8gYHRhcmdldFBhdGhgLlxuICAgKlxuICAgKiBDYWxsZWQgZnJvbSB0aGUgb3duaW5nIGNvbnN0cnVjdCdzIGBvblN5bnRoZXNpemVgIGhvb2suIFdpdGhvdXQgYSBidW5kbGVyXG4gICAqIHRoZSBzb3VyY2UgaXMgcGFja2FnZWQgdmVyYmF0aW07IHdpdGggb25lLCB0aGUgYnVuZGxlcidzIG91dHB1dCBpcywgYnVpbHRcbiAgICogZWFnZXJseSBmb3IgYE9VVFBVVGAgaGFzaGluZyBvciBkZWZlcnJlZCB0byBoZXJlIGZvciBgU09VUkNFYC5cbiAgICovXG4gIHB1YmxpYyBzdGFnZSh0YXJnZXRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBTdGFnZSBleGFjdGx5IG9uY2U6IGEgcmVidWlsZCBjb3VsZCBzdGFnZSBieXRlcyBub3QgbWF0Y2hpbmcgdGhlXG4gICAgLy8gYWxyZWFkeS1jb21wdXRlZCBoYXNoIChzZWUgdGhlIGBzdGFnZWRgIGZpZWxkKS5cbiAgICBpZiAodGhpcy5zdGFnZWQpIHtcbiAgICAgIHRocm93IGFzc2V0U3RhZ2luZ0FscmVhZHlTdGFnZWQodGhpcy5kaXNwbGF5TmFtZSk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VkID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5idW5kbGVyKSB7XG4gICAgICB0aGlzLnBhY2thZ2luZy5wYWNrKHtcbiAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZVBhdGgsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0UGF0aCxcbiAgICAgICAgaWdub3JlU3RyYXRlZ3k6IHRoaXMuaWdub3JlU3RyYXRlZ3ksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBgT1VUUFVUYCBoYXNoaW5nIGFscmVhZHkgYnVpbHQgdGhlIGFydGlmYWN0IGluIHRoZSBjb25zdHJ1Y3RvcjsgcGFja2FnZVxuICAgIC8vIHRoYXQgZXhhY3QgcmVzdWx0IGFuZCBjbGVhbiB1cCBpdHMgc2NyYXRjaCwgcmF0aGVyIHRoYW4gYnVpbGRpbmcgdHdpY2UuXG4gICAgaWYgKHRoaXMuZWFnZXJCdWlsZCkge1xuICAgICAgY29uc3QgeyBzY3JhdGNoLCBwcm9kdWNlZCB9ID0gdGhpcy5lYWdlckJ1aWxkO1xuICAgICAgdGhpcy5lYWdlckJ1aWxkID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wYWNrQnVuZGxlck91dHB1dChwcm9kdWNlZCwgdGFyZ2V0UGF0aCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmNsZWFudXBTY3JhdGNoKHNjcmF0Y2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGBTT1VSQ0VgIGhhc2hpbmcgZGVmZXJzIHRoZSBidWlsZCB0byBoZXJlLlxuICAgIGNvbnN0IHNjcmF0Y2ggPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY2RrdG4tYnVuZGxlLVwiKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcHJvZHVjZWQgfSA9IHRoaXMucnVuQnVuZGxlKHNjcmF0Y2gpO1xuICAgICAgdGhpcy5wYWNrQnVuZGxlck91dHB1dChwcm9kdWNlZCwgdGFyZ2V0UGF0aCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY2xlYW51cFNjcmF0Y2goc2NyYXRjaCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGJ1bmRsZXIgc2NyYXRjaCBkaXJlY3RvcnkgYW5kIGRyb3AgaXQgZnJvbSB0aGUgZXhpdC1zd2VlcCBzZXQuXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBTY3JhdGNoKHNjcmF0Y2g6IHN0cmluZyk6IHZvaWQge1xuICAgIGZzLnJtU3luYyhzY3JhdGNoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgc3RyYW5kZWRTY3JhdGNoRGlycy5kZWxldGUoc2NyYXRjaCk7XG4gIH1cblxuICAvKipcbiAgICogUGFja2FnZSBhIGJ1bmRsZXIncyBvdXRwdXQgaW50byBgdGFyZ2V0UGF0aGAsIHZlcmJhdGltLlxuICAgKlxuICAgKiBUaGUgb3V0cHV0J3Mgc2hhcGUgd2FzIGFscmVhZHkgdmFsaWRhdGVkIGFnYWluc3QgdGhlIHBhY2thZ2luZyBpblxuICAgKiB7QGxpbmsgcnVuQnVuZGxlfSwgc28gdGhlIHBhY2thZ2luZyBoYW5kbGVzIHRoZSBzb3VyY2UgZGlyZWN0bHkg4oCUIGEgZmlsZVxuICAgKiBzb3VyY2UgZm9yIEFzc2V0VHlwZS5GSUxFLCBhIGRpcmVjdG9yeSBzb3VyY2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgaWdub3JlIHN0cmF0ZWd5IGlzIGRlbGliZXJhdGVseSBub3QgYXBwbGllZC4gYGV4Y2x1ZGVgIGZpbHRlcnMgdGhlXG4gICAqIHNvdXJjZSBhIGJ1bmRsZXIgcmVhZHMsIG5vdCBpdHMgcHJvZHVjdDogYW4gaW5zdGFsbC1zdHlsZSBidW5kbGVyXG4gICAqIChgbnBtIGluc3RhbGwgLS1wcm9kdWN0aW9uYCwgYHBpcCBpbnN0YWxsIC10YCkgd3JpdGVzIGV4YWN0bHkgdGhlXG4gICAqIGRlcGVuZGVuY3kgZGlyZWN0b3J5IGEgdXNlciBleGNsdWRlcyBmcm9tIHNvdXJjZSwgYW5kIHJlLWFwcGx5aW5nIHRoZVxuICAgKiBleGNsdXNpb24gd291bGQgc2hpcCBhbiBhcnRpZmFjdCBtaXNzaW5nIHRob3NlIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHByaXZhdGUgcGFja0J1bmRsZXJPdXRwdXQocHJvZHVjZWQ6IHN0cmluZywgdGFyZ2V0UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYWNrYWdpbmcucGFjayh7XG4gICAgICBzb3VyY2U6IHByb2R1Y2VkLFxuICAgICAgdGFyZ2V0OiB0YXJnZXRQYXRoLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc3RhZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3NldC1zdGFnaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUFtRDtBQUNuRCwrQ0FBaUM7QUFDakMsdUNBQXlCO0FBQ3pCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IscUNBT2tCO0FBQ2xCLHFDQVdrQjtBQUNsQix5Q0FBb0Q7QUFDcEQsdURBQTJFO0FBQzNFLHFDQUFrRDtBQUVsRCxrRkFBa0Y7QUFDbEYsZ0VBQWdFO0FBQ2hFLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDO0FBRTVDOzs7O0dBSUc7QUFDVSxRQUFBLDJCQUEyQixHQUFHLHFCQUFxQixDQUFDO0FBRWpFOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUFtQyxDQUFDO0FBRXhFOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFnQjtJQUNwQyxJQUFJLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDOUMsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFL0I7O0dBRUc7QUFDSCxTQUFTLG9CQUFvQjtJQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLG1CQUFtQixFQUFFLENBQUM7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VyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjLENBQUMsT0FBZTtRQUNwQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckQsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSyxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLFVBQWtCO1FBQzVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE1BQU0sRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBaFhILG9DQWlYQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQge1xuICBBc3NldEhhc2hUeXBlLFxuICBBc3NldE9wdGlvbnMsXG4gIEJ1bmRsZU91dHB1dFR5cGUsXG4gIElBc3NldCxcbiAgSUFzc2V0QnVuZGxlcixcbiAgSUFzc2V0UGFja2FnaW5nLFxufSBmcm9tIFwiLi9hc3NldHNcIjtcbmltcG9ydCB7XG4gIGFzc2V0SGFzaENvbmZsaWN0aW5nSGFzaFR5cGUsXG4gIGFzc2V0SGFzaEludmFsaWQsXG4gIGFzc2V0SGFzaFR5cGVDdXN0b21SZXF1aXJlc0hhc2gsXG4gIGFzc2V0SGFzaFR5cGVVbmtub3duLFxuICBhc3NldFN0YWdpbmdBbHJlYWR5U3RhZ2VkLFxuICBhc3NldFN0YWdpbmdCdW5kbGVyRGlyZWN0b3J5T3V0cHV0TmVlZHNEaXJlY3RvcnlQYWNrYWdpbmcsXG4gIGFzc2V0U3RhZ2luZ0J1bmRsZXJGaWxlT3V0cHV0TmVlZHNGaWxlUGFja2FnaW5nLFxuICBhc3NldFN0YWdpbmdCdW5kbGVyT3V0cHV0Tm90RGlyZWN0b3J5LFxuICBhc3NldFN0YWdpbmdCdW5kbGVyT3V0cHV0Tm90RmlsZSxcbiAgYXNzZXRTdGFnaW5nQ29uZmxpY3RpbmdFeGNsdWRlT3B0aW9ucyxcbn0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBDQU5PTklDQUxfQVNTRVRfSEFTSEVTIH0gZnJvbSBcIi4vZmVhdHVyZXNcIjtcbmltcG9ydCB7IEV4Y2x1ZGVJZ25vcmVTdHJhdGVneSwgSUlnbm9yZVN0cmF0ZWd5IH0gZnJvbSBcIi4vaWdub3JlLXN0cmF0ZWd5XCI7XG5pbXBvcnQgeyBjb3B5U3luYywgaGFzaFBhdGggfSBmcm9tIFwiLi9wcml2YXRlL2ZzXCI7XG5cbi8vIEEgcmVzb2x2ZWQgaGFzaCBpcyB1c2VkIHZlcmJhdGltIGFzIGEgcGF0aCBzZWdtZW50IChzZWUgYFRlcnJhZm9ybUFzc2V0LnBhdGhgKSxcbi8vIHNvIGl0IG1heSBvbmx5IGNvbnRhaW4gY2hhcmFjdGVycyB0aGF0IGFyZSBhbHdheXMgc2FmZSB0aGVyZS5cbmNvbnN0IFNBRkVfQVNTRVRfSEFTSCA9IC9eW0EtWmEtejAtOV8uLV0rJC87XG5cbi8qKlxuICogQ29udGV4dCBrZXkgZm9yIGEgdmFsdWUgZm9sZGVkIGludG8gZXZlcnkgY29tcHV0ZWQgYXNzZXQgaGFzaCBpbiB0aGVcbiAqIGNvbnN0cnVjdCB0cmVlLCBhbG9uZ3NpZGUgYGV4dHJhSGFzaGAuIEEgYnVsayBjYWNoZS1idXN0aW5nIGVzY2FwZSBoYXRjaCDigJRcbiAqIGBleHRyYUhhc2hgIGlzIHNjb3BlZCB0byBvbmUgYXNzZXQsIHRoaXMgaXMgc2NvcGVkIHRvIHRoZSB3aG9sZSBhcHAuXG4gKi9cbmV4cG9ydCBjb25zdCBBU1NFVF9IQVNIX1NBTFRfQ09OVEVYVF9LRVkgPSBcImNka3RuOmFzc2V0SGFzaFNhbHRcIjtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGJhc2UgKHByZSBgZXh0cmFIYXNoYC9zYWx0KSBoYXNoIG9mIGEgYFNPVVJDRWAvYE9VVFBVVGAgd2FsayxcbiAqIHNvIHRoYXQgbXVsdGlwbGUgYEFzc2V0U3RhZ2luZ2AgaW5zdGFuY2VzIHdpdGggaWRlbnRpY2FsIGlucHV0cyDigJQgdGhlIHNhbWVcbiAqIGFzc2V0IHJlZmVyZW5jZWQgZnJvbSBtb3JlIHRoYW4gb25lIHJlc291cmNlIG9yIHN0YWNrIOKAlCBoYXNoIHRoZSBzb3VyY2VcbiAqIHRyZWUgb25jZSBwZXIgc3ludGggaW5zdGVhZCBvZiBvbmNlIHBlciByZWZlcmVuY2UuXG4gKlxuICogS2V5ZWQgcGVyIGNvbnN0cnVjdC10cmVlIHJvb3QgKHRoZSBgQXBwYCkgcmF0aGVyIHRoYW4gYXQgbW9kdWxlIHNjb3BlOiBhblxuICogQXBwIGluc3RhbmNlIGxpdmVzIGV4YWN0bHkgYXMgbG9uZyBhcyBvbmUgc3ludGgsIHNvIGEgbG9uZy1ydW5uaW5nIHByb2Nlc3NcbiAqIHRoYXQgc3ludGhzIHJlcGVhdGVkbHkgYWdhaW5zdCBjaGFuZ2luZyBmaWxlcyAoZS5nLiBgY2RrdG4gd2F0Y2hgKSBhbHdheXNcbiAqIGdldHMgYSBmcmVzaCBjYWNoZSBpbnN0ZWFkIG9mIGEgc3RhbGUgaGFzaCBmcm9tIGEgcHJldmlvdXMgc3ludGguXG4gKi9cbmNvbnN0IGhhc2hDYWNoZXNCeVJvb3QgPSBuZXcgV2Vha01hcDxJQ29uc3RydWN0LCBNYXA8c3RyaW5nLCBzdHJpbmc+PigpO1xuXG4vKipcbiAqIFRoZSBoYXNoIGNhY2hlIHNjb3BlZCB0byBhIGNvbnN0cnVjdC10cmVlIHJvb3QsIGNyZWF0ZWQgb24gZmlyc3QgdXNlLlxuICpcbiAqIFNlZSB7QGxpbmsgaGFzaENhY2hlc0J5Um9vdH0gZm9yIHdoeSB0aGUgY2FjaGUgaXMgc2NvcGVkIHBlciByb290LlxuICovXG5mdW5jdGlvbiBoYXNoQ2FjaGVGb3Iocm9vdDogSUNvbnN0cnVjdCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBsZXQgY2FjaGUgPSBoYXNoQ2FjaGVzQnlSb290LmdldChyb290KTtcbiAgaWYgKCFjYWNoZSkge1xuICAgIGNhY2hlID0gbmV3IE1hcCgpO1xuICAgIGhhc2hDYWNoZXNCeVJvb3Quc2V0KHJvb3QsIGNhY2hlKTtcbiAgfVxuICByZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogRWFnZXItYnVpbGQgc2NyYXRjaCBkaXJlY3RvcmllcyBhd2FpdGluZyBjbGVhbnVwLCBzd2VwdCBvbiBwcm9jZXNzIGV4aXQgb3JcbiAqIGFuIGludGVycnVwdGluZyBzaWduYWwuXG4gKlxuICogQW4gYE9VVFBVVGAtaGFzaCBidWlsZCBydW5zIGluIHRoZSBjb25zdHJ1Y3RvciBidXQgaXMgbm9ybWFsbHkgdG9ybiBkb3duIGluXG4gKiBgc3RhZ2UoKWAuIFdoZW4gdGhlIGFzc2V0J3Mgc3RhY2sgaXMgbm90IHN5bnRoZXNpemVkIHRoaXMgcGFzcywgYHN0YWdlKClgXG4gKiBuZXZlciBydW5zLCBzbyB0aGUgc3dlZXAgcmVjbGFpbXMgd2hhdCBjYW4gYmUgbGFyZ2UgdHJlZXMgKGBub2RlX21vZHVsZXNgLFxuICogYnVpbGQgY2FjaGVzKSB0aGF0IGBvcy50bXBkaXIoKWAgZG9lcyBub3QgY2xlYXIgcmVsaWFibHkuXG4gKi9cbmNvbnN0IHN0cmFuZGVkU2NyYXRjaERpcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmxldCBleGl0U3dlZXBJbnN0YWxsZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IHJlbW92ZSBldmVyeSBzdGlsbC1yZWdpc3RlcmVkIHNjcmF0Y2ggZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBzd2VlcFN0cmFuZGVkU2NyYXRjaCgpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBzdHJheSBvZiBzdHJhbmRlZFNjcmF0Y2hEaXJzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZzLnJtU3luYyhzdHJheSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQmVzdC1lZmZvcnQgb24gdGhlIHdheSBvdXQ7IG5vdGhpbmcgdXNlZnVsIHRvIGRvIGlmIGl0IGZhaWxzLlxuICAgIH1cbiAgfVxuICBzdHJhbmRlZFNjcmF0Y2hEaXJzLmNsZWFyKCk7XG59XG5cbi8qKlxuICogVHJhY2sgYSBzY3JhdGNoIGRpcmVjdG9yeSBmb3IgcmVtb3ZhbCBpZiBpdCBzdXJ2aXZlcyB0byBwcm9jZXNzIGV4aXQuXG4gKlxuICogYGV4aXRgIGFsb25lIG1pc3NlcyBhIEN0cmwtQyBvciBhIGBraWxsYCBkdXJpbmcgc3ludGgg4oCUIGV4YWN0bHkgd2hlbiB0aGVcbiAqIGxhcmdlc3QgdHJlZXMgKGBub2RlX21vZHVsZXNgLCBidWlsZCBjYWNoZXMpIGFyZSBsZWZ0IGJlaGluZCDigJQgYmVjYXVzZSBOb2RlXG4gKiBkb2VzIG5vdCBydW4gYGV4aXRgIGhhbmRsZXJzIG9uIGBTSUdJTlRgL2BTSUdURVJNYC4gVGhlIHNpZ25hbCBoYW5kbGVyc1xuICogc3dlZXAsIHRoZW4gcmUtcmFpc2UgdGhlIHNpZ25hbCBzbyBhbnkgb3RoZXIgbGlzdGVuZXJzICh0aGUgQ0xJJ3Mgb3duKSBzdGlsbFxuICogcnVuLCBvciB0aGUgZGVmYXVsdCBkaXNwb3NpdGlvbiB0ZXJtaW5hdGVzIHRoZSBwcm9jZXNzIGlmIHRoZXJlIGFyZSBub25lLlxuICovXG5mdW5jdGlvbiByZWdpc3RlclN0cmFuZGVkU2NyYXRjaChkaXI6IHN0cmluZyk6IHZvaWQge1xuICBzdHJhbmRlZFNjcmF0Y2hEaXJzLmFkZChkaXIpO1xuICBpZiAoIWV4aXRTd2VlcEluc3RhbGxlZCkge1xuICAgIGV4aXRTd2VlcEluc3RhbGxlZCA9IHRydWU7XG4gICAgLy8gYGV4aXRgIGhhbmRsZXJzIG11c3QgYmUgc3luY2hyb25vdXM7IGBybVN5bmNgIGlzLlxuICAgIHByb2Nlc3Mub25jZShcImV4aXRcIiwgc3dlZXBTdHJhbmRlZFNjcmF0Y2gpO1xuICAgIGZvciAoY29uc3Qgc2lnbmFsIG9mIFtcIlNJR0lOVFwiLCBcIlNJR1RFUk1cIl0gYXMgY29uc3QpIHtcbiAgICAgIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHtcbiAgICAgICAgc3dlZXBTdHJhbmRlZFNjcmF0Y2goKTtcbiAgICAgICAgLy8gUmUtcmFpc2Ugc28gdGhlIHNpZ25hbCBpcyBub3Qgc3dhbGxvd2VkLiBgcHJvY2Vzcy5vbmNlYCBoYXMgYWxyZWFkeVxuICAgICAgICAvLyByZW1vdmVkIHRoaXMgbGlzdGVuZXIsIHNvIHRoZSByZS1yYWlzZSByZWFjaGVzIHdoYXRldmVyIGVsc2UgaXNcbiAgICAgICAgLy8gcmVnaXN0ZXJlZCDigJQgdGhlIENMSSdzIG93biBTSUdJTlQvU0lHVEVSTSBoYW5kbGVycyDigJQgb3IsIGlmIG5vdGhpbmdcbiAgICAgICAgLy8gaXMsIHRoZSBkZWZhdWx0IGRpc3Bvc2l0aW9uIHRoYXQgdGVybWluYXRlcyB0aGUgcHJvY2Vzcy4gUmVtb3ZpbmdcbiAgICAgICAgLy8gb3RoZXIgbGlzdGVuZXJzIGhlcmUgd291bGQgZGlzY2FyZCBleGFjdGx5IHRob3NlIHRoZSBhcHAgcmVsaWVzIG9uLlxuICAgICAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIHNpZ25hbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgQXNzZXRTdGFnaW5nfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NldFN0YWdpbmdPcHRpb25zIGV4dGVuZHMgQXNzZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlIG9yIGRpcmVjdG9yeS4gUmVzb2x2aW5nIGEgcmVsYXRpdmUgcGF0aFxuICAgKiBhZ2FpbnN0IGBjZGt0Zi5qc29uYCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgc3RhZ2VkIHJlc3VsdCBpcyBwcm9kdWNlZCBhbmQgc2hhcGVkLiBUaGUgY2FsbGVyIGRlY2lkZXMgdGhpc1xuICAgKiAoZS5nLiBmcm9tIGl0cyBvd24gYEFzc2V0VHlwZWApIOKAlCBgQXNzZXRTdGFnaW5nYCBuZXZlciBpbmZlcnMgb3IgY2hhbmdlc1xuICAgKiBpdCBiYXNlZCBvbiBgZXhjbHVkZWAvYGV4dHJhSGFzaGAuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdpbmc6IElBc3NldFBhY2thZ2luZztcblxuICAvKipcbiAgICogUGF0aHMgdG8gZXhjbHVkZSwgcmVsYXRpdmUgdG8gYHNvdXJjZVBhdGhgLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuICAgKiBgaWdub3JlU3RyYXRlZ3lgLCB3aGljaCByZXBsYWNlcyB0aGlzIG1hdGNoZXIgcmF0aGVyIHRoYW4gbGF5ZXJpbmcgb25cbiAgICogdG9wIG9mIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdGhpbmcgaXMgZXhjbHVkZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRXhjbHVzaW9uIG1hdGNoaW5nLCBmb3IgY2FsbGVycyB0aGF0IG5lZWQgYC5naXRpZ25vcmVgIC8gYC5kb2NrZXJpZ25vcmVgXG4gICAqIHBhcml0eSByYXRoZXIgdGhhbiB0aGUgYnVpbHQtaW4gZXhhY3QtcGF0aCAvIHN1ZmZpeCAvIGRpcmVjdG9yeSBtYXRjaGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBleGNsdWRlYCBpcyB1c2VkIHdpdGggdGhlIGJ1aWx0LWluIG1hdGNoZXJcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVN0cmF0ZWd5PzogSUlnbm9yZVN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBpbmZvcm1hdGlvbiB0byBmb2xkIGludG8gdGhlIGhhc2ggKGUuZy4gYnVpbGQgaW5zdHJ1Y3Rpb25zIGFuZFxuICAgKiBvdGhlciBpbnB1dHMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4dHJhIGhhc2hcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSGFzaD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBidW5kbGVyIHRoYXQgYnVpbGRzIHRoZSBzb3VyY2UgaW50byBhbiBhcnRpZmFjdCBiZWZvcmUgc3RhZ2luZy5cbiAgICpcbiAgICogVW5kZXIgdGhlIGRlZmF1bHQgYFNPVVJDRWAgaGFzaGluZyB0aGUgYnVpbGQgaXMgZGVmZXJyZWQgdG8gYHN0YWdlKClgIGFuZFxuICAgKiBzdGF5cyBza2lwcGFibGU7IGBPVVRQVVRgIGhhc2hpbmcgYnVpbGRzIGVhZ2VybHkgYXQgY29uc3RydWN0aW9uIHRpbWUgdG9cbiAgICogaGFzaCB0aGUgYXJ0aWZhY3QsIGZvcmdvaW5nIHNraXBwYWJpbGl0eS4gVGhlIGJ1bmRsZXIncyBkZWNsYXJlZCBvdXRwdXRcbiAgICogc2hhcGUgbXVzdCBtYXRjaCB0aGUgcGFja2FnaW5nOiBhIGBCdW5kbGVSZXN1bHQuZGlyZWN0b3J5YCBuZWVkcyBhXG4gICAqIGRpcmVjdG9yeS1hY2NlcHRpbmcgcGFja2FnaW5nLCBhIGBCdW5kbGVSZXN1bHQuZmlsZWAgYSBzaW5nbGUtZmlsZSBvbmVcbiAgICogKGBBc3NldFR5cGUuRklMRWApLiBUaGUgbWlzbWF0Y2ggaXMgY2F1Z2h0IG9uY2UgdGhlIGJ1aWxkIHJ1bnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHNvdXJjZSBpcyBzdGFnZWQgdmVyYmF0aW0sIHdpdGggbm8gYnVpbGQgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxlcj86IElBc3NldEJ1bmRsZXI7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgdXNlZCBpbiBlcnJvciBtZXNzYWdlcywgc28gdGhleSBuYW1lIHRoZSB1c2VyLWZhY2luZyBjb25zdHJ1Y3RcbiAgICogKGUuZy4gdGhlIGBUZXJyYWZvcm1Bc3NldGApIHJhdGhlciB0aGFuIHRoaXMgaW50ZXJuYWwgc3RhZ2luZyBjaGlsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgc3RhZ2luZyBjb25zdHJ1Y3QncyBvd24gaWRcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIGFzc2V0J3MgaWRlbnRpdHkgYW5kIHN0YWdlcyBpdHMgY29udGVudCB0byBkaXNrLlxuICpcbiAqIFRoZSBoYXNoIGlzIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBhZnRlciBjb25zdHJ1Y3Rpb247IHRoZSBmaWxlc3lzdGVtIHdyaXRlXG4gKiBpcyBkZWZlcnJlZCB0byBgc3RhZ2UoKWAsIHRoZSBvbmUgd2luZG93IHdoZXJlIGl0IGlzIHNhZmUuIEhhc2hpbmcgaXNcbiAqIGNhY2hlZCBwZXIgc3ludGggKHNlZSB7QGxpbmsgaGFzaENhY2hlc0J5Um9vdH0pIHNvIGFuIGFzc2V0IHJlZmVyZW5jZWQgZnJvbVxuICogc2V2ZXJhbCBwbGFjZXMgaXMgd2Fsa2VkIG9uY2UuIFdpdGhvdXQgYSBidW5kbGVyLCBgU09VUkNFYCBhbmQgYE9VVFBVVGAgYm90aFxuICogaGFzaCB0aGUgc291cmNlOyB3aXRoIG9uZSB0aGV5IGRpdmVyZ2UsIGFzIGBBc3NldFN0YWdpbmdPcHRpb25zLmJ1bmRsZXJgXG4gKiBkZXNjcmliZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBc3NldFN0YWdpbmcgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQXNzZXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGlnbm9yZVN0cmF0ZWd5OiBJSWdub3JlU3RyYXRlZ3k7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFzRXhjbHVzaW9uczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBoYXNoQ2FjaGU6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVuZGxlcj86IElBc3NldEJ1bmRsZXI7XG5cbiAgLyoqXG4gICAqIE91dHB1dCBvZiBhbiBlYWdlciBgT1VUUFVUYC1oYXNoIGJ1aWxkLCBjYXJyaWVkIHRvIGBzdGFnZSgpYCBmb3IgcmV1c2UuXG4gICAqXG4gICAqIFVuZGVmaW5lZCBvbiBldmVyeSBvdGhlciBwYXRoLCB3aGVyZSB0aGUgYnVpbGQgaXMgZGVmZXJyZWQgb3IgYWJzZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBlYWdlckJ1aWxkPzoge1xuICAgIHJlYWRvbmx5IHNjcmF0Y2g6IHN0cmluZztcbiAgICByZWFkb25seSBwcm9kdWNlZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG91dHB1dFR5cGU6IEJ1bmRsZU91dHB1dFR5cGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBvbmNlIGBzdGFnZSgpYCBoYXMgcnVuLCBzbyBhIHNlY29uZCBjYWxsIGNhbm5vdCByZWJ1aWxkLiBBbiBlYWdlclxuICAgKiBgT1VUUFVUYCBidWlsZCBpcyBjYXB0dXJlZCBhdCBjb25zdHJ1Y3Rpb24gYW5kIGNvbnN1bWVkIGJ5IHRoZSBmaXJzdFxuICAgKiBgc3RhZ2UoKWA7IHdpdGhvdXQgdGhpcyBndWFyZCBhIHNlY29uZCBjYWxsIHdvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGVcbiAgICogZGVmZXJyZWQgYnVpbGQgcGF0aCBhbmQgc3RhZ2UgYnl0ZXMgdGhhdCBubyBsb25nZXIgbWF0Y2ggdGhlIGhhc2guXG4gICAqL1xuICBwcml2YXRlIHN0YWdlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSBwYWNrYWdpbmc6IElBc3NldFBhY2thZ2luZztcbiAgcHVibGljIHJlYWRvbmx5IGlzRGlyZWN0b3J5OiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzZXRIYXNoOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBc3NldFN0YWdpbmdPcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuc291cmNlUGF0aCA9IHByb3BzLnNvdXJjZVBhdGg7XG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IHByb3BzLmRpc3BsYXlOYW1lID8/IGlkO1xuICAgIHRoaXMucGFja2FnaW5nID0gcHJvcHMucGFja2FnaW5nO1xuICAgIHRoaXMuaXNEaXJlY3RvcnkgPSBwcm9wcy5wYWNrYWdpbmcucHJvZHVjZXNEaXJlY3Rvcnk7XG4gICAgdGhpcy5oYXNoQ2FjaGUgPSBoYXNoQ2FjaGVGb3IodGhpcy5ub2RlLnJvb3QpO1xuICAgIHRoaXMuYnVuZGxlciA9IHByb3BzLmJ1bmRsZXI7XG5cbiAgICBpZiAocHJvcHMuZXhjbHVkZT8ubGVuZ3RoICYmIHByb3BzLmlnbm9yZVN0cmF0ZWd5KSB7XG4gICAgICB0aHJvdyBhc3NldFN0YWdpbmdDb25mbGljdGluZ0V4Y2x1ZGVPcHRpb25zKHRoaXMuZGlzcGxheU5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmlnbm9yZVN0cmF0ZWd5ID1cbiAgICAgIHByb3BzLmlnbm9yZVN0cmF0ZWd5ID8/IG5ldyBFeGNsdWRlSWdub3JlU3RyYXRlZ3kocHJvcHMuZXhjbHVkZSA/PyBbXSk7XG4gICAgLy8gQSBjdXN0b20gc3RyYXRlZ3kgaXMgYXNzdW1lZCB0byBleGNsdWRlIHNvbWV0aGluZzsgdGhlIGJ1aWx0LWluIG9uZSBvbmx5XG4gICAgLy8gZG9lcyB3aXRoIGEgbm9uLWVtcHR5IGBleGNsdWRlYC4gRHJpdmVzIHdoZXRoZXIgdGhlIGJ1bmRsZXIgaXMgaGFuZGVkIGFcbiAgICAvLyBtYXRlcmlhbGlzZWQgZmlsdGVyZWQgY29weSBvciB0aGUgc291cmNlIGRpcmVjdGx5LlxuICAgIHRoaXMuaGFzRXhjbHVzaW9ucyA9XG4gICAgICBwcm9wcy5pZ25vcmVTdHJhdGVneSAhPT0gdW5kZWZpbmVkIHx8ICEhcHJvcHMuZXhjbHVkZT8ubGVuZ3RoO1xuXG4gICAgLy8gQnVuZGxlciBvdXRwdXQgc2hhcGUgKGRpcmVjdG9yeSB2cyBmaWxlKSBpcyBvbmx5IGtub3duIG9uY2UgYGJ1bmRsZWBcbiAgICAvLyBydW5zLCBzbyBpdHMgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBwYWNrYWdpbmcgaXMgY2hlY2tlZCB0aGVuLCBub3QgaGVyZVxuICAgIC8vIOKAlCBhIGRlZmVycmVkIFNPVVJDRSBidWlsZCBoYXMgbm90IHJ1biB5ZXQgYXQgY29uc3RydWN0aW9uIHRpbWUuXG5cbiAgICB0aGlzLmFzc2V0SGFzaCA9IHRoaXMucmVzb2x2ZUFzc2V0SGFzaCh0aGlzLmRpc3BsYXlOYW1lLCBwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBc3NldEhhc2goaWQ6IHN0cmluZywgcHJvcHM6IEFzc2V0U3RhZ2luZ09wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgYXNzZXRIYXNoLCBhc3NldEhhc2hUeXBlLCBleHRyYUhhc2ggfSA9IHByb3BzO1xuXG4gICAgaWYgKGFzc2V0SGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGFzc2V0SGFzaFR5cGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBhc3NldEhhc2hUeXBlICE9PSBBc3NldEhhc2hUeXBlLkNVU1RPTVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IGFzc2V0SGFzaENvbmZsaWN0aW5nSGFzaFR5cGUoaWQpO1xuICAgICAgfVxuICAgICAgaWYgKCFTQUZFX0FTU0VUX0hBU0gudGVzdChhc3NldEhhc2gpKSB7XG4gICAgICAgIHRocm93IGFzc2V0SGFzaEludmFsaWQoaWQsIGFzc2V0SGFzaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNzZXRIYXNoO1xuICAgIH1cblxuICAgIHN3aXRjaCAoYXNzZXRIYXNoVHlwZSkge1xuICAgICAgY2FzZSBBc3NldEhhc2hUeXBlLkNVU1RPTTpcbiAgICAgICAgdGhyb3cgYXNzZXRIYXNoVHlwZUN1c3RvbVJlcXVpcmVzSGFzaChpZCk7XG4gICAgICBjYXNlIEFzc2V0SGFzaFR5cGUuU09VUkNFOlxuICAgICAgY2FzZSBBc3NldEhhc2hUeXBlLk9VVFBVVDpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOiB7XG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbCA9ICEhdGhpcy5ub2RlLnRyeUdldENvbnRleHQoQ0FOT05JQ0FMX0FTU0VUX0hBU0hFUyk7XG4gICAgICAgIGNvbnN0IGFyY2hpdmUgPSB0aGlzLnBhY2thZ2luZy5vbWl0c0RpcmVjdG9yeUVudHJpZXM7XG4gICAgICAgIGNvbnN0IHNhbHQgPSB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChBU1NFVF9IQVNIX1NBTFRfQ09OVEVYVF9LRVkpO1xuXG4gICAgICAgIC8vIE9VVFBVVCBoYXNoZXMgdGhlIGJ1aWx0IGFydGlmYWN0IGFuZCBzbyBtdXN0IGJ1aWxkIGVhZ2VybHksIGZvcmdvaW5nXG4gICAgICAgIC8vIHNraXBwYWJpbGl0eSAoIzM4MCk7IGV2ZXJ5IG90aGVyIGNhc2UgaGFzaGVzIHRoZSBzb3VyY2UgdmVyYmF0aW0uXG4gICAgICAgIGNvbnN0IGJhc2VIYXNoID1cbiAgICAgICAgICB0aGlzLmJ1bmRsZXIgJiYgYXNzZXRIYXNoVHlwZSA9PT0gQXNzZXRIYXNoVHlwZS5PVVRQVVRcbiAgICAgICAgICAgID8gdGhpcy5oYXNoT3V0cHV0KGNhbm9uaWNhbCwgYXJjaGl2ZSlcbiAgICAgICAgICAgIDogdGhpcy5oYXNoU291cmNlKGNhbm9uaWNhbCwgYXJjaGl2ZSk7XG5cbiAgICAgICAgLy8gRm9yIFNPVVJDRSwgZm9sZGluZyBpbiBidW5kbGVyS2V5IGlzIHRoZSBvbmx5IHdheSBidWlsZCBpZGVudGl0eVxuICAgICAgICAvLyByZWFjaGVzIHRoZSBoYXNoLCBzaW5jZSB0aGUgc291cmNlIHRyZWUgY2Fubm90IHNlZSB0aGUgYnVpbGQuXG4gICAgICAgIGNvbnN0IGJ1bmRsZXJLZXkgPSB0aGlzLmJ1bmRsZXI/LmJ1bmRsZXJLZXk7XG4gICAgICAgIGlmICghZXh0cmFIYXNoICYmICFzYWx0ICYmICFidW5kbGVyS2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGJhc2VIYXNoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvbGRlZCA9IGNyeXB0by5jcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZShiYXNlSGFzaCk7XG4gICAgICAgIGlmIChleHRyYUhhc2gpIHtcbiAgICAgICAgICBmb2xkZWQudXBkYXRlKGV4dHJhSGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1bmRsZXJLZXkpIHtcbiAgICAgICAgICBmb2xkZWQudXBkYXRlKGJ1bmRsZXJLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYWx0KSB7XG4gICAgICAgICAgZm9sZGVkLnVwZGF0ZShTdHJpbmcoc2FsdCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb2xkZWQuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDMyKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gT3V0LW9mLXJhbmdlIHZhbHVlIGZyb20gYSBub24tVHlwZVNjcmlwdCBjYWxsZXIuXG4gICAgICAgIHRocm93IGFzc2V0SGFzaFR5cGVVbmtub3duKGlkLCBhc3NldEhhc2hUeXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFzaCB0aGUgc291cmNlIHRyZWUsIGhvbm9yaW5nIHRoZSBpZ25vcmUgc3RyYXRlZ3kuXG4gICAqXG4gICAqIENhY2hlZCBwZXIgc3ludGggc28gYW4gYXNzZXQgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpcyB3YWxrZWQgb25jZS5cbiAgICovXG4gIHByaXZhdGUgaGFzaFNvdXJjZShjYW5vbmljYWw6IGJvb2xlYW4sIGFyY2hpdmU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIC8vIE9ubHkgY2FjaGVhYmxlIHdoZW4gdGhlIGlnbm9yZSBzdHJhdGVneSBjYW4gc3VtbWFyaXplIGl0cyBiZWhhdmlvclxuICAgIC8vIGFzIGEgc3RyaW5nIChzZWUgYElJZ25vcmVTdHJhdGVneS5jYWNoZUtleWApOyBvdGhlcndpc2UgZXZlcnkgY2FsbFxuICAgIC8vIGlzIHRyZWF0ZWQgYXMgdW5pcXVlLlxuICAgIGNvbnN0IGNhY2hlS2V5ID1cbiAgICAgIHRoaXMuaWdub3JlU3RyYXRlZ3kuY2FjaGVLZXkgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHNvdXJjZVBhdGg6IHRoaXMuc291cmNlUGF0aCxcbiAgICAgICAgICAgIGNhbm9uaWNhbCxcbiAgICAgICAgICAgIGFyY2hpdmUsXG4gICAgICAgICAgICBpZ25vcmU6IHRoaXMuaWdub3JlU3RyYXRlZ3kuY2FjaGVLZXksXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZUtleSA/IHRoaXMuaGFzaENhY2hlLmdldChjYWNoZUtleSkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc2ggPSBoYXNoUGF0aCh0aGlzLnNvdXJjZVBhdGgsIHtcbiAgICAgIGNhbm9uaWNhbCxcbiAgICAgIGFyY2hpdmUsXG4gICAgICBzaG91bGRFeGNsdWRlOiAocmVsYXRpdmVQYXRoLCBpc0RpcmVjdG9yeSkgPT5cbiAgICAgICAgdGhpcy5pZ25vcmVTdHJhdGVneS5pZ25vcmVzKHsgcmVsYXRpdmVQYXRoLCBpc0RpcmVjdG9yeSB9KSxcbiAgICAgIGRlc2NlbmRJbnRvRXhjbHVkZWREaXJlY3RvcmllczpcbiAgICAgICAgdGhpcy5pZ25vcmVTdHJhdGVneS5wcnVuZUV4Y2x1ZGVkRGlyZWN0b3JpZXMgPT09IGZhbHNlLFxuICAgIH0pO1xuICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgdGhpcy5oYXNoQ2FjaGUuc2V0KGNhY2hlS2V5LCBoYXNoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2g7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGJ1bmRsZXIncyBvdXRwdXQgZWFnZXJseSBhbmQgaGFzaCB0aGUgYnVpbHQgYXJ0aWZhY3QuXG4gICAqXG4gICAqIFRoZSBvdXRwdXQgaXMgc3Rhc2hlZCBmb3IgYHN0YWdlKClgIHRvIHJldXNlLCBzbyB0aGUgYnVpbGQgaXMgbm90XG4gICAqIHJlcGVhdGVkLiBJdCBpcyBoYXNoZWQgdmVyYmF0aW06IGBleGNsdWRlYCBmaWx0ZXJzIHRoZSBzb3VyY2UgYSBidW5kbGVyXG4gICAqIHJlYWRzLCBub3QgdGhlIGFydGlmYWN0IGl0IHByb2R1Y2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBoYXNoT3V0cHV0KGNhbm9uaWNhbDogYm9vbGVhbiwgYXJjaGl2ZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgY29uc3Qgc2NyYXRjaCA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjZGt0bi1idW5kbGUtXCIpKTtcbiAgICAvLyBSZWdpc3RlcmVkIHNvIHRoZSBleGl0IHN3ZWVwIHJlY2xhaW1zIGl0IGlmIHN0YWdlKCkgbmV2ZXIgcnVucyBmb3IgYW5cbiAgICAvLyB1bnN5bnRoZXNpemVkIHN0YWNrOyBzdGFnZSgpIHJlbW92ZXMgYW5kIHVucmVnaXN0ZXJzIGl0IG90aGVyd2lzZS5cbiAgICByZWdpc3RlclN0cmFuZGVkU2NyYXRjaChzY3JhdGNoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBwcm9kdWNlZCwgb3V0cHV0VHlwZSB9ID0gdGhpcy5ydW5CdW5kbGUoc2NyYXRjaCk7XG4gICAgICB0aGlzLmVhZ2VyQnVpbGQgPSB7IHNjcmF0Y2gsIHByb2R1Y2VkLCBvdXRwdXRUeXBlIH07XG4gICAgICAvLyBBIHNpbmdsZS1maWxlIGFydGlmYWN0IGlzIGhhc2hlZCBhcyBhIGZpbGUgKG5vIGFyY2hpdmUgZnJhbWluZyk7IGFcbiAgICAgIC8vIGRpcmVjdG9yeSBpcyBoYXNoZWQgYXMgdGhlIHBhY2thZ2VkIHRyZWUgd291bGQgYmUuXG4gICAgICBjb25zdCBpc0ZpbGUgPSBvdXRwdXRUeXBlID09PSBCdW5kbGVPdXRwdXRUeXBlLkZJTEU7XG4gICAgICByZXR1cm4gaGFzaFBhdGgocHJvZHVjZWQsIHsgY2Fub25pY2FsLCBhcmNoaXZlOiBhcmNoaXZlICYmICFpc0ZpbGUgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gVGhlIGJ1aWxkIGZhaWxlZCBiZWZvcmUgYGVhZ2VyQnVpbGRgIHdhcyBzZXQsIHNvIHN0YWdlKCkgY2FuIG5ldmVyXG4gICAgICAvLyByZWFjaCB0aGlzIHNjcmF0Y2ggdG8gY2xlYW4gaXQuIFJlY2xhaW0gaXQgbm93IHJhdGhlciB0aGFuIGxlYXZpbmcgYVxuICAgICAgLy8gcG90ZW50aWFsbHkgbGFyZ2UgdHJlZSAobm9kZV9tb2R1bGVzLCBidWlsZCBjYWNoZXMpIHRvIHRoZSBleGl0IHN3ZWVwLlxuICAgICAgdGhpcy5jbGVhbnVwU2NyYXRjaChzY3JhdGNoKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgYnVuZGxlciBhZ2FpbnN0IHRoZSBmaWx0ZXJlZCBzb3VyY2UgYW5kIHJldHVybiBpdHMgb3V0cHV0LlxuICAgKlxuICAgKiBUaGUgYnVuZGxlciBpcyBoYW5kZWQgYW4gYWJzb2x1dGUgYHNvdXJjZWAgKGl0cyBjd2QgaXMgaXRzIG93biwgc28gYVxuICAgKiByZWxhdGl2ZSBwYXRoIHdvdWxkIHJlc29sdmUgZWxzZXdoZXJlKSB0aGF0IGhhcyBhbHJlYWR5IGhhZCBgZXhjbHVkZWBcbiAgICogYXBwbGllZC4gTWF0ZXJpYWxpc2luZyB0aGUgZmlsdGVyZWQgaW5wdXQgaGVyZSBpcyB3aGF0IG1ha2VzIHRoZSBidW5kbGVyXG4gICAqIHJlYWQgZXhhY3RseSB0aGUgdHJlZSB0aGUgaGFzaCB3YXMgdGFrZW4gb3Zlciwgd2hpY2ggYSByYXcgc291cmNlXG4gICAqIGhhbmQtb2ZmIHdvdWxkIG5vdCwgc2luY2UgYGhhc2hTb3VyY2VgIGhvbm91cnMgYGV4Y2x1ZGVgLlxuICAgKi9cbiAgcHJpdmF0ZSBydW5CdW5kbGUoc2NyYXRjaDogc3RyaW5nKToge1xuICAgIHByb2R1Y2VkOiBzdHJpbmc7XG4gICAgb3V0cHV0VHlwZTogQnVuZGxlT3V0cHV0VHlwZTtcbiAgfSB7XG4gICAgY29uc3Qgb3V0cHV0RGlyID0gcGF0aC5qb2luKHNjcmF0Y2gsIFwib3V0cHV0XCIpO1xuICAgIGZzLm1rZGlyU3luYyhvdXRwdXREaXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYnVuZGxlciEuYnVuZGxlKHtcbiAgICAgIHNvdXJjZTogdGhpcy5maWx0ZXJlZFNvdXJjZShzY3JhdGNoKSxcbiAgICAgIG91dHB1dERpcixcbiAgICB9KTtcblxuICAgIC8vIEEgYmFyZSBidW5kbGVyIHRoYXQgZGVjbGluZXMgaGFzIG5vdGhpbmcgdG8gZmFsbCBiYWNrIHRvIOKAlCBkZWNsaW5pbmcgaXNcbiAgICAvLyBvbmx5IG1lYW5pbmdmdWwgaW5zaWRlIGEgQ2hhaW5CdW5kbGVyLCB3aGljaCBjb25zdW1lcyBpdCBiZWZvcmUgaXRcbiAgICAvLyByZWFjaGVzIGhlcmUuIEEgbm9uLWRlY2xpbmVkIHJlc3VsdCBhbHdheXMgY2FycmllcyBhIHBhdGggYW5kIHNoYXBlLlxuICAgIGlmIChcbiAgICAgIHJlc3VsdC5pc0RlY2xpbmVkIHx8XG4gICAgICByZXN1bHQucGF0aCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICByZXN1bHQub3V0cHV0VHlwZSA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBhc3NldFN0YWdpbmdCdW5kbGVyT3V0cHV0Tm90RGlyZWN0b3J5KFxuICAgICAgICB0aGlzLmRpc3BsYXlOYW1lLFxuICAgICAgICBTdHJpbmcocmVzdWx0LnBhdGgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9kdWNlZCA9IHJlc3VsdC5wYXRoO1xuICAgIHRoaXMudmFsaWRhdGVPdXRwdXRTaGFwZShwcm9kdWNlZCwgcmVzdWx0Lm91dHB1dFR5cGUpO1xuICAgIHJldHVybiB7IHByb2R1Y2VkLCBvdXRwdXRUeXBlOiByZXN1bHQub3V0cHV0VHlwZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdCBhIGJ1bmRsZXIgcmVzdWx0IHdob3NlIGRlY2xhcmVkIHNoYXBlIGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgb25cbiAgICogZGlzaywgb3IgZG9lcyBub3QgbWF0Y2ggdGhlIHBhY2thZ2luZy5cbiAgICpcbiAgICogQ2F0Y2hpbmcgdGhlIG1pc21hdGNoIGhlcmUgdHVybnMgYW4gb3BhcXVlIEVJU0RJUi9FUEVSTSBhdCBwYWNrIHRpbWUgaW50b1xuICAgKiBhIGNsZWFyIGVycm9yIG5hbWluZyB0aGUgcGFja2FnaW5nIHRoZSBidW5kbGVyJ3Mgb3V0cHV0IHNoYXBlIG5lZWRzLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU91dHB1dFNoYXBlKFxuICAgIHByb2R1Y2VkOiBzdHJpbmcsXG4gICAgb3V0cHV0VHlwZTogQnVuZGxlT3V0cHV0VHlwZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhwcm9kdWNlZCk7XG4gICAgY29uc3Qgc3RhdCA9IGV4aXN0cyA/IGZzLnN0YXRTeW5jKHByb2R1Y2VkKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChvdXRwdXRUeXBlID09PSBCdW5kbGVPdXRwdXRUeXBlLkZJTEUpIHtcbiAgICAgIGlmICghc3RhdD8uaXNGaWxlKCkpIHtcbiAgICAgICAgdGhyb3cgYXNzZXRTdGFnaW5nQnVuZGxlck91dHB1dE5vdEZpbGUodGhpcy5kaXNwbGF5TmFtZSwgcHJvZHVjZWQpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnN0YWdlc1NpbmdsZUZpbGUpIHtcbiAgICAgICAgdGhyb3cgYXNzZXRTdGFnaW5nQnVuZGxlckZpbGVPdXRwdXROZWVkc0ZpbGVQYWNrYWdpbmcodGhpcy5kaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0Py5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBhc3NldFN0YWdpbmdCdW5kbGVyT3V0cHV0Tm90RGlyZWN0b3J5KHRoaXMuZGlzcGxheU5hbWUsIHByb2R1Y2VkKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnBhY2thZ2luZy5hY2NlcHRzRGlyZWN0b3J5U291cmNlKSB7XG4gICAgICB0aHJvdyBhc3NldFN0YWdpbmdCdW5kbGVyRGlyZWN0b3J5T3V0cHV0TmVlZHNEaXJlY3RvcnlQYWNrYWdpbmcoXG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwYWNrYWdpbmcgc3RhZ2VzIGEgc2luZ2xlIGZpbGUgdmVyYmF0aW0gKEFzc2V0VHlwZS5GSUxFKS5cbiAgICpcbiAgICogQSB2ZXJiYXRpbS1maWxlIHBhY2thZ2luZyBuZWl0aGVyIHByb2R1Y2VzIGEgZGlyZWN0b3J5IG5vciByZWFkcyBvbmUgYXNcbiAgICogaXRzIHNvdXJjZS4gRGVyaXZlZCBmcm9tIGV4aXN0aW5nIGBJQXNzZXRQYWNrYWdpbmdgIGZsYWdzIHNvIG91dC1vZi10cmVlXG4gICAqIHBhY2thZ2luZ3MgbmVlZCBubyBuZXcgaW50ZXJmYWNlIG1lbWJlci5cbiAgICovXG4gIHByaXZhdGUgZ2V0IHN0YWdlc1NpbmdsZUZpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnBhY2thZ2luZy5wcm9kdWNlc0RpcmVjdG9yeSAmJlxuICAgICAgIXRoaXMucGFja2FnaW5nLmFjY2VwdHNEaXJlY3RvcnlTb3VyY2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIHNvdXJjZSB0aGUgYnVuZGxlciBzaG91bGQgcmVhZC5cbiAgICpcbiAgICogV2l0aCBubyBleGNsdXNpb25zLCBvciB3aXRoIGEgZmlsZSBzb3VyY2UsIHRoZSByZXNvbHZlZCBzb3VyY2UgaXMgaGFuZGVkXG4gICAqIG92ZXIgZGlyZWN0bHkg4oCUIGEgZmlsZSBoYXMgbm8gY2hpbGRyZW4gdG8gZmlsdGVyLCBtYXRjaGluZyBgaGFzaFNvdXJjZWAsXG4gICAqIHdoaWNoIG9ubHkgZXZlciBhcHBsaWVzIHRoZSBpZ25vcmUgc3RyYXRlZ3kgdG8gYSBkaXJlY3RvcnkncyBlbnRyaWVzIGFuZFxuICAgKiBuZXZlciB0byB0aGUgcm9vdCBpdHNlbGYuIE90aGVyd2lzZSB0aGUgZXhjbHVkZWQgc291cmNlIHRyZWUgaXNcbiAgICogbWF0ZXJpYWxpc2VkIGludG8gdGhlIHNjcmF0Y2ggZGlyZWN0b3J5LCBzbyB0aGUgYnVuZGxlciBzZWVzIHRoZSBzYW1lXG4gICAqIGZpbGUgc2V0IHRoZSBoYXNoIHdhcyB0YWtlbiBvdmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJlZFNvdXJjZShzY3JhdGNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFic29sdXRlU291cmNlID0gcGF0aC5yZXNvbHZlKHRoaXMuc291cmNlUGF0aCk7XG4gICAgaWYgKCF0aGlzLmhhc0V4Y2x1c2lvbnMgfHwgZnMuc3RhdFN5bmMoYWJzb2x1dGVTb3VyY2UpLmlzRmlsZSgpKSB7XG4gICAgICByZXR1cm4gYWJzb2x1dGVTb3VyY2U7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0ID0gcGF0aC5qb2luKHNjcmF0Y2gsIFwiaW5wdXRcIik7XG4gICAgZnMubWtkaXJTeW5jKGlucHV0KTtcbiAgICBjb3B5U3luYyhhYnNvbHV0ZVNvdXJjZSwgaW5wdXQsIHtcbiAgICAgIHNob3VsZEV4Y2x1ZGU6IChyZWxhdGl2ZVBhdGgsIGlzRGlyZWN0b3J5KSA9PlxuICAgICAgICB0aGlzLmlnbm9yZVN0cmF0ZWd5Lmlnbm9yZXMoeyByZWxhdGl2ZVBhdGgsIGlzRGlyZWN0b3J5IH0pLFxuICAgICAgZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzOlxuICAgICAgICB0aGlzLmlnbm9yZVN0cmF0ZWd5LnBydW5lRXhjbHVkZWREaXJlY3RvcmllcyA9PT0gZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWdlIHRoZSBhc3NldCdzIGNvbnRlbnQgdG8gYHRhcmdldFBhdGhgLlxuICAgKlxuICAgKiBDYWxsZWQgZnJvbSB0aGUgb3duaW5nIGNvbnN0cnVjdCdzIGBvblN5bnRoZXNpemVgIGhvb2suIFdpdGhvdXQgYSBidW5kbGVyXG4gICAqIHRoZSBzb3VyY2UgaXMgcGFja2FnZWQgdmVyYmF0aW07IHdpdGggb25lLCB0aGUgYnVuZGxlcidzIG91dHB1dCBpcywgYnVpbHRcbiAgICogZWFnZXJseSBmb3IgYE9VVFBVVGAgaGFzaGluZyBvciBkZWZlcnJlZCB0byBoZXJlIGZvciBgU09VUkNFYC5cbiAgICovXG4gIHB1YmxpYyBzdGFnZSh0YXJnZXRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBTdGFnZSBleGFjdGx5IG9uY2U6IGEgcmVidWlsZCBjb3VsZCBzdGFnZSBieXRlcyBub3QgbWF0Y2hpbmcgdGhlXG4gICAgLy8gYWxyZWFkeS1jb21wdXRlZCBoYXNoIChzZWUgdGhlIGBzdGFnZWRgIGZpZWxkKS5cbiAgICBpZiAodGhpcy5zdGFnZWQpIHtcbiAgICAgIHRocm93IGFzc2V0U3RhZ2luZ0FscmVhZHlTdGFnZWQodGhpcy5kaXNwbGF5TmFtZSk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VkID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5idW5kbGVyKSB7XG4gICAgICB0aGlzLnBhY2thZ2luZy5wYWNrKHtcbiAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZVBhdGgsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0UGF0aCxcbiAgICAgICAgaWdub3JlU3RyYXRlZ3k6IHRoaXMuaWdub3JlU3RyYXRlZ3ksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBgT1VUUFVUYCBoYXNoaW5nIGFscmVhZHkgYnVpbHQgdGhlIGFydGlmYWN0IGluIHRoZSBjb25zdHJ1Y3RvcjsgcGFja2FnZVxuICAgIC8vIHRoYXQgZXhhY3QgcmVzdWx0IGFuZCBjbGVhbiB1cCBpdHMgc2NyYXRjaCwgcmF0aGVyIHRoYW4gYnVpbGRpbmcgdHdpY2UuXG4gICAgaWYgKHRoaXMuZWFnZXJCdWlsZCkge1xuICAgICAgY29uc3QgeyBzY3JhdGNoLCBwcm9kdWNlZCB9ID0gdGhpcy5lYWdlckJ1aWxkO1xuICAgICAgdGhpcy5lYWdlckJ1aWxkID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wYWNrQnVuZGxlck91dHB1dChwcm9kdWNlZCwgdGFyZ2V0UGF0aCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmNsZWFudXBTY3JhdGNoKHNjcmF0Y2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGBTT1VSQ0VgIGhhc2hpbmcgZGVmZXJzIHRoZSBidWlsZCB0byBoZXJlLlxuICAgIGNvbnN0IHNjcmF0Y2ggPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY2RrdG4tYnVuZGxlLVwiKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcHJvZHVjZWQgfSA9IHRoaXMucnVuQnVuZGxlKHNjcmF0Y2gpO1xuICAgICAgdGhpcy5wYWNrQnVuZGxlck91dHB1dChwcm9kdWNlZCwgdGFyZ2V0UGF0aCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY2xlYW51cFNjcmF0Y2goc2NyYXRjaCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGJ1bmRsZXIgc2NyYXRjaCBkaXJlY3RvcnkgYW5kIGRyb3AgaXQgZnJvbSB0aGUgZXhpdC1zd2VlcCBzZXQuXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBTY3JhdGNoKHNjcmF0Y2g6IHN0cmluZyk6IHZvaWQge1xuICAgIGZzLnJtU3luYyhzY3JhdGNoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgc3RyYW5kZWRTY3JhdGNoRGlycy5kZWxldGUoc2NyYXRjaCk7XG4gIH1cblxuICAvKipcbiAgICogUGFja2FnZSBhIGJ1bmRsZXIncyBvdXRwdXQgaW50byBgdGFyZ2V0UGF0aGAsIHZlcmJhdGltLlxuICAgKlxuICAgKiBUaGUgb3V0cHV0J3Mgc2hhcGUgd2FzIGFscmVhZHkgdmFsaWRhdGVkIGFnYWluc3QgdGhlIHBhY2thZ2luZyBpblxuICAgKiB7QGxpbmsgcnVuQnVuZGxlfSwgc28gdGhlIHBhY2thZ2luZyBoYW5kbGVzIHRoZSBzb3VyY2UgZGlyZWN0bHkg4oCUIGEgZmlsZVxuICAgKiBzb3VyY2UgZm9yIEFzc2V0VHlwZS5GSUxFLCBhIGRpcmVjdG9yeSBzb3VyY2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgaWdub3JlIHN0cmF0ZWd5IGlzIGRlbGliZXJhdGVseSBub3QgYXBwbGllZC4gYGV4Y2x1ZGVgIGZpbHRlcnMgdGhlXG4gICAqIHNvdXJjZSBhIGJ1bmRsZXIgcmVhZHMsIG5vdCBpdHMgcHJvZHVjdDogYW4gaW5zdGFsbC1zdHlsZSBidW5kbGVyXG4gICAqIChgbnBtIGluc3RhbGwgLS1wcm9kdWN0aW9uYCwgYHBpcCBpbnN0YWxsIC10YCkgd3JpdGVzIGV4YWN0bHkgdGhlXG4gICAqIGRlcGVuZGVuY3kgZGlyZWN0b3J5IGEgdXNlciBleGNsdWRlcyBmcm9tIHNvdXJjZSwgYW5kIHJlLWFwcGx5aW5nIHRoZVxuICAgKiBleGNsdXNpb24gd291bGQgc2hpcCBhbiBhcnRpZmFjdCBtaXNzaW5nIHRob3NlIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHByaXZhdGUgcGFja0J1bmRsZXJPdXRwdXQocHJvZHVjZWQ6IHN0cmluZywgdGFyZ2V0UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYWNrYWdpbmcucGFjayh7XG4gICAgICBzb3VyY2U6IHByb2R1Y2VkLFxuICAgICAgdGFyZ2V0OiB0YXJnZXRQYXRoLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
package/lib/assets.js
CHANGED
|
@@ -115,7 +115,7 @@ class ZipPackaging {
|
|
|
115
115
|
* directly rather than extending this class.
|
|
116
116
|
*/
|
|
117
117
|
class AssetPackaging {
|
|
118
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AssetPackaging", version: "0.25.0-pre.
|
|
118
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AssetPackaging", version: "0.25.0-pre.53" };
|
|
119
119
|
/**
|
|
120
120
|
* Copy a single file as-is.
|
|
121
121
|
*/
|
|
@@ -161,7 +161,7 @@ var BundleOutputType;
|
|
|
161
161
|
* caller should fall back. See {@link declined} for the decline protocol.
|
|
162
162
|
*/
|
|
163
163
|
class BundleResult {
|
|
164
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BundleResult", version: "0.25.0-pre.
|
|
164
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BundleResult", version: "0.25.0-pre.53" };
|
|
165
165
|
/**
|
|
166
166
|
* A directory-tree artifact at `path`.
|
|
167
167
|
*/
|
|
@@ -217,7 +217,7 @@ exports.BundleResult = BundleResult;
|
|
|
217
217
|
*/
|
|
218
218
|
class BundlerKey {
|
|
219
219
|
parts;
|
|
220
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BundlerKey", version: "0.25.0-pre.
|
|
220
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BundlerKey", version: "0.25.0-pre.53" };
|
|
221
221
|
/**
|
|
222
222
|
* Start a key from an ordered list of parts.
|
|
223
223
|
*
|
|
@@ -278,7 +278,7 @@ exports.BundlerKey = BundlerKey;
|
|
|
278
278
|
*/
|
|
279
279
|
class ChainBundler {
|
|
280
280
|
bundlers;
|
|
281
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ChainBundler", version: "0.25.0-pre.
|
|
281
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ChainBundler", version: "0.25.0-pre.53" };
|
|
282
282
|
/**
|
|
283
283
|
* Chain bundlers in the order given; earlier bundlers are preferred.
|
|
284
284
|
*/
|
|
@@ -8,7 +8,7 @@ const terraform_remote_state_1 = require("../terraform-remote-state");
|
|
|
8
8
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
9
9
|
class AzurermBackend extends terraform_backend_1.TerraformBackend {
|
|
10
10
|
props;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AzurermBackend", version: "0.25.0-pre.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AzurermBackend", version: "0.25.0-pre.53" };
|
|
12
12
|
constructor(scope, props) {
|
|
13
13
|
super(scope, "backend", "azurerm");
|
|
14
14
|
this.props = props;
|
|
@@ -29,7 +29,7 @@ class AzurermBackend extends terraform_backend_1.TerraformBackend {
|
|
|
29
29
|
exports.AzurermBackend = AzurermBackend;
|
|
30
30
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
31
31
|
class DataTerraformRemoteStateAzurerm extends terraform_remote_state_1.TerraformRemoteState {
|
|
32
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.DataTerraformRemoteStateAzurerm", version: "0.25.0-pre.
|
|
32
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.DataTerraformRemoteStateAzurerm", version: "0.25.0-pre.53" };
|
|
33
33
|
constructor(scope, id, config) {
|
|
34
34
|
super(scope, id, "azurerm", config);
|
|
35
35
|
}
|
|
@@ -28,7 +28,7 @@ function getHostNameType(hostname) {
|
|
|
28
28
|
*/
|
|
29
29
|
class CloudBackend extends terraform_backend_1.TerraformBackend {
|
|
30
30
|
props;
|
|
31
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.CloudBackend", version: "0.25.0-pre.
|
|
31
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.CloudBackend", version: "0.25.0-pre.53" };
|
|
32
32
|
constructor(scope, props) {
|
|
33
33
|
super(scope, "backend", "cloud");
|
|
34
34
|
this.props = props;
|
|
@@ -94,7 +94,7 @@ exports.CloudBackend = CloudBackend;
|
|
|
94
94
|
* A cloud workspace can either be a single named workspace, or a list of tagged workspaces.
|
|
95
95
|
*/
|
|
96
96
|
class CloudWorkspace {
|
|
97
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.CloudWorkspace", version: "0.25.0-pre.
|
|
97
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.CloudWorkspace", version: "0.25.0-pre.53" };
|
|
98
98
|
}
|
|
99
99
|
exports.CloudWorkspace = CloudWorkspace;
|
|
100
100
|
/**
|
|
@@ -104,7 +104,7 @@ exports.CloudWorkspace = CloudWorkspace;
|
|
|
104
104
|
class NamedCloudWorkspace extends CloudWorkspace {
|
|
105
105
|
name;
|
|
106
106
|
project;
|
|
107
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NamedCloudWorkspace", version: "0.25.0-pre.
|
|
107
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NamedCloudWorkspace", version: "0.25.0-pre.53" };
|
|
108
108
|
constructor(name, project) {
|
|
109
109
|
super();
|
|
110
110
|
this.name = name;
|
|
@@ -133,7 +133,7 @@ exports.NamedCloudWorkspace = NamedCloudWorkspace;
|
|
|
133
133
|
class TaggedCloudWorkspaces extends CloudWorkspace {
|
|
134
134
|
tags;
|
|
135
135
|
project;
|
|
136
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TaggedCloudWorkspaces", version: "0.25.0-pre.
|
|
136
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TaggedCloudWorkspaces", version: "0.25.0-pre.53" };
|
|
137
137
|
constructor(tags, project) {
|
|
138
138
|
super();
|
|
139
139
|
this.tags = tags;
|
|
@@ -8,7 +8,7 @@ const terraform_remote_state_1 = require("../terraform-remote-state");
|
|
|
8
8
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
9
9
|
class ConsulBackend extends terraform_backend_1.TerraformBackend {
|
|
10
10
|
props;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ConsulBackend", version: "0.25.0-pre.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ConsulBackend", version: "0.25.0-pre.53" };
|
|
12
12
|
constructor(scope, props) {
|
|
13
13
|
super(scope, "backend", "consul");
|
|
14
14
|
this.props = props;
|
|
@@ -29,7 +29,7 @@ class ConsulBackend extends terraform_backend_1.TerraformBackend {
|
|
|
29
29
|
exports.ConsulBackend = ConsulBackend;
|
|
30
30
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
31
31
|
class DataTerraformRemoteStateConsul extends terraform_remote_state_1.TerraformRemoteState {
|
|
32
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.DataTerraformRemoteStateConsul", version: "0.25.0-pre.
|
|
32
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.DataTerraformRemoteStateConsul", version: "0.25.0-pre.53" };
|
|
33
33
|
constructor(scope, id, config) {
|
|
34
34
|
super(scope, id, "consul", config);
|
|
35
35
|
}
|
|
@@ -8,7 +8,7 @@ const terraform_remote_state_1 = require("../terraform-remote-state");
|
|
|
8
8
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
9
9
|
class CosBackend extends terraform_backend_1.TerraformBackend {
|
|
10
10
|
props;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.CosBackend", version: "0.25.0-pre.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.CosBackend", version: "0.25.0-pre.53" };
|
|
12
12
|
constructor(scope, props) {
|
|
13
13
|
super(scope, "backend", "cos");
|
|
14
14
|
this.props = props;
|
|
@@ -29,7 +29,7 @@ class CosBackend extends terraform_backend_1.TerraformBackend {
|
|
|
29
29
|
exports.CosBackend = CosBackend;
|
|
30
30
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
31
31
|
class DataTerraformRemoteStateCos extends terraform_remote_state_1.TerraformRemoteState {
|
|
32
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.DataTerraformRemoteStateCos", version: "0.25.0-pre.
|
|
32
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.DataTerraformRemoteStateCos", version: "0.25.0-pre.53" };
|
|
33
33
|
constructor(scope, id, config) {
|
|
34
34
|
super(scope, id, "cos", config);
|
|
35
35
|
}
|
|
@@ -8,7 +8,7 @@ const terraform_remote_state_1 = require("../terraform-remote-state");
|
|
|
8
8
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
9
9
|
class GcsBackend extends terraform_backend_1.TerraformBackend {
|
|
10
10
|
props;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.GcsBackend", version: "0.25.0-pre.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.GcsBackend", version: "0.25.0-pre.53" };
|
|
12
12
|
constructor(scope, props) {
|
|
13
13
|
super(scope, "backend", "gcs");
|
|
14
14
|
this.props = props;
|
|
@@ -29,7 +29,7 @@ class GcsBackend extends terraform_backend_1.TerraformBackend {
|
|
|
29
29
|
exports.GcsBackend = GcsBackend;
|
|
30
30
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
31
31
|
class DataTerraformRemoteStateGcs extends terraform_remote_state_1.TerraformRemoteState {
|
|
32
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.DataTerraformRemoteStateGcs", version: "0.25.0-pre.
|
|
32
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.DataTerraformRemoteStateGcs", version: "0.25.0-pre.53" };
|
|
33
33
|
constructor(scope, id, config) {
|
|
34
34
|
super(scope, id, "gcs", config);
|
|
35
35
|
}
|