projen-pipelines 0.3.18 → 0.3.20
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 +253 -117
- package/API.md +236 -0
- package/README.md +65 -0
- package/lib/assign-approver/base.js +1 -1
- package/lib/assign-approver/github.js +1 -1
- package/lib/awscdk/base.d.ts +34 -0
- package/lib/awscdk/base.js +35 -2
- package/lib/awscdk/bash.js +28 -2
- package/lib/awscdk/github.d.ts +12 -0
- package/lib/awscdk/github.js +53 -14
- package/lib/awscdk/gitlab.d.ts +4 -0
- package/lib/awscdk/gitlab.js +20 -9
- package/lib/drift/base.d.ts +19 -0
- package/lib/drift/base.js +29 -2
- package/lib/drift/bash.js +3 -2
- package/lib/drift/github.js +3 -2
- package/lib/drift/gitlab.js +3 -2
- package/lib/drift/step.js +1 -1
- package/lib/steps/amplify-deploy.step.js +1 -1
- package/lib/steps/artifact-steps.js +2 -2
- package/lib/steps/aws-assume-role.step.js +1 -1
- package/lib/steps/github-summary.step.js +1 -1
- package/lib/steps/package-manager-setup.step.d.ts +2 -0
- package/lib/steps/package-manager-setup.step.js +16 -3
- package/lib/steps/registries.js +3 -3
- package/lib/steps/step.js +4 -4
- package/lib/versioning/computation.js +3 -3
- package/lib/versioning/config.js +2 -2
- package/lib/versioning/outputs.js +5 -5
- package/lib/versioning/setup.js +1 -1
- package/lib/versioning/strategy.js +1 -1
- package/lib/versioning/version-info.js +2 -2
- package/llm.md +64 -0
- package/package.json +1 -1
package/lib/awscdk/base.js
CHANGED
|
@@ -3,6 +3,7 @@ var _a;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.CDKPipeline = exports.CdkDiffType = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const path = require("path");
|
|
6
7
|
const projen_1 = require("projen");
|
|
7
8
|
const common_1 = require("projen/lib/common");
|
|
8
9
|
const javascript_1 = require("projen/lib/javascript");
|
|
@@ -36,6 +37,14 @@ class CDKPipeline extends projen_1.Component {
|
|
|
36
37
|
super(app);
|
|
37
38
|
this.app = app;
|
|
38
39
|
this.baseOptions = baseOptions;
|
|
40
|
+
// Compute working directory for monorepo support
|
|
41
|
+
if (baseOptions.workingDirectory) {
|
|
42
|
+
this.workingDirectory = baseOptions.workingDirectory;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const rel = path.relative(this.app.root.outdir, this.app.outdir).replace(/\\/g, '/');
|
|
46
|
+
this.workingDirectory = rel || undefined;
|
|
47
|
+
}
|
|
39
48
|
// Add development dependencies
|
|
40
49
|
this.app.addDevDeps('commit-and-tag-version', 'cdk-assets');
|
|
41
50
|
// this.app.addDeps(
|
|
@@ -105,6 +114,9 @@ class CDKPipeline extends projen_1.Component {
|
|
|
105
114
|
if (this.baseOptions.preSynthCommands) {
|
|
106
115
|
seq.addSteps(new steps_1.SimpleCommandStep(this.project, this.baseOptions.preSynthCommands));
|
|
107
116
|
}
|
|
117
|
+
if (this.baseOptions.preBuildCommand) {
|
|
118
|
+
seq.addSteps(new steps_1.SimpleCommandStep(this.project, [this.preBuildCommandWrapped()]));
|
|
119
|
+
}
|
|
108
120
|
seq.addSteps(new steps_1.ProjenScriptStep(this.project, 'build'));
|
|
109
121
|
seq.addSteps(...this.baseOptions.postSynthSteps ?? []);
|
|
110
122
|
if (this.baseOptions.postSynthCommands) {
|
|
@@ -112,6 +124,27 @@ class CDKPipeline extends projen_1.Component {
|
|
|
112
124
|
}
|
|
113
125
|
return seq;
|
|
114
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Returns the preBuildCommand wrapped to execute from the repository root.
|
|
129
|
+
* When workingDirectory is set, the command is prefixed with a cd to the
|
|
130
|
+
* repo root using engine-appropriate environment variables.
|
|
131
|
+
*/
|
|
132
|
+
preBuildCommandWrapped() {
|
|
133
|
+
const cmd = this.baseOptions.preBuildCommand;
|
|
134
|
+
if (!this.workingDirectory) {
|
|
135
|
+
return cmd;
|
|
136
|
+
}
|
|
137
|
+
switch (this.engineType()) {
|
|
138
|
+
case engine_1.PipelineEngine.GITHUB:
|
|
139
|
+
return `cd $GITHUB_WORKSPACE && ${cmd}`;
|
|
140
|
+
case engine_1.PipelineEngine.GITLAB:
|
|
141
|
+
return `(cd $CI_PROJECT_DIR && ${cmd})`;
|
|
142
|
+
case engine_1.PipelineEngine.BASH:
|
|
143
|
+
return `(cd "$(git rev-parse --show-toplevel)" && ${cmd})`;
|
|
144
|
+
default:
|
|
145
|
+
return cmd;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
115
148
|
provideAssetUploadStep(stageName) {
|
|
116
149
|
const seq = new steps_1.StepSequence(this.project, []);
|
|
117
150
|
const globalPublishRole = this.baseOptions.iamRoleArns.assetPublishing ?? this.baseOptions.iamRoleArns.default;
|
|
@@ -687,5 +720,5 @@ function addVersioningToStack(stack: Stack, stageName: string, stageOverrides?:
|
|
|
687
720
|
}
|
|
688
721
|
exports.CDKPipeline = CDKPipeline;
|
|
689
722
|
_a = JSII_RTTI_SYMBOL_1;
|
|
690
|
-
CDKPipeline[_a] = { fqn: "projen-pipelines.CDKPipeline", version: "0.3.
|
|
691
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFxRDtBQUNyRCw4Q0FBa0Q7QUFDbEQsc0RBQTJEO0FBQzNELHNDQUEyQztBQUMzQyxvQ0FBZ0o7QUFDaEosOENBQWtFO0FBdUJsRSxNQUFNO0FBQ04seURBQXlEO0FBQ3pELE1BQU07QUFDTiwrQkFBK0I7QUFDL0IsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQUMzQiw0RUFBNEU7QUFDNUUseUJBQXlCO0FBQ3pCLElBQUk7QUFFSixJQUFZLFdBT1g7QUFQRCxXQUFZLFdBQVc7SUFDckIsNEJBQTRCO0lBQzVCLDZDQUFJLENBQUE7SUFDSixvREFBb0Q7SUFDcEQsNkNBQUksQ0FBQTtJQUNKLHVEQUF1RDtJQUN2RCw2Q0FBSSxDQUFBO0FBQ04sQ0FBQyxFQVBXLFdBQVcsMkJBQVgsV0FBVyxRQU90QjtBQTZLRDs7O0dBR0c7QUFDSCxNQUFzQixXQUFZLFNBQVEsa0JBQVM7SUFPakQsWUFBc0IsR0FBK0IsRUFBWSxXQUErQjtRQUM5RixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFEUyxRQUFHLEdBQUgsR0FBRyxDQUE0QjtRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUc5RiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2pCLHdCQUF3QixFQUN4QixZQUFZLENBQ2IsQ0FBQztRQUNGLG9CQUFvQjtRQUNwQixLQUFLO1FBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFdEQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JGLElB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QjtRQUNoQyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUpULENBQUM7SUFDRCxDQUFDOztBQXp0Qkgsa0NBMHRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVGV4dEZpbGUsIGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBQUk9KRU5fTUFSS0VSIH0gZnJvbSAncHJvamVuL2xpYi9jb21tb24nO1xuaW1wb3J0IHsgTm9kZVBhY2thZ2VNYW5hZ2VyIH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IFBpcGVsaW5lRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7IEF3c0Fzc3VtZVJvbGVTdGVwLCBQaXBlbGluZVN0ZXAsIFByb2plblNjcmlwdFN0ZXAsIFNpbXBsZUNvbW1hbmRTdGVwLCBTdGVwU2VxdWVuY2UsIFBucG1TZXR1cFN0ZXAsIENvcmVwYWNrU2V0dXBTdGVwIH0gZnJvbSAnLi4vc3RlcHMnO1xuaW1wb3J0IHsgVmVyc2lvbmluZ0NvbmZpZywgVmVyc2lvbmluZ1NldHVwIH0gZnJvbSAnLi4vdmVyc2lvbmluZyc7XG5cbi8qKlxuICogVGhlIEVudmlyb25tZW50IGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBob2xkIEFXUyByZWxhdGVkIGluZm9ybWF0aW9uXG4gKiBmb3IgYSBzcGVjaWZpYyBkZXBsb3ltZW50IGVudmlyb25tZW50IHdpdGhpbiB5b3VyIGluZnJhc3RydWN0dXJlLlxuICogRWFjaCBlbnZpcm9ubWVudCByZXF1aXJlcyBhIHNwZWNpZmljIGFjY291bnQgYW5kIHJlZ2lvbiBmb3IgaXRzIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIEFjY291bnQgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnZpcm9ubWVudC4gSXQncyBpbXBvcnRhbnQgYmVjYXVzZVxuICAgKiBkaWZmZXJlbnQgc2VydmljZXMgb3IgZmVhdHVyZXMgY291bGQgaGF2ZSBkaXN0aW5jdCBwZXJtaXNzaW9ucyBhbmQgc2V0dGluZ3NcbiAgICogaW4gZGlmZmVyZW50IGFjY291bnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIFJlZ2lvbiBmb3IgdGhlIGVudmlyb25tZW50LiBUaGlzIGRldGVybWluZXMgd2hlcmUgeW91ciByZXNvdXJjZXNcbiAgICogYXJlIGNyZWF0ZWQgYW5kIHdoZXJlIHlvdXIgYXBwbGljYXRpb24gd2lsbCBydW4uIEl0IGNhbiBhZmZlY3QgbGF0ZW5jeSxcbiAgICogYXZhaWxhYmlsaXR5LCBhbmQgcHJpY2luZy5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xufVxuXG4vLyAvKipcbi8vICAqIERlc2NyaWJlcyB0aGUgdHlwZSBvZiBwaXBlbGluZSB0aGF0IHdpbGwgYmUgY3JlYXRlZFxuLy8gICovXG4vLyBleHBvcnQgZW51bSBEZXBsb3ltZW50VHlwZSB7XG4vLyAgIC8qKiBEZXBsb3kgZXZlcnkgY29tbWl0IGFzIGZhciBhcyBwb3NzaWJsZTsgaG9wZWZ1bGx5IGludG8gcHJvZHVjdGlvbiAqL1xuLy8gICBDT05USU5VT1VTX0RFUExPWU1FTlQsXG4vLyAgIC8qKiBCdWlsZCBldmVyeSBjb21taXQgYW5kIHByZXBhcmUgYWxsIGFzc2V0cyBmb3IgYSBsYXRlciBkZXBsb3ltZW50ICovXG4vLyAgIENPTlRJTlVPVVNfREVMSVZFUlksXG4vLyB9XG5cbmV4cG9ydCBlbnVtIENka0RpZmZUeXBlIHtcbiAgLyoqIERvIG5vdCBwZXJmb3JtIGEgZGlmZiAqL1xuICBOT05FLFxuICAvKiogUGVyZm9ybSBhIGZhc3QgdGVtcGxhdGUgZGlmZiAoLS1uby1jaGFuZ2VzZXQpICovXG4gIEZBU1QsXG4gIC8qKiBQZXJmb3JtIGEgZnVsbCBDbG91ZEZvcm1hdGlvbiBkaWZmICgtLWNoYW5nZXNldCkgKi9cbiAgRlVMTCxcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFnZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgcGlwZWxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBOYW1lZFN0YWdlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IG1hbnVhbEFwcHJvdmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFnZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIHBpcGVsaW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXBlbmRlbnRTdGFnZSBleHRlbmRzIE5hbWVkU3RhZ2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHN0YWdlIHNob3VsZCBiZSBkZXBsb3llZCBvbiBwdXNoXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lPblB1c2g/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgQ0RLIHN0YWdlIHdpdGggYSBuYW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFtZWRTdGFnZU9wdGlvbnMgZXh0ZW5kcyBTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBHaXRIdWIgZW52aXJvbm1lbnQgdG8gdXNlIGZvciB0aGlzIHN0YWdlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgc3RhZ2UgbmFtZSB3aWxsIGJlIHVzZWQgYXMgdGhlIEdpdEh1YiBlbnZpcm9ubWVudCBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBzdGFnZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBnaXRodWJFbnZpcm9ubWVudD86IHN0cmluZztcblxuICByZWFkb25seSB3YXRjaGFibGU/OiBib29sZWFuO1xuICByZWFkb25seSBkaWZmVHlwZT86IENka0RpZmZUeXBlO1xuICByZWFkb25seSBwb3N0RGlmZlN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG4gIHJlYWRvbmx5IHBvc3REZXBsb3lTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgQ0RLIHN0YWdlIGxpa2UgdGhlIHRhcmdldCBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIElBTSByb2xlcyB1c2VkIGluIHRoZSBDREsgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWFtUm9sZUNvbmZpZyB7XG4gIC8qKiBEZWZhdWx0IElBTSByb2xlIEFSTiB1c2VkIGlmIG5vIHNwZWNpZmljIHJvbGUgaXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBBUk4gZm9yIHRoZSBzeW50aGVzaXMgc3RlcC4gKi9cbiAgcmVhZG9ubHkgc3ludGg/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBBUk4gZm9yIHRoZSBhc3NldCBwdWJsaXNoaW5nIHN0ZXAuICovXG4gIHJlYWRvbmx5IGFzc2V0UHVibGlzaGluZz86IHN0cmluZztcbiAgLyoqIElBTSByb2xlIEFSTiBmb3IgdGhlIGFzc2V0IHB1Ymxpc2hpbmcgc3RlcCBmb3IgYSBzcGVjaWZpYyBzdGFnZS4gKi9cbiAgcmVhZG9ubHkgYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2U/OiB7IFtzdGFnZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKiBJQU0gcm9sZSBBUk5zIGZvciBkaWZmZXJlbnQgZGlmZiBzdGFnZXMuICovXG4gIHJlYWRvbmx5IGRpZmY/OiB7IFtzdGFnZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKiBJQU0gcm9sZSBBUk5zIGZvciBkaWZmZXJlbnQgZGVwbG95bWVudCBzdGFnZXMuICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnQ/OiB7IFtzdGFnZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBJQU0gcm9sZSBBUk5zIGZvciB1c2luZyBhIFwianVtcFwiIHJvbGUgdG8gYXNzdW1lIHRoZSBkZXBsb3kgcm9sZSBpbiBhIGRpZmZlcmVudCBBV1MgYWNjb3VudCB1c2luZyBSb2xlIENoYWluaW5nLlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFscz90YWI9cmVhZG1lLW92LWZpbGUjYXNzdW1lcm9sZS13aXRoLXJvbGUtcHJldmlvdXNseS1hc3N1bWVkLWJ5LWFjdGlvbi1pbi1zYW1lLXdvcmtmbG93XG4gICAqICovXG4gIHJlYWRvbmx5IGp1bXA/OiB7IFtzdGFnZTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lT3B0aW9ucyBpbnRlcmZhY2UgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBjb25maWd1cmF0aW9uXG4gKiBvcHRpb25zIGZvciBhIENESyAoQ2xvdWQgRGV2ZWxvcG1lbnQgS2l0KSBwaXBlbGluZS4gSXQgYWxsb3dzIHRoZSBkZWZpbml0aW9uXG4gKiBvZiBzZXR0aW5ncyBzdWNoIGFzIHRoZSBzdGFjayBwcmVmaXggYW5kIHBhY2thZ2UgbmFtZXNwYWNlIHRvIGJlIHVzZWQgaW4gdGhlXG4gKiBBV1Mgc3RhY2ssIGFsb25nIHdpdGggdGhlIGVudmlyb25tZW50cyBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ0RLUGlwZWxpbmVPcHRpb25zIHtcblxuICAvKipcbiAgICogQSB1bmlxdWUgbmFtZSBmb3IgdGhpcyBwaXBlbGluZSwgdXNlZCBhcyBhIHByZWZpeCBmb3Igd29ya2Zsb3cgZmlsZXMsXG4gICAqIGNvbmN1cnJlbmN5IGdyb3VwcywgYW5kIGFydGlmYWN0IG5hbWVzIHRvIHByZXZlbnQgY29sbGlzaW9ucyBpbiBtb25vcmVwb3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHByb2plY3QgbmFtZSBpZiB0aGUgcHJvamVjdCBoYXMgYSBwYXJlbnQgKG1vbm9yZXBvIHN1YnByb2plY3QpLCBvdGhlcndpc2Ugbm8gcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggdG8gZGVwbG95IGZyb21cbiAgICogQGRlZmF1bHQgbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsZSBwYXRoIHBhdHRlcm5zIHRoYXQgc2hvdWxkIHRyaWdnZXIgdGhlIHBpcGVsaW5lIHdoZW4gY2hhbmdlZC5cbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIG1vbm9yZXBvcyB3aGVyZSB5b3Ugb25seSB3YW50IHRvIHJ1biB0aGUgcGlwZWxpbmVcbiAgICogd2hlbiBmaWxlcyBpbiBhIHNwZWNpZmljIHN1YnByb2plY3QgYXJlIG1vZGlmaWVkLlxuICAgKlxuICAgKiBGb3IgR2l0SHViLCB0aGVzZSBhcmUgdXNlZCBhcyBgb24ucHVzaC5wYXRoc2AgYW5kIGBvbi5wdWxsX3JlcXVlc3QucGF0aHNgIGZpbHRlcnMuXG4gICAqIEZvciBHaXRMYWIsIHRoZXNlIGFyZSB1c2VkIGFzIGBvbmx5LmNoYW5nZXNgIGZpbHRlcnMuXG4gICAqXG4gICAqIEBleGFtcGxlIFsncGFja2FnZXMvbXktYXBwLyoqJywgJ3NoYXJlZC1saWJzLyoqJ11cbiAgICogQGRlZmF1bHQgLSBhbGwgcGF0aHMgdHJpZ2dlciB0aGUgcGlwZWxpbmVcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgaXMgdXNlZCB0byBkZWZpbmUgYSBwcmVmaXggZm9yIHRoZSBBV1MgU3RhY2sgcmVzb3VyY2VzIGNyZWF0ZWRcbiAgICogZHVyaW5nIHRoZSBwaXBlbGluZSdzIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgcHJvamVjdCBuYW1lXG4gICAqL1xuICByZWFkb25seSBzdGFja1ByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUgYWxsIENESyBhY3Rpb25zIHdpbGwgYWxzbyBpbmNsdWRlIDxzdGFja05hbWU+LyogdG8gZGVwbG95L2RpZmYvZGVzdHJveSBzdWIgc3RhY2tzIG9mIHRoZSBtYWluIHN0YWNrLlxuICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIGRlcGxveSBDRGsgYXBwbGljYXRpb25zIGNvbnRhaW5pbmcgbXVsdGlwbGUgc3RhY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95U3ViU3RhY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhpcyBmaWVsZCBkZXRlcm1pbmVzIHRoZSBOUE0gbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiBwYWNrYWdpbmcgQ0RLIGNsb3VkXG4gICAqIGFzc2VtYmxpZXMuIEEgbmFtZXNwYWNlIGhlbHBzIGdyb3VwIHJlbGF0ZWQgcmVzb3VyY2VzIHRvZ2V0aGVyLCBwcm92aWRpbmdcbiAgICogYmV0dGVyIG9yZ2FuaXphdGlvbiBhbmQgZWFzZSBvZiBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgbmVlZGVkIGlmIHlvdSBuZWVkIHRvIHZlcnNpb24gYW5kIHVwbG9hZCB0aGUgY2xvdWQgYXNzZW1ibHkgdG8gYSBwYWNrYWdlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC1cbiAgICovXG4gIHJlYWRvbmx5IHBrZ05hbWVzcGFjZT86IHN0cmluZztcblxuICAvKiogSUFNIGNvbmZpZyAqL1xuICByZWFkb25seSBpYW1Sb2xlQXJuczogSWFtUm9sZUNvbmZpZztcblxuICAvKipcbiAgICogVGhpcyBmaWVsZCBzcGVjaWZpZXMgYSBsaXN0IG9mIHN0YWdlcyB0aGF0IHNob3VsZCBiZSBkZXBsb3llZCB1c2luZyBhIENJL0NEIHBpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM6IERlcGxveW1lbnRTdGFnZVtdO1xuXG4gIC8qKiBUaGlzIHNwZWNpZmllcyBkZXRhaWxzIGZvciBpbmRlcGVuZGVudCBzdGFnZXMgKi9cbiAgcmVhZG9ubHkgaW5kZXBlbmRlbnRTdGFnZXM/OiBJbmRlcGVuZGVudFN0YWdlW107XG5cbiAgLyoqIFRoaXMgc3BlY2lmaWVzIGRldGFpbHMgZm9yIGEgcGVyc29uYWwgc3RhZ2UgKi9cbiAgcmVhZG9ubHkgcGVyc29uYWxTdGFnZT86IFN0YWdlT3B0aW9ucztcblxuICAvKiogVGhpcyBzcGVjaWZpZXMgZGV0YWlscyBmb3IgZmVhdHVyZSBzdGFnZXMgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZVN0YWdlcz86IFN0YWdlT3B0aW9ucztcblxuICAvLyAvKipcbiAgLy8gICogVGhpcyBmaWVsZCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgcGlwZWxpbmUgdG8gY3JlYXRlLiBJZiBzZXQgdG8gQ09OVElOVU9VU19ERVBMT1lNRU5ULFxuICAvLyAgKiBldmVyeSBjb21taXQgaXMgZGVwbG95ZWQgYXMgZmFyIGFzIHBvc3NpYmxlLCBob3BlZnVsbHkgaW50byBwcm9kdWN0aW9uLiBJZiBzZXQgdG9cbiAgLy8gICogQ09OVElOVU9VU19ERUxJVkVSWSwgZXZlcnkgY29tbWl0IGlzIGJ1aWx0IGFuZCBhbGwgYXNzZXRzIGFyZSBwcmVwYXJlZCBmb3IgYSBsYXRlciBkZXBsb3ltZW50LlxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCBDT05USU5VT1VTX0RFTElWRVJZXG4gIC8vICAqL1xuICAvLyByZWFkb25seSBkZXBsb3ltZW50VHlwZT86IERlcGxveW1lbnRUeXBlO1xuXG4gIHJlYWRvbmx5IHByZUluc3RhbGxDb21tYW5kcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBwcmVTeW50aENvbW1hbmRzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHBvc3RTeW50aENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG4gIHJlYWRvbmx5IHByZVN5bnRoU3RlcHM/OiBQaXBlbGluZVN0ZXBbXTtcbiAgcmVhZG9ubHkgcG9zdFN5bnRoU3RlcHM/OiBQaXBlbGluZVN0ZXBbXTtcblxuICAvKipcbiAgICogVmVyc2lvbmluZyBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uaW5nPzogVmVyc2lvbmluZ0NvbmZpZztcbn1cblxuLyoqXG4gKiBUaGUgQ0RLUGlwZWxpbmUgY2xhc3MgZXh0ZW5kcyB0aGUgQ29tcG9uZW50IGNsYXNzIGFuZCBzZXRzIHVwIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmb3IgZGVwbG95aW5nIEFXUyBDREsgKENsb3VkIERldmVsb3BtZW50IEtpdCkgYXBwbGljYXRpb25zIGFjcm9zcyBtdWx0aXBsZSBzdGFnZXMuXG4gKiBJdCBhbHNvIG1hbmFnZXMgdGFza3Mgc3VjaCBhcyBwdWJsaXNoaW5nIENESyBhc3NldHMsIGJ1bXBpbmcgdmVyc2lvbiBiYXNlZCBvbiBnaXQgdGFncywgYW5kIGNsZWFuaW5nIHVwIGNvbmZsaWN0aW5nIHRhc2tzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ0RLUGlwZWxpbmUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tQcmVmaXg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGJyYW5jaE5hbWU6IHN0cmluZztcblxuICAvKiogUHJlZml4IGZvciB3b3JrZmxvdyBmaWxlcywgY29uY3VycmVuY3kgZ3JvdXBzLCBhbmQgYXJ0aWZhY3QgbmFtZXMgdG8gcHJldmVudCBjb2xsaXNpb25zIGluIG1vbm9yZXBvcy4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWVQcmVmaXg6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBwOiBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCwgcHJvdGVjdGVkIGJhc2VPcHRpb25zOiBDREtQaXBlbGluZU9wdGlvbnMpIHtcbiAgICBzdXBlcihhcHApO1xuXG4gICAgLy8gQWRkIGRldmVsb3BtZW50IGRlcGVuZGVuY2llc1xuICAgIHRoaXMuYXBwLmFkZERldkRlcHMoXG4gICAgICAnY29tbWl0LWFuZC10YWctdmVyc2lvbicsXG4gICAgICAnY2RrLWFzc2V0cycsXG4gICAgKTtcbiAgICAvLyB0aGlzLmFwcC5hZGREZXBzKFxuICAgIC8vICk7XG4gICAgdGhpcy5wcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKCcvY2RrLW91dHB1dHMtKi5qc29uJyk7XG5cbiAgICBjb25zdCBwaXBlbGluZU5hbWUgPSBiYXNlT3B0aW9ucy5waXBlbGluZU5hbWUgPz8gKGFwcC5wYXJlbnQgPyBhcHAubmFtZSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lUHJlZml4ID0gcGlwZWxpbmVOYW1lID8gYCR7cGlwZWxpbmVOYW1lfS1gIDogJyc7XG4gICAgdGhpcy5zdGFja1ByZWZpeCA9IGJhc2VPcHRpb25zLnN0YWNrUHJlZml4ID8/IGFwcC5uYW1lO1xuICAgIHRoaXMuYnJhbmNoTmFtZSA9IGJhc2VPcHRpb25zLmJyYW5jaE5hbWUgPz8gJ21haW4nOyAvLyBUT0RPIHVzZSBkZWZhdWx0UmVsZWFzZUJyYW5jaCBvZiBOb2RlUHJvamVjdFxuXG4gICAgLy8gUmVtb3ZlcyB0aGUgY29tcGlsZWQgY2xvdWQgYXNzZW1ibHkgYmVmb3JlIGVhY2ggc3ludGhcbiAgICB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZCgnc3ludGgnKT8ucHJlcGVuZEV4ZWMoYHJtIC1yZiAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9YCk7XG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoJ3N5bnRoOnNpbGVudCcpPy5wcmVwZW5kRXhlYyhgcm0gLXJmICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH1gKTtcblxuICAgIC8vIFJlbW92ZSB0YXNrcyB0aGF0IG1pZ2h0IGNvbmZsaWN0IHdpdGggdGhlIHBpcGVsaW5lIHByb2Nlc3NcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnZGVwbG95Jyk7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2RpZmYnKTtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnZGVzdHJveScpO1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCd3YXRjaCcpO1xuXG4gICAgLy8gU2V0dXAgdmVyc2lvbmluZyBpZiBlbmFibGVkXG4gICAgaWYgKGJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIG5ldyBWZXJzaW9uaW5nU2V0dXAodGhpcy5wcm9qZWN0LCBiYXNlT3B0aW9ucy52ZXJzaW9uaW5nKS5zZXR1cCgpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZXMgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RhZ2VzXG4gICAgaWYgKGJhc2VPcHRpb25zLnBlcnNvbmFsU3RhZ2UpIHtcbiAgICAgIHRoaXMuY3JlYXRlUGVyc29uYWxTdGFnZSgpO1xuICAgIH1cbiAgICBpZiAoYmFzZU9wdGlvbnMuZmVhdHVyZVN0YWdlcykge1xuICAgICAgdGhpcy5jcmVhdGVGZWF0dXJlU3RhZ2UoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBiYXNlT3B0aW9ucy5zdGFnZXMpIHtcbiAgICAgIHRoaXMuY3JlYXRlUGlwZWxpbmVTdGFnZShzdGFnZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgKGJhc2VPcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdKSkge1xuICAgICAgdGhpcy5jcmVhdGVJbmRlcGVuZGVudFN0YWdlKHN0YWdlKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIHRhc2tzIHRvIGhhbmRsZSB0aGUgcmVsZWFzZSBwcm9jZXNzXG4gICAgdGhpcy5jcmVhdGVSZWxlYXNlVGFza3MoKTtcblxuICAgIC8vIENyZWF0ZXMgYSBzcGVjaWFsaXplZCBDREsgQXBwIGNsYXNzXG4gICAgdGhpcy5jcmVhdGVBcHBsaWNhdGlvbkVudHJ5cG9pbnQoKTtcblxuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGVuZ2luZVR5cGUoKTogUGlwZWxpbmVFbmdpbmU7XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVJbnN0YWxsU3RlcCgpOiBQaXBlbGluZVN0ZXAge1xuICAgIGNvbnN0IHNlcSA9IG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCB0aGlzLmJhc2VPcHRpb25zLnByZUluc3RhbGxTdGVwcyA/PyBbXSk7XG5cbiAgICAvLyBEZXRlY3QgYW5kIGFkZCBwbnBtIHNldHVwIGlmIG5lZWRlZCAoR2l0SHViIG9ubHkpXG4gICAgaWYgKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNICYmIHRoaXMuZW5naW5lVHlwZSgpID09PSBQaXBlbGluZUVuZ2luZS5HSVRIVUIpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgUG5wbVNldHVwU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgdmVyc2lvbjogKHRoaXMuYXBwLnBhY2thZ2UgYXMgYW55KS5wbnBtVmVyc2lvbixcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3QgYW5kIGFkZCBjb3JlcGFjayBlbmFibGUgZm9yIFlhcm4gQmVycnlcbiAgICBpZiAodGhpcy5hcHAucGFja2FnZS5wYWNrYWdlTWFuYWdlciA9PT0gTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlkpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQ29yZXBhY2tTZXR1cFN0ZXAodGhpcy5wcm9qZWN0KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsQ29tbWFuZHMpKTtcbiAgICB9XG4gICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIFt0aGlzLmFwcC5wYWNrYWdlLmluc3RhbGxDb21tYW5kXSkpO1xuICAgIHJldHVybiBzZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZVN5bnRoU3RlcCgpOiBQaXBlbGluZVN0ZXAge1xuICAgIGNvbnN0IHNlcSA9IG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXSk7XG5cbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucz8uc3ludGgpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuc3ludGgsXG4gICAgICAgIGp1bXBSb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmp1bXA/LnN5bnRoLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHNlcS5hZGRTdGVwcyguLi50aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoU3RlcHMgPz8gW10pO1xuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoQ29tbWFuZHMpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCB0aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoQ29tbWFuZHMpKTtcbiAgICB9XG5cbiAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCAnYnVpbGQnKSk7XG5cbiAgICBzZXEuYWRkU3RlcHMoLi4udGhpcy5iYXNlT3B0aW9ucy5wb3N0U3ludGhTdGVwcyA/PyBbXSk7XG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucG9zdFN5bnRoQ29tbWFuZHMpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCB0aGlzLmJhc2VPcHRpb25zLnBvc3RTeW50aENvbW1hbmRzKSk7XG4gICAgfVxuICAgIHJldHVybiBzZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZUFzc2V0VXBsb2FkU3RlcChzdGFnZU5hbWU/OiBzdHJpbmcpOiBQaXBlbGluZVN0ZXAge1xuICAgIGNvbnN0IHNlcSA9IG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXSk7XG5cbiAgICBjb25zdCBnbG9iYWxQdWJsaXNoUm9sZSA9IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nID8/IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuZGVmYXVsdCE7XG4gICAgaWYgKHN0YWdlTmFtZSkge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgcm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmdQZXJTdGFnZSA/XG4gICAgICAgICAgKHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2Vbc3RhZ2VOYW1lXSA/PyBnbG9iYWxQdWJsaXNoUm9sZSkgOlxuICAgICAgICAgIGdsb2JhbFB1Ymxpc2hSb2xlLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2VOYW1lXSxcbiAgICAgIH0pKTtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgUHJvamVuU2NyaXB0U3RlcCh0aGlzLnByb2plY3QsIGBwdWJsaXNoOmFzc2V0czoke3N0YWdlTmFtZX1gKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlKSB7XG4gICAgICAgIGNvbnN0IHN0YWdlcyA9IFsuLi50aGlzLmJhc2VPcHRpb25zLnN0YWdlcywgLi4udGhpcy5iYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXV07XG4gICAgICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2Vbc3RhZ2UubmFtZV0gPz8gZ2xvYmFsUHVibGlzaFJvbGUsXG4gICAgICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHNlcS5hZGRTdGVwcyhuZXcgUHJvamVuU2NyaXB0U3RlcCh0aGlzLnByb2plY3QsIGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXEuYWRkU3RlcHMobmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICAgIHJvbGVBcm46IGdsb2JhbFB1Ymxpc2hSb2xlLFxuICAgICAgICAgIGp1bXBSb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmp1bXA/LmFzc2V0UHVibGlzaGluZyxcbiAgICAgICAgfSkpO1xuICAgICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCAncHVibGlzaDphc3NldHMnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm92aWRlQXNzZW1ibHlVcGxvYWRTdGVwKCk6IFBpcGVsaW5lU3RlcCB7XG4gICAgaWYgKCF0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwa2dOYW1lc3BhY2UgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyB2ZXJzaW9uZWQgYXJ0aWZhY3RzIChlLmcuIG1hbnVhbCBhcHByb3ZhbHMpJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW1xuICAgICAgbmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCAnYnVtcCcpLFxuICAgICAgbmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCAncmVsZWFzZTpwdXNoLWFzc2VtYmx5JyksXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZURlcGxveVN0ZXAoc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zKTogUGlwZWxpbmVTdGVwIHtcbiAgICByZXR1cm4gbmV3IFN0ZXBTZXF1ZW5jZSh0aGlzLnByb2plY3QsIFtcbiAgICAgIG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgcm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucz8uZGVwbG95bWVudD8uW3N0YWdlLm5hbWVdID8/IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlZmF1bHQhLFxuICAgICAgICByZWdpb246IHN0YWdlLmVudi5yZWdpb24sXG4gICAgICAgIGp1bXBSb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmp1bXA/LltzdGFnZS5uYW1lXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgZGVwbG95OiR7c3RhZ2UubmFtZX1gKSxcbiAgICAgIC4uLnN0YWdlLnBvc3REZXBsb3lTdGVwcyA/PyBbXSxcbiAgICBdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm92aWRlRGlmZlN0ZXAoc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zLCBmYXN0PzogYm9vbGVhbik6IFBpcGVsaW5lU3RlcCB7XG4gICAgcmV0dXJuIG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXG4gICAgICBuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRpZmY/LltzdGFnZS5uYW1lXSA/P1xuICAgICAgICAgIHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlcGxveW1lbnQ/LltzdGFnZS5uYW1lXSA/P1xuICAgICAgICAgIHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlZmF1bHQhLFxuICAgICAgICByZWdpb246IHN0YWdlLmVudi5yZWdpb24sXG4gICAgICAgIGp1bXBSb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmp1bXA/LltzdGFnZS5uYW1lXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBmYXN0ID8gYGZhc3RkaWZmOiR7c3RhZ2UubmFtZX1gIDogYGRpZmY6JHtzdGFnZS5uYW1lfWApLFxuICAgICAgLi4uc3RhZ2UucG9zdERpZmZTdGVwcyA/PyBbXSxcbiAgICBdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJbnN0YWxsUGFja2FnZUNvbW1hbmRzKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHJ1blByZUluc3RhbGxDb21tYW5kczogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gcnVuUHJlSW5zdGFsbENvbW1hbmRzID8gdGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10gOiBbXTtcblxuICAgIHN3aXRjaCAodGhpcy5hcHAucGFja2FnZS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk4yOlxuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9CRVJSWTpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQ0xBU1NJQzpcbiAgICAgICAgY29tbWFuZHMucHVzaChgeWFybiBhZGQgJHtwYWNrYWdlTmFtZX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5OUE06XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYG5wbSBpbnN0YWxsICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgICAgY29tbWFuZHMucHVzaChgcG5wbSBhZGQgJHtwYWNrYWdlTmFtZX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGluc3RhbGwgc2NyaXB0cyBmb3IgcGFja2FnZU1hbmFnZXI6ICcgKyB0aGlzLmFwcC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVNhZmVTdGFnZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBSZW1vdmUgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBzcGxpdCBpbnRvIHdvcmRzXG4gICAgY29uc3Qgd29yZHMgPSBuYW1lLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJyAnKS50cmltKCkuc3BsaXQoL1xccysvKTtcblxuICAgIC8vIENhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgYW5kIGpvaW4gdGhlbVxuICAgIHJldHVybiB3b3Jkcy5tYXAoKHdvcmQpID0+IHtcbiAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBhcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGludGVyZmFjZXMgYW5kIGNsYXNzZXNcbiAgICogbmVjZXNzYXJ5IHRvIHNldCB1cCB0aGUgcGlwZWxpbmUgYW5kIGRlZmluZSB0aGUgQVdTIENESyBzdGFja3MgZm9yIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlQXBwbGljYXRpb25FbnRyeXBvaW50KCkge1xuICAgIGxldCBwcm9wc0NvZGUgPSAnJztcbiAgICBsZXQgYXBwQ29kZSA9ICcnO1xuICAgIGxldCBzZXAgPSAnLSc7XG4gICAgaWYgKHRoaXMuc3RhY2tQcmVmaXggPT09ICcnKSB7XG4gICAgICBzZXAgPSAnJztcbiAgICB9XG5cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnBlcnNvbmFsU3RhZ2UpIHtcbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBwZXJzb25hbCBzdGFjay4gKi9cbiAgcHJvdmlkZVBlcnNvbmFsU3RhY2s6IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcbmA7XG4gICAgICBhcHBDb2RlICs9IGAgICAgLy8gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFVTRVIgaXMgc2V0IGFuZCBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhIHBlcnNvbmFsIHN0YWNrLCBpdCBpcyBjYWxsZWQgd2l0aCBuZWNlc3NhcnkgYXJndW1lbnRzLlxuICAgIGlmIChwcm9wcy5wcm92aWRlUGVyc29uYWxTdGFjayAmJiBwcm9jZXNzLmVudi5VU0VSKSB7XG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSAncGVyc29uYWwtJyArIHByb2Nlc3MuZW52LlVTRVIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFxcXFwvL2csICctJyk7XG4gICAgICBwcm9wcy5wcm92aWRlUGVyc29uYWxTdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfXBlcnNvbmFsJywgeyBlbnY6IHsgYWNjb3VudDogJyR7dGhpcy5iYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlLmVudi5hY2NvdW50fScsIHJlZ2lvbjogJyR7dGhpcy5iYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlLmVudi5yZWdpb259JyB9LCBzdGFja05hbWU6IFxcYCR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH1cXCR7c3RhZ2VOYW1lfVxcYCwgc3RhZ2VOYW1lIH0pO1xuICAgIH1cbmA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMuZmVhdHVyZVN0YWdlcykge1xuICAgICAgcHJvcHNDb2RlICs9IGAgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGZlYXR1cmUgc3RhY2suICovXG4gIHByb3ZpZGVGZWF0dXJlU3RhY2s6IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcbmA7XG4gICAgICBhcHBDb2RlICs9IGAgICAgLy8gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEJSQU5DSCBpcyBzZXQgYW5kIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgZmVhdHVyZSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZUZlYXR1cmVTdGFjayAmJiBwcm9jZXNzLmVudi5CUkFOQ0gpIHtcbiAgICAgIGNvbnN0IHN0YWdlTmFtZSA9ICdmZWF0dXJlLScgKyBwcm9jZXNzLmVudi5CUkFOQ0gudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFxcXFwvL2csICctJyk7XG4gICAgICBwcm9wcy5wcm92aWRlRmVhdHVyZVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9ZmVhdHVyZScsIHsgZW52OiB7IGFjY291bnQ6ICcke3RoaXMuYmFzZU9wdGlvbnMuZmVhdHVyZVN0YWdlcy5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3RoaXMuYmFzZU9wdGlvbnMuZmVhdHVyZVN0YWdlcy5lbnYucmVnaW9ufScgfSwgc3RhY2tOYW1lOiBcXGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9XFwke3N0YWdlTmFtZX1cXGAsIHN0YWdlTmFtZSB9KTtcbiAgICB9XG5gO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgdGhpcy5iYXNlT3B0aW9ucy5zdGFnZXMpIHtcbiAgICAgIGNvbnN0IG5hbWVVcHBlckZpcnN0ID0gdGhpcy5jcmVhdGVTYWZlU3RhZ2VOYW1lKHN0YWdlLm5hbWUpO1xuXG4gICAgICBwcm9wc0NvZGUgKz0gYCAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgJHtzdGFnZS5uYW1lfSBzdGFjay4gKi9cbiAgcHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2s6IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcbmA7XG4gICAgICBhcHBDb2RlICs9IGAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY3JlYXRpbmcgYSAke3N0YWdlLm5hbWV9IHN0YWNrLCBpdCBpcyBjYWxsZWQgd2l0aCBuZWNlc3NhcnkgYXJndW1lbnRzLlxuICAgIGlmIChwcm9wcy5wcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjaykge1xuICAgICAgcHJvcHMucHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2sodGhpcywgJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9JywgeyBlbnY6IHsgYWNjb3VudDogJyR7c3RhZ2UuZW52LmFjY291bnR9JywgcmVnaW9uOiAnJHtzdGFnZS5lbnYucmVnaW9ufScgfSwgc3RhY2tOYW1lOiAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2UubmFtZX0nLCBzdGFnZU5hbWU6ICcke3N0YWdlLm5hbWV9JyB9KTtcbiAgICB9XG5gO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgKHRoaXMuYmFzZU9wdGlvbnMuaW5kZXBlbmRlbnRTdGFnZXMgPz8gW10pKSB7XG4gICAgICBjb25zdCBuYW1lVXBwZXJGaXJzdCA9IHRoaXMuY3JlYXRlU2FmZVN0YWdlTmFtZShzdGFnZS5uYW1lKTtcblxuICAgICAgcHJvcHNDb2RlICs9IGAgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhICR7c3RhZ2UubmFtZX0gc3RhY2suICovXG4gIHByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgJHtzdGFnZS5uYW1lfSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2spIHtcbiAgICAgIHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHsgZW52OiB7IGFjY291bnQ6ICcke3N0YWdlLmVudi5hY2NvdW50fScsIHJlZ2lvbjogJyR7c3RhZ2UuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9Jywgc3RhZ2VOYW1lOiAnJHtzdGFnZS5uYW1lfScgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICAvLyBBZGQgdmVyc2lvbmluZyBsb2dpYyB0byBhcHBseSB0byBhbGwgc3RhY2tzXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZCkge1xuICAgICAgYXBwQ29kZSArPSB0aGlzLmdlbmVyYXRlVmVyc2lvbmluZ0FwcENvZGUodGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBGaWxlID0gbmV3IFRleHRGaWxlKHRoaXMucHJvamVjdCwgYCR7dGhpcy5hcHAuc3JjZGlyfS9hcHAudHNgKTtcblxuICAgIC8vIEdlbmVyYXRlIHZlcnNpb25pbmctYXdhcmUgaW1wb3J0cyBhbmQgdXRpbGl0aWVzXG4gICAgY29uc3QgdmVyc2lvbmluZ0ltcG9ydHMgPSB0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWRcbiAgICAgID8gdGhpcy5nZW5lcmF0ZVZlcnNpb25pbmdJbXBvcnRzKClcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZXJzaW9uaW5nVXRpbGl0aWVzID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IHRoaXMuZ2VuZXJhdGVWZXJzaW9uaW5nVXRpbGl0aWVzKClcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZXJzaW9uaW5nQ29uZmlnRGVjbGFyYXRpb24gPSB0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWRcbiAgICAgID8gYFxuY29uc3QgdmVyc2lvbmluZ0NvbmZpZyA9ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nLCBudWxsLCAyKX07XG5gXG4gICAgICA6ICcnO1xuXG4gICAgYXBwRmlsZS5hZGRMaW5lKGAvLyAke1BST0pFTl9NQVJLRVJ9XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQXBwLCBBcHBQcm9wcywgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG4ke3ZlcnNpb25pbmdJbXBvcnRzfVxuJHt2ZXJzaW9uaW5nQ29uZmlnRGVjbGFyYXRpb259XG4ke3ZlcnNpb25pbmdVdGlsaXRpZXN9XG5cbi8qKlxuICogUGlwZWxpbmVBcHBQcm9wcyBpcyBhbiBleHRlbnNpb24gb2YgQXBwUHJvcHMsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFXUyBDREsgY29yZS5cbiAqIEl0IGluY2x1ZGVzIG9wdGlvbmFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIEFXUyBTdGFja3MgZm9yIGRpZmZlcmVudCBzdGFnZXMuXG4gKlxuICogVXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBpbnN0YW50aWF0ZSB5b3VyIGFwcGxpY2F0aW9uIHN0YWNrcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGZvclxuICogZWFjaCBzdGFnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQXBwUHJvcHMgZXh0ZW5kcyBBcHBQcm9wcyB7XG4ke3Byb3BzQ29kZX1cbn1cblxuLyoqXG4gKiBQaXBlbGluZUFwcFN0YWNrUHJvcHMgaXMgYW4gZXh0ZW5zaW9uIG9mIFN0YWNrUHJvcHMsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFXUyBDREsgY29yZS5cbiAqIEl0IGluY2x1ZGVzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgc3RhZ2UgbmFtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFwcFN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIFBpcGVsaW5lQXBwIGNsYXNzIGV4dGVuZHMgdGhlIEFwcCBjbGFzcyBmcm9tIEFXUyBDREsgYW5kIG92ZXJyaWRlcyB0aGUgY29uc3RydWN0b3IgdG8gc3VwcG9ydFxuICogZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgYXBwbGljYXRpb24gKGRldmVsb3BtZW50LCBwcm9kdWN0aW9uLCBwZXJzb25hbCwgZmVhdHVyZSkgYnkgaW52b2tpbmcgdGhlIHByb3ZpZGVkXG4gKiBzdGFjay1wcm92aWRpbmcgZnVuY3Rpb25zIGZyb20gdGhlIHByb3BzLlxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVBcHAgZXh0ZW5kcyBBcHAge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUGlwZWxpbmVBcHBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuJHthcHBDb2RlfVxuXG4gIH1cbn1cbmApO1xuICB9XG5cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyB0byBwdWJsaXNoIENESyBhc3NldHMgdG8gYWxsIGFjY291bnRzIGFuZCBoYW5kbGUgdmVyc2lvbmluZywgaW5jbHVkaW5nIGJ1bXBpbmcgdGhlIHZlcnNpb25cbiAgICogYmFzZWQgb24gdGhlIGxhdGVzdCBnaXQgdGFnIGFuZCBwdXNoaW5nIHRoZSBDREsgYXNzZW1ibHkgdG8gdGhlIHBhY2thZ2UgcmVwb3NpdG9yeS5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZWxlYXNlVGFza3MoKSB7XG4gICAgY29uc3Qgc3RhZ2VzID0gWy4uLnRoaXMuYmFzZU9wdGlvbnMuc3RhZ2VzLCAuLi50aGlzLmJhc2VPcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdXTtcbiAgICBsZXQgc2VwID0gJy0nO1xuICAgIGlmICh0aGlzLnN0YWNrUHJlZml4ID09PSAnJykge1xuICAgICAgc2VwID0gJyc7XG4gICAgfVxuICAgIC8vIFRhc2sgdG8gcHVibGlzaCB0aGUgQ0RLIGFzc2V0cyB0byBhbGwgYWNjb3VudHNcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHB1Ymxpc2g6YXNzZXRzOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIHN0ZXBzOiBbe1xuICAgICAgICAgIGV4ZWM6IGBucHggY2RrLWFzc2V0cyAtcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9LyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9LmFzc2V0cy5qc29uIHB1Ymxpc2hgLFxuICAgICAgICB9XSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygncHVibGlzaDphc3NldHMnLCB7XG4gICAgICBzdGVwczogc3RhZ2VzLm1hcChzdGFnZSA9PiAoe1xuICAgICAgICBzcGF3bjogYHB1Ymxpc2g6YXNzZXRzOiR7c3RhZ2UubmFtZX1gLFxuICAgICAgfSkpLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnYnVtcCcsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdCdW1wcyB2ZXJzaW9uIGJhc2VkIG9uIGxhdGVzdCBnaXQgdGFnJyxcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleGVjOiAncGlwZWxpbmVzLXJlbGVhc2UgYnVtcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleGVjOiAnZ2l0IHB1c2ggLS10YWdzJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzaygncmVsZWFzZTpwdXNoLWFzc2VtYmx5Jywge1xuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4ZWM6IGBwaXBlbGluZXMtcmVsZWFzZSBjcmVhdGUtbWFuaWZlc3QgXCIke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9XCIgIFwiJHt0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZX1cImAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjd2Q6IHRoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXQsXG4gICAgICAgICAgICBleGVjOiAnbnBtIHZlcnNpb24gLS1uby1naXQtdGFnLXZlcnNpb24gZnJvbS1naXQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3dkOiB0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0LFxuICAgICAgICAgICAgZXhlYzogJ25wbSBwdWJsaXNoJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyBmb3IgdGhlIHBlcnNvbmFsIGRlcGxveW1lbnQgc3RhZ2UsIGluY2x1ZGluZyBkZXBsb3ltZW50LCB3YXRjaGluZyBmb3IgY2hhbmdlcyxcbiAgICogY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLCBhbmQgZGVzdHJveWluZyB0aGUgc3RhY2sgd2hlbiBubyBsb25nZXIgbmVlZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVBlcnNvbmFsU3RhZ2UoKSB7XG4gICAgY29uc3Qgc3RhY2tJZCA9IHRoaXMuZ2V0Q2xpU3RhY2tQYXR0ZXJuKCdwZXJzb25hbCcpO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkZXBsb3k6cGVyc29uYWwnLCB7XG4gICAgICBleGVjOiBgY2RrIGRlcGxveSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy1wZXJzb25hbC5qc29uICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd3YXRjaDpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLXBlcnNvbmFsLmpzb24gLS13YXRjaCAtLWhvdHN3YXAgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2RpZmY6cGVyc29uYWwnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Zhc3RkaWZmOnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmIC0tbm8tY2hhbmdlc2V0ICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkZXN0cm95OnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkZXN0cm95ICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBmZWF0dXJlIGRlcGxveW1lbnQgc3RhZ2UsIGluY2x1ZGluZyBkZXBsb3ltZW50LCBjb21wYXJpbmcgY2hhbmdlcyAoZGlmZiksXG4gICAqIGFuZCBkZXN0cm95aW5nIHRoZSBzdGFjayB3aGVuIG5vIGxvbmdlciBuZWVkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlRmVhdHVyZVN0YWdlKCkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybignZmVhdHVyZScpO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkZXBsb3k6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtZmVhdHVyZS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2RpZmY6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGlmZiAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZmFzdGRpZmY6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVzdHJveTpmZWF0dXJlJywge1xuICAgICAgZXhlYzogYGNkayBkZXN0cm95IC0tZm9yY2UgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3dhdGNoOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRlcGxveSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy1mZWF0dXJlLmpzb24gLS13YXRjaCAtLWhvdHN3YXAgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyBmb3IgdGhlIGdlbmVyYWwgcGlwZWxpbmUgc3RhZ2VzIChkZXYsIHByb2QpLCBpbmNsdWRpbmcgZGVwbG95bWVudCBhbmQgY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLlxuICAgKiBAcGFyYW0ge0RlcGxveVN0YWdlT3B0aW9uc30gc3RhZ2UgLSBUaGUgc3RhZ2UgdG8gY3JlYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUGlwZWxpbmVTdGFnZShzdGFnZTogRGVwbG95bWVudFN0YWdlKSB7XG4gICAgY29uc3Qgc3RhY2tJZCA9IHRoaXMuZ2V0Q2xpU3RhY2tQYXR0ZXJuKHN0YWdlLm5hbWUpO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBkZXBsb3k6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9Lmpzb24gLS1wcm9ncmVzcyBldmVudHMgLS1yZXF1aXJlLWFwcHJvdmFsIG5ldmVyIGRlcGxveSAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGZhc3RkaWZmOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICBpZiAoc3RhZ2Uud2F0Y2hhYmxlKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgd2F0Y2g6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEFkZCB2ZXJzaW9uIGZldGNoIHRhc2sgaWYgdmVyc2lvbmluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZCkge1xuICAgICAgdGhpcy5jcmVhdGVWZXJzaW9uRmV0Y2hUYXNrKHN0YWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyBmb3IgdGhlIGluZGVwZW5kZW50IHN0YWdlcyBpbmNsdWRpbmcgZGVwbG95bWVudCBhbmQgY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLlxuICAgKiBAcGFyYW0ge05hbWVkU3RhZ2VPcHRpb25zfSBzdGFnZSAtIFRoZSBzdGFnZSB0byBjcmVhdGVcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVJbmRlcGVuZGVudFN0YWdlKHN0YWdlOiBJbmRlcGVuZGVudFN0YWdlKSB7XG4gICAgY29uc3Qgc3RhY2tJZCA9IHRoaXMuZ2V0Q2xpU3RhY2tQYXR0ZXJuKHN0YWdlLm5hbWUpO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBkZXBsb3k6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9Lmpzb24gLS1wcm9ncmVzcyBldmVudHMgLS1yZXF1aXJlLWFwcHJvdmFsIG5ldmVyIGRlcGxveSAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGZhc3RkaWZmOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICBpZiAoc3RhZ2Uud2F0Y2hhYmxlKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgd2F0Y2g6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEFkZCB2ZXJzaW9uIGZldGNoIHRhc2sgaWYgdmVyc2lvbmluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZCkge1xuICAgICAgdGhpcy5jcmVhdGVWZXJzaW9uRmV0Y2hUYXNrKHN0YWdlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2xpU3RhY2tQYXR0ZXJuKHN0YWdlOiBzdHJpbmcpIHtcbiAgICBsZXQgc2VwID0gJy0nO1xuICAgIGlmICh0aGlzLnN0YWNrUHJlZml4ID09PSAnJykge1xuICAgICAgc2VwID0gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJhc2VPcHRpb25zLmRlcGxveVN1YlN0YWNrcyA/IGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZX0gJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2V9LypgIDogYCR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlfWA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHZlcnNpb246ZmV0Y2g6PHN0YWdlPiB0YXNrIHRvIGZldGNoIHZlcnNpb24gZGF0YSBmcm9tIGRlcGxveWVkIHN0YWNrXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZTogTmFtZWRTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBgJHt0aGlzLnN0YWNrUHJlZml4fSR7dGhpcy5zdGFja1ByZWZpeCA/ICctJyA6ICcnfSR7c3RhZ2UubmFtZX1gO1xuICAgIGNvbnN0IHN0YWdlQ29uZmlnID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5zdGFnZU92ZXJyaWRlcz8uW3N0YWdlLm5hbWVdIHx8IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZztcblxuICAgIGlmICghc3RhZ2VDb25maWc/Lm91dHB1dHMpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gRmV0Y2ggZnJvbSBDbG91ZEZvcm1hdGlvbiBvdXRwdXRzXG4gICAgaWYgKHN0YWdlQ29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24/LmVuYWJsZWQpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gQ2xvdWRGb3JtYXRpb24gb3V0cHV0cyBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFja3MgLS1zdGFjay1uYW1lICR7c3RhY2tOYW1lfSAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcXVlcnkgXCJTdGFja3NbMF0uT3V0cHV0c1s/c3RhcnRzX3dpdGgoT3V0cHV0S2V5LCAnQXBwVmVyc2lvbicpXS57S2V5Ok91dHB1dEtleSxWYWx1ZTpPdXRwdXRWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZldGNoIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZVxuICAgIGlmIChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlPy5lbmFibGVkKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gKHN0YWdlQ29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUucGFyYW1ldGVyTmFtZSB8fCAnL3tzdGFja05hbWV9L3ZlcnNpb24nKVxuICAgICAgICAucmVwbGFjZSgne3N0YWNrTmFtZX0nLCBzdGFja05hbWUpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhZ2VOYW1lfScsIHN0YWdlLm5hbWUpO1xuXG4gICAgICBpZiAoKHN0YWdlQ29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUgYXMgYW55KT8uaGllcmFyY2hpY2FsKSB7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAgICAgYGVjaG8gXCJGZXRjaGluZyB2ZXJzaW9uIGRhdGEgZnJvbSBTU00gUGFyYW1ldGVyIFN0b3JlIChoaWVyYXJjaGljYWwpIGZvciAke3N0YWdlLm5hbWV9Li4uXCJgLFxuICAgICAgICAgIGBhd3Mgc3NtIGdldC1wYXJhbWV0ZXJzLWJ5LXBhdGggLS1wYXRoIFwiJHtwYXJhbWV0ZXJOYW1lfVwiIC0tcmVnaW9uICR7c3RhZ2UuZW52LnJlZ2lvbn0gLS1yZWN1cnNpdmUgLS1xdWVyeSBcIlBhcmFtZXRlcnNbXS57TmFtZTpOYW1lLFZhbHVlOlZhbHVlfVwiIC0tb3V0cHV0IHRhYmxlYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAgICAgYGVjaG8gXCJGZXRjaGluZyB2ZXJzaW9uIGRhdGEgZnJvbSBTU00gUGFyYW1ldGVyIFN0b3JlIGZvciAke3N0YWdlLm5hbWV9Li4uXCJgLFxuICAgICAgICAgIGBhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lIFwiJHtwYXJhbWV0ZXJOYW1lfVwiIC0tcmVnaW9uICR7c3RhZ2UuZW52LnJlZ2lvbn0gLS1xdWVyeSBcIlBhcmFtZXRlci57TmFtZTpOYW1lLFZhbHVlOlZhbHVlfVwiIC0tb3V0cHV0IHRhYmxlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHZlcnNpb246ZmV0Y2g6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBGZXRjaCB2ZXJzaW9uIGRhdGEgZnJvbSBkZXBsb3llZCAke3N0YWdlLm5hbWV9IHN0YWNrYCxcbiAgICAgICAgZXhlYzogY29tbWFuZHMuam9pbignICYmICcpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIENESyBhcHBsaWNhdGlvbiBjb2RlIGZvciB2ZXJzaW9uaW5nXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVWZXJzaW9uaW5nQXBwQ29kZShjb25maWc6IFZlcnNpb25pbmdDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXG4gICAgLy8gQXBwbHkgdmVyc2lvbmluZyB0byBhbGwgc3RhY2tzXG4gICAgdGhpcy5ub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBTdGFjaykge1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSBjaGlsZC5zdGFja05hbWUuc3BsaXQoJy0nKS5wb3AoKSB8fCAnZGVmYXVsdCc7XG4gICAgICAgIGFkZFZlcnNpb25pbmdUb1N0YWNrKGNoaWxkLCBzdGFnZU5hbWUsICR7Y29uZmlnLnN0YWdlT3ZlcnJpZGVzID8gJ3ZlcnNpb25pbmdDb25maWcuc3RhZ2VPdmVycmlkZXMnIDogJ3VuZGVmaW5lZCd9KTtcbiAgICAgIH1cbiAgICB9KTtgO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHZlcnNpb25pbmcgaW1wb3J0cyBmb3IgQ0RLIGFwcGxpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVWZXJzaW9uaW5nSW1wb3J0cygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGltcG9ydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpbXBvcnRzLnB1c2goXCJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tICdhd3MtY2RrLWxpYic7XCIpO1xuICAgIGltcG9ydHMucHVzaChcImltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1wiKTtcbiAgICBpbXBvcnRzLnB1c2goXCJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XCIpO1xuXG4gICAgcmV0dXJuIGltcG9ydHMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdmVyc2lvbmluZyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgQ0RLIGFwcGxpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVWZXJzaW9uaW5nVXRpbGl0aWVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcbi8qKlxuICogVmVyc2lvbiBpbmZvcm1hdGlvbiBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uSW5mbyB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgY29tbWl0SGFzaDogc3RyaW5nO1xuICBjb21taXRIYXNoU2hvcnQ6IHN0cmluZztcbiAgYnJhbmNoOiBzdHJpbmc7XG4gIGNvbW1pdENvdW50OiBudW1iZXI7XG4gIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmc7XG4gIGRlcGxveWVkQXQ6IHN0cmluZztcbiAgZGVwbG95ZWRCeTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIExvYWQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIGdlbmVyYXRlZCBmaWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkVmVyc2lvbkluZm8oKTogVmVyc2lvbkluZm8ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYygnfnZlcnNpb24uanNvbicsICd1dGY4JykpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IGxvYWQgdmVyc2lvbiBpbmZvLCB1c2luZyBmYWxsYmFjaycpO1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgY29tbWl0SGFzaDogJ3Vua25vd24nLFxuICAgICAgY29tbWl0SGFzaFNob3J0OiAndW5rbm93bicsXG4gICAgICBicmFuY2g6ICd1bmtub3duJyxcbiAgICAgIGNvbW1pdENvdW50OiAwLFxuICAgICAgcGFja2FnZVZlcnNpb246ICcwLjAuMCcsXG4gICAgICBkZXBsb3llZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBkZXBsb3llZEJ5OiAndW5rbm93bicsXG4gICAgICBlbnZpcm9ubWVudDogJ3Vua25vd24nXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB2ZXJzaW9uaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGEgc3BlY2lmaWMgc3RhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhZ2VDb25maWcoc3RhZ2VOYW1lOiBzdHJpbmcsIGJhc2VDb25maWc6IGFueSwgc3RhZ2VPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYW55IHtcbiAgaWYgKCFzdGFnZU92ZXJyaWRlcyB8fCAhc3RhZ2VPdmVycmlkZXNbc3RhZ2VOYW1lXSkge1xuICAgIHJldHVybiBiYXNlQ29uZmlnO1xuICB9XG4gIFxuICAvLyBNZXJnZSBzdGFnZSBvdmVycmlkZSB3aXRoIGJhc2UgY29uZmlnXG4gIGNvbnN0IG92ZXJyaWRlID0gc3RhZ2VPdmVycmlkZXNbc3RhZ2VOYW1lXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlQ29uZmlnLFxuICAgIG91dHB1dHM6IHtcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBvdmVycmlkZS5vdXRwdXRzPy5jbG91ZEZvcm1hdGlvbiB8fCBiYXNlQ29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24sXG4gICAgICBwYXJhbWV0ZXJTdG9yZTogb3ZlcnJpZGUub3V0cHV0cz8ucGFyYW1ldGVyU3RvcmUgfHwgYmFzZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLFxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBZGQgdmVyc2lvbmluZyBvdXRwdXRzIHRvIGEgc3RhY2tcbiAqL1xuZnVuY3Rpb24gYWRkVmVyc2lvbmluZ1RvU3RhY2soc3RhY2s6IFN0YWNrLCBzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VPdmVycmlkZXM/OiBhbnkpOiB2b2lkIHtcbiAgY29uc3QgdmVyc2lvbkluZm8gPSBsb2FkVmVyc2lvbkluZm8oKTtcbiAgY29uc3QgYmFzZUNvbmZpZyA9IHZlcnNpb25pbmdDb25maWc7XG4gIGNvbnN0IGNvbmZpZyA9IGdldFN0YWdlQ29uZmlnKHN0YWdlTmFtZSwgYmFzZUNvbmZpZywgc3RhZ2VPdmVycmlkZXMpO1xuICBcbiAgLy8gQ2hlY2sgaWYgZm9ybWF0IGlzIHNwZWNpZmllZCBpbiBDbG91ZEZvcm1hdGlvbiBvciBQYXJhbWV0ZXJTdG9yZSBjb25maWdzXG4gIGNvbnN0IGNmRm9ybWF0ID0gY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24/LmZvcm1hdCB8fCAnc3RydWN0dXJlZCc7XG4gIGNvbnN0IHNzbUZvcm1hdCA9IGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlPy5mb3JtYXQgfHwgJ3N0cnVjdHVyZWQnO1xuICBcbiAgLy8gQWRkIENsb3VkRm9ybWF0aW9uIG91dHB1dHNcbiAgaWYgKGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uPy5lbmFibGVkKSB7XG4gICAgaWYgKGNmRm9ybWF0ID09PSAncGxhaW4nKSB7XG4gICAgICAvLyBQbGFpbiBmb3JtYXQgLSBzaW5nbGUgb3V0cHV0IHdpdGggdmVyc2lvbiBzdHJpbmdcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uJywge1xuICAgICAgICB2YWx1ZTogdmVyc2lvbkluZm8udmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246ICdBcHBsaWNhdGlvbiB2ZXJzaW9uJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJ1Y3R1cmVkIGZvcm1hdCAtIG11bHRpcGxlIG91dHB1dHNcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uJywge1xuICAgICAgICB2YWx1ZTogdmVyc2lvbkluZm8udmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246ICdBcHBsaWNhdGlvbiB2ZXJzaW9uJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbkNvbW1pdEhhc2gnLCB7XG4gICAgICAgIHZhbHVlOiB2ZXJzaW9uSW5mby5jb21taXRIYXNoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdCBjb21taXQgaGFzaCcsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUgPyBcXGBcXCR7Y29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZX1Db21taXRIYXNoXFxgIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uQnJhbmNoJywge1xuICAgICAgICB2YWx1ZTogdmVyc2lvbkluZm8uYnJhbmNoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdCBicmFuY2gnLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lID8gXFxgXFwke2NvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWV9QnJhbmNoXFxgIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uSW5mbycsIHtcbiAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZlcnNpb25JbmZvKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdDb21wbGV0ZSB2ZXJzaW9uIGluZm9ybWF0aW9uJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSA/IFxcYFxcJHtjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lfUluZm9cXGAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEFkZCBTU00gUGFyYW1ldGVyIFN0b3JlIHBhcmFtZXRlcnNcbiAgaWYgKGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlPy5lbmFibGVkKSB7XG4gICAgaWYgKGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLmhpZXJhcmNoaWNhbCkge1xuICAgICAgLy8gSGllcmFyY2hpY2FsIHBhcmFtZXRlcnNcbiAgICAgIGNvbnN0IGJhc2VQYXJhbWV0ZXJOYW1lID0gKGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLnBhcmFtZXRlck5hbWUgfHwgJy97c3RhY2tOYW1lfS92ZXJzaW9uJylcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFja05hbWV9Jywgc3RhY2suc3RhY2tOYW1lKVxuICAgICAgICAucmVwbGFjZSgne3N0YWdlTmFtZX0nLCBzdGFnZU5hbWUpO1xuICAgICAgICBcbiAgICAgIC8vIENyZWF0ZSBoaWVyYXJjaGljYWwgcGFyYW1ldGVyc1xuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXJWZXJzaW9uJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBcXGBcXCR7YmFzZVBhcmFtZXRlck5hbWV9L3ZlcnNpb25cXGAsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiB2ZXJzaW9uSW5mby52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIHZlcnNpb24nLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVyQ29tbWl0SGFzaCcsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogXFxgXFwke2Jhc2VQYXJhbWV0ZXJOYW1lfS9jb21taXRIYXNoXFxgLFxuICAgICAgICBzdHJpbmdWYWx1ZTogdmVyc2lvbkluZm8uY29tbWl0SGFzaCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXQgY29tbWl0IGhhc2gnLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVyQnJhbmNoJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBcXGBcXCR7YmFzZVBhcmFtZXRlck5hbWV9L2JyYW5jaFxcYCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHZlcnNpb25JbmZvLmJyYW5jaCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXQgYnJhbmNoJyxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlckluZm8nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IFxcYFxcJHtiYXNlUGFyYW1ldGVyTmFtZX0vaW5mb1xcYCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IEpTT04uc3RyaW5naWZ5KHZlcnNpb25JbmZvKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdDb21wbGV0ZSB2ZXJzaW9uIGluZm9ybWF0aW9uJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyXG4gICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gKGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLnBhcmFtZXRlck5hbWUgfHwgJy97c3RhY2tOYW1lfS92ZXJzaW9uJylcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFja05hbWV9Jywgc3RhY2suc3RhY2tOYW1lKVxuICAgICAgICAucmVwbGFjZSgne3N0YWdlTmFtZX0nLCBzdGFnZU5hbWUpO1xuICAgICAgICBcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVyJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgICAgICBzdHJpbmdWYWx1ZTogc3NtRm9ybWF0ID09PSAncGxhaW4nID8gdmVyc2lvbkluZm8udmVyc2lvbiA6IEpTT04uc3RyaW5naWZ5KHZlcnNpb25JbmZvKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHNzbUZvcm1hdCA9PT0gJ3BsYWluJyA/ICdBcHBsaWNhdGlvbiB2ZXJzaW9uJyA6ICdDb21wbGV0ZSB2ZXJzaW9uIGluZm9ybWF0aW9uJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufWA7XG4gIH1cbn1cbiJdfQ==
|
|
723
|
+
CDKPipeline[_a] = { fqn: "projen-pipelines.CDKPipeline", version: "0.3.20" };
|
|
724
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBcUQ7QUFDckQsOENBQWtEO0FBQ2xELHNEQUEyRDtBQUMzRCxzQ0FBMkM7QUFDM0Msb0NBQWdKO0FBQ2hKLDhDQUFrRTtBQXVCbEUsTUFBTTtBQUNOLHlEQUF5RDtBQUN6RCxNQUFNO0FBQ04sK0JBQStCO0FBQy9CLDZFQUE2RTtBQUM3RSwyQkFBMkI7QUFDM0IsNEVBQTRFO0FBQzVFLHlCQUF5QjtBQUN6QixJQUFJO0FBRUosSUFBWSxXQU9YO0FBUEQsV0FBWSxXQUFXO0lBQ3JCLDRCQUE0QjtJQUM1Qiw2Q0FBSSxDQUFBO0lBQ0osb0RBQW9EO0lBQ3BELDZDQUFJLENBQUE7SUFDSix1REFBdUQ7SUFDdkQsNkNBQUksQ0FBQTtBQUNOLENBQUMsRUFQVyxXQUFXLDJCQUFYLFdBQVcsUUFPdEI7QUFzTUQ7OztHQUdHO0FBQ0gsTUFBc0IsV0FBWSxTQUFRLGtCQUFTO0lBYWpELFlBQXNCLEdBQStCLEVBQVksV0FBK0I7UUFDOUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRFMsUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFHOUYsaURBQWlEO1FBQ2pELElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUNqQix3QkFBd0IsRUFDeEIsWUFBWSxDQUNiLENBQUM7UUFDRixvQkFBb0I7UUFDcEIsS0FBSztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXRELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsQ0FBQywrQ0FBK0M7UUFFbkcsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRS9GLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqQyw4QkFBOEI7UUFDOUIsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLElBQUksNEJBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwRSxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0lBRXJDLENBQUM7SUFJUyxrQkFBa0I7UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxvQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbkYsb0RBQW9EO1FBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxLQUFLLCtCQUFrQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssdUJBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUkscUJBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUMzQyxPQUFPLEVBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFlLENBQUMsV0FBVzthQUMvQyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEtBQUssK0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUkseUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksb0JBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQy9DLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLO2dCQUMzQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUs7YUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO1FBRUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBRUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUUxRCxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxzQkFBc0I7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFnQixDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQzFCLEtBQUssdUJBQWMsQ0FBQyxNQUFNO2dCQUN4QixPQUFPLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztZQUMxQyxLQUFLLHVCQUFjLENBQUMsTUFBTTtnQkFDeEIsT0FBTywwQkFBMEIsR0FBRyxHQUFHLENBQUM7WUFDMUMsS0FBSyx1QkFBYyxDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sNkNBQTZDLEdBQUcsR0FBRyxDQUFDO1lBQzdEO2dCQUNFLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxTQUFrQjtRQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLG9CQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFRLENBQUM7UUFDaEgsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUMvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztvQkFDN0QsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7b0JBQ3hGLGlCQUFpQjtnQkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUM1RCxDQUFDLENBQUMsQ0FBQztZQUNKLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ3pELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3pGLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQzNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUMvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFpQjt3QkFDOUYsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7cUJBQzdELENBQUMsQ0FBQyxDQUFDO29CQUNKLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUMvQyxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWU7aUJBQ2hFLENBQUMsQ0FBQyxDQUFDO2dCQUNKLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVTLHlCQUF5QjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDckcsQ0FBQztRQUNELE9BQU8sSUFBSSxvQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEMsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUMxQyxJQUFJLHdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUM7U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGlCQUFpQixDQUFDLEtBQXdCO1FBQ2xELE9BQU8sSUFBSSxvQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLE9BQVE7Z0JBQ3pHLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQzdELENBQUM7WUFDRixJQUFJLHdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUQsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLEVBQUU7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGVBQWUsQ0FBQyxLQUF3QixFQUFFLElBQWM7UUFDaEUsT0FBTyxJQUFJLG9CQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxPQUFRO2dCQUN4QyxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO2dCQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzthQUM3RCxDQUFDO1lBQ0YsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFGLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyw0QkFBNEIsQ0FBQyxXQUFtQixFQUFFLHdCQUFpQyxLQUFLO1FBQ2hHLE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXhGLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEMsS0FBSywrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDN0IsS0FBSywrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDOUIsS0FBSywrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDbkMsS0FBSywrQkFBa0IsQ0FBQyxZQUFZO2dCQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDekMsTUFBTTtZQUNSLEtBQUssK0JBQWtCLENBQUMsR0FBRztnQkFDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDUixLQUFLLCtCQUFrQixDQUFDLElBQUk7Z0JBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVTLG1CQUFtQixDQUFDLElBQVk7UUFDeEMsMERBQTBEO1FBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRFLHlEQUF5RDtRQUN6RCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sMkJBQTJCO1FBQ25DLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzVCLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDWCxDQUFDO1FBR0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLFNBQVMsSUFBSTs7Q0FFbEIsQ0FBQztZQUNJLE9BQU8sSUFBSTs7OzBDQUd5QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsaUNBQWlDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLGVBQWUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0scUJBQXFCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRzs7Q0FFN08sQ0FBQztRQUNFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsU0FBUyxJQUFJOztDQUVsQixDQUFDO1lBQ0ksT0FBTyxJQUFJOzs7eUNBR3dCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxxQkFBcUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHOztDQUUzTyxDQUFDO1FBQ0UsQ0FBQztRQUVELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVELFNBQVMsSUFBSSxrREFBa0QsS0FBSyxDQUFDLElBQUk7V0FDcEUsY0FBYztDQUN4QixDQUFDO1lBQ0ksT0FBTyxJQUFJLG1EQUFtRCxLQUFLLENBQUMsSUFBSTt1QkFDdkQsY0FBYztxQkFDaEIsY0FBYyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUkseUJBQXlCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxlQUFlLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxvQkFBb0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksa0JBQWtCLEtBQUssQ0FBQyxJQUFJOztDQUVqUCxDQUFDO1FBQ0UsQ0FBQztRQUVELEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1RCxTQUFTLElBQUksa0RBQWtELEtBQUssQ0FBQyxJQUFJO1dBQ3BFLGNBQWM7Q0FDeEIsQ0FBQztZQUNJLE9BQU8sSUFBSSxtREFBbUQsS0FBSyxDQUFDLElBQUk7dUJBQ3ZELGNBQWM7cUJBQ2hCLGNBQWMsZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLHlCQUF5QixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sZUFBZSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sb0JBQW9CLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLGtCQUFrQixLQUFLLENBQUMsSUFBSTs7Q0FFalAsQ0FBQztRQUNFLENBQUM7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLGtEQUFrRDtRQUNsRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU87WUFDNUQsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFPO1lBQzlELENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsT0FBTztZQUN0RSxDQUFDLENBQUM7MkJBQ21CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUM5RTtZQUNLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sc0JBQWE7OztFQUdyQyxpQkFBaUI7RUFDakIsMkJBQTJCO0VBQzNCLG1CQUFtQjs7Ozs7Ozs7OztFQVVuQixTQUFTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CVCxPQUFPOzs7O0NBSVIsQ0FBQyxDQUFDO0lBQ0QsQ0FBQztJQUdEOzs7T0FHRztJQUNPLGtCQUFrQjtRQUMxQixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1QixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1gsQ0FBQztRQUNELGlEQUFpRDtRQUNqRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25ELEtBQUssRUFBRSxDQUFDO3dCQUNOLElBQUksRUFBRSxxQkFBcUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLHNCQUFzQjtxQkFDbEgsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFCLEtBQUssRUFBRSxrQkFBa0IsS0FBSyxDQUFDLElBQUksRUFBRTthQUN0QyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUMzQixXQUFXLEVBQUUsdUNBQXVDO2dCQUNwRCxLQUFLLEVBQUU7b0JBQ0w7d0JBQ0UsSUFBSSxFQUFFLHdCQUF3QjtxQkFDL0I7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtxQkFDeEI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRTtnQkFDNUMsS0FBSyxFQUFFO29CQUNMO3dCQUNFLElBQUksRUFBRSxzQ0FBc0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHO3FCQUM3RztvQkFDRDt3QkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTTt3QkFDOUIsSUFBSSxFQUFFLDJDQUEyQztxQkFDbEQ7b0JBQ0Q7d0JBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU07d0JBQzlCLElBQUksRUFBRSxhQUFhO3FCQUNwQjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFFSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sbUJBQW1CO1FBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLEVBQUUsdURBQXVELE9BQU8sRUFBRTtTQUN2RSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQyxJQUFJLEVBQUUseUVBQXlFLE9BQU8sRUFBRTtTQUN6RixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7WUFDcEMsSUFBSSxFQUFFLFlBQVksT0FBTyxFQUFFO1NBQzVCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQ3hDLElBQUksRUFBRSwyQkFBMkIsT0FBTyxFQUFFO1NBQzNDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZDLElBQUksRUFBRSxlQUFlLE9BQU8sRUFBRTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sa0JBQWtCO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQyxJQUFJLEVBQUUsaUdBQWlHLE9BQU8sRUFBRTtTQUNqSCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDbkMsSUFBSSxFQUFFLFlBQVksT0FBTyxFQUFFO1NBQzVCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZDLElBQUksRUFBRSwyQkFBMkIsT0FBTyxFQUFFO1NBQzNDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQ3RDLElBQUksRUFBRSx1QkFBdUIsT0FBTyxFQUFFO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUNwQyxJQUFJLEVBQUUsd0VBQXdFLE9BQU8sRUFBRTtTQUN4RixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sbUJBQW1CLENBQUMsS0FBc0I7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQyxJQUFJLEVBQUUsYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLCtCQUErQixLQUFLLENBQUMsSUFBSSwyREFBMkQsT0FBTyxFQUFFO1NBQzFKLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3pDLElBQUksRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sU0FBUyxPQUFPLEVBQUU7U0FDL0QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSx3QkFBd0IsT0FBTyxFQUFFO1NBQzlFLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMxQyxJQUFJLEVBQUUseUNBQXlDLEtBQUssQ0FBQyxJQUFJLDJCQUEyQixPQUFPLEVBQUU7YUFDOUYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHNCQUFzQixDQUFDLEtBQXVCO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSwrQkFBK0IsS0FBSyxDQUFDLElBQUksMkRBQTJELE9BQU8sRUFBRTtTQUMxSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QyxJQUFJLEVBQUUsYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLFNBQVMsT0FBTyxFQUFFO1NBQy9ELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdDLElBQUksRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sd0JBQXdCLE9BQU8sRUFBRTtTQUM5RSxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxFQUFFLHlDQUF5QyxLQUFLLENBQUMsSUFBSSwyQkFBMkIsT0FBTyxFQUFFO2FBQzlGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3hDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1QixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQzFKLENBQUM7SUFFRDs7T0FFRztJQUNPLHNCQUFzQixDQUFDLEtBQXdCO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBRTdHLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTztZQUFFLE9BQU87UUFFbEMsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBRTlCLG9DQUFvQztRQUNwQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2hELFFBQVEsQ0FBQyxJQUFJLENBQ1gsK0RBQStELEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFDL0UsbURBQW1ELFNBQVMsYUFBYSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sc0hBQXNILENBQ2hOLENBQUM7UUFDSixDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDaEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLElBQUksc0JBQXNCLENBQUM7aUJBQy9GLE9BQU8sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO2lCQUNqQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV0QyxJQUFLLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBc0IsRUFBRSxZQUFZLEVBQUUsQ0FBQztnQkFDOUQsUUFBUSxDQUFDLElBQUksQ0FDWCwyRUFBMkUsS0FBSyxDQUFDLElBQUksTUFBTSxFQUMzRiwwQ0FBMEMsYUFBYSxjQUFjLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSw0RUFBNEUsQ0FDbEssQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFRLENBQUMsSUFBSSxDQUNYLDREQUE0RCxLQUFLLENBQUMsSUFBSSxNQUFNLEVBQzVFLGlDQUFpQyxhQUFhLGNBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLDZEQUE2RCxDQUMxSSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDbEQsV0FBVyxFQUFFLG9DQUFvQyxLQUFLLENBQUMsSUFBSSxRQUFRO2dCQUNuRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDNUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLHlCQUF5QixDQUFDLE1BQXdCO1FBQ3ZELE9BQU87Ozs7O2lEQUtzQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsV0FBVzs7UUFFaEgsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLHlCQUF5QjtRQUM5QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFFN0IsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNJLDJCQUEyQjtRQUNoQyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUpULENBQUM7SUFDRCxDQUFDOztBQWp3Qkgsa0NBa3dCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIFRleHRGaWxlLCBhd3NjZGsgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgUFJPSkVOX01BUktFUiB9IGZyb20gJ3Byb2plbi9saWIvY29tbW9uJztcbmltcG9ydCB7IE5vZGVQYWNrYWdlTWFuYWdlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBBd3NBc3N1bWVSb2xlU3RlcCwgUGlwZWxpbmVTdGVwLCBQcm9qZW5TY3JpcHRTdGVwLCBTaW1wbGVDb21tYW5kU3RlcCwgU3RlcFNlcXVlbmNlLCBQbnBtU2V0dXBTdGVwLCBDb3JlcGFja1NldHVwU3RlcCB9IGZyb20gJy4uL3N0ZXBzJztcbmltcG9ydCB7IFZlcnNpb25pbmdDb25maWcsIFZlcnNpb25pbmdTZXR1cCB9IGZyb20gJy4uL3ZlcnNpb25pbmcnO1xuXG4vKipcbiAqIFRoZSBFbnZpcm9ubWVudCBpbnRlcmZhY2UgaXMgZGVzaWduZWQgdG8gaG9sZCBBV1MgcmVsYXRlZCBpbmZvcm1hdGlvblxuICogZm9yIGEgc3BlY2lmaWMgZGVwbG95bWVudCBlbnZpcm9ubWVudCB3aXRoaW4geW91ciBpbmZyYXN0cnVjdHVyZS5cbiAqIEVhY2ggZW52aXJvbm1lbnQgcmVxdWlyZXMgYSBzcGVjaWZpYyBhY2NvdW50IGFuZCByZWdpb24gZm9yIGl0cyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnQge1xuICAvKipcbiAgICogVGhlIEFXUyBBY2NvdW50IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQuIEl0J3MgaW1wb3J0YW50IGJlY2F1c2VcbiAgICogZGlmZmVyZW50IHNlcnZpY2VzIG9yIGZlYXR1cmVzIGNvdWxkIGhhdmUgZGlzdGluY3QgcGVybWlzc2lvbnMgYW5kIHNldHRpbmdzXG4gICAqIGluIGRpZmZlcmVudCBhY2NvdW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBSZWdpb24gZm9yIHRoZSBlbnZpcm9ubWVudC4gVGhpcyBkZXRlcm1pbmVzIHdoZXJlIHlvdXIgcmVzb3VyY2VzXG4gICAqIGFyZSBjcmVhdGVkIGFuZCB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgcnVuLiBJdCBjYW4gYWZmZWN0IGxhdGVuY3ksXG4gICAqIGF2YWlsYWJpbGl0eSwgYW5kIHByaWNpbmcuXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbn1cblxuLy8gLyoqXG4vLyAgKiBEZXNjcmliZXMgdGhlIHR5cGUgb2YgcGlwZWxpbmUgdGhhdCB3aWxsIGJlIGNyZWF0ZWRcbi8vICAqL1xuLy8gZXhwb3J0IGVudW0gRGVwbG95bWVudFR5cGUge1xuLy8gICAvKiogRGVwbG95IGV2ZXJ5IGNvbW1pdCBhcyBmYXIgYXMgcG9zc2libGU7IGhvcGVmdWxseSBpbnRvIHByb2R1Y3Rpb24gKi9cbi8vICAgQ09OVElOVU9VU19ERVBMT1lNRU5ULFxuLy8gICAvKiogQnVpbGQgZXZlcnkgY29tbWl0IGFuZCBwcmVwYXJlIGFsbCBhc3NldHMgZm9yIGEgbGF0ZXIgZGVwbG95bWVudCAqL1xuLy8gICBDT05USU5VT1VTX0RFTElWRVJZLFxuLy8gfVxuXG5leHBvcnQgZW51bSBDZGtEaWZmVHlwZSB7XG4gIC8qKiBEbyBub3QgcGVyZm9ybSBhIGRpZmYgKi9cbiAgTk9ORSxcbiAgLyoqIFBlcmZvcm0gYSBmYXN0IHRlbXBsYXRlIGRpZmYgKC0tbm8tY2hhbmdlc2V0KSAqL1xuICBGQVNULFxuICAvKiogUGVyZm9ybSBhIGZ1bGwgQ2xvdWRGb3JtYXRpb24gZGlmZiAoLS1jaGFuZ2VzZXQpICovXG4gIEZVTEwsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhZ2VzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHBpcGVsaW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWdlIGV4dGVuZHMgTmFtZWRTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBtYW51YWxBcHByb3ZhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhZ2VzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwaXBlbGluZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGVwZW5kZW50U3RhZ2UgZXh0ZW5kcyBOYW1lZFN0YWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzdGFnZSBzaG91bGQgYmUgZGVwbG95ZWQgb24gcHVzaFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95T25QdXNoPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIENESyBzdGFnZSB3aXRoIGEgbmFtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVkU3RhZ2VPcHRpb25zIGV4dGVuZHMgU3RhZ2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgR2l0SHViIGVudmlyb25tZW50IHRvIHVzZSBmb3IgdGhpcyBzdGFnZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIHN0YWdlIG5hbWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBHaXRIdWIgZW52aXJvbm1lbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgc3RhZ2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgd2F0Y2hhYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGlmZlR5cGU/OiBDZGtEaWZmVHlwZTtcbiAgcmVhZG9ubHkgcG9zdERpZmZTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xuICByZWFkb25seSBwb3N0RGVwbG95U3RlcHM/OiBQaXBlbGluZVN0ZXBbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIENESyBzdGFnZSBsaWtlIHRoZSB0YXJnZXQgZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBlbnY6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBJQU0gcm9sZXMgdXNlZCBpbiB0aGUgQ0RLIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElhbVJvbGVDb25maWcge1xuICAvKiogRGVmYXVsdCBJQU0gcm9sZSBBUk4gdXNlZCBpZiBubyBzcGVjaWZpYyByb2xlIGlzIHByb3ZpZGVkLiAqL1xuICByZWFkb25seSBkZWZhdWx0Pzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgc3ludGhlc2lzIHN0ZXAuICovXG4gIHJlYWRvbmx5IHN5bnRoPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgYXNzZXQgcHVibGlzaGluZyBzdGVwLiAqL1xuICByZWFkb25seSBhc3NldFB1Ymxpc2hpbmc/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBBUk4gZm9yIHRoZSBhc3NldCBwdWJsaXNoaW5nIHN0ZXAgZm9yIGEgc3BlY2lmaWMgc3RhZ2UuICovXG4gIHJlYWRvbmx5IGFzc2V0UHVibGlzaGluZ1BlclN0YWdlPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogSUFNIHJvbGUgQVJOcyBmb3IgZGlmZmVyZW50IGRpZmYgc3RhZ2VzLiAqL1xuICByZWFkb25seSBkaWZmPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogSUFNIHJvbGUgQVJOcyBmb3IgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RhZ2VzLiAqL1xuICByZWFkb25seSBkZXBsb3ltZW50PzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgICogSUFNIHJvbGUgQVJOcyBmb3IgdXNpbmcgYSBcImp1bXBcIiByb2xlIHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUgaW4gYSBkaWZmZXJlbnQgQVdTIGFjY291bnQgdXNpbmcgUm9sZSBDaGFpbmluZy5cbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHM/dGFiPXJlYWRtZS1vdi1maWxlI2Fzc3VtZXJvbGUtd2l0aC1yb2xlLXByZXZpb3VzbHktYXNzdW1lZC1ieS1hY3Rpb24taW4tc2FtZS13b3JrZmxvd1xuICAgKiAqL1xuICByZWFkb25seSBqdW1wPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSBDREtQaXBlbGluZU9wdGlvbnMgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgY29uZmlndXJhdGlvblxuICogb3B0aW9ucyBmb3IgYSBDREsgKENsb3VkIERldmVsb3BtZW50IEtpdCkgcGlwZWxpbmUuIEl0IGFsbG93cyB0aGUgZGVmaW5pdGlvblxuICogb2Ygc2V0dGluZ3Mgc3VjaCBhcyB0aGUgc3RhY2sgcHJlZml4IGFuZCBwYWNrYWdlIG5hbWVzcGFjZSB0byBiZSB1c2VkIGluIHRoZVxuICogQVdTIHN0YWNrLCBhbG9uZyB3aXRoIHRoZSBlbnZpcm9ubWVudHMgY29uZmlndXJhdGlvbiB0byBiZSB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENES1BpcGVsaW5lT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUsIHVzZWQgYXMgYSBwcmVmaXggZm9yIHdvcmtmbG93IGZpbGVzLFxuICAgKiBjb25jdXJyZW5jeSBncm91cHMsIGFuZCBhcnRpZmFjdCBuYW1lcyB0byBwcmV2ZW50IGNvbGxpc2lvbnMgaW4gbW9ub3JlcG9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0IG5hbWUgaWYgdGhlIHByb2plY3QgaGFzIGEgcGFyZW50IChtb25vcmVwbyBzdWJwcm9qZWN0KSwgb3RoZXJ3aXNlIG5vIHByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIGRlcGxveSBmcm9tXG4gICAqIEBkZWZhdWx0IG1haW5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aCBwYXR0ZXJucyB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBwaXBlbGluZSB3aGVuIGNoYW5nZWQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBtb25vcmVwb3Mgd2hlcmUgeW91IG9ubHkgd2FudCB0byBydW4gdGhlIHBpcGVsaW5lXG4gICAqIHdoZW4gZmlsZXMgaW4gYSBzcGVjaWZpYyBzdWJwcm9qZWN0IGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogRm9yIEdpdEh1YiwgdGhlc2UgYXJlIHVzZWQgYXMgYG9uLnB1c2gucGF0aHNgIGFuZCBgb24ucHVsbF9yZXF1ZXN0LnBhdGhzYCBmaWx0ZXJzLlxuICAgKiBGb3IgR2l0TGFiLCB0aGVzZSBhcmUgdXNlZCBhcyBgb25seS5jaGFuZ2VzYCBmaWx0ZXJzLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbJ3BhY2thZ2VzL215LWFwcC8qKicsICdzaGFyZWQtbGlicy8qKiddXG4gICAqIEBkZWZhdWx0IC0gYWxsIHBhdGhzIHRyaWdnZXIgdGhlIHBpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZGVmaW5lIGEgcHJlZml4IGZvciB0aGUgQVdTIFN0YWNrIHJlc291cmNlcyBjcmVhdGVkXG4gICAqIGR1cmluZyB0aGUgcGlwZWxpbmUncyBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHByb2plY3QgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlIGFsbCBDREsgYWN0aW9ucyB3aWxsIGFsc28gaW5jbHVkZSA8c3RhY2tOYW1lPi8qIHRvIGRlcGxveS9kaWZmL2Rlc3Ryb3kgc3ViIHN0YWNrcyBvZiB0aGUgbWFpbiBzdGFjay5cbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBkZXBsb3kgQ0RrIGFwcGxpY2F0aW9ucyBjb250YWluaW5nIG11bHRpcGxlIHN0YWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveVN1YlN0YWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgZGV0ZXJtaW5lcyB0aGUgTlBNIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gcGFja2FnaW5nIENESyBjbG91ZFxuICAgKiBhc3NlbWJsaWVzLiBBIG5hbWVzcGFjZSBoZWxwcyBncm91cCByZWxhdGVkIHJlc291cmNlcyB0b2dldGhlciwgcHJvdmlkaW5nXG4gICAqIGJldHRlciBvcmdhbml6YXRpb24gYW5kIGVhc2Ugb2YgbWFuYWdlbWVudC5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiB5b3UgbmVlZCB0byB2ZXJzaW9uIGFuZCB1cGxvYWQgdGhlIGNsb3VkIGFzc2VtYmx5IHRvIGEgcGFja2FnZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSBwa2dOYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqIElBTSBjb25maWcgKi9cbiAgcmVhZG9ubHkgaWFtUm9sZUFybnM6IElhbVJvbGVDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIGEgbGlzdCBvZiBzdGFnZXMgdGhhdCBzaG91bGQgYmUgZGVwbG95ZWQgdXNpbmcgYSBDSS9DRCBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VzOiBEZXBsb3ltZW50U3RhZ2VbXTtcblxuICAvKiogVGhpcyBzcGVjaWZpZXMgZGV0YWlscyBmb3IgaW5kZXBlbmRlbnQgc3RhZ2VzICovXG4gIHJlYWRvbmx5IGluZGVwZW5kZW50U3RhZ2VzPzogSW5kZXBlbmRlbnRTdGFnZVtdO1xuXG4gIC8qKiBUaGlzIHNwZWNpZmllcyBkZXRhaWxzIGZvciBhIHBlcnNvbmFsIHN0YWdlICovXG4gIHJlYWRvbmx5IHBlcnNvbmFsU3RhZ2U/OiBTdGFnZU9wdGlvbnM7XG5cbiAgLyoqIFRoaXMgc3BlY2lmaWVzIGRldGFpbHMgZm9yIGZlYXR1cmUgc3RhZ2VzICovXG4gIHJlYWRvbmx5IGZlYXR1cmVTdGFnZXM/OiBTdGFnZU9wdGlvbnM7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHBpcGVsaW5lIHRvIGNyZWF0ZS4gSWYgc2V0IHRvIENPTlRJTlVPVVNfREVQTE9ZTUVOVCxcbiAgLy8gICogZXZlcnkgY29tbWl0IGlzIGRlcGxveWVkIGFzIGZhciBhcyBwb3NzaWJsZSwgaG9wZWZ1bGx5IGludG8gcHJvZHVjdGlvbi4gSWYgc2V0IHRvXG4gIC8vICAqIENPTlRJTlVPVVNfREVMSVZFUlksIGV2ZXJ5IGNvbW1pdCBpcyBidWlsdCBhbmQgYWxsIGFzc2V0cyBhcmUgcHJlcGFyZWQgZm9yIGEgbGF0ZXIgZGVwbG95bWVudC5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgQ09OVElOVU9VU19ERUxJVkVSWVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgZGVwbG95bWVudFR5cGU/OiBEZXBsb3ltZW50VHlwZTtcblxuICByZWFkb25seSBwcmVJbnN0YWxsQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlU3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBwb3N0U3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuXG4gIHJlYWRvbmx5IHByZUluc3RhbGxTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xuICByZWFkb25seSBwcmVTeW50aFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG4gIHJlYWRvbmx5IHBvc3RTeW50aFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHBpcGVsaW5lIHJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBjb21wdXRlZCBmb3Igc3VicHJvamVjdHMgYnV0IGNhbiBiZSBleHBsaWNpdGx5IHNldC5cbiAgICpcbiAgICogV2hlbiBzZXQsIENJIGpvYnMgd2lsbCBydW4gY29tbWFuZHMgaW4gdGhpcyBkaXJlY3RvcnksIGFuZCBhcnRpZmFjdCBwYXRoc1xuICAgKiB3aWxsIGJlIHByZWZpeGVkIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9tYXRpY2FsbHkgY29tcHV0ZWQgZnJvbSB0aGUgcHJvamVjdCdzIHBvc2l0aW9uIGluIHRoZSBtb25vcmVwbyAoZW1wdHkgc3RyaW5nIGZvciByb290IHByb2plY3RzKVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb21tYW5kIHRvIHJ1biBiZWZvcmUgdGhlIGJ1aWxkIHN0ZXAsIGV4ZWN1dGVkIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogV2hlbiBhIHdvcmtpbmdEaXJlY3RvcnkgaXMgc2V0IChtb25vcmVwbyBzdWJwcm9qZWN0KSwgdGhlIGNvbW1hbmQgaXNcbiAgICogYXV0b21hdGljYWxseSB3cmFwcGVkIHRvIGV4ZWN1dGUgZnJvbSB0aGUgcmVwb3NpdG9yeSByb290IHJlZ2FyZGxlc3Mgb2ZcbiAgICogdGhlIGpvYidzIHdvcmtpbmcgZGlyZWN0b3J5IHNldHRpbmcuXG4gICAqXG4gICAqIEZvciBwbnBtIHdvcmtzcGFjZXM6IGBwbnBtIC1yIC0tZmlsdGVyIDxhcHBuYW1lPl4uLi4gcnVuIGJ1aWxkYFxuICAgKiBGb3IgbnBtIHdvcmtzcGFjZXM6IGBucG0gcnVuIGJ1aWxkIC0td29ya3NwYWNlcyAtLWlmLXByZXNlbnRgXG4gICAqIEZvciB5YXJuIHdvcmtzcGFjZXM6IGB5YXJuIHdvcmtzcGFjZXMgZm9yZWFjaCAtUnQgcnVuIGJ1aWxkYFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByZS1idWlsZCBjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBwcmVCdWlsZENvbW1hbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb25pbmcgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbmluZz86IFZlcnNpb25pbmdDb25maWc7XG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lIGNsYXNzIGV4dGVuZHMgdGhlIENvbXBvbmVudCBjbGFzcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIGRlcGxveWluZyBBV1MgQ0RLIChDbG91ZCBEZXZlbG9wbWVudCBLaXQpIGFwcGxpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgc3RhZ2VzLlxuICogSXQgYWxzbyBtYW5hZ2VzIHRhc2tzIHN1Y2ggYXMgcHVibGlzaGluZyBDREsgYXNzZXRzLCBidW1waW5nIHZlcnNpb24gYmFzZWQgb24gZ2l0IHRhZ3MsIGFuZCBjbGVhbmluZyB1cCBjb25mbGljdGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENES1BpcGVsaW5lIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrUHJlZml4OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBicmFuY2hOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFByZWZpeCBmb3Igd29ya2Zsb3cgZmlsZXMsIGNvbmN1cnJlbmN5IGdyb3VwcywgYW5kIGFydGlmYWN0IG5hbWVzIHRvIHByZXZlbnQgY29sbGlzaW9ucyBpbiBtb25vcmVwb3MuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBuYW1lUHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290IGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKiBVbmRlZmluZWQgd2hlbiB0aGUgcGlwZWxpbmUgaXMgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIHByb3RlY3RlZCBiYXNlT3B0aW9uczogQ0RLUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgc3VwZXIoYXBwKTtcblxuICAgIC8vIENvbXB1dGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIG1vbm9yZXBvIHN1cHBvcnRcbiAgICBpZiAoYmFzZU9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gYmFzZU9wdGlvbnMud29ya2luZ0RpcmVjdG9yeTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVsID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFwcC5yb290Lm91dGRpciwgdGhpcy5hcHAub3V0ZGlyKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnkgPSByZWwgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEFkZCBkZXZlbG9wbWVudCBkZXBlbmRlbmNpZXNcbiAgICB0aGlzLmFwcC5hZGREZXZEZXBzKFxuICAgICAgJ2NvbW1pdC1hbmQtdGFnLXZlcnNpb24nLFxuICAgICAgJ2Nkay1hc3NldHMnLFxuICAgICk7XG4gICAgLy8gdGhpcy5hcHAuYWRkRGVwcyhcbiAgICAvLyApO1xuICAgIHRoaXMucHJvamVjdC5naXRpZ25vcmUuZXhjbHVkZSgnL2Nkay1vdXRwdXRzLSouanNvbicpO1xuXG4gICAgY29uc3QgcGlwZWxpbmVOYW1lID0gYmFzZU9wdGlvbnMucGlwZWxpbmVOYW1lID8/IChhcHAucGFyZW50ID8gYXBwLm5hbWUgOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZVByZWZpeCA9IHBpcGVsaW5lTmFtZSA/IGAke3BpcGVsaW5lTmFtZX0tYCA6ICcnO1xuICAgIHRoaXMuc3RhY2tQcmVmaXggPSBiYXNlT3B0aW9ucy5zdGFja1ByZWZpeCA/PyBhcHAubmFtZTtcbiAgICB0aGlzLmJyYW5jaE5hbWUgPSBiYXNlT3B0aW9ucy5icmFuY2hOYW1lID8/ICdtYWluJzsgLy8gVE9ETyB1c2UgZGVmYXVsdFJlbGVhc2VCcmFuY2ggb2YgTm9kZVByb2plY3RcblxuICAgIC8vIFJlbW92ZXMgdGhlIGNvbXBpbGVkIGNsb3VkIGFzc2VtYmx5IGJlZm9yZSBlYWNoIHN5bnRoXG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoJ3N5bnRoJyk/LnByZXBlbmRFeGVjKGBybSAtcmYgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fWApO1xuICAgIHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKCdzeW50aDpzaWxlbnQnKT8ucHJlcGVuZEV4ZWMoYHJtIC1yZiAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9YCk7XG5cbiAgICAvLyBSZW1vdmUgdGFza3MgdGhhdCBtaWdodCBjb25mbGljdCB3aXRoIHRoZSBwaXBlbGluZSBwcm9jZXNzXG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2RlcGxveScpO1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCdkaWZmJyk7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2Rlc3Ryb3knKTtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnd2F0Y2gnKTtcblxuICAgIC8vIFNldHVwIHZlcnNpb25pbmcgaWYgZW5hYmxlZFxuICAgIGlmIChiYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkKSB7XG4gICAgICBuZXcgVmVyc2lvbmluZ1NldHVwKHRoaXMucHJvamVjdCwgYmFzZU9wdGlvbnMudmVyc2lvbmluZykuc2V0dXAoKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIGRpZmZlcmVudCBkZXBsb3ltZW50IHN0YWdlc1xuICAgIGlmIChiYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlKSB7XG4gICAgICB0aGlzLmNyZWF0ZVBlcnNvbmFsU3RhZ2UoKTtcbiAgICB9XG4gICAgaWYgKGJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMpIHtcbiAgICAgIHRoaXMuY3JlYXRlRmVhdHVyZVN0YWdlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgYmFzZU9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICB0aGlzLmNyZWF0ZVBpcGVsaW5lU3RhZ2Uoc3RhZ2UpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIChiYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXSkpIHtcbiAgICAgIHRoaXMuY3JlYXRlSW5kZXBlbmRlbnRTdGFnZShzdGFnZSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlcyB0YXNrcyB0byBoYW5kbGUgdGhlIHJlbGVhc2UgcHJvY2Vzc1xuICAgIHRoaXMuY3JlYXRlUmVsZWFzZVRhc2tzKCk7XG5cbiAgICAvLyBDcmVhdGVzIGEgc3BlY2lhbGl6ZWQgQ0RLIEFwcCBjbGFzc1xuICAgIHRoaXMuY3JlYXRlQXBwbGljYXRpb25FbnRyeXBvaW50KCk7XG5cbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBlbmdpbmVUeXBlKCk6IFBpcGVsaW5lRW5naW5lO1xuXG4gIHByb3RlY3RlZCBwcm92aWRlSW5zdGFsbFN0ZXAoKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsU3RlcHMgPz8gW10pO1xuXG4gICAgLy8gRGV0ZWN0IGFuZCBhZGQgcG5wbSBzZXR1cCBpZiBuZWVkZWQgKEdpdEh1YiBvbmx5KVxuICAgIGlmICh0aGlzLmFwcC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSAmJiB0aGlzLmVuZ2luZVR5cGUoKSA9PT0gUGlwZWxpbmVFbmdpbmUuR0lUSFVCKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFBucG1TZXR1cFN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHZlcnNpb246ICh0aGlzLmFwcC5wYWNrYWdlIGFzIGFueSkucG5wbVZlcnNpb24sXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IGFuZCBhZGQgY29yZXBhY2sgZW5hYmxlIGZvciBZYXJuIEJlcnJ5XG4gICAgaWYgKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IENvcmVwYWNrU2V0dXBTdGVwKHRoaXMucHJvamVjdCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnByZUluc3RhbGxDb21tYW5kcykge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzKSk7XG4gICAgfVxuICAgIHNlcS5hZGRTdGVwcyhuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCBbdGhpcy5hcHAucGFja2FnZS5pbnN0YWxsQ29tbWFuZF0pKTtcbiAgICByZXR1cm4gc2VxO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVTeW50aFN0ZXAoKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW10pO1xuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LnN5bnRoKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLnN5bnRoLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5zeW50aCxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBzZXEuYWRkU3RlcHMoLi4udGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aFN0ZXBzID8/IFtdKTtcbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aENvbW1hbmRzKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aENvbW1hbmRzKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucHJlQnVpbGRDb21tYW5kKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgW3RoaXMucHJlQnVpbGRDb21tYW5kV3JhcHBlZCgpXSkpO1xuICAgIH1cblxuICAgIHNlcS5hZGRTdGVwcyhuZXcgUHJvamVuU2NyaXB0U3RlcCh0aGlzLnByb2plY3QsICdidWlsZCcpKTtcblxuICAgIHNlcS5hZGRTdGVwcyguLi50aGlzLmJhc2VPcHRpb25zLnBvc3RTeW50aFN0ZXBzID8/IFtdKTtcbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wb3N0U3ludGhDb21tYW5kcykge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMuYmFzZU9wdGlvbnMucG9zdFN5bnRoQ29tbWFuZHMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcmVCdWlsZENvbW1hbmQgd3JhcHBlZCB0byBleGVjdXRlIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogV2hlbiB3b3JraW5nRGlyZWN0b3J5IGlzIHNldCwgdGhlIGNvbW1hbmQgaXMgcHJlZml4ZWQgd2l0aCBhIGNkIHRvIHRoZVxuICAgKiByZXBvIHJvb3QgdXNpbmcgZW5naW5lLWFwcHJvcHJpYXRlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgcHJlQnVpbGRDb21tYW5kV3JhcHBlZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNtZCA9IHRoaXMuYmFzZU9wdGlvbnMucHJlQnVpbGRDb21tYW5kITtcbiAgICBpZiAoIXRoaXMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmVuZ2luZVR5cGUoKSkge1xuICAgICAgY2FzZSBQaXBlbGluZUVuZ2luZS5HSVRIVUI6XG4gICAgICAgIHJldHVybiBgY2QgJEdJVEhVQl9XT1JLU1BBQ0UgJiYgJHtjbWR9YDtcbiAgICAgIGNhc2UgUGlwZWxpbmVFbmdpbmUuR0lUTEFCOlxuICAgICAgICByZXR1cm4gYChjZCAkQ0lfUFJPSkVDVF9ESVIgJiYgJHtjbWR9KWA7XG4gICAgICBjYXNlIFBpcGVsaW5lRW5naW5lLkJBU0g6XG4gICAgICAgIHJldHVybiBgKGNkIFwiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbClcIiAmJiAke2NtZH0pYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVBc3NldFVwbG9hZFN0ZXAoc3RhZ2VOYW1lPzogc3RyaW5nKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW10pO1xuXG4gICAgY29uc3QgZ2xvYmFsUHVibGlzaFJvbGUgPSB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZyA/PyB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmRlZmF1bHQhO1xuICAgIGlmIChzdGFnZU5hbWUpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2UgP1xuICAgICAgICAgICh0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlW3N0YWdlTmFtZV0gPz8gZ2xvYmFsUHVibGlzaFJvbGUpIDpcbiAgICAgICAgICBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAganVtcFJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuanVtcD8uW3N0YWdlTmFtZV0sXG4gICAgICB9KSk7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgcHVibGlzaDphc3NldHM6JHtzdGFnZU5hbWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmdQZXJTdGFnZSkge1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBbLi4udGhpcy5iYXNlT3B0aW9ucy5zdGFnZXMsIC4uLnRoaXMuYmFzZU9wdGlvbnMuaW5kZXBlbmRlbnRTdGFnZXMgPz8gW11dO1xuICAgICAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlW3N0YWdlLm5hbWVdID8/IGdsb2JhbFB1Ymxpc2hSb2xlLFxuICAgICAgICAgICAganVtcFJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuanVtcD8uW3N0YWdlLm5hbWVdLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgcHVibGlzaDphc3NldHM6JHtzdGFnZS5uYW1lfWApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICByb2xlQXJuOiBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5hc3NldFB1Ymxpc2hpbmcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ3B1Ymxpc2g6YXNzZXRzJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZUFzc2VtYmx5VXBsb2FkU3RlcCgpOiBQaXBlbGluZVN0ZXAge1xuICAgIGlmICghdGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGtnTmFtZXNwYWNlIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdmVyc2lvbmVkIGFydGlmYWN0cyAoZS5nLiBtYW51YWwgYXBwcm92YWxzKScpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN0ZXBTZXF1ZW5jZSh0aGlzLnByb2plY3QsIFtcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ2J1bXAnKSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ3JlbGVhc2U6cHVzaC1hc3NlbWJseScpLFxuICAgIF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVEZXBsb3lTdGVwKHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucyk6IFBpcGVsaW5lU3RlcCB7XG4gICAgcmV0dXJuIG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXG4gICAgICBuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlcGxveW1lbnQ/LltzdGFnZS5uYW1lXSA/PyB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZWZhdWx0ISxcbiAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgYGRlcGxveToke3N0YWdlLm5hbWV9YCksXG4gICAgICAuLi5zdGFnZS5wb3N0RGVwbG95U3RlcHMgPz8gW10sXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZURpZmZTdGVwKHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucywgZmFzdD86IGJvb2xlYW4pOiBQaXBlbGluZVN0ZXAge1xuICAgIHJldHVybiBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW1xuICAgICAgbmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kaWZmPy5bc3RhZ2UubmFtZV0gPz9cbiAgICAgICAgICB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZXBsb3ltZW50Py5bc3RhZ2UubmFtZV0gPz9cbiAgICAgICAgICB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZWZhdWx0ISxcbiAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgZmFzdCA/IGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCA6IGBkaWZmOiR7c3RhZ2UubmFtZX1gKSxcbiAgICAgIC4uLnN0YWdlLnBvc3REaWZmU3RlcHMgPz8gW10sXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5zdGFsbFBhY2thZ2VDb21tYW5kcyhwYWNrYWdlTmFtZTogc3RyaW5nLCBydW5QcmVJbnN0YWxsQ29tbWFuZHM6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb21tYW5kcyA9IHJ1blByZUluc3RhbGxDb21tYW5kcyA/IHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdIDogW107XG5cbiAgICBzd2l0Y2ggKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk46XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlk6XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUM6XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYHlhcm4gYWRkICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgICBjb21tYW5kcy5wdXNoKGBucG0gaW5zdGFsbCAke3BhY2thZ2VOYW1lfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYHBucG0gYWRkICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpbnN0YWxsIHNjcmlwdHMgZm9yIHBhY2thZ2VNYW5hZ2VyOiAnICsgdGhpcy5hcHAucGFja2FnZS5wYWNrYWdlTWFuYWdlcik7XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kcztcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVTYWZlU3RhZ2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gUmVtb3ZlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgc3BsaXQgaW50byB3b3Jkc1xuICAgIGNvbnN0IHdvcmRzID0gbmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJykudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG5cbiAgICAvLyBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGFuZCBqb2luIHRoZW1cbiAgICByZXR1cm4gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9KS5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYXBwbGljYXRpb24sIGluY2x1ZGluZyBpbnRlcmZhY2VzIGFuZCBjbGFzc2VzXG4gICAqIG5lY2Vzc2FyeSB0byBzZXQgdXAgdGhlIHBpcGVsaW5lIGFuZCBkZWZpbmUgdGhlIEFXUyBDREsgc3RhY2tzIGZvciBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUFwcGxpY2F0aW9uRW50cnlwb2ludCgpIHtcbiAgICBsZXQgcHJvcHNDb2RlID0gJyc7XG4gICAgbGV0IGFwcENvZGUgPSAnJztcbiAgICBsZXQgc2VwID0gJy0nO1xuICAgIGlmICh0aGlzLnN0YWNrUHJlZml4ID09PSAnJykge1xuICAgICAgc2VwID0gJyc7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlKSB7XG4gICAgICBwcm9wc0NvZGUgKz0gYCAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcGVyc29uYWwgc3RhY2suICovXG4gIHByb3ZpZGVQZXJzb25hbFN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBVU0VSIGlzIHNldCBhbmQgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY3JlYXRpbmcgYSBwZXJzb25hbCBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZVBlcnNvbmFsU3RhY2sgJiYgcHJvY2Vzcy5lbnYuVVNFUikge1xuICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gJ3BlcnNvbmFsLScgKyBwcm9jZXNzLmVudi5VU0VSLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxcXFxcLy9nLCAnLScpO1xuICAgICAgcHJvcHMucHJvdmlkZVBlcnNvbmFsU3RhY2sodGhpcywgJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH1wZXJzb25hbCcsIHsgZW52OiB7IGFjY291bnQ6ICcke3RoaXMuYmFzZU9wdGlvbnMucGVyc29uYWxTdGFnZS5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3RoaXMuYmFzZU9wdGlvbnMucGVyc29uYWxTdGFnZS5lbnYucmVnaW9ufScgfSwgc3RhY2tOYW1lOiBcXGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9XFwke3N0YWdlTmFtZX1cXGAsIHN0YWdlTmFtZSB9KTtcbiAgICB9XG5gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMpIHtcbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBmZWF0dXJlIHN0YWNrLiAqL1xuICBwcm92aWRlRmVhdHVyZVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBCUkFOQ0ggaXMgc2V0IGFuZCBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhIGZlYXR1cmUgc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGVGZWF0dXJlU3RhY2sgJiYgcHJvY2Vzcy5lbnYuQlJBTkNIKSB7XG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSAnZmVhdHVyZS0nICsgcHJvY2Vzcy5lbnYuQlJBTkNILnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxcXFxcLy9nLCAnLScpO1xuICAgICAgcHJvcHMucHJvdmlkZUZlYXR1cmVTdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfWZlYXR1cmUnLCB7IGVudjogeyBhY2NvdW50OiAnJHt0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMuZW52LmFjY291bnR9JywgcmVnaW9uOiAnJHt0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogXFxgJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfVxcJHtzdGFnZU5hbWV9XFxgLCBzdGFnZU5hbWUgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHRoaXMuYmFzZU9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICBjb25zdCBuYW1lVXBwZXJGaXJzdCA9IHRoaXMuY3JlYXRlU2FmZVN0YWdlTmFtZShzdGFnZS5uYW1lKTtcblxuICAgICAgcHJvcHNDb2RlICs9IGAgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhICR7c3RhZ2UubmFtZX0gc3RhY2suICovXG4gIHByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgJHtzdGFnZS5uYW1lfSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2spIHtcbiAgICAgIHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHsgZW52OiB7IGFjY291bnQ6ICcke3N0YWdlLmVudi5hY2NvdW50fScsIHJlZ2lvbjogJyR7c3RhZ2UuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9Jywgc3RhZ2VOYW1lOiAnJHtzdGFnZS5uYW1lfScgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mICh0aGlzLmJhc2VPcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdKSkge1xuICAgICAgY29uc3QgbmFtZVVwcGVyRmlyc3QgPSB0aGlzLmNyZWF0ZVNhZmVTdGFnZU5hbWUoc3RhZ2UubmFtZSk7XG5cbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSAke3N0YWdlLm5hbWV9IHN0YWNrLiAqL1xuICBwcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjazogKGFwcDogQXBwLCBzdGFja0lkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZUFwcFN0YWNrUHJvcHMpID0+IFN0YWNrO1xuYDtcbiAgICAgIGFwcENvZGUgKz0gYCAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhICR7c3RhZ2UubmFtZX0gc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKSB7XG4gICAgICBwcm9wcy5wcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2UubmFtZX0nLCB7IGVudjogeyBhY2NvdW50OiAnJHtzdGFnZS5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3N0YWdlLmVudi5yZWdpb259JyB9LCBzdGFja05hbWU6ICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHN0YWdlTmFtZTogJyR7c3RhZ2UubmFtZX0nIH0pO1xuICAgIH1cbmA7XG4gICAgfVxuXG4gICAgLy8gQWRkIHZlcnNpb25pbmcgbG9naWMgdG8gYXBwbHkgdG8gYWxsIHN0YWNrc1xuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIGFwcENvZGUgKz0gdGhpcy5nZW5lcmF0ZVZlcnNpb25pbmdBcHBDb2RlKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwRmlsZSA9IG5ldyBUZXh0RmlsZSh0aGlzLnByb2plY3QsIGAke3RoaXMuYXBwLnNyY2Rpcn0vYXBwLnRzYCk7XG5cbiAgICAvLyBHZW5lcmF0ZSB2ZXJzaW9uaW5nLWF3YXJlIGltcG9ydHMgYW5kIHV0aWxpdGllc1xuICAgIGNvbnN0IHZlcnNpb25pbmdJbXBvcnRzID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IHRoaXMuZ2VuZXJhdGVWZXJzaW9uaW5nSW1wb3J0cygpXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVyc2lvbmluZ1V0aWxpdGllcyA9IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZFxuICAgICAgPyB0aGlzLmdlbmVyYXRlVmVyc2lvbmluZ1V0aWxpdGllcygpXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVyc2lvbmluZ0NvbmZpZ0RlY2xhcmF0aW9uID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IGBcbmNvbnN0IHZlcnNpb25pbmdDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZywgbnVsbCwgMil9O1xuYFxuICAgICAgOiAnJztcblxuICAgIGFwcEZpbGUuYWRkTGluZShgLy8gJHtQUk9KRU5fTUFSS0VSfVxuLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFwcCwgQXBwUHJvcHMsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuJHt2ZXJzaW9uaW5nSW1wb3J0c31cbiR7dmVyc2lvbmluZ0NvbmZpZ0RlY2xhcmF0aW9ufVxuJHt2ZXJzaW9uaW5nVXRpbGl0aWVzfVxuXG4vKipcbiAqIFBpcGVsaW5lQXBwUHJvcHMgaXMgYW4gZXh0ZW5zaW9uIG9mIEFwcFByb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBvcHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBBV1MgU3RhY2tzIGZvciBkaWZmZXJlbnQgc3RhZ2VzLlxuICpcbiAqIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gaW5zdGFudGlhdGUgeW91ciBhcHBsaWNhdGlvbiBzdGFja3Mgd2l0aCB0aGUgcGFyYW1ldGVycyBmb3JcbiAqIGVhY2ggc3RhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFwcFByb3BzIGV4dGVuZHMgQXBwUHJvcHMge1xuJHtwcm9wc0NvZGV9XG59XG5cbi8qKlxuICogUGlwZWxpbmVBcHBTdGFja1Byb3BzIGlzIGFuIGV4dGVuc2lvbiBvZiBTdGFja1Byb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIHN0YWdlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBQaXBlbGluZUFwcCBjbGFzcyBleHRlbmRzIHRoZSBBcHAgY2xhc3MgZnJvbSBBV1MgQ0RLIGFuZCBvdmVycmlkZXMgdGhlIGNvbnN0cnVjdG9yIHRvIHN1cHBvcnRcbiAqIGRpZmZlcmVudCBzdGFnZXMgb2YgdGhlIGFwcGxpY2F0aW9uIChkZXZlbG9wbWVudCwgcHJvZHVjdGlvbiwgcGVyc29uYWwsIGZlYXR1cmUpIGJ5IGludm9raW5nIHRoZSBwcm92aWRlZFxuICogc3RhY2stcHJvdmlkaW5nIGZ1bmN0aW9ucyBmcm9tIHRoZSBwcm9wcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lQXBwIGV4dGVuZHMgQXBwIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFBpcGVsaW5lQXBwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiR7YXBwQ29kZX1cblxuICB9XG59XG5gKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgdG8gcHVibGlzaCBDREsgYXNzZXRzIHRvIGFsbCBhY2NvdW50cyBhbmQgaGFuZGxlIHZlcnNpb25pbmcsIGluY2x1ZGluZyBidW1waW5nIHRoZSB2ZXJzaW9uXG4gICAqIGJhc2VkIG9uIHRoZSBsYXRlc3QgZ2l0IHRhZyBhbmQgcHVzaGluZyB0aGUgQ0RLIGFzc2VtYmx5IHRvIHRoZSBwYWNrYWdlIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVsZWFzZVRhc2tzKCkge1xuICAgIGNvbnN0IHN0YWdlcyA9IFsuLi50aGlzLmJhc2VPcHRpb25zLnN0YWdlcywgLi4udGhpcy5iYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXV07XG4gICAgbGV0IHNlcCA9ICctJztcbiAgICBpZiAodGhpcy5zdGFja1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIHNlcCA9ICcnO1xuICAgIH1cbiAgICAvLyBUYXNrIHRvIHB1Ymxpc2ggdGhlIENESyBhc3NldHMgdG8gYWxsIGFjY291bnRzXG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgICBzdGVwczogW3tcbiAgICAgICAgICBleGVjOiBgbnB4IGNkay1hc3NldHMgLXAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS8ke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfS5hc3NldHMuanNvbiBwdWJsaXNoYCxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3B1Ymxpc2g6YXNzZXRzJywge1xuICAgICAgc3RlcHM6IHN0YWdlcy5tYXAoc3RhZ2UgPT4gKHtcbiAgICAgICAgc3Bhd246IGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2J1bXAnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQnVtcHMgdmVyc2lvbiBiYXNlZCBvbiBsYXRlc3QgZ2l0IHRhZycsXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhlYzogJ3BpcGVsaW5lcy1yZWxlYXNlIGJ1bXAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhlYzogJ2dpdCBwdXNoIC0tdGFncycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3JlbGVhc2U6cHVzaC1hc3NlbWJseScsIHtcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleGVjOiBgcGlwZWxpbmVzLXJlbGVhc2UgY3JlYXRlLW1hbmlmZXN0IFwiJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fVwiICBcIiR7dGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2V9XCJgLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3dkOiB0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0LFxuICAgICAgICAgICAgZXhlYzogJ25wbSB2ZXJzaW9uIC0tbm8tZ2l0LXRhZy12ZXJzaW9uIGZyb20tZ2l0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGN3ZDogdGhpcy5hcHAuY2RrQ29uZmlnLmNka291dCxcbiAgICAgICAgICAgIGV4ZWM6ICducG0gcHVibGlzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBwZXJzb25hbCBkZXBsb3ltZW50IHN0YWdlLCBpbmNsdWRpbmcgZGVwbG95bWVudCwgd2F0Y2hpbmcgZm9yIGNoYW5nZXMsXG4gICAqIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKSwgYW5kIGRlc3Ryb3lpbmcgdGhlIHN0YWNrIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVQZXJzb25hbFN0YWdlKCkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybigncGVyc29uYWwnKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtcGVyc29uYWwuanNvbiAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnd2F0Y2g6cGVyc29uYWwnLCB7XG4gICAgICBleGVjOiBgY2RrIGRlcGxveSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy1wZXJzb25hbC5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdmYXN0ZGlmZjpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVzdHJveTpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRhc2tzIGZvciB0aGUgZmVhdHVyZSBkZXBsb3ltZW50IHN0YWdlLCBpbmNsdWRpbmcgZGVwbG95bWVudCwgY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLFxuICAgKiBhbmQgZGVzdHJveWluZyB0aGUgc3RhY2sgd2hlbiBubyBsb25nZXIgbmVlZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUZlYXR1cmVTdGFnZSgpIHtcbiAgICBjb25zdCBzdGFja0lkID0gdGhpcy5nZXRDbGlTdGFja1BhdHRlcm4oJ2ZlYXR1cmUnKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLWZlYXR1cmUuanNvbiAtLXByb2dyZXNzIGV2ZW50cyAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXIgZGVwbG95ICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Zhc3RkaWZmOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Rlc3Ryb3k6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAtLWZvcmNlICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd3YXRjaDpmZWF0dXJlJywge1xuICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtZmVhdHVyZS5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBnZW5lcmFsIHBpcGVsaW5lIHN0YWdlcyAoZGV2LCBwcm9kKSwgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtEZXBsb3lTdGFnZU9wdGlvbnN9IHN0YWdlIC0gVGhlIHN0YWdlIHRvIGNyZWF0ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVBpcGVsaW5lU3RhZ2Uoc3RhZ2U6IERlcGxveW1lbnRTdGFnZSkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybihzdGFnZS5uYW1lKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGVwbG95OiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGRpZmY6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgaWYgKHN0YWdlLndhdGNoYWJsZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHdhdGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX0uanNvbiAtLXdhdGNoIC0taG90c3dhcCAke3N0YWNrSWR9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgdmVyc2lvbiBmZXRjaCB0YXNrIGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBpbmRlcGVuZGVudCBzdGFnZXMgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtOYW1lZFN0YWdlT3B0aW9uc30gc3RhZ2UgLSBUaGUgc3RhZ2UgdG8gY3JlYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlSW5kZXBlbmRlbnRTdGFnZShzdGFnZTogSW5kZXBlbmRlbnRTdGFnZSkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybihzdGFnZS5uYW1lKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGVwbG95OiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGRpZmY6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgaWYgKHN0YWdlLndhdGNoYWJsZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHdhdGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX0uanNvbiAtLXdhdGNoIC0taG90c3dhcCAke3N0YWNrSWR9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgdmVyc2lvbiBmZXRjaCB0YXNrIGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldENsaVN0YWNrUGF0dGVybihzdGFnZTogc3RyaW5nKSB7XG4gICAgbGV0IHNlcCA9ICctJztcbiAgICBpZiAodGhpcy5zdGFja1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIHNlcCA9ICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlT3B0aW9ucy5kZXBsb3lTdWJTdGFja3MgPyBgJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2V9ICR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlfS8qYCA6IGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB2ZXJzaW9uOmZldGNoOjxzdGFnZT4gdGFzayB0byBmZXRjaCB2ZXJzaW9uIGRhdGEgZnJvbSBkZXBsb3llZCBzdGFja1xuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVZlcnNpb25GZXRjaFRhc2soc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gYCR7dGhpcy5zdGFja1ByZWZpeH0ke3RoaXMuc3RhY2tQcmVmaXggPyAnLScgOiAnJ30ke3N0YWdlLm5hbWV9YDtcbiAgICBjb25zdCBzdGFnZUNvbmZpZyA9IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uc3RhZ2VPdmVycmlkZXM/LltzdGFnZS5uYW1lXSB8fCB0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc7XG5cbiAgICBpZiAoIXN0YWdlQ29uZmlnPy5vdXRwdXRzKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21tYW5kczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEZldGNoIGZyb20gQ2xvdWRGb3JtYXRpb24gb3V0cHV0c1xuICAgIGlmIChzdGFnZUNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uPy5lbmFibGVkKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICBgZWNobyBcIkZldGNoaW5nIHZlcnNpb24gZGF0YSBmcm9tIENsb3VkRm9ybWF0aW9uIG91dHB1dHMgZm9yICR7c3RhZ2UubmFtZX0uLi5cImAsXG4gICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVzY3JpYmUtc3RhY2tzIC0tc3RhY2stbmFtZSAke3N0YWNrTmFtZX0gLS1yZWdpb24gJHtzdGFnZS5lbnYucmVnaW9ufSAtLXF1ZXJ5IFwiU3RhY2tzWzBdLk91dHB1dHNbP3N0YXJ0c193aXRoKE91dHB1dEtleSwgJ0FwcFZlcnNpb24nKV0ue0tleTpPdXRwdXRLZXksVmFsdWU6T3V0cHV0VmFsdWV9XCIgLS1vdXRwdXQgdGFibGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCBmcm9tIFNTTSBQYXJhbWV0ZXIgU3RvcmVcbiAgICBpZiAoc3RhZ2VDb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZT8uZW5hYmxlZCkge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLnBhcmFtZXRlck5hbWUgfHwgJy97c3RhY2tOYW1lfS92ZXJzaW9uJylcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFja05hbWV9Jywgc3RhY2tOYW1lKVxuICAgICAgICAucmVwbGFjZSgne3N0YWdlTmFtZX0nLCBzdGFnZS5uYW1lKTtcblxuICAgICAgaWYgKChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlIGFzIGFueSk/LmhpZXJhcmNoaWNhbCkge1xuICAgICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZSAoaGllcmFyY2hpY2FsKSBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgICBgYXdzIHNzbSBnZXQtcGFyYW1ldGVycy1ieS1wYXRoIC0tcGF0aCBcIiR7cGFyYW1ldGVyTmFtZX1cIiAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcmVjdXJzaXZlIC0tcXVlcnkgXCJQYXJhbWV0ZXJzW10ue05hbWU6TmFtZSxWYWx1ZTpWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZSBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgICBgYXdzIHNzbSBnZXQtcGFyYW1ldGVyIC0tbmFtZSBcIiR7cGFyYW1ldGVyTmFtZX1cIiAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcXVlcnkgXCJQYXJhbWV0ZXIue05hbWU6TmFtZSxWYWx1ZTpWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGB2ZXJzaW9uOmZldGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRmV0Y2ggdmVyc2lvbiBkYXRhIGZyb20gZGVwbG95ZWQgJHtzdGFnZS5uYW1lfSBzdGFja2AsXG4gICAgICAgIGV4ZWM6IGNvbW1hbmRzLmpvaW4oJyAmJiAnKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBDREsgYXBwbGljYXRpb24gY29kZSBmb3IgdmVyc2lvbmluZ1xuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ0FwcENvZGUoY29uZmlnOiBWZXJzaW9uaW5nQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxuICAgIC8vIEFwcGx5IHZlcnNpb25pbmcgdG8gYWxsIHN0YWNrc1xuICAgIHRoaXMubm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3RhY2spIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gY2hpbGQuc3RhY2tOYW1lLnNwbGl0KCctJykucG9wKCkgfHwgJ2RlZmF1bHQnO1xuICAgICAgICBhZGRWZXJzaW9uaW5nVG9TdGFjayhjaGlsZCwgc3RhZ2VOYW1lLCAke2NvbmZpZy5zdGFnZU92ZXJyaWRlcyA/ICd2ZXJzaW9uaW5nQ29uZmlnLnN0YWdlT3ZlcnJpZGVzJyA6ICd1bmRlZmluZWQnfSk7XG4gICAgICB9XG4gICAgfSk7YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB2ZXJzaW9uaW5nIGltcG9ydHMgZm9yIENESyBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ0ltcG9ydHMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaW1wb3J0cy5wdXNoKFwiaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSAnYXdzLWNkay1saWInO1wiKTtcbiAgICBpbXBvcnRzLnB1c2goXCJpbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcIik7XG4gICAgaW1wb3J0cy5wdXNoKFwiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1wiKTtcblxuICAgIHJldHVybiBpbXBvcnRzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHZlcnNpb25pbmcgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENESyBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ1V0aWxpdGllcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXG4vKipcbiAqIFZlcnNpb24gaW5mb3JtYXRpb24gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbkluZm8ge1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNvbW1pdEhhc2g6IHN0cmluZztcbiAgY29tbWl0SGFzaFNob3J0OiBzdHJpbmc7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBjb21taXRDb3VudDogbnVtYmVyO1xuICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nO1xuICBkZXBsb3llZEF0OiBzdHJpbmc7XG4gIGRlcGxveWVkQnk6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBMb2FkIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBnZW5lcmF0ZWQgZmlsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFZlcnNpb25JbmZvKCk6IFZlcnNpb25JbmZvIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoJ352ZXJzaW9uLmpzb24nLCAndXRmOCcpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBsb2FkIHZlcnNpb24gaW5mbywgdXNpbmcgZmFsbGJhY2snKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICAgIGNvbW1pdEhhc2g6ICd1bmtub3duJyxcbiAgICAgIGNvbW1pdEhhc2hTaG9ydDogJ3Vua25vd24nLFxuICAgICAgYnJhbmNoOiAndW5rbm93bicsXG4gICAgICBjb21taXRDb3VudDogMCxcbiAgICAgIHBhY2thZ2VWZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgZGVwbG95ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgZGVwbG95ZWRCeTogJ3Vua25vd24nLFxuICAgICAgZW52aXJvbm1lbnQ6ICd1bmtub3duJ1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdmVyc2lvbmluZyBjb25maWd1cmF0aW9uIGZvciBhIHNwZWNpZmljIHN0YWdlXG4gKi9cbmZ1bmN0aW9uIGdldFN0YWdlQ29uZmlnKHN0YWdlTmFtZTogc3RyaW5nLCBiYXNlQ29uZmlnOiBhbnksIHN0YWdlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYW55Pik6IGFueSB7XG4gIGlmICghc3RhZ2VPdmVycmlkZXMgfHwgIXN0YWdlT3ZlcnJpZGVzW3N0YWdlTmFtZV0pIHtcbiAgICByZXR1cm4gYmFzZUNvbmZpZztcbiAgfVxuICBcbiAgLy8gTWVyZ2Ugc3RhZ2Ugb3ZlcnJpZGUgd2l0aCBiYXNlIGNvbmZpZ1xuICBjb25zdCBvdmVycmlkZSA9IHN0YWdlT3ZlcnJpZGVzW3N0YWdlTmFtZV07XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbmZpZyxcbiAgICBvdXRwdXRzOiB7XG4gICAgICBjbG91ZEZvcm1hdGlvbjogb3ZlcnJpZGUub3V0cHV0cz8uY2xvdWRGb3JtYXRpb24gfHwgYmFzZUNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLFxuICAgICAgcGFyYW1ldGVyU3RvcmU6IG92ZXJyaWRlLm91dHB1dHM/LnBhcmFtZXRlclN0b3JlIHx8IGJhc2VDb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZSxcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQWRkIHZlcnNpb25pbmcgb3V0cHV0cyB0byBhIHN0YWNrXG4gKi9cbmZ1bmN0aW9uIGFkZFZlcnNpb25pbmdUb1N0YWNrKHN0YWNrOiBTdGFjaywgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlT3ZlcnJpZGVzPzogYW55KTogdm9pZCB7XG4gIGNvbnN0IHZlcnNpb25JbmZvID0gbG9hZFZlcnNpb25JbmZvKCk7XG4gIGNvbnN0IGJhc2VDb25maWcgPSB2ZXJzaW9uaW5nQ29uZmlnO1xuICBjb25zdCBjb25maWcgPSBnZXRTdGFnZUNvbmZpZyhzdGFnZU5hbWUsIGJhc2VDb25maWcsIHN0YWdlT3ZlcnJpZGVzKTtcbiAgXG4gIC8vIENoZWNrIGlmIGZvcm1hdCBpcyBzcGVjaWZpZWQgaW4gQ2xvdWRGb3JtYXRpb24gb3IgUGFyYW1ldGVyU3RvcmUgY29uZmlnc1xuICBjb25zdCBjZkZvcm1hdCA9IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uPy5mb3JtYXQgfHwgJ3N0cnVjdHVyZWQnO1xuICBjb25zdCBzc21Gb3JtYXQgPSBjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZT8uZm9ybWF0IHx8ICdzdHJ1Y3R1cmVkJztcbiAgXG4gIC8vIEFkZCBDbG91ZEZvcm1hdGlvbiBvdXRwdXRzXG4gIGlmIChjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbj8uZW5hYmxlZCkge1xuICAgIGlmIChjZkZvcm1hdCA9PT0gJ3BsYWluJykge1xuICAgICAgLy8gUGxhaW4gZm9ybWF0IC0gc2luZ2xlIG91dHB1dCB3aXRoIHZlcnNpb24gc3RyaW5nXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbicsIHtcbiAgICAgICAgdmFsdWU6IHZlcnNpb25JbmZvLnZlcnNpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gdmVyc2lvbicsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RydWN0dXJlZCBmb3JtYXQgLSBtdWx0aXBsZSBvdXRwdXRzXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbicsIHtcbiAgICAgICAgdmFsdWU6IHZlcnNpb25JbmZvLnZlcnNpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gdmVyc2lvbicsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb25Db21taXRIYXNoJywge1xuICAgICAgICB2YWx1ZTogdmVyc2lvbkluZm8uY29tbWl0SGFzaCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXQgY29tbWl0IGhhc2gnLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lID8gXFxgXFwke2NvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWV9Q29tbWl0SGFzaFxcYCA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbkJyYW5jaCcsIHtcbiAgICAgICAgdmFsdWU6IHZlcnNpb25JbmZvLmJyYW5jaCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXQgYnJhbmNoJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSA/IFxcYFxcJHtjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lfUJyYW5jaFxcYCA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbkluZm8nLCB7XG4gICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2ZXJzaW9uSW5mbyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ29tcGxldGUgdmVyc2lvbiBpbmZvcm1hdGlvbicsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUgPyBcXGBcXCR7Y29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZX1JbmZvXFxgIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICAvLyBBZGQgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXJzXG4gIGlmIChjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZT8uZW5hYmxlZCkge1xuICAgIGlmIChjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZS5oaWVyYXJjaGljYWwpIHtcbiAgICAgIC8vIEhpZXJhcmNoaWNhbCBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCBiYXNlUGFyYW1ldGVyTmFtZSA9IChjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZS5wYXJhbWV0ZXJOYW1lIHx8ICcve3N0YWNrTmFtZX0vdmVyc2lvbicpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhY2tOYW1lfScsIHN0YWNrLnN0YWNrTmFtZSlcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFnZU5hbWV9Jywgc3RhZ2VOYW1lKTtcbiAgICAgICAgXG4gICAgICAvLyBDcmVhdGUgaGllcmFyY2hpY2FsIHBhcmFtZXRlcnNcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVyVmVyc2lvbicsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogXFxgXFwke2Jhc2VQYXJhbWV0ZXJOYW1lfS92ZXJzaW9uXFxgLFxuICAgICAgICBzdHJpbmdWYWx1ZTogdmVyc2lvbkluZm8udmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246ICdBcHBsaWNhdGlvbiB2ZXJzaW9uJyxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlckNvbW1pdEhhc2gnLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IFxcYFxcJHtiYXNlUGFyYW1ldGVyTmFtZX0vY29tbWl0SGFzaFxcYCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHZlcnNpb25JbmZvLmNvbW1pdEhhc2gsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0IGNvbW1pdCBoYXNoJyxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlckJyYW5jaCcsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogXFxgXFwke2Jhc2VQYXJhbWV0ZXJOYW1lfS9icmFuY2hcXGAsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiB2ZXJzaW9uSW5mby5icmFuY2gsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0IGJyYW5jaCcsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXJJbmZvJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBcXGBcXCR7YmFzZVBhcmFtZXRlck5hbWV9L2luZm9cXGAsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiBKU09OLnN0cmluZ2lmeSh2ZXJzaW9uSW5mbyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ29tcGxldGUgdmVyc2lvbiBpbmZvcm1hdGlvbicsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlclxuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IChjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZS5wYXJhbWV0ZXJOYW1lIHx8ICcve3N0YWNrTmFtZX0vdmVyc2lvbicpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhY2tOYW1lfScsIHN0YWNrLnN0YWNrTmFtZSlcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFnZU5hbWV9Jywgc3RhZ2VOYW1lKTtcbiAgICAgICAgXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlcicsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHNzbUZvcm1hdCA9PT0gJ3BsYWluJyA/IHZlcnNpb25JbmZvLnZlcnNpb24gOiBKU09OLnN0cmluZ2lmeSh2ZXJzaW9uSW5mbyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzc21Gb3JtYXQgPT09ICdwbGFpbicgPyAnQXBwbGljYXRpb24gdmVyc2lvbicgOiAnQ29tcGxldGUgdmVyc2lvbiBpbmZvcm1hdGlvbicsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1gO1xuICB9XG59XG4iXX0=
|
package/lib/awscdk/bash.js
CHANGED
|
@@ -12,22 +12,39 @@ class BashCDKPipeline extends base_1.CDKPipeline {
|
|
|
12
12
|
const readme = new projen_1.TextFile(this, 'pipeline.md', { lines: [] });
|
|
13
13
|
readme.addLine('# How to run your pipeline');
|
|
14
14
|
readme.addLine('');
|
|
15
|
+
if (this.workingDirectory) {
|
|
16
|
+
readme.addLine(`> **Note:** This pipeline is for a monorepo subproject. Commands should be run from the \`${this.workingDirectory}\` directory.`);
|
|
17
|
+
readme.addLine('');
|
|
18
|
+
readme.addLine('```bash');
|
|
19
|
+
readme.addLine(`cd ${this.workingDirectory}`);
|
|
20
|
+
readme.addLine('```');
|
|
21
|
+
readme.addLine('');
|
|
22
|
+
}
|
|
15
23
|
readme.addLine('## Build phase');
|
|
16
24
|
readme.addLine('');
|
|
17
25
|
readme.addLine('Synthesize your CDK project:');
|
|
18
26
|
readme.addLine('```bash');
|
|
27
|
+
if (this.workingDirectory) {
|
|
28
|
+
readme.addLine(`cd ${this.workingDirectory}`);
|
|
29
|
+
}
|
|
19
30
|
readme.addLine(`${this.provideInstallStep().toBash().commands.join('\n')}`);
|
|
20
31
|
readme.addLine(`${this.provideSynthStep().toBash().commands.join('\n')}`);
|
|
21
32
|
readme.addLine('```');
|
|
22
33
|
readme.addLine('');
|
|
23
34
|
readme.addLine('Publish all your CDK assets like Lambda function code and container images:');
|
|
24
35
|
readme.addLine('```bash');
|
|
36
|
+
if (this.workingDirectory) {
|
|
37
|
+
readme.addLine(`cd ${this.workingDirectory}`);
|
|
38
|
+
}
|
|
25
39
|
readme.addLine(`${this.provideInstallStep().toBash().commands.join('\n')}`);
|
|
26
40
|
readme.addLine(`${this.provideAssetUploadStep().toBash().commands.join('\n')}`);
|
|
27
41
|
readme.addLine('```');
|
|
28
42
|
readme.addLine('');
|
|
29
43
|
readme.addLine('If you want to store your cloud assembly and assets for future use or compliance reasons, use:');
|
|
30
44
|
readme.addLine('```bash');
|
|
45
|
+
if (this.workingDirectory) {
|
|
46
|
+
readme.addLine(`cd ${this.workingDirectory}`);
|
|
47
|
+
}
|
|
31
48
|
readme.addLine(`${this.provideInstallStep().toBash().commands.join('\n')}`);
|
|
32
49
|
readme.addLine(`${this.provideAssetUploadStep().toBash().commands.join('\n')}`);
|
|
33
50
|
if (this.baseOptions.pkgNamespace) {
|
|
@@ -42,6 +59,9 @@ class BashCDKPipeline extends base_1.CDKPipeline {
|
|
|
42
59
|
for (const stage of options.stages) {
|
|
43
60
|
readme.addLine(`Stage: ${stage.name}`);
|
|
44
61
|
readme.addLine('```bash');
|
|
62
|
+
if (this.workingDirectory) {
|
|
63
|
+
readme.addLine(`cd ${this.workingDirectory}`);
|
|
64
|
+
}
|
|
45
65
|
if (stage.diffType !== base_1.CdkDiffType.NONE) {
|
|
46
66
|
readme.addLine(`${this.provideDiffStep(stage, stage.diffType == base_1.CdkDiffType.FAST).toBash().commands.join('\n')}`);
|
|
47
67
|
readme.addLine('');
|
|
@@ -52,6 +72,9 @@ class BashCDKPipeline extends base_1.CDKPipeline {
|
|
|
52
72
|
}
|
|
53
73
|
readme.addLine('The stage `personal` is meant to be deployed manually by the developer and also has a watch script for live updates.');
|
|
54
74
|
readme.addLine('```bash');
|
|
75
|
+
if (this.workingDirectory) {
|
|
76
|
+
readme.addLine(`cd ${this.workingDirectory}`);
|
|
77
|
+
}
|
|
55
78
|
readme.addLine('npx projen diff:personal');
|
|
56
79
|
readme.addLine('npx projen deploy:personal');
|
|
57
80
|
readme.addLine('npx projen destroy:personal');
|
|
@@ -60,6 +83,9 @@ class BashCDKPipeline extends base_1.CDKPipeline {
|
|
|
60
83
|
readme.addLine('');
|
|
61
84
|
readme.addLine('The stage `feature` is meant to be deployed for feature branches.');
|
|
62
85
|
readme.addLine('```bash');
|
|
86
|
+
if (this.workingDirectory) {
|
|
87
|
+
readme.addLine(`cd ${this.workingDirectory}`);
|
|
88
|
+
}
|
|
63
89
|
readme.addLine('npx projen diff:feature');
|
|
64
90
|
readme.addLine('npx projen deploy:feature');
|
|
65
91
|
readme.addLine('npx projen destroy:feature');
|
|
@@ -72,5 +98,5 @@ class BashCDKPipeline extends base_1.CDKPipeline {
|
|
|
72
98
|
}
|
|
73
99
|
exports.BashCDKPipeline = BashCDKPipeline;
|
|
74
100
|
_a = JSII_RTTI_SYMBOL_1;
|
|
75
|
-
BashCDKPipeline[_a] = { fqn: "projen-pipelines.BashCDKPipeline", version: "0.3.
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUEwQztBQUMxQyxpQ0FBc0U7QUFDdEUsc0NBQTJDO0FBTTNDLE1BQWEsZUFBZ0IsU0FBUSxrQkFBVztJQUU5QyxZQUFZLEdBQStCLEVBQUUsT0FBK0I7UUFDMUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLE1BQU0sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUs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QixDQUFDO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxzSEFBc0gsQ0FBQyxDQUFDO1FBQ3ZJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFckIsQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPLHVCQUFjLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7O0FBdkVILDBDQXlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRGaWxlLCBhd3NjZGsgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQ2RrRGlmZlR5cGUsIENES1BpcGVsaW5lLCBDREtQaXBlbGluZU9wdGlvbnMgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgUGlwZWxpbmVFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2hDREtQaXBlbGluZU9wdGlvbnMgZXh0ZW5kcyBDREtQaXBlbGluZU9wdGlvbnMge1xuICAvL1xufVxuXG5leHBvcnQgY2xhc3MgQmFzaENES1BpcGVsaW5lIGV4dGVuZHMgQ0RLUGlwZWxpbmUge1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIG9wdGlvbnM6IEJhc2hDREtQaXBlbGluZU9wdGlvbnMpIHtcbiAgICBzdXBlcihhcHAsIG9wdGlvbnMpO1xuXG4gICAgY29uc3QgcmVhZG1lID0gbmV3IFRleHRGaWxlKHRoaXMsICdwaXBlbGluZS5tZCcsIHsgbGluZXM6IFtdIH0pO1xuXG4gICAgcmVhZG1lLmFkZExpbmUoJyMgSG93IHRvIHJ1biB5b3VyIHBpcGVsaW5lJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcjIyBCdWlsZCBwaGFzZScpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcblxuICAgIHJlYWRtZS5hZGRMaW5lKCdTeW50aGVzaXplIHlvdXIgQ0RLIHByb2plY3Q6Jyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYGJhc2gnKTtcbiAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVJbnN0YWxsU3RlcCgpLnRvQmFzaCgpLmNvbW1hbmRzLmpvaW4oJ1xcbicpfWApO1xuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZVN5bnRoU3RlcCgpLnRvQmFzaCgpLmNvbW1hbmRzLmpvaW4oJ1xcbicpfWApO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdgYGAnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG5cbiAgICByZWFkbWUuYWRkTGluZSgnUHVibGlzaCBhbGwgeW91ciBDREsgYXNzZXRzIGxpa2UgTGFtYmRhIGZ1bmN0aW9uIGNvZGUgYW5kIGNvbnRhaW5lciBpbWFnZXM6Jyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYGJhc2gnKTtcbiAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVJbnN0YWxsU3RlcCgpLnRvQmFzaCgpLmNvbW1hbmRzLmpvaW4oJ1xcbicpfWApO1xuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZUFzc2V0VXBsb2FkU3RlcCgpLnRvQmFzaCgpLmNvbW1hbmRzLmpvaW4oJ1xcbicpfWApO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdgYGAnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ0lmIHlvdSB3YW50IHRvIHN0b3JlIHlvdXIgY2xvdWQgYXNzZW1ibHkgYW5kIGFzc2V0cyBmb3IgZnV0dXJlIHVzZSBvciBjb21wbGlhbmNlIHJlYXNvbnMsIHVzZTonKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZUluc3RhbGxTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlQXNzZXRVcGxvYWRTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlKSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVBc3NlbWJseVVwbG9hZFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnIyMgRGVwbG95bWVudCBwaGFzZScpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnRm9yIGV2ZXJ5IHN0YWdlIHNvbWUgc2NyaXB0cyBhcmUgZ2VuZXJhdGVkIGZvciBkaWZmIGFuZCBkZXBsb3knKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIG9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgU3RhZ2U6ICR7c3RhZ2UubmFtZX1gKTtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKCdgYGBiYXNoJyk7XG4gICAgICBpZiAoc3RhZ2UuZGlmZlR5cGUgIT09IENka0RpZmZUeXBlLk5PTkUpIHtcbiAgICAgICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlRGlmZlN0ZXAoc3RhZ2UsIHN0YWdlLmRpZmZUeXBlID09IENka0RpZmZUeXBlLkZBU1QpLnRvQmFzaCgpLmNvbW1hbmRzLmpvaW4oJ1xcbicpfWApO1xuICAgICAgICByZWFkbWUuYWRkTGluZSgnJyk7XG4gICAgICB9XG4gICAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVEZXBsb3lTdGVwKHN0YWdlKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKCdgYGAnKTtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICB9XG5cbiAgICByZWFkbWUuYWRkTGluZSgnVGhlIHN0YWdlIGBwZXJzb25hbGAgaXMgbWVhbnQgdG8gYmUgZGVwbG95ZWQgbWFudWFsbHkgYnkgdGhlIGRldmVsb3BlciBhbmQgYWxzbyBoYXMgYSB3YXRjaCBzY3JpcHQgZm9yIGxpdmUgdXBkYXRlcy4nKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCducHggcHJvamVuIGRpZmY6cGVyc29uYWwnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkZXBsb3k6cGVyc29uYWwnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkZXN0cm95OnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gd2F0Y2g6cGVyc29uYWwnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdUaGUgc3RhZ2UgYGZlYXR1cmVgIGlzIG1lYW50IHRvIGJlIGRlcGxveWVkIGZvciBmZWF0dXJlIGJyYW5jaGVzLicpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdgYGBiYXNoJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGlmZjpmZWF0dXJlJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVwbG95OmZlYXR1cmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkZXN0cm95OmZlYXR1cmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuXG4gIH1cblxuICBwdWJsaWMgZW5naW5lVHlwZSgpOiBQaXBlbGluZUVuZ2luZSB7XG4gICAgcmV0dXJuIFBpcGVsaW5lRW5naW5lLkJBU0g7XG4gIH1cblxufVxuIl19
|
|
101
|
+
BashCDKPipeline[_a] = { fqn: "projen-pipelines.BashCDKPipeline", version: "0.3.20" };
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUEwQztBQUMxQyxpQ0FBc0U7QUFDdEUsc0NBQTJDO0FBTTNDLE1BQWEsZUFBZ0IsU0FBUSxrQkFBVztJQUU5QyxZQUFZLEdBQStCLEVBQUUsT0FBK0I7UUFDMUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2RkFBNkYsSUFBSSxDQUFDLGdCQUFnQixlQUFlLENBQUMsQ0FBQztZQUNsSixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuQixNQUFNLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuQixNQUFNLENBQUMsT0FBTyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7UUFDOUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLGdHQUFnRyxDQUFDLENBQUM7UUFDakgsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7UUFDakYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuQixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLGtCQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLGtCQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xILE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLHNIQUFzSCxDQUFDLENBQUM7UUFDdkksTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUVBQW1FLENBQUMsQ0FBQztRQUNwRixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVyQixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sdUJBQWMsQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQzs7QUFuR0gsMENBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUsIGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDZGtEaWZmVHlwZSwgQ0RLUGlwZWxpbmUsIENES1BpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaENES1BpcGVsaW5lT3B0aW9ucyBleHRlbmRzIENES1BpcGVsaW5lT3B0aW9ucyB7XG4gIC8vXG59XG5cbmV4cG9ydCBjbGFzcyBCYXNoQ0RLUGlwZWxpbmUgZXh0ZW5kcyBDREtQaXBlbGluZSB7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCwgb3B0aW9uczogQmFzaENES1BpcGVsaW5lT3B0aW9ucykge1xuICAgIHN1cGVyKGFwcCwgb3B0aW9ucyk7XG5cbiAgICBjb25zdCByZWFkbWUgPSBuZXcgVGV4dEZpbGUodGhpcywgJ3BpcGVsaW5lLm1kJywgeyBsaW5lczogW10gfSk7XG5cbiAgICByZWFkbWUuYWRkTGluZSgnIyBIb3cgdG8gcnVuIHlvdXIgcGlwZWxpbmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG5cbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgPiAqKk5vdGU6KiogVGhpcyBwaXBlbGluZSBpcyBmb3IgYSBtb25vcmVwbyBzdWJwcm9qZWN0LiBDb21tYW5kcyBzaG91bGQgYmUgcnVuIGZyb20gdGhlIFxcYCR7dGhpcy53b3JraW5nRGlyZWN0b3J5fVxcYCBkaXJlY3RvcnkuYCk7XG4gICAgICByZWFkbWUuYWRkTGluZSgnJyk7XG4gICAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoYGNkICR7dGhpcy53b3JraW5nRGlyZWN0b3J5fWApO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIH1cblxuICAgIHJlYWRtZS5hZGRMaW5lKCcjIyBCdWlsZCBwaGFzZScpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcblxuICAgIHJlYWRtZS5hZGRMaW5lKCdTeW50aGVzaXplIHlvdXIgQ0RLIHByb2plY3Q6Jyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYGJhc2gnKTtcbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgY2QgJHt0aGlzLndvcmtpbmdEaXJlY3Rvcnl9YCk7XG4gICAgfVxuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZUluc3RhbGxTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlU3ludGhTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcblxuICAgIHJlYWRtZS5hZGRMaW5lKCdQdWJsaXNoIGFsbCB5b3VyIENESyBhc3NldHMgbGlrZSBMYW1iZGEgZnVuY3Rpb24gY29kZSBhbmQgY29udGFpbmVyIGltYWdlczonKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgIGlmICh0aGlzLndvcmtpbmdEaXJlY3RvcnkpIHtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlSW5zdGFsbFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVBc3NldFVwbG9hZFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdJZiB5b3Ugd2FudCB0byBzdG9yZSB5b3VyIGNsb3VkIGFzc2VtYmx5IGFuZCBhc3NldHMgZm9yIGZ1dHVyZSB1c2Ugb3IgY29tcGxpYW5jZSByZWFzb25zLCB1c2U6Jyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYGJhc2gnKTtcbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgY2QgJHt0aGlzLndvcmtpbmdEaXJlY3Rvcnl9YCk7XG4gICAgfVxuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZUluc3RhbGxTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlQXNzZXRVcGxvYWRTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlKSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVBc3NlbWJseVVwbG9hZFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnIyMgRGVwbG95bWVudCBwaGFzZScpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnRm9yIGV2ZXJ5IHN0YWdlIHNvbWUgc2NyaXB0cyBhcmUgZ2VuZXJhdGVkIGZvciBkaWZmIGFuZCBkZXBsb3knKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIG9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgU3RhZ2U6ICR7c3RhZ2UubmFtZX1gKTtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKCdgYGBiYXNoJyk7XG4gICAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFnZS5kaWZmVHlwZSAhPT0gQ2RrRGlmZlR5cGUuTk9ORSkge1xuICAgICAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVEaWZmU3RlcChzdGFnZSwgc3RhZ2UuZGlmZlR5cGUgPT0gQ2RrRGlmZlR5cGUuRkFTVCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICAgIH1cbiAgICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZURlcGxveVN0ZXAoc3RhZ2UpLnRvQmFzaCgpLmNvbW1hbmRzLmpvaW4oJ1xcbicpfWApO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIH1cblxuICAgIHJlYWRtZS5hZGRMaW5lKCdUaGUgc3RhZ2UgYHBlcnNvbmFsYCBpcyBtZWFudCB0byBiZSBkZXBsb3llZCBtYW51YWxseSBieSB0aGUgZGV2ZWxvcGVyIGFuZCBhbHNvIGhhcyBhIHdhdGNoIHNjcmlwdCBmb3IgbGl2ZSB1cGRhdGVzLicpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdgYGBiYXNoJyk7XG4gICAgaWYgKHRoaXMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgcmVhZG1lLmFkZExpbmUoYGNkICR7dGhpcy53b3JraW5nRGlyZWN0b3J5fWApO1xuICAgIH1cbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkaWZmOnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVwbG95OnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVzdHJveTpwZXJzb25hbCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCducHggcHJvamVuIHdhdGNoOnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnVGhlIHN0YWdlIGBmZWF0dXJlYCBpcyBtZWFudCB0byBiZSBkZXBsb3llZCBmb3IgZmVhdHVyZSBicmFuY2hlcy4nKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgIGlmICh0aGlzLndvcmtpbmdEaXJlY3RvcnkpIHtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGlmZjpmZWF0dXJlJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVwbG95OmZlYXR1cmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkZXN0cm95OmZlYXR1cmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuXG4gIH1cblxuICBwdWJsaWMgZW5naW5lVHlwZSgpOiBQaXBlbGluZUVuZ2luZSB7XG4gICAgcmV0dXJuIFBpcGVsaW5lRW5naW5lLkJBU0g7XG4gIH1cblxufVxuIl19
|
package/lib/awscdk/github.d.ts
CHANGED
|
@@ -44,6 +44,8 @@ export declare class GithubCDKPipeline extends CDKPipeline {
|
|
|
44
44
|
private deploymentWorkflow;
|
|
45
45
|
/** List of deployment stages for the pipeline. */
|
|
46
46
|
private deploymentStages;
|
|
47
|
+
/** The GitHub component used for adding workflows. */
|
|
48
|
+
private readonly gh;
|
|
47
49
|
protected useGithubPackages: boolean;
|
|
48
50
|
protected minNodeVersion: string | undefined;
|
|
49
51
|
/**
|
|
@@ -54,6 +56,16 @@ export declare class GithubCDKPipeline extends CDKPipeline {
|
|
|
54
56
|
constructor(app: awscdk.AwsCdkTypeScriptApp, options: GithubCDKPipelineOptions);
|
|
55
57
|
/** the type of engine this implementation of CDKPipeline is for */
|
|
56
58
|
engineType(): PipelineEngine;
|
|
59
|
+
/**
|
|
60
|
+
* Returns the artifact path prefixed with workingDirectory if set.
|
|
61
|
+
* Artifact upload/download paths resolve against GITHUB_WORKSPACE,
|
|
62
|
+
* not the job working-directory, so they must be prefixed explicitly.
|
|
63
|
+
*/
|
|
64
|
+
private artifactPath;
|
|
65
|
+
/**
|
|
66
|
+
* Returns job defaults for working directory when set.
|
|
67
|
+
*/
|
|
68
|
+
private jobDefaults;
|
|
57
69
|
/**
|
|
58
70
|
* Creates feature branch workflows for deploying and destroying feature environments.
|
|
59
71
|
*/
|