projen 0.100.4 → 0.100.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +58 -58
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +38 -23
- package/lib/awscdk/awscdk-construct.js +1 -1
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +3 -3
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/cli/cmds/new.js +28 -21
- package/lib/cli/macros.js +5 -4
- package/lib/cli/task-runtime.js +8 -13
- package/lib/cli/util.d.ts +4 -4
- package/lib/cli/util.js +19 -10
- package/lib/component.js +1 -1
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose/docker-compose-service.js +1 -1
- package/lib/docker-compose/docker-compose.js +1 -1
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/actions-provider.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +1 -1
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/javascript/yarnrc.js +1 -1
- package/lib/json-patch.js +1 -1
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project-tree.js +1 -1
- package/lib/project.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +1 -1
- package/lib/projenrc.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +10 -7
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv.d.ts +3 -3
- package/lib/python/uv.js +6 -6
- package/lib/python/venv.js +4 -4
- package/lib/readme.js +1 -1
- package/lib/release/bump-version.js +16 -19
- package/lib/release/commit-tag-version.d.ts +2 -1
- package/lib/release/commit-tag-version.js +23 -17
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/release/tag-version.js +3 -3
- package/lib/release/update-changelog.js +4 -2
- package/lib/renovatebot.js +1 -1
- package/lib/run-task.cjs +162 -20
- package/lib/sample-file.js +2 -2
- package/lib/source-code.js +1 -1
- package/lib/task-runner.js +16 -10
- package/lib/task.js +1 -1
- package/lib/tasks.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/util/exec.d.ts +183 -0
- package/lib/util/exec.js +238 -0
- package/lib/util/fs.d.ts +12 -0
- package/lib/util/fs.js +33 -0
- package/lib/util.d.ts +0 -22
- package/lib/util.js +1 -57
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +1 -1
package/lib/cli/cmds/new.js
CHANGED
|
@@ -42,6 +42,7 @@ const logging = __importStar(require("../../logging"));
|
|
|
42
42
|
const option_hints_1 = require("../../option-hints");
|
|
43
43
|
const projects_1 = require("../../projects");
|
|
44
44
|
const util_1 = require("../../util");
|
|
45
|
+
const exec_1 = require("../../util/exec");
|
|
45
46
|
const macros_1 = require("../macros");
|
|
46
47
|
const util_2 = require("../util");
|
|
47
48
|
class Command {
|
|
@@ -259,17 +260,22 @@ function commandLineToProps(cwd, type, argv) {
|
|
|
259
260
|
*/
|
|
260
261
|
async function initProjectFromModule(baseDir, spec, args) {
|
|
261
262
|
const projenVersion = args.projenVersion ?? "latest";
|
|
262
|
-
const
|
|
263
|
+
const installArgs = (0, util_2.renderInstallArgs)(baseDir, `projen@${projenVersion}`);
|
|
263
264
|
if (args.projenVersion) {
|
|
264
|
-
|
|
265
|
+
await exec_1.npm.run(installArgs, { cwd: baseDir });
|
|
265
266
|
}
|
|
266
267
|
else {
|
|
267
|
-
// do not overwrite existing installation
|
|
268
|
-
|
|
268
|
+
// do not overwrite an existing installation: only install if `npm ls` fails
|
|
269
|
+
try {
|
|
270
|
+
await exec_1.npm.run(["ls", `--prefix=${baseDir}`, "--depth=0", "--pattern", "projen"], { cwd: baseDir });
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
await exec_1.npm.run(installArgs, { cwd: baseDir });
|
|
274
|
+
}
|
|
269
275
|
}
|
|
270
|
-
const installPackageWithCliError = (b, s) => {
|
|
276
|
+
const installPackageWithCliError = async (b, s) => {
|
|
271
277
|
try {
|
|
272
|
-
return (0, util_2.installPackage)(b, s);
|
|
278
|
+
return await (0, util_2.installPackage)(b, s);
|
|
273
279
|
}
|
|
274
280
|
catch (error) {
|
|
275
281
|
const stderr = error?.stderr?.toString() ?? "";
|
|
@@ -282,7 +288,7 @@ async function initProjectFromModule(baseDir, spec, args) {
|
|
|
282
288
|
throw error;
|
|
283
289
|
}
|
|
284
290
|
};
|
|
285
|
-
const moduleName = installPackageWithCliError(baseDir, spec);
|
|
291
|
+
const moduleName = await installPackageWithCliError(baseDir, spec);
|
|
286
292
|
logging.empty();
|
|
287
293
|
// Find the just installed package and discover the rest recursively from this package folder
|
|
288
294
|
const moduleDir = (0, util_2.findJsiiFilePath)(baseDir, moduleName);
|
|
@@ -385,30 +391,31 @@ async function initProject(baseDir, type, args) {
|
|
|
385
391
|
post: args.post,
|
|
386
392
|
});
|
|
387
393
|
if (fs.existsSync(path.join(baseDir, "package.json")) && args.post) {
|
|
388
|
-
|
|
394
|
+
await exec_1.npm.run(["run", "eslint", "--if-present"], {
|
|
395
|
+
cwd: baseDir,
|
|
396
|
+
});
|
|
389
397
|
}
|
|
390
398
|
if (args.git) {
|
|
391
|
-
const
|
|
392
|
-
const gitversion = (0, util_1.getGitVersion)(
|
|
399
|
+
const opts = { cwd: baseDir };
|
|
400
|
+
const gitversion = (0, util_1.getGitVersion)(exec_1.git.capture(["--version"], opts));
|
|
393
401
|
logging.debug("system using git version ", gitversion);
|
|
394
402
|
// `git config init.defaultBranch` and `git init -b` are only available since git 2.28.0
|
|
395
403
|
if (gitversion && semver.gte(gitversion, "2.28.0")) {
|
|
396
|
-
const defaultGitInitBranch =
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
git(
|
|
400
|
-
git("
|
|
401
|
-
git('commit --allow-empty -m "chore: project created with projen"');
|
|
404
|
+
const defaultGitInitBranch = exec_1.git.tryCapture(["config", "init.defaultBranch"], opts)?.trim() ||
|
|
405
|
+
"main";
|
|
406
|
+
exec_1.git.run(["init", "-b", defaultGitInitBranch], opts);
|
|
407
|
+
exec_1.git.run(["add", "."], opts);
|
|
408
|
+
exec_1.git.run(["commit", "--allow-empty", "-m", "chore: project created with projen"], opts);
|
|
402
409
|
logging.debug(`default branch name set to ${defaultGitInitBranch}`);
|
|
403
410
|
}
|
|
404
411
|
else {
|
|
405
|
-
git("init");
|
|
406
|
-
git("add .");
|
|
407
|
-
git(
|
|
412
|
+
exec_1.git.run(["init"], opts);
|
|
413
|
+
exec_1.git.run(["add", "."], opts);
|
|
414
|
+
exec_1.git.run(["commit", "--allow-empty", "-m", "chore: project created with projen"], opts);
|
|
408
415
|
logging.debug("older version of git detected, changed default branch name to main");
|
|
409
|
-
git("branch -M main");
|
|
416
|
+
exec_1.git.run(["branch", "-M", "main"], opts);
|
|
410
417
|
}
|
|
411
418
|
}
|
|
412
419
|
}
|
|
413
420
|
exports.default = new Command();
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL25ldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsK0NBQWlDO0FBQ2pDLDZDQUErQjtBQUMvQiwyREFBNkM7QUFDN0MsdURBQXlDO0FBQ3pDLHFEQUE0RDtBQUM1RCw2Q0FBMEM7QUFDMUMscUNBT29CO0FBQ3BCLHNDQUE0QztBQUM1QyxrQ0FLaUI7QUFFakIsTUFBTSxPQUFPO0lBQ0ssT0FBTyxHQUFHLG1DQUFtQyxDQUFDO0lBQzlDLFFBQVEsR0FBRztRQUN6Qiw4QkFBOEI7UUFDOUIsRUFBRTtRQUNGLGdGQUFnRjtRQUNoRix1Q0FBdUM7S0FDeEMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFTixPQUFPLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtZQUNuQyxRQUFRLEVBQ04sa0ZBQWtGO1lBQ3BGLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSx3Q0FBd0M7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSw4RUFBOEU7U0FDckYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsR0FBRztZQUNWLElBQUksRUFBRSxzSEFBc0g7U0FDN0gsQ0FBQyxDQUFDO1FBQ0gsSUFB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LDhEQUE4RCxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ1osR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2IsR0FBRyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLEtBQUssQ0FDWCxvRUFBb0UsQ0FDckUsQ0FBQztZQUNGLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELGtCQUFlLElBQUksT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNwYXduU3luY1JldHVybnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQgKiBhcyBpbnZlbnRvcnkgZnJvbSBcIi4uLy4uL2ludmVudG9yeVwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSW5pdFByb2plY3RPcHRpb25IaW50cyB9IGZyb20gXCIuLi8uLi9vcHRpb24taGludHNcIjtcbmltcG9ydCB7IFByb2plY3RzIH0gZnJvbSBcIi4uLy4uL3Byb2plY3RzXCI7XG5pbXBvcnQge1xuICBleGVjLFxuICBleGVjQ2FwdHVyZSxcbiAgZXhlY09yVW5kZWZpbmVkLFxuICBnZXRHaXRWZXJzaW9uLFxuICBpc1RydXRoeSxcbiAgbm9ybWFsaXplUGVyc2lzdGVkUGF0aCxcbn0gZnJvbSBcIi4uLy4uL3V0aWxcIjtcbmltcG9ydCB7IHRyeVByb2Nlc3NNYWNybyB9IGZyb20gXCIuLi9tYWNyb3NcIjtcbmltcG9ydCB7XG4gIENsaUVycm9yLFxuICBmaW5kSnNpaUZpbGVQYXRoLFxuICBpbnN0YWxsUGFja2FnZSxcbiAgcmVuZGVySW5zdGFsbENvbW1hbmQsXG59IGZyb20gXCIuLi91dGlsXCI7XG5cbmNsYXNzIENvbW1hbmQgaW1wbGVtZW50cyB5YXJncy5Db21tYW5kTW9kdWxlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQgPSBcIm5ldyBbUFJPSkVDVC1UWVBFLU5BTUVdIFtPUFRJT05TXVwiO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpYmUgPSBbXG4gICAgXCJDcmVhdGVzIGEgbmV3IHByb2plbiBwcm9qZWN0XCIsXG4gICAgXCJcIixcbiAgICBcIkZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGZvciBhIHNwZWNpZmljIHByb2plY3QgdHlwZSwgcnVuOlwiLFxuICAgIFwicHJvamVuIG5ldyBbUFJPSkVDVC1UWVBFLU5BTUVdIC0taGVscFwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG5cbiAgcHVibGljIGJ1aWxkZXIoYXJnczogeWFyZ3MuQXJndikge1xuICAgIGFyZ3MucG9zaXRpb25hbChcIlBST0pFQ1QtVFlQRS1OQU1FXCIsIHtcbiAgICAgIGRlc2NyaWJlOlxuICAgICAgICBcIm9ubHkgb3B0aW9uYWwgd2l0aCAtLWZyb20gYW5kIHRoZSBleHRlcm5hbCBtb2R1bGUgaGFzIG9ubHkgYSBzaW5nbGUgcHJvamVjdCB0eXBlXCIsXG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwic3ludGhcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJTeW50aGVzaXplIGFmdGVyIGNyZWF0aW5nIC5wcm9qZW5yYy5qc1wiLFxuICAgIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwiY29tbWVudHNcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJJbmNsdWRlIGNvbW1lbnRlZCBvdXQgb3B0aW9ucyBpbiAucHJvamVucmMuanMgKHVzZSAtLW5vLWNvbW1lbnRzIHRvIGRpc2FibGUpXCIsXG4gICAgfSk7XG4gICAgYXJncy5vcHRpb24oXCJmcm9tXCIsIHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBhbGlhczogXCJmXCIsXG4gICAgICBkZXNjOiAnRXh0ZXJuYWwganNpaSBucG0gbW9kdWxlIHRvIGNyZWF0ZSBwcm9qZWN0IGZyb20uIFN1cHBvcnRzIGFueSBwYWNrYWdlIHNwZWMgc3VwcG9ydGVkIGJ5IG5wbSAoc3VjaCBhcyBcIm15LXBhY2tAXjIuMFwiKScsXG4gICAgfSk7XG4gICAgYXJncy5vcHRpb24oXCJnaXRcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJSdW4gYGdpdCBpbml0YCBhbmQgY3JlYXRlIGFuIGluaXRpYWwgY29tbWl0ICh1c2UgLS1uby1naXQgdG8gZGlzYWJsZSlcIixcbiAgICB9KTtcbiAgICBhcmdzLmV4YW1wbGUoXG4gICAgICBcInByb2plbiBuZXcgYXdzY2RrLWFwcC10c1wiLFxuICAgICAgJ0NyZWF0ZXMgYSBuZXcgcHJvamVjdCBvZiBidWlsdC1pbiB0eXBlIFwiYXdzY2RrLWFwcC10c1wiJyxcbiAgICApO1xuICAgIGFyZ3MuZXhhbXBsZShcbiAgICAgIFwicHJvamVuIG5ldyAtLWZyb20gcHJvamVuLXZ1ZUBeMlwiLFxuICAgICAgJ0NyZWF0ZXMgYSBuZXcgcHJvamVjdCBmcm9tIGFuIGV4dGVybmFsIG1vZHVsZSBcInByb2plbi12dWVcIiB3aXRoIHRoZSBzcGVjaWZpZWQgdmVyc2lvbicsXG4gICAgKTtcbiAgICBhcmdzLmV4YW1wbGUoXG4gICAgICBcInByb2plbiBuZXcgcHl0aG9uIC0taGVscFwiLFxuICAgICAgJ1Nob3dzIGFsbCBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGJ1aWx0LWluIHByb2plY3QgdHlwZSBcInB5dGhvblwiJyxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIGludmVudG9yeS5kaXNjb3ZlcigpKSB7XG4gICAgICBhcmdzLmNvbW1hbmQodHlwZS5wamlkLCB0eXBlLmRvY3MgPz8gXCJcIiwge1xuICAgICAgICBidWlsZGVyOiAoY2FyZ3MpID0+IHtcbiAgICAgICAgICBjYXJncy5zaG93SGVscE9uRmFpbChmYWxzZSk7XG4gICAgICAgICAgY2FyZ3Muc3RyaWN0T3B0aW9ucygpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdHlwZS5vcHRpb25zID8/IFtdKSB7XG4gICAgICAgICAgICAvLyBub3QgYWxsIHR5cGVzIGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgY2xpXG4gICAgICAgICAgICBpZiAoIWFyZ1R5cGVTdXBwb3J0ZWQob3B0aW9uKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJnSW5pdGlhbFZhbHVlKG9wdGlvbik7XG4gICAgICAgICAgICBjYXJncy5vcHRpb24ob3B0aW9uLnN3aXRjaCwge1xuICAgICAgICAgICAgICBncm91cDogIW9wdGlvbi5vcHRpb25hbCA/IFwiUmVxdWlyZWQ6XCIgOiBcIk9wdGlvbmFsOlwiLFxuICAgICAgICAgICAgICB0eXBlOiBhcmdUeXBlKG9wdGlvbiksXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhcmdEZXNjKG9wdGlvbiksXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiAhb3B0aW9uLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAvLyB5YXJncyBiZWhhdmVzIGRpZmZlcmVudGx5IGZvciBhcnJheXMgaWYgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSBpcyBwcmVzZW50IG9yIG5vdFxuICAgICAgICAgICAgICAuLi4oIW9wdGlvbi5vcHRpb25hbCAmJiBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICA/IHsgZGVmYXVsdDogZGVmYXVsdFZhbHVlIH1cbiAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcjogKGFyZ3YpID0+IGluaXRQcm9qZWN0KHByb2Nlc3MuY3dkKCksIHR5cGUsIGFyZ3YpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBzdHJpY3QgbW9kZSwgb3RoZXJ3aXNlIHRoZSBjYXRjaC1hbGwgZG9lc24ndCB3b3JrXG4gICAgYXJncy5zdHJpY3RDb21tYW5kcyhmYWxzZSk7XG4gICAgYXJnc1xuICAgICAgLmNvbW1hbmQoe1xuICAgICAgICBjb21tYW5kOiBcIipcIixcbiAgICAgICAgZGVzY3JpYmU6IGZhbHNlLFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgfSlcbiAgICAgIC5taWRkbGV3YXJlKChhcmd2KSA9PiB7XG4gICAgICAgIC8vIG1hbnVhbGx5IHNldCB0aGUgbWF0Y2hlZCBjb21tYW5kIGFzIHRoZSBwcm9qZWN0IHR5cGVcbiAgICAgICAgYXJndi5wcm9qZWN0VHlwZU5hbWUgPSBhcmd2Ll9bMV07XG4gICAgICB9LCB0cnVlKTtcblxuICAgIHJldHVybiBhcmdzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZXIoYXJnczogYW55KSB7XG4gICAgcmV0dXJuIGhhbmRsZXIoYXJncyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihhcmdzOiBhbnkpIHtcbiAgdHJ5IHtcbiAgICAvLyBoYW5kbGUgLS1mcm9tIHdoaWNoIG1lYW5zIHdlIHdhbnQgdG8gZmlyc3QgaW5zdGFsbCBhIGpzaWkgbW9kdWxlIGFuZCB0aGVuXG4gICAgLy8gY3JlYXRlIGEgcHJvamVjdCBkZWZpbmVkIHdpdGhpbiB0aGlzIG1vZHVsZS5cbiAgICBpZiAoYXJncy5mcm9tKSB7XG4gICAgICBhcmdzLmZyb20gPSBub3JtYWxpemVQZXJzaXN0ZWRQYXRoKGFyZ3MuZnJvbSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBpbml0UHJvamVjdEZyb21Nb2R1bGUocHJvY2Vzcy5jd2QoKSwgYXJncy5mcm9tLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBwcm9qZWN0IHR5cGUgaXMgZGVmaW5lZCBidXQgd2FzIG5vdCBtYXRjaGVkIGJ5IHlhcmdzLCBzbyBwcmludCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgdHlwZXNcbiAgICBpZiAoYXJncy5wcm9qZWN0VHlwZU5hbWUpIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gaW52ZW50b3J5LmRpc2NvdmVyKCk7XG4gICAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICAgIGBQcm9qZWN0IHR5cGUgXCIke2FyZ3MucHJvamVjdFR5cGVOYW1lfVwiIG5vdCBmb3VuZC4gQXZhaWxhYmxlIHR5cGVzOlxcbmAsXG4gICAgICAgIC4uLnR5cGVzLm1hcCgodCkgPT4gYCAgICAke3QucGppZH1gKSxcbiAgICAgICAgXCJcIixcbiAgICAgICAgYFBsZWFzZSBzcGVjaWZ5IGEgcHJvamVjdCB0eXBlLmAsXG4gICAgICAgIGBFeGFtcGxlOiBwbnBtIGRseCBwcm9qZW4gbmV3ICR7dHlwZXNbMF0ucGppZH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGVzIHRoZSB1c2UgY2FzZSB0aGF0IG5vdGhpbmcgd2FzIHNwZWNpZmllZCBzaW5jZSBQUk9KRUNULVRZUEUgaXMgbm93IGFuIG9wdGlvbmFsIHBvc2l0aW9uYWwgcGFyYW1ldGVyXG4gICAgeWFyZ3Muc2hvd0hlbHAoKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbGlFcnJvcikge1xuICAgICAgbG9nZ2luZy5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgIGxvZ2dpbmcuZW1wdHkoKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVua25vd24gZXJyb3IsIGxpa2VseSBhIG5vZGUgcnVudGltZSBleGNlcHRpb24gaW4gcHJvamVjdCBjb2RlXG4gICAgLy8gcmV0aHJvdyBzbyB0aGUgZnVsbCBzdGFjayB0cmFjZSBpcyBkaXNwbGF5ZWRcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHlhcmdzIG9wdGlvbiB0eXBlIGZvciBhIGdpdmVuIHByb2plY3Qgb3B0aW9uXG4gKi9cbmZ1bmN0aW9uIGFyZ1R5cGUoXG4gIG9wdGlvbjogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24sXG4pOiBcInN0cmluZ1wiIHwgXCJib29sZWFuXCIgfCBcIm51bWJlclwiIHwgXCJhcnJheVwiIHtcbiAgaWYgKG9wdGlvbi5raW5kID09PSBcImVudW1cIikge1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG5cbiAgaWYgKGlzUHJpbWl0aXZlQXJyYXlPcHRpb24ob3B0aW9uKSkge1xuICAgIHJldHVybiBcImFycmF5XCI7XG4gIH1cblxuICByZXR1cm4gb3B0aW9uLnNpbXBsZVR5cGUgYXMgXCJzdHJpbmdcIiB8IFwiYm9vbGVhblwiIHwgXCJudW1iZXJcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiBmb3IgYSBnaXZlbiBwcm9qZWN0IG9wdGlvblxuICovXG5mdW5jdGlvbiBhcmdEZXNjKG9wdGlvbjogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24pOiBzdHJpbmcge1xuICBsZXQgZGVzYyA9IFtvcHRpb24uZG9jcz8ucmVwbGFjZSgvXFwgKlxcLiQvLCBcIlwiKSA/PyBcIlwiXTtcblxuICBjb25zdCBoZWxwRGVmYXVsdCA9IG9wdGlvbi5pbml0aWFsVmFsdWUgPz8gb3B0aW9uLmRlZmF1bHQ7XG4gIGlmIChvcHRpb24ub3B0aW9uYWwgJiYgaGVscERlZmF1bHQpIHtcbiAgICBkZXNjLnB1c2goXG4gICAgICBgW2RlZmF1bHQ6ICR7aGVscERlZmF1bHQucmVwbGFjZSgvXlxcICotLywgXCJcIikucmVwbGFjZSgvXFwuJC8sIFwiXCIpLnRyaW0oKX1dYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGRlc2Muam9pbihcIiBcIik7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgYSBnaXZlbiBwcm9qZWN0IG9wdGlvblxuICovXG5mdW5jdGlvbiBhcmdJbml0aWFsVmFsdWUoXG4gIG9wdGlvbjogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24sXG4gIGN3ZCA9IHByb2Nlc3MuY3dkKCksXG4pOiBhbnkge1xuICAvLyBpZiB3ZSBoYXZlIGRldGVybWluZWQgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkXG4gIC8vIHdlIGNhbiBzaG93IHRoYXQgdmFsdWUgaW4gLS1oZWxwXG4gIGlmIChvcHRpb24uaW5pdGlhbFZhbHVlKSB7XG4gICAgcmV0dXJuIHJlbmRlckRlZmF1bHQoY3dkLCBvcHRpb24uaW5pdGlhbFZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgdGhlc2UgZmllbGQgdHlwZXMgYXMgY29tbWFuZCBsaW5lIG9wdGlvbnM6XG4gKiAtIHByaW1pdGl2ZXMgKHN0cmluZywgbnVtYmVyLCBib29sZWFuKVxuICogLSBsaXN0cyBvZiBwcmltaXRpdmVzXG4gKiAtIGVudW1zXG4gKi9cbmZ1bmN0aW9uIGFyZ1R5cGVTdXBwb3J0ZWQob3B0aW9uOiBpbnZlbnRvcnkuSW52ZW50b3J5UHJvamVjdE9wdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIG9wdGlvbi5zaW1wbGVUeXBlID09PSBcInN0cmluZ1wiIHx8XG4gICAgb3B0aW9uLnNpbXBsZVR5cGUgPT09IFwibnVtYmVyXCIgfHxcbiAgICBvcHRpb24uc2ltcGxlVHlwZSA9PT0gXCJib29sZWFuXCIgfHxcbiAgICBvcHRpb24ua2luZCA9PT0gXCJlbnVtXCIgfHxcbiAgICBpc1ByaW1pdGl2ZUFycmF5T3B0aW9uKG9wdGlvbilcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIG9wdGlvbiBpcyBhIHByaW1pdGl2ZSBhcnJheVxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZUFycmF5T3B0aW9uKFxuICBvcHRpb246IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0T3B0aW9uLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIG9wdGlvbi5qc29uTGlrZSAmJlxuICAgIG9wdGlvbi50eXBlLmNvbGxlY3Rpb24/LmtpbmQgPT09IFwiYXJyYXlcIiAmJlxuICAgIG9wdGlvbi50eXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUucHJpbWl0aXZlICYmXG4gICAgW1wic3RyaW5nXCIsIFwibnVtYmVyXCJdLmluY2x1ZGVzKG9wdGlvbi50eXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUucHJpbWl0aXZlKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIHZhbHVlIGZyb20gXCJAZGVmYXVsdFwiLCBwcm9jZXNzZXMgbWFjcm9zIGFuZCByZXR1cm5zIGEgc3RyaW5naWZpZWRcbiAqIChxdW90ZWQpIHJlc3VsdC5cbiAqXG4gKiBAcmV0dXJucyBhIGphdmFzY3JpcHQgcHJpbWl0aXZlIChjb3VsZCBiZSBhIHN0cmluZywgbnVtYmVyIG9yIGJvb2xlYW4pXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckRlZmF1bHQoY3dkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHRyeVByb2Nlc3NNYWNybyhjd2QsIHZhbHVlKSA/PyBKU09OLnBhcnNlKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB5YXJncyBjb21tYW5kIGxpbmUgc3dpdGNoZXMgdG8gcHJvamVjdCB0eXBlIHByb3BzLlxuICogQHBhcmFtIHR5cGUgUHJvamVjdCB0eXBlXG4gKiBAcGFyYW0gYXJndiBDb21tYW5kIGxpbmUgc3dpdGNoZXNcbiAqL1xuZnVuY3Rpb24gY29tbWFuZExpbmVUb1Byb3BzKFxuICBjd2Q6IHN0cmluZyxcbiAgdHlwZTogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RUeXBlLFxuICBhcmd2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGluaXRpYWxpemUgcHJvcHMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICBmb3IgKGNvbnN0IHByb3Agb2YgdHlwZS5vcHRpb25zKSB7XG4gICAgcHJvcHNbcHJvcC5uYW1lXSA9IGFyZ0luaXRpYWxWYWx1ZShwcm9wLCBjd2QpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbYXJnLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXJndikpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdHlwZS5vcHRpb25zKSB7XG4gICAgICBpZiAocHJvcC5zd2l0Y2ggPT09IGFyZykge1xuICAgICAgICBsZXQgY3VyciA9IHByb3BzO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IFsuLi5wcm9wLnBhdGhdO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHAgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGN1cnJbcF0gPSB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycltwXSA9IGN1cnJbcF0gPz8ge307XG4gICAgICAgICAgICBjdXJyID0gY3VycltwXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvcHM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IHByb2plY3QgZnJvbSBhbiBleHRlcm5hbCBtb2R1bGUuXG4gKlxuICogQHBhcmFtIHNwZWMgVGhlIG5hbWUgb2YgdGhlIGV4dGVybmFsIG1vZHVsZSB0byBsb2FkXG4gKiBAcGFyYW0gYXJncyBDb21tYW5kIGxpbmUgYXJndW1lbnRzIChpbmNsLiBwcm9qZWN0IHR5cGUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRQcm9qZWN0RnJvbU1vZHVsZShiYXNlRGlyOiBzdHJpbmcsIHNwZWM6IHN0cmluZywgYXJnczogYW55KSB7XG4gIGNvbnN0IHByb2plblZlcnNpb24gPSBhcmdzLnByb2plblZlcnNpb24gPz8gXCJsYXRlc3RcIjtcbiAgY29uc3QgaW5zdGFsbENvbW1hbmQgPSByZW5kZXJJbnN0YWxsQ29tbWFuZChcbiAgICBiYXNlRGlyLFxuICAgIGBwcm9qZW5AJHtwcm9qZW5WZXJzaW9ufWAsXG4gICk7XG4gIGlmIChhcmdzLnByb2plblZlcnNpb24pIHtcbiAgICBleGVjKGluc3RhbGxDb21tYW5kLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBkbyBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGluc3RhbGxhdGlvblxuICAgIGV4ZWMoXG4gICAgICBgbnBtIGxzIC0tcHJlZml4PVwiJHtiYXNlRGlyfVwiIC0tZGVwdGg9MCAtLXBhdHRlcm4gcHJvamVuIHx8ICR7aW5zdGFsbENvbW1hbmR9YCxcbiAgICAgIHsgY3dkOiBiYXNlRGlyIH0sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluc3RhbGxQYWNrYWdlV2l0aENsaUVycm9yID0gKGI6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGluc3RhbGxQYWNrYWdlKGIsIHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBzdGRlcnIgPVxuICAgICAgICAoZXJyb3IgYXMgU3Bhd25TeW5jUmV0dXJuczxCdWZmZXI+KT8uc3RkZXJyPy50b1N0cmluZygpID8/IFwiXCI7XG4gICAgICBjb25zdCBpc0xvY2FsID0gc3RkZXJyLmluY2x1ZGVzKFwiY29kZSBFTk9FTlRcIik7XG4gICAgICBjb25zdCBpc1JlZ2lzdHJ5ID0gc3RkZXJyLmluY2x1ZGVzKFwiY29kZSBFNDA0XCIpO1xuICAgICAgaWYgKGlzTG9jYWwgfHwgaXNSZWdpc3RyeSkge1xuICAgICAgICBjb25zdCBtb2R1bGVTb3VyY2UgPSBpc0xvY2FsID8gXCJwYXRoXCIgOiBcInJlZ2lzdHJ5XCI7XG4gICAgICAgIHRocm93IG5ldyBDbGlFcnJvcihcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgJyR7c30nIGluIHRoaXMgJHttb2R1bGVTb3VyY2V9LiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHBhY2thZ2UgZXhpc3RzLCB5b3UgaGF2ZSBhY2Nlc3MgaXQgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbW9kdWxlTmFtZSA9IGluc3RhbGxQYWNrYWdlV2l0aENsaUVycm9yKGJhc2VEaXIsIHNwZWMpO1xuICBsb2dnaW5nLmVtcHR5KCk7XG5cbiAgLy8gRmluZCB0aGUganVzdCBpbnN0YWxsZWQgcGFja2FnZSBhbmQgZGlzY292ZXIgdGhlIHJlc3QgcmVjdXJzaXZlbHkgZnJvbSB0aGlzIHBhY2thZ2UgZm9sZGVyXG4gIGNvbnN0IG1vZHVsZURpciA9IGZpbmRKc2lpRmlsZVBhdGgoYmFzZURpciwgbW9kdWxlTmFtZSk7XG5cbiAgaWYgKCFtb2R1bGVEaXIpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICBgTW9kdWxlICcke21vZHVsZU5hbWV9JyBkb2VzIG5vdCBsb29rIGxpa2UgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHByb2plbi4gUmVhc29uOiBDYW5ub3QgZmluZCAnJHttb2R1bGVOYW1lfS8uanNpaScuIEFsbCBwcm9qZW4gbW9kdWxlcyBtdXN0IGJlIGpzaWkgbW9kdWxlcyFgLFxuICAgICk7XG4gIH1cblxuICAvLyBPbmx5IGxlYXZlIHByb2plY3RzIGZyb20gdGhlIG1haW4gKHJlcXVlc3RlZCkgcGFja2FnZVxuICBjb25zdCBwcm9qZWN0cyA9IGludmVudG9yeVxuICAgIC5kaXNjb3Zlcihtb2R1bGVEaXIpXG4gICAgLmZpbHRlcigoeCkgPT4geC5tb2R1bGVOYW1lID09PSBtb2R1bGVOYW1lKTsgLy8gT25seSBsaXN0IHByb2plY3QgdHlwZXMgZnJvbSB0aGUgcmVxdWVzdGVkICdmcm9tJyBtb2R1bGVcblxuICBpZiAocHJvamVjdHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihcbiAgICAgIGBObyBwcm9qZWN0IHR5cGVzIGZvdW5kIGFmdGVyIGluc3RhbGxpbmcgXCIke3NwZWN9XCIuIFRoZSBtb2R1bGUgbXVzdCBleHBvcnQgYXQgbGVhc3Qgb25lIGNsYXNzIHdoaWNoIGV4dGVuZHMgXCJwcm9qZW4uUHJvamVjdFwiLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RlZCA9IGFyZ3MucHJvamVjdFR5cGVOYW1lO1xuICBjb25zdCB0eXBlcyA9IHByb2plY3RzLm1hcCgocCkgPT4gcC5wamlkKTtcblxuICAvLyBpZiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhIHByb2plY3QgdHlwZSBidXQgdGhlIG1vZHVsZSBoYXMgbW9yZSB0aGFuIG9uZSwgd2UgbmVlZCB0aGVtIHRvIHRlbGwgdXMgd2hpY2ggb25lLi4uXG4gIGlmICghcmVxdWVzdGVkICYmIHByb2plY3RzLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICBgTXVsdGlwbGUgcHJvamVjdCB0eXBlcyBmb3VuZCBhZnRlciBpbnN0YWxsaW5nIFwiJHtzcGVjfVwiOlxcbmAsXG4gICAgICAuLi50eXBlcy5tYXAoKHQpID0+IGAgICAgJHt0fWApLFxuICAgICAgXCJcIixcbiAgICAgIGBQbGVhc2Ugc3BlY2lmeSBhIHByb2plY3QgdHlwZS5gLFxuICAgICAgYEV4YW1wbGU6IHBucG0gZGx4IHByb2plbiBuZXcgLS1mcm9tICR7c3BlY30gJHt0eXBlc1swXX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBpZiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhIHR5cGUgKGFuZCB3ZSBrbm93IHdlIGhhdmUgb25seSBvbmUpLCB0aGUgc2VsZWN0IGl0LiBvdGhlcndpc2UsIHNlYXJjaCBieSBwamlkLlxuICBjb25zdCB0eXBlID0gIXJlcXVlc3RlZFxuICAgID8gcHJvamVjdHNbMF1cbiAgICA6IHByb2plY3RzLmZpbmQoKHApID0+IHAucGppZCA9PT0gcmVxdWVzdGVkKTtcbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgYFByb2plY3QgdHlwZSBcIiR7cmVxdWVzdGVkfVwiIG5vdCBmb3VuZCBpbiBcIiR7c3BlY31cIi4gRm91bmQ6XFxuYCxcbiAgICAgIC4uLnR5cGVzLm1hcCgodCkgPT4gYCAgICAke3R9YCksXG4gICAgICBcIlwiLFxuICAgICAgYFBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgcHJvamVjdCB0eXBlLmAsXG4gICAgICBgRXhhbXBsZTogcG5wbSBkbHggcHJvamVuIG5ldyAtLWZyb20gJHtzcGVjfSAke3R5cGVzWzBdfWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1pc3NpbmdPcHRpb25zID0gW107XG5cbiAgZm9yIChjb25zdCBvcHRpb24gb2YgdHlwZS5vcHRpb25zID8/IFtdKSB7XG4gICAgLy8gbm90IGFsbCB0eXBlcyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gdGhlIGNsaVxuICAgIGlmICghYXJnVHlwZVN1cHBvcnRlZChvcHRpb24pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSBhbGxvd2VkIHR5cGVzXG4gICAgaWYgKGFyZ3Nbb3B0aW9uLm5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZ3Nbb3B0aW9uLm5hbWVdID0gcGFyc2VBcmcoYXJnc1tvcHRpb24ubmFtZV0sIGFyZ1R5cGUob3B0aW9uKSwgb3B0aW9uKTtcbiAgICAgIGFyZ3Nbb3B0aW9uLnN3aXRjaF0gPSBhcmdzW29wdGlvbi5uYW1lXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFJlcXVpcmVkIG9wdGlvbiB3aXRoIGEgZGVmYXVsdFxuICAgIGlmICghb3B0aW9uLm9wdGlvbmFsICYmIG9wdGlvbi5kZWZhdWx0ICYmIG9wdGlvbi5kZWZhdWx0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSByZW5kZXJEZWZhdWx0KGJhc2VEaXIsIG9wdGlvbi5kZWZhdWx0KTtcbiAgICAgIGFyZ3Nbb3B0aW9uLm5hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgYXJnc1tvcHRpb24uc3dpdGNoXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBSZXF1aXJlZCBvcHRpb24sIGJ1dCB3ZSBjb3VsZCBub3QgZmluZCBhIHZhbHVlXG4gICAgaWYgKCFvcHRpb24ub3B0aW9uYWwgJiYgIWFyZ3Nbb3B0aW9uLm5hbWVdKSB7XG4gICAgICBtaXNzaW5nT3B0aW9ucy5wdXNoKFxuICAgICAgICBgLS0ke29wdGlvbi5zd2l0Y2h9IFske2FyZ1R5cGUob3B0aW9uKX1dICR7YXJnRGVzYyhvcHRpb24pfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIGFyZSBtaXNzaW5nIHNvbWUgcmVxdWlyZWQgb3B0aW9uc1xuICBpZiAobWlzc2luZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgYENhbm5vdCBjcmVhdGUgXCIke3R5cGUuZnFufVwiLiBNaXNzaW5nIHJlcXVpcmVkIG9wdGlvbiR7XG4gICAgICAgIG1pc3NpbmdPcHRpb25zLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJcbiAgICAgIH06YCxcbiAgICAgIC4uLm1pc3NpbmdPcHRpb25zLm1hcCgobSkgPT4gYCAgICAke219YCksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGluY2x1ZGUgYSBkZXYgZGVwZW5kZW5jeSBmb3IgdGhlIGV4dGVybmFsIG1vZHVsZVxuICBhcmdzLmRldkRlcHMgPSBbc3BlY107XG4gIGFyZ3NbXCJkZXYtZGVwc1wiXSA9IFtzcGVjXTtcblxuICBhd2FpdCBpbml0UHJvamVjdChiYXNlRGlyLCB0eXBlLCBhcmdzKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBjb21tYW5kIGxpbmUgdmFsdWUgYXMgb3B0aW9uIHR5cGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VBcmcoXG4gIHZhbHVlOiBhbnksXG4gIHR5cGU6IHN0cmluZyxcbiAgb3B0aW9uPzogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24sXG4pOiBhbnkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gaXNUcnV0aHkodmFsdWUpIDogdmFsdWU7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHY6IGFueSkgPT5cbiAgICAgICAgcGFyc2VBcmcodiwgb3B0aW9uPy50eXBlLmNvbGxlY3Rpb24/LmVsZW1lbnR0eXBlLnByaW1pdGl2ZSB8fCBcInN0cmluZ1wiKSxcbiAgICAgICk7XG4gICAgLy8gcmV0dXJuIHZhbHVlIHVuY2hhbmdlZFxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gaWYgd2UgaGF2ZSBhbiB1bmV4cGVjdGVkIGFycmF5LCB1c2UgdGhlIGZpcnN0IGVsZW1lbnRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgcHJvamVjdC5cbiAqIEBwYXJhbSB0eXBlIFByb2plY3QgdHlwZVxuICogQHBhcmFtIGFyZ3MgQ29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuICogQHBhcmFtIGFkZGl0aW9uYWxQcm9wcyBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gaW5jbHVkZSBpbiAucHJvamVucmMuanNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdFByb2plY3QoXG4gIGJhc2VEaXI6IHN0cmluZyxcbiAgdHlwZTogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RUeXBlLFxuICBhcmdzOiBhbnksXG4pIHtcbiAgLy8gY29udmVydCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIHByb2plY3QgcHJvcHMgdXNpbmcgdHlwZSBpbmZvcm1hdGlvblxuICBjb25zdCBwcm9wcyA9IGNvbW1hbmRMaW5lVG9Qcm9wcyhiYXNlRGlyLCB0eXBlLCBhcmdzKTtcblxuICBQcm9qZWN0cy5jcmVhdGVQcm9qZWN0KHtcbiAgICBkaXI6IHByb3BzLm91dGRpciA/PyBiYXNlRGlyLFxuICAgIHByb2plY3RGcW46IHR5cGUuZnFuLFxuICAgIHByb2plY3RPcHRpb25zOiBwcm9wcyxcbiAgICBvcHRpb25IaW50czogYXJncy5jb21tZW50c1xuICAgICAgPyBJbml0UHJvamVjdE9wdGlvbkhpbnRzLkZFQVRVUkVEXG4gICAgICA6IEluaXRQcm9qZWN0T3B0aW9uSGludHMuTk9ORSxcbiAgICBzeW50aDogYXJncy5zeW50aCxcbiAgICBwb3N0OiBhcmdzLnBvc3QsXG4gIH0pO1xuXG4gIGlmIChmcy5leGlzdHNTeW5jKHBhdGguam9pbihiYXNlRGlyLCBcInBhY2thZ2UuanNvblwiKSkgJiYgYXJncy5wb3N0KSB7XG4gICAgZXhlYyhcIm5wbSBydW4gZXNsaW50IC0taWYtcHJlc2VudFwiLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfVxuXG4gIGlmIChhcmdzLmdpdCkge1xuICAgIGNvbnN0IGdpdCA9IChjbWQ6IHN0cmluZykgPT4gZXhlYyhgZ2l0ICR7Y21kfWAsIHsgY3dkOiBiYXNlRGlyIH0pO1xuICAgIGNvbnN0IGdpdHZlcnNpb246IHN0cmluZyA9IGdldEdpdFZlcnNpb24oXG4gICAgICBleGVjQ2FwdHVyZShcImdpdCAtLXZlcnNpb25cIiwgeyBjd2Q6IGJhc2VEaXIgfSkudG9TdHJpbmcoKSxcbiAgICApO1xuICAgIGxvZ2dpbmcuZGVidWcoXCJzeXN0ZW0gdXNpbmcgZ2l0IHZlcnNpb24gXCIsIGdpdHZlcnNpb24pO1xuICAgIC8vIGBnaXQgY29uZmlnIGluaXQuZGVmYXVsdEJyYW5jaGAgYW5kIGBnaXQgaW5pdCAtYmAgYXJlIG9ubHkgYXZhaWxhYmxlIHNpbmNlIGdpdCAyLjI4LjBcbiAgICBpZiAoZ2l0dmVyc2lvbiAmJiBzZW12ZXIuZ3RlKGdpdHZlcnNpb24sIFwiMi4yOC4wXCIpKSB7XG4gICAgICBjb25zdCBkZWZhdWx0R2l0SW5pdEJyYW5jaCA9XG4gICAgICAgIGV4ZWNPclVuZGVmaW5lZChcImdpdCBjb25maWcgaW5pdC5kZWZhdWx0QnJhbmNoXCIsIHtcbiAgICAgICAgICBjd2Q6IGJhc2VEaXIsXG4gICAgICAgIH0pPy50cmltKCkgfHwgXCJtYWluXCI7XG4gICAgICBnaXQoYGluaXQgLWIgJHtkZWZhdWx0R2l0SW5pdEJyYW5jaH1gKTtcbiAgICAgIGdpdChcImFkZCAuXCIpO1xuICAgICAgZ2l0KCdjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBcImNob3JlOiBwcm9qZWN0IGNyZWF0ZWQgd2l0aCBwcm9qZW5cIicpO1xuICAgICAgbG9nZ2luZy5kZWJ1ZyhgZGVmYXVsdCBicmFuY2ggbmFtZSBzZXQgdG8gJHtkZWZhdWx0R2l0SW5pdEJyYW5jaH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2l0KFwiaW5pdFwiKTtcbiAgICAgIGdpdChcImFkZCAuXCIpO1xuICAgICAgZ2l0KCdjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBcImNob3JlOiBwcm9qZWN0IGNyZWF0ZWQgd2l0aCBwcm9qZW5cIicpO1xuICAgICAgbG9nZ2luZy5kZWJ1ZyhcbiAgICAgICAgXCJvbGRlciB2ZXJzaW9uIG9mIGdpdCBkZXRlY3RlZCwgY2hhbmdlZCBkZWZhdWx0IGJyYW5jaCBuYW1lIHRvIG1haW5cIixcbiAgICAgICk7XG4gICAgICBnaXQoXCJicmFuY2ggLU0gbWFpblwiKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IENvbW1hbmQoKTtcbiJdfQ==
|
|
421
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL25ldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsK0NBQWlDO0FBQ2pDLDZDQUErQjtBQUMvQiwyREFBNkM7QUFDN0MsdURBQXlDO0FBQ3pDLHFEQUE0RDtBQUM1RCw2Q0FBMEM7QUFDMUMscUNBQTZFO0FBQzdFLDBDQUEyQztBQUMzQyxzQ0FBNEM7QUFDNUMsa0NBS2lCO0FBRWpCLE1BQU0sT0FBTztJQUNLLE9BQU8sR0FBRyxtQ0FBbUMsQ0FBQztJQUM5QyxRQUFRLEdBQUc7UUFDekIsOEJBQThCO1FBQzlCLEVBQUU7UUFDRixnRkFBZ0Y7UUFDaEYsdUNBQXVDO0tBQ3hDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRU4sT0FBTyxDQUFDLElBQWdCO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUU7WUFDbkMsUUFBUSxFQUNOLGtGQUFrRjtZQUNwRixJQUFJLEVBQUUsUUFBUTtTQUNmLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ25CLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLElBQUk7WUFDYixJQUFJLEVBQUUsd0NBQXdDO1NBQy9DLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3RCLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLElBQUk7WUFDYixJQUFJLEVBQUUsOEVBQThFO1NBQ3JGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLEdBQUc7WUFDVixJQUFJLEVBQUUsc0hBQXNIO1NBQzdILENBQUMs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QUMsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUU7Z0JBQzlELE1BQU0sQ0FBQztZQUNULFVBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEQsVUFBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QixVQUFHLENBQUMsR0FBRyxDQUNMLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsb0NBQW9DLENBQUMsRUFDdkUsSUFBSSxDQUNMLENBQUM7WUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDTixVQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEIsVUFBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QixVQUFHLENBQUMsR0FBRyxDQUNMLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsb0NBQW9DLENBQUMsRUFDdkUsSUFBSSxDQUNMLENBQUM7WUFDRixPQUFPLENBQUMsS0FBSyxDQUNYLG9FQUFvRSxDQUNyRSxDQUFDO1lBQ0YsVUFBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsa0JBQWUsSUFBSSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gXCJ5YXJnc1wiO1xuaW1wb3J0ICogYXMgaW52ZW50b3J5IGZyb20gXCIuLi8uLi9pbnZlbnRvcnlcIjtcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSBcIi4uLy4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEluaXRQcm9qZWN0T3B0aW9uSGludHMgfSBmcm9tIFwiLi4vLi4vb3B0aW9uLWhpbnRzXCI7XG5pbXBvcnQgeyBQcm9qZWN0cyB9IGZyb20gXCIuLi8uLi9wcm9qZWN0c1wiO1xuaW1wb3J0IHsgZ2V0R2l0VmVyc2lvbiwgaXNUcnV0aHksIG5vcm1hbGl6ZVBlcnNpc3RlZFBhdGggfSBmcm9tIFwiLi4vLi4vdXRpbFwiO1xuaW1wb3J0IHsgZ2l0LCBucG0gfSBmcm9tIFwiLi4vLi4vdXRpbC9leGVjXCI7XG5pbXBvcnQgeyB0cnlQcm9jZXNzTWFjcm8gfSBmcm9tIFwiLi4vbWFjcm9zXCI7XG5pbXBvcnQge1xuICBDbGlFcnJvcixcbiAgZmluZEpzaWlGaWxlUGF0aCxcbiAgaW5zdGFsbFBhY2thZ2UsXG4gIHJlbmRlckluc3RhbGxBcmdzLFxufSBmcm9tIFwiLi4vdXRpbFwiO1xuXG5jbGFzcyBDb21tYW5kIGltcGxlbWVudHMgeWFyZ3MuQ29tbWFuZE1vZHVsZSB7XG4gIHB1YmxpYyByZWFkb25seSBjb21tYW5kID0gXCJuZXcgW1BST0pFQ1QtVFlQRS1OQU1FXSBbT1BUSU9OU11cIjtcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaWJlID0gW1xuICAgIFwiQ3JlYXRlcyBhIG5ldyBwcm9qZW4gcHJvamVjdFwiLFxuICAgIFwiXCIsXG4gICAgXCJGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBmb3IgYSBzcGVjaWZpYyBwcm9qZWN0IHR5cGUsIHJ1bjpcIixcbiAgICBcInByb2plbiBuZXcgW1BST0pFQ1QtVFlQRS1OQU1FXSAtLWhlbHBcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuXG4gIHB1YmxpYyBidWlsZGVyKGFyZ3M6IHlhcmdzLkFyZ3YpIHtcbiAgICBhcmdzLnBvc2l0aW9uYWwoXCJQUk9KRUNULVRZUEUtTkFNRVwiLCB7XG4gICAgICBkZXNjcmliZTpcbiAgICAgICAgXCJvbmx5IG9wdGlvbmFsIHdpdGggLS1mcm9tIGFuZCB0aGUgZXh0ZXJuYWwgbW9kdWxlIGhhcyBvbmx5IGEgc2luZ2xlIHByb2plY3QgdHlwZVwiLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICB9KTtcbiAgICBhcmdzLm9wdGlvbihcInN5bnRoXCIsIHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIGRlc2M6IFwiU3ludGhlc2l6ZSBhZnRlciBjcmVhdGluZyAucHJvamVucmMuanNcIixcbiAgICB9KTtcbiAgICBhcmdzLm9wdGlvbihcImNvbW1lbnRzXCIsIHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIGRlc2M6IFwiSW5jbHVkZSBjb21tZW50ZWQgb3V0IG9wdGlvbnMgaW4gLnByb2plbnJjLmpzICh1c2UgLS1uby1jb21tZW50cyB0byBkaXNhYmxlKVwiLFxuICAgIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwiZnJvbVwiLCB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgYWxpYXM6IFwiZlwiLFxuICAgICAgZGVzYzogJ0V4dGVybmFsIGpzaWkgbnBtIG1vZHVsZSB0byBjcmVhdGUgcHJvamVjdCBmcm9tLiBTdXBwb3J0cyBhbnkgcGFja2FnZSBzcGVjIHN1cHBvcnRlZCBieSBucG0gKHN1Y2ggYXMgXCJteS1wYWNrQF4yLjBcIiknLFxuICAgIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwiZ2l0XCIsIHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIGRlc2M6IFwiUnVuIGBnaXQgaW5pdGAgYW5kIGNyZWF0ZSBhbiBpbml0aWFsIGNvbW1pdCAodXNlIC0tbm8tZ2l0IHRvIGRpc2FibGUpXCIsXG4gICAgfSk7XG4gICAgYXJncy5leGFtcGxlKFxuICAgICAgXCJwcm9qZW4gbmV3IGF3c2Nkay1hcHAtdHNcIixcbiAgICAgICdDcmVhdGVzIGEgbmV3IHByb2plY3Qgb2YgYnVpbHQtaW4gdHlwZSBcImF3c2Nkay1hcHAtdHNcIicsXG4gICAgKTtcbiAgICBhcmdzLmV4YW1wbGUoXG4gICAgICBcInByb2plbiBuZXcgLS1mcm9tIHByb2plbi12dWVAXjJcIixcbiAgICAgICdDcmVhdGVzIGEgbmV3IHByb2plY3QgZnJvbSBhbiBleHRlcm5hbCBtb2R1bGUgXCJwcm9qZW4tdnVlXCIgd2l0aCB0aGUgc3BlY2lmaWVkIHZlcnNpb24nLFxuICAgICk7XG4gICAgYXJncy5leGFtcGxlKFxuICAgICAgXCJwcm9qZW4gbmV3IHB5dGhvbiAtLWhlbHBcIixcbiAgICAgICdTaG93cyBhbGwgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBidWlsdC1pbiBwcm9qZWN0IHR5cGUgXCJweXRob25cIicsXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiBpbnZlbnRvcnkuZGlzY292ZXIoKSkge1xuICAgICAgYXJncy5jb21tYW5kKHR5cGUucGppZCwgdHlwZS5kb2NzID8/IFwiXCIsIHtcbiAgICAgICAgYnVpbGRlcjogKGNhcmdzKSA9PiB7XG4gICAgICAgICAgY2FyZ3Muc2hvd0hlbHBPbkZhaWwoZmFsc2UpO1xuICAgICAgICAgIGNhcmdzLnN0cmljdE9wdGlvbnMoKTtcblxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHR5cGUub3B0aW9ucyA/PyBbXSkge1xuICAgICAgICAgICAgLy8gbm90IGFsbCB0eXBlcyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gdGhlIGNsaVxuICAgICAgICAgICAgaWYgKCFhcmdUeXBlU3VwcG9ydGVkKG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGFyZ0luaXRpYWxWYWx1ZShvcHRpb24pO1xuICAgICAgICAgICAgY2FyZ3Mub3B0aW9uKG9wdGlvbi5zd2l0Y2gsIHtcbiAgICAgICAgICAgICAgZ3JvdXA6ICFvcHRpb24ub3B0aW9uYWwgPyBcIlJlcXVpcmVkOlwiIDogXCJPcHRpb25hbDpcIixcbiAgICAgICAgICAgICAgdHlwZTogYXJnVHlwZShvcHRpb24pLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYXJnRGVzYyhvcHRpb24pLFxuICAgICAgICAgICAgICByZXF1aXJlZDogIW9wdGlvbi5vcHRpb25hbCxcbiAgICAgICAgICAgICAgLy8geWFyZ3MgYmVoYXZlcyBkaWZmZXJlbnRseSBmb3IgYXJyYXlzIGlmIHRoZSBkZWZhdWx0VmFsdWUgcHJvcGVydHkgaXMgcHJlc2VudCBvciBub3RcbiAgICAgICAgICAgICAgLi4uKCFvcHRpb24ub3B0aW9uYWwgJiYgZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgPyB7IGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY2FyZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXI6IChhcmd2KSA9PiBpbml0UHJvamVjdChwcm9jZXNzLmN3ZCgpLCB0eXBlLCBhcmd2KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIERpc2FibGUgc3RyaWN0IG1vZGUsIG90aGVyd2lzZSB0aGUgY2F0Y2gtYWxsIGRvZXNuJ3Qgd29ya1xuICAgIGFyZ3Muc3RyaWN0Q29tbWFuZHMoZmFsc2UpO1xuICAgIGFyZ3NcbiAgICAgIC5jb21tYW5kKHtcbiAgICAgICAgY29tbWFuZDogXCIqXCIsXG4gICAgICAgIGRlc2NyaWJlOiBmYWxzZSxcbiAgICAgICAgaGFuZGxlcixcbiAgICAgIH0pXG4gICAgICAubWlkZGxld2FyZSgoYXJndikgPT4ge1xuICAgICAgICAvLyBtYW51YWxseSBzZXQgdGhlIG1hdGNoZWQgY29tbWFuZCBhcyB0aGUgcHJvamVjdCB0eXBlXG4gICAgICAgIGFyZ3YucHJvamVjdFR5cGVOYW1lID0gYXJndi5fWzFdO1xuICAgICAgfSwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gYXJncztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVyKGFyZ3M6IGFueSkge1xuICAgIHJldHVybiBoYW5kbGVyKGFyZ3MpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoYXJnczogYW55KSB7XG4gIHRyeSB7XG4gICAgLy8gaGFuZGxlIC0tZnJvbSB3aGljaCBtZWFucyB3ZSB3YW50IHRvIGZpcnN0IGluc3RhbGwgYSBqc2lpIG1vZHVsZSBhbmQgdGhlblxuICAgIC8vIGNyZWF0ZSBhIHByb2plY3QgZGVmaW5lZCB3aXRoaW4gdGhpcyBtb2R1bGUuXG4gICAgaWYgKGFyZ3MuZnJvbSkge1xuICAgICAgYXJncy5mcm9tID0gbm9ybWFsaXplUGVyc2lzdGVkUGF0aChhcmdzLmZyb20pO1xuXG4gICAgICByZXR1cm4gYXdhaXQgaW5pdFByb2plY3RGcm9tTW9kdWxlKHByb2Nlc3MuY3dkKCksIGFyZ3MuZnJvbSwgYXJncyk7XG4gICAgfVxuXG4gICAgLy8gcHJvamVjdCB0eXBlIGlzIGRlZmluZWQgYnV0IHdhcyBub3QgbWF0Y2hlZCBieSB5YXJncywgc28gcHJpbnQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHR5cGVzXG4gICAgaWYgKGFyZ3MucHJvamVjdFR5cGVOYW1lKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IGludmVudG9yeS5kaXNjb3ZlcigpO1xuICAgICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgICBgUHJvamVjdCB0eXBlIFwiJHthcmdzLnByb2plY3RUeXBlTmFtZX1cIiBub3QgZm91bmQuIEF2YWlsYWJsZSB0eXBlczpcXG5gLFxuICAgICAgICAuLi50eXBlcy5tYXAoKHQpID0+IGAgICAgJHt0LnBqaWR9YCksXG4gICAgICAgIFwiXCIsXG4gICAgICAgIGBQbGVhc2Ugc3BlY2lmeSBhIHByb2plY3QgdHlwZS5gLFxuICAgICAgICBgRXhhbXBsZTogcG5wbSBkbHggcHJvamVuIG5ldyAke3R5cGVzWzBdLnBqaWR9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlcyB0aGUgdXNlIGNhc2UgdGhhdCBub3RoaW5nIHdhcyBzcGVjaWZpZWQgc2luY2UgUFJPSkVDVC1UWVBFIGlzIG5vdyBhbiBvcHRpb25hbCBwb3NpdGlvbmFsIHBhcmFtZXRlclxuICAgIHlhcmdzLnNob3dIZWxwKCk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2xpRXJyb3IpIHtcbiAgICAgIGxvZ2dpbmcuZXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICBsb2dnaW5nLmVtcHR5KCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1bmtub3duIGVycm9yLCBsaWtlbHkgYSBub2RlIHJ1bnRpbWUgZXhjZXB0aW9uIGluIHByb2plY3QgY29kZVxuICAgIC8vIHJldGhyb3cgc28gdGhlIGZ1bGwgc3RhY2sgdHJhY2UgaXMgZGlzcGxheWVkXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB5YXJncyBvcHRpb24gdHlwZSBmb3IgYSBnaXZlbiBwcm9qZWN0IG9wdGlvblxuICovXG5mdW5jdGlvbiBhcmdUeXBlKFxuICBvcHRpb246IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0T3B0aW9uLFxuKTogXCJzdHJpbmdcIiB8IFwiYm9vbGVhblwiIHwgXCJudW1iZXJcIiB8IFwiYXJyYXlcIiB7XG4gIGlmIChvcHRpb24ua2luZCA9PT0gXCJlbnVtXCIpIHtcbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuXG4gIGlmIChpc1ByaW1pdGl2ZUFycmF5T3B0aW9uKG9wdGlvbikpIHtcbiAgICByZXR1cm4gXCJhcnJheVwiO1xuICB9XG5cbiAgcmV0dXJuIG9wdGlvbi5zaW1wbGVUeXBlIGFzIFwic3RyaW5nXCIgfCBcImJvb2xlYW5cIiB8IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVzY3JpcHRpb24gZm9yIGEgZ2l2ZW4gcHJvamVjdCBvcHRpb25cbiAqL1xuZnVuY3Rpb24gYXJnRGVzYyhvcHRpb246IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0T3B0aW9uKTogc3RyaW5nIHtcbiAgbGV0IGRlc2MgPSBbb3B0aW9uLmRvY3M/LnJlcGxhY2UoL1xcICpcXC4kLywgXCJcIikgPz8gXCJcIl07XG5cbiAgY29uc3QgaGVscERlZmF1bHQgPSBvcHRpb24uaW5pdGlhbFZhbHVlID8/IG9wdGlvbi5kZWZhdWx0O1xuICBpZiAob3B0aW9uLm9wdGlvbmFsICYmIGhlbHBEZWZhdWx0KSB7XG4gICAgZGVzYy5wdXNoKFxuICAgICAgYFtkZWZhdWx0OiAke2hlbHBEZWZhdWx0LnJlcGxhY2UoL15cXCAqLS8sIFwiXCIpLnJlcGxhY2UoL1xcLiQvLCBcIlwiKS50cmltKCl9XWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBkZXNjLmpvaW4oXCIgXCIpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIGluaXRpYWwgdmFsdWUgZm9yIGEgZ2l2ZW4gcHJvamVjdCBvcHRpb25cbiAqL1xuZnVuY3Rpb24gYXJnSW5pdGlhbFZhbHVlKFxuICBvcHRpb246IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0T3B0aW9uLFxuICBjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuKTogYW55IHtcbiAgLy8gaWYgd2UgaGF2ZSBkZXRlcm1pbmVkIGFuIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBmaWVsZFxuICAvLyB3ZSBjYW4gc2hvdyB0aGF0IHZhbHVlIGluIC0taGVscFxuICBpZiAob3B0aW9uLmluaXRpYWxWYWx1ZSkge1xuICAgIHJldHVybiByZW5kZXJEZWZhdWx0KGN3ZCwgb3B0aW9uLmluaXRpYWxWYWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IHRoZXNlIGZpZWxkIHR5cGVzIGFzIGNvbW1hbmQgbGluZSBvcHRpb25zOlxuICogLSBwcmltaXRpdmVzIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbilcbiAqIC0gbGlzdHMgb2YgcHJpbWl0aXZlc1xuICogLSBlbnVtc1xuICovXG5mdW5jdGlvbiBhcmdUeXBlU3VwcG9ydGVkKG9wdGlvbjogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBvcHRpb24uc2ltcGxlVHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgIG9wdGlvbi5zaW1wbGVUeXBlID09PSBcIm51bWJlclwiIHx8XG4gICAgb3B0aW9uLnNpbXBsZVR5cGUgPT09IFwiYm9vbGVhblwiIHx8XG4gICAgb3B0aW9uLmtpbmQgPT09IFwiZW51bVwiIHx8XG4gICAgaXNQcmltaXRpdmVBcnJheU9wdGlvbihvcHRpb24pXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBvcHRpb24gaXMgYSBwcmltaXRpdmUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmVBcnJheU9wdGlvbihcbiAgb3B0aW9uOiBpbnZlbnRvcnkuSW52ZW50b3J5UHJvamVjdE9wdGlvbixcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBvcHRpb24uanNvbkxpa2UgJiZcbiAgICBvcHRpb24udHlwZS5jb2xsZWN0aW9uPy5raW5kID09PSBcImFycmF5XCIgJiZcbiAgICBvcHRpb24udHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlLnByaW1pdGl2ZSAmJlxuICAgIFtcInN0cmluZ1wiLCBcIm51bWJlclwiXS5pbmNsdWRlcyhvcHRpb24udHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlLnByaW1pdGl2ZSksXG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSB2YWx1ZSBmcm9tIFwiQGRlZmF1bHRcIiwgcHJvY2Vzc2VzIG1hY3JvcyBhbmQgcmV0dXJucyBhIHN0cmluZ2lmaWVkXG4gKiAocXVvdGVkKSByZXN1bHQuXG4gKlxuICogQHJldHVybnMgYSBqYXZhc2NyaXB0IHByaW1pdGl2ZSAoY291bGQgYmUgYSBzdHJpbmcsIG51bWJlciBvciBib29sZWFuKVxuICovXG5mdW5jdGlvbiByZW5kZXJEZWZhdWx0KGN3ZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB0cnlQcm9jZXNzTWFjcm8oY3dkLCB2YWx1ZSkgPz8gSlNPTi5wYXJzZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgeWFyZ3MgY29tbWFuZCBsaW5lIHN3aXRjaGVzIHRvIHByb2plY3QgdHlwZSBwcm9wcy5cbiAqIEBwYXJhbSB0eXBlIFByb2plY3QgdHlwZVxuICogQHBhcmFtIGFyZ3YgQ29tbWFuZCBsaW5lIHN3aXRjaGVzXG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmRMaW5lVG9Qcm9wcyhcbiAgY3dkOiBzdHJpbmcsXG4gIHR5cGU6IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0VHlwZSxcbiAgYXJndjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBpbml0aWFsaXplIHByb3BzIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAgZm9yIChjb25zdCBwcm9wIG9mIHR5cGUub3B0aW9ucykge1xuICAgIHByb3BzW3Byb3AubmFtZV0gPSBhcmdJbml0aWFsVmFsdWUocHJvcCwgY3dkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2FyZywgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3YpKSB7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHR5cGUub3B0aW9ucykge1xuICAgICAgaWYgKHByb3Auc3dpdGNoID09PSBhcmcpIHtcbiAgICAgICAgbGV0IGN1cnIgPSBwcm9wcztcbiAgICAgICAgY29uc3QgcXVldWUgPSBbLi4ucHJvcC5wYXRoXTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjb25zdCBwID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjdXJyW3BdID0gdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJbcF0gPSBjdXJyW3BdID8/IHt9O1xuICAgICAgICAgICAgY3VyciA9IGN1cnJbcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb3BzO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyBwcm9qZWN0IGZyb20gYW4gZXh0ZXJuYWwgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBzcGVjIFRoZSBuYW1lIG9mIHRoZSBleHRlcm5hbCBtb2R1bGUgdG8gbG9hZFxuICogQHBhcmFtIGFyZ3MgQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyAoaW5jbC4gcHJvamVjdCB0eXBlKVxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0UHJvamVjdEZyb21Nb2R1bGUoYmFzZURpcjogc3RyaW5nLCBzcGVjOiBzdHJpbmcsIGFyZ3M6IGFueSkge1xuICBjb25zdCBwcm9qZW5WZXJzaW9uID0gYXJncy5wcm9qZW5WZXJzaW9uID8/IFwibGF0ZXN0XCI7XG4gIGNvbnN0IGluc3RhbGxBcmdzID0gcmVuZGVySW5zdGFsbEFyZ3MoYmFzZURpciwgYHByb2plbkAke3Byb2plblZlcnNpb259YCk7XG4gIGlmIChhcmdzLnByb2plblZlcnNpb24pIHtcbiAgICBhd2FpdCBucG0ucnVuKGluc3RhbGxBcmdzLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBkbyBub3Qgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbjogb25seSBpbnN0YWxsIGlmIGBucG0gbHNgIGZhaWxzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5wbS5ydW4oXG4gICAgICAgIFtcImxzXCIsIGAtLXByZWZpeD0ke2Jhc2VEaXJ9YCwgXCItLWRlcHRoPTBcIiwgXCItLXBhdHRlcm5cIiwgXCJwcm9qZW5cIl0sXG4gICAgICAgIHsgY3dkOiBiYXNlRGlyIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgYXdhaXQgbnBtLnJ1bihpbnN0YWxsQXJncywgeyBjd2Q6IGJhc2VEaXIgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW5zdGFsbFBhY2thZ2VXaXRoQ2xpRXJyb3IgPSBhc3luYyAoXG4gICAgYjogc3RyaW5nLFxuICAgIHM6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluc3RhbGxQYWNrYWdlKGIsIHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBzdGRlcnIgPSAoZXJyb3IgYXMgeyBzdGRlcnI/OiBCdWZmZXIgfSk/LnN0ZGVycj8udG9TdHJpbmcoKSA/PyBcIlwiO1xuICAgICAgY29uc3QgaXNMb2NhbCA9IHN0ZGVyci5pbmNsdWRlcyhcImNvZGUgRU5PRU5UXCIpO1xuICAgICAgY29uc3QgaXNSZWdpc3RyeSA9IHN0ZGVyci5pbmNsdWRlcyhcImNvZGUgRTQwNFwiKTtcbiAgICAgIGlmIChpc0xvY2FsIHx8IGlzUmVnaXN0cnkpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlU291cmNlID0gaXNMb2NhbCA/IFwicGF0aFwiIDogXCJyZWdpc3RyeVwiO1xuICAgICAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kICcke3N9JyBpbiB0aGlzICR7bW9kdWxlU291cmNlfS4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBwYWNrYWdlIGV4aXN0cywgeW91IGhhdmUgYWNjZXNzIGl0IGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG1vZHVsZU5hbWUgPSBhd2FpdCBpbnN0YWxsUGFja2FnZVdpdGhDbGlFcnJvcihiYXNlRGlyLCBzcGVjKTtcbiAgbG9nZ2luZy5lbXB0eSgpO1xuXG4gIC8vIEZpbmQgdGhlIGp1c3QgaW5zdGFsbGVkIHBhY2thZ2UgYW5kIGRpc2NvdmVyIHRoZSByZXN0IHJlY3Vyc2l2ZWx5IGZyb20gdGhpcyBwYWNrYWdlIGZvbGRlclxuICBjb25zdCBtb2R1bGVEaXIgPSBmaW5kSnNpaUZpbGVQYXRoKGJhc2VEaXIsIG1vZHVsZU5hbWUpO1xuXG4gIGlmICghbW9kdWxlRGlyKSB7XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgYE1vZHVsZSAnJHttb2R1bGVOYW1lfScgZG9lcyBub3QgbG9vayBsaWtlIGl0IGlzIGNvbXBhdGlibGUgd2l0aCBwcm9qZW4uIFJlYXNvbjogQ2Fubm90IGZpbmQgJyR7bW9kdWxlTmFtZX0vLmpzaWknLiBBbGwgcHJvamVuIG1vZHVsZXMgbXVzdCBiZSBqc2lpIG1vZHVsZXMhYCxcbiAgICApO1xuICB9XG5cbiAgLy8gT25seSBsZWF2ZSBwcm9qZWN0cyBmcm9tIHRoZSBtYWluIChyZXF1ZXN0ZWQpIHBhY2thZ2VcbiAgY29uc3QgcHJvamVjdHMgPSBpbnZlbnRvcnlcbiAgICAuZGlzY292ZXIobW9kdWxlRGlyKVxuICAgIC5maWx0ZXIoKHgpID0+IHgubW9kdWxlTmFtZSA9PT0gbW9kdWxlTmFtZSk7IC8vIE9ubHkgbGlzdCBwcm9qZWN0IHR5cGVzIGZyb20gdGhlIHJlcXVlc3RlZCAnZnJvbScgbW9kdWxlXG5cbiAgaWYgKHByb2plY3RzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICBgTm8gcHJvamVjdCB0eXBlcyBmb3VuZCBhZnRlciBpbnN0YWxsaW5nIFwiJHtzcGVjfVwiLiBUaGUgbW9kdWxlIG11c3QgZXhwb3J0IGF0IGxlYXN0IG9uZSBjbGFzcyB3aGljaCBleHRlbmRzIFwicHJvamVuLlByb2plY3RcIi5gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCByZXF1ZXN0ZWQgPSBhcmdzLnByb2plY3RUeXBlTmFtZTtcbiAgY29uc3QgdHlwZXMgPSBwcm9qZWN0cy5tYXAoKHApID0+IHAucGppZCk7XG5cbiAgLy8gaWYgdXNlciBkaWQgbm90IHNwZWNpZnkgYSBwcm9qZWN0IHR5cGUgYnV0IHRoZSBtb2R1bGUgaGFzIG1vcmUgdGhhbiBvbmUsIHdlIG5lZWQgdGhlbSB0byB0ZWxsIHVzIHdoaWNoIG9uZS4uLlxuICBpZiAoIXJlcXVlc3RlZCAmJiBwcm9qZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgYE11bHRpcGxlIHByb2plY3QgdHlwZXMgZm91bmQgYWZ0ZXIgaW5zdGFsbGluZyBcIiR7c3BlY31cIjpcXG5gLFxuICAgICAgLi4udHlwZXMubWFwKCh0KSA9PiBgICAgICR7dH1gKSxcbiAgICAgIFwiXCIsXG4gICAgICBgUGxlYXNlIHNwZWNpZnkgYSBwcm9qZWN0IHR5cGUuYCxcbiAgICAgIGBFeGFtcGxlOiBwbnBtIGRseCBwcm9qZW4gbmV3IC0tZnJvbSAke3NwZWN9ICR7dHlwZXNbMF19YCxcbiAgICApO1xuICB9XG5cbiAgLy8gaWYgdXNlciBkaWQgbm90IHNwZWNpZnkgYSB0eXBlIChhbmQgd2Uga25vdyB3ZSBoYXZlIG9ubHkgb25lKSwgdGhlIHNlbGVjdCBpdC4gb3RoZXJ3aXNlLCBzZWFyY2ggYnkgcGppZC5cbiAgY29uc3QgdHlwZSA9ICFyZXF1ZXN0ZWRcbiAgICA/IHByb2plY3RzWzBdXG4gICAgOiBwcm9qZWN0cy5maW5kKChwKSA9PiBwLnBqaWQgPT09IHJlcXVlc3RlZCk7XG4gIGlmICghdHlwZSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihcbiAgICAgIGBQcm9qZWN0IHR5cGUgXCIke3JlcXVlc3RlZH1cIiBub3QgZm91bmQgaW4gXCIke3NwZWN9XCIuIEZvdW5kOlxcbmAsXG4gICAgICAuLi50eXBlcy5tYXAoKHQpID0+IGAgICAgJHt0fWApLFxuICAgICAgXCJcIixcbiAgICAgIGBQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIHByb2plY3QgdHlwZS5gLFxuICAgICAgYEV4YW1wbGU6IHBucG0gZGx4IHByb2plbiBuZXcgLS1mcm9tICR7c3BlY30gJHt0eXBlc1swXX1gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBtaXNzaW5nT3B0aW9ucyA9IFtdO1xuXG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIHR5cGUub3B0aW9ucyA/PyBbXSkge1xuICAgIC8vIG5vdCBhbGwgdHlwZXMgY2FuIGJlIHJlcHJlc2VudGVkIGluIHRoZSBjbGlcbiAgICBpZiAoIWFyZ1R5cGVTdXBwb3J0ZWQob3B0aW9uKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gcGFyc2UgYWxsb3dlZCB0eXBlc1xuICAgIGlmIChhcmdzW29wdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcmdzW29wdGlvbi5uYW1lXSA9IHBhcnNlQXJnKGFyZ3Nbb3B0aW9uLm5hbWVdLCBhcmdUeXBlKG9wdGlvbiksIG9wdGlvbik7XG4gICAgICBhcmdzW29wdGlvbi5zd2l0Y2hdID0gYXJnc1tvcHRpb24ubmFtZV07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBSZXF1aXJlZCBvcHRpb24gd2l0aCBhIGRlZmF1bHRcbiAgICBpZiAoIW9wdGlvbi5vcHRpb25hbCAmJiBvcHRpb24uZGVmYXVsdCAmJiBvcHRpb24uZGVmYXVsdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcmVuZGVyRGVmYXVsdChiYXNlRGlyLCBvcHRpb24uZGVmYXVsdCk7XG4gICAgICBhcmdzW29wdGlvbi5uYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGFyZ3Nbb3B0aW9uLnN3aXRjaF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZWQgb3B0aW9uLCBidXQgd2UgY291bGQgbm90IGZpbmQgYSB2YWx1ZVxuICAgIGlmICghb3B0aW9uLm9wdGlvbmFsICYmICFhcmdzW29wdGlvbi5uYW1lXSkge1xuICAgICAgbWlzc2luZ09wdGlvbnMucHVzaChcbiAgICAgICAgYC0tJHtvcHRpb24uc3dpdGNofSBbJHthcmdUeXBlKG9wdGlvbil9XSAke2FyZ0Rlc2Mob3B0aW9uKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSBhcmUgbWlzc2luZyBzb21lIHJlcXVpcmVkIG9wdGlvbnNcbiAgaWYgKG1pc3NpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihcbiAgICAgIGBDYW5ub3QgY3JlYXRlIFwiJHt0eXBlLmZxbn1cIi4gTWlzc2luZyByZXF1aXJlZCBvcHRpb24ke1xuICAgICAgICBtaXNzaW5nT3B0aW9ucy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwiXG4gICAgICB9OmAsXG4gICAgICAuLi5taXNzaW5nT3B0aW9ucy5tYXAoKG0pID0+IGAgICAgJHttfWApLFxuICAgICk7XG4gIH1cblxuICAvLyBpbmNsdWRlIGEgZGV2IGRlcGVuZGVuY3kgZm9yIHRoZSBleHRlcm5hbCBtb2R1bGVcbiAgYXJncy5kZXZEZXBzID0gW3NwZWNdO1xuICBhcmdzW1wiZGV2LWRlcHNcIl0gPSBbc3BlY107XG5cbiAgYXdhaXQgaW5pdFByb2plY3QoYmFzZURpciwgdHlwZSwgYXJncyk7XG59XG5cbi8qKlxuICogUGFyc2UgY29tbWFuZCBsaW5lIHZhbHVlIGFzIG9wdGlvbiB0eXBlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXJnKFxuICB2YWx1ZTogYW55LFxuICB0eXBlOiBzdHJpbmcsXG4gIG9wdGlvbj86IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0T3B0aW9uLFxuKTogYW55IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IGlzVHJ1dGh5KHZhbHVlKSA6IHZhbHVlO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh2OiBhbnkpID0+XG4gICAgICAgIHBhcnNlQXJnKHYsIG9wdGlvbj8udHlwZS5jb2xsZWN0aW9uPy5lbGVtZW50dHlwZS5wcmltaXRpdmUgfHwgXCJzdHJpbmdcIiksXG4gICAgICApO1xuICAgIC8vIHJldHVybiB2YWx1ZSB1bmNoYW5nZWRcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gdW5leHBlY3RlZCBhcnJheSwgdXNlIHRoZSBmaXJzdCBlbGVtZW50XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IHByb2plY3QuXG4gKiBAcGFyYW0gdHlwZSBQcm9qZWN0IHR5cGVcbiAqIEBwYXJhbSBhcmdzIENvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAqIEBwYXJhbSBhZGRpdGlvbmFsUHJvcHMgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgaW4gLnByb2plbnJjLmpzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRQcm9qZWN0KFxuICBiYXNlRGlyOiBzdHJpbmcsXG4gIHR5cGU6IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0VHlwZSxcbiAgYXJnczogYW55LFxuKSB7XG4gIC8vIGNvbnZlcnQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBwcm9qZWN0IHByb3BzIHVzaW5nIHR5cGUgaW5mb3JtYXRpb25cbiAgY29uc3QgcHJvcHMgPSBjb21tYW5kTGluZVRvUHJvcHMoYmFzZURpciwgdHlwZSwgYXJncyk7XG5cbiAgUHJvamVjdHMuY3JlYXRlUHJvamVjdCh7XG4gICAgZGlyOiBwcm9wcy5vdXRkaXIgPz8gYmFzZURpcixcbiAgICBwcm9qZWN0RnFuOiB0eXBlLmZxbixcbiAgICBwcm9qZWN0T3B0aW9uczogcHJvcHMsXG4gICAgb3B0aW9uSGludHM6IGFyZ3MuY29tbWVudHNcbiAgICAgID8gSW5pdFByb2plY3RPcHRpb25IaW50cy5GRUFUVVJFRFxuICAgICAgOiBJbml0UHJvamVjdE9wdGlvbkhpbnRzLk5PTkUsXG4gICAgc3ludGg6IGFyZ3Muc3ludGgsXG4gICAgcG9zdDogYXJncy5wb3N0LFxuICB9KTtcblxuICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oYmFzZURpciwgXCJwYWNrYWdlLmpzb25cIikpICYmIGFyZ3MucG9zdCkge1xuICAgIGF3YWl0IG5wbS5ydW4oW1wicnVuXCIsIFwiZXNsaW50XCIsIFwiLS1pZi1wcmVzZW50XCJdLCB7XG4gICAgICBjd2Q6IGJhc2VEaXIsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYXJncy5naXQpIHtcbiAgICBjb25zdCBvcHRzID0geyBjd2Q6IGJhc2VEaXIgfTtcbiAgICBjb25zdCBnaXR2ZXJzaW9uOiBzdHJpbmcgPSBnZXRHaXRWZXJzaW9uKGdpdC5jYXB0dXJlKFtcIi0tdmVyc2lvblwiXSwgb3B0cykpO1xuICAgIGxvZ2dpbmcuZGVidWcoXCJzeXN0ZW0gdXNpbmcgZ2l0IHZlcnNpb24gXCIsIGdpdHZlcnNpb24pO1xuICAgIC8vIGBnaXQgY29uZmlnIGluaXQuZGVmYXVsdEJyYW5jaGAgYW5kIGBnaXQgaW5pdCAtYmAgYXJlIG9ubHkgYXZhaWxhYmxlIHNpbmNlIGdpdCAyLjI4LjBcbiAgICBpZiAoZ2l0dmVyc2lvbiAmJiBzZW12ZXIuZ3RlKGdpdHZlcnNpb24sIFwiMi4yOC4wXCIpKSB7XG4gICAgICBjb25zdCBkZWZhdWx0R2l0SW5pdEJyYW5jaCA9XG4gICAgICAgIGdpdC50cnlDYXB0dXJlKFtcImNvbmZpZ1wiLCBcImluaXQuZGVmYXVsdEJyYW5jaFwiXSwgb3B0cyk/LnRyaW0oKSB8fFxuICAgICAgICBcIm1haW5cIjtcbiAgICAgIGdpdC5ydW4oW1wiaW5pdFwiLCBcIi1iXCIsIGRlZmF1bHRHaXRJbml0QnJhbmNoXSwgb3B0cyk7XG4gICAgICBnaXQucnVuKFtcImFkZFwiLCBcIi5cIl0sIG9wdHMpO1xuICAgICAgZ2l0LnJ1bihcbiAgICAgICAgW1wiY29tbWl0XCIsIFwiLS1hbGxvdy1lbXB0eVwiLCBcIi1tXCIsIFwiY2hvcmU6IHByb2plY3QgY3JlYXRlZCB3aXRoIHByb2plblwiXSxcbiAgICAgICAgb3B0cyxcbiAgICAgICk7XG4gICAgICBsb2dnaW5nLmRlYnVnKGBkZWZhdWx0IGJyYW5jaCBuYW1lIHNldCB0byAke2RlZmF1bHRHaXRJbml0QnJhbmNofWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBnaXQucnVuKFtcImluaXRcIl0sIG9wdHMpO1xuICAgICAgZ2l0LnJ1bihbXCJhZGRcIiwgXCIuXCJdLCBvcHRzKTtcbiAgICAgIGdpdC5ydW4oXG4gICAgICAgIFtcImNvbW1pdFwiLCBcIi0tYWxsb3ctZW1wdHlcIiwgXCItbVwiLCBcImNob3JlOiBwcm9qZWN0IGNyZWF0ZWQgd2l0aCBwcm9qZW5cIl0sXG4gICAgICAgIG9wdHMsXG4gICAgICApO1xuICAgICAgbG9nZ2luZy5kZWJ1ZyhcbiAgICAgICAgXCJvbGRlciB2ZXJzaW9uIG9mIGdpdCBkZXRlY3RlZCwgY2hhbmdlZCBkZWZhdWx0IGJyYW5jaCBuYW1lIHRvIG1haW5cIixcbiAgICAgICk7XG4gICAgICBnaXQucnVuKFtcImJyYW5jaFwiLCBcIi1NXCIsIFwibWFpblwiXSwgb3B0cyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb21tYW5kKCk7XG4iXX0=
|
package/lib/cli/macros.js
CHANGED
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.tryProcessMacro = tryProcessMacro;
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const util_1 = require("../util");
|
|
39
|
+
const exec_1 = require("../util/exec");
|
|
39
40
|
function tryProcessMacro(cwd, macro) {
|
|
40
41
|
if (!macro.startsWith("$")) {
|
|
41
42
|
return undefined;
|
|
@@ -45,7 +46,7 @@ function tryProcessMacro(cwd, macro) {
|
|
|
45
46
|
case "$BASEDIR":
|
|
46
47
|
return basedir;
|
|
47
48
|
case "$GIT_REMOTE":
|
|
48
|
-
const origin =
|
|
49
|
+
const origin = exec_1.git.tryCapture(["remote", "get-url", "origin"], { cwd });
|
|
49
50
|
if (origin) {
|
|
50
51
|
return origin;
|
|
51
52
|
}
|
|
@@ -67,8 +68,8 @@ function tryProcessMacro(cwd, macro) {
|
|
|
67
68
|
* @param key the config key
|
|
68
69
|
*/
|
|
69
70
|
function getFromGitConfig(cwd, key) {
|
|
70
|
-
return (
|
|
71
|
-
|
|
71
|
+
return (exec_1.git.tryCapture(["config", "--get", "--includes", key], { cwd }) ??
|
|
72
|
+
exec_1.git.tryCapture(["config", "--get", "--global", "--includes", key], { cwd }));
|
|
72
73
|
}
|
|
73
74
|
function resolveEmail(cwd) {
|
|
74
75
|
return getFromGitConfig(cwd, "user.email") ?? "user@domain.com";
|
|
@@ -113,4 +114,4 @@ function detectPackageManager() {
|
|
|
113
114
|
}
|
|
114
115
|
return "npm";
|
|
115
116
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjcm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9tYWNyb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSwwQ0E4QkM7QUFsQ0QsMkNBQTZCO0FBQzdCLGtDQUErQztBQUMvQyx1Q0FBbUM7QUFFbkMsU0FBZ0IsZUFBZSxDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbkMsUUFBUSxLQUFLLEVBQUUsQ0FBQztRQUNkLEtBQUssVUFBVTtZQUNiLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLEtBQUssYUFBYTtZQUNoQixNQUFNLE1BQU0sR0FBRyxVQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDeEUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQ1IsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxzQkFBc0IsSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDO1FBRXJELEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUN0RCxLQUFLLGlCQUFpQjtZQUNwQixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixLQUFLLHFCQUFxQjtZQUN4QixPQUFPLElBQUEsMkJBQW9CLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsS0FBSyxrQkFBa0I7WUFDckIsT0FBTyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsR0FBVztJQUNoRCxPQUFPLENBQ0wsVUFBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDL0QsVUFBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBVztJQUMvQixPQUFPLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxpQkFBaUIsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG9CQUFvQjtJQUMzQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQztJQUMxRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdEFzUHl0aG9uTW9kdWxlIH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IGdpdCB9IGZyb20gXCIuLi91dGlsL2V4ZWNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyeVByb2Nlc3NNYWNybyhjd2Q6IHN0cmluZywgbWFjcm86IHN0cmluZykge1xuICBpZiAoIW1hY3JvLnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJhc2VkaXIgPSBwYXRoLmJhc2VuYW1lKGN3ZCk7XG5cbiAgc3dpdGNoIChtYWNybykge1xuICAgIGNhc2UgXCIkQkFTRURJUlwiOlxuICAgICAgcmV0dXJuIGJhc2VkaXI7XG4gICAgY2FzZSBcIiRHSVRfUkVNT1RFXCI6XG4gICAgICBjb25zdCBvcmlnaW4gPSBnaXQudHJ5Q2FwdHVyZShbXCJyZW1vdGVcIiwgXCJnZXQtdXJsXCIsIFwib3JpZ2luXCJdLCB7IGN3ZCB9KTtcbiAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNsdWcgPVxuICAgICAgICBnZXRGcm9tR2l0Q29uZmlnKGN3ZCwgXCJnaXRodWIudXNlclwiKSA/PyByZXNvbHZlRW1haWwoY3dkKS5zcGxpdChcIkBcIilbMF07XG4gICAgICByZXR1cm4gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3NsdWd9LyR7YmFzZWRpcn0uZ2l0YDtcblxuICAgIGNhc2UgXCIkR0lUX1VTRVJfTkFNRVwiOlxuICAgICAgcmV0dXJuIGdldEZyb21HaXRDb25maWcoY3dkLCBcInVzZXIubmFtZVwiKSA/PyBcInVzZXJcIjtcbiAgICBjYXNlIFwiJEdJVF9VU0VSX0VNQUlMXCI6XG4gICAgICByZXR1cm4gcmVzb2x2ZUVtYWlsKGN3ZCk7XG4gICAgY2FzZSBcIiRQWVRIT05fTU9EVUxFX05BTUVcIjpcbiAgICAgIHJldHVybiBmb3JtYXRBc1B5dGhvbk1vZHVsZShiYXNlZGlyKTtcbiAgICBjYXNlIFwiJFBBQ0tBR0VfTUFOQUdFUlwiOlxuICAgICAgcmV0dXJuIGRldGVjdFBhY2thZ2VNYW5hZ2VyKCk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB2YWx1ZSBmcm9tIGdpdCBjb25maWcuIFNlYXJjaGVzIGxvY2FsIGFuZCB0aGVuIGdsb2JhbCBnaXQgY29uZmlnLlxuICogQHBhcmFtIGtleSB0aGUgY29uZmlnIGtleVxuICovXG5mdW5jdGlvbiBnZXRGcm9tR2l0Q29uZmlnKGN3ZDogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAoXG4gICAgZ2l0LnRyeUNhcHR1cmUoW1wiY29uZmlnXCIsIFwiLS1nZXRcIiwgXCItLWluY2x1ZGVzXCIsIGtleV0sIHsgY3dkIH0pID8/XG4gICAgZ2l0LnRyeUNhcHR1cmUoW1wiY29uZmlnXCIsIFwiLS1nZXRcIiwgXCItLWdsb2JhbFwiLCBcIi0taW5jbHVkZXNcIiwga2V5XSwgeyBjd2QgfSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUVtYWlsKGN3ZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEZyb21HaXRDb25maWcoY3dkLCBcInVzZXIuZW1haWxcIikgPz8gXCJ1c2VyQGRvbWFpbi5jb21cIjtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHRoZSBwYWNrYWdlIG1hbmFnZXIgdXNlZCB0byBydW4gYHByb2plbiBuZXdgLlxuICpcbiAqIFVzZXMgYG5wbV9jb25maWdfdXNlcl9hZ2VudGAgKGUuZy4gXCJ5YXJuLzQuMS4wIG5wbS8/IG5vZGUvdjIwLjAuMFwiKSB0b1xuICogaWRlbnRpZnkgdGhlIHBhY2thZ2UgbWFuYWdlciBhbmQgdmVyc2lvbi4gRmFsbHMgYmFjayB0byBgbnBtX2V4ZWNwYXRoYCBpZlxuICogdGhlIHVzZXIgYWdlbnQgaXMgbm90IHNldC4gRGVmYXVsdHMgdG8gYG5wbWAgd2hlbiBkZXRlY3Rpb24gZmFpbHMuXG4gKlxuICogRm9yIHlhcm4sIHRoZSB2ZXJzaW9uIGRldGVybWluZXMgY2xhc3NpYyAoMS54KSB2cyBiZXJyeSAoPj0yKS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UGFja2FnZU1hbmFnZXIoKTogc3RyaW5nIHtcbiAgY29uc3QgdXNlckFnZW50ID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ191c2VyX2FnZW50ID8/IFwiXCI7XG4gIGNvbnN0IG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9eKFxcdyspXFwvKFxcZCspLyk7XG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIG5hbWUsIG1ham9yXSA9IG1hdGNoO1xuICAgIGlmIChuYW1lID09PSBcInlhcm5cIikge1xuICAgICAgcmV0dXJuIE51bWJlcihtYWpvcikgPj0gMiA/IFwieWFybl9iZXJyeVwiIDogXCJ5YXJuX2NsYXNzaWNcIjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwicG5wbVwiKSB7XG4gICAgICByZXR1cm4gXCJwbnBtXCI7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImJ1blwiKSB7XG4gICAgICByZXR1cm4gXCJidW5cIjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwibnBtXCIpIHtcbiAgICAgIHJldHVybiBcIm5wbVwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiBjaGVjayBucG1fZXhlY3BhdGhcbiAgY29uc3QgZXhlY1BhdGggPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGggPz8gXCJcIjtcbiAgaWYgKGV4ZWNQYXRoLmluY2x1ZGVzKFwieWFyblwiKSkge1xuICAgIHJldHVybiBcInlhcm5fY2xhc3NpY1wiO1xuICB9XG4gIGlmIChleGVjUGF0aC5pbmNsdWRlcyhcInBucG1cIikpIHtcbiAgICByZXR1cm4gXCJwbnBtXCI7XG4gIH1cbiAgaWYgKGV4ZWNQYXRoLmluY2x1ZGVzKFwiYnVuXCIpKSB7XG4gICAgcmV0dXJuIFwiYnVuXCI7XG4gIH1cbiAgcmV0dXJuIFwibnBtXCI7XG59XG4iXX0=
|
package/lib/cli/task-runtime.js
CHANGED
|
@@ -34,7 +34,6 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.TaskRuntime = void 0;
|
|
37
|
-
const child_process_1 = require("child_process");
|
|
38
37
|
const fs_1 = require("fs");
|
|
39
38
|
const path_1 = require("path");
|
|
40
39
|
const path = __importStar(require("path"));
|
|
@@ -43,6 +42,7 @@ const chalk_1 = require("chalk");
|
|
|
43
42
|
const dax_1 = require("dax");
|
|
44
43
|
const common_1 = require("../common");
|
|
45
44
|
const logging = __importStar(require("../logging"));
|
|
45
|
+
const exec_1 = require("../util/exec");
|
|
46
46
|
// avoids a (false positive) esbuild warning about incorrect imports.
|
|
47
47
|
// `?.default ?? module` keeps this working both as a plain CommonJS require and
|
|
48
48
|
// when the dependency is interop-wrapped inside the bundled run-task.cjs (where
|
|
@@ -421,6 +421,9 @@ class RunTask {
|
|
|
421
421
|
...this.env,
|
|
422
422
|
...options.extraEnv,
|
|
423
423
|
};
|
|
424
|
+
// stdout/stderr are only captured when a caller pipes them (e.g.
|
|
425
|
+
// `shellEval`); otherwise inherit so output is streamed to the terminal.
|
|
426
|
+
const capture = Array.isArray(options.spawnOptions?.stdio);
|
|
424
427
|
// On Windows the default shell (cmd.exe) does not understand the POSIX-style
|
|
425
428
|
// commands projen tasks are written in (`cat`, `cp`, `mkdir -p`, `rm -rf`,
|
|
426
429
|
// `&&` chains, `$VAR`, ...). Run the command through dax's cross-platform
|
|
@@ -428,9 +431,6 @@ class RunTask {
|
|
|
428
431
|
// commands. Now that the task runtime is asynchronous we can drive dax's
|
|
429
432
|
// `$` API directly instead of spawning a synchronous child node process.
|
|
430
433
|
if (process.platform === "win32") {
|
|
431
|
-
// stdout/stderr are only captured when a caller pipes them (e.g.
|
|
432
|
-
// `shellEval`); otherwise inherit so output is streamed to the terminal.
|
|
433
|
-
const capture = Array.isArray(options.spawnOptions?.stdio);
|
|
434
434
|
const result = await dax_1.$.raw `${options.command}`
|
|
435
435
|
.cwd(cwd)
|
|
436
436
|
.env(env)
|
|
@@ -443,14 +443,9 @@ class RunTask {
|
|
|
443
443
|
stderr: capture ? Buffer.from(result.stderrBytes) : null,
|
|
444
444
|
};
|
|
445
445
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
shell: true,
|
|
450
|
-
stdio: "inherit",
|
|
451
|
-
env,
|
|
452
|
-
...options.spawnOptions,
|
|
453
|
-
});
|
|
446
|
+
// On other platforms, run the command through the system shell via the
|
|
447
|
+
// centralized `rawShell` helper.
|
|
448
|
+
return exec_1.rawShell.exec(options.command, { cwd, env, capture });
|
|
454
449
|
}
|
|
455
450
|
async shellEval(options) {
|
|
456
451
|
return this.shell({
|
|
@@ -479,4 +474,4 @@ class RunTask {
|
|
|
479
474
|
return `"${process.execPath}" "${program}"`;
|
|
480
475
|
}
|
|
481
476
|
}
|
|
482
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS90YXNrLXJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsaURBQTBDO0FBQzFDLDJCQUF3RDtBQUN4RCwrQkFBOEM7QUFDOUMsMkNBQTZCO0FBQzdCLCtCQUE4QjtBQUM5QixpQ0FBd0M7QUFDeEMsNkJBQXdCO0FBQ3hCLHNDQUErRDtBQUMvRCxvREFBc0M7QUFHdEMscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUNyQix1QkFBdUIsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7QUFFOUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUksV0FBVyxHQUFHLENBQUM7QUFrQzlDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBQ3RCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEQsbUJBQVUsRUFDVixZQUFZLENBQ2IsQ0FBQztJQUVGOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsT0FB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USxNQUFNLE9BQU8sR0FBRyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJ1dGlsXCI7XG5pbXBvcnQgeyBncmF5LCB1bmRlcmxpbmUgfSBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7ICQgfSBmcm9tIFwiZGF4XCI7XG5pbXBvcnQgeyBQUk9KRU5fRElSLCBUQVNLU19NQU5JRkVTVF9WRVJTSU9OIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrc01hbmlmZXN0LCBUYXNrU3BlYywgVGFza1N0ZXAgfSBmcm9tIFwiLi4vdGFzay1tb2RlbFwiO1xuXG4vLyBhdm9pZHMgYSAoZmFsc2UgcG9zaXRpdmUpIGVzYnVpbGQgd2FybmluZyBhYm91dCBpbmNvcnJlY3QgaW1wb3J0cy5cbi8vIGA/LmRlZmF1bHQgPz8gbW9kdWxlYCBrZWVwcyB0aGlzIHdvcmtpbmcgYm90aCBhcyBhIHBsYWluIENvbW1vbkpTIHJlcXVpcmUgYW5kXG4vLyB3aGVuIHRoZSBkZXBlbmRlbmN5IGlzIGludGVyb3Atd3JhcHBlZCBpbnNpZGUgdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzICh3aGVyZVxuLy8gYHJlcXVpcmUoLi4uKWAgbWF5IHlpZWxkIGB7IGRlZmF1bHQ6IGZuIH1gIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uKS4gU2VlXG4vLyBwcm9qZW4jNDQwNyAoXCJwYXJzZUNvbmZsaWN0SlNPTiBpcyBub3QgYSBmdW5jdGlvblwiIGFmdGVyIGVqZWN0KS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZSA9IHJlcXVpcmUoXCJwYXJzZS1jb25mbGljdC1qc29uXCIpO1xuY29uc3QgcGFyc2VDb25mbGljdEpTT04gPVxuICBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZT8uZGVmYXVsdCA/PyBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZTtcblxuY29uc3QgRU5WX1RSSU1fTEVOID0gMjA7XG5jb25zdCBBUkdTX01BUktFUiA9IFwiJEBcIjtcbmNvbnN0IFFVT1RFRF9BUkdTX01BUktFUiA9IGBcIiR7QVJHU19NQVJLRVJ9XCJgO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIGEgc2hlbGwgY29tbWFuZC5cbiAqXG4gKiBUaGlzIGlzIGEgbm9ybWFsaXplZCBzdWJzZXQgb2Ygbm9kZSdzIGBTcGF3blN5bmNSZXR1cm5zYCBzbyB0aGF0IHRoZVxuICogc3luY2hyb25vdXMgKGBzcGF3blN5bmNgKSBhbmQgYXN5bmNocm9ub3VzIChgZGF4YCkgZXhlY3V0aW9uIHBhdGhzIGNhbiByZXR1cm5cbiAqIGEgY29tcGF0aWJsZSBzaGFwZS5cbiAqL1xuaW50ZXJmYWNlIFNoZWxsUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQsIG9yIGBudWxsYCBpZiB0aGUgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBieSBhXG4gICAqIHNpZ25hbCBvciBuZXZlciBzcGF3bmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRvdXQuIE9ubHkgcG9wdWxhdGVkIHdoZW4gc3Rkb3V0IGlzIHBpcGVkIChlLmcuIHdoZW4gZXZhbHVhdGluZ1xuICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMpOyBgbnVsbGAvYHVuZGVmaW5lZGAgd2hlbiBzdGRpbyBpcyBpbmhlcml0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ/OiBCdWZmZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRlcnIuIFNlZSBgc3Rkb3V0YC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVycj86IEJ1ZmZlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGVycm9yIHJhaXNlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHNwYXduIHRoZSBjb21tYW5kIChub3QgYSBub24temVybyBleGl0XG4gICAqIGNvZGUsIHdoaWNoIGlzIHJlcG9ydGVkIHZpYSBgc3RhdHVzYCkuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIFRoZSBydW50aW1lIGNvbXBvbmVudCBvZiB0aGUgdGFza3MgZW5naW5lLlxuICovXG5leHBvcnQgY2xhc3MgVGFza1J1bnRpbWUge1xuICAvKipcbiAgICogVGhlIHByb2plY3QtcmVsYXRpdmUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFOSUZFU1RfRklMRSA9IHBhdGgucG9zaXguam9pbihcbiAgICBQUk9KRU5fRElSLFxuICAgIFwidGFza3MuanNvblwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBPbmUtc2hvdCBlbnRyeXBvaW50IGZvciB0aGUgc3RhbmRhbG9uZSB0YXNrIHJ1bm5lci5cbiAgICpcbiAgICogQ3JlYXRlcyBhIHJ1bnRpbWUgcm9vdGVkIGF0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBydW5zIHRoZSBuYW1lZFxuICAgKiB0YXNrLCBhbmQgY29udmVydHMgYW55IGZhaWx1cmUgaW50byBhIG5vbi16ZXJvIHByb2Nlc3MgZXhpdCBjb2RlLiBUaGlzIGlzXG4gICAqIHRoZSBzaW5nbGUgbGluZSBpbnZva2VkIGJ5IHRoZSBidW5kbGVkIGBzY3JpcHRzL3J1bi10YXNrLmNqc2AgdGhhdFxuICAgKiBcInByb2plbiBlamVjdFwiIGVtaXRzLCB3aGljaCBrZWVwcyB0aGUgZ2VuZXJhdGVkIGJ1bmRsZSBmb290ZXIgdHJpdmlhbC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhc2sgdG8gcnVuLiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5hcmd2WzJdYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbWFpbihuYW1lOiBzdHJpbmcgPSBwcm9jZXNzLmFyZ3ZbMl0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFRhc2tSdW50aW1lKFwiLlwiKS5ydW5UYXNrKG5hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlPy5zdGFjayA/PyBTdHJpbmcoZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGFza3MuanNvblxuICAgKi9cbiAgcHJpdmF0ZSBfbWFuaWZlc3Q6IFRhc2tzTWFuaWZlc3QgPSB7IHRhc2tzOiB7fSB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcmF3IGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50bHkgbG9hZGVkIG1hbmlmZXN0LCB1c2VkIHRvIGRldGVjdCBjaGFuZ2VzXG4gICAqIG9uIGRpc2sgc28gdGhlIHJ1bnRpbWUgY2FuIHJlbG9hZCBhIHJlZ2VuZXJhdGVkIG1hbmlmZXN0IG1pZC1ydW4uXG4gICAqL1xuICBwcml2YXRlIF9pZGVudGl0eT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0IGFuZCB0aGUgY3dkIGZvciBleGVjdXRpbmcgdGFza3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya2Rpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHdvcmtkaXI6IHN0cmluZykge1xuICAgIHRoaXMud29ya2RpciA9IHJlc29sdmUod29ya2Rpcik7XG4gICAgLy8gUGVyZm9ybSB0aGUgaW5pdGlhbCBsb2FkLiBUaGlzIGFsc28gdmVyaWZpZXMgdGhlIG1hbmlmZXN0J3Mgc2NoZW1hXG4gICAgLy8gdmVyc2lvbi5cbiAgICB0aGlzLnJlbG9hZE1hbmlmZXN0SWZDaGFuZ2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRhc2tzLmpzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgbWFuaWZlc3QoKTogVGFza3NNYW5pZmVzdCB7XG4gICAgcmV0dXJuIHRoaXMuX21hbmlmZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSB0YXNrcyBtYW5pZmVzdCBmaWxlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgbWFuaWZlc3RQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGpvaW4odGhpcy53b3JrZGlyLCBUYXNrUnVudGltZS5NQU5JRkVTVF9GSUxFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGFza3MgaW4gdGhpcyBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIGdldCB0YXNrcygpOiBUYXNrU3BlY1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm1hbmlmZXN0LnRhc2tzID8/IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgdGFzayBieSBuYW1lLCBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgdHJ5RmluZFRhc2sobmFtZTogc3RyaW5nKTogVGFza1NwZWMgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5tYW5pZmVzdC50YXNrcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFuaWZlc3QudGFza3NbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgdGFzay5cbiAgICogQHBhcmFtIG5hbWUgVGhlIHRhc2sgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBydW5UYXNrKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXJlbnRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIGFyZ3M6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXSxcbiAgICBlbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge30sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEEgcHJldmlvdXNseSBleGVjdXRlZCB0YXNrIChtb3N0IGltcG9ydGFudGx5IHRoZSBcImRlZmF1bHRcIi9zeW50aCB0YXNrLFxuICAgIC8vIHdoaWNoIGBidWlsZGAgc3Bhd25zIGZpcnN0KSBtYXkgaGF2ZSByZWdlbmVyYXRlZCBgLnByb2plbi90YXNrcy5qc29uYC5cbiAgICAvLyBQaWNrIHVwIGFueSBzdWNoIGNoYW5nZXMgYmVmb3JlIHJlc29sdmluZyBhbmQgcnVubmluZyB0aGlzIHRhc2sgc28gd2VcbiAgICAvLyBuZXZlciBleGVjdXRlIGEgc3RhbGUsIGluLW1lbW9yeSBkZWZpbml0aW9uLlxuICAgIHRoaXMucmVsb2FkTWFuaWZlc3RJZkNoYW5nZWQoKTtcblxuICAgIGNvbnN0IHRhc2sgPSB0aGlzLnRyeUZpbmRUYXNrKG5hbWUpO1xuICAgIGlmICghdGFzaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgZmluZCBjb21tYW5kICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUnVuVGFzayh0aGlzLCB0YXNrLCBwYXJlbnRzLCBhcmdzLCBlbnYpLnJ1bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXJlYWRzIHRoZSB0YXNrcyBtYW5pZmVzdCBmcm9tIGRpc2sgaWYgaXRzIGNvbnRlbnRzIGNoYW5nZWQgc2luY2UgaXQgd2FzXG4gICAqIGxhc3QgbG9hZGVkLCB2ZXJpZnlpbmcgaXRzIHNjaGVtYSB2ZXJzaW9uIGFsb25nIHRoZSB3YXkuXG4gICAqXG4gICAqIENoYW5nZSBkZXRlY3Rpb24gY29tcGFyZXMgdGhlIHJhdyBmaWxlIGNvbnRlbnRzLCBzbyBhbiB1bmNoYW5nZWQgbWFuaWZlc3RcbiAgICogaXMgbm90IHJlLXZlcmlmaWVkIG9yIHJlLWFkb3B0ZWQuXG4gICAqL1xuICBwcml2YXRlIHJlbG9hZE1hbmlmZXN0SWZDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGlmICghZXhpc3RzU3luYyh0aGlzLm1hbmlmZXN0UGF0aCkpIHtcbiAgICAgIC8vIE5vIG1hbmlmZXN0IG9uIGRpc2s6IHRyZWF0IGFzIGFuIGVtcHR5IHByb2plY3QgKGxlZ2FjeSBiZWhhdmlvcikuXG4gICAgICB0aGlzLl9tYW5pZmVzdCA9IHsgdGFza3M6IHt9IH07XG4gICAgICB0aGlzLl9pZGVudGl0eSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYXcgPSByZWFkRmlsZVN5bmModGhpcy5tYW5pZmVzdFBhdGgsIFwidXRmLThcIik7XG4gICAgaWYgKHJhdyA9PT0gdGhpcy5faWRlbnRpdHkpIHtcbiAgICAgIHJldHVybjsgLy8gdW5jaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGxvYWRcbiAgICB9XG5cbiAgICBjb25zdCBtYW5pZmVzdDogVGFza3NNYW5pZmVzdCA9IHBhcnNlQ29uZmxpY3RKU09OKHJhdywgdW5kZWZpbmVkLCBcInRoZWlyc1wiKTtcblxuICAgIC8vIEEgcHJldmlvdXNseSBsb2FkZWQgbWFuaWZlc3QgbWVhbnMgdGhpcyBpcyBhICpyZWxvYWQqIChlLmcuIHRoZVxuICAgIC8vIFwiZGVmYXVsdFwiL3N5bnRoIHRhc2sgcmVnZW5lcmF0ZWQgdGhlIGZpbGUgbWlkLXJ1biksIGFzIG9wcG9zZWQgdG8gdGhlXG4gICAgLy8gaW5pdGlhbCBsb2FkIHBlcmZvcm1lZCBieSB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgaXNSZWxvYWQgPSB0aGlzLl9pZGVudGl0eSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy52ZXJpZnlNYW5pZmVzdChtYW5pZmVzdCk7XG4gICAgdGhpcy5fbWFuaWZlc3QgPSBtYW5pZmVzdDtcbiAgICB0aGlzLl9pZGVudGl0eSA9IHJhdztcblxuICAgIGlmIChpc1JlbG9hZCkge1xuICAgICAgbG9nZ2luZy5kZWJ1ZyhcbiAgICAgICAgYCR7VGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRX0gY2hhbmdlZCBvbiBkaXNrOyBzdWNjZXNzZnVsbHkgbG9hZGVkIHRoZSBuZXcgdGFza3MgbWFuaWZlc3QuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIGZyZXNobHkgcmVhZCBtYW5pZmVzdDpcbiAgICpcbiAgICogLSBMZWdhY3kgbWFuaWZlc3RzIChubyBgbWFuaWZlc3RWZXJzaW9uYCkgYXJlIGFjY2VwdGVkIGFzLWlzIGZvciBiYWNrd2FyZHNcbiAgICogICBjb21wYXRpYmlsaXR5LlxuICAgKiAtIE1hbmlmZXN0cyBmcm9tIGEgbmV3ZXIgcHJvamVuIChhIGhpZ2hlciBgbWFuaWZlc3RWZXJzaW9uYCkgYXJlIGFjY2VwdGVkXG4gICAqICAgd2l0aCBhIHdhcm5pbmcsIHNpbmNlIHRoaXMgcnVudGltZSBtYXkgbm90IHVuZGVyc3RhbmQgdGhlIHNjaGVtYS5cbiAgICovXG4gIHByaXZhdGUgdmVyaWZ5TWFuaWZlc3QobWFuaWZlc3Q6IFRhc2tzTWFuaWZlc3QpOiB2b2lkIHtcbiAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogbWFuaWZlc3RzIGdlbmVyYXRlZCBiZWZvcmUgdmVyc2lvbmluZyBjYXJyeSBub1xuICAgIC8vIHZlcnNpb24uXG4gICAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0VmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0VmVyc2lvbiA+IFRBU0tTX01BTklGRVNUX1ZFUlNJT04pIHtcbiAgICAgIGxvZ2dpbmcud2FybihcbiAgICAgICAgYCR7VGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRX0gd2FzIGdlbmVyYXRlZCBieSBhIG5ld2VyIHZlcnNpb24gb2YgcHJvamVuIGAgK1xuICAgICAgICAgIGAobWFuaWZlc3QgdmVyc2lvbiAke21hbmlmZXN0Lm1hbmlmZXN0VmVyc2lvbn0sIHRoaXMgcHJvamVuIHN1cHBvcnRzIHVwIHRvICR7VEFTS1NfTUFOSUZFU1RfVkVSU0lPTn0pLiBgICtcbiAgICAgICAgICBgU29tZSB0YXNrcyBtYXkgbm90IGJlaGF2ZSBhcyBleHBlY3RlZDsgY29uc2lkZXIgdXBncmFkaW5nIHByb2plbi5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUnVuVGFzayB7XG4gIHByaXZhdGUgZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudHM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Rpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZTogVGFza1J1bnRpbWUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrOiBUYXNrU3BlYyxcbiAgICBwYXJlbnRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXJnczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiA9IFtdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW52UGFyYW06IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge30sXG4gICkge1xuICAgIHRoaXMud29ya2RpciA9IHRhc2suY3dkID8/IHRoaXMucnVudGltZS53b3JrZGlyO1xuICAgIHRoaXMucGFyZW50cyA9IHBhcmVudHM7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIHRhc2suIFRoaXMgd2FzIHByZXZpb3VzbHkgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IsIGJ1dCBpcyBub3dcbiAgICogYW4gYXN5bmMgbWV0aG9kIHNpbmNlIHNoZWxsIGV4ZWN1dGlvbiBpcyBhc3luY2hyb25vdXMgKGUuZy4gZGF4IG9uXG4gICAqIFdpbmRvd3MpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRhc2ssIGFyZ3MsIHBhcmVudHMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIXRhc2suc3RlcHMgfHwgdGFzay5zdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubG9nRGVidWcoZ3JheShcIk5vIGFjdGlvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZCBmb3IgdGhpcyB0YXNrLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbnYgPSBhd2FpdCB0aGlzLnJlc29sdmVFbnZpcm9ubWVudCh0aGlzLmVudlBhcmFtLCBwYXJlbnRzKTtcblxuICAgIGNvbnN0IGVudmxvZ3MgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmVudikpIHtcbiAgICAgIGNvbnN0IHZ2ID0gdiA/PyBcIlwiO1xuICAgICAgY29uc3QgdHJpbW1lZCA9XG4gICAgICAgIHZ2Lmxlbmd0aCA+IEVOVl9UUklNX0xFTiA/IHZ2LnN1YnN0cmluZygwLCBFTlZfVFJJTV9MRU4pICsgXCIuLi5cIiA6IHZ2O1xuICAgICAgZW52bG9ncy5wdXNoKGAke2t9PSR7dHJpbW1lZH1gKTtcbiAgICB9XG5cbiAgICBpZiAoZW52bG9ncy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubG9nRGVidWcoZ3JheShgJHt1bmRlcmxpbmUoXCJlbnZcIil9OiAke2VudmxvZ3Muam9pbihcIiBcIil9YCkpO1xuICAgIH1cblxuICAgIC8vIGV2YWx1YXRlIGNvbmRpdGlvblxuICAgIGlmICghKGF3YWl0IHRoaXMuZXZhbENvbmRpdGlvbih0YXNrKSkpIHtcbiAgICAgIHRoaXMubG9nKFwiY29uZGl0aW9uIGV4aXRlZCB3aXRoIG5vbi16ZXJvIC0gc2tpcHBpbmdcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdmVyaWZ5IHdlIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZGVmaW5lZFxuICAgIGNvbnN0IG1lcmdlZCA9IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLnRoaXMuZW52IH07XG4gICAgY29uc3QgbWlzc2luZyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRhc2sucmVxdWlyZWRFbnYgPz8gW10pIHtcbiAgICAgIGlmICghKG5hbWUgaW4gbWVyZ2VkKSkge1xuICAgICAgICBtaXNzaW5nLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWlzc2luZyByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6ICR7bWlzc2luZy5qb2luKFwiLFwiKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGFzay5zdGVwcykge1xuICAgICAgLy8gZXZhbHVhdGUgc3RlcCBjb25kaXRpb25cbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZXZhbENvbmRpdGlvbihzdGVwKSkpIHtcbiAgICAgICAgdGhpcy5sb2coXCJjb25kaXRpb24gZXhpdGVkIHdpdGggbm9uLXplcm8gLSBza2lwcGluZ1wiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3NMaXN0OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgLi4uKHN0ZXAuYXJncyB8fCBbXSksXG4gICAgICAgIC4uLihzdGVwLnJlY2VpdmVBcmdzID8gYXJncyA6IFtdKSxcbiAgICAgIF0ubWFwKChhKSA9PiBhLnRvU3RyaW5nKCkpO1xuXG4gICAgICBpZiAoc3RlcC5zYXkpIHtcbiAgICAgICAgbG9nZ2luZy5pbmZvKHRoaXMuZm10TG9nKHN0ZXAuc2F5KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwLnNwYXduKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVudGltZS5ydW5UYXNrKFxuICAgICAgICAgIHN0ZXAuc3Bhd24sXG4gICAgICAgICAgWy4uLnRoaXMucGFyZW50cywgdGhpcy50YXNrLm5hbWVdLFxuICAgICAgICAgIGFyZ3NMaXN0LFxuICAgICAgICAgIHN0ZXAuZW52LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleGVjcyA9IHN0ZXAuZXhlYyA/IFtzdGVwLmV4ZWNdIDogW107XG5cbiAgICAgIC8vIFBhcnNlIHN0ZXAtc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmV2YWxFbnZpcm9ubWVudChzdGVwLmVudiA/PyB7fSk7XG5cbiAgICAgIGlmIChzdGVwLmJ1aWx0aW4pIHtcbiAgICAgICAgZXhlY3MucHVzaCh0aGlzLnJlbmRlckJ1aWx0aW4oc3RlcC5idWlsdGluKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZXhlYyBvZiBleGVjcykge1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29tbWFuZCA9IGV4ZWM7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQuaW5jbHVkZXMoUVVPVEVEX0FSR1NfTUFSS0VSKSkge1xuICAgICAgICAgIC8vIFBvb3JseSBpbWl0YXRlIGJhc2ggcXVvdGVkIHZhcmlhYmxlIGV4cGFuc2lvbi4gSWYgXCIkQFwiIGlzIGVuY291bnRlcmVkIGluIGJhc2gsIGVsZW1lbnRzIG9mIHRoZSBhcmcgYXJyYXlcbiAgICAgICAgICAvLyB0aGF0IGNvbnRhaW4gd2hpdGVzcGFjZSB3aWxsIGJlIHNpbmdsZSBxdW90ZWQgKCdhcmcnKS4gVGhpcyBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSBpbiB0aGluZ3MgbGlrZSBmaWxlbmFtZXMuXG4gICAgICAgICAgLy8gSW1pdGF0ZSB0aGF0IGJlaGF2aW9yIGhlcmUgYnkgc2luZ2xlIHF1b3RpbmcgZXZlcnkgZWxlbWVudCBvZiB0aGUgYXJnIGFycmF5IHdoZW4gYSBxdW90ZWQgYXJnIG1hcmtlciAoXCIkQFwiKVxuICAgICAgICAgIC8vIGlzIGVuY291bnRlcmVkLlxuICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UoXG4gICAgICAgICAgICBRVU9URURfQVJHU19NQVJLRVIsXG4gICAgICAgICAgICBhcmdzTGlzdC5tYXAoKGFyZykgPT4gYCcke2FyZ30nYCkuam9pbihcIiBcIiksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLmluY2x1ZGVzKEFSR1NfTUFSS0VSKSkge1xuICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UoQVJHU19NQVJLRVIsIGFyZ3NMaXN0LmpvaW4oXCIgXCIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kID0gW2NvbW1hbmQsIC4uLmFyZ3NMaXN0XS5qb2luKFwiIFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHN0ZXAuY3dkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2hlbGwoe1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIGV4dHJhRW52OiBlbnYsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaGFzRXJyb3IgPSByZXN1bHQuc3RhdHVzICE9PSAwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gYSBub24temVybyBleGl0IGNvZGUgaXMgcmVwb3J0ZWQgdmlhIGByZXN1bHQuc3RhdHVzYCBhYm92ZTsgdGhpc1xuICAgICAgICAgIC8vIGNhdGNoIGhhbmRsZXMgZXJyb3JzIHRocm93biB3aGlsZSBhdHRlbXB0aW5nIHRvIHNwYXduIHRoZSBjb21tYW5kLlxuICAgICAgICAgIGlmICgoZSBhcyBhbnkpPy5tZXNzYWdlPy5zdGFydHNXaXRoKFwibm9uLXplcm8gZXhpdCBjb2RlOlwiKSkge1xuICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUYXNrIFwiJHtcbiAgICAgICAgICAgICAgdGhpcy5mdWxsbmFtZVxuICAgICAgICAgICAgfVwiIGZhaWxlZCB3aGVuIGV4ZWN1dGluZyBcIiR7Y29tbWFuZH1cIiAoY3dkOiAke3Jlc29sdmUoXG4gICAgICAgICAgICAgIGN3ZCA/PyB0aGlzLndvcmtkaXIsXG4gICAgICAgICAgICApfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIHRhc2sgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhc2VkIG9uIFwiY29uZGl0aW9uXCIuXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGV4ZWN1dGVkIG9yIGZhbHNlIGlmIHRoZSBjb25kaXRpb25cbiAgICogZXZhbHVhdGVzIHRvIGZhbHNlIChleGl0cyB3aXRoIG5vbi16ZXJvKSwgaW5kaWNhdGluZyB0aGF0IHRoZSB0YXNrIHNob3VsZFxuICAgKiBiZSBza2lwcGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBldmFsQ29uZGl0aW9uKHRhc2tPclN0ZXA6IFRhc2tTcGVjIHwgVGFza1N0ZXApIHtcbiAgICAvLyBubyBjb25kaXRpb24sIGNhcnJ5IG9uXG4gICAgaWYgKCF0YXNrT3JTdGVwLmNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5sb2coZ3JheShgJHt1bmRlcmxpbmUoXCJjb25kaXRpb25cIil9OiAke3Rhc2tPclN0ZXAuY29uZGl0aW9ufWApKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNoZWxsKHtcbiAgICAgIGNvbW1hbmQ6IHRhc2tPclN0ZXAuY29uZGl0aW9uLFxuICAgICAgbG9ncHJlZml4OiBcImNvbmRpdGlvbjogXCIsXG4gICAgICBxdWlldDogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIHNoZWxsIGNvbW1hbmRzIChlLmcuIGAkKHh4KWApXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWxFbnZpcm9ubWVudChlbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgY29uc3Qgb3V0cHV0OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52ID8/IHt9KSkge1xuICAgICAgaWYgKFN0cmluZyh2YWx1ZSkuc3RhcnRzV2l0aChcIiQoXCIpICYmIFN0cmluZyh2YWx1ZSkuZW5kc1dpdGgoXCIpXCIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdmFsdWUuc3Vic3RyaW5nKDIsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNoZWxsRXZhbCh7IGNvbW1hbmQ6IHF1ZXJ5IH0pO1xuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yXG4gICAgICAgICAgICA/IHJlc3VsdC5lcnJvci5zdGFja1xuICAgICAgICAgICAgOiByZXN1bHQuc3RkZXJyPy50b1N0cmluZygpLnRyaW0oKSB8fFxuICAgICAgICAgICAgICByZXN1bHQuc3Rkb3V0Py50b1N0cmluZygpLnRyaW0oKSB8fFxuICAgICAgICAgICAgICBgY29tbWFuZCBleGl0ZWQgd2l0aCBjb2RlICR7cmVzdWx0LnN0YXR1c31gO1xuXG4gICAgICAgICAgbG9nZ2luZy53YXJuKFxuICAgICAgICAgICAgdGhpcy5mbXRMb2coXG4gICAgICAgICAgICAgIGAke3VuZGVybGluZShrZXkpfTogdW5hYmxlIHRvIGV2YWx1YXRlIFwiJHtxdWVyeX1cIi4gRW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBza2lwcGVkLiBDaGVjayB0aGF0IHRoZSBjb21tYW5kIGV4aXN0cyBhbmQgcnVucyBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsb2dnaW5nLndhcm4odGhpcy5mbXRMb2coYCR7dW5kZXJsaW5lKGtleSl9OiAke2Vycm9yfWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXRba2V5XSA9IHJlc3VsdC5zdGRvdXQ/LnRvU3RyaW5nKFwidXRmLThcIikudHJpbSgpID8/IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3IgYSB0YXNrLiBOYW1lbHksIGl0IHN1cHBvcnRzIHRoaXMgc3ludGF4XG4gICAqIGAkKHh4KWAgZm9yIGFsbG93aW5nIGVudmlyb25tZW50IHRvIGJlIGV2YWx1YXRlZCBieSBleGVjdXRpbmcgYSBzaGVsbFxuICAgKiBjb21tYW5kIGFuZCBvYnRhaW5pbmcgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUVudmlyb25tZW50KFxuICAgIGVudlBhcmFtOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBwYXJlbnRzOiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgbGV0IGVudiA9IHRoaXMucnVudGltZS5tYW5pZmVzdC5lbnYgPz8ge307XG5cbiAgICAvLyBhZGQgZW52IGZyb20gYWxsIHBhcmVudCB0YXNrcyBvbmUgYnkgb25lXG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2YgcGFyZW50cykge1xuICAgICAgZW52ID0ge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIC4uLih0aGlzLnJ1bnRpbWUudHJ5RmluZFRhc2socGFyZW50KT8uZW52ID8/IHt9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgdGFzayBlbnZpcm9ubWVudCwgdGhlbiB0aGUgc3BlY2lmaWMgZW52IGxhc3RcbiAgICBlbnYgPSB7XG4gICAgICAuLi5lbnYsXG4gICAgICAuLi4odGhpcy50YXNrLmVudiA/PyB7fSksXG4gICAgICAuLi5lbnZQYXJhbSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXZhbEVudmlyb25tZW50KGVudiA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgXCJmdWxsIG5hbWVcIiBvZiB0aGUgdGFzayB3aGljaCBpbmNsdWRlcyBhbGwgaXQncyBwYXJlbnQgdGFzayBuYW1lcyBjb25jYXRlbmF0ZWQgYnkgY2hldnJvbnMuXG4gICAqL1xuICBwcml2YXRlIGdldCBmdWxsbmFtZSgpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucGFyZW50cywgdGhpcy50YXNrLm5hbWVdLmpvaW4oXCIgwrsgXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2coLi4uYXJnczogYW55W10pIHtcbiAgICBsb2dnaW5nLnZlcmJvc2UodGhpcy5mbXRMb2coLi4uYXJncykpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dEZWJ1ZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIGxvZ2dpbmcuZGVidWcodGhpcy5mbXRMb2coLi4uYXJncykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbXRMb2coLi4uYXJnczogYW55W10pIHtcbiAgICByZXR1cm4gZm9ybWF0KGAke3VuZGVybGluZSh0aGlzLmZ1bGxuYW1lKX0gfGAsIC4uLmFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaGVsbChvcHRpb25zOiBTaGVsbE9wdGlvbnMpOiBQcm9taXNlPFNoZWxsUmVzdWx0PiB7XG4gICAgY29uc3QgcXVpZXQgPSBvcHRpb25zLnF1aWV0ID8/IGZhbHNlO1xuICAgIGlmICghcXVpZXQpIHtcbiAgICAgIGNvbnN0IGxvZyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ3ByZWZpeCkge1xuICAgICAgICBsb2cucHVzaChvcHRpb25zLmxvZ3ByZWZpeCk7XG4gICAgICB9XG5cbiAgICAgIGxvZy5wdXNoKG9wdGlvbnMuY29tbWFuZCk7XG5cbiAgICAgIGlmIChvcHRpb25zLmN3ZCkge1xuICAgICAgICBsb2cucHVzaChgKGN3ZDogJHtvcHRpb25zLmN3ZH0pYCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nKGxvZy5qb2luKFwiIFwiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3dkID0gb3B0aW9ucy5jd2QgPz8gdGhpcy53b3JrZGlyO1xuICAgIGlmICghZXhpc3RzU3luYyhjd2QpIHx8ICFzdGF0U3luYyhjd2QpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGludmFsaWQgd29ya2RpciAoY3dkKTogJHtjd2R9IG11c3QgYmUgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi50aGlzLmVudixcbiAgICAgIC4uLm9wdGlvbnMuZXh0cmFFbnYsXG4gICAgfTtcblxuICAgIC8vIE9uIFdpbmRvd3MgdGhlIGRlZmF1bHQgc2hlbGwgKGNtZC5leGUpIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIFBPU0lYLXN0eWxlXG4gICAgLy8gY29tbWFuZHMgcHJvamVuIHRhc2tzIGFyZSB3cml0dGVuIGluIChgY2F0YCwgYGNwYCwgYG1rZGlyIC1wYCwgYHJtIC1yZmAsXG4gICAgLy8gYCYmYCBjaGFpbnMsIGAkVkFSYCwgLi4uKS4gUnVuIHRoZSBjb21tYW5kIHRocm91Z2ggZGF4J3MgY3Jvc3MtcGxhdGZvcm1cbiAgICAvLyBzaGVsbCBpbnN0ZWFkLCB3aGljaCBzaGlwcyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNvbW1vblxuICAgIC8vIGNvbW1hbmRzLiBOb3cgdGhhdCB0aGUgdGFzayBydW50aW1lIGlzIGFzeW5jaHJvbm91cyB3ZSBjYW4gZHJpdmUgZGF4J3NcbiAgICAvLyBgJGAgQVBJIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3Bhd25pbmcgYSBzeW5jaHJvbm91cyBjaGlsZCBub2RlIHByb2Nlc3MuXG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgICAgLy8gc3Rkb3V0L3N0ZGVyciBhcmUgb25seSBjYXB0dXJlZCB3aGVuIGEgY2FsbGVyIHBpcGVzIHRoZW0gKGUuZy5cbiAgICAgIC8vIGBzaGVsbEV2YWxgKTsgb3RoZXJ3aXNlIGluaGVyaXQgc28gb3V0cHV0IGlzIHN0cmVhbWVkIHRvIHRoZSB0ZXJtaW5hbC5cbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuc3Bhd25PcHRpb25zPy5zdGRpbyk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICQucmF3YCR7b3B0aW9ucy5jb21tYW5kfWBcbiAgICAgICAgLmN3ZChjd2QpXG4gICAgICAgIC5lbnYoZW52KVxuICAgICAgICAuc3Rkb3V0KGNhcHR1cmUgPyBcInBpcGVkXCIgOiBcImluaGVyaXRcIilcbiAgICAgICAgLnN0ZGVycihjYXB0dXJlID8gXCJwaXBlZFwiIDogXCJpbmhlcml0XCIpXG4gICAgICAgIC5ub1Rocm93KCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogcmVzdWx0LmNvZGUsXG4gICAgICAgIHN0ZG91dDogY2FwdHVyZSA/IEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRvdXRCeXRlcykgOiBudWxsLFxuICAgICAgICBzdGRlcnI6IGNhcHR1cmUgPyBCdWZmZXIuZnJvbShyZXN1bHQuc3RkZXJyQnl0ZXMpIDogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYXduU3luYyhvcHRpb25zLmNvbW1hbmQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjd2QsXG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgIGVudixcbiAgICAgIC4uLm9wdGlvbnMuc3Bhd25PcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaGVsbEV2YWwob3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxTaGVsbFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnNoZWxsKHtcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHNwYXduT3B0aW9uczoge1xuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnVpbHRpbihidWlsdGluOiBzdHJpbmcpIHtcbiAgICAvLyBMb2NhdGUgcHJvamVuJ3MgcGFja2FnZSByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSB0aGlzIG1vZHVsZSdzIGRpcmVjdG9yeVxuICAgIC8vIHVudGlsIHdlIGZpbmQgYSBwYWNrYWdlLmpzb24uIFRoaXMgd29ya3Mgd2hldGhlciB0aGUgY29kZSBydW5zIGZyb20gdGhlXG4gICAgLy8gY29tcGlsZWQgZmlsZSAobGliL2NsaS90YXNrLXJ1bnRpbWUuanMpIG9yIGZyb20gdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzXG4gICAgLy8gKGxpYi9ydW4tdGFzay5janMpLCB3aGljaCBsaXZlIGF0IGRpZmZlcmVudCBkZXB0aHMgLSBzbyBhIGhhcmQtY29kZWRcbiAgICAvLyByZWxhdGl2ZSBwYXRoIHRvIHBhY2thZ2UuanNvbiB3b3VsZCBiZSB3cm9uZyBpbiBvbmUgb2YgdGhlIHR3byBjYXNlcy5cbiAgICBsZXQgbW9kdWxlUm9vdCA9IF9fZGlybmFtZTtcbiAgICB3aGlsZSAoIWV4aXN0c1N5bmMoam9pbihtb2R1bGVSb290LCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUobW9kdWxlUm9vdCk7XG4gICAgICBpZiAocGFyZW50ID09PSBtb2R1bGVSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBsb2NhdGUgdGhlIHByb2plbiBwYWNrYWdlIHJvb3RcIik7XG4gICAgICB9XG4gICAgICBtb2R1bGVSb290ID0gcGFyZW50O1xuICAgIH1cbiAgICBjb25zdCBwcm9ncmFtID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICAgam9pbihtb2R1bGVSb290LCBcImxpYlwiLCBgJHtidWlsdGlufS50YXNrLmpzYCksXG4gICAgKTtcbiAgICByZXR1cm4gYFwiJHtwcm9jZXNzLmV4ZWNQYXRofVwiIFwiJHtwcm9ncmFtfVwiYDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2hlbGxPcHRpb25zIHtcbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBwcm9qZWN0IGRpclxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuICByZWFkb25seSBsb2dwcmVmaXg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNwYXduT3B0aW9ucz86IFNwYXduT3B0aW9ucztcbiAgLyoqIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXh0cmFFbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbn1cbiJdfQ==
|
|
477
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS90YXNrLXJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsMkJBQXdEO0FBQ3hELCtCQUE4QztBQUM5QywyQ0FBNkI7QUFDN0IsK0JBQThCO0FBQzlCLGlDQUF3QztBQUN4Qyw2QkFBd0I7QUFDeEIsc0NBQStEO0FBQy9ELG9EQUFzQztBQUV0Qyx1Q0FBd0M7QUFFeEMscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUNyQix1QkFBdUIsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7QUFFOUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUksV0FBVyxHQUFHLENBQUM7QUFrQzlDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBQ3RCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEQsbUJBQVUsRUFDVixZQUFZLENBQ2IsQ0FBQztJQUVGOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsT0FB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dXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgc3RhdFN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IGdyYXksIHVuZGVybGluZSB9IGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgJCB9IGZyb20gXCJkYXhcIjtcbmltcG9ydCB7IFBST0pFTl9ESVIsIFRBU0tTX01BTklGRVNUX1ZFUlNJT04gfSBmcm9tIFwiLi4vY29tbW9uXCI7XG5pbXBvcnQgKiBhcyBsb2dnaW5nIGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFRhc2tzTWFuaWZlc3QsIFRhc2tTcGVjLCBUYXNrU3RlcCB9IGZyb20gXCIuLi90YXNrLW1vZGVsXCI7XG5pbXBvcnQgeyByYXdTaGVsbCB9IGZyb20gXCIuLi91dGlsL2V4ZWNcIjtcblxuLy8gYXZvaWRzIGEgKGZhbHNlIHBvc2l0aXZlKSBlc2J1aWxkIHdhcm5pbmcgYWJvdXQgaW5jb3JyZWN0IGltcG9ydHMuXG4vLyBgPy5kZWZhdWx0ID8/IG1vZHVsZWAga2VlcHMgdGhpcyB3b3JraW5nIGJvdGggYXMgYSBwbGFpbiBDb21tb25KUyByZXF1aXJlIGFuZFxuLy8gd2hlbiB0aGUgZGVwZW5kZW5jeSBpcyBpbnRlcm9wLXdyYXBwZWQgaW5zaWRlIHRoZSBidW5kbGVkIHJ1bi10YXNrLmNqcyAod2hlcmVcbi8vIGByZXF1aXJlKC4uLilgIG1heSB5aWVsZCBgeyBkZWZhdWx0OiBmbiB9YCBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbikuIFNlZVxuLy8gcHJvamVuIzQ0MDcgKFwicGFyc2VDb25mbGljdEpTT04gaXMgbm90IGEgZnVuY3Rpb25cIiBhZnRlciBlamVjdCkuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgcGFyc2VDb25mbGljdEpTT05Nb2R1bGUgPSByZXF1aXJlKFwicGFyc2UtY29uZmxpY3QtanNvblwiKTtcbmNvbnN0IHBhcnNlQ29uZmxpY3RKU09OID1cbiAgcGFyc2VDb25mbGljdEpTT05Nb2R1bGU/LmRlZmF1bHQgPz8gcGFyc2VDb25mbGljdEpTT05Nb2R1bGU7XG5cbmNvbnN0IEVOVl9UUklNX0xFTiA9IDIwO1xuY29uc3QgQVJHU19NQVJLRVIgPSBcIiRAXCI7XG5jb25zdCBRVU9URURfQVJHU19NQVJLRVIgPSBgXCIke0FSR1NfTUFSS0VSfVwiYDtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQuXG4gKlxuICogVGhpcyBpcyBhIG5vcm1hbGl6ZWQgc3Vic2V0IG9mIG5vZGUncyBgU3Bhd25TeW5jUmV0dXJuc2Agc28gdGhhdCB0aGVcbiAqIHN5bmNocm9ub3VzIChgc3Bhd25TeW5jYCkgYW5kIGFzeW5jaHJvbm91cyAoYGRheGApIGV4ZWN1dGlvbiBwYXRocyBjYW4gcmV0dXJuXG4gKiBhIGNvbXBhdGlibGUgc2hhcGUuXG4gKi9cbmludGVyZmFjZSBTaGVsbFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLCBvciBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQgYnkgYVxuICAgKiBzaWduYWwgb3IgbmV2ZXIgc3Bhd25lZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ2FwdHVyZWQgc3Rkb3V0LiBPbmx5IHBvcHVsYXRlZCB3aGVuIHN0ZG91dCBpcyBwaXBlZCAoZS5nLiB3aGVuIGV2YWx1YXRpbmdcbiAgICogZW52aXJvbm1lbnQgdmFyaWFibGVzKTsgYG51bGxgL2B1bmRlZmluZWRgIHdoZW4gc3RkaW8gaXMgaW5oZXJpdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Rkb3V0PzogQnVmZmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ2FwdHVyZWQgc3RkZXJyLiBTZWUgYHN0ZG91dGAuXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI/OiBCdWZmZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciByYWlzZWQgd2hpbGUgYXR0ZW1wdGluZyB0byBzcGF3biB0aGUgY29tbWFuZCAobm90IGEgbm9uLXplcm8gZXhpdFxuICAgKiBjb2RlLCB3aGljaCBpcyByZXBvcnRlZCB2aWEgYHN0YXR1c2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3I/OiBFcnJvcjtcbn1cblxuLyoqXG4gKiBUaGUgcnVudGltZSBjb21wb25lbnQgb2YgdGhlIHRhc2tzIGVuZ2luZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tSdW50aW1lIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0LXJlbGF0aXZlIHBhdGggb2YgdGhlIHRhc2tzIG1hbmlmZXN0IGZpbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BTklGRVNUX0ZJTEUgPSBwYXRoLnBvc2l4LmpvaW4oXG4gICAgUFJPSkVOX0RJUixcbiAgICBcInRhc2tzLmpzb25cIixcbiAgKTtcblxuICAvKipcbiAgICogT25lLXNob3QgZW50cnlwb2ludCBmb3IgdGhlIHN0YW5kYWxvbmUgdGFzayBydW5uZXIuXG4gICAqXG4gICAqIENyZWF0ZXMgYSBydW50aW1lIHJvb3RlZCBhdCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgcnVucyB0aGUgbmFtZWRcbiAgICogdGFzaywgYW5kIGNvbnZlcnRzIGFueSBmYWlsdXJlIGludG8gYSBub24temVybyBwcm9jZXNzIGV4aXQgY29kZS4gVGhpcyBpc1xuICAgKiB0aGUgc2luZ2xlIGxpbmUgaW52b2tlZCBieSB0aGUgYnVuZGxlZCBgc2NyaXB0cy9ydW4tdGFzay5janNgIHRoYXRcbiAgICogXCJwcm9qZW4gZWplY3RcIiBlbWl0cywgd2hpY2gga2VlcHMgdGhlIGdlbmVyYXRlZCBidW5kbGUgZm9vdGVyIHRyaXZpYWwuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJ1bi4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuYXJndlsyXWAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIG1haW4obmFtZTogc3RyaW5nID0gcHJvY2Vzcy5hcmd2WzJdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBUYXNrUnVudGltZShcIi5cIikucnVuVGFzayhuYW1lKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZT8uc3RhY2sgPz8gU3RyaW5nKGUpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRhc2tzLmpzb25cbiAgICovXG4gIHByaXZhdGUgX21hbmlmZXN0OiBUYXNrc01hbmlmZXN0ID0geyB0YXNrczoge30gfTtcblxuICAvKipcbiAgICogVGhlIHJhdyBjb250ZW50cyBvZiB0aGUgY3VycmVudGx5IGxvYWRlZCBtYW5pZmVzdCwgdXNlZCB0byBkZXRlY3QgY2hhbmdlc1xuICAgKiBvbiBkaXNrIHNvIHRoZSBydW50aW1lIGNhbiByZWxvYWQgYSByZWdlbmVyYXRlZCBtYW5pZmVzdCBtaWQtcnVuLlxuICAgKi9cbiAgcHJpdmF0ZSBfaWRlbnRpdHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCBhbmQgdGhlIGN3ZCBmb3IgZXhlY3V0aW5nIHRhc2tzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtkaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih3b3JrZGlyOiBzdHJpbmcpIHtcbiAgICB0aGlzLndvcmtkaXIgPSByZXNvbHZlKHdvcmtkaXIpO1xuICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgbG9hZC4gVGhpcyBhbHNvIHZlcmlmaWVzIHRoZSBtYW5pZmVzdCdzIHNjaGVtYVxuICAgIC8vIHZlcnNpb24uXG4gICAgdGhpcy5yZWxvYWRNYW5pZmVzdElmQ2hhbmdlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50cyBvZiB0YXNrcy5qc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1hbmlmZXN0KCk6IFRhc2tzTWFuaWZlc3Qge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0IG1hbmlmZXN0UGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBqb2luKHRoaXMud29ya2RpciwgVGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhc2tzIGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFza3MoKTogVGFza1NwZWNbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5tYW5pZmVzdC50YXNrcyA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHRhc2sgYnkgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHRyeUZpbmRUYXNrKG5hbWU6IHN0cmluZyk6IFRhc2tTcGVjIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubWFuaWZlc3QudGFza3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hbmlmZXN0LnRhc2tzW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHRhc2suXG4gICAqIEBwYXJhbSBuYW1lIFRoZSB0YXNrIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuVGFzayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBhcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW10sXG4gICAgZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIHByZXZpb3VzbHkgZXhlY3V0ZWQgdGFzayAobW9zdCBpbXBvcnRhbnRseSB0aGUgXCJkZWZhdWx0XCIvc3ludGggdGFzayxcbiAgICAvLyB3aGljaCBgYnVpbGRgIHNwYXducyBmaXJzdCkgbWF5IGhhdmUgcmVnZW5lcmF0ZWQgYC5wcm9qZW4vdGFza3MuanNvbmAuXG4gICAgLy8gUGljayB1cCBhbnkgc3VjaCBjaGFuZ2VzIGJlZm9yZSByZXNvbHZpbmcgYW5kIHJ1bm5pbmcgdGhpcyB0YXNrIHNvIHdlXG4gICAgLy8gbmV2ZXIgZXhlY3V0ZSBhIHN0YWxlLCBpbi1tZW1vcnkgZGVmaW5pdGlvbi5cbiAgICB0aGlzLnJlbG9hZE1hbmlmZXN0SWZDaGFuZ2VkKCk7XG5cbiAgICBjb25zdCB0YXNrID0gdGhpcy50cnlGaW5kVGFzayhuYW1lKTtcbiAgICBpZiAoIXRhc2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGZpbmQgY29tbWFuZCAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFJ1blRhc2sodGhpcywgdGFzaywgcGFyZW50cywgYXJncywgZW52KS5ydW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1yZWFkcyB0aGUgdGFza3MgbWFuaWZlc3QgZnJvbSBkaXNrIGlmIGl0cyBjb250ZW50cyBjaGFuZ2VkIHNpbmNlIGl0IHdhc1xuICAgKiBsYXN0IGxvYWRlZCwgdmVyaWZ5aW5nIGl0cyBzY2hlbWEgdmVyc2lvbiBhbG9uZyB0aGUgd2F5LlxuICAgKlxuICAgKiBDaGFuZ2UgZGV0ZWN0aW9uIGNvbXBhcmVzIHRoZSByYXcgZmlsZSBjb250ZW50cywgc28gYW4gdW5jaGFuZ2VkIG1hbmlmZXN0XG4gICAqIGlzIG5vdCByZS12ZXJpZmllZCBvciByZS1hZG9wdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSByZWxvYWRNYW5pZmVzdElmQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBpZiAoIWV4aXN0c1N5bmModGhpcy5tYW5pZmVzdFBhdGgpKSB7XG4gICAgICAvLyBObyBtYW5pZmVzdCBvbiBkaXNrOiB0cmVhdCBhcyBhbiBlbXB0eSBwcm9qZWN0IChsZWdhY3kgYmVoYXZpb3IpLlxuICAgICAgdGhpcy5fbWFuaWZlc3QgPSB7IHRhc2tzOiB7fSB9O1xuICAgICAgdGhpcy5faWRlbnRpdHkgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF3ID0gcmVhZEZpbGVTeW5jKHRoaXMubWFuaWZlc3RQYXRoLCBcInV0Zi04XCIpO1xuICAgIGlmIChyYXcgPT09IHRoaXMuX2lkZW50aXR5KSB7XG4gICAgICByZXR1cm47IC8vIHVuY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBsb2FkXG4gICAgfVxuXG4gICAgY29uc3QgbWFuaWZlc3Q6IFRhc2tzTWFuaWZlc3QgPSBwYXJzZUNvbmZsaWN0SlNPTihyYXcsIHVuZGVmaW5lZCwgXCJ0aGVpcnNcIik7XG5cbiAgICAvLyBBIHByZXZpb3VzbHkgbG9hZGVkIG1hbmlmZXN0IG1lYW5zIHRoaXMgaXMgYSAqcmVsb2FkKiAoZS5nLiB0aGVcbiAgICAvLyBcImRlZmF1bHRcIi9zeW50aCB0YXNrIHJlZ2VuZXJhdGVkIHRoZSBmaWxlIG1pZC1ydW4pLCBhcyBvcHBvc2VkIHRvIHRoZVxuICAgIC8vIGluaXRpYWwgbG9hZCBwZXJmb3JtZWQgYnkgdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IGlzUmVsb2FkID0gdGhpcy5faWRlbnRpdHkgIT09IHVuZGVmaW5lZDtcblxuICAgIHRoaXMudmVyaWZ5TWFuaWZlc3QobWFuaWZlc3QpO1xuICAgIHRoaXMuX21hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgdGhpcy5faWRlbnRpdHkgPSByYXc7XG5cbiAgICBpZiAoaXNSZWxvYWQpIHtcbiAgICAgIGxvZ2dpbmcuZGVidWcoXG4gICAgICAgIGAke1Rhc2tSdW50aW1lLk1BTklGRVNUX0ZJTEV9IGNoYW5nZWQgb24gZGlzazsgc3VjY2Vzc2Z1bGx5IGxvYWRlZCB0aGUgbmV3IHRhc2tzIG1hbmlmZXN0LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBmcmVzaGx5IHJlYWQgbWFuaWZlc3Q6XG4gICAqXG4gICAqIC0gTGVnYWN5IG1hbmlmZXN0cyAobm8gYG1hbmlmZXN0VmVyc2lvbmApIGFyZSBhY2NlcHRlZCBhcy1pcyBmb3IgYmFja3dhcmRzXG4gICAqICAgY29tcGF0aWJpbGl0eS5cbiAgICogLSBNYW5pZmVzdHMgZnJvbSBhIG5ld2VyIHByb2plbiAoYSBoaWdoZXIgYG1hbmlmZXN0VmVyc2lvbmApIGFyZSBhY2NlcHRlZFxuICAgKiAgIHdpdGggYSB3YXJuaW5nLCBzaW5jZSB0aGlzIHJ1bnRpbWUgbWF5IG5vdCB1bmRlcnN0YW5kIHRoZSBzY2hlbWEuXG4gICAqL1xuICBwcml2YXRlIHZlcmlmeU1hbmlmZXN0KG1hbmlmZXN0OiBUYXNrc01hbmlmZXN0KTogdm9pZCB7XG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IG1hbmlmZXN0cyBnZW5lcmF0ZWQgYmVmb3JlIHZlcnNpb25pbmcgY2Fycnkgbm9cbiAgICAvLyB2ZXJzaW9uLlxuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdFZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdFZlcnNpb24gPiBUQVNLU19NQU5JRkVTVF9WRVJTSU9OKSB7XG4gICAgICBsb2dnaW5nLndhcm4oXG4gICAgICAgIGAke1Rhc2tSdW50aW1lLk1BTklGRVNUX0ZJTEV9IHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb2plbiBgICtcbiAgICAgICAgICBgKG1hbmlmZXN0IHZlcnNpb24gJHttYW5pZmVzdC5tYW5pZmVzdFZlcnNpb259LCB0aGlzIHByb2plbiBzdXBwb3J0cyB1cCB0byAke1RBU0tTX01BTklGRVNUX1ZFUlNJT059KS4gYCArXG4gICAgICAgICAgYFNvbWUgdGFza3MgbWF5IG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQ7IGNvbnNpZGVyIHVwZ3JhZGluZyBwcm9qZW4uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJ1blRhc2sge1xuICBwcml2YXRlIGVudjogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRzOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtkaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWU6IFRhc2tSdW50aW1lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFzazogVGFza1NwZWMsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFyZ3M6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVudlBhcmFtOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApIHtcbiAgICB0aGlzLndvcmtkaXIgPSB0YXNrLmN3ZCA/PyB0aGlzLnJ1bnRpbWUud29ya2RpcjtcbiAgICB0aGlzLnBhcmVudHMgPSBwYXJlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSB0YXNrLiBUaGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLCBidXQgaXMgbm93XG4gICAqIGFuIGFzeW5jIG1ldGhvZCBzaW5jZSBzaGVsbCBleGVjdXRpb24gaXMgYXN5bmNocm9ub3VzIChlLmcuIGRheCBvblxuICAgKiBXaW5kb3dzKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB0YXNrLCBhcmdzLCBwYXJlbnRzIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF0YXNrLnN0ZXBzIHx8IHRhc2suc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmxvZ0RlYnVnKGdyYXkoXCJObyBhY3Rpb25zIGhhdmUgYmVlbiBzcGVjaWZpZWQgZm9yIHRoaXMgdGFzay5cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW52ID0gYXdhaXQgdGhpcy5yZXNvbHZlRW52aXJvbm1lbnQodGhpcy5lbnZQYXJhbSwgcGFyZW50cyk7XG5cbiAgICBjb25zdCBlbnZsb2dzID0gW107XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5lbnYpKSB7XG4gICAgICBjb25zdCB2diA9IHYgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPVxuICAgICAgICB2di5sZW5ndGggPiBFTlZfVFJJTV9MRU4gPyB2di5zdWJzdHJpbmcoMCwgRU5WX1RSSU1fTEVOKSArIFwiLi4uXCIgOiB2djtcbiAgICAgIGVudmxvZ3MucHVzaChgJHtrfT0ke3RyaW1tZWR9YCk7XG4gICAgfVxuXG4gICAgaWYgKGVudmxvZ3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxvZ0RlYnVnKGdyYXkoYCR7dW5kZXJsaW5lKFwiZW52XCIpfTogJHtlbnZsb2dzLmpvaW4oXCIgXCIpfWApKTtcbiAgICB9XG5cbiAgICAvLyBldmFsdWF0ZSBjb25kaXRpb25cbiAgICBpZiAoIShhd2FpdCB0aGlzLmV2YWxDb25kaXRpb24odGFzaykpKSB7XG4gICAgICB0aGlzLmxvZyhcImNvbmRpdGlvbiBleGl0ZWQgd2l0aCBub24temVybyAtIHNraXBwaW5nXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHZlcmlmeSB3ZSByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGRlZmluZWRcbiAgICBjb25zdCBtZXJnZWQgPSB7IC4uLnByb2Nlc3MuZW52LCAuLi50aGlzLmVudiB9O1xuICAgIGNvbnN0IG1pc3NpbmcgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0YXNrLnJlcXVpcmVkRW52ID8/IFtdKSB7XG4gICAgICBpZiAoIShuYW1lIGluIG1lcmdlZCkpIHtcbiAgICAgICAgbWlzc2luZy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzOiAke21pc3Npbmcuam9pbihcIixcIil9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHRhc2suc3RlcHMpIHtcbiAgICAgIC8vIGV2YWx1YXRlIHN0ZXAgY29uZGl0aW9uXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmV2YWxDb25kaXRpb24oc3RlcCkpKSB7XG4gICAgICAgIHRoaXMubG9nKFwiY29uZGl0aW9uIGV4aXRlZCB3aXRoIG5vbi16ZXJvIC0gc2tpcHBpbmdcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzTGlzdDogc3RyaW5nW10gPSBbXG4gICAgICAgIC4uLihzdGVwLmFyZ3MgfHwgW10pLFxuICAgICAgICAuLi4oc3RlcC5yZWNlaXZlQXJncyA/IGFyZ3MgOiBbXSksXG4gICAgICBdLm1hcCgoYSkgPT4gYS50b1N0cmluZygpKTtcblxuICAgICAgaWYgKHN0ZXAuc2F5KSB7XG4gICAgICAgIGxvZ2dpbmcuaW5mbyh0aGlzLmZtdExvZyhzdGVwLnNheSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RlcC5zcGF3bikge1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bnRpbWUucnVuVGFzayhcbiAgICAgICAgICBzdGVwLnNwYXduLFxuICAgICAgICAgIFsuLi50aGlzLnBhcmVudHMsIHRoaXMudGFzay5uYW1lXSxcbiAgICAgICAgICBhcmdzTGlzdCxcbiAgICAgICAgICBzdGVwLmVudixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhlY3MgPSBzdGVwLmV4ZWMgPyBbc3RlcC5leGVjXSA6IFtdO1xuXG4gICAgICAvLyBQYXJzZSBzdGVwLXNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5ldmFsRW52aXJvbm1lbnQoc3RlcC5lbnYgPz8ge30pO1xuXG4gICAgICBpZiAoc3RlcC5idWlsdGluKSB7XG4gICAgICAgIGV4ZWNzLnB1c2godGhpcy5yZW5kZXJCdWlsdGluKHN0ZXAuYnVpbHRpbikpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGV4ZWMgb2YgZXhlY3MpIHtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbW1hbmQgPSBleGVjO1xuXG4gICAgICAgIGlmIChjb21tYW5kLmluY2x1ZGVzKFFVT1RFRF9BUkdTX01BUktFUikpIHtcbiAgICAgICAgICAvLyBQb29ybHkgaW1pdGF0ZSBiYXNoIHF1b3RlZCB2YXJpYWJsZSBleHBhbnNpb24uIElmIFwiJEBcIiBpcyBlbmNvdW50ZXJlZCBpbiBiYXNoLCBlbGVtZW50cyBvZiB0aGUgYXJnIGFycmF5XG4gICAgICAgICAgLy8gdGhhdCBjb250YWluIHdoaXRlc3BhY2Ugd2lsbCBiZSBzaW5nbGUgcXVvdGVkICgnYXJnJykuIFRoaXMgcHJlc2VydmVzIHdoaXRlc3BhY2UgaW4gdGhpbmdzIGxpa2UgZmlsZW5hbWVzLlxuICAgICAgICAgIC8vIEltaXRhdGUgdGhhdCBiZWhhdmlvciBoZXJlIGJ5IHNpbmdsZSBxdW90aW5nIGV2ZXJ5IGVsZW1lbnQgb2YgdGhlIGFyZyBhcnJheSB3aGVuIGEgcXVvdGVkIGFyZyBtYXJrZXIgKFwiJEBcIilcbiAgICAgICAgICAvLyBpcyBlbmNvdW50ZXJlZC5cbiAgICAgICAgICBjb21tYW5kID0gY29tbWFuZC5yZXBsYWNlKFxuICAgICAgICAgICAgUVVPVEVEX0FSR1NfTUFSS0VSLFxuICAgICAgICAgICAgYXJnc0xpc3QubWFwKChhcmcpID0+IGAnJHthcmd9J2ApLmpvaW4oXCIgXCIpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZC5pbmNsdWRlcyhBUkdTX01BUktFUikpIHtcbiAgICAgICAgICBjb21tYW5kID0gY29tbWFuZC5yZXBsYWNlKEFSR1NfTUFSS0VSLCBhcmdzTGlzdC5qb2luKFwiIFwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZCA9IFtjb21tYW5kLCAuLi5hcmdzTGlzdF0uam9pbihcIiBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjd2QgPSBzdGVwLmN3ZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNoZWxsKHtcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBleHRyYUVudjogZW52LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGhhc0Vycm9yID0gcmVzdWx0LnN0YXR1cyAhPT0gMDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGEgbm9uLXplcm8gZXhpdCBjb2RlIGlzIHJlcG9ydGVkIHZpYSBgcmVzdWx0LnN0YXR1c2AgYWJvdmU7IHRoaXNcbiAgICAgICAgICAvLyBjYXRjaCBoYW5kbGVzIGVycm9ycyB0aHJvd24gd2hpbGUgYXR0ZW1wdGluZyB0byBzcGF3biB0aGUgY29tbWFuZC5cbiAgICAgICAgICBpZiAoKGUgYXMgYW55KT8ubWVzc2FnZT8uc3RhcnRzV2l0aChcIm5vbi16ZXJvIGV4aXQgY29kZTpcIikpIHtcbiAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGFzayBcIiR7XG4gICAgICAgICAgICAgIHRoaXMuZnVsbG5hbWVcbiAgICAgICAgICAgIH1cIiBmYWlsZWQgd2hlbiBleGVjdXRpbmcgXCIke2NvbW1hbmR9XCIgKGN3ZDogJHtyZXNvbHZlKFxuICAgICAgICAgICAgICBjd2QgPz8gdGhpcy53b3JrZGlyLFxuICAgICAgICAgICAgKX0pYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSB0YXNrIHNob3VsZCBiZSBleGVjdXRlZCBiYXNlZCBvbiBcImNvbmRpdGlvblwiLlxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0YXNrIHNob3VsZCBiZSBleGVjdXRlZCBvciBmYWxzZSBpZiB0aGUgY29uZGl0aW9uXG4gICAqIGV2YWx1YXRlcyB0byBmYWxzZSAoZXhpdHMgd2l0aCBub24temVybyksIGluZGljYXRpbmcgdGhhdCB0aGUgdGFzayBzaG91bGRcbiAgICogYmUgc2tpcHBlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZhbENvbmRpdGlvbih0YXNrT3JTdGVwOiBUYXNrU3BlYyB8IFRhc2tTdGVwKSB7XG4gICAgLy8gbm8gY29uZGl0aW9uLCBjYXJyeSBvblxuICAgIGlmICghdGFza09yU3RlcC5jb25kaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMubG9nKGdyYXkoYCR7dW5kZXJsaW5lKFwiY29uZGl0aW9uXCIpfTogJHt0YXNrT3JTdGVwLmNvbmRpdGlvbn1gKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaGVsbCh7XG4gICAgICBjb21tYW5kOiB0YXNrT3JTdGVwLmNvbmRpdGlvbixcbiAgICAgIGxvZ3ByZWZpeDogXCJjb25kaXRpb246IFwiLFxuICAgICAgcXVpZXQ6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBzaGVsbCBjb21tYW5kcyAoZS5nLiBgJCh4eClgKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBldmFsRW52aXJvbm1lbnQoZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IG91dHB1dDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVudiA/PyB7fSkpIHtcbiAgICAgIGlmIChTdHJpbmcodmFsdWUpLnN0YXJ0c1dpdGgoXCIkKFwiKSAmJiBTdHJpbmcodmFsdWUpLmVuZHNXaXRoKFwiKVwiKSkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHZhbHVlLnN1YnN0cmluZygyLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaGVsbEV2YWwoeyBjb21tYW5kOiBxdWVyeSB9KTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc3VsdC5lcnJvclxuICAgICAgICAgICAgPyByZXN1bHQuZXJyb3Iuc3RhY2tcbiAgICAgICAgICAgIDogcmVzdWx0LnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCkgfHxcbiAgICAgICAgICAgICAgcmVzdWx0LnN0ZG91dD8udG9TdHJpbmcoKS50cmltKCkgfHxcbiAgICAgICAgICAgICAgYGNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAke3Jlc3VsdC5zdGF0dXN9YDtcblxuICAgICAgICAgIGxvZ2dpbmcud2FybihcbiAgICAgICAgICAgIHRoaXMuZm10TG9nKFxuICAgICAgICAgICAgICBgJHt1bmRlcmxpbmUoa2V5KX06IHVuYWJsZSB0byBldmFsdWF0ZSBcIiR7cXVlcnl9XCIuIEVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgc2tpcHBlZC4gQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCBleGlzdHMgYW5kIHJ1bnMgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nZ2luZy53YXJuKHRoaXMuZm10TG9nKGAke3VuZGVybGluZShrZXkpfTogJHtlcnJvcn1gKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0W2tleV0gPSByZXN1bHQuc3Rkb3V0Py50b1N0cmluZyhcInV0Zi04XCIpLnRyaW0oKSA/PyBcIlwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgZm9yIGEgdGFzay4gTmFtZWx5LCBpdCBzdXBwb3J0cyB0aGlzIHN5bnRheFxuICAgKiBgJCh4eClgIGZvciBhbGxvd2luZyBlbnZpcm9ubWVudCB0byBiZSBldmFsdWF0ZWQgYnkgZXhlY3V0aW5nIGEgc2hlbGxcbiAgICogY29tbWFuZCBhbmQgb2J0YWluaW5nIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc29sdmVFbnZpcm9ubWVudChcbiAgICBlbnZQYXJhbTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgcGFyZW50czogc3RyaW5nW10sXG4gICkge1xuICAgIGxldCBlbnYgPSB0aGlzLnJ1bnRpbWUubWFuaWZlc3QuZW52ID8/IHt9O1xuXG4gICAgLy8gYWRkIGVudiBmcm9tIGFsbCBwYXJlbnQgdGFza3Mgb25lIGJ5IG9uZVxuICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHBhcmVudHMpIHtcbiAgICAgIGVudiA9IHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICAuLi4odGhpcy5ydW50aW1lLnRyeUZpbmRUYXNrKHBhcmVudCk/LmVudiA/PyB7fSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRhc2sgZW52aXJvbm1lbnQsIHRoZW4gdGhlIHNwZWNpZmljIGVudiBsYXN0XG4gICAgZW52ID0ge1xuICAgICAgLi4uZW52LFxuICAgICAgLi4uKHRoaXMudGFzay5lbnYgPz8ge30pLFxuICAgICAgLi4uZW52UGFyYW0sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV2YWxFbnZpcm9ubWVudChlbnYgPz8ge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFwiZnVsbCBuYW1lXCIgb2YgdGhlIHRhc2sgd2hpY2ggaW5jbHVkZXMgYWxsIGl0J3MgcGFyZW50IHRhc2sgbmFtZXMgY29uY2F0ZW5hdGVkIGJ5IGNoZXZyb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgZnVsbG5hbWUoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnBhcmVudHMsIHRoaXMudGFzay5uYW1lXS5qb2luKFwiIMK7IFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbG9nZ2luZy52ZXJib3NlKHRoaXMuZm10TG9nKC4uLmFyZ3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nRGVidWcoLi4uYXJnczogYW55W10pIHtcbiAgICBsb2dnaW5nLmRlYnVnKHRoaXMuZm10TG9nKC4uLmFyZ3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm10TG9nKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIGZvcm1hdChgJHt1bmRlcmxpbmUodGhpcy5mdWxsbmFtZSl9IHxgLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hlbGwob3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxTaGVsbFJlc3VsdD4ge1xuICAgIGNvbnN0IHF1aWV0ID0gb3B0aW9ucy5xdWlldCA/PyBmYWxzZTtcbiAgICBpZiAoIXF1aWV0KSB7XG4gICAgICBjb25zdCBsb2cgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgICBpZiAob3B0aW9ucy5sb2dwcmVmaXgpIHtcbiAgICAgICAgbG9nLnB1c2gob3B0aW9ucy5sb2dwcmVmaXgpO1xuICAgICAgfVxuXG4gICAgICBsb2cucHVzaChvcHRpb25zLmNvbW1hbmQpO1xuXG4gICAgICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICAgICAgbG9nLnB1c2goYChjd2Q6ICR7b3B0aW9ucy5jd2R9KWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZyhsb2cuam9pbihcIiBcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGN3ZCA9IG9wdGlvbnMuY3dkID8/IHRoaXMud29ya2RpcjtcbiAgICBpZiAoIWV4aXN0c1N5bmMoY3dkKSB8fCAhc3RhdFN5bmMoY3dkKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBpbnZhbGlkIHdvcmtkaXIgKGN3ZCk6ICR7Y3dkfSBtdXN0IGJlIGFuIGV4aXN0aW5nIGRpcmVjdG9yeWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgLi4udGhpcy5lbnYsXG4gICAgICAuLi5vcHRpb25zLmV4dHJhRW52LFxuICAgIH07XG5cbiAgICAvLyBzdGRvdXQvc3RkZXJyIGFyZSBvbmx5IGNhcHR1cmVkIHdoZW4gYSBjYWxsZXIgcGlwZXMgdGhlbSAoZS5nLlxuICAgIC8vIGBzaGVsbEV2YWxgKTsgb3RoZXJ3aXNlIGluaGVyaXQgc28gb3V0cHV0IGlzIHN0cmVhbWVkIHRvIHRoZSB0ZXJtaW5hbC5cbiAgICBjb25zdCBjYXB0dXJlID0gQXJyYXkuaXNBcnJheShvcHRpb25zLnNwYXduT3B0aW9ucz8uc3RkaW8pO1xuXG4gICAgLy8gT24gV2luZG93cyB0aGUgZGVmYXVsdCBzaGVsbCAoY21kLmV4ZSkgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgUE9TSVgtc3R5bGVcbiAgICAvLyBjb21tYW5kcyBwcm9qZW4gdGFza3MgYXJlIHdyaXR0ZW4gaW4gKGBjYXRgLCBgY3BgLCBgbWtkaXIgLXBgLCBgcm0gLXJmYCxcbiAgICAvLyBgJiZgIGNoYWlucywgYCRWQVJgLCAuLi4pLiBSdW4gdGhlIGNvbW1hbmQgdGhyb3VnaCBkYXgncyBjcm9zcy1wbGF0Zm9ybVxuICAgIC8vIHNoZWxsIGluc3RlYWQsIHdoaWNoIHNoaXBzIGJ1aWx0LWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY29tbW9uXG4gICAgLy8gY29tbWFuZHMuIE5vdyB0aGF0IHRoZSB0YXNrIHJ1bnRpbWUgaXMgYXN5bmNocm9ub3VzIHdlIGNhbiBkcml2ZSBkYXgnc1xuICAgIC8vIGAkYCBBUEkgZGlyZWN0bHkgaW5zdGVhZCBvZiBzcGF3bmluZyBhIHN5bmNocm9ub3VzIGNoaWxkIG5vZGUgcHJvY2Vzcy5cbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAkLnJhd2Ake29wdGlvbnMuY29tbWFuZH1gXG4gICAgICAgIC5jd2QoY3dkKVxuICAgICAgICAuZW52KGVudilcbiAgICAgICAgLnN0ZG91dChjYXB0dXJlID8gXCJwaXBlZFwiIDogXCJpbmhlcml0XCIpXG4gICAgICAgIC5zdGRlcnIoY2FwdHVyZSA/IFwicGlwZWRcIiA6IFwiaW5oZXJpdFwiKVxuICAgICAgICAubm9UaHJvdygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IHJlc3VsdC5jb2RlLFxuICAgICAgICBzdGRvdXQ6IGNhcHR1cmUgPyBCdWZmZXIuZnJvbShyZXN1bHQuc3Rkb3V0Qnl0ZXMpIDogbnVsbCxcbiAgICAgICAgc3RkZXJyOiBjYXB0dXJlID8gQnVmZmVyLmZyb20ocmVzdWx0LnN0ZGVyckJ5dGVzKSA6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE9uIG90aGVyIHBsYXRmb3JtcywgcnVuIHRoZSBjb21tYW5kIHRocm91Z2ggdGhlIHN5c3RlbSBzaGVsbCB2aWEgdGhlXG4gICAgLy8gY2VudHJhbGl6ZWQgYHJhd1NoZWxsYCBoZWxwZXIuXG4gICAgcmV0dXJuIHJhd1NoZWxsLmV4ZWMob3B0aW9ucy5jb21tYW5kLCB7IGN3ZCwgZW52LCBjYXB0dXJlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaGVsbEV2YWwob3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxTaGVsbFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnNoZWxsKHtcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHNwYXduT3B0aW9uczoge1xuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnVpbHRpbihidWlsdGluOiBzdHJpbmcpIHtcbiAgICAvLyBMb2NhdGUgcHJvamVuJ3MgcGFja2FnZSByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSB0aGlzIG1vZHVsZSdzIGRpcmVjdG9yeVxuICAgIC8vIHVudGlsIHdlIGZpbmQgYSBwYWNrYWdlLmpzb24uIFRoaXMgd29ya3Mgd2hldGhlciB0aGUgY29kZSBydW5zIGZyb20gdGhlXG4gICAgLy8gY29tcGlsZWQgZmlsZSAobGliL2NsaS90YXNrLXJ1bnRpbWUuanMpIG9yIGZyb20gdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzXG4gICAgLy8gKGxpYi9ydW4tdGFzay5janMpLCB3aGljaCBsaXZlIGF0IGRpZmZlcmVudCBkZXB0aHMgLSBzbyBhIGhhcmQtY29kZWRcbiAgICAvLyByZWxhdGl2ZSBwYXRoIHRvIHBhY2thZ2UuanNvbiB3b3VsZCBiZSB3cm9uZyBpbiBvbmUgb2YgdGhlIHR3byBjYXNlcy5cbiAgICBsZXQgbW9kdWxlUm9vdCA9IF9fZGlybmFtZTtcbiAgICB3aGlsZSAoIWV4aXN0c1N5bmMoam9pbihtb2R1bGVSb290LCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUobW9kdWxlUm9vdCk7XG4gICAgICBpZiAocGFyZW50ID09PSBtb2R1bGVSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBsb2NhdGUgdGhlIHByb2plbiBwYWNrYWdlIHJvb3RcIik7XG4gICAgICB9XG4gICAgICBtb2R1bGVSb290ID0gcGFyZW50O1xuICAgIH1cbiAgICBjb25zdCBwcm9ncmFtID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICAgam9pbihtb2R1bGVSb290LCBcImxpYlwiLCBgJHtidWlsdGlufS50YXNrLmpzYCksXG4gICAgKTtcbiAgICByZXR1cm4gYFwiJHtwcm9jZXNzLmV4ZWNQYXRofVwiIFwiJHtwcm9ncmFtfVwiYDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2hlbGxPcHRpb25zIHtcbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBwcm9qZWN0IGRpclxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuICByZWFkb25seSBsb2dwcmVmaXg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNwYXduT3B0aW9ucz86IFNwYXduT3B0aW9ucztcbiAgLyoqIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXh0cmFFbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbn1cbiJdfQ==
|
package/lib/cli/util.d.ts
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* @param spec The npm package spec (e.g. `foo@^1.2` or `foo@/var/folders/8k/qcw0ls5pv_ph0000gn/T/projen-RYurCw/pkg.tgz`)
|
|
4
4
|
* @returns The installed package name (e.g. `@foo/bar`)
|
|
5
5
|
*/
|
|
6
|
-
export declare function installPackage(baseDir: string, spec: string, isProjen?: boolean): string
|
|
6
|
+
export declare function installPackage(baseDir: string, spec: string, isProjen?: boolean): Promise<string>;
|
|
7
7
|
/**
|
|
8
|
-
* Render
|
|
8
|
+
* Render the arguments to install an npm package (the args following `npm`).
|
|
9
9
|
*
|
|
10
10
|
* Engine checks are ignored at this point so that the module can be installed
|
|
11
11
|
* regardless of the environment. This was needed to unblock the upgrade of the
|
|
@@ -14,9 +14,9 @@ export declare function installPackage(baseDir: string, spec: string, isProjen?:
|
|
|
14
14
|
*
|
|
15
15
|
* @param dir Base directory
|
|
16
16
|
* @param module The module to install (e.g. foo@^1.2)
|
|
17
|
-
* @returns The
|
|
17
|
+
* @returns The arguments for `npm` (e.g. ["install", ..., "foo@^1.2"])
|
|
18
18
|
*/
|
|
19
|
-
export declare function
|
|
19
|
+
export declare function renderInstallArgs(dir: string, module: string): string[];
|
|
20
20
|
export declare function findJsiiFilePath(baseDir: string, moduleName: string): string | undefined;
|
|
21
21
|
export declare class CliError extends Error {
|
|
22
22
|
constructor(...lines: string[]);
|