aws-cdk 2.1128.0 → 2.1129.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/THIRD_PARTY_LICENSES +2822 -2593
- package/build-info.json +2 -2
- package/docs/confirmation-prompts.md +79 -0
- package/lib/api-private.d.ts +2 -0
- package/lib/api-private.js +29 -3
- package/lib/cli/cdk-toolkit.d.ts +8 -1
- package/lib/cli/cdk-toolkit.js +164 -125
- package/lib/cli/cli-config.js +40 -4
- package/lib/cli/cli-type-registry.json +16 -1
- package/lib/cli/cli.js +49 -10
- package/lib/cli/convert-to-user-input.js +7 -1
- package/lib/cli/display-version.js +46 -7
- package/lib/cli/io-host/cli-io-host.d.ts +211 -23
- package/lib/cli/io-host/cli-io-host.js +321 -95
- package/lib/cli/parse-command-line-arguments.js +51 -3
- package/lib/cli/platform-warnings.js +36 -3
- package/lib/cli/pretty-print-error.d.ts +4 -1
- package/lib/cli/pretty-print-error.js +15 -7
- package/lib/cli/proxy-agent.js +36 -2
- package/lib/cli/root-dir.js +36 -3
- package/lib/cli/tables.js +35 -2
- package/lib/cli/telemetry/installation-id.js +36 -3
- package/lib/cli/telemetry/library-version.js +36 -3
- package/lib/cli/telemetry/messages.js +35 -2
- package/lib/cli/telemetry/session.js +9 -2
- package/lib/cli/telemetry/sink/endpoint-sink.js +5 -2
- package/lib/cli/telemetry/sink/file-sink.js +37 -2
- package/lib/cli/telemetry/sink/funnel.js +2 -1
- package/lib/cli/telemetry/sink/io-host-sink.js +2 -1
- package/lib/cli/telemetry/telemetry-state.js +36 -3
- package/lib/cli/user-configuration.js +51 -13
- package/lib/cli/user-input.d.ts +19 -1
- package/lib/cli/user-input.js +1 -1
- package/lib/cli/util/fs-util.js +35 -2
- package/lib/cli/version.js +35 -2
- package/lib/commands/context.js +11 -8
- package/lib/commands/docs.js +41 -5
- package/lib/commands/doctor.js +45 -9
- package/lib/commands/flags/flags.js +5 -1
- package/lib/commands/flags/interactive-handler.js +3 -1
- package/lib/commands/flags/operations.js +58 -14
- package/lib/commands/flags/router.js +4 -1
- package/lib/commands/flags/validator.js +2 -1
- package/lib/commands/init/init-hooks.js +35 -2
- package/lib/commands/init/init.js +63 -22
- package/lib/commands/init/os.js +40 -4
- package/lib/commands/migrate.js +44 -6
- package/lib/cxapp/cloud-assembly.js +35 -2
- package/lib/cxapp/cloud-executable.d.ts +7 -0
- package/lib/cxapp/cloud-executable.js +48 -2
- package/lib/cxapp/exec.js +38 -5
- package/lib/index.js +284512 -245081
- package/package.json +9 -9
package/lib/commands/doctor.js
CHANGED
|
@@ -1,9 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
2
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
39
|
exports.doctor = doctor;
|
|
4
|
-
const process = require("process");
|
|
5
|
-
const cxapi = require("@aws-cdk/cx-api");
|
|
6
|
-
const
|
|
40
|
+
const process = __importStar(require("process"));
|
|
41
|
+
const cxapi = __importStar(require("@aws-cdk/cx-api"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
7
43
|
const display_version_1 = require("../cli/display-version");
|
|
8
44
|
const version_1 = require("../cli/version");
|
|
9
45
|
async function doctor({ ioHelper, settings }) {
|
|
@@ -34,11 +70,11 @@ async function displayCliConfiguration(ioHelper, settings) {
|
|
|
34
70
|
debug.push('CLI');
|
|
35
71
|
}
|
|
36
72
|
const debugging = debug.length ? `debugging ${debug.join(' & ')}` : 'no debugging';
|
|
37
|
-
await ioHelper.defaults.info(
|
|
73
|
+
await ioHelper.defaults.info(chalk_1.default.gray.italic(`${verbose}, ${debugging}`));
|
|
38
74
|
return true;
|
|
39
75
|
}
|
|
40
76
|
async function displayVersionInformation(ioHelper) {
|
|
41
|
-
await ioHelper.defaults.info(`ℹ️ CDK CLI Version: ${
|
|
77
|
+
await ioHelper.defaults.info(`ℹ️ CDK CLI Version: ${chalk_1.default.green((0, version_1.versionWithBuild)())}`);
|
|
42
78
|
return true;
|
|
43
79
|
}
|
|
44
80
|
async function displayAwsEnvironmentVariables(ioHelper) {
|
|
@@ -49,7 +85,7 @@ async function displayAwsEnvironmentVariables(ioHelper) {
|
|
|
49
85
|
}
|
|
50
86
|
await ioHelper.defaults.info('ℹ️ AWS environment variables:');
|
|
51
87
|
for (const key of keys) {
|
|
52
|
-
await ioHelper.defaults.info(` - ${
|
|
88
|
+
await ioHelper.defaults.info(` - ${chalk_1.default.blue(key)} = ${chalk_1.default.green(anonymizeAwsVariable(key, process.env[key]))}`);
|
|
53
89
|
}
|
|
54
90
|
return true;
|
|
55
91
|
}
|
|
@@ -63,11 +99,11 @@ async function displayCdkEnvironmentVariables(ioHelper) {
|
|
|
63
99
|
let healthy = true;
|
|
64
100
|
for (const key of keys.sort()) {
|
|
65
101
|
if (key === cxapi.CONTEXT_ENV || key === cxapi.CONTEXT_OVERFLOW_LOCATION_ENV || key === cxapi.OUTDIR_ENV) {
|
|
66
|
-
await ioHelper.defaults.info(` - ${
|
|
102
|
+
await ioHelper.defaults.info(` - ${chalk_1.default.red(key)} = ${chalk_1.default.green(process.env[key])} (⚠️ reserved for use by the CDK toolkit)`);
|
|
67
103
|
healthy = false;
|
|
68
104
|
}
|
|
69
105
|
else {
|
|
70
|
-
await ioHelper.defaults.info(` - ${
|
|
106
|
+
await ioHelper.defaults.info(` - ${chalk_1.default.blue(key)} = ${chalk_1.default.green(process.env[key])}`);
|
|
71
107
|
}
|
|
72
108
|
}
|
|
73
109
|
return healthy;
|
|
@@ -81,4 +117,4 @@ function anonymizeAwsVariable(name, value) {
|
|
|
81
117
|
}
|
|
82
118
|
return value;
|
|
83
119
|
}
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9jdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLHdCQVNDO0FBN0JELGlEQUFtQztBQUNuQyx1REFBeUM7QUFDekMsa0RBQTBCO0FBRzFCLDREQUErRDtBQUMvRCw0Q0FBa0Q7QUFjM0MsS0FBSyxVQUFVLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWlCO0lBQ2hFLElBQUksVUFBVSxHQUFXLENBQUMsQ0FBQztJQUMzQixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUEsdUNBQXFCLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUFtRjtJQUNwRyx5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLDhCQUE4QjtJQUM5Qiw4QkFBOEI7Q0FDL0IsQ0FBQztBQUVGLHdCQUF3QjtBQUV4QixLQUFLLFVBQVUsdUJBQXVCLENBQUMsUUFBa0IsRUFBRSxRQUFtQjtJQUM1RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztJQUUvRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDakIs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LENBQUMsNkJBQTZCLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6RyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sZUFBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxlQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUNuSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLGVBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sZUFBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsSUFBWSxFQUFFLEtBQWE7SUFDdkQsSUFBSSxJQUFJLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztRQUNqQyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztJQUMxQyxDQUFDLENBQUMsK0NBQStDO0lBQ2pELElBQUksSUFBSSxLQUFLLHVCQUF1QixJQUFJLElBQUksS0FBSyxtQkFBbUIsSUFBSSxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztRQUN0RyxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gJy4uL2FwaS9zZXR0aW5ncyc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vYXBpLXByaXZhdGUnO1xuaW1wb3J0IHsgZGlzcGxheVZlcnNpb25NZXNzYWdlIH0gZnJvbSAnLi4vY2xpL2Rpc3BsYXktdmVyc2lvbic7XG5pbXBvcnQgeyB2ZXJzaW9uV2l0aEJ1aWxkIH0gZnJvbSAnLi4vY2xpL3ZlcnNpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIERvY3Rvck9wdGlvbnMge1xuICByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvbHZlZCBDTEkgc2V0dGluZ3MsIHVzZWQgdG8gcmVwb3J0IHRoZSBhY3RpdmUgQ0xJIGNvbmZpZ3VyYXRpb25cbiAgICogKGRlYnVnIHRhcmdldHMsIHZlcmJvc2l0eSwgLi4uKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjb25maWd1cmF0aW9uIGlzIG5vdCByZXBvcnRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M/OiBTZXR0aW5ncztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvY3Rvcih7IGlvSGVscGVyLCBzZXR0aW5ncyB9OiBEb2N0b3JPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgbGV0IGV4aXRTdGF0dXM6IG51bWJlciA9IDA7XG4gIGZvciAoY29uc3QgdmVyaWZpY2F0aW9uIG9mIHZlcmlmaWNhdGlvbnMpIHtcbiAgICBpZiAoIWF3YWl0IHZlcmlmaWNhdGlvbihpb0hlbHBlciwgc2V0dGluZ3MpKSB7XG4gICAgICBleGl0U3RhdHVzID0gLTE7XG4gICAgfVxuICB9XG4gIGF3YWl0IGRpc3BsYXlWZXJzaW9uTWVzc2FnZShpb0hlbHBlcik7XG4gIHJldHVybiBleGl0U3RhdHVzO1xufVxuXG5jb25zdCB2ZXJpZmljYXRpb25zOiBBcnJheTwoaW9IZWxwZXI6IElvSGVscGVyLCBzZXR0aW5ncz86IFNldHRpbmdzKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPj4gPSBbXG4gIGRpc3BsYXlWZXJzaW9uSW5mb3JtYXRpb24sXG4gIGRpc3BsYXlDbGlDb25maWd1cmF0aW9uLFxuICBkaXNwbGF5QXdzRW52aXJvbm1lbnRWYXJpYWJsZXMsXG4gIGRpc3BsYXlDZGtFbnZpcm9ubWVudFZhcmlhYmxlcyxcbl07XG5cbi8vICMjIyBWZXJpZmljYXRpb25zICMjI1xuXG5hc3luYyBmdW5jdGlvbiBkaXNwbGF5Q2xpQ29uZmlndXJhdGlvbihpb0hlbHBlcjogSW9IZWxwZXIsIHNldHRpbmdzPzogU2V0dGluZ3MpIHtcbiAgY29uc3QgdmVyYm9zaXR5ID0gTnVtYmVyKHNldHRpbmdzPy5nZXQoWyd2ZXJib3NlJ10pID8/IDApO1xuICBjb25zdCB2ZXJib3NlID0gdmVyYm9zaXR5ID8gYGV4dHJhIHZlcmJvc2l0eSAoLSR7J3YnLnJlcGVhdCh2ZXJib3NpdHkpfSlgIDogJ25vcm1hbCB2ZXJib3NpdHknO1xuXG4gIGNvbnN0IGRlYnVnID0gW107XG4gIGlmIChCb29sZWFuKHNldHRpbmdzPy5nZXQoWydkZWJ1Z0FwcCddKSkpIHtcbiAgICBkZWJ1Zy5wdXNoKCdDREsgYXBwJyk7XG4gIH1cbiAgaWYgKEJvb2xlYW4oc2V0dGluZ3M/LmdldChbJ2RlYnVnQ2xpJ10pKSkge1xuICAgIGRlYnVnLnB1c2goJ0NMSScpO1xuICB9XG4gIGNvbnN0IGRlYnVnZ2luZyA9IGRlYnVnLmxlbmd0aCA/IGBkZWJ1Z2dpbmcgJHtkZWJ1Zy5qb2luKCcgJiAnKX1gIDogJ25vIGRlYnVnZ2luZyc7XG5cbiAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhjaGFsay5ncmF5Lml0YWxpYyhcbiAgICBgJHt2ZXJib3NlfSwgJHtkZWJ1Z2dpbmd9YCxcbiAgKSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNwbGF5VmVyc2lvbkluZm9ybWF0aW9uKGlvSGVscGVyOiBJb0hlbHBlcikge1xuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKGDihLnvuI8gQ0RLIENMSSBWZXJzaW9uOiAke2NoYWxrLmdyZWVuKHZlcnNpb25XaXRoQnVpbGQoKSl9YCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNwbGF5QXdzRW52aXJvbm1lbnRWYXJpYWJsZXMoaW9IZWxwZXI6IElvSGVscGVyKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKHMgPT4gcy5zdGFydHNXaXRoKCdBV1NfJykpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKCfihLnvuI8gTm8gQVdTIGVudmlyb25tZW50IHZhcmlhYmxlcycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ+KEue+4jyBBV1MgZW52aXJvbm1lbnQgdmFyaWFibGVzOicpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgICAtICR7Y2hhbGsuYmx1ZShrZXkpfSA9ICR7Y2hhbGsuZ3JlZW4oYW5vbnltaXplQXdzVmFyaWFibGUoa2V5LCBwcm9jZXNzLmVudltrZXldISkpfWApO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNwbGF5Q2RrRW52aXJvbm1lbnRWYXJpYWJsZXMoaW9IZWxwZXI6IElvSGVscGVyKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKHMgPT4gcy5zdGFydHNXaXRoKCdDREtfJykpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKCfihLnvuI8gTm8gQ0RLIGVudmlyb25tZW50IHZhcmlhYmxlcycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ+KEue+4jyBDREsgZW52aXJvbm1lbnQgdmFyaWFibGVzOicpO1xuICBsZXQgaGVhbHRoeSA9IHRydWU7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMuc29ydCgpKSB7XG4gICAgaWYgKGtleSA9PT0gY3hhcGkuQ09OVEVYVF9FTlYgfHwga2V5ID09PSBjeGFwaS5DT05URVhUX09WRVJGTE9XX0xPQ0FUSU9OX0VOViB8fCBrZXkgPT09IGN4YXBpLk9VVERJUl9FTlYpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oYCAgLSAke2NoYWxrLnJlZChrZXkpfSA9ICR7Y2hhbGsuZ3JlZW4ocHJvY2Vzcy5lbnZba2V5XSEpfSAo4pqg77iPIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIENESyB0b29sa2l0KWApO1xuICAgICAgaGVhbHRoeSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKGAgIC0gJHtjaGFsay5ibHVlKGtleSl9ID0gJHtjaGFsay5ncmVlbihwcm9jZXNzLmVudltrZXldISl9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBoZWFsdGh5O1xufVxuXG5mdW5jdGlvbiBhbm9ueW1pemVBd3NWYXJpYWJsZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKG5hbWUgPT09ICdBV1NfQUNDRVNTX0tFWV9JRCcpIHtcbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoMCwgNCkgKyAnPHJlZGFjdGVkPic7XG4gIH0gLy8gU2hvdyBBU0lBL0FLSUEga2V5IHR5cGUsIGJ1dCBoaWRlIGlkZW50aWZpZXJcbiAgaWYgKG5hbWUgPT09ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknIHx8IG5hbWUgPT09ICdBV1NfU0VTU0lPTl9UT0tFTicgfHwgbmFtZSA9PT0gJ0FXU19TRUNVUklUWV9UT0tFTicpIHtcbiAgICByZXR1cm4gJzxyZWRhY3RlZD4nO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdfQ==
|
|
@@ -7,6 +7,10 @@ const operations_1 = require("./operations");
|
|
|
7
7
|
const router_1 = require("./router");
|
|
8
8
|
const validator_1 = require("./validator");
|
|
9
9
|
class FlagCommandHandler {
|
|
10
|
+
flags;
|
|
11
|
+
router;
|
|
12
|
+
options;
|
|
13
|
+
ioHelper;
|
|
10
14
|
/** Main component that sets up all flag operation components */
|
|
11
15
|
constructor(flagData, ioHelper, options, toolkit, cliContextValues = {}) {
|
|
12
16
|
this.flags = flagData.filter(flag => !obsolete_flags_1.OBSOLETE_FLAGS.includes(flag.name));
|
|
@@ -27,4 +31,4 @@ class FlagCommandHandler {
|
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
exports.FlagCommandHandler = FlagCommandHandler;
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmbGFncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBMkQ7QUFDM0QscURBQWtEO0FBQ2xELDZDQUE4QztBQUM5QyxxQ0FBK0M7QUFFL0MsMkNBQTRDO0FBRzVDLE1BQWEsa0JBQWtCO0lBQ1osS0FBSyxDQUFnQjtJQUNyQixNQUFNLENBQXNCO0lBQzVCLE9BQU8sQ0FBdUI7SUFDOUIsUUFBUSxDQUFXO0lBRXBDLGdFQUFnRTtJQUNoRSxZQUNFLFFBQXVCLEVBQ3ZCLFFBQWtCLEVBQ2xCLE9BQTZCLEVBQzdCLE9BQWdCLEVBQ2hCLG1CQUF3QyxFQUFFO1FBRTFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsK0JBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLE1BQU0sU0FBUyxHQUFHLElBQUkseUJBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxJQUFJLDJCQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDM0YsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLHdDQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDRCQUFtQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELEtBQUssQ0FBQyxtQkFBbUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxvSUFBb0ksQ0FBQyxDQUFDO1lBQ3pLLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBbENELGdEQWtDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmVhdHVyZUZsYWcsIFRvb2xraXQgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBJbnRlcmFjdGl2ZUhhbmRsZXIgfSBmcm9tICcuL2ludGVyYWN0aXZlLWhhbmRsZXInO1xuaW1wb3J0IHsgT0JTT0xFVEVfRkxBR1MgfSBmcm9tICcuL29ic29sZXRlLWZsYWdzJztcbmltcG9ydCB7IEZsYWdPcGVyYXRpb25zIH0gZnJvbSAnLi9vcGVyYXRpb25zJztcbmltcG9ydCB7IEZsYWdPcGVyYXRpb25Sb3V0ZXIgfSBmcm9tICcuL3JvdXRlcic7XG5pbXBvcnQgdHlwZSB7IEZsYWdPcGVyYXRpb25zUGFyYW1zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBGbGFnVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3InO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uL2FwaS1wcml2YXRlJztcblxuZXhwb3J0IGNsYXNzIEZsYWdDb21tYW5kSGFuZGxlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmxhZ3M6IEZlYXR1cmVGbGFnW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBGbGFnT3BlcmF0aW9uUm91dGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEZsYWdPcGVyYXRpb25zUGFyYW1zO1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcblxuICAvKiogTWFpbiBjb21wb25lbnQgdGhhdCBzZXRzIHVwIGFsbCBmbGFnIG9wZXJhdGlvbiBjb21wb25lbnRzICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZsYWdEYXRhOiBGZWF0dXJlRmxhZ1tdLFxuICAgIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgICBvcHRpb25zOiBGbGFnT3BlcmF0aW9uc1BhcmFtcyxcbiAgICB0b29sa2l0OiBUb29sa2l0LFxuICAgIGNsaUNvbnRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdEYXRhLmZpbHRlcihmbGFnID0+ICFPQlNPTEVURV9GTEFHUy5pbmNsdWRlcyhmbGFnLm5hbWUpKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIGNvbmN1cnJlbmN5OiBvcHRpb25zLmNvbmN1cnJlbmN5ID8/IDQgfTtcbiAgICB0aGlzLmlvSGVscGVyID0gaW9IZWxwZXI7XG5cbiAgICBjb25zdCB2YWxpZGF0b3IgPSBuZXcgRmxhZ1ZhbGlkYXRvcihpb0hlbHBlcik7XG4gICAgY29uc3QgZmxhZ09wZXJhdGlvbnMgPSBuZXcgRmxhZ09wZXJhdGlvbnModGhpcy5mbGFncywgdG9vbGtpdCwgaW9IZWxwZXIsIGNsaUNvbnRleHRWYWx1ZXMpO1xuICAgIGNvbnN0IGludGVyYWN0aXZlSGFuZGxlciA9IG5ldyBJbnRlcmFjdGl2ZUhhbmRsZXIodGhpcy5mbGFncywgZmxhZ09wZXJhdGlvbnMpO1xuXG4gICAgdGhpcy5yb3V0ZXIgPSBuZXcgRmxhZ09wZXJhdGlvblJvdXRlcih2YWxpZGF0b3IsIGludGVyYWN0aXZlSGFuZGxlciwgZmxhZ09wZXJhdGlvbnMpO1xuICB9XG5cbiAgLyoqIE1haW4gZW50cnkgcG9pbnQgdGhhdCBwcm9jZXNzZXMgdGhlIGZsYWdzIGNvbW1hbmQgKi9cbiAgYXN5bmMgcHJvY2Vzc0ZsYWdzQ29tbWFuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5mbGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZXJyb3IoJ1RoZSBcXCdjZGsgZmxhZ3NcXCcgY29tbWFuZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBBV1MgQ0RLIGxpYnJhcnkgdXNlZCBieSB5b3VyIGFwcGxpY2F0aW9uLiBQbGVhc2UgdXBncmFkZSB0byAyLjIxMi4wIG9yIGFib3ZlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucm91dGVyLnJvdXRlKHRoaXMub3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -5,6 +5,8 @@ exports.InteractiveHandler = void 0;
|
|
|
5
5
|
const enquirer_1 = require("enquirer");
|
|
6
6
|
const types_1 = require("./types");
|
|
7
7
|
class InteractiveHandler {
|
|
8
|
+
flags;
|
|
9
|
+
flagOperations;
|
|
8
10
|
constructor(flags, flagOperations) {
|
|
9
11
|
this.flags = flags;
|
|
10
12
|
this.flagOperations = flagOperations;
|
|
@@ -68,4 +70,4 @@ class InteractiveHandler {
|
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
72
|
exports.InteractiveHandler = InteractiveHandler;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVyYWN0aXZlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsYUFBYTtBQUNiLHVDQUFrQztBQUVsQyxtQ0FBc0U7QUFFdEUsTUFBYSxrQkFBa0I7SUFFVjtJQUNBO0lBRm5CLFlBQ21CLEtBQW9CLEVBQ3BCLGNBQThCO1FBRDlCLFVBQUssR0FBTCxLQUFLLENBQWU7UUFDcEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBRWpELENBQUM7SUFFRCwrRUFBK0U7SUFDdkUsS0FBSyxDQUFDLDJCQUEyQjtRQUN2QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3BELElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFN0UsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7SUFFRCxxREFBcUQ7SUFDN0MsNkJBQTZCLENBQUMsSUFBaUI7UUFDckQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLEtBQUssQ0FBQyxxQkFBcUI7UUFDekIsTUFBTSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUV6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUM7WUFDeEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxPQUFPLEVBQUUsTUFBTTtZQUNmLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLHdCQUFnQixDQUFDO1NBQ3pDLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWxDLFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDZixLQUFLLHdCQUFnQixDQUFDLGtCQUFrQjtnQkFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckQsS0FBSyx3QkFBZ0IsQ0FBQywyQkFBMkI7Z0JBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzlELEtBQUssd0JBQWdCLENBQUMsdUJBQXVCO2dCQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMxRCxLQUFLLHdCQUFnQixDQUFDLG9CQUFvQjtnQkFDeEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUM1QyxLQUFLLHdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCwyRUFBMkU7SUFDbkUsS0FBSyxDQUFDLDJCQUEyQjtRQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFeEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQkFBTSxDQUFDO1lBQzVCLElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxLQUFLLEVBQUUsR0FBRztZQUNWLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QyxDQUFDLENBQUM7UUFFSCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWhELE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQU0sQ0FBQztZQUM3QixJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztTQUMzQixDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV0QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7WUFDNUIsS0FBSztZQUNMLEdBQUcsRUFBRSxJQUFJO1NBQ1YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdFRCxnREE2RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnZW5xdWlyZXInO1xuaW1wb3J0IHR5cGUgeyBGbGFnT3BlcmF0aW9ucyB9IGZyb20gJy4vb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBGbGFnc01lbnVPcHRpb25zLCB0eXBlIEZsYWdPcGVyYXRpb25zUGFyYW1zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGl2ZUhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZsYWdzOiBGZWF0dXJlRmxhZ1tdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmxhZ09wZXJhdGlvbnM6IEZsYWdPcGVyYXRpb25zLFxuICApIHtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5cyBmbGFncyB0aGF0IGhhdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB1c2VyIGFuZCByZWNvbW1lbmRlZCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNwbGF5RmxhZ3NXaXRoRGlmZmVyZW5jZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmxhZ3NXaXRoRGlmZmVyZW5jZXMgPSB0aGlzLmZsYWdzLmZpbHRlcihmbGFnID0+XG4gICAgICBmbGFnLnVzZXJWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmlzVXNlclZhbHVlRXF1YWxUb1JlY29tbWVuZGVkKGZsYWcpKTtcblxuICAgIGlmIChmbGFnc1dpdGhEaWZmZXJlbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmZsYWdPcGVyYXRpb25zLmRpc3BsYXlGbGFnVGFibGUoZmxhZ3NXaXRoRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdXNlciB2YWx1ZSBtYXRjaGVzIHJlY29tbWVuZGVkIHZhbHVlICovXG4gIHByaXZhdGUgaXNVc2VyVmFsdWVFcXVhbFRvUmVjb21tZW5kZWQoZmxhZzogRmVhdHVyZUZsYWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU3RyaW5nKGZsYWcudXNlclZhbHVlKSA9PT0gU3RyaW5nKGZsYWcucmVjb21tZW5kZWRWYWx1ZSk7XG4gIH1cblxuICAvKiogTWFpbiBpbnRlcmFjdGl2ZSBtb2RlIGhhbmRsZXIgdGhhdCBzaG93cyBtZW51IGFuZCBwcm9jZXNzZXMgdXNlciBzZWxlY3Rpb24gKi9cbiAgYXN5bmMgaGFuZGxlSW50ZXJhY3RpdmVNb2RlKCk6IFByb21pc2U8RmxhZ09wZXJhdGlvbnNQYXJhbXMgfCBudWxsPiB7XG4gICAgYXdhaXQgdGhpcy5kaXNwbGF5RmxhZ3NXaXRoRGlmZmVyZW5jZXMoKTtcblxuICAgIGNvbnN0IHByb21wdCA9IG5ldyBTZWxlY3Qoe1xuICAgICAgbmFtZTogJ29wdGlvbicsXG4gICAgICBtZXNzYWdlOiAnTWVudScsXG4gICAgICBjaG9pY2VzOiBPYmplY3QudmFsdWVzKEZsYWdzTWVudU9wdGlvbnMpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYW5zd2VyID0gYXdhaXQgcHJvbXB0LnJ1bigpO1xuXG4gICAgc3dpdGNoIChhbnN3ZXIpIHtcbiAgICAgIGNhc2UgRmxhZ3NNZW51T3B0aW9ucy5BTExfVE9fUkVDT01NRU5ERUQ6XG4gICAgICAgIHJldHVybiB7IHJlY29tbWVuZGVkOiB0cnVlLCBhbGw6IHRydWUsIHNldDogdHJ1ZSB9O1xuICAgICAgY2FzZSBGbGFnc01lbnVPcHRpb25zLlVOQ09ORklHVVJFRF9UT19SRUNPTU1FTkRFRDpcbiAgICAgICAgcmV0dXJuIHsgcmVjb21tZW5kZWQ6IHRydWUsIHVuY29uZmlndXJlZDogdHJ1ZSwgc2V0OiB0cnVlIH07XG4gICAgICBjYXNlIEZsYWdzTWVudU9wdGlvbnMuVU5DT05GSUdVUkVEX1RPX0RFRkFVTFQ6XG4gICAgICAgIHJldHVybiB7IGRlZmF1bHQ6IHRydWUsIHVuY29uZmlndXJlZDogdHJ1ZSwgc2V0OiB0cnVlIH07XG4gICAgICBjYXNlIEZsYWdzTWVudU9wdGlvbnMuTU9ESUZZX1NQRUNJRklDX0ZMQUc6XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNwZWNpZmljRmxhZ1NlbGVjdGlvbigpO1xuICAgICAgY2FzZSBGbGFnc01lbnVPcHRpb25zLkVYSVQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZXMgdGhlIHNwZWNpZmljIGZsYWcgc2VsZWN0aW9uIGZsb3cgd2l0aCBmbGFnIGFuZCB2YWx1ZSBwcm9tcHRzICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3BlY2lmaWNGbGFnU2VsZWN0aW9uKCk6IFByb21pc2U8RmxhZ09wZXJhdGlvbnNQYXJhbXM+IHtcbiAgICBjb25zdCBib29sZWFuRmxhZ3MgPSB0aGlzLmZsYWdzLmZpbHRlcihmbGFnID0+IHRoaXMuZmxhZ09wZXJhdGlvbnMuaXNCb29sZWFuRmxhZyhmbGFnKSk7XG5cbiAgICBjb25zdCBmbGFnUHJvbXB0ID0gbmV3IFNlbGVjdCh7XG4gICAgICBuYW1lOiAnZmxhZycsXG4gICAgICBtZXNzYWdlOiAnU2VsZWN0IHdoaWNoIGZsYWcgeW91IHdvdWxkIGxpa2UgdG8gbW9kaWZ5OicsXG4gICAgICBsaW1pdDogMTAwLFxuICAgICAgY2hvaWNlczogYm9vbGVhbkZsYWdzLm1hcChmbGFnID0+IGZsYWcubmFtZSksXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZEZsYWdOYW1lID0gYXdhaXQgZmxhZ1Byb21wdC5ydW4oKTtcblxuICAgIGNvbnN0IHZhbHVlUHJvbXB0ID0gbmV3IFNlbGVjdCh7XG4gICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgbWVzc2FnZTogJ1NlbGVjdCBhIHZhbHVlOicsXG4gICAgICBjaG9pY2VzOiBbJ3RydWUnLCAnZmFsc2UnXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdmFsdWVQcm9tcHQucnVuKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgRkxBR05BTUU6IFtzZWxlY3RlZEZsYWdOYW1lXSxcbiAgICAgIHZhbHVlLFxuICAgICAgc2V0OiB0cnVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,17 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
2
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
39
|
exports.FlagOperations = void 0;
|
|
4
40
|
exports.isEffectiveValueEqualToRecommended = isEffectiveValueEqualToRecommended;
|
|
5
|
-
const os = require("os");
|
|
6
|
-
const path = require("path");
|
|
41
|
+
const os = __importStar(require("os"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
7
43
|
const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
|
|
8
44
|
const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
|
|
9
|
-
const
|
|
10
|
-
const fs = require("fs-extra");
|
|
11
|
-
const p_queue_1 = require("p-queue");
|
|
45
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
46
|
+
const fs = __importStar(require("fs-extra"));
|
|
47
|
+
const p_queue_1 = __importDefault(require("p-queue"));
|
|
12
48
|
const obsolete_flags_1 = require("./obsolete-flags");
|
|
13
49
|
const api_1 = require("../../api");
|
|
14
50
|
class FlagOperations {
|
|
51
|
+
flags;
|
|
52
|
+
toolkit;
|
|
53
|
+
ioHelper;
|
|
54
|
+
cliContextValues;
|
|
15
55
|
/**
|
|
16
56
|
* Returns only those feature flags that need configuration
|
|
17
57
|
*
|
|
@@ -36,6 +76,11 @@ class FlagOperations {
|
|
|
36
76
|
.filter(flag => flag.userValue === undefined)
|
|
37
77
|
.filter(flag => defaultValue(flag) !== flag.recommendedValue);
|
|
38
78
|
}
|
|
79
|
+
app;
|
|
80
|
+
baseContextValues;
|
|
81
|
+
allStacks;
|
|
82
|
+
queue;
|
|
83
|
+
baselineTempDir;
|
|
39
84
|
constructor(flags, toolkit, ioHelper, cliContextValues = {}) {
|
|
40
85
|
this.flags = flags;
|
|
41
86
|
this.toolkit = toolkit;
|
|
@@ -316,13 +361,12 @@ class FlagOperations {
|
|
|
316
361
|
},
|
|
317
362
|
defaultResponse: false,
|
|
318
363
|
});
|
|
319
|
-
if (userAccepted) {
|
|
320
|
-
await this.
|
|
321
|
-
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
await this.ioHelper.defaults.info('Operation cancelled');
|
|
364
|
+
if (!userAccepted) {
|
|
365
|
+
await this.cleanupTempDirectories();
|
|
366
|
+
throw new toolkit_lib_1.AbortError('FlagsAborted', 'Flag update cancelled');
|
|
325
367
|
}
|
|
368
|
+
await this.modifyValues(flagNames, params);
|
|
369
|
+
await this.ioHelper.defaults.info('Flag value(s) updated successfully.');
|
|
326
370
|
await this.cleanupTempDirectories();
|
|
327
371
|
}
|
|
328
372
|
/** Removes temporary directories created during flag operations */
|
|
@@ -415,7 +459,7 @@ class FlagOperations {
|
|
|
415
459
|
let currentModule = '';
|
|
416
460
|
sortedFlags.forEach((flag) => {
|
|
417
461
|
if (flag.module !== currentModule) {
|
|
418
|
-
rows.push([
|
|
462
|
+
rows.push([chalk_1.default.bold(`Module: ${flag.module}`), '', '', '']);
|
|
419
463
|
currentModule = flag.module;
|
|
420
464
|
}
|
|
421
465
|
rows.push([
|
|
@@ -437,7 +481,7 @@ class FlagOperations {
|
|
|
437
481
|
}
|
|
438
482
|
/** Shows helpful usage examples and available command options */
|
|
439
483
|
async displayHelpMessage() {
|
|
440
|
-
await this.ioHelper.defaults.info('\n' +
|
|
484
|
+
await this.ioHelper.defaults.info('\n' + chalk_1.default.bold('Available options:'));
|
|
441
485
|
await this.ioHelper.defaults.info(' cdk flags --interactive # Interactive menu to manage flags');
|
|
442
486
|
await this.ioHelper.defaults.info(' cdk flags --all # Show all flags (including configured ones)');
|
|
443
487
|
await this.ioHelper.defaults.info(' cdk flags --set --all --recommended # Set all flags to recommended values');
|
|
@@ -464,4 +508,4 @@ function effectiveValue(flag) {
|
|
|
464
508
|
function defaultValue(flag) {
|
|
465
509
|
return flag.unconfiguredBehavesLike?.v2 ?? false;
|
|
466
510
|
}
|
|
467
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9wZXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcWdCQSxnRkFFQztBQXZnQkQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUU3QixzRUFBMkQ7QUFFM0Qsc0RBQXFGO0FBQ3JGLCtCQUErQjtBQUMvQiwrQkFBK0I7QUFDL0IscUNBQTZCO0FBQzdCLHFEQUFrRDtBQUVsRCxtQ0FBbUQ7QUFHbkQsTUFBYSxjQUFjO0lBQ3pCOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFvQjtRQUNyRCxPQUFPLEtBQUs7YUFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLCtCQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQzthQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQVFELFlBQ21CLEtBQW9CLEVBQ3BCLE9BQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLG1CQUF3QyxFQUFFO1FBSDFDLFVBQUssR0FBTCxLQUFLLENBQWU7UUFDcEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBMEI7UUFFM0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxpQkFBTSxDQUFD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Q0Y7QUFwZkQsd0NBb2ZDO0FBRUQsZ0ZBQWdGO0FBQ2hGLFNBQWdCLGtDQUFrQyxDQUFDLElBQWlCO0lBQ2xFLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxJQUFpQjtJQUN2QyxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLElBQWlCO0lBQ3JDLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgeyBmb3JtYXRUYWJsZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlRmxhZywgVG9vbGtpdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCB7IENka0FwcE11bHRpQ29udGV4dCwgTWVtb3J5Q29udGV4dCwgRGlmZk1ldGhvZCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBQUXVldWUgZnJvbSAncC1xdWV1ZSc7XG5pbXBvcnQgeyBPQlNPTEVURV9GTEFHUyB9IGZyb20gJy4vb2Jzb2xldGUtZmxhZ3MnO1xuaW1wb3J0IHR5cGUgeyBGbGFnT3BlcmF0aW9uc1BhcmFtcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vLi4vYXBpLXByaXZhdGUnO1xuXG5leHBvcnQgY2xhc3MgRmxhZ09wZXJhdGlvbnMge1xuICAvKipcbiAgICogUmV0dXJucyBvbmx5IHRob3NlIGZlYXR1cmUgZmxhZ3MgdGhhdCBuZWVkIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogVGhhdCBpcyB0aG9zZSBmbGFnczpcbiAgICogLSBUaGF0IGFyZSB1bmNvbmZpZ3VyZWRcbiAgICogLSBUaGF0IGFyZSBub3Qgb2Jzb2xldGVcbiAgICogLSBXaG9zZSBkZWZhdWx0IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZWNvbW1lbmRlZCB2YWx1ZVxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBiZWluZyBlcXVhbCB0byB0aGUgcmVjb21tZW5kZWQgdmFsdWUgc291bmRzIG9kZCwgYnV0XG4gICAqIGNyb3BzIHVwIGluIGEgbnVtYmVyIG9mIHNpdHV0YXRpb25zOlxuICAgKlxuICAgKiAtIFNlY3VyaXR5LXJlbGF0ZWQgZml4ZXMgdGhhdCB3ZSB3YW50IHRvIGZvcmNlIG9uIHBlb3BsZSwgYnV0IHdhbnQgdG9cbiAgICogICBnaXZlIHRoZW0gYSBmbGFnIHRvIGJhY2sgb3V0IG9mIHRoZSBjaGFuZ2VzIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8uXG4gICAqIC0gRmxhZ3MgdGhhdCBjaGFuZ2VkIHRoZWlyIGRlZmF1bHQgdmFsdWUgaW4gdGhlIG1vc3QgcmVjZW50IG1ham9yXG4gICAqICAgdmVyc2lvbi5cbiAgICogLSBGbGFncyB0aGF0IHdlJ3ZlIGludHJvZHVjZWQgYXQgc29tZSBwb2ludCBpbiB0aGUgcGFzdCwgYnV0IGhhdmUgZ29uZVxuICAgKiAgIGJhY2sgb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZpbHRlck5lZWRzQXR0ZW50aW9uKGZsYWdzOiBGZWF0dXJlRmxhZ1tdKTogRmVhdHVyZUZsYWdbXSB7XG4gICAgcmV0dXJuIGZsYWdzXG4gICAgICAuZmlsdGVyKGZsYWcgPT4gIU9CU09MRVRFX0ZMQUdTLmluY2x1ZGVzKGZsYWcubmFtZSkpXG4gICAgICAuZmlsdGVyKGZsYWcgPT4gZmxhZy51c2VyVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgIC5maWx0ZXIoZmxhZyA9PiBkZWZhdWx0VmFsdWUoZmxhZykgIT09IGZsYWcucmVjb21tZW5kZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcDogc3RyaW5nO1xuICBwcml2YXRlIGJhc2VDb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwcml2YXRlIGFsbFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0W107XG4gIHByaXZhdGUgcXVldWU6IFBRdWV1ZTtcbiAgcHJpdmF0ZSBiYXNlbGluZVRlbXBEaXI/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmbGFnczogRmVhdHVyZUZsYWdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xraXQ6IFRvb2xraXQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGlDb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICkge1xuICAgIHRoaXMuYXBwID0gJyc7XG4gICAgdGhpcy5iYXNlQ29udGV4dFZhbHVlcyA9IHt9O1xuICAgIHRoaXMuYWxsU3RhY2tzID0gW107XG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBQUXVldWUoeyBjb25jdXJyZW5jeTogNCB9KTtcbiAgfVxuXG4gIC8qKiBNYWluIGVudHJ5IHBvaW50IHRoYXQgcm91dGVzIHRvIGVpdGhlciBmbGFnIHNldHRpbmcgb3IgZGlzcGxheSBvcGVyYXRpb25zICovXG4gIGFzeW5jIGV4ZWN1dGUocGFyYW1zOiBGbGFnT3BlcmF0aW9uc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYXJhbXMuc2V0KSB7XG4gICAgICBpZiAocGFyYW1zLkZMQUdOQU1FICYmIHBhcmFtcy52YWx1ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNldEZsYWcocGFyYW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0TXVsdGlwbGVGbGFncyhwYXJhbXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmRpc3BsYXlGbGFncyhwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXRzIGEgc2luZ2xlIHNwZWNpZmljIGZsYWcgd2l0aCB2YWxpZGF0aW9uIGFuZCB1c2VyIGNvbmZpcm1hdGlvbiAqL1xuICBhc3luYyBzZXRGbGFnKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmbGFnTmFtZSA9IHBhcmFtcy5GTEFHTkFNRSFbMF07XG4gICAgY29uc3QgZmxhZyA9IHRoaXMuZmxhZ3MuZmluZChmID0+IGYubmFtZSA9PT0gZmxhZ05hbWUpO1xuXG4gICAgaWYgKCFmbGFnKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKCdGbGFnIG5vdCBmb3VuZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNCb29sZWFuRmxhZyhmbGFnKSkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5lcnJvcihgRmxhZyAnJHtmbGFnTmFtZX0nIGlzIG5vdCBhIGJvb2xlYW4gZmxhZy4gT25seSBib29sZWFuIGZsYWdzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3RvdHlwZVN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnByb3RvdHlwZUNoYW5nZXMoW2ZsYWdOYW1lXSwgcGFyYW1zKTtcbiAgICBpZiAocHJvdG90eXBlU3VjY2Vzcykge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVVc2VyUmVzcG9uc2UoW2ZsYWdOYW1lXSwgcGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyBtdWx0aXBsZSBmbGFncyAoYWxsIG9yIHVuY29uZmlndXJlZCkgd2l0aCB2YWxpZGF0aW9uIGFuZCB1c2VyIGNvbmZpcm1hdGlvbiAqL1xuICBhc3luYyBzZXRNdWx0aXBsZUZsYWdzKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFyYW1zLmRlZmF1bHQgJiYgIXRoaXMuZmxhZ3Muc29tZShmID0+IGYudW5jb25maWd1cmVkQmVoYXZlc0xpa2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKCdUaGUgLS1kZWZhdWx0IG9wdGlvbnMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIEFXUyBDREsgbGlicmFyeSB1c2VkIGJ5IHlvdXIgYXBwbGljYXRpb24uIFBsZWFzZSB1cGdyYWRlIHRvIDIuMjEyLjAgb3IgYWJvdmUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmxhZ3NUb1NldCA9IHRoaXMuZ2V0RmxhZ3NUb1NldChwYXJhbXMpO1xuICAgIGNvbnN0IHByb3RvdHlwZVN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnByb3RvdHlwZUNoYW5nZXMoZmxhZ3NUb1NldCwgcGFyYW1zKTtcblxuICAgIGlmIChwcm90b3R5cGVTdWNjZXNzKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVVzZXJSZXNwb25zZShmbGFnc1RvU2V0LCBwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmVzIHdoaWNoIGZsYWdzIHNob3VsZCBiZSBzZXQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMgKi9cbiAgcHJpdmF0ZSBnZXRGbGFnc1RvU2V0KHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHBhcmFtcy5hbGwgJiYgcGFyYW1zLmRlZmF1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmZsYWdzXG4gICAgICAgIC5maWx0ZXIoZmxhZyA9PiB0aGlzLmlzQm9vbGVhbkZsYWcoZmxhZykpXG4gICAgICAgIC5tYXAoZmxhZyA9PiBmbGFnLm5hbWUpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmFsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmxhZ3NcbiAgICAgICAgLmZpbHRlcihmbGFnID0+IGZsYWcudXNlclZhbHVlID09PSB1bmRlZmluZWQgfHwgIWlzRWZmZWN0aXZlVmFsdWVFcXVhbFRvUmVjb21tZW5kZWQoZmxhZykpXG4gICAgICAgIC5maWx0ZXIoZmxhZyA9PiB0aGlzLmlzQm9vbGVhbkZsYWcoZmxhZykpXG4gICAgICAgIC5tYXAoZmxhZyA9PiBmbGFnLm5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5mbGFnc1xuICAgICAgICAuZmlsdGVyKGZsYWcgPT4gZmxhZy51c2VyVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgLmZpbHRlcihmbGFnID0+IHRoaXMuaXNCb29sZWFuRmxhZyhmbGFnKSlcbiAgICAgICAgLm1hcChmbGFnID0+IGZsYWcubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldHMgZmxhZ3MgdGhhdCBkb24ndCBjYXVzZSB0ZW1wbGF0ZSBjaGFuZ2VzICovXG4gIGFzeW5jIHNldFNhZmVGbGFncyhwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2RrSnNvbiA9IGF3YWl0IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdjZGsuanNvbicpLCAndXRmLTgnKSk7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwIHx8IGNka0pzb24uYXBwO1xuXG4gICAgY29uc3QgaXNVc2luZ1RzTm9kZSA9IHRoaXMuYXBwLmluY2x1ZGVzKCd0cy1ub2RlJyk7XG4gICAgaWYgKGlzVXNpbmdUc05vZGUgJiYgIXRoaXMuYXBwLmluY2x1ZGVzKCctVCcpICYmICF0aGlzLmFwcC5pbmNsdWRlcygnLS10cmFuc3BpbGVPbmx5JykpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnUmVwZWF0ZWQgc3ludGhzIHdpdGggdHMtbm9kZSB3aWxsIHR5cGUtY2hlY2sgdGhlIGFwcGxpY2F0aW9uIG9uIGV2ZXJ5IHN5bnRoLiBBZGQgLS10cmFuc3BpbGVPbmx5IHRvIGNkay5qc29uXFwncyBcImFwcFwiIGNvbW1hbmQgdG8gbWFrZSB0aGlzIG9wZXJhdGlvbiBmYXN0ZXIuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdW5jb25maWd1cmVkRmxhZ3MgPSB0aGlzLmZsYWdzLmZpbHRlcihmbGFnID0+XG4gICAgICBmbGFnLnVzZXJWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuaXNCb29sZWFuRmxhZyhmbGFnKSk7XG5cbiAgICBpZiAodW5jb25maWd1cmVkRmxhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ0FsbCBmZWF0dXJlIGZsYWdzIGFyZSBjb25maWd1cmVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVNhZmV0eUNoZWNrKCk7XG4gICAgY29uc3Qgc2FmZUZsYWdzID0gYXdhaXQgdGhpcy5iYXRjaFRlc3RGbGFncyh1bmNvbmZpZ3VyZWRGbGFncyk7XG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwU2FmZXR5Q2hlY2soKTtcblxuICAgIGlmIChzYWZlRmxhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdGbGFncyB0aGF0IGNhbiBiZSBzZXQgd2l0aG91dCB0ZW1wbGF0ZSBjaGFuZ2VzOicpO1xuICAgICAgZm9yIChjb25zdCBmbGFnIG9mIHNhZmVGbGFncykge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYC0gJHtmbGFnLm5hbWV9IC0+ICR7ZmxhZy5yZWNvbW1lbmRlZFZhbHVlfWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVVc2VyUmVzcG9uc2Uoc2FmZUZsYWdzLm1hcChmbGFnID0+IGZsYWcubmFtZSksIHsgLi4ucGFyYW1zLCByZWNvbW1lbmRlZDogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdObyBtb3JlIGZsYWdzIGNhbiBiZSBzZXQgd2l0aG91dCBjYXVzaW5nIHRlbXBsYXRlIGNoYW5nZXMuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluaXRpYWxpemVzIHRoZSBzYWZldHkgY2hlY2sgYnkgcmVhZGluZyBjb250ZXh0IGFuZCBzeW50aGVzaXppbmcgYmFzZWxpbmUgdGVtcGxhdGVzICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVNhZmV0eUNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhc2VDb250ZXh0ID0gbmV3IENka0FwcE11bHRpQ29udGV4dChwcm9jZXNzLmN3ZCgpKTtcbiAgICB0aGlzLmJhc2VDb250ZXh0VmFsdWVzID0geyAuLi5hd2FpdCBiYXNlQ29udGV4dC5yZWFkKCksIC4uLnRoaXMuY2xpQ29udGV4dFZhbHVlcyB9O1xuXG4gICAgdGhpcy5iYXNlbGluZVRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjZGstYmFzZWxpbmUtJykpO1xuICAgIGNvbnN0IG1lcmdlZENvbnRleHQgPSBuZXcgTWVtb3J5Q29udGV4dCh0aGlzLmJhc2VDb250ZXh0VmFsdWVzKTtcbiAgICBjb25zdCBiYXNlU291cmNlID0gYXdhaXQgdGhpcy50b29sa2l0LmZyb21DZGtBcHAodGhpcy5hcHAsIHtcbiAgICAgIGNvbnRleHRTdG9yZTogbWVyZ2VkQ29udGV4dCxcbiAgICAgIG91dGRpcjogdGhpcy5iYXNlbGluZVRlbXBEaXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiYXNlQ3ggPSBhd2FpdCB0aGlzLnRvb2xraXQuc3ludGgoYmFzZVNvdXJjZSk7XG4gICAgY29uc3QgYmFzZUFzc2VtYmx5ID0gYmFzZUN4LmNsb3VkQXNzZW1ibHk7XG4gICAgdGhpcy5hbGxTdGFja3MgPSBiYXNlQXNzZW1ibHkuc3RhY2tzUmVjdXJzaXZlbHk7XG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBQUXVldWUoeyBjb25jdXJyZW5jeTogNCB9KTtcbiAgfVxuXG4gIC8qKiBDbGVhbnMgdXAgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGNyZWF0ZWQgZHVyaW5nIHNhZmV0eSBjaGVja3MgKi9cbiAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwU2FmZXR5Q2hlY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuYmFzZWxpbmVUZW1wRGlyKSB7XG4gICAgICBhd2FpdCBmcy5yZW1vdmUodGhpcy5iYXNlbGluZVRlbXBEaXIpO1xuICAgICAgdGhpcy5iYXNlbGluZVRlbXBEaXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRlc3RzIG11bHRpcGxlIGZsYWdzIHRvZ2V0aGVyIGFuZCBpc29sYXRlcyB1bnNhZmUgb25lcyB1c2luZyBiaW5hcnkgc2VhcmNoICovXG4gIHByaXZhdGUgYXN5bmMgYmF0Y2hUZXN0RmxhZ3MoZmxhZ3M6IEZlYXR1cmVGbGFnW10pOiBQcm9taXNlPEZlYXR1cmVGbGFnW10+IHtcbiAgICBpZiAoZmxhZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBhbGxGbGFnc0NvbnRleHQgPSB7IC4uLnRoaXMuYmFzZUNvbnRleHRWYWx1ZXMgfTtcbiAgICBmbGFncy5mb3JFYWNoKGZsYWcgPT4ge1xuICAgICAgYWxsRmxhZ3NDb250ZXh0W2ZsYWcubmFtZV0gPSBmbGFnLnJlY29tbWVuZGVkVmFsdWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGxTYWZlID0gYXdhaXQgdGhpcy50ZXN0QmF0Y2goYWxsRmxhZ3NDb250ZXh0KTtcbiAgICBpZiAoYWxsU2FmZSkgcmV0dXJuIGZsYWdzO1xuXG4gICAgcmV0dXJuIHRoaXMuaXNvbGF0ZVVuc2FmZUZsYWdzKGZsYWdzKTtcbiAgfVxuXG4gIC8qKiBUZXN0cyBpZiBhIHNldCBvZiBjb250ZXh0IHZhbHVlcyBjYXVzZXMgdGVtcGxhdGUgY2hhbmdlcyBieSBzeW50aGVzaXppbmcgYW5kIGRpZmZpbmcgKi9cbiAgcHJpdmF0ZSBhc3luYyB0ZXN0QmF0Y2goY29udGV4dFZhbHVlczogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRlc3RDb250ZXh0ID0gbmV3IE1lbW9yeUNvbnRleHQoY29udGV4dFZhbHVlcyk7XG4gICAgY29uc3QgdGVtcERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay10ZXN0LScpKTtcbiAgICBjb25zdCB0ZXN0U291cmNlID0gYXdhaXQgdGhpcy50b29sa2l0LmZyb21DZGtBcHAodGhpcy5hcHAsIHtcbiAgICAgIGNvbnRleHRTdG9yZTogdGVzdENvbnRleHQsXG4gICAgICBvdXRkaXI6IHRlbXBEaXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZXN0Q3ggPSBhd2FpdCB0aGlzLnRvb2xraXQuc3ludGgodGVzdFNvdXJjZSk7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLmFsbFN0YWNrcykge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBzdGFjay50ZW1wbGF0ZUZ1bGxQYXRoO1xuICAgICAgICBjb25zdCBkaWZmID0gYXdhaXQgdGhpcy50b29sa2l0LmRpZmYodGVzdEN4LCB7XG4gICAgICAgICAgbWV0aG9kOiBEaWZmTWV0aG9kLkxvY2FsRmlsZSh0ZW1wbGF0ZVBhdGgpLFxuICAgICAgICAgIHN0YWNrczoge1xuICAgICAgICAgICAgc3RyYXRlZ3k6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENIX1NJTkdMRSxcbiAgICAgICAgICAgIHBhdHRlcm5zOiBbc3RhY2suaGllcmFyY2hpY2FsSWRdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2tEaWZmIG9mIE9iamVjdC52YWx1ZXMoZGlmZikpIHtcbiAgICAgICAgICBpZiAoc3RhY2tEaWZmLmRpZmZlcmVuY2VDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yZW1vdmUodGVtcERpcik7XG4gICAgfVxuICB9XG5cbiAgLyoqIFVzZXMgYmluYXJ5IHNlYXJjaCB0byBpc29sYXRlIHdoaWNoIGZsYWdzIGFyZSBzYWZlIHRvIHNldCB3aXRob3V0IHRlbXBsYXRlIGNoYW5nZXMgKi9cbiAgcHJpdmF0ZSBhc3luYyBpc29sYXRlVW5zYWZlRmxhZ3MoZmxhZ3M6IEZlYXR1cmVGbGFnW10pOiBQcm9taXNlPEZlYXR1cmVGbGFnW10+IHtcbiAgICBjb25zdCBzYWZlRmxhZ3M6IEZlYXR1cmVGbGFnW10gPSBbXTtcblxuICAgIGNvbnN0IHByb2Nlc3NCYXRjaCA9IGFzeW5jIChiYXRjaDogRmVhdHVyZUZsYWdbXSwgY29udGV4dFZhbHVlczogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKGJhdGNoLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBpc1NhZmUgPSBhd2FpdCB0aGlzLnRlc3RCYXRjaChcbiAgICAgICAgICB7IC4uLmNvbnRleHRWYWx1ZXMsIFtiYXRjaFswXS5uYW1lXTogYmF0Y2hbMF0ucmVjb21tZW5kZWRWYWx1ZSB9LFxuICAgICAgICApO1xuICAgICAgICBpZiAoaXNTYWZlKSBzYWZlRmxhZ3MucHVzaChiYXRjaFswXSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmF0Y2hDb250ZXh0ID0geyAuLi5jb250ZXh0VmFsdWVzIH07XG4gICAgICBiYXRjaC5mb3JFYWNoKGZsYWcgPT4ge1xuICAgICAgICBiYXRjaENvbnRleHRbZmxhZy5uYW1lXSA9IGZsYWcucmVjb21tZW5kZWRWYWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpc1NhZmVCYXRjaCA9IGF3YWl0IHRoaXMudGVzdEJhdGNoKGJhdGNoQ29udGV4dCk7XG4gICAgICBpZiAoaXNTYWZlQmF0Y2gpIHtcbiAgICAgICAgc2FmZUZsYWdzLnB1c2goLi4uYmF0Y2gpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pZCA9IE1hdGguZmxvb3IoYmF0Y2gubGVuZ3RoIC8gMik7XG4gICAgICBjb25zdCBsZWZ0ID0gYmF0Y2guc2xpY2UoMCwgbWlkKTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gYmF0Y2guc2xpY2UobWlkKTtcblxuICAgICAgdm9pZCB0aGlzLnF1ZXVlLmFkZCgoKSA9PiBwcm9jZXNzQmF0Y2gobGVmdCwgY29udGV4dFZhbHVlcykpO1xuICAgICAgdm9pZCB0aGlzLnF1ZXVlLmFkZCgoKSA9PiBwcm9jZXNzQmF0Y2gocmlnaHQsIGNvbnRleHRWYWx1ZXMpKTtcbiAgICB9O1xuXG4gICAgdm9pZCB0aGlzLnF1ZXVlLmFkZCgoKSA9PiBwcm9jZXNzQmF0Y2goZmxhZ3MsIHRoaXMuYmFzZUNvbnRleHRWYWx1ZXMpKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLm9uSWRsZSgpO1xuICAgIHJldHVybiBzYWZlRmxhZ3M7XG4gIH1cblxuICAvKiogUHJvdG90eXBlcyBmbGFnIGNoYW5nZXMgYnkgc3ludGhlc2l6aW5nIHRlbXBsYXRlcyBhbmQgc2hvd2luZyBkaWZmcyB0byB0aGUgdXNlciAqL1xuICBwcml2YXRlIGFzeW5jIHByb3RvdHlwZUNoYW5nZXMoZmxhZ05hbWVzOiBzdHJpbmdbXSwgcGFyYW1zOiBGbGFnT3BlcmF0aW9uc1BhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGJhc2VDb250ZXh0ID0gbmV3IENka0FwcE11bHRpQ29udGV4dChwcm9jZXNzLmN3ZCgpKTtcbiAgICBjb25zdCBiYXNlQ29udGV4dFZhbHVlcyA9IHsgLi4uYXdhaXQgYmFzZUNvbnRleHQucmVhZCgpLCAuLi50aGlzLmNsaUNvbnRleHRWYWx1ZXMgfTtcbiAgICBjb25zdCBtZW1vcnlDb250ZXh0ID0gbmV3IE1lbW9yeUNvbnRleHQoYmFzZUNvbnRleHRWYWx1ZXMpO1xuXG4gICAgY29uc3QgY2RrSnNvbiA9IGF3YWl0IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdjZGsuanNvbicpLCAndXRmLTgnKSk7XG4gICAgY29uc3QgYXBwID0gY2RrSnNvbi5hcHA7XG5cbiAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCB0aGlzLnRvb2xraXQuZnJvbUNka0FwcChhcHAsIHtcbiAgICAgIGNvbnRleHRTdG9yZTogbWVtb3J5Q29udGV4dCxcbiAgICAgIG91dGRpcjogZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrLW9yaWdpbmFsLScpKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHVwZGF0ZU9iaiA9IGF3YWl0IHRoaXMuYnVpbGRVcGRhdGVPYmplY3QoZmxhZ05hbWVzLCBwYXJhbXMsIGJhc2VDb250ZXh0VmFsdWVzKTtcbiAgICBpZiAoIXVwZGF0ZU9iaikgcmV0dXJuIGZhbHNlO1xuXG4gICAgYXdhaXQgbWVtb3J5Q29udGV4dC51cGRhdGUodXBkYXRlT2JqKTtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMudG9vbGtpdC5zeW50aChzb3VyY2UpO1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gY3guY2xvdWRBc3NlbWJseTtcblxuICAgIGNvbnN0IG1vZGlmaWVkU291cmNlID0gYXdhaXQgdGhpcy50b29sa2l0LmZyb21DZGtBcHAoYXBwLCB7XG4gICAgICBjb250ZXh0U3RvcmU6IG1lbW9yeUNvbnRleHQsXG4gICAgICBvdXRkaXI6IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay10ZW1wLScpKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1vZGlmaWVkQ3ggPSBhd2FpdCB0aGlzLnRvb2xraXQuc3ludGgobW9kaWZpZWRTb3VyY2UpO1xuICAgIGNvbnN0IGFsbFN0YWNrcyA9IGFzc2VtYmx5LnN0YWNrc1JlY3Vyc2l2ZWx5O1xuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBhbGxTdGFja3MpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHN0YWNrLnRlbXBsYXRlRnVsbFBhdGg7XG4gICAgICBhd2FpdCB0aGlzLnRvb2xraXQuZGlmZihtb2RpZmllZEN4LCB7XG4gICAgICAgIG1ldGhvZDogRGlmZk1ldGhvZC5Mb2NhbEZpbGUodGVtcGxhdGVQYXRoKSxcbiAgICAgICAgc3RhY2tzOiB7XG4gICAgICAgICAgc3RyYXRlZ3k6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENIX1NJTkdMRSxcbiAgICAgICAgICBwYXR0ZXJuczogW3N0YWNrLmhpZXJhcmNoaWNhbElkXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuZGlzcGxheUZsYWdDaGFuZ2VzKHVwZGF0ZU9iaiwgYmFzZUNvbnRleHRWYWx1ZXMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIERpc3BsYXlzIGEgc3VtbWFyeSBvZiBmbGFnIGNoYW5nZXMgc2hvd2luZyBvbGQgYW5kIG5ldyB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNwbGF5RmxhZ0NoYW5nZXModXBkYXRlT2JqOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiwgYmFzZUNvbnRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ1xcbkZsYWcgY2hhbmdlczonKTtcbiAgICBmb3IgKGNvbnN0IFtmbGFnTmFtZSwgbmV3VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVwZGF0ZU9iaikpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGJhc2VDb250ZXh0VmFsdWVzW2ZsYWdOYW1lXTtcbiAgICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5ID0gY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQgPyAnPHVuc2V0PicgOiBTdHJpbmcoY3VycmVudFZhbHVlKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgICAke2ZsYWdOYW1lfTogJHtjdXJyZW50RGlzcGxheX0g4oaSICR7bmV3VmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEJ1aWxkcyB0aGUgdXBkYXRlIG9iamVjdCB3aXRoIG5ldyBmbGFnIHZhbHVlcyBiYXNlZCBvbiBwYXJhbWV0ZXJzIGFuZCBjdXJyZW50IGNvbnRleHQgKi9cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFVwZGF0ZU9iamVjdChmbGFnTmFtZXM6IHN0cmluZ1tdLCBwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zLCBiYXNlQ29udGV4dFZhbHVlczogUmVjb3JkPHN0cmluZywgYW55PilcbiAgICA6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfCBudWxsPiB7XG4gICAgY29uc3QgdXBkYXRlT2JqOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gICAgaWYgKGZsYWdOYW1lcy5sZW5ndGggPT09IDEgJiYgcGFyYW1zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZsYWdOYW1lID0gZmxhZ05hbWVzWzBdO1xuICAgICAgY29uc3QgYm9vbFZhbHVlID0gcGFyYW1zLnZhbHVlID09PSAndHJ1ZSc7XG4gICAgICBpZiAoYmFzZUNvbnRleHRWYWx1ZXNbZmxhZ05hbWVdID09PSBib29sVmFsdWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdGbGFnIGlzIGFscmVhZHkgc2V0IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuIE5vIGNoYW5nZXMgbmVlZGVkLicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZU9ialtmbGFnTmFtZV0gPSBib29sVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZmxhZ05hbWUgb2YgZmxhZ05hbWVzKSB7XG4gICAgICAgIGNvbnN0IGZsYWcgPSB0aGlzLmZsYWdzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZsYWdOYW1lKTtcbiAgICAgICAgaWYgKCFmbGFnKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5lcnJvcihgRmxhZyAke2ZsYWdOYW1lfSBub3QgZm91bmQuYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBwYXJhbXMucmVjb21tZW5kZWRcbiAgICAgICAgICA/IGZsYWcucmVjb21tZW5kZWRWYWx1ZSBhcyBib29sZWFuXG4gICAgICAgICAgOiBTdHJpbmcoZGVmYXVsdFZhbHVlKGZsYWcpKSA9PT0gJ3RydWUnO1xuICAgICAgICB1cGRhdGVPYmpbZmxhZ05hbWVdID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cGRhdGVPYmo7XG4gIH1cblxuICAvKiogUHJvbXB0cyB1c2VyIGZvciBjb25maXJtYXRpb24gYW5kIGFwcGxpZXMgY2hhbmdlcyBpZiBhY2NlcHRlZCAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZVVzZXJSZXNwb25zZShmbGFnTmFtZXM6IHN0cmluZ1tdLCBwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdXNlckFjY2VwdGVkID0gYXdhaXQgdGhpcy5pb0hlbHBlci5yZXF1ZXN0UmVzcG9uc2Uoe1xuICAgICAgdGltZTogbmV3IERhdGUoKSxcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBjb2RlOiAnQ0RLX1RPT0xLSVRfSTkzMDAnLFxuICAgICAgbWVzc2FnZTogJ0RvIHlvdSB3YW50IHRvIGFjY2VwdCB0aGVzZSBjaGFuZ2VzPycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZsYWdOYW1lcyxcbiAgICAgICAgcmVzcG9uc2VEZXNjcmlwdGlvbjogJ0VudGVyIFwieVwiIHRvIGFwcGx5IGNoYW5nZXMgb3IgXCJuXCIgdG8gY2FuY2VsJyxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0UmVzcG9uc2U6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgaWYgKHVzZXJBY2NlcHRlZCkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWYWx1ZXMoZmxhZ05hbWVzLCBwYXJhbXMpO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdGbGFnIHZhbHVlKHMpIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ09wZXJhdGlvbiBjYW5jZWxsZWQnKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmNsZWFudXBUZW1wRGlyZWN0b3JpZXMoKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmVzIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBjcmVhdGVkIGR1cmluZyBmbGFnIG9wZXJhdGlvbnMgKi9cbiAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwVGVtcERpcmVjdG9yaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdvcmlnaW5hbCcpO1xuICAgIGNvbnN0IHRlbXBEaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ3RlbXAnKTtcbiAgICBhd2FpdCBmcy5yZW1vdmUob3JpZ2luYWxEaXIpO1xuICAgIGF3YWl0IGZzLnJlbW92ZSh0ZW1wRGlyKTtcbiAgfVxuXG4gIC8qKiBBY3R1YWxseSBtb2RpZmllcyB0aGUgY2RrLmpzb24gZmlsZSB3aXRoIHRoZSBuZXcgZmxhZyB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSBhc3luYyBtb2RpZnlWYWx1ZXMoZmxhZ05hbWVzOiBzdHJpbmdbXSwgcGFyYW1zOiBGbGFnT3BlcmF0aW9uc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNka0pzb25QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdjZGsuanNvbicpO1xuICAgIGNvbnN0IGNka0pzb25Db250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoY2RrSnNvblBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGNka0pzb24gPSBKU09OLnBhcnNlKGNka0pzb25Db250ZW50KTtcblxuICAgIGlmIChmbGFnTmFtZXMubGVuZ3RoID09PSAxICYmICFwYXJhbXMuc2FmZSAmJiAhcGFyYW1zLmFsbCkge1xuICAgICAgY29uc3QgYm9vbFZhbHVlID0gcGFyYW1zLnZhbHVlID09PSAndHJ1ZSc7XG4gICAgICBjZGtKc29uLmNvbnRleHRbU3RyaW5nKGZsYWdOYW1lc1swXSldID0gYm9vbFZhbHVlO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGBTZXR0aW5nIGZsYWcgJyR7ZmxhZ05hbWVzfScgdG86ICR7Ym9vbFZhbHVlfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGZsYWdOYW1lIG9mIGZsYWdOYW1lcykge1xuICAgICAgICBjb25zdCBmbGFnID0gdGhpcy5mbGFncy5maW5kKGYgPT4gZi5uYW1lID09PSBmbGFnTmFtZSkhO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHBhcmFtcy5yZWNvbW1lbmRlZCB8fCBwYXJhbXMuc2FmZVxuICAgICAgICAgID8gZmxhZy5yZWNvbW1lbmRlZFZhbHVlIGFzIGJvb2xlYW5cbiAgICAgICAgICA6IFN0cmluZyhkZWZhdWx0VmFsdWUoZmxhZykpID09PSAndHJ1ZSc7XG4gICAgICAgIGNka0pzb24uY29udGV4dFtmbGFnTmFtZV0gPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGNka0pzb25QYXRoLCBKU09OLnN0cmluZ2lmeShjZGtKc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICAvKiogRGlzcGxheXMgZmxhZ3MgaW4gYSB0YWJsZSBmb3JtYXQsIGVpdGhlciBzcGVjaWZpYyBmbGFncyBvciBmaWx0ZXJlZCBieSBjcml0ZXJpYSAqL1xuICBhc3luYyBkaXNwbGF5RmxhZ3MocGFyYW1zOiBGbGFnT3BlcmF0aW9uc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgRkxBR05BTUUsIGFsbCB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKEZMQUdOQU1FICYmIEZMQUdOQU1FLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuZGlzcGxheVNwZWNpZmljRmxhZ3MoRkxBR05BTUUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtmbGFnc1RvRGlzcGxheSwgaGVhZGVyXSA9IGFsbFxuICAgICAgPyBbdGhpcy5mbGFncywgJ0FsbCBmZWF0dXJlIGZsYWdzJ11cbiAgICAgIDogW0ZsYWdPcGVyYXRpb25zLmZpbHRlck5lZWRzQXR0ZW50aW9uKHRoaXMuZmxhZ3MpLCAnVW5jb25maWd1cmVkIGZlYXR1cmUgZmxhZ3MnXTtcblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhoZWFkZXIpO1xuICAgIGF3YWl0IHRoaXMuZGlzcGxheUZsYWdUYWJsZShmbGFnc1RvRGlzcGxheSk7XG5cbiAgICAvLyBBZGQgaGVscGZ1bCBtZXNzYWdlIGFmdGVyIGVtcHR5IHRhYmxlIHdoZW4gbm90IHVzaW5nIC0tYWxsXG4gICAgaWYgKCFhbGwgJiYgZmxhZ3NUb0Rpc3BsYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJycpO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCfinIUgQWxsIGZlYXR1cmUgZmxhZ3MgYXJlIGFscmVhZHkgc2V0IHRvIHRoZWlyIHJlY29tbWVuZGVkIHZhbHVlcy4nKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnVXNlIFxcJ2NkayBmbGFncyAtLWFsbCAtLXVuc3RhYmxlPWZsYWdzXFwnIHRvIHNlZSBhbGwgZmxhZ3MgYW5kIHRoZWlyIGN1cnJlbnQgdmFsdWVzLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEaXNwbGF5cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3Igc3BlY2lmaWMgZmxhZ3MgbWF0Y2hpbmcgdGhlIGdpdmVuIG5hbWVzICovXG4gIHByaXZhdGUgYXN5bmMgZGlzcGxheVNwZWNpZmljRmxhZ3MoZmxhZ05hbWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1hdGNoaW5nRmxhZ3MgPSB0aGlzLmZsYWdzLmZpbHRlcihmID0+XG4gICAgICBmbGFnTmFtZXMuc29tZShzZWFyY2hUZXJtID0+IGYubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSkpKTtcblxuICAgIGlmIChtYXRjaGluZ0ZsYWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5lcnJvcihgRmxhZyBtYXRjaGluZyBcIiR7ZmxhZ05hbWVzLmpvaW4oJywgJyl9XCIgbm90IGZvdW5kLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtYXRjaGluZ0ZsYWdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmxhZyA9IG1hdGNoaW5nRmxhZ3NbMF07XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYEZsYWcgbmFtZTogJHtmbGFnLm5hbWV9YCk7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYERlc2NyaXB0aW9uOiAke2ZsYWcuZXhwbGFuYXRpb259YCk7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYFJlY29tbWVuZGVkIHZhbHVlOiAke2ZsYWcucmVjb21tZW5kZWRWYWx1ZX1gKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgRGVmYXVsdCB2YWx1ZTogJHtkZWZhdWx0VmFsdWUoZmxhZyl9YCk7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYFVzZXIgdmFsdWU6ICR7ZmxhZy51c2VyVmFsdWV9YCk7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYEVmZmVjdGl2ZSB2YWx1ZTogJHtlZmZlY3RpdmVWYWx1ZShmbGFnKX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYEZvdW5kICR7bWF0Y2hpbmdGbGFncy5sZW5ndGh9IGZsYWdzIG1hdGNoaW5nIFwiJHtmbGFnTmFtZXMuam9pbignLCAnKX1cImApO1xuICAgIGF3YWl0IHRoaXMuZGlzcGxheUZsYWdUYWJsZShtYXRjaGluZ0ZsYWdzKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHNvcnQgb3JkZXIgZm9yIGZsYWdzICovXG4gIHByaXZhdGUgZ2V0RmxhZ1NvcnRPcmRlcihmbGFnOiBGZWF0dXJlRmxhZyk6IG51bWJlciB7XG4gICAgaWYgKGZsYWcudXNlclZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAzO1xuICAgIGlmIChpc0VmZmVjdGl2ZVZhbHVlRXF1YWxUb1JlY29tbWVuZGVkKGZsYWcpKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5cyBmbGFncyBpbiBhIGZvcm1hdHRlZCB0YWJsZSBncm91cGVkIGJ5IG1vZHVsZSBhbmQgc29ydGVkICovXG4gIGFzeW5jIGRpc3BsYXlGbGFnVGFibGUoZmxhZ3M6IEZlYXR1cmVGbGFnW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3J0ZWRGbGFncyA9IFsuLi5mbGFnc10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3Qgb3JkZXJBID0gdGhpcy5nZXRGbGFnU29ydE9yZGVyKGEpO1xuICAgICAgY29uc3Qgb3JkZXJCID0gdGhpcy5nZXRGbGFnU29ydE9yZGVyKGIpO1xuXG4gICAgICBpZiAob3JkZXJBICE9PSBvcmRlckIpIHJldHVybiBvcmRlckEgLSBvcmRlckI7XG4gICAgICBpZiAoYS5tb2R1bGUgIT09IGIubW9kdWxlKSByZXR1cm4gYS5tb2R1bGUubG9jYWxlQ29tcGFyZShiLm1vZHVsZSk7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvd3M6IHN0cmluZ1tdW10gPSBbWydGZWF0dXJlIEZsYWcnLCAnUmVjb21tZW5kZWQnLCAnVXNlcicsICdFZmZlY3RpdmUnXV07XG4gICAgbGV0IGN1cnJlbnRNb2R1bGUgPSAnJztcblxuICAgIHNvcnRlZEZsYWdzLmZvckVhY2goKGZsYWcpID0+IHtcbiAgICAgIGlmIChmbGFnLm1vZHVsZSAhPT0gY3VycmVudE1vZHVsZSkge1xuICAgICAgICByb3dzLnB1c2goW2NoYWxrLmJvbGQoYE1vZHVsZTogJHtmbGFnLm1vZHVsZX1gKSwgJycsICcnLCAnJ10pO1xuICAgICAgICBjdXJyZW50TW9kdWxlID0gZmxhZy5tb2R1bGU7XG4gICAgICB9XG4gICAgICByb3dzLnB1c2goW1xuICAgICAgICBgICAke2ZsYWcubmFtZX1gLFxuICAgICAgICBTdHJpbmcoZmxhZy5yZWNvbW1lbmRlZFZhbHVlKSxcbiAgICAgICAgZmxhZy51c2VyVmFsdWUgPT09IHVuZGVmaW5lZCA/ICc8dW5zZXQ+JyA6IFN0cmluZyhmbGFnLnVzZXJWYWx1ZSksXG4gICAgICAgIFN0cmluZyhlZmZlY3RpdmVWYWx1ZShmbGFnKSksXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcm1hdHRlZFRhYmxlID0gZm9ybWF0VGFibGUocm93cywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0dGVkVGFibGUpO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiBhIGZsYWcgaGFzIGEgYm9vbGVhbiByZWNvbW1lbmRlZCB2YWx1ZSAqL1xuICBpc0Jvb2xlYW5GbGFnKGZsYWc6IEZlYXR1cmVGbGFnKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVjb21tZW5kZWQgPSBmbGFnLnJlY29tbWVuZGVkVmFsdWU7XG4gICAgcmV0dXJuIHR5cGVvZiByZWNvbW1lbmRlZCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICByZWNvbW1lbmRlZCA9PT0gJ3RydWUnIHx8XG4gICAgICByZWNvbW1lbmRlZCA9PT0gJ2ZhbHNlJztcbiAgfVxuXG4gIC8qKiBTaG93cyBoZWxwZnVsIHVzYWdlIGV4YW1wbGVzIGFuZCBhdmFpbGFibGUgY29tbWFuZCBvcHRpb25zICovXG4gIGFzeW5jIGRpc3BsYXlIZWxwTWVzc2FnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ1xcbicgKyBjaGFsay5ib2xkKCdBdmFpbGFibGUgb3B0aW9uczonKSk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCcgIGNkayBmbGFncyAtLWludGVyYWN0aXZlICAgICAjIEludGVyYWN0aXZlIG1lbnUgdG8gbWFuYWdlIGZsYWdzJyk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCcgIGNkayBmbGFncyAtLWFsbCAgICAgICAgICAgICAjIFNob3cgYWxsIGZsYWdzIChpbmNsdWRpbmcgY29uZmlndXJlZCBvbmVzKScpO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnICBjZGsgZmxhZ3MgLS1zZXQgLS1hbGwgLS1yZWNvbW1lbmRlZCAgICAjIFNldCBhbGwgZmxhZ3MgdG8gcmVjb21tZW5kZWQgdmFsdWVzJyk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCcgIGNkayBmbGFncyAtLXNldCAtLWFsbCAtLWRlZmF1bHQgICAgICAgIyBTZXQgYWxsIGZsYWdzIHRvIGRlZmF1bHQgdmFsdWVzJyk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCcgIGNkayBmbGFncyAtLXNldCAtLXVuY29uZmlndXJlZCAtLXJlY29tbWVuZGVkICAjIFNldCB1bmNvbmZpZ3VyZWQgZmxhZ3MgdG8gcmVjb21tZW5kZWQnKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJyAgY2RrIGZsYWdzIC0tc2V0IDxmbGFnLW5hbWU+IC0tdmFsdWUgPHRydWV8ZmFsc2U+ICAjIFNldCBzcGVjaWZpYyBmbGFnJyk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCcgIGNkayBmbGFncyAtLXNhZmUgICAgICAgICAgICAjIFNhZmVseSBzZXQgZmxhZ3MgdGhhdCBkb25cXCd0IGNoYW5nZSB0ZW1wbGF0ZXMnKTtcbiAgfVxufVxuXG4vKiogQ2hlY2tzIGlmIHRoZSBmbGFncyBjdXJyZW50IGVmZmVjdGl2ZSB2YWx1ZSBtYXRjaGVzIHRoZSByZWNvbW1lbmRlZCB2YWx1ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWZmZWN0aXZlVmFsdWVFcXVhbFRvUmVjb21tZW5kZWQoZmxhZzogRmVhdHVyZUZsYWcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFN0cmluZyhlZmZlY3RpdmVWYWx1ZShmbGFnKSkgPT09IFN0cmluZyhmbGFnLnJlY29tbWVuZGVkVmFsdWUpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZWZmZWN0aXZlIHZhbHVlIG9mIGEgZmxhZyAodXNlciB2YWx1ZSBvciBkZWZhdWx0KVxuICovXG5mdW5jdGlvbiBlZmZlY3RpdmVWYWx1ZShmbGFnOiBGZWF0dXJlRmxhZykge1xuICByZXR1cm4gZmxhZy51c2VyVmFsdWUgPz8gZGVmYXVsdFZhbHVlKGZsYWcpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBmbGFnLCBhc3N1bWUgaXQncyBgZmFsc2VgIGlmIG5vdCBnaXZlblxuICovXG5mdW5jdGlvbiBkZWZhdWx0VmFsdWUoZmxhZzogRmVhdHVyZUZsYWcpIHtcbiAgcmV0dXJuIGZsYWcudW5jb25maWd1cmVkQmVoYXZlc0xpa2U/LnYyID8/IGZhbHNlO1xufVxuIl19
|
|
511
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9wZXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcWdCQSxnRkFFQztBQXZnQkQsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUU3QixzRUFBMkQ7QUFFM0Qsc0RBQWlHO0FBQ2pHLGtEQUEwQjtBQUMxQiw2Q0FBK0I7QUFDL0Isc0RBQTZCO0FBQzdCLHFEQUFrRDtBQUVsRCxtQ0FBbUQ7QUFHbkQsTUFBYSxjQUFjO0lBaUNOO0lBQ0E7SUFDQTtJQUNBO0lBbkNuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsS0FBb0I7UUFDckQsT0FBTyxLQUFLO2FBQ1QsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQywrQkFBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7YUFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxHQUFHLENBQVM7SUFDWixpQkFBaUIsQ0FBc0I7SUFDdkMsU0FBUyxDQUFnQztJQUN6QyxLQUFLLENBQVM7SUFDZCxlQUFlLENBQVU7SUFFakMsWUFDbUIsS0FBb0IsRUFDcEIsT0FBZ0IsRUFDaEIsUUFBa0IsRUFDbEIsbUJBQXdDLEVBQUU7UUFIMUMsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUNwQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQUUzRCxJQUFJ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UUFDN0gsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMseUVBQXlFLENBQUMsQ0FBQztRQUM3RyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO0lBQ3JILENBQUM7Q0FDRjtBQXBmRCx3Q0FvZkM7QUFFRCxnRkFBZ0Y7QUFDaEYsU0FBZ0Isa0NBQWtDLENBQUMsSUFBaUI7SUFDbEUsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsY0FBYyxDQUFDLElBQWlCO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBaUI7SUFDckMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB7IGZvcm1hdFRhYmxlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnLCBUb29sa2l0IH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgQ2RrQXBwTXVsdGlDb250ZXh0LCBNZW1vcnlDb250ZXh0LCBEaWZmTWV0aG9kLCBBYm9ydEVycm9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBQUXVldWUgZnJvbSAncC1xdWV1ZSc7XG5pbXBvcnQgeyBPQlNPTEVURV9GTEFHUyB9IGZyb20gJy4vb2Jzb2xldGUtZmxhZ3MnO1xuaW1wb3J0IHR5cGUgeyBGbGFnT3BlcmF0aW9uc1BhcmFtcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vLi4vYXBpLXByaXZhdGUnO1xuXG5leHBvcnQgY2xhc3MgRmxhZ09wZXJhdGlvbnMge1xuICAvKipcbiAgICogUmV0dXJucyBvbmx5IHRob3NlIGZlYXR1cmUgZmxhZ3MgdGhhdCBuZWVkIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogVGhhdCBpcyB0aG9zZSBmbGFnczpcbiAgICogLSBUaGF0IGFyZSB1bmNvbmZpZ3VyZWRcbiAgICogLSBUaGF0IGFyZSBub3Qgb2Jzb2xldGVcbiAgICogLSBXaG9zZSBkZWZhdWx0IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZWNvbW1lbmRlZCB2YWx1ZVxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBiZWluZyBlcXVhbCB0byB0aGUgcmVjb21tZW5kZWQgdmFsdWUgc291bmRzIG9kZCwgYnV0XG4gICAqIGNyb3BzIHVwIGluIGEgbnVtYmVyIG9mIHNpdHV0YXRpb25zOlxuICAgKlxuICAgKiAtIFNlY3VyaXR5LXJlbGF0ZWQgZml4ZXMgdGhhdCB3ZSB3YW50IHRvIGZvcmNlIG9uIHBlb3BsZSwgYnV0IHdhbnQgdG9cbiAgICogICBnaXZlIHRoZW0gYSBmbGFnIHRvIGJhY2sgb3V0IG9mIHRoZSBjaGFuZ2VzIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8uXG4gICAqIC0gRmxhZ3MgdGhhdCBjaGFuZ2VkIHRoZWlyIGRlZmF1bHQgdmFsdWUgaW4gdGhlIG1vc3QgcmVjZW50IG1ham9yXG4gICAqICAgdmVyc2lvbi5cbiAgICogLSBGbGFncyB0aGF0IHdlJ3ZlIGludHJvZHVjZWQgYXQgc29tZSBwb2ludCBpbiB0aGUgcGFzdCwgYnV0IGhhdmUgZ29uZVxuICAgKiAgIGJhY2sgb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZpbHRlck5lZWRzQXR0ZW50aW9uKGZsYWdzOiBGZWF0dXJlRmxhZ1tdKTogRmVhdHVyZUZsYWdbXSB7XG4gICAgcmV0dXJuIGZsYWdzXG4gICAgICAuZmlsdGVyKGZsYWcgPT4gIU9CU09MRVRFX0ZMQUdTLmluY2x1ZGVzKGZsYWcubmFtZSkpXG4gICAgICAuZmlsdGVyKGZsYWcgPT4gZmxhZy51c2VyVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgIC5maWx0ZXIoZmxhZyA9PiBkZWZhdWx0VmFsdWUoZmxhZykgIT09IGZsYWcucmVjb21tZW5kZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcDogc3RyaW5nO1xuICBwcml2YXRlIGJhc2VDb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwcml2YXRlIGFsbFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0W107XG4gIHByaXZhdGUgcXVldWU6IFBRdWV1ZTtcbiAgcHJpdmF0ZSBiYXNlbGluZVRlbXBEaXI/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmbGFnczogRmVhdHVyZUZsYWdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xraXQ6IFRvb2xraXQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGlDb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICkge1xuICAgIHRoaXMuYXBwID0gJyc7XG4gICAgdGhpcy5iYXNlQ29udGV4dFZhbHVlcyA9IHt9O1xuICAgIHRoaXMuYWxsU3RhY2tzID0gW107XG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBQUXVldWUoeyBjb25jdXJyZW5jeTogNCB9KTtcbiAgfVxuXG4gIC8qKiBNYWluIGVudHJ5IHBvaW50IHRoYXQgcm91dGVzIHRvIGVpdGhlciBmbGFnIHNldHRpbmcgb3IgZGlzcGxheSBvcGVyYXRpb25zICovXG4gIGFzeW5jIGV4ZWN1dGUocGFyYW1zOiBGbGFnT3BlcmF0aW9uc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYXJhbXMuc2V0KSB7XG4gICAgICBpZiAocGFyYW1zLkZMQUdOQU1FICYmIHBhcmFtcy52YWx1ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNldEZsYWcocGFyYW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0TXVsdGlwbGVGbGFncyhwYXJhbXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmRpc3BsYXlGbGFncyhwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXRzIGEgc2luZ2xlIHNwZWNpZmljIGZsYWcgd2l0aCB2YWxpZGF0aW9uIGFuZCB1c2VyIGNvbmZpcm1hdGlvbiAqL1xuICBhc3luYyBzZXRGbGFnKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmbGFnTmFtZSA9IHBhcmFtcy5GTEFHTkFNRSFbMF07XG4gICAgY29uc3QgZmxhZyA9IHRoaXMuZmxhZ3MuZmluZChmID0+IGYubmFtZSA9PT0gZmxhZ05hbWUpO1xuXG4gICAgaWYgKCFmbGFnKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKCdGbGFnIG5vdCBmb3VuZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNCb29sZWFuRmxhZyhmbGFnKSkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5lcnJvcihgRmxhZyAnJHtmbGFnTmFtZX0nIGlzIG5vdCBhIGJvb2xlYW4gZmxhZy4gT25seSBib29sZWFuIGZsYWdzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3RvdHlwZVN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnByb3RvdHlwZUNoYW5nZXMoW2ZsYWdOYW1lXSwgcGFyYW1zKTtcbiAgICBpZiAocHJvdG90eXBlU3VjY2Vzcykge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVVc2VyUmVzcG9uc2UoW2ZsYWdOYW1lXSwgcGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyBtdWx0aXBsZSBmbGFncyAoYWxsIG9yIHVuY29uZmlndXJlZCkgd2l0aCB2YWxpZGF0aW9uIGFuZCB1c2VyIGNvbmZpcm1hdGlvbiAqL1xuICBhc3luYyBzZXRNdWx0aXBsZUZsYWdzKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFyYW1zLmRlZmF1bHQgJiYgIXRoaXMuZmxhZ3Muc29tZShmID0+IGYudW5jb25maWd1cmVkQmVoYXZlc0xpa2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKCdUaGUgLS1kZWZhdWx0IG9wdGlvbnMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIEFXUyBDREsgbGlicmFyeSB1c2VkIGJ5IHlvdXIgYXBwbGljYXRpb24uIFBsZWFzZSB1cGdyYWRlIHRvIDIuMjEyLjAgb3IgYWJvdmUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmxhZ3NUb1NldCA9IHRoaXMuZ2V0RmxhZ3NUb1NldChwYXJhbXMpO1xuICAgIGNvbnN0IHByb3RvdHlwZVN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnByb3RvdHlwZUNoYW5nZXMoZmxhZ3NUb1NldCwgcGFyYW1zKTtcblxuICAgIGlmIChwcm90b3R5cGVTdWNjZXNzKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVVzZXJSZXNwb25zZShmbGFnc1RvU2V0LCBwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmVzIHdoaWNoIGZsYWdzIHNob3VsZCBiZSBzZXQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMgKi9cbiAgcHJpdmF0ZSBnZXRGbGFnc1RvU2V0KHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHBhcmFtcy5hbGwgJiYgcGFyYW1zLmRlZmF1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmZsYWdzXG4gICAgICAgIC5maWx0ZXIoZmxhZyA9PiB0aGlzLmlzQm9vbGVhbkZsYWcoZmxhZykpXG4gICAgICAgIC5tYXAoZmxhZyA9PiBmbGFnLm5hbWUpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmFsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmxhZ3NcbiAgICAgICAgLmZpbHRlcihmbGFnID0+IGZsYWcudXNlclZhbHVlID09PSB1bmRlZmluZWQgfHwgIWlzRWZmZWN0aXZlVmFsdWVFcXVhbFRvUmVjb21tZW5kZWQoZmxhZykpXG4gICAgICAgIC5maWx0ZXIoZmxhZyA9PiB0aGlzLmlzQm9vbGVhbkZsYWcoZmxhZykpXG4gICAgICAgIC5tYXAoZmxhZyA9PiBmbGFnLm5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5mbGFnc1xuICAgICAgICAuZmlsdGVyKGZsYWcgPT4gZmxhZy51c2VyVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgLmZpbHRlcihmbGFnID0+IHRoaXMuaXNCb29sZWFuRmxhZyhmbGFnKSlcbiAgICAgICAgLm1hcChmbGFnID0+IGZsYWcubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldHMgZmxhZ3MgdGhhdCBkb24ndCBjYXVzZSB0ZW1wbGF0ZSBjaGFuZ2VzICovXG4gIGFzeW5jIHNldFNhZmVGbGFncyhwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2RrSnNvbiA9IGF3YWl0IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdjZGsuanNvbicpLCAndXRmLTgnKSk7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwIHx8IGNka0pzb24uYXBwO1xuXG4gICAgY29uc3QgaXNVc2luZ1RzTm9kZSA9IHRoaXMuYXBwLmluY2x1ZGVzKCd0cy1ub2RlJyk7XG4gICAgaWYgKGlzVXNpbmdUc05vZGUgJiYgIXRoaXMuYXBwLmluY2x1ZGVzKCctVCcpICYmICF0aGlzLmFwcC5pbmNsdWRlcygnLS10cmFuc3BpbGVPbmx5JykpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnUmVwZWF0ZWQgc3ludGhzIHdpdGggdHMtbm9kZSB3aWxsIHR5cGUtY2hlY2sgdGhlIGFwcGxpY2F0aW9uIG9uIGV2ZXJ5IHN5bnRoLiBBZGQgLS10cmFuc3BpbGVPbmx5IHRvIGNkay5qc29uXFwncyBcImFwcFwiIGNvbW1hbmQgdG8gbWFrZSB0aGlzIG9wZXJhdGlvbiBmYXN0ZXIuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdW5jb25maWd1cmVkRmxhZ3MgPSB0aGlzLmZsYWdzLmZpbHRlcihmbGFnID0+XG4gICAgICBmbGFnLnVzZXJWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuaXNCb29sZWFuRmxhZyhmbGFnKSk7XG5cbiAgICBpZiAodW5jb25maWd1cmVkRmxhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ0FsbCBmZWF0dXJlIGZsYWdzIGFyZSBjb25maWd1cmVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVNhZmV0eUNoZWNrKCk7XG4gICAgY29uc3Qgc2FmZUZsYWdzID0gYXdhaXQgdGhpcy5iYXRjaFRlc3RGbGFncyh1bmNvbmZpZ3VyZWRGbGFncyk7XG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwU2FmZXR5Q2hlY2soKTtcblxuICAgIGlmIChzYWZlRmxhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdGbGFncyB0aGF0IGNhbiBiZSBzZXQgd2l0aG91dCB0ZW1wbGF0ZSBjaGFuZ2VzOicpO1xuICAgICAgZm9yIChjb25zdCBmbGFnIG9mIHNhZmVGbGFncykge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYC0gJHtmbGFnLm5hbWV9IC0+ICR7ZmxhZy5yZWNvbW1lbmRlZFZhbHVlfWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVVc2VyUmVzcG9uc2Uoc2FmZUZsYWdzLm1hcChmbGFnID0+IGZsYWcubmFtZSksIHsgLi4ucGFyYW1zLCByZWNvbW1lbmRlZDogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdObyBtb3JlIGZsYWdzIGNhbiBiZSBzZXQgd2l0aG91dCBjYXVzaW5nIHRlbXBsYXRlIGNoYW5nZXMuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluaXRpYWxpemVzIHRoZSBzYWZldHkgY2hlY2sgYnkgcmVhZGluZyBjb250ZXh0IGFuZCBzeW50aGVzaXppbmcgYmFzZWxpbmUgdGVtcGxhdGVzICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVNhZmV0eUNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhc2VDb250ZXh0ID0gbmV3IENka0FwcE11bHRpQ29udGV4dChwcm9jZXNzLmN3ZCgpKTtcbiAgICB0aGlzLmJhc2VDb250ZXh0VmFsdWVzID0geyAuLi5hd2FpdCBiYXNlQ29udGV4dC5yZWFkKCksIC4uLnRoaXMuY2xpQ29udGV4dFZhbHVlcyB9O1xuXG4gICAgdGhpcy5iYXNlbGluZVRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjZGstYmFzZWxpbmUtJykpO1xuICAgIGNvbnN0IG1lcmdlZENvbnRleHQgPSBuZXcgTWVtb3J5Q29udGV4dCh0aGlzLmJhc2VDb250ZXh0VmFsdWVzKTtcbiAgICBjb25zdCBiYXNlU291cmNlID0gYXdhaXQgdGhpcy50b29sa2l0LmZyb21DZGtBcHAodGhpcy5hcHAsIHtcbiAgICAgIGNvbnRleHRTdG9yZTogbWVyZ2VkQ29udGV4dCxcbiAgICAgIG91dGRpcjogdGhpcy5iYXNlbGluZVRlbXBEaXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiYXNlQ3ggPSBhd2FpdCB0aGlzLnRvb2xraXQuc3ludGgoYmFzZVNvdXJjZSk7XG4gICAgY29uc3QgYmFzZUFzc2VtYmx5ID0gYmFzZUN4LmNsb3VkQXNzZW1ibHk7XG4gICAgdGhpcy5hbGxTdGFja3MgPSBiYXNlQXNzZW1ibHkuc3RhY2tzUmVjdXJzaXZlbHk7XG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBQUXVldWUoeyBjb25jdXJyZW5jeTogNCB9KTtcbiAgfVxuXG4gIC8qKiBDbGVhbnMgdXAgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGNyZWF0ZWQgZHVyaW5nIHNhZmV0eSBjaGVja3MgKi9cbiAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwU2FmZXR5Q2hlY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuYmFzZWxpbmVUZW1wRGlyKSB7XG4gICAgICBhd2FpdCBmcy5yZW1vdmUodGhpcy5iYXNlbGluZVRlbXBEaXIpO1xuICAgICAgdGhpcy5iYXNlbGluZVRlbXBEaXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRlc3RzIG11bHRpcGxlIGZsYWdzIHRvZ2V0aGVyIGFuZCBpc29sYXRlcyB1bnNhZmUgb25lcyB1c2luZyBiaW5hcnkgc2VhcmNoICovXG4gIHByaXZhdGUgYXN5bmMgYmF0Y2hUZXN0RmxhZ3MoZmxhZ3M6IEZlYXR1cmVGbGFnW10pOiBQcm9taXNlPEZlYXR1cmVGbGFnW10+IHtcbiAgICBpZiAoZmxhZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBhbGxGbGFnc0NvbnRleHQgPSB7IC4uLnRoaXMuYmFzZUNvbnRleHRWYWx1ZXMgfTtcbiAgICBmbGFncy5mb3JFYWNoKGZsYWcgPT4ge1xuICAgICAgYWxsRmxhZ3NDb250ZXh0W2ZsYWcubmFtZV0gPSBmbGFnLnJlY29tbWVuZGVkVmFsdWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGxTYWZlID0gYXdhaXQgdGhpcy50ZXN0QmF0Y2goYWxsRmxhZ3NDb250ZXh0KTtcbiAgICBpZiAoYWxsU2FmZSkgcmV0dXJuIGZsYWdzO1xuXG4gICAgcmV0dXJuIHRoaXMuaXNvbGF0ZVVuc2FmZUZsYWdzKGZsYWdzKTtcbiAgfVxuXG4gIC8qKiBUZXN0cyBpZiBhIHNldCBvZiBjb250ZXh0IHZhbHVlcyBjYXVzZXMgdGVtcGxhdGUgY2hhbmdlcyBieSBzeW50aGVzaXppbmcgYW5kIGRpZmZpbmcgKi9cbiAgcHJpdmF0ZSBhc3luYyB0ZXN0QmF0Y2goY29udGV4dFZhbHVlczogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRlc3RDb250ZXh0ID0gbmV3IE1lbW9yeUNvbnRleHQoY29udGV4dFZhbHVlcyk7XG4gICAgY29uc3QgdGVtcERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay10ZXN0LScpKTtcbiAgICBjb25zdCB0ZXN0U291cmNlID0gYXdhaXQgdGhpcy50b29sa2l0LmZyb21DZGtBcHAodGhpcy5hcHAsIHtcbiAgICAgIGNvbnRleHRTdG9yZTogdGVzdENvbnRleHQsXG4gICAgICBvdXRkaXI6IHRlbXBEaXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZXN0Q3ggPSBhd2FpdCB0aGlzLnRvb2xraXQuc3ludGgodGVzdFNvdXJjZSk7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLmFsbFN0YWNrcykge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBzdGFjay50ZW1wbGF0ZUZ1bGxQYXRoO1xuICAgICAgICBjb25zdCBkaWZmID0gYXdhaXQgdGhpcy50b29sa2l0LmRpZmYodGVzdEN4LCB7XG4gICAgICAgICAgbWV0aG9kOiBEaWZmTWV0aG9kLkxvY2FsRmlsZSh0ZW1wbGF0ZVBhdGgpLFxuICAgICAgICAgIHN0YWNrczoge1xuICAgICAgICAgICAgc3RyYXRlZ3k6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENIX1NJTkdMRSxcbiAgICAgICAgICAgIHBhdHRlcm5zOiBbc3RhY2suaGllcmFyY2hpY2FsSWRdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2tEaWZmIG9mIE9iamVjdC52YWx1ZXMoZGlmZikpIHtcbiAgICAgICAgICBpZiAoc3RhY2tEaWZmLmRpZmZlcmVuY2VDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yZW1vdmUodGVtcERpcik7XG4gICAgfVxuICB9XG5cbiAgLyoqIFVzZXMgYmluYXJ5IHNlYXJjaCB0byBpc29sYXRlIHdoaWNoIGZsYWdzIGFyZSBzYWZlIHRvIHNldCB3aXRob3V0IHRlbXBsYXRlIGNoYW5nZXMgKi9cbiAgcHJpdmF0ZSBhc3luYyBpc29sYXRlVW5zYWZlRmxhZ3MoZmxhZ3M6IEZlYXR1cmVGbGFnW10pOiBQcm9taXNlPEZlYXR1cmVGbGFnW10+IHtcbiAgICBjb25zdCBzYWZlRmxhZ3M6IEZlYXR1cmVGbGFnW10gPSBbXTtcblxuICAgIGNvbnN0IHByb2Nlc3NCYXRjaCA9IGFzeW5jIChiYXRjaDogRmVhdHVyZUZsYWdbXSwgY29udGV4dFZhbHVlczogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKGJhdGNoLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBpc1NhZmUgPSBhd2FpdCB0aGlzLnRlc3RCYXRjaChcbiAgICAgICAgICB7IC4uLmNvbnRleHRWYWx1ZXMsIFtiYXRjaFswXS5uYW1lXTogYmF0Y2hbMF0ucmVjb21tZW5kZWRWYWx1ZSB9LFxuICAgICAgICApO1xuICAgICAgICBpZiAoaXNTYWZlKSBzYWZlRmxhZ3MucHVzaChiYXRjaFswXSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmF0Y2hDb250ZXh0ID0geyAuLi5jb250ZXh0VmFsdWVzIH07XG4gICAgICBiYXRjaC5mb3JFYWNoKGZsYWcgPT4ge1xuICAgICAgICBiYXRjaENvbnRleHRbZmxhZy5uYW1lXSA9IGZsYWcucmVjb21tZW5kZWRWYWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpc1NhZmVCYXRjaCA9IGF3YWl0IHRoaXMudGVzdEJhdGNoKGJhdGNoQ29udGV4dCk7XG4gICAgICBpZiAoaXNTYWZlQmF0Y2gpIHtcbiAgICAgICAgc2FmZUZsYWdzLnB1c2goLi4uYmF0Y2gpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pZCA9IE1hdGguZmxvb3IoYmF0Y2gubGVuZ3RoIC8gMik7XG4gICAgICBjb25zdCBsZWZ0ID0gYmF0Y2guc2xpY2UoMCwgbWlkKTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gYmF0Y2guc2xpY2UobWlkKTtcblxuICAgICAgdm9pZCB0aGlzLnF1ZXVlLmFkZCgoKSA9PiBwcm9jZXNzQmF0Y2gobGVmdCwgY29udGV4dFZhbHVlcykpO1xuICAgICAgdm9pZCB0aGlzLnF1ZXVlLmFkZCgoKSA9PiBwcm9jZXNzQmF0Y2gocmlnaHQsIGNvbnRleHRWYWx1ZXMpKTtcbiAgICB9O1xuXG4gICAgdm9pZCB0aGlzLnF1ZXVlLmFkZCgoKSA9PiBwcm9jZXNzQmF0Y2goZmxhZ3MsIHRoaXMuYmFzZUNvbnRleHRWYWx1ZXMpKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLm9uSWRsZSgpO1xuICAgIHJldHVybiBzYWZlRmxhZ3M7XG4gIH1cblxuICAvKiogUHJvdG90eXBlcyBmbGFnIGNoYW5nZXMgYnkgc3ludGhlc2l6aW5nIHRlbXBsYXRlcyBhbmQgc2hvd2luZyBkaWZmcyB0byB0aGUgdXNlciAqL1xuICBwcml2YXRlIGFzeW5jIHByb3RvdHlwZUNoYW5nZXMoZmxhZ05hbWVzOiBzdHJpbmdbXSwgcGFyYW1zOiBGbGFnT3BlcmF0aW9uc1BhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGJhc2VDb250ZXh0ID0gbmV3IENka0FwcE11bHRpQ29udGV4dChwcm9jZXNzLmN3ZCgpKTtcbiAgICBjb25zdCBiYXNlQ29udGV4dFZhbHVlcyA9IHsgLi4uYXdhaXQgYmFzZUNvbnRleHQucmVhZCgpLCAuLi50aGlzLmNsaUNvbnRleHRWYWx1ZXMgfTtcbiAgICBjb25zdCBtZW1vcnlDb250ZXh0ID0gbmV3IE1lbW9yeUNvbnRleHQoYmFzZUNvbnRleHRWYWx1ZXMpO1xuXG4gICAgY29uc3QgY2RrSnNvbiA9IGF3YWl0IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdjZGsuanNvbicpLCAndXRmLTgnKSk7XG4gICAgY29uc3QgYXBwID0gY2RrSnNvbi5hcHA7XG5cbiAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCB0aGlzLnRvb2xraXQuZnJvbUNka0FwcChhcHAsIHtcbiAgICAgIGNvbnRleHRTdG9yZTogbWVtb3J5Q29udGV4dCxcbiAgICAgIG91dGRpcjogZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrLW9yaWdpbmFsLScpKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHVwZGF0ZU9iaiA9IGF3YWl0IHRoaXMuYnVpbGRVcGRhdGVPYmplY3QoZmxhZ05hbWVzLCBwYXJhbXMsIGJhc2VDb250ZXh0VmFsdWVzKTtcbiAgICBpZiAoIXVwZGF0ZU9iaikgcmV0dXJuIGZhbHNlO1xuXG4gICAgYXdhaXQgbWVtb3J5Q29udGV4dC51cGRhdGUodXBkYXRlT2JqKTtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMudG9vbGtpdC5zeW50aChzb3VyY2UpO1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gY3guY2xvdWRBc3NlbWJseTtcblxuICAgIGNvbnN0IG1vZGlmaWVkU291cmNlID0gYXdhaXQgdGhpcy50b29sa2l0LmZyb21DZGtBcHAoYXBwLCB7XG4gICAgICBjb250ZXh0U3RvcmU6IG1lbW9yeUNvbnRleHQsXG4gICAgICBvdXRkaXI6IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay10ZW1wLScpKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1vZGlmaWVkQ3ggPSBhd2FpdCB0aGlzLnRvb2xraXQuc3ludGgobW9kaWZpZWRTb3VyY2UpO1xuICAgIGNvbnN0IGFsbFN0YWNrcyA9IGFzc2VtYmx5LnN0YWNrc1JlY3Vyc2l2ZWx5O1xuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBhbGxTdGFja3MpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHN0YWNrLnRlbXBsYXRlRnVsbFBhdGg7XG4gICAgICBhd2FpdCB0aGlzLnRvb2xraXQuZGlmZihtb2RpZmllZEN4LCB7XG4gICAgICAgIG1ldGhvZDogRGlmZk1ldGhvZC5Mb2NhbEZpbGUodGVtcGxhdGVQYXRoKSxcbiAgICAgICAgc3RhY2tzOiB7XG4gICAgICAgICAgc3RyYXRlZ3k6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENIX1NJTkdMRSxcbiAgICAgICAgICBwYXR0ZXJuczogW3N0YWNrLmhpZXJhcmNoaWNhbElkXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuZGlzcGxheUZsYWdDaGFuZ2VzKHVwZGF0ZU9iaiwgYmFzZUNvbnRleHRWYWx1ZXMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIERpc3BsYXlzIGEgc3VtbWFyeSBvZiBmbGFnIGNoYW5nZXMgc2hvd2luZyBvbGQgYW5kIG5ldyB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNwbGF5RmxhZ0NoYW5nZXModXBkYXRlT2JqOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiwgYmFzZUNvbnRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ1xcbkZsYWcgY2hhbmdlczonKTtcbiAgICBmb3IgKGNvbnN0IFtmbGFnTmFtZSwgbmV3VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVwZGF0ZU9iaikpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGJhc2VDb250ZXh0VmFsdWVzW2ZsYWdOYW1lXTtcbiAgICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5ID0gY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQgPyAnPHVuc2V0PicgOiBTdHJpbmcoY3VycmVudFZhbHVlKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgICAke2ZsYWdOYW1lfTogJHtjdXJyZW50RGlzcGxheX0g4oaSICR7bmV3VmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEJ1aWxkcyB0aGUgdXBkYXRlIG9iamVjdCB3aXRoIG5ldyBmbGFnIHZhbHVlcyBiYXNlZCBvbiBwYXJhbWV0ZXJzIGFuZCBjdXJyZW50IGNvbnRleHQgKi9cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFVwZGF0ZU9iamVjdChmbGFnTmFtZXM6IHN0cmluZ1tdLCBwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zLCBiYXNlQ29udGV4dFZhbHVlczogUmVjb3JkPHN0cmluZywgYW55PilcbiAgICA6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfCBudWxsPiB7XG4gICAgY29uc3QgdXBkYXRlT2JqOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gICAgaWYgKGZsYWdOYW1lcy5sZW5ndGggPT09IDEgJiYgcGFyYW1zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZsYWdOYW1lID0gZmxhZ05hbWVzWzBdO1xuICAgICAgY29uc3QgYm9vbFZhbHVlID0gcGFyYW1zLnZhbHVlID09PSAndHJ1ZSc7XG4gICAgICBpZiAoYmFzZUNvbnRleHRWYWx1ZXNbZmxhZ05hbWVdID09PSBib29sVmFsdWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdGbGFnIGlzIGFscmVhZHkgc2V0IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuIE5vIGNoYW5nZXMgbmVlZGVkLicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZU9ialtmbGFnTmFtZV0gPSBib29sVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZmxhZ05hbWUgb2YgZmxhZ05hbWVzKSB7XG4gICAgICAgIGNvbnN0IGZsYWcgPSB0aGlzLmZsYWdzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZsYWdOYW1lKTtcbiAgICAgICAgaWYgKCFmbGFnKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5lcnJvcihgRmxhZyAke2ZsYWdOYW1lfSBub3QgZm91bmQuYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBwYXJhbXMucmVjb21tZW5kZWRcbiAgICAgICAgICA/IGZsYWcucmVjb21tZW5kZWRWYWx1ZSBhcyBib29sZWFuXG4gICAgICAgICAgOiBTdHJpbmcoZGVmYXVsdFZhbHVlKGZsYWcpKSA9PT0gJ3RydWUnO1xuICAgICAgICB1cGRhdGVPYmpbZmxhZ05hbWVdID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cGRhdGVPYmo7XG4gIH1cblxuICAvKiogUHJvbXB0cyB1c2VyIGZvciBjb25maXJtYXRpb24gYW5kIGFwcGxpZXMgY2hhbmdlcyBpZiBhY2NlcHRlZCAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZVVzZXJSZXNwb25zZShmbGFnTmFtZXM6IHN0cmluZ1tdLCBwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdXNlckFjY2VwdGVkID0gYXdhaXQgdGhpcy5pb0hlbHBlci5yZXF1ZXN0UmVzcG9uc2Uoe1xuICAgICAgdGltZTogbmV3IERhdGUoKSxcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBjb2RlOiAnQ0RLX1RPT0xLSVRfSTkzMDAnLFxuICAgICAgbWVzc2FnZTogJ0RvIHlvdSB3YW50IHRvIGFjY2VwdCB0aGVzZSBjaGFuZ2VzPycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZsYWdOYW1lcyxcbiAgICAgICAgcmVzcG9uc2VEZXNjcmlwdGlvbjogJ0VudGVyIFwieVwiIHRvIGFwcGx5IGNoYW5nZXMgb3IgXCJuXCIgdG8gY2FuY2VsJyxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0UmVzcG9uc2U6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyQWNjZXB0ZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xlYW51cFRlbXBEaXJlY3RvcmllcygpO1xuICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoJ0ZsYWdzQWJvcnRlZCcsICdGbGFnIHVwZGF0ZSBjYW5jZWxsZWQnKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm1vZGlmeVZhbHVlcyhmbGFnTmFtZXMsIHBhcmFtcyk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdGbGFnIHZhbHVlKHMpIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICAgIGF3YWl0IHRoaXMuY2xlYW51cFRlbXBEaXJlY3RvcmllcygpO1xuICB9XG5cbiAgLyoqIFJlbW92ZXMgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGNyZWF0ZWQgZHVyaW5nIGZsYWcgb3BlcmF0aW9ucyAqL1xuICBwcml2YXRlIGFzeW5jIGNsZWFudXBUZW1wRGlyZWN0b3JpZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3JpZ2luYWxEaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ29yaWdpbmFsJyk7XG4gICAgY29uc3QgdGVtcERpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAndGVtcCcpO1xuICAgIGF3YWl0IGZzLnJlbW92ZShvcmlnaW5hbERpcik7XG4gICAgYXdhaXQgZnMucmVtb3ZlKHRlbXBEaXIpO1xuICB9XG5cbiAgLyoqIEFjdHVhbGx5IG1vZGlmaWVzIHRoZSBjZGsuanNvbiBmaWxlIHdpdGggdGhlIG5ldyBmbGFnIHZhbHVlcyAqL1xuICBwcml2YXRlIGFzeW5jIG1vZGlmeVZhbHVlcyhmbGFnTmFtZXM6IHN0cmluZ1tdLCBwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2RrSnNvblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ2Nkay5qc29uJyk7XG4gICAgY29uc3QgY2RrSnNvbkNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShjZGtKc29uUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoY2RrSnNvbkNvbnRlbnQpO1xuXG4gICAgaWYgKGZsYWdOYW1lcy5sZW5ndGggPT09IDEgJiYgIXBhcmFtcy5zYWZlICYmICFwYXJhbXMuYWxsKSB7XG4gICAgICBjb25zdCBib29sVmFsdWUgPSBwYXJhbXMudmFsdWUgPT09ICd0cnVlJztcbiAgICAgIGNka0pzb24uY29udGV4dFtTdHJpbmcoZmxhZ05hbWVzWzBdKV0gPSBib29sVmFsdWU7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oYFNldHRpbmcgZmxhZyAnJHtmbGFnTmFtZXN9JyB0bzogJHtib29sVmFsdWV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZmxhZ05hbWUgb2YgZmxhZ05hbWVzKSB7XG4gICAgICAgIGNvbnN0IGZsYWcgPSB0aGlzLmZsYWdzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZsYWdOYW1lKSE7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcGFyYW1zLnJlY29tbWVuZGVkIHx8IHBhcmFtcy5zYWZlXG4gICAgICAgICAgPyBmbGFnLnJlY29tbWVuZGVkVmFsdWUgYXMgYm9vbGVhblxuICAgICAgICAgIDogU3RyaW5nKGRlZmF1bHRWYWx1ZShmbGFnKSkgPT09ICd0cnVlJztcbiAgICAgICAgY2RrSnNvbi5jb250ZXh0W2ZsYWdOYW1lXSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoY2RrSnNvblBhdGgsIEpTT04uc3RyaW5naWZ5KGNka0pzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5cyBmbGFncyBpbiBhIHRhYmxlIGZvcm1hdCwgZWl0aGVyIHNwZWNpZmljIGZsYWdzIG9yIGZpbHRlcmVkIGJ5IGNyaXRlcmlhICovXG4gIGFzeW5jIGRpc3BsYXlGbGFncyhwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBGTEFHTkFNRSwgYWxsIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoRkxBR05BTUUgJiYgRkxBR05BTUUubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5kaXNwbGF5U3BlY2lmaWNGbGFncyhGTEFHTkFNRSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgW2ZsYWdzVG9EaXNwbGF5LCBoZWFkZXJdID0gYWxsXG4gICAgICA/IFt0aGlzLmZsYWdzLCAnQWxsIGZlYXR1cmUgZmxhZ3MnXVxuICAgICAgOiBbRmxhZ09wZXJhdGlvbnMuZmlsdGVyTmVlZHNBdHRlbnRpb24odGhpcy5mbGFncyksICdVbmNvbmZpZ3VyZWQgZmVhdHVyZSBmbGFncyddO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGhlYWRlcik7XG4gICAgYXdhaXQgdGhpcy5kaXNwbGF5RmxhZ1RhYmxlKGZsYWdzVG9EaXNwbGF5KTtcblxuICAgIC8vIEFkZCBoZWxwZnVsIG1lc3NhZ2UgYWZ0ZXIgZW1wdHkgdGFibGUgd2hlbiBub3QgdXNpbmcgLS1hbGxcbiAgICBpZiAoIWFsbCAmJiBmbGFnc1RvRGlzcGxheS5sZW5ndGggPT09IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnJyk7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ+KchSBBbGwgZmVhdHVyZSBmbGFncyBhcmUgYWxyZWFkeSBzZXQgdG8gdGhlaXIgcmVjb21tZW5kZWQgdmFsdWVzLicpO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdVc2UgXFwnY2RrIGZsYWdzIC0tYWxsIC0tdW5zdGFibGU9ZmxhZ3NcXCcgdG8gc2VlIGFsbCBmbGFncyBhbmQgdGhlaXIgY3VycmVudCB2YWx1ZXMuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERpc3BsYXlzIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBzcGVjaWZpYyBmbGFncyBtYXRjaGluZyB0aGUgZ2l2ZW4gbmFtZXMgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNwbGF5U3BlY2lmaWNGbGFncyhmbGFnTmFtZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWF0Y2hpbmdGbGFncyA9IHRoaXMuZmxhZ3MuZmlsdGVyKGYgPT5cbiAgICAgIGZsYWdOYW1lcy5zb21lKHNlYXJjaFRlcm0gPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKSkpO1xuXG4gICAgaWYgKG1hdGNoaW5nRmxhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKGBGbGFnIG1hdGNoaW5nIFwiJHtmbGFnTmFtZXMuam9pbignLCAnKX1cIiBub3QgZm91bmQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoaW5nRmxhZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmbGFnID0gbWF0Y2hpbmdGbGFnc1swXTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgRmxhZyBuYW1lOiAke2ZsYWcubmFtZX1gKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgRGVzY3JpcHRpb246ICR7ZmxhZy5leHBsYW5hdGlvbn1gKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgUmVjb21tZW5kZWQgdmFsdWU6ICR7ZmxhZy5yZWNvbW1lbmRlZFZhbHVlfWApO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGBEZWZhdWx0IHZhbHVlOiAke2RlZmF1bHRWYWx1ZShmbGFnKX1gKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgVXNlciB2YWx1ZTogJHtmbGFnLnVzZXJWYWx1ZX1gKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgRWZmZWN0aXZlIHZhbHVlOiAke2VmZmVjdGl2ZVZhbHVlKGZsYWcpfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgRm91bmQgJHttYXRjaGluZ0ZsYWdzLmxlbmd0aH0gZmxhZ3MgbWF0Y2hpbmcgXCIke2ZsYWdOYW1lcy5qb2luKCcsICcpfVwiYCk7XG4gICAgYXdhaXQgdGhpcy5kaXNwbGF5RmxhZ1RhYmxlKG1hdGNoaW5nRmxhZ3MpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgc29ydCBvcmRlciBmb3IgZmxhZ3MgKi9cbiAgcHJpdmF0ZSBnZXRGbGFnU29ydE9yZGVyKGZsYWc6IEZlYXR1cmVGbGFnKTogbnVtYmVyIHtcbiAgICBpZiAoZmxhZy51c2VyVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDM7XG4gICAgaWYgKGlzRWZmZWN0aXZlVmFsdWVFcXVhbFRvUmVjb21tZW5kZWQoZmxhZykpIHJldHVybiAxO1xuICAgIHJldHVybiAyO1xuICB9XG5cbiAgLyoqIERpc3BsYXlzIGZsYWdzIGluIGEgZm9ybWF0dGVkIHRhYmxlIGdyb3VwZWQgYnkgbW9kdWxlIGFuZCBzb3J0ZWQgKi9cbiAgYXN5bmMgZGlzcGxheUZsYWdUYWJsZShmbGFnczogRmVhdHVyZUZsYWdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvcnRlZEZsYWdzID0gWy4uLmZsYWdzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBvcmRlckEgPSB0aGlzLmdldEZsYWdTb3J0T3JkZXIoYSk7XG4gICAgICBjb25zdCBvcmRlckIgPSB0aGlzLmdldEZsYWdTb3J0T3JkZXIoYik7XG5cbiAgICAgIGlmIChvcmRlckEgIT09IG9yZGVyQikgcmV0dXJuIG9yZGVyQSAtIG9yZGVyQjtcbiAgICAgIGlmIChhLm1vZHVsZSAhPT0gYi5tb2R1bGUpIHJldHVybiBhLm1vZHVsZS5sb2NhbGVDb21wYXJlKGIubW9kdWxlKTtcbiAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgcm93czogc3RyaW5nW11bXSA9IFtbJ0ZlYXR1cmUgRmxhZycsICdSZWNvbW1lbmRlZCcsICdVc2VyJywgJ0VmZmVjdGl2ZSddXTtcbiAgICBsZXQgY3VycmVudE1vZHVsZSA9ICcnO1xuXG4gICAgc29ydGVkRmxhZ3MuZm9yRWFjaCgoZmxhZykgPT4ge1xuICAgICAgaWYgKGZsYWcubW9kdWxlICE9PSBjdXJyZW50TW9kdWxlKSB7XG4gICAgICAgIHJvd3MucHVzaChbY2hhbGsuYm9sZChgTW9kdWxlOiAke2ZsYWcubW9kdWxlfWApLCAnJywgJycsICcnXSk7XG4gICAgICAgIGN1cnJlbnRNb2R1bGUgPSBmbGFnLm1vZHVsZTtcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaChbXG4gICAgICAgIGAgICR7ZmxhZy5uYW1lfWAsXG4gICAgICAgIFN0cmluZyhmbGFnLnJlY29tbWVuZGVkVmFsdWUpLFxuICAgICAgICBmbGFnLnVzZXJWYWx1ZSA9PT0gdW5kZWZpbmVkID8gJzx1bnNldD4nIDogU3RyaW5nKGZsYWcudXNlclZhbHVlKSxcbiAgICAgICAgU3RyaW5nKGVmZmVjdGl2ZVZhbHVlKGZsYWcpKSxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZm9ybWF0dGVkVGFibGUgPSBmb3JtYXRUYWJsZShyb3dzLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXR0ZWRUYWJsZSk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIGEgZmxhZyBoYXMgYSBib29sZWFuIHJlY29tbWVuZGVkIHZhbHVlICovXG4gIGlzQm9vbGVhbkZsYWcoZmxhZzogRmVhdHVyZUZsYWcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWNvbW1lbmRlZCA9IGZsYWcucmVjb21tZW5kZWRWYWx1ZTtcbiAgICByZXR1cm4gdHlwZW9mIHJlY29tbWVuZGVkID09PSAnYm9vbGVhbicgfHxcbiAgICAgIHJlY29tbWVuZGVkID09PSAndHJ1ZScgfHxcbiAgICAgIHJlY29tbWVuZGVkID09PSAnZmFsc2UnO1xuICB9XG5cbiAgLyoqIFNob3dzIGhlbHBmdWwgdXNhZ2UgZXhhbXBsZXMgYW5kIGF2YWlsYWJsZSBjb21tYW5kIG9wdGlvbnMgKi9cbiAgYXN5bmMgZGlzcGxheUhlbHBNZXNzYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnXFxuJyArIGNoYWxrLmJvbGQoJ0F2YWlsYWJsZSBvcHRpb25zOicpKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJyAgY2RrIGZsYWdzIC0taW50ZXJhY3RpdmUgICAgICMgSW50ZXJhY3RpdmUgbWVudSB0byBtYW5hZ2UgZmxhZ3MnKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJyAgY2RrIGZsYWdzIC0tYWxsICAgICAgICAgICAgICMgU2hvdyBhbGwgZmxhZ3MgKGluY2x1ZGluZyBjb25maWd1cmVkIG9uZXMpJyk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKCcgIGNkayBmbGFncyAtLXNldCAtLWFsbCAtLXJlY29tbWVuZGVkICAgICMgU2V0IGFsbCBmbGFncyB0byByZWNvbW1lbmRlZCB2YWx1ZXMnKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJyAgY2RrIGZsYWdzIC0tc2V0IC0tYWxsIC0tZGVmYXVsdCAgICAgICAjIFNldCBhbGwgZmxhZ3MgdG8gZGVmYXVsdCB2YWx1ZXMnKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJyAgY2RrIGZsYWdzIC0tc2V0IC0tdW5jb25maWd1cmVkIC0tcmVjb21tZW5kZWQgICMgU2V0IHVuY29uZmlndXJlZCBmbGFncyB0byByZWNvbW1lbmRlZCcpO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnICBjZGsgZmxhZ3MgLS1zZXQgPGZsYWctbmFtZT4gLS12YWx1ZSA8dHJ1ZXxmYWxzZT4gICMgU2V0IHNwZWNpZmljIGZsYWcnKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJyAgY2RrIGZsYWdzIC0tc2FmZSAgICAgICAgICAgICMgU2FmZWx5IHNldCBmbGFncyB0aGF0IGRvblxcJ3QgY2hhbmdlIHRlbXBsYXRlcycpO1xuICB9XG59XG5cbi8qKiBDaGVja3MgaWYgdGhlIGZsYWdzIGN1cnJlbnQgZWZmZWN0aXZlIHZhbHVlIG1hdGNoZXMgdGhlIHJlY29tbWVuZGVkIHZhbHVlICovXG5leHBvcnQgZnVuY3Rpb24gaXNFZmZlY3RpdmVWYWx1ZUVxdWFsVG9SZWNvbW1lbmRlZChmbGFnOiBGZWF0dXJlRmxhZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gU3RyaW5nKGVmZmVjdGl2ZVZhbHVlKGZsYWcpKSA9PT0gU3RyaW5nKGZsYWcucmVjb21tZW5kZWRWYWx1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBlZmZlY3RpdmUgdmFsdWUgb2YgYSBmbGFnICh1c2VyIHZhbHVlIG9yIGRlZmF1bHQpXG4gKi9cbmZ1bmN0aW9uIGVmZmVjdGl2ZVZhbHVlKGZsYWc6IEZlYXR1cmVGbGFnKSB7XG4gIHJldHVybiBmbGFnLnVzZXJWYWx1ZSA/PyBkZWZhdWx0VmFsdWUoZmxhZyk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGZsYWcsIGFzc3VtZSBpdCdzIGBmYWxzZWAgaWYgbm90IGdpdmVuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShmbGFnOiBGZWF0dXJlRmxhZykge1xuICByZXR1cm4gZmxhZy51bmNvbmZpZ3VyZWRCZWhhdmVzTGlrZT8udjIgPz8gZmFsc2U7XG59XG4iXX0=
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FlagOperationRouter = void 0;
|
|
4
4
|
class FlagOperationRouter {
|
|
5
|
+
validator;
|
|
6
|
+
interactiveHandler;
|
|
7
|
+
flagOperations;
|
|
5
8
|
constructor(validator, interactiveHandler, flagOperations) {
|
|
6
9
|
this.validator = validator;
|
|
7
10
|
this.interactiveHandler = interactiveHandler;
|
|
@@ -57,4 +60,4 @@ class FlagOperationRouter {
|
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
exports.FlagOperationRouter = FlagOperationRouter;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLE1BQWEsbUJBQW1CO0lBRVg7SUFDQTtJQUNBO0lBSG5CLFlBQ21CLFNBQXdCLEVBQ3hCLGtCQUFzQyxFQUN0QyxjQUE4QjtRQUY5QixjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBRWpELENBQUM7SUFFRCx5RUFBeUU7SUFDekUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUE0QjtRQUN0QyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGtGQUFrRjtJQUMxRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBNEI7UUFDNUQsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVELCtCQUErQjtJQUN2QixLQUFLLENBQUMscUJBQXFCO1FBQ2pDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEYsSUFBSSxDQUFDLGlCQUFpQjtnQkFBRSxPQUFPO1lBRS9CLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUVyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCwrREFBK0Q7SUFDdkQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUE0QjtRQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNURELGtEQTREQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW50ZXJhY3RpdmVIYW5kbGVyIH0gZnJvbSAnLi9pbnRlcmFjdGl2ZS1oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgRmxhZ09wZXJhdGlvbnMgfSBmcm9tICcuL29wZXJhdGlvbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBGbGFnT3BlcmF0aW9uc1BhcmFtcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBGbGFnVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3InO1xuXG5leHBvcnQgY2xhc3MgRmxhZ09wZXJhdGlvblJvdXRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9yOiBGbGFnVmFsaWRhdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3RpdmVIYW5kbGVyOiBJbnRlcmFjdGl2ZUhhbmRsZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmbGFnT3BlcmF0aW9uczogRmxhZ09wZXJhdGlvbnMsXG4gICkge1xuICB9XG5cbiAgLyoqIFJvdXRlcyBmbGFnIG9wZXJhdGlvbnMgdG8gYXBwcm9wcmlhdGUgaGFuZGxlcnMgYmFzZWQgb24gcGFyYW1ldGVycyAqL1xuICBhc3luYyByb3V0ZShwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHBhcmFtcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVJbnRlcmFjdGl2ZU1vZGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNhZmUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmxhZ09wZXJhdGlvbnMuc2V0U2FmZUZsYWdzKHBhcmFtcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlUGFyYW1zKHBhcmFtcyk7XG4gICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG5cbiAgICBpZiAocGFyYW1zLnNldCkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVTZXRPcGVyYXRpb25zKHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuZmxhZ09wZXJhdGlvbnMuZGlzcGxheUZsYWdzKHBhcmFtcyk7XG4gICAgICBhd2FpdCB0aGlzLnNob3dIZWxwTWVzc2FnZShwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGZsYWcgc2V0dGluZyBvcGVyYXRpb25zLCByb3V0aW5nIHRvIHNpbmdsZSBvciBtdWx0aXBsZSBmbGFnIG1ldGhvZHMgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZXRPcGVyYXRpb25zKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFyYW1zLkZMQUdOQU1FICYmIHBhcmFtcy52YWx1ZSkge1xuICAgICAgYXdhaXQgdGhpcy5mbGFnT3BlcmF0aW9ucy5zZXRGbGFnKHBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMuYWxsIHx8IHBhcmFtcy51bmNvbmZpZ3VyZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmxhZ09wZXJhdGlvbnMuc2V0TXVsdGlwbGVGbGFncyhwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNYW5hZ2VzIGludGVyYWN0aXZlIG1vZGUgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVJbnRlcmFjdGl2ZU1vZGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGludGVyYWN0aXZlUGFyYW1zID0gYXdhaXQgdGhpcy5pbnRlcmFjdGl2ZUhhbmRsZXIuaGFuZGxlSW50ZXJhY3RpdmVNb2RlKCk7XG4gICAgICBpZiAoIWludGVyYWN0aXZlUGFyYW1zKSByZXR1cm47XG5cbiAgICAgIGF3YWl0IHRoaXMuZmxhZ09wZXJhdGlvbnMuZXhlY3V0ZShpbnRlcmFjdGl2ZVBhcmFtcyk7XG5cbiAgICAgIGlmICghaW50ZXJhY3RpdmVQYXJhbXMuRkxBR05BTUUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBTaG93cyBoZWxwIG1lc3NhZ2Ugd2hlbiBubyBzcGVjaWZpYyBvcHRpb25zIGFyZSBwcm92aWRlZCAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dIZWxwTWVzc2FnZShwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFwYXJhbXMuYWxsICYmICFwYXJhbXMuRkxBR05BTUUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmxhZ09wZXJhdGlvbnMuZGlzcGxheUhlbHBNZXNzYWdlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|