projen 0.99.80 → 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +1677 -3664
- package/BREAKING_CHANGES.md +855 -0
- package/lib/ai-instructions.d.ts +0 -1
- package/lib/ai-instructions.js +6 -12
- package/lib/awscdk/auto-discover.js +7 -14
- package/lib/awscdk/awscdk-app-java.d.ts +0 -7
- package/lib/awscdk/awscdk-app-java.js +28 -21
- package/lib/awscdk/awscdk-app-py.d.ts +0 -12
- package/lib/awscdk/awscdk-app-py.js +27 -24
- package/lib/awscdk/awscdk-app-ts.d.ts +0 -5
- package/lib/awscdk/awscdk-app-ts.js +57 -31
- package/lib/awscdk/awscdk-construct.d.ts +0 -26
- package/lib/awscdk/awscdk-construct.js +4 -44
- package/lib/awscdk/awscdk-deps-java.js +2 -6
- package/lib/awscdk/awscdk-deps-js.js +2 -7
- package/lib/awscdk/awscdk-deps-py.js +2 -7
- package/lib/awscdk/awscdk-deps.d.ts +1 -90
- package/lib/awscdk/awscdk-deps.js +68 -114
- package/lib/awscdk/cdk-config.d.ts +0 -21
- package/lib/awscdk/cdk-config.js +44 -51
- package/lib/awscdk/cdk-tasks.js +26 -4
- package/lib/awscdk/integration-test.js +10 -15
- package/lib/awscdk/internal.js +5 -2
- package/lib/awscdk/lambda-extension.js +4 -16
- package/lib/awscdk/lambda-function.d.ts +0 -10
- package/lib/awscdk/lambda-function.js +88 -78
- package/lib/awscdk/private/feature-flags-v2.const.d.ts +1 -1
- package/lib/awscdk/private/feature-flags-v2.const.js +2 -2
- package/lib/build/build-workflow.js +51 -6
- package/lib/builtin-example.task.d.ts +1 -0
- package/lib/builtin-example.task.js +2 -1
- package/lib/cdk/auto-discover-base.js +43 -8
- package/lib/cdk/construct-lib.js +2 -4
- package/lib/cdk/integration-test-base.js +26 -4
- package/lib/cdk/jsii-build.d.ts +0 -1
- package/lib/cdk/jsii-build.js +4 -4
- package/lib/cdk/jsii-docgen.js +2 -4
- package/lib/cdk/jsii-project.d.ts +12 -9
- package/lib/cdk/jsii-project.js +22 -7
- package/lib/cdk8s/auto-discover.js +3 -6
- package/lib/cdk8s/cdk8s-app-py.js +7 -4
- package/lib/cdk8s/cdk8s-app-ts.js +43 -6
- package/lib/cdk8s/cdk8s-construct.js +44 -5
- package/lib/cdk8s/cdk8s-deps-py.js +2 -4
- package/lib/cdk8s/cdk8s-deps.js +50 -5
- package/lib/cdk8s/integration-test.js +2 -4
- package/lib/cdktf/cdktf-construct.js +36 -5
- package/lib/circleci/circleci.js +66 -44
- package/lib/cleanup.js +38 -5
- package/lib/cli/cmds/new.js +51 -20
- package/lib/cli/cmds/run-task.js +107 -0
- package/lib/cli/{synth.d.ts → cmds/synth.d.ts} +0 -5
- package/lib/cli/cmds/synth.js +90 -0
- package/lib/cli/index.js +47 -22
- package/lib/cli/macros.js +35 -2
- package/lib/{task-runtime.d.ts → cli/task-runtime.d.ts} +13 -2
- package/lib/cli/task-runtime.js +411 -0
- package/lib/cli/util.js +37 -4
- package/lib/component.js +3 -4
- package/lib/dependencies.js +43 -12
- package/lib/dev-env.js +10 -4
- package/lib/docker-compose/docker-compose-service.js +54 -4
- package/lib/docker-compose/docker-compose.js +8 -4
- package/lib/file.js +60 -5
- package/lib/gitattributes.js +7 -5
- package/lib/github/actions-provider.js +3 -7
- package/lib/github/auto-approve.js +3 -4
- package/lib/github/auto-merge.js +3 -5
- package/lib/github/auto-queue.js +36 -5
- package/lib/github/dependabot.js +13 -4
- package/lib/github/dependency-review.js +2 -4
- package/lib/github/github-credentials.js +37 -5
- package/lib/github/github-project.d.ts +1 -32
- package/lib/github/github-project.js +30 -8
- package/lib/github/github.d.ts +0 -9
- package/lib/github/github.js +27 -14
- package/lib/github/index.js +24 -2
- package/lib/github/merge-queue.js +3 -4
- package/lib/github/mergify.d.ts +0 -7
- package/lib/github/mergify.js +6 -13
- package/lib/github/pr-template.js +2 -4
- package/lib/github/pull-request-backport.js +4 -4
- package/lib/github/pull-request-lint.js +4 -4
- package/lib/github/stale.js +2 -4
- package/lib/github/task-workflow-job.js +20 -4
- package/lib/github/task-workflow.js +4 -4
- package/lib/github/workflow-actions.d.ts +0 -8
- package/lib/github/workflow-actions.js +2 -14
- package/lib/github/workflow-jobs.js +2 -4
- package/lib/github/workflow-steps.js +2 -4
- package/lib/github/workflows-model.d.ts +0 -8
- package/lib/github/workflows-model.js +1 -1
- package/lib/github/workflows.js +39 -6
- package/lib/gitlab/configuration-model.d.ts +0 -4
- package/lib/gitlab/configuration-model.js +1 -1
- package/lib/gitlab/configuration.js +125 -41
- package/lib/gitlab/gitlab-configuration.js +3 -5
- package/lib/gitlab/nested-configuration.js +3 -4
- package/lib/gitpod.js +11 -7
- package/lib/ignore-file.js +5 -4
- package/lib/index.d.ts +1 -2
- package/lib/index.js +38 -18
- package/lib/ini.js +36 -5
- package/lib/inventory.d.ts +32 -23
- package/lib/inventory.js +37 -4
- package/lib/java/java-project.js +26 -4
- package/lib/java/junit.js +2 -4
- package/lib/java/maven-compile.js +2 -4
- package/lib/java/maven-packaging.js +6 -4
- package/lib/java/maven-sample.js +2 -4
- package/lib/java/pom.js +45 -12
- package/lib/java/projenrc.js +10 -4
- package/lib/javascript/biome/biome.js +48 -6
- package/lib/javascript/bundler.d.ts +0 -8
- package/lib/javascript/bundler.js +48 -11
- package/lib/javascript/eslint.d.ts +0 -13
- package/lib/javascript/eslint.js +38 -37
- package/lib/javascript/index.js +24 -2
- package/lib/javascript/jest.d.ts +0 -20
- package/lib/javascript/jest.js +71 -15
- package/lib/javascript/license-checker.js +3 -4
- package/lib/javascript/node-package.d.ts +0 -28
- package/lib/javascript/node-package.js +136 -38
- package/lib/javascript/node-project.d.ts +5 -76
- package/lib/javascript/node-project.js +88 -81
- package/lib/javascript/npm-config.js +7 -9
- package/lib/javascript/prettier.js +16 -4
- package/lib/javascript/projenrc.js +3 -4
- package/lib/javascript/render-options.d.ts +2 -2
- package/lib/javascript/render-options.js +36 -5
- package/lib/javascript/typescript-config.js +45 -8
- package/lib/javascript/upgrade-dependencies.js +56 -36
- package/lib/javascript/util.js +35 -2
- package/lib/javascript/yarnrc.d.ts +1 -28
- package/lib/javascript/yarnrc.js +3 -45
- package/lib/json-patch.js +3 -4
- package/lib/json.js +4 -5
- package/lib/license.js +37 -5
- package/lib/logger.js +14 -11
- package/lib/logging.js +10 -7
- package/lib/makefile.js +7 -4
- package/lib/object-file.js +19 -4
- package/lib/project-build.js +26 -4
- package/lib/project-tree.js +3 -4
- package/lib/project.d.ts +0 -35
- package/lib/project.js +105 -58
- package/lib/projects.js +37 -6
- package/lib/projenrc-json.d.ts +0 -10
- package/lib/projenrc-json.js +4 -13
- package/lib/projenrc.js +2 -4
- package/lib/python/index.js +24 -2
- package/lib/python/pip.js +5 -4
- package/lib/python/poetry.js +63 -7
- package/lib/python/projenrc.js +10 -4
- package/lib/python/pyproject-toml-file.js +2 -4
- package/lib/python/pytest-sample.js +2 -4
- package/lib/python/pytest.d.ts +0 -12
- package/lib/python/pytest.js +3 -5
- package/lib/python/python-project.js +33 -10
- package/lib/python/python-sample.js +2 -4
- package/lib/python/requirements-file.js +4 -5
- package/lib/python/setuppy.d.ts +0 -8
- package/lib/python/setuppy.js +3 -4
- package/lib/python/setuptools.js +8 -4
- package/lib/python/uv.js +11 -4
- package/lib/python/venv.js +45 -6
- package/lib/readme.js +2 -4
- package/lib/release/bump-version.js +36 -3
- package/lib/release/bump-version.task.js +35 -2
- package/lib/release/commit-tag-version.js +39 -3
- package/lib/release/publisher.d.ts +0 -49
- package/lib/release/publisher.js +24 -22
- package/lib/release/release-trigger.js +33 -4
- package/lib/release/release.d.ts +0 -24
- package/lib/release/release.js +66 -31
- package/lib/release/tag-version.js +35 -2
- package/lib/release/update-changelog.js +36 -3
- package/lib/renovatebot.js +14 -4
- package/lib/run-projenrc-json.task.js +35 -2
- package/lib/run-task.cjs +12567 -271
- package/lib/sample-file.js +43 -9
- package/lib/smithy/smithy-build.js +46 -1
- package/lib/source-code.js +6 -5
- package/lib/task-runner.d.ts +25 -0
- package/lib/task-runner.js +92 -0
- package/lib/task.d.ts +0 -7
- package/lib/task.js +13 -13
- package/lib/tasks.d.ts +5 -9
- package/lib/tasks.js +64 -23
- package/lib/testing.js +2 -4
- package/lib/textfile.js +3 -4
- package/lib/toml.js +36 -5
- package/lib/typescript/projenrc-ts.js +8 -4
- package/lib/typescript/projenrc.js +6 -4
- package/lib/typescript/typescript-typedoc.js +2 -4
- package/lib/typescript/typescript.d.ts +0 -10
- package/lib/typescript/typescript.js +75 -29
- package/lib/util/synth.js +39 -6
- package/lib/util.js +38 -5
- package/lib/version.d.ts +0 -4
- package/lib/version.js +24 -10
- package/lib/vscode/devcontainer.js +11 -4
- package/lib/vscode/extensions.js +17 -18
- package/lib/vscode/launch-config.js +5 -6
- package/lib/vscode/settings.js +4 -4
- package/lib/vscode/vscode.js +5 -4
- package/lib/web/next.js +38 -8
- package/lib/web/postcss.js +5 -4
- package/lib/web/react.d.ts +0 -14
- package/lib/web/react.js +51 -25
- package/lib/web/tailwind.js +4 -4
- package/lib/xmlfile.js +2 -4
- package/lib/yaml.js +40 -5
- package/package.json +8 -9
- package/lib/cli/synth.js +0 -105
- package/lib/cli/tasks.js +0 -71
- package/lib/semver.d.ts +0 -34
- package/lib/semver.js +0 -56
- package/lib/task-runtime.js +0 -317
- /package/lib/cli/{tasks.d.ts → cmds/run-task.d.ts} +0 -0
|
@@ -1,9 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
3
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
36
|
exports.BundleLogLevel = exports.Charset = exports.SourceMapMode = exports.RunBundleTask = exports.Bundler = void 0;
|
|
5
37
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const path = require("path");
|
|
38
|
+
const path = __importStar(require("path"));
|
|
7
39
|
const path_1 = require("path");
|
|
8
40
|
const util_1 = require("./util");
|
|
9
41
|
const component_1 = require("../component");
|
|
@@ -13,6 +45,7 @@ const dependencies_1 = require("../dependencies");
|
|
|
13
45
|
* single file. In the future, this will also supports bundling websites.
|
|
14
46
|
*/
|
|
15
47
|
class Bundler extends component_1.Component {
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Bundler", version: "0.100.0" };
|
|
16
49
|
/**
|
|
17
50
|
* Returns the `Bundler` instance associated with a project or `undefined` if
|
|
18
51
|
* there is no Bundler.
|
|
@@ -23,6 +56,17 @@ class Bundler extends component_1.Component {
|
|
|
23
56
|
const isBundler = (o) => o instanceof Bundler;
|
|
24
57
|
return project.components.find(isBundler);
|
|
25
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* The semantic version requirement for `esbuild` (if defined).
|
|
61
|
+
*/
|
|
62
|
+
esbuildVersion;
|
|
63
|
+
/**
|
|
64
|
+
* Root bundle directory.
|
|
65
|
+
*/
|
|
66
|
+
bundledir;
|
|
67
|
+
_task;
|
|
68
|
+
runBundleTask;
|
|
69
|
+
loaders;
|
|
26
70
|
/**
|
|
27
71
|
* Creates a `Bundler`.
|
|
28
72
|
*/
|
|
@@ -31,11 +75,7 @@ class Bundler extends component_1.Component {
|
|
|
31
75
|
this.esbuildVersion = options.esbuildVersion;
|
|
32
76
|
this.bundledir = options.assetsDir ?? "assets";
|
|
33
77
|
this.loaders = options.loaders;
|
|
34
|
-
this.runBundleTask =
|
|
35
|
-
options.runBundleTask ??
|
|
36
|
-
(options.addToPreCompile === false
|
|
37
|
-
? RunBundleTask.MANUAL
|
|
38
|
-
: RunBundleTask.PRE_COMPILE);
|
|
78
|
+
this.runBundleTask = options.runBundleTask ?? RunBundleTask.PRE_COMPILE;
|
|
39
79
|
}
|
|
40
80
|
/**
|
|
41
81
|
* Gets or creates the singleton "bundle" task of the project.
|
|
@@ -183,8 +223,6 @@ class Bundler extends component_1.Component {
|
|
|
183
223
|
}
|
|
184
224
|
}
|
|
185
225
|
exports.Bundler = Bundler;
|
|
186
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
187
|
-
Bundler[_a] = { fqn: "projen.javascript.Bundler", version: "0.99.80" };
|
|
188
226
|
/**
|
|
189
227
|
* Options for BundlerOptions.runBundleTask
|
|
190
228
|
*/
|
|
@@ -214,7 +252,6 @@ var RunBundleTask;
|
|
|
214
252
|
* // to go to the "lib" directory:
|
|
215
253
|
* const project = new TypeScriptProject({
|
|
216
254
|
* name: "test",
|
|
217
|
-
* defaultReleaseBranch: "main",
|
|
218
255
|
* tsconfig: {
|
|
219
256
|
* compilerOptions: {
|
|
220
257
|
* outDir: "lib",
|
|
@@ -298,4 +335,4 @@ var BundleLogLevel;
|
|
|
298
335
|
/** Show nothing */
|
|
299
336
|
BundleLogLevel["SILENT"] = "silent";
|
|
300
337
|
})(BundleLogLevel || (exports.BundleLogLevel = BundleLogLevel = {}));
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qYXZhc2NyaXB0L2J1bmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsK0JBQXdDO0FBQ3hDLGlDQUEwQztBQUMxQyw0Q0FBeUM7QUFDekMsa0RBQWlEO0FBbURqRDs7O0dBR0c7QUFDSCxNQUFhLE9BQVEsU0FBUSxxQkFBUztJQUNwQzs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFZLEVBQWdCLEVBQUUsQ0FBQyxDQUFDLFlBQVksT0FBTyxDQUFDO1FBQ3ZFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQWdCRDs7T0FFRztJQUNILFlBQVksT0FBZ0IsRUFBRSxVQUEwQixFQUFFO1FBQ3hELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDO1FBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUUvQixJQUFJLENBQUMsYUFBYTtZQUNoQixPQUFPLENBQUMsYUFBYTtnQkFDckIsQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLEtBQUs7b0JBQ2hDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTTtvQkFDdEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFXLFVBQVU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMx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QiwyRUFBMkU7SUFDM0UsaUNBQWUsQ0FBQTtJQUNmLHdEQUF3RDtJQUN4RCwrQkFBYSxDQUFBO0lBQ2IsK0JBQStCO0lBQy9CLHFDQUFtQixDQUFBO0lBQ25CLHVCQUF1QjtJQUN2QixpQ0FBZSxDQUFBO0lBQ2YsbUJBQW1CO0lBQ25CLG1DQUFpQixDQUFBO0FBQ25CLENBQUMsRUFiVyxjQUFjLDhCQUFkLGNBQWMsUUFhekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBqb2luIGFzIHBhdGhKb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHJlbmRlckJ1bmRsZU5hbWUgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgdHlwZSB7IFRhc2sgfSBmcm9tIFwiLi4vdGFza1wiO1xuXG4vLyBQYXJ0cyBvZiB0aGlzIGZpbGUgaW5zcGlyZWQgYnkgQGF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXG4vLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL2MzYzc3MWM2ZjZmNjc5MGYyMjk4YTg1YTU0OWJkZWQ2NDBkMmUzNWIvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMvbGliL2J1bmRsaW5nLnRzI0wxOTVcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgQnVuZGxlcmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHNlbWFudGljIHZlcnNpb24gcmVxdWlyZW1lbnQgZm9yIGBlc2J1aWxkYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzcGVjaWZpYyB2ZXJzaW9uIChpbXBsaWVzIGxhdGVzdClcbiAgICovXG4gIHJlYWRvbmx5IGVzYnVpbGRWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgZGlyZWN0b3J5IGZvciBhbGwgYnVuZGxlcy5cbiAgICogQGRlZmF1bHQgXCJhc3NldHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRzRGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHRoZSBgYnVuZGxlYCBjb21tYW5kIGFzIGEgcHJlLWNvbXBpbGUgcGhhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBydW5CdW5kbGVUYXNrYCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkVG9QcmVDb21waWxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2hvb3NlIHdoaWNoIHBoYXNlIChpZiBhbnkpIHRvIGFkZCB0aGUgYGJ1bmRsZWAgY29tbWFuZCB0by5cbiAgICpcbiAgICogTm90ZTogSWYgdXNpbmcgYGFkZEJ1bmRsZSgpYCB3aXRoIHRoZSBgYnVuZGxlQ29tcGlsZWRSZXN1bHRzYCwgdGhpcyBvcHRpb25cbiAgICogbXVzdCBiZSBzZXQgdG8gYFJ1bkJ1bmRsZVRhc2suUE9TVF9DT01QSUxFYCBvciBgUnVuQnVuZGxlVGFzay5NQU5VQUxgLlxuICAgKlxuICAgKiBAc2VlIEFkZEJ1bmRsZU9wdGlvbnMuYnVuZGxlQ29tcGlsZWRSZXN1bHRzXG4gICAqXG4gICAqIEBkZWZhdWx0IFJ1bkJ1bmRsZVRhc2suUFJFX0NPTVBJTEVcbiAgICovXG4gIHJlYWRvbmx5IHJ1bkJ1bmRsZVRhc2s/OiBSdW5CdW5kbGVUYXNrO1xuXG4gIC8qKlxuICAgKiBNYXAgb2YgZmlsZSBleHRlbnNpb25zICh3aXRob3V0IGRvdCkgYW5kIGxvYWRlcnMgdG8gdXNlIGZvciB0aGlzIGZpbGUgdHlwZS5cbiAgICogTG9hZGVycyBhcmUgYXBwZW5kZWQgdG8gdGhlIGVzYnVpbGQgY29tbWFuZCBieSBgLS1sb2FkZXI6LmV4dGVuc2lvbj1sb2FkZXJgXG4gICAqL1xuICByZWFkb25seSBsb2FkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBBZGRzIHN1cHBvcnQgZm9yIGJ1bmRsaW5nIEphdmFTY3JpcHQgYXBwbGljYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgaW50byBhXG4gKiBzaW5nbGUgZmlsZS4gSW4gdGhlIGZ1dHVyZSwgdGhpcyB3aWxsIGFsc28gc3VwcG9ydHMgYnVuZGxpbmcgd2Vic2l0ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdW5kbGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBCdW5kbGVyYCBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBwcm9qZWN0IG9yIGB1bmRlZmluZWRgIGlmXG4gICAqIHRoZXJlIGlzIG5vIEJ1bmRsZXIuXG4gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0XG4gICAqIEByZXR1cm5zIEEgYnVuZGxlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogQnVuZGxlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaXNCdW5kbGVyID0gKG86IENvbXBvbmVudCk6IG8gaXMgQnVuZGxlciA9PiBvIGluc3RhbmNlb2YgQnVuZGxlcjtcbiAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNCdW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2VtYW50aWMgdmVyc2lvbiByZXF1aXJlbWVudCBmb3IgYGVzYnVpbGRgIChpZiBkZWZpbmVkKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlc2J1aWxkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSb290IGJ1bmRsZSBkaXJlY3RvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVuZGxlZGlyOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfdGFzazogVGFzayB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBydW5CdW5kbGVUYXNrPzogUnVuQnVuZGxlVGFzaztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGBCdW5kbGVyYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEJ1bmRsZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuZXNidWlsZFZlcnNpb24gPSBvcHRpb25zLmVzYnVpbGRWZXJzaW9uO1xuICAgIHRoaXMuYnVuZGxlZGlyID0gb3B0aW9ucy5hc3NldHNEaXIgPz8gXCJhc3NldHNcIjtcbiAgICB0aGlzLmxvYWRlcnMgPSBvcHRpb25zLmxvYWRlcnM7XG5cbiAgICB0aGlzLnJ1bkJ1bmRsZVRhc2sgPVxuICAgICAgb3B0aW9ucy5ydW5CdW5kbGVUYXNrID8/XG4gICAgICAob3B0aW9ucy5hZGRUb1ByZUNvbXBpbGUgPT09IGZhbHNlXG4gICAgICAgID8gUnVuQnVuZGxlVGFzay5NQU5VQUxcbiAgICAgICAgOiBSdW5CdW5kbGVUYXNrLlBSRV9DT01QSUxFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIGNyZWF0ZXMgdGhlIHNpbmdsZXRvbiBcImJ1bmRsZVwiIHRhc2sgb2YgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIElmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgaGF2ZSBhIFwiYnVuZGxlXCIgdGFzaywgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBzcGF3bmVkXG4gICAqIGR1cmluZyB0aGUgcHJlLWNvbXBpbGUgcGhhc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJ1bmRsZVRhc2soKTogVGFzayB7XG4gICAgaWYgKCF0aGlzLl90YXNrKSB7XG4gICAgICB0aGlzLmFkZEJ1bmRsaW5nU3VwcG9ydCgpO1xuICAgICAgdGhpcy5fdGFzayA9IHRoaXMucHJvamVjdC50YXNrcy5hZGRUYXNrKFwiYnVuZGxlXCIsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiUHJlcGFyZSBhc3NldHNcIixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBpbnN0YWxsIHRoZSBidW5kbGUgdGFzayBpbnRvIHRoZSBwcmUtY29tcGlsZSBwaGFzZS5cbiAgICAgIGlmICh0aGlzLnJ1bkJ1bmRsZVRhc2sgPT09IFJ1bkJ1bmRsZVRhc2suUFJFX0NPTVBJTEUpIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LnByZUNvbXBpbGVUYXNrLnNwYXduKHRoaXMuX3Rhc2spO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnJ1bkJ1bmRsZVRhc2sgPT09IFJ1bkJ1bmRsZVRhc2suUE9TVF9DT01QSUxFKSB7XG4gICAgICAgIHRoaXMucHJvamVjdC5wb3N0Q29tcGlsZVRhc2suc3Bhd24odGhpcy5fdGFzayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2s7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHRhc2sgdG8gdGhlIHByb2plY3Qgd2hpY2ggYnVuZGxlcyBhIHNwZWNpZmljIGVudHJ5cG9pbnQgYW5kIGFsbCBvZlxuICAgKiBpdHMgZGVwZW5kZW5jaWVzIGludG8gYSBzaW5nbGUgamF2YXNjcmlwdCBvdXRwdXQgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5cG9pbnQgVGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIGFydGlmYWN0IHdpdGhpbiB0aGUgcHJvamVjdFxuICAgKiBAcGFyYW0gb3B0aW9ucyBCdW5kbGluZyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkQnVuZGxlKGVudHJ5cG9pbnQ6IHN0cmluZywgb3B0aW9uczogQWRkQnVuZGxlT3B0aW9ucyk6IEJ1bmRsZSB7XG4gICAgY29uc3QgbmFtZSA9IHJlbmRlckJ1bmRsZU5hbWUoZW50cnlwb2ludCk7XG5cbiAgICBjb25zdCBvdXRkaXIgPSBwYXRoLnBvc2l4LmpvaW4odGhpcy5idW5kbGVkaXIsIG5hbWUpO1xuICAgIGNvbnN0IG91dGZpbGUgPSBwYXRoLnBvc2l4LmpvaW4ob3V0ZGlyLCBvcHRpb25zLm91dGZpbGUgPz8gXCJpbmRleC5qc1wiKTtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgXCJlc2J1aWxkXCIsXG4gICAgICBcIi0tYnVuZGxlXCIsXG4gICAgICBlbnRyeXBvaW50LFxuICAgICAgYC0tdGFyZ2V0PVwiJHtvcHRpb25zLnRhcmdldH1cImAsXG4gICAgICBgLS1wbGF0Zm9ybT1cIiR7b3B0aW9ucy5wbGF0Zm9ybX1cImAsXG4gICAgICBgLS1vdXRmaWxlPVwiJHtvdXRmaWxlfVwiYCxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMudHNjb25maWdQYXRoKSB7XG4gICAgICBhcmdzLnB1c2goYC0tdHNjb25maWc9XCIke29wdGlvbnMudHNjb25maWdQYXRofVwiYCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB4IG9mIG9wdGlvbnMuZXh0ZXJuYWxzID8/IFtdKSB7XG4gICAgICBhcmdzLnB1c2goYC0tZXh0ZXJuYWw6JHt4fWApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNvdXJjZW1hcCB8fCBvcHRpb25zLnNvdXJjZU1hcE1vZGUpIHtcbiAgICAgIGNvbnN0IHNvdXJjZU1hcE1vZGUgPSBvcHRpb25zLnNvdXJjZU1hcE1vZGUgPz8gU291cmNlTWFwTW9kZS5ERUZBVUxUO1xuICAgICAgY29uc3Qgc291cmNlTWFwVmFsdWUgPVxuICAgICAgICBzb3VyY2VNYXBNb2RlID09PSBTb3VyY2VNYXBNb2RlLkRFRkFVTFRcbiAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICA6IGA9JHtvcHRpb25zLnNvdXJjZU1hcE1vZGV9YDtcbiAgICAgIGFyZ3MucHVzaChgLS1zb3VyY2VtYXAke3NvdXJjZU1hcFZhbHVlfWApO1xuXG4gICAgICBpZiAob3B0aW9ucy5zb3VyY2VzQ29udGVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBhcmdzLnB1c2goYC0tc291cmNlcy1jb250ZW50PSR7b3B0aW9ucy5zb3VyY2VzQ29udGVudH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLmZvcm1hdDtcbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBhcmdzLnB1c2goYC0tZm9ybWF0PSR7Zm9ybWF0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlcnMgPVxuICAgICAgKG9wdGlvbnMubG9hZGVycyA/PyBmYWxzZSkgPyBvcHRpb25zLmxvYWRlcnMgOiAodGhpcy5sb2FkZXJzID8/IGZhbHNlKTtcbiAgICBpZiAobG9hZGVycykge1xuICAgICAgZm9yIChsZXQgW2V4dGVuc2lvbiwgbG9hZGVyXSBvZiBPYmplY3QuZW50cmllcyhsb2FkZXJzKSkge1xuICAgICAgICBhcmdzLnB1c2goYC0tbG9hZGVyOi4ke2V4dGVuc2lvbn09JHtsb2FkZXJ9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5lcyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuZGVmaW5lID8/IHt9KTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBkZWZpbmVzKSB7XG4gICAgICBhcmdzLnB1c2goYC0tZGVmaW5lOiR7a2V5fT0ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5taW5pZnkpIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tbWluaWZ5XCIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmxvZ0xldmVsKSB7XG4gICAgICBhcmdzLnB1c2goYC0tbG9nLWxldmVsPSR7b3B0aW9ucy5sb2dMZXZlbH1gKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMua2VlcE5hbWVzKSB7XG4gICAgICBhcmdzLnB1c2goXCItLWtlZXAtbmFtZXNcIik7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm1ldGFmaWxlKSB7XG4gICAgICBhcmdzLnB1c2goYC0tbWV0YWZpbGU9JHtwYXRoSm9pbihvdXRkaXIsIFwiaW5kZXgubWV0YS5qc29uXCIpfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5iYW5uZXIpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1iYW5uZXI6anM9JHtKU09OLnN0cmluZ2lmeShvcHRpb25zLmJhbm5lcil9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmZvb3Rlcikge1xuICAgICAgYXJncy5wdXNoKGAtLWZvb3Rlcjpqcz0ke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMuZm9vdGVyKX1gKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubWFpbkZpZWxkcykge1xuICAgICAgYXJncy5wdXNoKGAtLW1haW4tZmllbGRzPSR7b3B0aW9ucy5tYWluRmllbGRzLmpvaW4oXCIsXCIpfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pbmplY3QpIHtcbiAgICAgIGFyZ3MucHVzaCguLi5vcHRpb25zLmluamVjdC5tYXAoKGkpID0+IGAtLWluamVjdDoke2l9YCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lc2J1aWxkQXJncykge1xuICAgICAgY29uc3Qgc3ViQXJncyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuZXNidWlsZEFyZ3MpKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgIHN1YkFyZ3MucHVzaChrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgc3ViQXJncy5wdXNoKGAke2tleX09XCIke3ZhbHVlfVwiYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXJncy5wdXNoKHN1YkFyZ3Muam9pbihcIiBcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1bmRsZVRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhgYnVuZGxlOiR7bmFtZX1gLCB7XG4gICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSBhIEphdmFTY3JpcHQgYnVuZGxlIGZyb20gJHtlbnRyeXBvaW50fWAsXG4gICAgICBleGVjOiBhcmdzLmpvaW4oXCIgXCIpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5idW5kbGVUYXNrLnNwYXduKGJ1bmRsZVRhc2spO1xuXG4gICAgaWYgKG9wdGlvbnMuZXhlY3V0YWJsZSA/PyBmYWxzZSkge1xuICAgICAgYnVuZGxlVGFzay5leGVjKGBjaG1vZCAreCAke291dGZpbGV9YCk7XG4gICAgfVxuXG4gICAgbGV0IHdhdGNoVGFzaztcbiAgICBjb25zdCB3YXRjaCA9IG9wdGlvbnMud2F0Y2hUYXNrID8/IHRydWU7XG4gICAgaWYgKHdhdGNoKSB7XG4gICAgICB3YXRjaFRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhgYnVuZGxlOiR7bmFtZX06d2F0Y2hgLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQ29udGludW91c2x5IHVwZGF0ZSB0aGUgSmF2YVNjcmlwdCBidW5kbGUgZnJvbSAke2VudHJ5cG9pbnR9YCxcbiAgICAgICAgZXhlYzogYCR7YXJncy5qb2luKFwiIFwiKX0gLS13YXRjaGAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVuZGxlVGFzazogYnVuZGxlVGFzayxcbiAgICAgIHdhdGNoVGFzazogd2F0Y2hUYXNrLFxuICAgICAgb3V0ZGlyOiBvdXRkaXIsXG4gICAgICBvdXRmaWxlOiBvdXRmaWxlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGJ1bmRsaW5nIHN1cHBvcnQgdG8gYSBwcm9qZWN0LiBUaGlzIGlzIGNhbGxlZCBpbXBsaWNpdGx5IHdoZW5cbiAgICogYGJ1bmRsZVRhc2tgIGlzIHJlZmVyZW5jZWQgZmlyc3QuIEl0IGFkZHMgdGhlIGRlcGVuZGVuY3kgb24gYGVzYnVpbGRgLFxuICAgKiBnaXRpZ25vcmUvbnBtaWdub3JlLCBldGMuXG4gICAqL1xuICBwcml2YXRlIGFkZEJ1bmRsaW5nU3VwcG9ydCgpIHtcbiAgICBjb25zdCBpZ25vcmVFbnRyeSA9IGAvJHt0aGlzLmJ1bmRsZWRpcn0vYDtcbiAgICB0aGlzLnByb2plY3QuYWRkR2l0SWdub3JlKGlnbm9yZUVudHJ5KTtcbiAgICB0aGlzLnByb2plY3QuYWRkUGFja2FnZUlnbm9yZShgISR7aWdub3JlRW50cnl9YCk7IC8vIGluY2x1ZGUgaW4gdGFyYmFsbFxuICAgIGNvbnN0IGRlcCA9IHRoaXMuZXNidWlsZFZlcnNpb25cbiAgICAgID8gYGVzYnVpbGRAJHt0aGlzLmVzYnVpbGRWZXJzaW9ufWBcbiAgICAgIDogXCJlc2J1aWxkXCI7XG4gICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShkZXAsIERlcGVuZGVuY3lUeXBlLkJVSUxEKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZSB7XG4gIC8qKlxuICAgKiBUaGUgdGFzayB0aGF0IHByb2R1Y2VzIHRoaXMgYnVuZGxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxlVGFzazogVGFzaztcblxuICAvKipcbiAgICogVGhlIFwid2F0Y2hcIiB0YXNrIGZvciB0aGlzIGJ1bmRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHdhdGNoVGFzaz86IFRhc2s7XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIG9mIHRoZSBvdXRwdXQgZmlsZSAocmVsYXRpdmUgdG8gcHJvamVjdCByb290KS5cbiAgICovXG4gIHJlYWRvbmx5IG91dGZpbGU6IHN0cmluZztcblxuICAvKipcbiAgICogQmFzZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgb3V0cHV0IGZpbGUgKHJlbGF0aXZlIHRvIHByb2plY3Qgcm9vdCkuXG4gICAqL1xuICByZWFkb25seSBvdXRkaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBidW5kbGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGluZ09wdGlvbnMge1xuICAvKipcbiAgICogWW91IGNhbiBtYXJrIGEgZmlsZSBvciBhIHBhY2thZ2UgYXMgZXh0ZXJuYWwgdG8gZXhjbHVkZSBpdCBmcm9tIHlvdXIgYnVpbGQuXG4gICAqIEluc3RlYWQgb2YgYmVpbmcgYnVuZGxlZCwgdGhlIGltcG9ydCB3aWxsIGJlIHByZXNlcnZlZCAodXNpbmcgcmVxdWlyZSBmb3JcbiAgICogdGhlIGlpZmUgYW5kIGNqcyBmb3JtYXRzIGFuZCB1c2luZyBpbXBvcnQgZm9yIHRoZSBlc20gZm9ybWF0KSBhbmQgd2lsbCBiZVxuICAgKiBldmFsdWF0ZWQgYXQgcnVuIHRpbWUgaW5zdGVhZC5cbiAgICpcbiAgICogVGhpcyBoYXMgc2V2ZXJhbCB1c2VzLiBGaXJzdCBvZiBhbGwsIGl0IGNhbiBiZSB1c2VkIHRvIHRyaW0gdW5uZWNlc3NhcnlcbiAgICogY29kZSBmcm9tIHlvdXIgYnVuZGxlIGZvciBhIGNvZGUgcGF0aCB0aGF0IHlvdSBrbm93IHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG4gICAqIEZvciBleGFtcGxlLCBhIHBhY2thZ2UgbWF5IGNvbnRhaW4gY29kZSB0aGF0IG9ubHkgcnVucyBpbiBub2RlIGJ1dCB5b3Ugd2lsbFxuICAgKiBvbmx5IGJlIHVzaW5nIHRoYXQgcGFja2FnZSBpbiB0aGUgYnJvd3Nlci4gSXQgY2FuIGFsc28gYmUgdXNlZCB0byBpbXBvcnRcbiAgICogY29kZSBpbiBub2RlIGF0IHJ1biB0aW1lIGZyb20gYSBwYWNrYWdlIHRoYXQgY2Fubm90IGJlIGJ1bmRsZWQuIEZvclxuICAgKiBleGFtcGxlLCB0aGUgZnNldmVudHMgcGFja2FnZSBjb250YWlucyBhIG5hdGl2ZSBleHRlbnNpb24sIHdoaWNoIGVzYnVpbGRcbiAgICogZG9lc24ndCBzdXBwb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgYSBzb3VyY2UgbWFwIGluIHRoZSBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VtYXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbiBhZGRpdGlvbiB0byB0aGUgYGJ1bmRsZTp4eXpgIHRhc2ssIGNyZWF0ZXMgYGJ1bmRsZTp4eXo6d2F0Y2hgIHRhc2sgd2hpY2ggd2lsbFxuICAgKiBpbnZva2UgdGhlIHNhbWUgZXNidWlsZCBjb21tYW5kIHdpdGggdGhlIGAtLXdhdGNoYCBmbGFnLiBUaGlzIGNhbiBiZSB1c2VkXG4gICAqIHRvIGNvbnRpbnVzb3VseSB3YXRjaCBmb3IgY2hhbmdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgd2F0Y2hUYXNrPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgYWRkQnVuZGxlKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEJ1bmRsZU9wdGlvbnMgZXh0ZW5kcyBCdW5kbGluZ09wdGlvbnMge1xuICAvKipcbiAgICogZXNidWlsZCB0YXJnZXQuXG4gICAqXG4gICAqIEBleGFtcGxlIFwibm9kZTEyXCJcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBlc2J1aWxkIHBsYXRmb3JtLlxuICAgKlxuICAgKiBAZXhhbXBsZSBcIm5vZGVcIlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm06IHN0cmluZztcblxuICAvKipcbiAgICogQnVuZGxlciBvdXRwdXQgcGF0aCByZWxhdGl2ZSB0byB0aGUgYXNzZXQncyBvdXRwdXQgZGlyZWN0b3J5LlxuICAgKiBAZGVmYXVsdCBcImluZGV4LmpzXCJcbiAgICovXG4gIHJlYWRvbmx5IG91dGZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIG91dHB1dCBmaWxlIGFzIGV4ZWN1dGFibGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBleGVjdXRhYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIHRzY29uZmlnLmpzb24gZmlsZSB0byB1c2UgZm9yIGJ1bmRsaW5nXG4gICAqIEBkZWZhdWx0IFwidHNjb25maWcuanNvblwiXG4gICAqL1xuICByZWFkb25seSB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcCBvZiBmaWxlIGV4dGVuc2lvbnMgKHdpdGhvdXQgZG90KSBhbmQgbG9hZGVycyB0byB1c2UgZm9yIHRoaXMgZmlsZSB0eXBlLlxuICAgKiBMb2FkZXJzIGFyZSBhcHBlbmRlZCB0byB0aGUgZXNidWlsZCBjb21tYW5kIGJ5IGAtLWxvYWRlcjouZXh0ZW5zaW9uPWxvYWRlcmBcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuIFRoZXJlIGFyZSBjdXJyZW50bHkgdGhyZWUgcG9zc2libGUgdmFsdWVzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQ6IGBcImlpZmVcImAsIGBcImNqc1wiYCwgYW5kIGBcImVzbVwiYC5cbiAgICpcbiAgICogSWYgbm90IHNldCAoYHVuZGVmaW5lZGApLCBlc2J1aWxkIHBpY2tzIGFuIG91dHB1dCBmb3JtYXQgZm9yIHlvdSBiYXNlZCBvbiBgcGxhdGZvcm1gOlxuICAgKiAtIGBcImNqc1wiYCBpZiBgcGxhdGZvcm1gIGlzIGBcIm5vZGVcImBcbiAgICogLSBgXCJpaWZlXCJgIGlmIGBwbGF0Zm9ybWAgaXMgYFwiYnJvd3NlclwiYFxuICAgKiAtIGBcImVzbVwiYCBpZiBgcGxhdGZvcm1gIGlzIGBcIm5ldXRyYWxcImBcbiAgICpcbiAgICogTm90ZTogSWYgbWFraW5nIGEgYnVuZGxlIHRvIHJ1biB1bmRlciBub2RlIHdpdGggRVNNLCBzZXQgYGZvcm1hdGAgdG8gYFwiZXNtXCJgIGluc3RlYWQgb2Ygc2V0dGluZyBgcGxhdGZvcm1gIHRvIGBcIm5ldXRyYWxcImAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNmb3JtYXRcbiAgICovXG5cbiAgcmVhZG9ubHkgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIG1pbmlmeSBmaWxlcyB3aGVuIGJ1bmRsaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaWZ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU291cmNlIG1hcCBtb2RlIHRvIGJlIHVzZWQgd2hlbiBidW5kbGluZy5cbiAgICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jc291cmNlbWFwXG4gICAqXG4gICAqIEBkZWZhdWx0IFNvdXJjZU1hcE1vZGUuREVGQVVMVFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlTWFwTW9kZT86IFNvdXJjZU1hcE1vZGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBvcmlnaW5hbCBzb3VyY2UgY29kZSBpbiBzb3VyY2UgbWFwcyB3aGVuIGJ1bmRsaW5nLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNzb3VyY2VzLWNvbnRlbnRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlc0NvbnRlbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb2cgbGV2ZWwgZm9yIGVzYnVpbGQuIFRoaXMgaXMgYWxzbyBwcm9wYWdhdGVkIHRvIHRoZSBwYWNrYWdlIG1hbmFnZXIgYW5kXG4gICAqIGFwcGxpZXMgdG8gaXRzIHNwZWNpZmljIGluc3RhbGwgY29tbWFuZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTG9nTGV2ZWwuV0FSTklOR1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nTGV2ZWw/OiBCdW5kbGVMb2dMZXZlbDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgYG5hbWVgIHZhbHVlcyBldmVuIGluIG1pbmlmaWVkIGNvZGUuXG4gICAqXG4gICAqIEluIEphdmFTY3JpcHQgdGhlIGBuYW1lYCBwcm9wZXJ0eSBvbiBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgZGVmYXVsdHMgdG8gYVxuICAgKiBuZWFyYnkgaWRlbnRpZmllciBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIEhvd2V2ZXIsIG1pbmlmaWNhdGlvbiByZW5hbWVzIHN5bWJvbHMgdG8gcmVkdWNlIGNvZGUgc2l6ZSBhbmQgYnVuZGxpbmdcbiAgICogc29tZXRpbWVzIG5lZWQgdG8gcmVuYW1lIHN5bWJvbHMgdG8gYXZvaWQgY29sbGlzaW9ucy4gVGhhdCBjaGFuZ2VzIHZhbHVlIG9mXG4gICAqIHRoZSBgbmFtZWAgcHJvcGVydHkgZm9yIG1hbnkgb2YgdGhlc2UgY2FzZXMuIFRoaXMgaXMgdXN1YWxseSBmaW5lIGJlY2F1c2VcbiAgICogdGhlIGBuYW1lYCBwcm9wZXJ0eSBpcyBub3JtYWxseSBvbmx5IHVzZWQgZm9yIGRlYnVnZ2luZy4gSG93ZXZlciwgc29tZVxuICAgKiBmcmFtZXdvcmtzIHJlbHkgb24gdGhlIGBuYW1lYCBwcm9wZXJ0eSBmb3IgcmVnaXN0cmF0aW9uIGFuZCBiaW5kaW5nIHB1cnBvc2VzLlxuICAgKiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3UgY2FuIGVuYWJsZSB0aGlzIG9wdGlvbiB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWxcbiAgICogYG5hbWVgIHZhbHVlcyBldmVuIGluIG1pbmlmaWVkIGNvZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBrZWVwTmFtZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiB0ZWxscyBlc2J1aWxkIHRvIHdyaXRlIG91dCBhIEpTT04gZmlsZSByZWxhdGl2ZSB0byBvdXRwdXQgZGlyZWN0b3J5IHdpdGggbWV0YWRhdGEgYWJvdXQgdGhlIGJ1aWxkLlxuICAgKlxuICAgKiBUaGUgbWV0YWRhdGEgaW4gdGhpcyBKU09OIGZpbGUgZm9sbG93cyB0aGlzIHNjaGVtYSAoc3BlY2lmaWVkIHVzaW5nIFR5cGVTY3JpcHQgc3ludGF4KTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiB7XG4gICAqICAgb3V0cHV0czoge1xuICAgKiAgICAgW3BhdGg6IHN0cmluZ106IHtcbiAgICogICAgICAgYnl0ZXM6IG51bWJlclxuICAgKiAgICAgICBpbnB1dHM6IHtcbiAgICogICAgICAgICBbcGF0aDogc3RyaW5nXTogeyBieXRlc0luT3V0cHV0OiBudW1iZXIgfVxuICAgKiAgICAgICB9XG4gICAqICAgICAgIGltcG9ydHM6IHsgcGF0aDogc3RyaW5nIH1bXVxuICAgKiAgICAgICBleHBvcnRzOiBzdHJpbmdbXVxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICogVGhpcyBkYXRhIGNhbiB0aGVuIGJlIGFuYWx5emVkIGJ5IG90aGVyIHRvb2xzLiBGb3IgZXhhbXBsZSxcbiAgICogYnVuZGxlIGJ1ZGR5IGNhbiBjb25zdW1lIGVzYnVpbGQncyBtZXRhZGF0YSBmb3JtYXQgYW5kIGdlbmVyYXRlcyBhIHRyZWVtYXAgdmlzdWFsaXphdGlvblxuICAgKiBvZiB0aGUgbW9kdWxlcyBpbiB5b3VyIGJ1bmRsZSBhbmQgaG93IG11Y2ggc3BhY2UgZWFjaCBvbmUgdGFrZXMgdXAuXG4gICAqIEBzZWUgaHR0cHM6Ly9lc2J1aWxkLmdpdGh1Yi5pby9hcGkvI21ldGFmaWxlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBtZXRhZmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHRvIGluc2VydCBhbiBhcmJpdHJhcnkgc3RyaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuXG4gICAqXG4gICAqIFRoaXMgaXMgc2ltaWxhciB0byBmb290ZXIgd2hpY2ggaW5zZXJ0cyBhdCB0aGUgZW5kIGluc3RlYWQgb2YgdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogVGhpcyBpcyBjb21tb25seSB1c2VkIHRvIGluc2VydCBjb21tZW50czpcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tZW50cyBhcmUgcGFzc2VkXG4gICAqL1xuICByZWFkb25seSBiYW5uZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHRvIGluc2VydCBhbiBhcmJpdHJhcnkgc3RyaW5nIGF0IHRoZSBlbmQgb2YgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuXG4gICAqXG4gICAqIFRoaXMgaXMgc2ltaWxhciB0byBiYW5uZXIgd2hpY2ggaW5zZXJ0cyBhdCB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgICpcbiAgICogVGhpcyBpcyBjb21tb25seSB1c2VkIHRvIGluc2VydCBjb21tZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbW1lbnRzIGFyZSBwYXNzZWRcbiAgICovXG4gIHJlYWRvbmx5IGZvb3Rlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNoYXJzZXQgdG8gdXNlIGZvciBlc2J1aWxkJ3Mgb3V0cHV0LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0IGVzYnVpbGQncyBvdXRwdXQgaXMgQVNDSUktb25seS4gQW55IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkXG4gICAqIHVzaW5nIGJhY2tzbGFzaCBlc2NhcGUgc2VxdWVuY2VzLiBVc2luZyBlc2NhcGUgc2VxdWVuY2VzIG1ha2VzIHRoZSBnZW5lcmF0ZWQgb3V0cHV0XG4gICAqIHNsaWdodGx5IGJpZ2dlciwgYW5kIGFsc28gbWFrZXMgaXQgaGFyZGVyIHRvIHJlYWQuIElmIHlvdSB3b3VsZCBsaWtlIGZvciBlc2J1aWxkIHRvIHByaW50XG4gICAqIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXJzIHdpdGhvdXQgdXNpbmcgZXNjYXBlIHNlcXVlbmNlcywgdXNlIGBDaGFyc2V0LlVURjhgLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNjaGFyc2V0XG4gICAqIEBkZWZhdWx0IENoYXJzZXQuQVNDSUlcbiAgICovXG4gIHJlYWRvbmx5IGNoYXJzZXQ/OiBDaGFyc2V0O1xuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGdsb2JhbCBpZGVudGlmaWVycyB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb25zLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgYHsgJ3Byb2Nlc3MuZW52LkRFQlVHJzogJ3RydWUnIH1gLlxuICAgKlxuICAgKiBBbm90aGVyIGV4YW1wbGUsIGB7ICdwcm9jZXNzLmVudi5BUElfS0VZJzogSlNPTi5zdHJpbmdpZnkoJ3h4eC14eHh4LXh4eCcpIH1gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJlcGxhY2VtZW50cyBhcmUgbWFkZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmaW5lPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQnVpbGQgYXJndW1lbnRzIHRvIHBhc3MgaW50byBlc2J1aWxkLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgdG8gYWRkIHRoZSBbLS1sb2ctbGltaXRdKGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNsb2ctbGltaXQpIGZsYWc6XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogcHJvamVjdC5idW5kbGVyLmFkZEJ1bmRsZShcIi4vc3JjL2hlbGxvLnRzXCIsIHtcbiAgICogICBwbGF0Zm9ybTogXCJub2RlXCIsXG4gICAqICAgdGFyZ2V0OiBcIm5vZGUyMlwiLFxuICAgKiAgIHNvdXJjZW1hcDogdHJ1ZSxcbiAgICogICBmb3JtYXQ6IFwiZXNtXCIsXG4gICAqICAgZXNidWlsZEFyZ3M6IHtcbiAgICogICAgIFwiLS1sb2ctbGltaXRcIjogXCIwXCIsXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgZXNidWlsZCBhcmd1bWVudHMgYXJlIHBhc3NlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXNidWlsZEFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGJvb2xlYW4gfTtcblxuICAvKipcbiAgICogSG93IHRvIGRldGVybWluZSB0aGUgZW50cnkgcG9pbnQgZm9yIG1vZHVsZXMuXG4gICAqIFRyeSBbJ21vZHVsZScsICdtYWluJ10gdG8gZGVmYXVsdCB0byBFUyBtb2R1bGUgdmVyc2lvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBtYWluRmllbGRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gYXV0b21hdGljYWxseSByZXBsYWNlIGEgZ2xvYmFsIHZhcmlhYmxlIHdpdGggYW5cbiAgICogaW1wb3J0IGZyb20gYW5vdGhlciBmaWxlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNpbmplY3RcbiAgICogQGRlZmF1bHQgLSBubyBjb2RlIGlzIGluamVjdGVkXG4gICAqL1xuICByZWFkb25seSBpbmplY3Q/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBCdW5kbGVyT3B0aW9ucy5ydW5CdW5kbGVUYXNrXG4gKi9cbmV4cG9ydCBlbnVtIFJ1bkJ1bmRsZVRhc2sge1xuICAvKipcbiAgICogRG9uJ3QgYnVuZGxlIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiB0aGUgYnVpbGQuXG4gICAqL1xuICBNQU5VQUwgPSBcIm1hbnVhbFwiLFxuICAvKipcbiAgICogQnVuZGxlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICAgKi9cbiAgUFJFX0NPTVBJTEUgPSBcInByZV9jb21waWxlXCIsXG4gIC8qKlxuICAgKiBCdW5kbGUgYXV0b21hdGljYWxseSBhZnRlciBjb21waWxhdGlvbi4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG9cbiAgICogYnVuZGxlIHRoZSBjb21waWxlZCByZXN1bHRzLlxuICAgKlxuICAgKiBUaHVzIHdpbGwgcnVuIGNvbXBpbGF0aW9uIHRhc2tzICh1c2luZyB0c2MsIGV0Yy4pIGJlZm9yZSBydW5uaW5nIGZpbGVcbiAgICogdGhyb3VnaCBidW5kbGluZyBzdGVwLlxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgdW5sZXNzIHlvdSBhcmUgdXNpbmcgbmV3IGV4cGVyaW1lbnRhbCBmZWF0dXJlcyB0aGF0XG4gICAqIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGBlc2J1aWxkYCBidXQgYXJlIHN1cHBvcnRlZCBieSB0eXBlc2NyaXB0J3MgYHRzY2BcbiAgICogY29tcGlsZXIuIE9uZSBleGFtcGxlIG9mIHN1Y2ggZmVhdHVyZSBpcyBgZW1pdERlY29yYXRvck1ldGFkYXRhYC5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBJbiBhIFR5cGVTY3JpcHQgcHJvamVjdCB3aXRoIG91dHB1dCBjb25maWd1cmVkXG4gICAqIC8vIHRvIGdvIHRvIHRoZSBcImxpYlwiIGRpcmVjdG9yeTpcbiAgICogY29uc3QgcHJvamVjdCA9IG5ldyBUeXBlU2NyaXB0UHJvamVjdCh7XG4gICAqICAgbmFtZTogXCJ0ZXN0XCIsXG4gICAqICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IFwibWFpblwiLFxuICAgKiAgIHRzY29uZmlnOiB7XG4gICAqICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICogICAgICAgb3V0RGlyOiBcImxpYlwiLFxuICAgKiAgICAgfSxcbiAgICogICB9LFxuICAgKiAgIGJ1bmRsZXJPcHRpb25zOiB7XG4gICAqICAgICAvLyBlbnN1cmUgd2UgY29tcGlsZSB3aXRoIGB0c2NgIGJlZm9yZSBidW5kbGluZ1xuICAgKiAgICAgcnVuQnVuZGxlVGFzazogUnVuQnVuZGxlVGFzay5QT1NUX0NPTVBJTEUsXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFRlbGwgdGhlIGJ1bmRsZXIgdG8gYnVuZGxlIHRoZSBjb21waWxlZCByZXN1bHRzIChmcm9tIHRoZSBcImxpYlwiIGRpcmVjdG9yeSlcbiAgICogcHJvamVjdC5idW5kbGVyLmFkZEJ1bmRsZShcIi4vbGliL2luZGV4LmpzXCIsIHtcbiAgICogICBwbGF0Zm9ybTogXCJub2RlXCIsXG4gICAqICAgdGFyZ2V0OiBcIm5vZGUyMlwiLFxuICAgKiAgIHNvdXJjZW1hcDogZmFsc2UsXG4gICAqICAgZm9ybWF0OiBcImVzbVwiLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqKi9cbiAgUE9TVF9DT01QSUxFID0gXCJwb3N0X2NvbXBpbGVcIixcbn1cblxuLyoqXG4gKiBTb3VyY2VNYXAgbW9kZSBmb3IgZXNidWlsZFxuICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jc291cmNlbWFwXG4gKi9cbmV4cG9ydCBlbnVtIFNvdXJjZU1hcE1vZGUge1xuICAvKipcbiAgICogRGVmYXVsdCBzb3VyY2VNYXAgbW9kZSAtIHdpbGwgZ2VuZXJhdGUgYSAuanMubWFwIGZpbGUgYWxvbmdzaWRlIGFueSBnZW5lcmF0ZWQgLmpzIGZpbGUgYW5kIGFkZCBhIHNwZWNpYWwgLy8jIHNvdXJjZU1hcHBpbmdVUkw9XG4gICAqIGNvbW1lbnQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgLmpzIGZpbGUgcG9pbnRpbmcgdG8gdGhlIC5qcy5tYXAgZmlsZVxuICAgKi9cbiAgREVGQVVMVCA9IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogIEV4dGVybmFsIHNvdXJjZU1hcCBtb2RlIC0gSWYgeW91IHdhbnQgdG8gb21pdCB0aGUgc3BlY2lhbCAvLyMgc291cmNlTWFwcGluZ1VSTD0gY29tbWVudCBmcm9tIHRoZSBnZW5lcmF0ZWQgLmpzIGZpbGUgYnV0IHlvdSBzdGlsbFxuICAgKiAgd2FudCB0byBnZW5lcmF0ZSB0aGUgLmpzLm1hcCBmaWxlc1xuICAgKi9cbiAgRVhURVJOQUwgPSBcImV4dGVybmFsXCIsXG4gIC8qKlxuICAgKiBJbmxpbmUgc291cmNlTWFwIG1vZGUgLSBJZiB5b3Ugd2FudCB0byBpbnNlcnQgdGhlIGVudGlyZSBzb3VyY2UgbWFwIGludG8gdGhlIC5qcyBmaWxlIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHNlcGFyYXRlIC5qcy5tYXAgZmlsZVxuICAgKi9cbiAgSU5MSU5FID0gXCJpbmxpbmVcIixcbiAgLyoqXG4gICAqIEJvdGggc291cmNlTWFwIG1vZGUgLSBJZiB5b3Ugd2FudCB0byBoYXZlIHRoZSBlZmZlY3Qgb2YgYm90aCBpbmxpbmUgYW5kIGV4dGVybmFsIHNpbXVsdGFuZW91c2x5XG4gICAqL1xuICBCT1RIID0gXCJib3RoXCIsXG59XG5cbi8qKlxuICogQ2hhcnNldCBmb3IgZXNidWlsZCdzIG91dHB1dFxuICovXG5leHBvcnQgZW51bSBDaGFyc2V0IHtcbiAgLyoqXG4gICAqIEFTQ0lJXG4gICAqXG4gICAqIEFueSBub24tQVNDSUkgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCB1c2luZyBiYWNrc2xhc2ggZXNjYXBlIHNlcXVlbmNlc1xuICAgKi9cbiAgQVNDSUkgPSBcImFzY2lpXCIsXG5cbiAgLyoqXG4gICAqIFVURi04XG4gICAqXG4gICAqIEtlZXAgb3JpZ2luYWwgY2hhcmFjdGVycyB3aXRob3V0IHVzaW5nIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICovXG4gIFVURjggPSBcInV0ZjhcIixcbn1cblxuLyoqXG4gKiBMb2cgbGV2ZWxzIGZvciBlc2J1aWxkIGFuZCBwYWNrYWdlIG1hbmFnZXJzJyBpbnN0YWxsIGNvbW1hbmRzLlxuICovXG5leHBvcnQgZW51bSBCdW5kbGVMb2dMZXZlbCB7XG4gIC8qKiBTaG93IGV2ZXJ5dGhpbmcgKi9cbiAgVkVSQk9TRSA9IFwidmVyYm9zZVwiLFxuICAvKiogU2hvdyBldmVyeXRoaW5nIGZyb20gaW5mbyBhbmQgc29tZSBhZGRpdGlvbmFsIG1lc3NhZ2VzIGZvciBkZWJ1Z2dpbmcgKi9cbiAgREVCVUcgPSBcImRlYnVnXCIsXG4gIC8qKiBTaG93IHdhcm5pbmdzLCBlcnJvcnMsIGFuZCBhbiBvdXRwdXQgZmlsZSBzdW1tYXJ5ICovXG4gIElORk8gPSBcImluZm9cIixcbiAgLyoqIFNob3cgd2FybmluZ3MgYW5kIGVycm9ycyAqL1xuICBXQVJOSU5HID0gXCJ3YXJuaW5nXCIsXG4gIC8qKiBTaG93IGVycm9ycyBvbmx5ICovXG4gIEVSUk9SID0gXCJlcnJvclwiLFxuICAvKiogU2hvdyBub3RoaW5nICovXG4gIFNJTEVOVCA9IFwic2lsZW50XCIsXG59XG4iXX0=
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qYXZhc2NyaXB0L2J1bmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3QiwrQkFBd0M7QUFDeEMsaUNBQTBDO0FBQzFDLDRDQUF5QztBQUN6QyxrREFBaUQ7QUEyQ2pEOzs7R0FHRztBQUNILE1BQWEsT0FBUSxTQUFRLHFCQUFTOztJQUNwQzs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFZLEVBQWdCLEVBQUUsQ0FBQyxDQUFDLFlBQVksT0FBTyxDQUFDO1FBQ3ZFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ2EsY0FBYyxDQUFxQjtJQUVuRDs7T0FFRztJQUNhLFNBQVMsQ0FBUztJQUUxQixLQUFLLENBQW1CO0lBQ2YsYUFBYSxDQUFpQjtJQUM5QixPQUFPLENBQTZCO0lBRXJEOztPQUVHO0lBQ0gsWUFBWSxPQUFnQixFQUFFLFVBQTBCLEVBQUU7UUFDeEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRS9CLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQVcsVUFBVTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEtB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RCxXQUFZLGNBQWM7SUFDeEIsc0JBQXNCO0lBQ3RCLHFDQUFtQixDQUFBO0lBQ25CLDJFQUEyRTtJQUMzRSxpQ0FBZSxDQUFBO0lBQ2Ysd0RBQXdEO0lBQ3hELCtCQUFhLENBQUE7SUFDYiwrQkFBK0I7SUFDL0IscUNBQW1CLENBQUE7SUFDbkIsdUJBQXVCO0lBQ3ZCLGlDQUFlLENBQUE7SUFDZixtQkFBbUI7SUFDbkIsbUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQWJXLGNBQWMsOEJBQWQsY0FBYyxRQWF6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGpvaW4gYXMgcGF0aEpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcmVuZGVyQnVuZGxlTmFtZSB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5cbi8vIFBhcnRzIG9mIHRoaXMgZmlsZSBpbnNwaXJlZCBieSBAYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcbi8vICAgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYzNjNzcxYzZmNmY2NzkwZjIyOThhODVhNTQ5YmRlZDY0MGQyZTM1Yi9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcy9saWIvYnVuZGxpbmcudHMjTDE5NVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBCdW5kbGVyYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc2VtYW50aWMgdmVyc2lvbiByZXF1aXJlbWVudCBmb3IgYGVzYnVpbGRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNwZWNpZmljIHZlcnNpb24gKGltcGxpZXMgbGF0ZXN0KVxuICAgKi9cbiAgcmVhZG9ubHkgZXNidWlsZFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE91dHB1dCBkaXJlY3RvcnkgZm9yIGFsbCBidW5kbGVzLlxuICAgKiBAZGVmYXVsdCBcImFzc2V0c1wiXG4gICAqL1xuICByZWFkb25seSBhc3NldHNEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENob29zZSB3aGljaCBwaGFzZSAoaWYgYW55KSB0byBhZGQgdGhlIGBidW5kbGVgIGNvbW1hbmQgdG8uXG4gICAqXG4gICAqIE5vdGU6IElmIHVzaW5nIGBhZGRCdW5kbGUoKWAgd2l0aCB0aGUgYGJ1bmRsZUNvbXBpbGVkUmVzdWx0c2AsIHRoaXMgb3B0aW9uXG4gICAqIG11c3QgYmUgc2V0IHRvIGBSdW5CdW5kbGVUYXNrLlBPU1RfQ09NUElMRWAgb3IgYFJ1bkJ1bmRsZVRhc2suTUFOVUFMYC5cbiAgICpcbiAgICogQHNlZSBBZGRCdW5kbGVPcHRpb25zLmJ1bmRsZUNvbXBpbGVkUmVzdWx0c1xuICAgKlxuICAgKiBAZGVmYXVsdCBSdW5CdW5kbGVUYXNrLlBSRV9DT01QSUxFXG4gICAqL1xuICByZWFkb25seSBydW5CdW5kbGVUYXNrPzogUnVuQnVuZGxlVGFzaztcblxuICAvKipcbiAgICogTWFwIG9mIGZpbGUgZXh0ZW5zaW9ucyAod2l0aG91dCBkb3QpIGFuZCBsb2FkZXJzIHRvIHVzZSBmb3IgdGhpcyBmaWxlIHR5cGUuXG4gICAqIExvYWRlcnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBlc2J1aWxkIGNvbW1hbmQgYnkgYC0tbG9hZGVyOi5leHRlbnNpb249bG9hZGVyYFxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQWRkcyBzdXBwb3J0IGZvciBidW5kbGluZyBKYXZhU2NyaXB0IGFwcGxpY2F0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGludG8gYVxuICogc2luZ2xlIGZpbGUuIEluIHRoZSBmdXR1cmUsIHRoaXMgd2lsbCBhbHNvIHN1cHBvcnRzIGJ1bmRsaW5nIHdlYnNpdGVzLlxuICovXG5leHBvcnQgY2xhc3MgQnVuZGxlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgQnVuZGxlcmAgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGEgcHJvamVjdCBvciBgdW5kZWZpbmVkYCBpZlxuICAgKiB0aGVyZSBpcyBubyBCdW5kbGVyLlxuICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdFxuICAgKiBAcmV0dXJucyBBIGJ1bmRsZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IEJ1bmRsZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzQnVuZGxlciA9IChvOiBDb21wb25lbnQpOiBvIGlzIEJ1bmRsZXIgPT4gbyBpbnN0YW5jZW9mIEJ1bmRsZXI7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzQnVuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlbWFudGljIHZlcnNpb24gcmVxdWlyZW1lbnQgZm9yIGBlc2J1aWxkYCAoaWYgZGVmaW5lZCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXNidWlsZFZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUm9vdCBidW5kbGUgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1bmRsZWRpcjogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3Rhc2s6IFRhc2sgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVuQnVuZGxlVGFzaz86IFJ1bkJ1bmRsZVRhc2s7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBgQnVuZGxlcmAuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBCdW5kbGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmVzYnVpbGRWZXJzaW9uID0gb3B0aW9ucy5lc2J1aWxkVmVyc2lvbjtcbiAgICB0aGlzLmJ1bmRsZWRpciA9IG9wdGlvbnMuYXNzZXRzRGlyID8/IFwiYXNzZXRzXCI7XG4gICAgdGhpcy5sb2FkZXJzID0gb3B0aW9ucy5sb2FkZXJzO1xuXG4gICAgdGhpcy5ydW5CdW5kbGVUYXNrID0gb3B0aW9ucy5ydW5CdW5kbGVUYXNrID8/IFJ1bkJ1bmRsZVRhc2suUFJFX0NPTVBJTEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBvciBjcmVhdGVzIHRoZSBzaW5nbGV0b24gXCJidW5kbGVcIiB0YXNrIG9mIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBJZiB0aGUgcHJvamVjdCBkb2Vzbid0IGhhdmUgYSBcImJ1bmRsZVwiIHRhc2ssIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgc3Bhd25lZFxuICAgKiBkdXJpbmcgdGhlIHByZS1jb21waWxlIHBoYXNlLlxuICAgKi9cbiAgcHVibGljIGdldCBidW5kbGVUYXNrKCk6IFRhc2sge1xuICAgIGlmICghdGhpcy5fdGFzaykge1xuICAgICAgdGhpcy5hZGRCdW5kbGluZ1N1cHBvcnQoKTtcbiAgICAgIHRoaXMuX3Rhc2sgPSB0aGlzLnByb2plY3QudGFza3MuYWRkVGFzayhcImJ1bmRsZVwiLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlByZXBhcmUgYXNzZXRzXCIsXG4gICAgICB9KTtcblxuICAgICAgLy8gaW5zdGFsbCB0aGUgYnVuZGxlIHRhc2sgaW50byB0aGUgcHJlLWNvbXBpbGUgcGhhc2UuXG4gICAgICBpZiAodGhpcy5ydW5CdW5kbGVUYXNrID09PSBSdW5CdW5kbGVUYXNrLlBSRV9DT01QSUxFKSB7XG4gICAgICAgIHRoaXMucHJvamVjdC5wcmVDb21waWxlVGFzay5zcGF3bih0aGlzLl90YXNrKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5ydW5CdW5kbGVUYXNrID09PSBSdW5CdW5kbGVUYXNrLlBPU1RfQ09NUElMRSkge1xuICAgICAgICB0aGlzLnByb2plY3QucG9zdENvbXBpbGVUYXNrLnNwYXduKHRoaXMuX3Rhc2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90YXNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB0YXNrIHRvIHRoZSBwcm9qZWN0IHdoaWNoIGJ1bmRsZXMgYSBzcGVjaWZpYyBlbnRyeXBvaW50IGFuZCBhbGwgb2ZcbiAgICogaXRzIGRlcGVuZGVuY2llcyBpbnRvIGEgc2luZ2xlIGphdmFzY3JpcHQgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyeXBvaW50IFRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBhcnRpZmFjdCB3aXRoaW4gdGhlIHByb2plY3RcbiAgICogQHBhcmFtIG9wdGlvbnMgQnVuZGxpbmcgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFkZEJ1bmRsZShlbnRyeXBvaW50OiBzdHJpbmcsIG9wdGlvbnM6IEFkZEJ1bmRsZU9wdGlvbnMpOiBCdW5kbGUge1xuICAgIGNvbnN0IG5hbWUgPSByZW5kZXJCdW5kbGVOYW1lKGVudHJ5cG9pbnQpO1xuXG4gICAgY29uc3Qgb3V0ZGlyID0gcGF0aC5wb3NpeC5qb2luKHRoaXMuYnVuZGxlZGlyLCBuYW1lKTtcbiAgICBjb25zdCBvdXRmaWxlID0gcGF0aC5wb3NpeC5qb2luKG91dGRpciwgb3B0aW9ucy5vdXRmaWxlID8/IFwiaW5kZXguanNcIik7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgIFwiZXNidWlsZFwiLFxuICAgICAgXCItLWJ1bmRsZVwiLFxuICAgICAgZW50cnlwb2ludCxcbiAgICAgIGAtLXRhcmdldD1cIiR7b3B0aW9ucy50YXJnZXR9XCJgLFxuICAgICAgYC0tcGxhdGZvcm09XCIke29wdGlvbnMucGxhdGZvcm19XCJgLFxuICAgICAgYC0tb3V0ZmlsZT1cIiR7b3V0ZmlsZX1cImAsXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zLnRzY29uZmlnUGF0aCkge1xuICAgICAgYXJncy5wdXNoKGAtLXRzY29uZmlnPVwiJHtvcHRpb25zLnRzY29uZmlnUGF0aH1cImApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgeCBvZiBvcHRpb25zLmV4dGVybmFscyA/PyBbXSkge1xuICAgICAgYXJncy5wdXNoKGAtLWV4dGVybmFsOiR7eH1gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3VyY2VtYXAgfHwgb3B0aW9ucy5zb3VyY2VNYXBNb2RlKSB7XG4gICAgICBjb25zdCBzb3VyY2VNYXBNb2RlID0gb3B0aW9ucy5zb3VyY2VNYXBNb2RlID8/IFNvdXJjZU1hcE1vZGUuREVGQVVMVDtcbiAgICAgIGNvbnN0IHNvdXJjZU1hcFZhbHVlID1cbiAgICAgICAgc291cmNlTWFwTW9kZSA9PT0gU291cmNlTWFwTW9kZS5ERUZBVUxUXG4gICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgOiBgPSR7b3B0aW9ucy5zb3VyY2VNYXBNb2RlfWA7XG4gICAgICBhcmdzLnB1c2goYC0tc291cmNlbWFwJHtzb3VyY2VNYXBWYWx1ZX1gKTtcblxuICAgICAgaWYgKG9wdGlvbnMuc291cmNlc0NvbnRlbnQgPT09IHRydWUpIHtcbiAgICAgICAgYXJncy5wdXNoKGAtLXNvdXJjZXMtY29udGVudD0ke29wdGlvbnMuc291cmNlc0NvbnRlbnR9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5mb3JtYXQ7XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgYXJncy5wdXNoKGAtLWZvcm1hdD0ke2Zvcm1hdH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZXJzID1cbiAgICAgIChvcHRpb25zLmxvYWRlcnMgPz8gZmFsc2UpID8gb3B0aW9ucy5sb2FkZXJzIDogKHRoaXMubG9hZGVycyA/PyBmYWxzZSk7XG4gICAgaWYgKGxvYWRlcnMpIHtcbiAgICAgIGZvciAobGV0IFtleHRlbnNpb24sIGxvYWRlcl0gb2YgT2JqZWN0LmVudHJpZXMobG9hZGVycykpIHtcbiAgICAgICAgYXJncy5wdXNoKGAtLWxvYWRlcjouJHtleHRlbnNpb259PSR7bG9hZGVyfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRlZmluZXMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zLmRlZmluZSA/PyB7fSk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZGVmaW5lcykge1xuICAgICAgYXJncy5wdXNoKGAtLWRlZmluZToke2tleX09JHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubWluaWZ5KSB7XG4gICAgICBhcmdzLnB1c2goXCItLW1pbmlmeVwiKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5sb2dMZXZlbCkge1xuICAgICAgYXJncy5wdXNoKGAtLWxvZy1sZXZlbD0ke29wdGlvbnMubG9nTGV2ZWx9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmtlZXBOYW1lcykge1xuICAgICAgYXJncy5wdXNoKFwiLS1rZWVwLW5hbWVzXCIpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5tZXRhZmlsZSkge1xuICAgICAgYXJncy5wdXNoKGAtLW1ldGFmaWxlPSR7cGF0aEpvaW4ob3V0ZGlyLCBcImluZGV4Lm1ldGEuanNvblwiKX1gKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYmFubmVyKSB7XG4gICAgICBhcmdzLnB1c2goYC0tYmFubmVyOmpzPSR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucy5iYW5uZXIpfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mb290ZXIpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1mb290ZXI6anM9JHtKU09OLnN0cmluZ2lmeShvcHRpb25zLmZvb3Rlcil9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm1haW5GaWVsZHMpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1tYWluLWZpZWxkcz0ke29wdGlvbnMubWFpbkZpZWxkcy5qb2luKFwiLFwiKX1gKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaW5qZWN0KSB7XG4gICAgICBhcmdzLnB1c2goLi4ub3B0aW9ucy5pbmplY3QubWFwKChpKSA9PiBgLS1pbmplY3Q6JHtpfWApKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZXNidWlsZEFyZ3MpIHtcbiAgICAgIGNvbnN0IHN1YkFyZ3MgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zLmVzYnVpbGRBcmdzKSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICBzdWJBcmdzLnB1c2goa2V5KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHN1YkFyZ3MucHVzaChgJHtrZXl9PVwiJHt2YWx1ZX1cImApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFyZ3MucHVzaChzdWJBcmdzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBidW5kbGVUYXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2soYGJ1bmRsZToke25hbWV9YCwge1xuICAgICAgZGVzY3JpcHRpb246IGBDcmVhdGUgYSBKYXZhU2NyaXB0IGJ1bmRsZSBmcm9tICR7ZW50cnlwb2ludH1gLFxuICAgICAgZXhlYzogYXJncy5qb2luKFwiIFwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYnVuZGxlVGFzay5zcGF3bihidW5kbGVUYXNrKTtcblxuICAgIGlmIChvcHRpb25zLmV4ZWN1dGFibGUgPz8gZmFsc2UpIHtcbiAgICAgIGJ1bmRsZVRhc2suZXhlYyhgY2htb2QgK3ggJHtvdXRmaWxlfWApO1xuICAgIH1cblxuICAgIGxldCB3YXRjaFRhc2s7XG4gICAgY29uc3Qgd2F0Y2ggPSBvcHRpb25zLndhdGNoVGFzayA/PyB0cnVlO1xuICAgIGlmICh3YXRjaCkge1xuICAgICAgd2F0Y2hUYXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2soYGJ1bmRsZToke25hbWV9OndhdGNoYCwge1xuICAgICAgICBkZXNjcmlwdGlvbjogYENvbnRpbnVvdXNseSB1cGRhdGUgdGhlIEphdmFTY3JpcHQgYnVuZGxlIGZyb20gJHtlbnRyeXBvaW50fWAsXG4gICAgICAgIGV4ZWM6IGAke2FyZ3Muam9pbihcIiBcIil9IC0td2F0Y2hgLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1bmRsZVRhc2s6IGJ1bmRsZVRhc2ssXG4gICAgICB3YXRjaFRhc2s6IHdhdGNoVGFzayxcbiAgICAgIG91dGRpcjogb3V0ZGlyLFxuICAgICAgb3V0ZmlsZTogb3V0ZmlsZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBidW5kbGluZyBzdXBwb3J0IHRvIGEgcHJvamVjdC4gVGhpcyBpcyBjYWxsZWQgaW1wbGljaXRseSB3aGVuXG4gICAqIGBidW5kbGVUYXNrYCBpcyByZWZlcmVuY2VkIGZpcnN0LiBJdCBhZGRzIHRoZSBkZXBlbmRlbmN5IG9uIGBlc2J1aWxkYCxcbiAgICogZ2l0aWdub3JlL25wbWlnbm9yZSwgZXRjLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRCdW5kbGluZ1N1cHBvcnQoKSB7XG4gICAgY29uc3QgaWdub3JlRW50cnkgPSBgLyR7dGhpcy5idW5kbGVkaXJ9L2A7XG4gICAgdGhpcy5wcm9qZWN0LmFkZEdpdElnbm9yZShpZ25vcmVFbnRyeSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFBhY2thZ2VJZ25vcmUoYCEke2lnbm9yZUVudHJ5fWApOyAvLyBpbmNsdWRlIGluIHRhcmJhbGxcbiAgICBjb25zdCBkZXAgPSB0aGlzLmVzYnVpbGRWZXJzaW9uXG4gICAgICA/IGBlc2J1aWxkQCR7dGhpcy5lc2J1aWxkVmVyc2lvbn1gXG4gICAgICA6IFwiZXNidWlsZFwiO1xuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koZGVwLCBEZXBlbmRlbmN5VHlwZS5CVUlMRCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdW5kbGUge1xuICAvKipcbiAgICogVGhlIHRhc2sgdGhhdCBwcm9kdWNlcyB0aGlzIGJ1bmRsZS5cbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsZVRhc2s6IFRhc2s7XG5cbiAgLyoqXG4gICAqIFRoZSBcIndhdGNoXCIgdGFzayBmb3IgdGhpcyBidW5kbGUuXG4gICAqL1xuICByZWFkb25seSB3YXRjaFRhc2s/OiBUYXNrO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbiBvZiB0aGUgb3V0cHV0IGZpbGUgKHJlbGF0aXZlIHRvIHByb2plY3Qgcm9vdCkuXG4gICAqL1xuICByZWFkb25seSBvdXRmaWxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJhc2UgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG91dHB1dCBmaWxlIChyZWxhdGl2ZSB0byBwcm9qZWN0IHJvb3QpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0ZGlyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYnVuZGxpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxpbmdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFlvdSBjYW4gbWFyayBhIGZpbGUgb3IgYSBwYWNrYWdlIGFzIGV4dGVybmFsIHRvIGV4Y2x1ZGUgaXQgZnJvbSB5b3VyIGJ1aWxkLlxuICAgKiBJbnN0ZWFkIG9mIGJlaW5nIGJ1bmRsZWQsIHRoZSBpbXBvcnQgd2lsbCBiZSBwcmVzZXJ2ZWQgKHVzaW5nIHJlcXVpcmUgZm9yXG4gICAqIHRoZSBpaWZlIGFuZCBjanMgZm9ybWF0cyBhbmQgdXNpbmcgaW1wb3J0IGZvciB0aGUgZXNtIGZvcm1hdCkgYW5kIHdpbGwgYmVcbiAgICogZXZhbHVhdGVkIGF0IHJ1biB0aW1lIGluc3RlYWQuXG4gICAqXG4gICAqIFRoaXMgaGFzIHNldmVyYWwgdXNlcy4gRmlyc3Qgb2YgYWxsLCBpdCBjYW4gYmUgdXNlZCB0byB0cmltIHVubmVjZXNzYXJ5XG4gICAqIGNvZGUgZnJvbSB5b3VyIGJ1bmRsZSBmb3IgYSBjb2RlIHBhdGggdGhhdCB5b3Uga25vdyB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkLlxuICAgKiBGb3IgZXhhbXBsZSwgYSBwYWNrYWdlIG1heSBjb250YWluIGNvZGUgdGhhdCBvbmx5IHJ1bnMgaW4gbm9kZSBidXQgeW91IHdpbGxcbiAgICogb25seSBiZSB1c2luZyB0aGF0IHBhY2thZ2UgaW4gdGhlIGJyb3dzZXIuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gaW1wb3J0XG4gICAqIGNvZGUgaW4gbm9kZSBhdCBydW4gdGltZSBmcm9tIGEgcGFja2FnZSB0aGF0IGNhbm5vdCBiZSBidW5kbGVkLiBGb3JcbiAgICogZXhhbXBsZSwgdGhlIGZzZXZlbnRzIHBhY2thZ2UgY29udGFpbnMgYSBuYXRpdmUgZXh0ZW5zaW9uLCB3aGljaCBlc2J1aWxkXG4gICAqIGRvZXNuJ3Qgc3VwcG9ydC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGEgc291cmNlIG1hcCBpbiB0aGUgYnVuZGxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlbWFwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW4gYWRkaXRpb24gdG8gdGhlIGBidW5kbGU6eHl6YCB0YXNrLCBjcmVhdGVzIGBidW5kbGU6eHl6OndhdGNoYCB0YXNrIHdoaWNoIHdpbGxcbiAgICogaW52b2tlIHRoZSBzYW1lIGVzYnVpbGQgY29tbWFuZCB3aXRoIHRoZSBgLS13YXRjaGAgZmxhZy4gVGhpcyBjYW4gYmUgdXNlZFxuICAgKiB0byBjb250aW51c291bHkgd2F0Y2ggZm9yIGNoYW5nZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHdhdGNoVGFzaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYGFkZEJ1bmRsZSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRCdW5kbGVPcHRpb25zIGV4dGVuZHMgQnVuZGxpbmdPcHRpb25zIHtcbiAgLyoqXG4gICAqIGVzYnVpbGQgdGFyZ2V0LlxuICAgKlxuICAgKiBAZXhhbXBsZSBcIm5vZGUxMlwiXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IHN0cmluZztcblxuICAvKipcbiAgICogZXNidWlsZCBwbGF0Zm9ybS5cbiAgICpcbiAgICogQGV4YW1wbGUgXCJub2RlXCJcbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1bmRsZXIgb3V0cHV0IHBhdGggcmVsYXRpdmUgdG8gdGhlIGFzc2V0J3Mgb3V0cHV0IGRpcmVjdG9yeS5cbiAgICogQGRlZmF1bHQgXCJpbmRleC5qc1wiXG4gICAqL1xuICByZWFkb25seSBvdXRmaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBvdXRwdXQgZmlsZSBhcyBleGVjdXRhYmxlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0YWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9mIHRoZSB0c2NvbmZpZy5qc29uIGZpbGUgdG8gdXNlIGZvciBidW5kbGluZ1xuICAgKiBAZGVmYXVsdCBcInRzY29uZmlnLmpzb25cIlxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXAgb2YgZmlsZSBleHRlbnNpb25zICh3aXRob3V0IGRvdCkgYW5kIGxvYWRlcnMgdG8gdXNlIGZvciB0aGlzIGZpbGUgdHlwZS5cbiAgICogTG9hZGVycyBhcmUgYXBwZW5kZWQgdG8gdGhlIGVzYnVpbGQgY29tbWFuZCBieSBgLS1sb2FkZXI6LmV4dGVuc2lvbj1sb2FkZXJgXG4gICAqL1xuICByZWFkb25seSBsb2FkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogT3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBUaGVyZSBhcmUgY3VycmVudGx5IHRocmVlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGNhbiBiZSBjb25maWd1cmVkOiBgXCJpaWZlXCJgLCBgXCJjanNcImAsIGFuZCBgXCJlc21cImAuXG4gICAqXG4gICAqIElmIG5vdCBzZXQgKGB1bmRlZmluZWRgKSwgZXNidWlsZCBwaWNrcyBhbiBvdXRwdXQgZm9ybWF0IGZvciB5b3UgYmFzZWQgb24gYHBsYXRmb3JtYDpcbiAgICogLSBgXCJjanNcImAgaWYgYHBsYXRmb3JtYCBpcyBgXCJub2RlXCJgXG4gICAqIC0gYFwiaWlmZVwiYCBpZiBgcGxhdGZvcm1gIGlzIGBcImJyb3dzZXJcImBcbiAgICogLSBgXCJlc21cImAgaWYgYHBsYXRmb3JtYCBpcyBgXCJuZXV0cmFsXCJgXG4gICAqXG4gICAqIE5vdGU6IElmIG1ha2luZyBhIGJ1bmRsZSB0byBydW4gdW5kZXIgbm9kZSB3aXRoIEVTTSwgc2V0IGBmb3JtYXRgIHRvIGBcImVzbVwiYCBpbnN0ZWFkIG9mIHNldHRpbmcgYHBsYXRmb3JtYCB0byBgXCJuZXV0cmFsXCJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jZm9ybWF0XG4gICAqL1xuXG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBtaW5pZnkgZmlsZXMgd2hlbiBidW5kbGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG1pbmlmeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNvdXJjZSBtYXAgbW9kZSB0byBiZSB1c2VkIHdoZW4gYnVuZGxpbmcuXG4gICAqIEBzZWUgaHR0cHM6Ly9lc2J1aWxkLmdpdGh1Yi5pby9hcGkvI3NvdXJjZW1hcFxuICAgKlxuICAgKiBAZGVmYXVsdCBTb3VyY2VNYXBNb2RlLkRFRkFVTFRcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZU1hcE1vZGU/OiBTb3VyY2VNYXBNb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgb3JpZ2luYWwgc291cmNlIGNvZGUgaW4gc291cmNlIG1hcHMgd2hlbiBidW5kbGluZy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jc291cmNlcy1jb250ZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZXNDb250ZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9nIGxldmVsIGZvciBlc2J1aWxkLiBUaGlzIGlzIGFsc28gcHJvcGFnYXRlZCB0byB0aGUgcGFja2FnZSBtYW5hZ2VyIGFuZFxuICAgKiBhcHBsaWVzIHRvIGl0cyBzcGVjaWZpYyBpbnN0YWxsIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IExvZ0xldmVsLldBUk5JTkdcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0xldmVsPzogQnVuZGxlTG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGBuYW1lYCB2YWx1ZXMgZXZlbiBpbiBtaW5pZmllZCBjb2RlLlxuICAgKlxuICAgKiBJbiBKYXZhU2NyaXB0IHRoZSBgbmFtZWAgcHJvcGVydHkgb24gZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGRlZmF1bHRzIHRvIGFcbiAgICogbmVhcmJ5IGlkZW50aWZpZXIgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBIb3dldmVyLCBtaW5pZmljYXRpb24gcmVuYW1lcyBzeW1ib2xzIHRvIHJlZHVjZSBjb2RlIHNpemUgYW5kIGJ1bmRsaW5nXG4gICAqIHNvbWV0aW1lcyBuZWVkIHRvIHJlbmFtZSBzeW1ib2xzIHRvIGF2b2lkIGNvbGxpc2lvbnMuIFRoYXQgY2hhbmdlcyB2YWx1ZSBvZlxuICAgKiB0aGUgYG5hbWVgIHByb3BlcnR5IGZvciBtYW55IG9mIHRoZXNlIGNhc2VzLiBUaGlzIGlzIHVzdWFsbHkgZmluZSBiZWNhdXNlXG4gICAqIHRoZSBgbmFtZWAgcHJvcGVydHkgaXMgbm9ybWFsbHkgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcuIEhvd2V2ZXIsIHNvbWVcbiAgICogZnJhbWV3b3JrcyByZWx5IG9uIHRoZSBgbmFtZWAgcHJvcGVydHkgZm9yIHJlZ2lzdHJhdGlvbiBhbmQgYmluZGluZyBwdXJwb3Nlcy5cbiAgICogSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IGNhbiBlbmFibGUgdGhpcyBvcHRpb24gdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsXG4gICAqIGBuYW1lYCB2YWx1ZXMgZXZlbiBpbiBtaW5pZmllZCBjb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkga2VlcE5hbWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhpcyBvcHRpb24gdGVsbHMgZXNidWlsZCB0byB3cml0ZSBvdXQgYSBKU09OIGZpbGUgcmVsYXRpdmUgdG8gb3V0cHV0IGRpcmVjdG9yeSB3aXRoIG1ldGFkYXRhIGFib3V0IHRoZSBidWlsZC5cbiAgICpcbiAgICogVGhlIG1ldGFkYXRhIGluIHRoaXMgSlNPTiBmaWxlIGZvbGxvd3MgdGhpcyBzY2hlbWEgKHNwZWNpZmllZCB1c2luZyBUeXBlU2NyaXB0IHN5bnRheCk6XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICoge1xuICAgKiAgIG91dHB1dHM6IHtcbiAgICogICAgIFtwYXRoOiBzdHJpbmddOiB7XG4gICAqICAgICAgIGJ5dGVzOiBudW1iZXJcbiAgICogICAgICAgaW5wdXRzOiB7XG4gICAqICAgICAgICAgW3BhdGg6IHN0cmluZ106IHsgYnl0ZXNJbk91dHB1dDogbnVtYmVyIH1cbiAgICogICAgICAgfVxuICAgKiAgICAgICBpbXBvcnRzOiB7IHBhdGg6IHN0cmluZyB9W11cbiAgICogICAgICAgZXhwb3J0czogc3RyaW5nW11cbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqIFRoaXMgZGF0YSBjYW4gdGhlbiBiZSBhbmFseXplZCBieSBvdGhlciB0b29scy4gRm9yIGV4YW1wbGUsXG4gICAqIGJ1bmRsZSBidWRkeSBjYW4gY29uc3VtZSBlc2J1aWxkJ3MgbWV0YWRhdGEgZm9ybWF0IGFuZCBnZW5lcmF0ZXMgYSB0cmVlbWFwIHZpc3VhbGl6YXRpb25cbiAgICogb2YgdGhlIG1vZHVsZXMgaW4geW91ciBidW5kbGUgYW5kIGhvdyBtdWNoIHNwYWNlIGVhY2ggb25lIHRha2VzIHVwLlxuICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNtZXRhZmlsZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWZpbGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyB0byBpbnNlcnQgYW4gYXJiaXRyYXJ5IHN0cmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLlxuICAgKlxuICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZm9vdGVyIHdoaWNoIGluc2VydHMgYXQgdGhlIGVuZCBpbnN0ZWFkIG9mIHRoZSBiZWdpbm5pbmcuXG4gICAqXG4gICAqIFRoaXMgaXMgY29tbW9ubHkgdXNlZCB0byBpbnNlcnQgY29tbWVudHM6XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29tbWVudHMgYXJlIHBhc3NlZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFubmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyB0byBpbnNlcnQgYW4gYXJiaXRyYXJ5IHN0cmluZyBhdCB0aGUgZW5kIG9mIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLlxuICAgKlxuICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8gYmFubmVyIHdoaWNoIGluc2VydHMgYXQgdGhlIGJlZ2lubmluZyBpbnN0ZWFkIG9mIHRoZSBlbmQuXG4gICAqXG4gICAqIFRoaXMgaXMgY29tbW9ubHkgdXNlZCB0byBpbnNlcnQgY29tbWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tZW50cyBhcmUgcGFzc2VkXG4gICAqL1xuICByZWFkb25seSBmb290ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFyc2V0IHRvIHVzZSBmb3IgZXNidWlsZCdzIG91dHB1dC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCBlc2J1aWxkJ3Mgb3V0cHV0IGlzIEFTQ0lJLW9ubHkuIEFueSBub24tQVNDSUkgY2hhcmFjdGVycyBhcmUgZXNjYXBlZFxuICAgKiB1c2luZyBiYWNrc2xhc2ggZXNjYXBlIHNlcXVlbmNlcy4gVXNpbmcgZXNjYXBlIHNlcXVlbmNlcyBtYWtlcyB0aGUgZ2VuZXJhdGVkIG91dHB1dFxuICAgKiBzbGlnaHRseSBiaWdnZXIsIGFuZCBhbHNvIG1ha2VzIGl0IGhhcmRlciB0byByZWFkLiBJZiB5b3Ugd291bGQgbGlrZSBmb3IgZXNidWlsZCB0byBwcmludFxuICAgKiB0aGUgb3JpZ2luYWwgY2hhcmFjdGVycyB3aXRob3V0IHVzaW5nIGVzY2FwZSBzZXF1ZW5jZXMsIHVzZSBgQ2hhcnNldC5VVEY4YC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jY2hhcnNldFxuICAgKiBAZGVmYXVsdCBDaGFyc2V0LkFTQ0lJXG4gICAqL1xuICByZWFkb25seSBjaGFyc2V0PzogQ2hhcnNldDtcblxuICAvKipcbiAgICogUmVwbGFjZSBnbG9iYWwgaWRlbnRpZmllcnMgd2l0aCBjb25zdGFudCBleHByZXNzaW9ucy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGB7ICdwcm9jZXNzLmVudi5ERUJVRyc6ICd0cnVlJyB9YC5cbiAgICpcbiAgICogQW5vdGhlciBleGFtcGxlLCBgeyAncHJvY2Vzcy5lbnYuQVBJX0tFWSc6IEpTT04uc3RyaW5naWZ5KCd4eHgteHh4eC14eHgnKSB9YC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByZXBsYWNlbWVudHMgYXJlIG1hZGVcbiAgICovXG4gIHJlYWRvbmx5IGRlZmluZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFyZ3VtZW50cyB0byBwYXNzIGludG8gZXNidWlsZC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHRvIGFkZCB0aGUgWy0tbG9nLWxpbWl0XShodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jbG9nLWxpbWl0KSBmbGFnOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIHByb2plY3QuYnVuZGxlci5hZGRCdW5kbGUoXCIuL3NyYy9oZWxsby50c1wiLCB7XG4gICAqICAgcGxhdGZvcm06IFwibm9kZVwiLFxuICAgKiAgIHRhcmdldDogXCJub2RlMjJcIixcbiAgICogICBzb3VyY2VtYXA6IHRydWUsXG4gICAqICAgZm9ybWF0OiBcImVzbVwiLFxuICAgKiAgIGVzYnVpbGRBcmdzOiB7XG4gICAqICAgICBcIi0tbG9nLWxpbWl0XCI6IFwiMFwiLFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVzYnVpbGQgYXJndW1lbnRzIGFyZSBwYXNzZWRcbiAgICovXG4gIHJlYWRvbmx5IGVzYnVpbGRBcmdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBib29sZWFuIH07XG5cbiAgLyoqXG4gICAqIEhvdyB0byBkZXRlcm1pbmUgdGhlIGVudHJ5IHBvaW50IGZvciBtb2R1bGVzLlxuICAgKiBUcnkgWydtb2R1bGUnLCAnbWFpbiddIHRvIGRlZmF1bHQgdG8gRVMgbW9kdWxlIHZlcnNpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgbWFpbkZpZWxkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGF1dG9tYXRpY2FsbHkgcmVwbGFjZSBhIGdsb2JhbCB2YXJpYWJsZSB3aXRoIGFuXG4gICAqIGltcG9ydCBmcm9tIGFub3RoZXIgZmlsZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jaW5qZWN0XG4gICAqIEBkZWZhdWx0IC0gbm8gY29kZSBpcyBpbmplY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW5qZWN0Pzogc3RyaW5nW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgQnVuZGxlck9wdGlvbnMucnVuQnVuZGxlVGFza1xuICovXG5leHBvcnQgZW51bSBSdW5CdW5kbGVUYXNrIHtcbiAgLyoqXG4gICAqIERvbid0IGJ1bmRsZSBhdXRvbWF0aWNhbGx5IGFzIHBhcnQgb2YgdGhlIGJ1aWxkLlxuICAgKi9cbiAgTUFOVUFMID0gXCJtYW51YWxcIixcbiAgLyoqXG4gICAqIEJ1bmRsZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSBjb21waWxhdGlvbi5cbiAgICovXG4gIFBSRV9DT01QSUxFID0gXCJwcmVfY29tcGlsZVwiLFxuICAvKipcbiAgICogQnVuZGxlIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgY29tcGlsYXRpb24uIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvXG4gICAqIGJ1bmRsZSB0aGUgY29tcGlsZWQgcmVzdWx0cy5cbiAgICpcbiAgICogVGh1cyB3aWxsIHJ1biBjb21waWxhdGlvbiB0YXNrcyAodXNpbmcgdHNjLCBldGMuKSBiZWZvcmUgcnVubmluZyBmaWxlXG4gICAqIHRocm91Z2ggYnVuZGxpbmcgc3RlcC5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHJlcXVpcmVkIHVubGVzcyB5b3UgYXJlIHVzaW5nIG5ldyBleHBlcmltZW50YWwgZmVhdHVyZXMgdGhhdFxuICAgKiBhcmUgbm90IHN1cHBvcnRlZCBieSBgZXNidWlsZGAgYnV0IGFyZSBzdXBwb3J0ZWQgYnkgdHlwZXNjcmlwdCdzIGB0c2NgXG4gICAqIGNvbXBpbGVyLiBPbmUgZXhhbXBsZSBvZiBzdWNoIGZlYXR1cmUgaXMgYGVtaXREZWNvcmF0b3JNZXRhZGF0YWAuXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gSW4gYSBUeXBlU2NyaXB0IHByb2plY3Qgd2l0aCBvdXRwdXQgY29uZmlndXJlZFxuICAgKiAvLyB0byBnbyB0byB0aGUgXCJsaWJcIiBkaXJlY3Rvcnk6XG4gICAqIGNvbnN0IHByb2plY3QgPSBuZXcgVHlwZVNjcmlwdFByb2plY3Qoe1xuICAgKiAgIG5hbWU6IFwidGVzdFwiLFxuICAgKiAgIHRzY29uZmlnOiB7XG4gICAqICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICogICAgICAgb3V0RGlyOiBcImxpYlwiLFxuICAgKiAgICAgfSxcbiAgICogICB9LFxuICAgKiAgIGJ1bmRsZXJPcHRpb25zOiB7XG4gICAqICAgICAvLyBlbnN1cmUgd2UgY29tcGlsZSB3aXRoIGB0c2NgIGJlZm9yZSBidW5kbGluZ1xuICAgKiAgICAgcnVuQnVuZGxlVGFzazogUnVuQnVuZGxlVGFzay5QT1NUX0NPTVBJTEUsXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFRlbGwgdGhlIGJ1bmRsZXIgdG8gYnVuZGxlIHRoZSBjb21waWxlZCByZXN1bHRzIChmcm9tIHRoZSBcImxpYlwiIGRpcmVjdG9yeSlcbiAgICogcHJvamVjdC5idW5kbGVyLmFkZEJ1bmRsZShcIi4vbGliL2luZGV4LmpzXCIsIHtcbiAgICogICBwbGF0Zm9ybTogXCJub2RlXCIsXG4gICAqICAgdGFyZ2V0OiBcIm5vZGUyMlwiLFxuICAgKiAgIHNvdXJjZW1hcDogZmFsc2UsXG4gICAqICAgZm9ybWF0OiBcImVzbVwiLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqKi9cbiAgUE9TVF9DT01QSUxFID0gXCJwb3N0X2NvbXBpbGVcIixcbn1cblxuLyoqXG4gKiBTb3VyY2VNYXAgbW9kZSBmb3IgZXNidWlsZFxuICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jc291cmNlbWFwXG4gKi9cbmV4cG9ydCBlbnVtIFNvdXJjZU1hcE1vZGUge1xuICAvKipcbiAgICogRGVmYXVsdCBzb3VyY2VNYXAgbW9kZSAtIHdpbGwgZ2VuZXJhdGUgYSAuanMubWFwIGZpbGUgYWxvbmdzaWRlIGFueSBnZW5lcmF0ZWQgLmpzIGZpbGUgYW5kIGFkZCBhIHNwZWNpYWwgLy8jIHNvdXJjZU1hcHBpbmdVUkw9XG4gICAqIGNvbW1lbnQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgLmpzIGZpbGUgcG9pbnRpbmcgdG8gdGhlIC5qcy5tYXAgZmlsZVxuICAgKi9cbiAgREVGQVVMVCA9IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogIEV4dGVybmFsIHNvdXJjZU1hcCBtb2RlIC0gSWYgeW91IHdhbnQgdG8gb21pdCB0aGUgc3BlY2lhbCAvLyMgc291cmNlTWFwcGluZ1VSTD0gY29tbWVudCBmcm9tIHRoZSBnZW5lcmF0ZWQgLmpzIGZpbGUgYnV0IHlvdSBzdGlsbFxuICAgKiAgd2FudCB0byBnZW5lcmF0ZSB0aGUgLmpzLm1hcCBmaWxlc1xuICAgKi9cbiAgRVhURVJOQUwgPSBcImV4dGVybmFsXCIsXG4gIC8qKlxuICAgKiBJbmxpbmUgc291cmNlTWFwIG1vZGUgLSBJZiB5b3Ugd2FudCB0byBpbnNlcnQgdGhlIGVudGlyZSBzb3VyY2UgbWFwIGludG8gdGhlIC5qcyBmaWxlIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHNlcGFyYXRlIC5qcy5tYXAgZmlsZVxuICAgKi9cbiAgSU5MSU5FID0gXCJpbmxpbmVcIixcbiAgLyoqXG4gICAqIEJvdGggc291cmNlTWFwIG1vZGUgLSBJZiB5b3Ugd2FudCB0byBoYXZlIHRoZSBlZmZlY3Qgb2YgYm90aCBpbmxpbmUgYW5kIGV4dGVybmFsIHNpbXVsdGFuZW91c2x5XG4gICAqL1xuICBCT1RIID0gXCJib3RoXCIsXG59XG5cbi8qKlxuICogQ2hhcnNldCBmb3IgZXNidWlsZCdzIG91dHB1dFxuICovXG5leHBvcnQgZW51bSBDaGFyc2V0IHtcbiAgLyoqXG4gICAqIEFTQ0lJXG4gICAqXG4gICAqIEFueSBub24tQVNDSUkgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCB1c2luZyBiYWNrc2xhc2ggZXNjYXBlIHNlcXVlbmNlc1xuICAgKi9cbiAgQVNDSUkgPSBcImFzY2lpXCIsXG5cbiAgLyoqXG4gICAqIFVURi04XG4gICAqXG4gICAqIEtlZXAgb3JpZ2luYWwgY2hhcmFjdGVycyB3aXRob3V0IHVzaW5nIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICovXG4gIFVURjggPSBcInV0ZjhcIixcbn1cblxuLyoqXG4gKiBMb2cgbGV2ZWxzIGZvciBlc2J1aWxkIGFuZCBwYWNrYWdlIG1hbmFnZXJzJyBpbnN0YWxsIGNvbW1hbmRzLlxuICovXG5leHBvcnQgZW51bSBCdW5kbGVMb2dMZXZlbCB7XG4gIC8qKiBTaG93IGV2ZXJ5dGhpbmcgKi9cbiAgVkVSQk9TRSA9IFwidmVyYm9zZVwiLFxuICAvKiogU2hvdyBldmVyeXRoaW5nIGZyb20gaW5mbyBhbmQgc29tZSBhZGRpdGlvbmFsIG1lc3NhZ2VzIGZvciBkZWJ1Z2dpbmcgKi9cbiAgREVCVUcgPSBcImRlYnVnXCIsXG4gIC8qKiBTaG93IHdhcm5pbmdzLCBlcnJvcnMsIGFuZCBhbiBvdXRwdXQgZmlsZSBzdW1tYXJ5ICovXG4gIElORk8gPSBcImluZm9cIixcbiAgLyoqIFNob3cgd2FybmluZ3MgYW5kIGVycm9ycyAqL1xuICBXQVJOSU5HID0gXCJ3YXJuaW5nXCIsXG4gIC8qKiBTaG93IGVycm9ycyBvbmx5ICovXG4gIEVSUk9SID0gXCJlcnJvclwiLFxuICAvKiogU2hvdyBub3RoaW5nICovXG4gIFNJTEVOVCA9IFwic2lsZW50XCIsXG59XG4iXX0=
|
|
@@ -37,19 +37,6 @@ export interface EslintOptions {
|
|
|
37
37
|
* @default [ '*.js', '*.d.ts', 'node_modules/', '*.generated.ts', 'coverage' ]
|
|
38
38
|
*/
|
|
39
39
|
readonly ignorePatterns?: string[];
|
|
40
|
-
/**
|
|
41
|
-
* Projenrc file to lint. Use empty string to disable.
|
|
42
|
-
* @default "projenrc.js"
|
|
43
|
-
* @deprecated provide as `devdirs`
|
|
44
|
-
*/
|
|
45
|
-
readonly lintProjenRcFile?: string;
|
|
46
|
-
/**
|
|
47
|
-
* Should we lint .projenrc.js
|
|
48
|
-
*
|
|
49
|
-
* @default true
|
|
50
|
-
* @deprecated set to `false` to remove any automatic rules and add manually
|
|
51
|
-
*/
|
|
52
|
-
readonly lintProjenRc?: boolean;
|
|
53
40
|
/**
|
|
54
41
|
* Enable prettier for code formatting
|
|
55
42
|
* @default false
|
package/lib/javascript/eslint.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.Eslint = void 0;
|
|
5
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
5
|
const prettier_1 = require("./prettier");
|
|
7
|
-
const common_1 = require("../common");
|
|
8
6
|
const component_1 = require("../component");
|
|
9
7
|
const json_1 = require("../json");
|
|
10
8
|
const yaml_1 = require("../yaml");
|
|
@@ -12,6 +10,7 @@ const yaml_1 = require("../yaml");
|
|
|
12
10
|
* Represents eslint configuration.
|
|
13
11
|
*/
|
|
14
12
|
class Eslint extends component_1.Component {
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Eslint", version: "0.100.0" };
|
|
15
14
|
/**
|
|
16
15
|
* Returns the singleton Eslint component of a project or undefined if there is none.
|
|
17
16
|
*/
|
|
@@ -19,27 +18,48 @@ class Eslint extends component_1.Component {
|
|
|
19
18
|
const isEslint = (c) => c instanceof Eslint;
|
|
20
19
|
return project.components.find(isEslint);
|
|
21
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* The underlying config file
|
|
23
|
+
*/
|
|
24
|
+
file;
|
|
25
|
+
/**
|
|
26
|
+
* eslint rules.
|
|
27
|
+
*/
|
|
28
|
+
rules;
|
|
29
|
+
/**
|
|
30
|
+
* eslint overrides.
|
|
31
|
+
*/
|
|
32
|
+
overrides = [];
|
|
33
|
+
/**
|
|
34
|
+
* eslint task.
|
|
35
|
+
*/
|
|
36
|
+
eslintTask;
|
|
37
|
+
/**
|
|
38
|
+
* Direct access to the eslint configuration (escape hatch)
|
|
39
|
+
*/
|
|
40
|
+
config;
|
|
41
|
+
/**
|
|
42
|
+
* File patterns that should not be linted
|
|
43
|
+
*/
|
|
44
|
+
ignorePatterns;
|
|
45
|
+
_formattingRules;
|
|
46
|
+
_allowDevDeps;
|
|
47
|
+
_plugins = new Set();
|
|
48
|
+
_extends = new Set();
|
|
49
|
+
_fileExtensions;
|
|
50
|
+
_flagArgs;
|
|
51
|
+
_lintPatterns;
|
|
52
|
+
nodeProject;
|
|
53
|
+
sortExtends;
|
|
22
54
|
constructor(project, options) {
|
|
23
55
|
super(project);
|
|
24
|
-
/**
|
|
25
|
-
* eslint overrides.
|
|
26
|
-
*/
|
|
27
|
-
this.overrides = [];
|
|
28
|
-
this._plugins = new Set();
|
|
29
|
-
this._extends = new Set();
|
|
30
56
|
this.nodeProject = project;
|
|
31
57
|
project.addDevDeps("eslint@^9", "@typescript-eslint/eslint-plugin@^8", "@typescript-eslint/parser@^8", "eslint-import-resolver-typescript", "eslint-plugin-import");
|
|
32
58
|
if (options.aliasMap) {
|
|
33
59
|
project.addDevDeps("eslint-import-resolver-alias");
|
|
34
60
|
}
|
|
35
|
-
const lintProjenRc = options.lintProjenRc ?? true;
|
|
36
|
-
const lintProjenRcFile = options.lintProjenRcFile ?? common_1.DEFAULT_PROJEN_RC_JS_FILENAME;
|
|
37
61
|
const devdirs = options.devdirs ?? [];
|
|
38
|
-
this._lintPatterns = new Set([
|
|
39
|
-
...options.dirs,
|
|
40
|
-
...devdirs,
|
|
41
|
-
...(lintProjenRc && lintProjenRcFile ? [lintProjenRcFile] : []),
|
|
42
|
-
]);
|
|
62
|
+
this._lintPatterns = new Set([...options.dirs, ...devdirs]);
|
|
43
63
|
this._fileExtensions = new Set(options.fileExtensions ?? [".ts"]);
|
|
44
64
|
this._allowDevDeps = new Set((devdirs ?? []).map((dir) => `**/${dir}/**`));
|
|
45
65
|
const commandOptions = options.commandOptions ?? {};
|
|
@@ -167,25 +187,8 @@ class Eslint extends component_1.Component {
|
|
|
167
187
|
},
|
|
168
188
|
],
|
|
169
189
|
};
|
|
170
|
-
// Overrides for .projenrc.js
|
|
171
|
-
// @deprecated
|
|
172
|
-
if (lintProjenRc) {
|
|
173
|
-
this.overrides = [
|
|
174
|
-
{
|
|
175
|
-
files: [lintProjenRcFile || common_1.DEFAULT_PROJEN_RC_JS_FILENAME],
|
|
176
|
-
rules: {
|
|
177
|
-
"@typescript-eslint/no-require-imports": "off",
|
|
178
|
-
"import/no-extraneous-dependencies": "off",
|
|
179
|
-
},
|
|
180
|
-
},
|
|
181
|
-
];
|
|
182
|
-
}
|
|
183
190
|
this.ignorePatterns = options.ignorePatterns ?? [
|
|
184
191
|
"*.js",
|
|
185
|
-
// @deprecated
|
|
186
|
-
...(lintProjenRc
|
|
187
|
-
? [`!${lintProjenRcFile || common_1.DEFAULT_PROJEN_RC_JS_FILENAME}`]
|
|
188
|
-
: []),
|
|
189
192
|
"*.d.ts",
|
|
190
193
|
"node_modules/",
|
|
191
194
|
"*.generated.ts",
|
|
@@ -369,19 +372,17 @@ class Eslint extends component_1.Component {
|
|
|
369
372
|
}
|
|
370
373
|
}
|
|
371
374
|
exports.Eslint = Eslint;
|
|
372
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
373
|
-
Eslint[_a] = { fqn: "projen.javascript.Eslint", version: "0.99.80" };
|
|
374
375
|
/**
|
|
375
376
|
* A compare protocol tp sort the extends array in eslint config using known ESLint best practices.
|
|
376
377
|
*
|
|
377
378
|
* Places "prettier" plugins at the end of the array
|
|
378
379
|
*/
|
|
379
380
|
class ExtendsDefaultOrder {
|
|
381
|
+
// This is the order that ESLint best practices suggest
|
|
382
|
+
static ORDER = ["plugin:prettier/recommended", "prettier"];
|
|
380
383
|
compare(a, b) {
|
|
381
384
|
return (ExtendsDefaultOrder.ORDER.indexOf(a) -
|
|
382
385
|
ExtendsDefaultOrder.ORDER.indexOf(b));
|
|
383
386
|
}
|
|
384
387
|
}
|
|
385
|
-
// This is the order that ESLint best practices suggest
|
|
386
|
-
ExtendsDefaultOrder.ORDER = ["plugin:prettier/recommended", "prettier"];
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvZXNsaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQXNDO0FBQ3RDLHNDQUEwRDtBQUUxRCw0Q0FBeUM7QUFFekMsa0NBQW1DO0FBS25DLGtDQUFtQztBQWdKbkM7O0dBRUc7QUFDSCxNQUFhLE1BQU8sU0FBUSxxQkFBUztJQUNuQzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFZLEVBQWUsRUFBRSxDQUFDLENBQUMsWUFBWSxNQUFNLENBQUM7UUFDcEUsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBMENELFlBQVksT0FBb0IsRUFBRSxPQUFzQjtRQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUEvQmpCOztXQUVHO1FBQ2EsY0FBUyxHQUFxQixFQUFFLENBQUM7UUFtQmhDLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQzdCLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBVTVDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBRTNCLE9BQU8sQ0FBQyxVQUFVLENBQ2hCLFdBQVcsRUFDWCxxQ0FBcUMsRUFDckMsOEJBQThCLEVBQzlCLG1DQUFtQyxFQUNuQyxzQkFBc0IsQ0FDdkIsQ0FBQztRQUVGLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7UUFDbEQsTUFBTSxnQkFBZ0IsR0FDcEIsT0FBTyxDQUFDLGdCQUFnQixJQUFJLHNDQUE2QixDQUFDO1FB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QW9CLENBQUMsZUFBdUI7UUFDbEQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNsRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUMxQyxDQUFDO1FBRUYsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUNwRCxxQkFBcUIsQ0FBQztZQUN4QixPQUFPO2dCQUNMLElBQUk7Z0JBQ0osU0FBUztnQkFDVCxHQUFHO2dCQUNILEdBQUc7Z0JBQ0gsSUFBSTtnQkFDSixXQUFXO2FBQ1osQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQztJQUNKLENBQUM7O0FBbmRILHdCQW9kQzs7O0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sbUJBQW1CO0lBSWhCLE9BQU8sQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUNqQyxPQUFPLENBQ0wsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDckMsQ0FBQztJQUNKLENBQUM7O0FBUkQsdURBQXVEO0FBQ3hDLHlCQUFLLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxVQUFVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByZXR0aWVyIH0gZnJvbSBcIi4vcHJldHRpZXJcIjtcbmltcG9ydCB7IERFRkFVTFRfUFJPSkVOX1JDX0pTX0ZJTEVOQU1FIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBJQ29tcGFyZVN0cmluZyB9IGZyb20gXCIuLi9jb21wYXJlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5vZGVQcm9qZWN0IH0gZnJvbSBcIi4uL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IEpzb25GaWxlIH0gZnJvbSBcIi4uL2pzb25cIjtcbmltcG9ydCB0eXBlIHsgT2JqZWN0RmlsZSB9IGZyb20gXCIuLi9vYmplY3QtZmlsZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5pbXBvcnQgdHlwZSB7IFRhc2tTdGVwT3B0aW9ucyB9IGZyb20gXCIuLi90YXNrLW1vZGVsXCI7XG5pbXBvcnQgeyBZYW1sRmlsZSB9IGZyb20gXCIuLi95YW1sXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXNsaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIGB0c2NvbmZpZy5qc29uYCB3aGljaCBzaG91bGQgYmUgdXNlZCBieSBlc2xpbnQuXG4gICAqIEBkZWZhdWx0IFwiLi90c2NvbmZpZy5qc29uXCJcbiAgICovXG4gIHJlYWRvbmx5IHRzY29uZmlnUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsZXMgb3IgZ2xvYiBwYXR0ZXJucyBvciBkaXJlY3RvcmllcyB3aXRoIHNvdXJjZSBmaWxlcyB0byBsaW50IChlLmcuIFsgXCJzcmNcIiBdKVxuICAgKi9cbiAgcmVhZG9ubHkgZGlyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEZpbGVzIG9yIGdsb2IgcGF0dGVybnMgb3IgZGlyZWN0b3JpZXMgd2l0aCBzb3VyY2UgZmlsZXMgdGhhdCBpbmNsdWRlIHRlc3RzIGFuZCBidWlsZCB0b29sc1xuICAgKlxuICAgKiBUaGVzZSBzb3VyY2VzIGFyZSBsaW50ZWQgYnV0IG1heSBhbHNvIGltcG9ydCBwYWNrYWdlcyBmcm9tIGBkZXZEZXBlbmRlbmNpZXNgLlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZGV2ZGlycz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogRmlsZSB0eXBlcyB0aGF0IHNob3VsZCBiZSBsaW50ZWQgKGUuZy4gWyBcIi5qc1wiLCBcIi50c1wiIF0pXG4gICAqIEBkZWZhdWx0IFtcIi50c1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZUV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgZXNsaW50IGNvbW1hbmQgZXhlY3V0ZWQgYnkgZXNsaW50IHRhc2tcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRPcHRpb25zPzogRXNsaW50Q29tbWFuZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZmlsZSBwYXR0ZXJucyB0aGF0IHNob3VsZCBub3QgYmUgbGludGVkLCB1c2luZyB0aGUgc2FtZSBzeW50YXhcbiAgICogYXMgLmdpdGlnbm9yZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQGRlZmF1bHQgWyAnKi5qcycsICcqLmQudHMnLCAnbm9kZV9tb2R1bGVzLycsICcqLmdlbmVyYXRlZC50cycsICdjb3ZlcmFnZScgXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlUGF0dGVybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJvamVucmMgZmlsZSB0byBsaW50LiBVc2UgZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUuXG4gICAqIEBkZWZhdWx0IFwicHJvamVucmMuanNcIlxuICAgKiBAZGVwcmVjYXRlZCBwcm92aWRlIGFzIGBkZXZkaXJzYFxuICAgKi9cbiAgcmVhZG9ubHkgbGludFByb2plblJjRmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2hvdWxkIHdlIGxpbnQgLnByb2plbnJjLmpzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQGRlcHJlY2F0ZWQgc2V0IHRvIGBmYWxzZWAgdG8gcmVtb3ZlIGFueSBhdXRvbWF0aWMgcnVsZXMgYW5kIGFkZCBtYW51YWxseVxuICAgKi9cbiAgcmVhZG9ubHkgbGludFByb2plblJjPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIHByZXR0aWVyIGZvciBjb2RlIGZvcm1hdHRpbmdcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByZXR0aWVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGV4dGVuZHMgYXJyYXkgaW4gZXNsaW50IGlzIG9yZGVyIGRlcGVuZGVudC5cbiAgICogVGhpcyBvcHRpb24gYWxsb3dzIHRvIHNvcnQgdGhlIGV4dGVuZHMgYXJyYXkgaW4gYW55IHdheSBzZWVuIGZpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2Uga25vd24gRVNMaW50IGJlc3QgcHJhY3RpY2VzIHRvIHBsYWNlIFwicHJldHRpZXJcIiBwbHVnaW5zIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5XG4gICAqL1xuICByZWFkb25seSBzb3J0RXh0ZW5kcz86IElDb21wYXJlU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgaW1wb3J0IGFsaWFzIGZvciBtb2R1bGUgcGF0aHNcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBhbGlhc01hcD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBpbXBvcnQgYWxpYXMgZm9yIG1vZHVsZSBwYXRoc1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzRXh0ZW5zaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHdheXMgdHJ5IHRvIHJlc29sdmUgdHlwZXMgdW5kZXIgYDxyb290PkB0eXBlc2AgZGlyZWN0b3J5IGV2ZW4gaXQgZG9lc24ndCBjb250YWluIGFueSBzb3VyY2UgY29kZS5cbiAgICogVGhpcyBwcmV2ZW50cyBgaW1wb3J0L25vLXVucmVzb2x2ZWRgIGVzbGludCBlcnJvcnMgd2hlbiBpbXBvcnRpbmcgYSBgQHR5cGVzLypgIG1vZHVsZSB0aGF0IHdvdWxkIG90aGVyd2lzZSByZW1haW4gdW5yZXNvbHZlZC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdHNBbHdheXNUcnlUeXBlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdyaXRlIGVzbGludCBjb25maWd1cmF0aW9uIGFzIFlBTUwgaW5zdGVhZCBvZiBKU09OXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB5YW1sPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFc2xpbnRDb21tYW5kT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBlc2xpbnQgaXNzdWVzIHdoZW4gcnVubmluZyB0aGUgZXNsaW50IHRhc2tcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZml4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXh0cmEgZmxhZyBhcmd1bWVudHMgdG8gcGFzcyB0byBlc2xpbnQgY29tbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFBcmdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogZXNsaW50IHJ1bGVzIG92ZXJyaWRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXNsaW50T3ZlcnJpZGUge1xuICAvKipcbiAgICogRmlsZXMgb3IgZmlsZSBwYXR0ZXJucyBvbiB3aGljaCB0byBhcHBseSB0aGUgb3ZlcnJpZGVcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGF0dGVybihzKSB0byBleGNsdWRlIGZyb20gdGhpcyBvdmVycmlkZS5cbiAgICogSWYgYSBmaWxlIG1hdGNoZXMgYW55IG9mIHRoZSBleGNsdWRlZCBwYXR0ZXJucywgdGhlIGNvbmZpZ3VyYXRpb24gd29u4oCZdCBhcHBseS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRmlsZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG92ZXJyaWRkZW4gcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogeyBbcnVsZTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVycmlkZGVuIHBhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25maWcocykgdG8gZXh0ZW5kIGluIHRoaXMgb3ZlcnJpZGVcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogYHBsdWdpbnNgIG92ZXJyaWRlXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBlc2xpbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludCBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gRXNsaW50IGNvbXBvbmVudCBvZiBhIHByb2plY3Qgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBFc2xpbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRXNsaW50ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgRXNsaW50ID0+IGMgaW5zdGFuY2VvZiBFc2xpbnQ7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzRXNsaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBjb25maWcgZmlsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IE9iamVjdEZpbGU7XG5cbiAgLyoqXG4gICAqIGVzbGludCBydWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBydWxlczogeyBbcnVsZTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIGVzbGludCBvdmVycmlkZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3ZlcnJpZGVzOiBFc2xpbnRPdmVycmlkZVtdID0gW107XG5cbiAgLyoqXG4gICAqIGVzbGludCB0YXNrLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVzbGludFRhc2s6IFRhc2s7XG5cbiAgLyoqXG4gICAqIERpcmVjdCBhY2Nlc3MgdG8gdGhlIGVzbGludCBjb25maWd1cmF0aW9uIChlc2NhcGUgaGF0Y2gpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiBhbnk7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0dGVybnMgdGhhdCBzaG91bGQgbm90IGJlIGxpbnRlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlnbm9yZVBhdHRlcm5zOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIF9mb3JtYXR0aW5nUnVsZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FsbG93RGV2RGVwczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsdWdpbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXh0ZW5kcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlRXh0ZW5zaW9uczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZsYWdBcmdzOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGludFBhdHRlcm5zOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBub2RlUHJvamVjdDogTm9kZVByb2plY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgc29ydEV4dGVuZHM6IElDb21wYXJlU3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBFc2xpbnRPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLm5vZGVQcm9qZWN0ID0gcHJvamVjdDtcblxuICAgIHByb2plY3QuYWRkRGV2RGVwcyhcbiAgICAgIFwiZXNsaW50QF45XCIsXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luQF44XCIsXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJAXjhcIixcbiAgICAgIFwiZXNsaW50LWltcG9ydC1yZXNvbHZlci10eXBlc2NyaXB0XCIsXG4gICAgICBcImVzbGludC1wbHVnaW4taW1wb3J0XCIsXG4gICAgKTtcblxuICAgIGlmIChvcHRpb25zLmFsaWFzTWFwKSB7XG4gICAgICBwcm9qZWN0LmFkZERldkRlcHMoXCJlc2xpbnQtaW1wb3J0LXJlc29sdmVyLWFsaWFzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbnRQcm9qZW5SYyA9IG9wdGlvbnMubGludFByb2plblJjID8/IHRydWU7XG4gICAgY29uc3QgbGludFByb2plblJjRmlsZSA9XG4gICAgICBvcHRpb25zLmxpbnRQcm9qZW5SY0ZpbGUgPz8gREVGQVVMVF9QUk9KRU5fUkNfSlNfRklMRU5BTUU7XG5cbiAgICBjb25zdCBkZXZkaXJzID0gb3B0aW9ucy5kZXZkaXJzID8/IFtdO1xuXG4gICAgdGhpcy5fbGludFBhdHRlcm5zID0gbmV3IFNldChbXG4gICAgICAuLi5vcHRpb25zLmRpcnMsXG4gICAgICAuLi5kZXZkaXJzLFxuICAgICAgLi4uKGxpbnRQcm9qZW5SYyAmJiBsaW50UHJvamVuUmNGaWxlID8gW2xpbnRQcm9qZW5SY0ZpbGVdIDogW10pLFxuICAgIF0pO1xuICAgIHRoaXMuX2ZpbGVFeHRlbnNpb25zID0gbmV3IFNldChvcHRpb25zLmZpbGVFeHRlbnNpb25zID8/IFtcIi50c1wiXSk7XG5cbiAgICB0aGlzLl9hbGxvd0RldkRlcHMgPSBuZXcgU2V0KChkZXZkaXJzID8/IFtdKS5tYXAoKGRpcikgPT4gYCoqLyR7ZGlyfS8qKmApKTtcblxuICAgIGNvbnN0IGNvbW1hbmRPcHRpb25zID0gb3B0aW9ucy5jb21tYW5kT3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCB7IGZpeCA9IHRydWUsIGV4dHJhQXJnczogZXh0cmFGbGFnQXJncyA9IFtdIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgICB0aGlzLl9mbGFnQXJncyA9IG5ldyBTZXQoZXh0cmFGbGFnQXJncyk7XG4gICAgaWYgKGZpeCkge1xuICAgICAgdGhpcy5fZmxhZ0FyZ3MuYWRkKFwiLS1maXhcIik7XG4gICAgfVxuICAgIHRoaXMuX2ZsYWdBcmdzLmFkZChcIi0tbm8tZXJyb3Itb24tdW5tYXRjaGVkLXBhdHRlcm5cIik7XG5cbiAgICB0aGlzLnNvcnRFeHRlbmRzID0gb3B0aW9ucy5zb3J0RXh0ZW5kcyA/PyBuZXcgRXh0ZW5kc0RlZmF1bHRPcmRlcigpO1xuXG4gICAgdGhpcy5lc2xpbnRUYXNrID0gcHJvamVjdC5hZGRUYXNrKFwiZXNsaW50XCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJ1bnMgZXNsaW50IGFnYWluc3QgdGhlIGNvZGViYXNlXCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgRVNMSU5UX1VTRV9GTEFUX0NPTkZJRzogXCJmYWxzZVwiLFxuICAgICAgICBOT0RFX05PX1dBUk5JTkdTOiBcIjFcIiwgLy8gU3VwcHJlc3MgZXNsaW50IHdhcm5pbmcgYWJvdXQgbGVnYWN5IGNvbmZpZyBmb3JtYXQsIGFzIGl0IGp1c3QgY29uZnVzZXMgdXNlcnMuIFRoaXMgd2lsbCBzdXBwcmVzcyBhbGwgbm9kZSB3YXJuaW5ncywgYnV0IGluIHByYWN0aWNlIHVzZXJzIGNhbm5vdCBhY3Rpb24gd2FybmluZ3MgZnJvbSBlc2xpbnQgYW55d2F5LlxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVRhc2soKTtcblxuICAgIHByb2plY3QudGVzdFRhc2suc3Bhd24odGhpcy5lc2xpbnRUYXNrKTtcblxuICAgIC8vIGV4Y2x1ZGUgc29tZSBmaWxlc1xuICAgIHByb2plY3QubnBtaWdub3JlPy5leGNsdWRlKFwiLy5lc2xpbnRyYy5qc29uXCIpO1xuXG4gICAgdGhpcy5fZm9ybWF0dGluZ1J1bGVzID0ge1xuICAgICAgLy8gU3R5bGVcbiAgICAgIFwiQHN0eWxpc3RpYy9pbmRlbnRcIjogW1wiZXJyb3JcIiwgMl0sXG4gICAgICBcIkBzdHlsaXN0aWMvcXVvdGVzXCI6IFtcImVycm9yXCIsIFwic2luZ2xlXCIsIHsgYXZvaWRFc2NhcGU6IHRydWUgfV0sXG4gICAgICBcIkBzdHlsaXN0aWMvY29tbWEtZGFuZ2xlXCI6IFtcImVycm9yXCIsIFwiYWx3YXlzLW11bHRpbGluZVwiXSwgLy8gZW5zdXJlcyBjbGVhbiBkaWZmcywgc2VlIGh0dHBzOi8vbWVkaXVtLmNvbS9AbmlrZ3JhZi93aHkteW91LXNob3VsZC1lbmZvcmNlLWRhbmdsaW5nLWNvbW1hcy1mb3ItbXVsdGlsaW5lLXN0YXRlbWVudHMtZDAzNGM5OGUzNmY4XG4gICAgICBcIkBzdHlsaXN0aWMvY29tbWEtc3BhY2luZ1wiOiBbXCJlcnJvclwiLCB7IGJlZm9yZTogZmFsc2UsIGFmdGVyOiB0cnVlIH1dLCAvLyBzcGFjZSBhZnRlciwgbm8gc3BhY2UgYmVmb3JlXG4gICAgICBcIkBzdHlsaXN0aWMvbm8tbXVsdGktc3BhY2VzXCI6IFtcImVycm9yXCIsIHsgaWdub3JlRU9MQ29tbWVudHM6IGZhbHNlIH1dLCAvLyBubyBtdWx0aSBzcGFjZXNcbiAgICAgIFwiQHN0eWxpc3RpYy9hcnJheS1icmFja2V0LXNwYWNpbmdcIjogW1wiZXJyb3JcIiwgXCJuZXZlclwiXSwgLy8gWzEsIDIsIDNdXG4gICAgICBcIkBzdHlsaXN0aWMvYXJyYXktYnJhY2tldC1uZXdsaW5lXCI6IFtcImVycm9yXCIsIFwiY29uc2lzdGVudFwiXSwgLy8gZW5mb3JjZSBjb25zaXN0ZW50IGxpbmUgYnJlYWtzIGJldHdlZW4gYnJhY2tldHNcbiAgICAgIFwiQHN0eWxpc3RpYy9vYmplY3QtY3VybHktc3BhY2luZ1wiOiBbXCJlcnJvclwiLCBcImFsd2F5c1wiXSwgLy8geyBrZXk6ICd2YWx1ZScgfVxuICAgICAgXCJAc3R5bGlzdGljL29iamVjdC1jdXJseS1uZXdsaW5lXCI6IFtcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICB7IG11bHRpbGluZTogdHJ1ZSwgY29uc2lzdGVudDogdHJ1ZSB9LFxuICAgICAgXSwgLy8gZW5mb3JjZSBjb25zaXN0ZW50IGxpbmUgYnJlYWtzIGJldHdlZW4gYnJhY2VzXG4gICAgICBcIkBzdHlsaXN0aWMvb2JqZWN0LXByb3BlcnR5LW5ld2xpbmVcIjogW1xuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIHsgYWxsb3dBbGxQcm9wZXJ0aWVzT25TYW1lTGluZTogdHJ1ZSB9LFxuICAgICAgXSwgLy8gZW5mb3JjZSBcInNhbWUgbGluZVwiIG9yIFwibXVsdGlwbGUgbGluZVwiIG9uIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICBcIkBzdHlsaXN0aWMva2V5d29yZC1zcGFjaW5nXCI6IFtcImVycm9yXCJdLCAvLyByZXF1aXJlIGEgc3BhY2UgYmVmb3JlICYgYWZ0ZXIga2V5d29yZHNcbiAgICAgIFwiQHN0eWxpc3RpYy9icmFjZS1zdHlsZVwiOiBbXCJlcnJvclwiLCBcIjF0YnNcIiwgeyBhbGxvd1NpbmdsZUxpbmU6IHRydWUgfV0sIC8vIGVuZm9yY2Ugb25lIHRydWUgYnJhY2Ugc3R5bGVcbiAgICAgIFwiQHN0eWxpc3RpYy9zcGFjZS1iZWZvcmUtYmxvY2tzXCI6IFtcImVycm9yXCJdLCAvLyByZXF1aXJlIHNwYWNlIGJlZm9yZSBibG9ja3NcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXNsaW50L2lzc3Vlcy84MDcyXG4gICAgICBcIkBzdHlsaXN0aWMvbWVtYmVyLWRlbGltaXRlci1zdHlsZVwiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gUmVxdWlyZSBzZW1pY29sb25zXG4gICAgICBcIkBzdHlsaXN0aWMvc2VtaVwiOiBbXCJlcnJvclwiLCBcImFsd2F5c1wiXSxcblxuICAgICAgLy8gTWF4IGxpbmUgbGVuZ3Roc1xuICAgICAgXCJAc3R5bGlzdGljL21heC1sZW5cIjogW1xuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjb2RlOiAxNTAsXG4gICAgICAgICAgaWdub3JlVXJsczogdHJ1ZSwgLy8gTW9zdCBjb21tb24gcmVhc29uIHRvIGRpc2FibGUgaXRcbiAgICAgICAgICBpZ25vcmVTdHJpbmdzOiB0cnVlLCAvLyBUaGVzZSBhcmUgbm90IGZhbnRhc3RpYyBidXQgbmVjZXNzYXJ5IGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgICAgIGlnbm9yZVRlbXBsYXRlTGl0ZXJhbHM6IHRydWUsXG4gICAgICAgICAgaWdub3JlQ29tbWVudHM6IHRydWUsXG4gICAgICAgICAgaWdub3JlUmVnRXhwTGl0ZXJhbHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuXG4gICAgICAvLyBEb24ndCB1bm5lY2Vzc2FyaWx5IHF1b3RlIHByb3BlcnRpZXNcbiAgICAgIFwiQHN0eWxpc3RpYy9xdW90ZS1wcm9wc1wiOiBbXCJlcnJvclwiLCBcImNvbnNpc3RlbnQtYXMtbmVlZGVkXCJdLFxuXG4gICAgICAvLyBSZXF1aXJlZCBzcGFjaW5nIGluIHByb3BlcnR5IGRlY2xhcmF0aW9ucyAoY29waWVkIGZyb20gVFNMaW50LCBkZWZhdWx0cyBhcmUgZ29vZClcbiAgICAgIFwiQHN0eWxpc3RpYy9rZXktc3BhY2luZ1wiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gTm8gbXVsdGlwbGUgZW1wdHkgbGluZXNcbiAgICAgIFwiQHN0eWxpc3RpYy9uby1tdWx0aXBsZS1lbXB0eS1saW5lc1wiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gVXNlbGVzcyBkaWZmIHJlc3VsdHNcbiAgICAgIFwiQHN0eWxpc3RpYy9uby10cmFpbGluZy1zcGFjZXNcIjogW1wiZXJyb3JcIl0sXG4gICAgfTtcblxuICAgIHRoaXMucnVsZXMgPSB7XG4gICAgICAvLyByZXF1aXJlIGN1cmx5IGJyYWNlcyBmb3IgbXVsdGlsaW5lIGNvbnRyb2wgc3RhdGVtZW50c1xuICAgICAgY3VybHk6IFtcImVycm9yXCIsIFwibXVsdGktbGluZVwiLCBcImNvbnNpc3RlbnRcIl0sXG5cbiAgICAgIC8vIFJlcXVpcmUgdXNlIG9mIHRoZSBgaW1wb3J0IHsgZm9vIH0gZnJvbSAnYmFyJztgIGZvcm0gaW5zdGVhZCBvZiBgaW1wb3J0IGZvbyA9IHJlcXVpcmUoJ2JhcicpO2BcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1wiOiBcImVycm9yXCIsXG5cbiAgICAgIC8vIFJlcXVpcmUgYWxsIGltcG9ydGVkIGRlcGVuZGVuY2llcyBhcmUgYWN0dWFsbHkgZGVjbGFyZWQgaW4gcGFja2FnZS5qc29uXG4gICAgICBcImltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1wiOiBbXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAge1xuICAgICAgICAgIC8vIE9ubHkgYWxsb3cgaW1wb3J0aW5nIGRldkRlcGVuZGVuY2llcyBmcm9tIFwiZGV2ZGlyc1wiLlxuICAgICAgICAgIGRldkRlcGVuZGVuY2llczogKCkgPT4gdGhpcy5yZW5kZXJEZXZEZXBzQWxsb3dMaXN0KCksXG4gICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IGZhbHNlLCAvLyBEaXNhbGxvdyBpbXBvcnRpbmcgb3B0aW9uYWwgZGVwZW5kZW5jaWVzICh0aG9zZSBzaG91bGRuJ3QgYmUgaW4gdXNlIGluIHRoZSBwcm9qZWN0KVxuICAgICAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHRydWUsIC8vIEFsbG93IGltcG9ydGluZyBwZWVyIGRlcGVuZGVuY2llcyAodGhhdCBhcmVuJ3QgYWxzbyBkaXJlY3QgZGVwZW5kZW5jaWVzKVxuICAgICAgICB9LFxuICAgICAgXSxcblxuICAgICAgLy8gUmVxdWlyZSBhbGwgaW1wb3J0ZWQgbGlicmFyaWVzIGFjdHVhbGx5IHJlc29sdmUgKCEhcmVxdWlyZWQgZm9yIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyB0byB3b3JrISEpXG4gICAgICBcImltcG9ydC9uby11bnJlc29sdmVkXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBSZXF1aXJlIGFuIG9yZGVyaW5nIG9uIGFsbCBpbXBvcnRzXG4gICAgICBcImltcG9ydC9vcmRlclwiOiBbXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXBzOiBbXCJidWlsdGluXCIsIFwiZXh0ZXJuYWxcIl0sXG4gICAgICAgICAgYWxwaGFiZXRpemU6IHsgb3JkZXI6IFwiYXNjXCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LFxuICAgICAgICB9LFxuICAgICAgXSxcblxuICAgICAgLy8gQ2Fubm90IGltcG9ydCBmcm9tIHRoZSBzYW1lIG1vZHVsZSB0d2ljZVxuICAgICAgXCJpbXBvcnQvbm8tZHVwbGljYXRlc1wiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gQ2Fubm90IHNoYWRvdyBuYW1lc1xuICAgICAgXCJuby1zaGFkb3dcIjogW1wib2ZmXCJdLFxuICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XCI6IFwiZXJyb3JcIixcbiAgICAgIC8vIE9uZSBvZiB0aGUgZWFzaWVzdCBtaXN0YWtlcyB0byBtYWtlXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1wiOiBcImVycm9yXCIsXG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGluc2lkZSB0cnkvY2F0Y2ggYmxvY2tzLCBwcm9taXNlcyBhcmUgJ3JldHVybiBhd2FpdCdlZFxuICAgICAgLy8gKG11c3QgZGlzYWJsZSB0aGUgYmFzZSBydWxlIGFzIGl0IGNhbiByZXBvcnQgaW5jb3JyZWN0IGVycm9ycylcbiAgICAgIFwibm8tcmV0dXJuLWF3YWl0XCI6IFtcIm9mZlwiXSxcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3JldHVybi1hd2FpdFwiOiBcImVycm9yXCIsXG5cbiAgICAgIC8vIE11c3QgdXNlIGZvby5iYXIgaW5zdGVhZCBvZiBmb29bJ2JhciddIGlmIHBvc3NpYmxlXG4gICAgICBcImRvdC1ub3RhdGlvblwiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gQXJlIHlvdSBzdXJlIHwgaXMgbm90IGEgdHlwbyBmb3IgfHwgP1xuICAgICAgXCJuby1iaXR3aXNlXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBNZW1iZXIgb3JkZXJpbmdcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1wiOiBbXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAge1xuICAgICAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgICAgIFwicHVibGljLXN0YXRpYy1maWVsZFwiLFxuICAgICAgICAgICAgXCJwdWJsaWMtc3RhdGljLW1ldGhvZFwiLFxuICAgICAgICAgICAgXCJwcm90ZWN0ZWQtc3RhdGljLWZpZWxkXCIsXG4gICAgICAgICAgICBcInByb3RlY3RlZC1zdGF0aWMtbWV0aG9kXCIsXG4gICAgICAgICAgICBcInByaXZhdGUtc3RhdGljLWZpZWxkXCIsXG4gICAgICAgICAgICBcInByaXZhdGUtc3RhdGljLW1ldGhvZFwiLFxuXG4gICAgICAgICAgICBcImZpZWxkXCIsXG5cbiAgICAgICAgICAgIC8vIENvbnN0cnVjdG9yc1xuICAgICAgICAgICAgXCJjb25zdHJ1Y3RvclwiLCAvLyA9IFtcInB1YmxpYy1jb25zdHJ1Y3RvclwiLCBcInByb3RlY3RlZC1jb25zdHJ1Y3RvclwiLCBcInByaXZhdGUtY29uc3RydWN0b3JcIl1cblxuICAgICAgICAgICAgLy8gTWV0aG9kc1xuICAgICAgICAgICAgXCJtZXRob2RcIixcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgLy8gT3ZlcnJpZGVzIGZvciAucHJvamVucmMuanNcbiAgICAvLyBAZGVwcmVjYXRlZFxuICAgIGlmIChsaW50UHJvamVuUmMpIHtcbiAgICAgIHRoaXMub3ZlcnJpZGVzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZXM6IFtsaW50UHJvamVuUmNGaWxlIHx8IERFRkFVTFRfUFJPSkVOX1JDX0pTX0ZJTEVOQU1FXSxcbiAgICAgICAgICBydWxlczoge1xuICAgICAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXCI6IFwib2ZmXCIsXG4gICAgICAgICAgICBcImltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1wiOiBcIm9mZlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cblxuICAgIHRoaXMuaWdub3JlUGF0dGVybnMgPSBvcHRpb25zLmlnbm9yZVBhdHRlcm5zID8/IFtcbiAgICAgIFwiKi5qc1wiLFxuICAgICAgLy8gQGRlcHJlY2F0ZWRcbiAgICAgIC4uLihsaW50UHJvamVuUmNcbiAgICAgICAgPyBbYCEke2xpbnRQcm9qZW5SY0ZpbGUgfHwgREVGQVVMVF9QUk9KRU5fUkNfSlNfRklMRU5BTUV9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICBcIiouZC50c1wiLFxuICAgICAgXCJub2RlX21vZHVsZXMvXCIsXG4gICAgICBcIiouZ2VuZXJhdGVkLnRzXCIsXG4gICAgICBcImNvdmVyYWdlXCIsXG4gICAgXTtcblxuICAgIGNvbnN0IHRzY29uZmlnID0gb3B0aW9ucy50c2NvbmZpZ1BhdGggPz8gXCIuL3RzY29uZmlnLmpzb25cIjtcblxuICAgIHRoaXMuYWRkUGx1Z2lucyhcIkB0eXBlc2NyaXB0LWVzbGludFwiKTtcbiAgICB0aGlzLmFkZFBsdWdpbnMoXCJpbXBvcnRcIik7XG4gICAgdGhpcy5hZGRFeHRlbmRzKFwicGx1Z2luOmltcG9ydC90eXBlc2NyaXB0XCIpO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBlbnY6IHtcbiAgICAgICAgamVzdDogdHJ1ZSxcbiAgICAgICAgbm9kZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICByb290OiB0cnVlLFxuICAgICAgcGx1Z2luczogdGhpcy5fcGx1Z2lucyxcbiAgICAgIHBhcnNlcjogXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyXCIsXG4gICAgICBwYXJzZXJPcHRpb25zOiB7XG4gICAgICAgIGVjbWFWZXJzaW9uOiAyMDE4LFxuICAgICAgICBzb3VyY2VUeXBlOiBcIm1vZHVsZVwiLFxuICAgICAgICBwcm9qZWN0OiB0c2NvbmZpZyxcbiAgICAgIH0sXG4gICAgICBleHRlbmRzOiAoKSA9PlxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuX2V4dGVuZHMpLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgdGhpcy5zb3J0RXh0ZW5kcy5jb21wYXJlKGEsIGIpLFxuICAgICAgICApLFxuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgXCJpbXBvcnQvcGFyc2Vyc1wiOiB7XG4gICAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyXCI6IFtcIi50c1wiLCBcIi50c3hcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW1wb3J0L3Jlc29sdmVyXCI6IHtcbiAgICAgICAgICAuLi4ob3B0aW9ucy5hbGlhc01hcCAmJiB7XG4gICAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgICBtYXA6IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYWxpYXNNYXApLm1hcCgoW2ssIHZdKSA9PiBbaywgdl0pLFxuICAgICAgICAgICAgICBleHRlbnNpb25zOiBvcHRpb25zLmFsaWFzRXh0ZW5zaW9ucyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm9kZToge30sXG4gICAgICAgICAgdHlwZXNjcmlwdDoge1xuICAgICAgICAgICAgcHJvamVjdDogdHNjb25maWcsXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy50c0Fsd2F5c1RyeVR5cGVzICE9PSBmYWxzZSAmJiB7IGFsd2F5c1RyeVR5cGVzOiB0cnVlIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaWdub3JlUGF0dGVybnM6IHRoaXMuaWdub3JlUGF0dGVybnMsXG4gICAgICBydWxlczogKCkgPT4gKHsgLi4udGhpcy5fZm9ybWF0dGluZ1J1bGVzLCAuLi50aGlzLnJ1bGVzIH0pLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLm92ZXJyaWRlcyxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMueWFtbCkge1xuICAgICAgdGhpcy5maWxlID0gbmV3IFlhbWxGaWxlKHByb2plY3QsIFwiLmVzbGludHJjLnltbFwiLCB7XG4gICAgICAgIG9iajogdGhpcy5jb25maWcsXG4gICAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbGUgPSBuZXcgSnNvbkZpbGUocHJvamVjdCwgXCIuZXNsaW50cmMuanNvblwiLCB7XG4gICAgICAgIG9iajogdGhpcy5jb25maWcsXG4gICAgICAgIC8vIGh0dHBzOi8vZXNsaW50Lm9yZy9kb2NzL2xhdGVzdC91c2VyLWd1aWRlL2NvbmZpZ3VyaW5nL2NvbmZpZ3VyYXRpb24tZmlsZXMjY29tbWVudHMtaW4tY29uZmlndXJhdGlvbi1maWxlc1xuICAgICAgICBtYXJrZXI6IHRydWUsXG4gICAgICAgIGFsbG93Q29tbWVudHM6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBlbmFibGVkIHByZXR0aWVyIGV4cGxpY2l0bHkgX29yXyBpZiB0aGUgcHJvamVjdCBoYXMgYVxuICAgIC8vIGBQcmV0dGllcmAgY29tcG9uZW50LCB3ZSBzaGFsbCB0d2VhayBvdXIgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseS5cbiAgICBpZiAob3B0aW9ucy5wcmV0dGllciB8fCBQcmV0dGllci5vZihwcm9qZWN0KSkge1xuICAgICAgdGhpcy5lbmFibGVQcmV0dGllcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vZGVQcm9qZWN0LmFkZERldkRlcHMoXCJAc3R5bGlzdGljL2VzbGludC1wbHVnaW5AXjJcIik7XG4gICAgICB0aGlzLmFkZFBsdWdpbnMoXCJAc3R5bGlzdGljXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGltbXV0YWJsZSBjb3B5IG9mIHRoZSBsaW50UGF0dGVybnMgYmVpbmcgdXNlZCBieSB0aGlzIGVzbGludCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBsaW50UGF0dGVybnMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLl9saW50UGF0dGVybnMgJiYgdGhpcy5fbGludFBhdHRlcm5zLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gWy4uLnRoaXMuX2xpbnRQYXR0ZXJuc107XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGZpbGUsIGdsb2IgcGF0dGVybiBvciBkaXJlY3Rvcnkgd2l0aCBzb3VyY2UgZmlsZXMgdG8gbGludCAoZS5nLiBbIFwic3JjXCIgXSlcbiAgICovXG4gIHB1YmxpYyBhZGRMaW50UGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9saW50UGF0dGVybnMuYWRkKHBhdHRlcm4pO1xuICAgIHRoaXMudXBkYXRlVGFzaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlc2xpbnQgcnVsZS5cbiAgICovXG4gIHB1YmxpYyBhZGRSdWxlcyhydWxlczogeyBbcnVsZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhydWxlcykpIHtcbiAgICAgIHRoaXMucnVsZXNba10gPSB2O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVzbGludCBwbHVnaW5cbiAgICogQHBhcmFtIHBsdWdpbnMgVGhlIG5hbWVzIG9mIHBsdWdpbnMgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkUGx1Z2lucyguLi5wbHVnaW5zOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIHRoaXMuX3BsdWdpbnMuYWRkKHBsdWdpbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlc2xpbnQgb3ZlcnJpZGUuXG4gICAqL1xuICBwdWJsaWMgYWRkT3ZlcnJpZGUob3ZlcnJpZGU6IEVzbGludE92ZXJyaWRlKSB7XG4gICAgdGhpcy5vdmVycmlkZXMucHVzaChvdmVycmlkZSk7XG4gIH1cblxuICAvKipcbiAgICogRG8gbm90IGxpbnQgdGhlc2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWRkSWdub3JlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlnbm9yZVBhdHRlcm5zLnB1c2gocGF0dGVybik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBgZXh0ZW5kc2AgaXRlbSB0byB0aGUgZXNsaW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBleHRlbmRMaXN0IFRoZSBsaXN0IG9mIFwiZXh0ZW5kc1wiIHRvIGFkZC5cbiAgICovXG4gIHB1YmxpYyBhZGRFeHRlbmRzKC4uLmV4dGVuZExpc3Q6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChjb25zdCBleHRlbmQgb2YgZXh0ZW5kTGlzdCkge1xuICAgICAgdGhpcy5fZXh0ZW5kcy5hZGQoZXh0ZW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZ2xvYiBmaWxlIHBhdHRlcm4gd2hpY2ggYWxsb3dzIGltcG9ydGluZyBkZXYgZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0gcGF0dGVybiBnbG9iIHBhdHRlcm4uXG4gICAqL1xuICBwdWJsaWMgYWxsb3dEZXZEZXBzKHBhdHRlcm46IHN0cmluZykge1xuICAgIHRoaXMuX2FsbG93RGV2RGVwcy5hZGQocGF0dGVybik7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBwcmV0dGllciBmb3IgY29kZSBmb3JtYXR0aW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBlbmFibGVQcmV0dGllcigpIHtcbiAgICB0aGlzLm5vZGVQcm9qZWN0LmFkZERldkRlcHMoXG4gICAgICBcInByZXR0aWVyXCIsXG4gICAgICBcImVzbGludC1wbHVnaW4tcHJldHRpZXJcIixcbiAgICAgIFwiZXNsaW50LWNvbmZpZy1wcmV0dGllclwiLFxuICAgICk7XG5cbiAgICB0aGlzLl9mb3JtYXR0aW5nUnVsZXMgPSB7fTtcblxuICAgIHRoaXMuYWRkRXh0ZW5kcyhcInBsdWdpbjpwcmV0dGllci9yZWNvbW1lbmRlZFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRGV2RGVwc0FsbG93TGlzdCgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hbGxvd0RldkRlcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdGFzayB3aXRoIHRoZSBjdXJyZW50IGxpc3Qgb2YgbGludCBwYXR0ZXJucyBhbmQgZmlsZSBleHRlbnNpb25zXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVRhc2soKSB7XG4gICAgY29uc3QgdGFza0V4ZWNDb21tYW5kID0gXCJlc2xpbnRcIjtcbiAgICBjb25zdCBhcmdzU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgaWYgKHRoaXMuX2ZpbGVFeHRlbnNpb25zLnNpemUgPiAwKSB7XG4gICAgICBhcmdzU2V0LmFkZChgLS1leHQgJHtbLi4udGhpcy5fZmlsZUV4dGVuc2lvbnNdLmpvaW4oXCIsXCIpfWApO1xuICAgIH1cbiAgICBhcmdzU2V0LmFkZChgJHtbLi4udGhpcy5fZmxhZ0FyZ3NdLmpvaW4oXCIgXCIpfWApO1xuICAgIGFyZ3NTZXQuYWRkKFwiJEBcIik7IC8vIEV4dGVybmFsIGFyZ3MgZ28gaGVyZVxuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuX2xpbnRQYXR0ZXJucykge1xuICAgICAgYXJnc1NldC5hZGQocGF0dGVybik7XG4gICAgfVxuXG4gICAgdGhpcy5lc2xpbnRUYXNrLnJlc2V0KFxuICAgICAgW3Rhc2tFeGVjQ29tbWFuZCwgLi4uYXJnc1NldF0uam9pbihcIiBcIiksXG4gICAgICB0aGlzLmJ1aWxkVGFza1N0ZXBPcHRpb25zKHRhc2tFeGVjQ29tbWFuZCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjYXNlIG9mIGV4dGVybmFsIGVkaXRpbmcgb2YgdGhlIGVzbGludCB0YXNrIHN0ZXAsIHdlIHByZXNlcnZlIHRob3NlIGNoYW5nZXMuXG4gICAqIE90aGVyd2lzZSwgd2UgcmV0dXJuIHRoZSBkZWZhdWx0IHRhc2sgc3RlcCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gdGFza0V4ZWNDb21tYW5kIFRoZSBjb21tYW5kIHRoYXQgdGhlIEVTTGludCB0YXNrcyBleGVjdXRlc1xuICAgKiBAcmV0dXJucyBFaXRoZXIgdGhlIGV4dGVybmFsbHkgZWRpdGVkLCBvciB0aGUgZGVmYXVsdCB0YXNrIHN0ZXAgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFRhc2tTdGVwT3B0aW9ucyh0YXNrRXhlY0NvbW1hbmQ6IHN0cmluZyk6IFRhc2tTdGVwT3B0aW9ucyB7XG4gICAgY29uc3QgY3VycmVudEVzbGludFRhc2tTdGVwID0gdGhpcy5lc2xpbnRUYXNrPy5zdGVwcz8uZmluZCgoc3RlcCkgPT5cbiAgICAgIHN0ZXA/LmV4ZWM/LnN0YXJ0c1dpdGg/Lih0YXNrRXhlY0NvbW1hbmQpLFxuICAgICk7XG5cbiAgICBpZiAoY3VycmVudEVzbGludFRhc2tTdGVwKSB7XG4gICAgICBjb25zdCB7IGFyZ3MsIGNvbmRpdGlvbiwgY3dkLCBlbnYsIG5hbWUsIHJlY2VpdmVBcmdzIH0gPVxuICAgICAgICBjdXJyZW50RXNsaW50VGFza1N0ZXA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmdzLFxuICAgICAgICBjb25kaXRpb24sXG4gICAgICAgIGN3ZCxcbiAgICAgICAgZW52LFxuICAgICAgICBuYW1lLFxuICAgICAgICByZWNlaXZlQXJncyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbXBhcmUgcHJvdG9jb2wgdHAgc29ydCB0aGUgZXh0ZW5kcyBhcnJheSBpbiBlc2xpbnQgY29uZmlnIHVzaW5nIGtub3duIEVTTGludCBiZXN0IHByYWN0aWNlcy5cbiAqXG4gKiBQbGFjZXMgXCJwcmV0dGllclwiIHBsdWdpbnMgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXlcbiAqL1xuY2xhc3MgRXh0ZW5kc0RlZmF1bHRPcmRlciBpbXBsZW1lbnRzIElDb21wYXJlU3RyaW5nIHtcbiAgLy8gVGhpcyBpcyB0aGUgb3JkZXIgdGhhdCBFU0xpbnQgYmVzdCBwcmFjdGljZXMgc3VnZ2VzdFxuICBwcml2YXRlIHN0YXRpYyBPUkRFUiA9IFtcInBsdWdpbjpwcmV0dGllci9yZWNvbW1lbmRlZFwiLCBcInByZXR0aWVyXCJdO1xuXG4gIHB1YmxpYyBjb21wYXJlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgRXh0ZW5kc0RlZmF1bHRPcmRlci5PUkRFUi5pbmRleE9mKGEpIC1cbiAgICAgIEV4dGVuZHNEZWZhdWx0T3JkZXIuT1JERVIuaW5kZXhPZihiKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvZXNsaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx5Q0FBc0M7QUFFdEMsNENBQXlDO0FBRXpDLGtDQUFtQztBQUtuQyxrQ0FBbUM7QUFpSW5DOztHQUVHO0FBQ0gsTUFBYSxNQUFPLFNBQVEscUJBQVM7O0lBQ25DOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFnQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVksRUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQztRQUNwRSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUksQ0FBYTtJQUVqQzs7T0FFRztJQUNhLEtBQUssQ0FBMEI7SUFFL0M7O09BRUc7SUFDYSxTQUFTLEdBQXFCLEVBQUUsQ0FBQztJQUVqRDs7T0FFRztJQUNhLFVBQVUsQ0FBTztJQUVqQzs7T0FFRztJQUNhLE1BQU0sQ0FBTTtJQUU1Qjs7T0FFRztJQUNhLGNBQWMsQ0FBVztJQUVqQyxnQkFBZ0IsQ0FBc0I7SUFDN0IsYUFBYSxDQUFjO0lBQzNCLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzdCLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzdCLGVBQWUsQ0FBYztJQUM3QixTQUFTLENBQWM7SUFDdkIsYUFBYSxDQUFjO0lBQzNCLFdBQVcsQ0FBYztJQUN6QixXQUFXLENBQWlCO0lBRTdDLFlBQVksT0FBb0IsRUFBRSxPQUFzQjtRQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztRQUUzQixPQUFPLENBQUMsVUFBVSxDQUNoQixXQUFXLEVBQ1gscUNBQXFDLEVBQ3JDLDhCQUE4QixF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SUFBSTtnQkFDSixTQUFTO2dCQUNULEdBQUc7Z0JBQ0gsR0FBRztnQkFDSCxJQUFJO2dCQUNKLFdBQVc7YUFDWixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDO0lBQ0osQ0FBQzs7QUF6Ykgsd0JBMGJDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sbUJBQW1CO0lBQ3ZCLHVEQUF1RDtJQUMvQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFNUQsT0FBTyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2pDLE9BQU8sQ0FDTCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByZXR0aWVyIH0gZnJvbSBcIi4vcHJldHRpZXJcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXBhcmVTdHJpbmcgfSBmcm9tIFwiLi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gXCIuLi9qc29uXCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdEZpbGUgfSBmcm9tIFwiLi4vb2JqZWN0LWZpbGVcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgdHlwZSB7IFRhc2sgfSBmcm9tIFwiLi4vdGFza1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrU3RlcE9wdGlvbnMgfSBmcm9tIFwiLi4vdGFzay1tb2RlbFwiO1xuaW1wb3J0IHsgWWFtbEZpbGUgfSBmcm9tIFwiLi4veWFtbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVzbGludE9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aCB0byBgdHNjb25maWcuanNvbmAgd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgZXNsaW50LlxuICAgKiBAZGVmYXVsdCBcIi4vdHNjb25maWcuanNvblwiXG4gICAqL1xuICByZWFkb25seSB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGVzIG9yIGdsb2IgcGF0dGVybnMgb3IgZGlyZWN0b3JpZXMgd2l0aCBzb3VyY2UgZmlsZXMgdG8gbGludCAoZS5nLiBbIFwic3JjXCIgXSlcbiAgICovXG4gIHJlYWRvbmx5IGRpcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGaWxlcyBvciBnbG9iIHBhdHRlcm5zIG9yIGRpcmVjdG9yaWVzIHdpdGggc291cmNlIGZpbGVzIHRoYXQgaW5jbHVkZSB0ZXN0cyBhbmQgYnVpbGQgdG9vbHNcbiAgICpcbiAgICogVGhlc2Ugc291cmNlcyBhcmUgbGludGVkIGJ1dCBtYXkgYWxzbyBpbXBvcnQgcGFja2FnZXMgZnJvbSBgZGV2RGVwZW5kZW5jaWVzYC5cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGRldmRpcnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEZpbGUgdHlwZXMgdGhhdCBzaG91bGQgYmUgbGludGVkIChlLmcuIFsgXCIuanNcIiwgXCIudHNcIiBdKVxuICAgKiBAZGVmYXVsdCBbXCIudHNcIl1cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVFeHRlbnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGVzbGludCBjb21tYW5kIGV4ZWN1dGVkIGJ5IGVzbGludCB0YXNrXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kT3B0aW9ucz86IEVzbGludENvbW1hbmRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGZpbGUgcGF0dGVybnMgdGhhdCBzaG91bGQgbm90IGJlIGxpbnRlZCwgdXNpbmcgdGhlIHNhbWUgc3ludGF4XG4gICAqIGFzIC5naXRpZ25vcmUgcGF0dGVybnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsgJyouanMnLCAnKi5kLnRzJywgJ25vZGVfbW9kdWxlcy8nLCAnKi5nZW5lcmF0ZWQudHMnLCAnY292ZXJhZ2UnIF1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVBhdHRlcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBwcmV0dGllciBmb3IgY29kZSBmb3JtYXR0aW5nXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcmV0dGllcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlbmRzIGFycmF5IGluIGVzbGludCBpcyBvcmRlciBkZXBlbmRlbnQuXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzb3J0IHRoZSBleHRlbmRzIGFycmF5IGluIGFueSB3YXkgc2VlbiBmaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIGtub3duIEVTTGludCBiZXN0IHByYWN0aWNlcyB0byBwbGFjZSBcInByZXR0aWVyXCIgcGx1Z2lucyBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheVxuICAgKi9cbiAgcmVhZG9ubHkgc29ydEV4dGVuZHM/OiBJQ29tcGFyZVN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIGltcG9ydCBhbGlhcyBmb3IgbW9kdWxlIHBhdGhzXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNNYXA/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBFbmFibGUgaW1wb3J0IGFsaWFzIGZvciBtb2R1bGUgcGF0aHNcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBhbGlhc0V4dGVuc2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWx3YXlzIHRyeSB0byByZXNvbHZlIHR5cGVzIHVuZGVyIGA8cm9vdD5AdHlwZXNgIGRpcmVjdG9yeSBldmVuIGl0IGRvZXNuJ3QgY29udGFpbiBhbnkgc291cmNlIGNvZGUuXG4gICAqIFRoaXMgcHJldmVudHMgYGltcG9ydC9uby11bnJlc29sdmVkYCBlc2xpbnQgZXJyb3JzIHdoZW4gaW1wb3J0aW5nIGEgYEB0eXBlcy8qYCBtb2R1bGUgdGhhdCB3b3VsZCBvdGhlcndpc2UgcmVtYWluIHVucmVzb2x2ZWQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHRzQWx3YXlzVHJ5VHlwZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXcml0ZSBlc2xpbnQgY29uZmlndXJhdGlvbiBhcyBZQU1MIGluc3RlYWQgb2YgSlNPTlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgeWFtbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXNsaW50Q29tbWFuZE9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBmaXggZXNsaW50IGlzc3VlcyB3aGVuIHJ1bm5pbmcgdGhlIGVzbGludCB0YXNrXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGZpeD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV4dHJhIGZsYWcgYXJndW1lbnRzIHRvIHBhc3MgdG8gZXNsaW50IGNvbW1hbmRcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhQXJncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIGVzbGludCBydWxlcyBvdmVycmlkZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVzbGludE92ZXJyaWRlIHtcbiAgLyoqXG4gICAqIEZpbGVzIG9yIGZpbGUgcGF0dGVybnMgb24gd2hpY2ggdG8gYXBwbHkgdGhlIG92ZXJyaWRlXG4gICAqL1xuICByZWFkb25seSBmaWxlczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdHRlcm4ocykgdG8gZXhjbHVkZSBmcm9tIHRoaXMgb3ZlcnJpZGUuXG4gICAqIElmIGEgZmlsZSBtYXRjaGVzIGFueSBvZiB0aGUgZXhjbHVkZWQgcGF0dGVybnMsIHRoZSBjb25maWd1cmF0aW9uIHdvbuKAmXQgYXBwbHkuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZEZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVycmlkZGVuIHJ1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IHsgW3J1bGU6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBUaGUgb3ZlcnJpZGRlbiBwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQ29uZmlnKHMpIHRvIGV4dGVuZCBpbiB0aGlzIG92ZXJyaWRlXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIGBwbHVnaW5zYCBvdmVycmlkZVxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgZXNsaW50IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBFc2xpbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIEVzbGludCBjb21wb25lbnQgb2YgYSBwcm9qZWN0IG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBub25lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogRXNsaW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0VzbGludCA9IChjOiBDb21wb25lbnQpOiBjIGlzIEVzbGludCA9PiBjIGluc3RhbmNlb2YgRXNsaW50O1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0VzbGludCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgY29uZmlnIGZpbGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWxlOiBPYmplY3RGaWxlO1xuXG4gIC8qKlxuICAgKiBlc2xpbnQgcnVsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcnVsZXM6IHsgW3J1bGU6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBlc2xpbnQgb3ZlcnJpZGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG92ZXJyaWRlczogRXNsaW50T3ZlcnJpZGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBlc2xpbnQgdGFzay5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlc2xpbnRUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBEaXJlY3QgYWNjZXNzIHRvIHRoZSBlc2xpbnQgY29uZmlndXJhdGlvbiAoZXNjYXBlIGhhdGNoKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogYW55O1xuXG4gIC8qKlxuICAgKiBGaWxlIHBhdHRlcm5zIHRoYXQgc2hvdWxkIG5vdCBiZSBsaW50ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZ25vcmVQYXR0ZXJuczogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSBfZm9ybWF0dGluZ1J1bGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9hbGxvd0RldkRlcHM6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbHVnaW5zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4dGVuZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZUV4dGVuc2lvbnM6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9mbGFnQXJnczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpbnRQYXR0ZXJuczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZVByb2plY3Q6IE5vZGVQcm9qZWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHNvcnRFeHRlbmRzOiBJQ29tcGFyZVN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogRXNsaW50T3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5ub2RlUHJvamVjdCA9IHByb2plY3Q7XG5cbiAgICBwcm9qZWN0LmFkZERldkRlcHMoXG4gICAgICBcImVzbGludEBeOVwiLFxuICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbkBeOFwiLFxuICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyQF44XCIsXG4gICAgICBcImVzbGludC1pbXBvcnQtcmVzb2x2ZXItdHlwZXNjcmlwdFwiLFxuICAgICAgXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiLFxuICAgICk7XG5cbiAgICBpZiAob3B0aW9ucy5hbGlhc01hcCkge1xuICAgICAgcHJvamVjdC5hZGREZXZEZXBzKFwiZXNsaW50LWltcG9ydC1yZXNvbHZlci1hbGlhc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXZkaXJzID0gb3B0aW9ucy5kZXZkaXJzID8/IFtdO1xuXG4gICAgdGhpcy5fbGludFBhdHRlcm5zID0gbmV3IFNldChbLi4ub3B0aW9ucy5kaXJzLCAuLi5kZXZkaXJzXSk7XG4gICAgdGhpcy5fZmlsZUV4dGVuc2lvbnMgPSBuZXcgU2V0KG9wdGlvbnMuZmlsZUV4dGVuc2lvbnMgPz8gW1wiLnRzXCJdKTtcblxuICAgIHRoaXMuX2FsbG93RGV2RGVwcyA9IG5ldyBTZXQoKGRldmRpcnMgPz8gW10pLm1hcCgoZGlyKSA9PiBgKiovJHtkaXJ9LyoqYCkpO1xuXG4gICAgY29uc3QgY29tbWFuZE9wdGlvbnMgPSBvcHRpb25zLmNvbW1hbmRPcHRpb25zID8/IHt9O1xuICAgIGNvbnN0IHsgZml4ID0gdHJ1ZSwgZXh0cmFBcmdzOiBleHRyYUZsYWdBcmdzID0gW10gfSA9IGNvbW1hbmRPcHRpb25zO1xuICAgIHRoaXMuX2ZsYWdBcmdzID0gbmV3IFNldChleHRyYUZsYWdBcmdzKTtcbiAgICBpZiAoZml4KSB7XG4gICAgICB0aGlzLl9mbGFnQXJncy5hZGQoXCItLWZpeFwiKTtcbiAgICB9XG4gICAgdGhpcy5fZmxhZ0FyZ3MuYWRkKFwiLS1uby1lcnJvci1vbi11bm1hdGNoZWQtcGF0dGVyblwiKTtcblxuICAgIHRoaXMuc29ydEV4dGVuZHMgPSBvcHRpb25zLnNvcnRFeHRlbmRzID8/IG5ldyBFeHRlbmRzRGVmYXVsdE9yZGVyKCk7XG5cbiAgICB0aGlzLmVzbGludFRhc2sgPSBwcm9qZWN0LmFkZFRhc2soXCJlc2xpbnRcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiUnVucyBlc2xpbnQgYWdhaW5zdCB0aGUgY29kZWJhc2VcIixcbiAgICAgIGVudjoge1xuICAgICAgICBFU0xJTlRfVVNFX0ZMQVRfQ09ORklHOiBcImZhbHNlXCIsXG4gICAgICAgIE5PREVfTk9fV0FSTklOR1M6IFwiMVwiLCAvLyBTdXBwcmVzcyBlc2xpbnQgd2FybmluZyBhYm91dCBsZWdhY3kgY29uZmlnIGZvcm1hdCwgYXMgaXQganVzdCBjb25mdXNlcyB1c2Vycy4gVGhpcyB3aWxsIHN1cHByZXNzIGFsbCBub2RlIHdhcm5pbmdzLCBidXQgaW4gcHJhY3RpY2UgdXNlcnMgY2Fubm90IGFjdGlvbiB3YXJuaW5ncyBmcm9tIGVzbGludCBhbnl3YXkuXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVGFzaygpO1xuXG4gICAgcHJvamVjdC50ZXN0VGFzay5zcGF3bih0aGlzLmVzbGludFRhc2spO1xuXG4gICAgLy8gZXhjbHVkZSBzb21lIGZpbGVzXG4gICAgcHJvamVjdC5ucG1pZ25vcmU/LmV4Y2x1ZGUoXCIvLmVzbGludHJjLmpzb25cIik7XG5cbiAgICB0aGlzLl9mb3JtYXR0aW5nUnVsZXMgPSB7XG4gICAgICAvLyBTdHlsZVxuICAgICAgXCJAc3R5bGlzdGljL2luZGVudFwiOiBbXCJlcnJvclwiLCAyXSxcbiAgICAgIFwiQHN0eWxpc3RpYy9xdW90ZXNcIjogW1wiZXJyb3JcIiwgXCJzaW5nbGVcIiwgeyBhdm9pZEVzY2FwZTogdHJ1ZSB9XSxcbiAgICAgIFwiQHN0eWxpc3RpYy9jb21tYS1kYW5nbGVcIjogW1wiZXJyb3JcIiwgXCJhbHdheXMtbXVsdGlsaW5lXCJdLCAvLyBlbnN1cmVzIGNsZWFuIGRpZmZzLCBzZWUgaHR0cHM6Ly9tZWRpdW0uY29tL0BuaWtncmFmL3doeS15b3Utc2hvdWxkLWVuZm9yY2UtZGFuZ2xpbmctY29tbWFzLWZvci1tdWx0aWxpbmUtc3RhdGVtZW50cy1kMDM0Yzk4ZTM2ZjhcbiAgICAgIFwiQHN0eWxpc3RpYy9jb21tYS1zcGFjaW5nXCI6IFtcImVycm9yXCIsIHsgYmVmb3JlOiBmYWxzZSwgYWZ0ZXI6IHRydWUgfV0sIC8vIHNwYWNlIGFmdGVyLCBubyBzcGFjZSBiZWZvcmVcbiAgICAgIFwiQHN0eWxpc3RpYy9uby1tdWx0aS1zcGFjZXNcIjogW1wiZXJyb3JcIiwgeyBpZ25vcmVFT0xDb21tZW50czogZmFsc2UgfV0sIC8vIG5vIG11bHRpIHNwYWNlc1xuICAgICAgXCJAc3R5bGlzdGljL2FycmF5LWJyYWNrZXQtc3BhY2luZ1wiOiBbXCJlcnJvclwiLCBcIm5ldmVyXCJdLCAvLyBbMSwgMiwgM11cbiAgICAgIFwiQHN0eWxpc3RpYy9hcnJheS1icmFja2V0LW5ld2xpbmVcIjogW1wiZXJyb3JcIiwgXCJjb25zaXN0ZW50XCJdLCAvLyBlbmZvcmNlIGNvbnNpc3RlbnQgbGluZSBicmVha3MgYmV0d2VlbiBicmFja2V0c1xuICAgICAgXCJAc3R5bGlzdGljL29iamVjdC1jdXJseS1zcGFjaW5nXCI6IFtcImVycm9yXCIsIFwiYWx3YXlzXCJdLCAvLyB7IGtleTogJ3ZhbHVlJyB9XG4gICAgICBcIkBzdHlsaXN0aWMvb2JqZWN0LWN1cmx5LW5ld2xpbmVcIjogW1xuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIHsgbXVsdGlsaW5lOiB0cnVlLCBjb25zaXN0ZW50OiB0cnVlIH0sXG4gICAgICBdLCAvLyBlbmZvcmNlIGNvbnNpc3RlbnQgbGluZSBicmVha3MgYmV0d2VlbiBicmFjZXNcbiAgICAgIFwiQHN0eWxpc3RpYy9vYmplY3QtcHJvcGVydHktbmV3bGluZVwiOiBbXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgeyBhbGxvd0FsbFByb3BlcnRpZXNPblNhbWVMaW5lOiB0cnVlIH0sXG4gICAgICBdLCAvLyBlbmZvcmNlIFwic2FtZSBsaW5lXCIgb3IgXCJtdWx0aXBsZSBsaW5lXCIgb24gb2JqZWN0IHByb3BlcnRpZXNcbiAgICAgIFwiQHN0eWxpc3RpYy9rZXl3b3JkLXNwYWNpbmdcIjogW1wiZXJyb3JcIl0sIC8vIHJlcXVpcmUgYSBzcGFjZSBiZWZvcmUgJiBhZnRlciBrZXl3b3Jkc1xuICAgICAgXCJAc3R5bGlzdGljL2JyYWNlLXN0eWxlXCI6IFtcImVycm9yXCIsIFwiMXRic1wiLCB7IGFsbG93U2luZ2xlTGluZTogdHJ1ZSB9XSwgLy8gZW5mb3JjZSBvbmUgdHJ1ZSBicmFjZSBzdHlsZVxuICAgICAgXCJAc3R5bGlzdGljL3NwYWNlLWJlZm9yZS1ibG9ja3NcIjogW1wiZXJyb3JcIl0sIC8vIHJlcXVpcmUgc3BhY2UgYmVmb3JlIGJsb2Nrc1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc2xpbnQvaXNzdWVzLzgwNzJcbiAgICAgIFwiQHN0eWxpc3RpYy9tZW1iZXItZGVsaW1pdGVyLXN0eWxlXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBSZXF1aXJlIHNlbWljb2xvbnNcbiAgICAgIFwiQHN0eWxpc3RpYy9zZW1pXCI6IFtcImVycm9yXCIsIFwiYWx3YXlzXCJdLFxuXG4gICAgICAvLyBNYXggbGluZSBsZW5ndGhzXG4gICAgICBcIkBzdHlsaXN0aWMvbWF4LWxlblwiOiBbXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAge1xuICAgICAgICAgIGNvZGU6IDE1MCxcbiAgICAgICAgICBpZ25vcmVVcmxzOiB0cnVlLCAvLyBNb3N0IGNvbW1vbiByZWFzb24gdG8gZGlzYWJsZSBpdFxuICAgICAgICAgIGlnbm9yZVN0cmluZ3M6IHRydWUsIC8vIFRoZXNlIGFyZSBub3QgZmFudGFzdGljIGJ1dCBuZWNlc3NhcnkgZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgICAgaWdub3JlVGVtcGxhdGVMaXRlcmFsczogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVDb21tZW50czogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVSZWdFeHBMaXRlcmFsczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG5cbiAgICAgIC8vIERvbid0IHVubmVjZXNzYXJpbHkgcXVvdGUgcHJvcGVydGllc1xuICAgICAgXCJAc3R5bGlzdGljL3F1b3RlLXByb3BzXCI6IFtcImVycm9yXCIsIFwiY29uc2lzdGVudC1hcy1uZWVkZWRcIl0sXG5cbiAgICAgIC8vIFJlcXVpcmVkIHNwYWNpbmcgaW4gcHJvcGVydHkgZGVjbGFyYXRpb25zIChjb3BpZWQgZnJvbSBUU0xpbnQsIGRlZmF1bHRzIGFyZSBnb29kKVxuICAgICAgXCJAc3R5bGlzdGljL2tleS1zcGFjaW5nXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBObyBtdWx0aXBsZSBlbXB0eSBsaW5lc1xuICAgICAgXCJAc3R5bGlzdGljL25vLW11bHRpcGxlLWVtcHR5LWxpbmVzXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBVc2VsZXNzIGRpZmYgcmVzdWx0c1xuICAgICAgXCJAc3R5bGlzdGljL25vLXRyYWlsaW5nLXNwYWNlc1wiOiBbXCJlcnJvclwiXSxcbiAgICB9O1xuXG4gICAgdGhpcy5ydWxlcyA9IHtcbiAgICAgIC8vIHJlcXVpcmUgY3VybHkgYnJhY2VzIGZvciBtdWx0aWxpbmUgY29udHJvbCBzdGF0ZW1lbnRzXG4gICAgICBjdXJseTogW1wiZXJyb3JcIiwgXCJtdWx0aS1saW5lXCIsIFwiY29uc2lzdGVudFwiXSxcblxuICAgICAgLy8gUmVxdWlyZSB1c2Ugb2YgdGhlIGBpbXBvcnQgeyBmb28gfSBmcm9tICdiYXInO2AgZm9ybSBpbnN0ZWFkIG9mIGBpbXBvcnQgZm9vID0gcmVxdWlyZSgnYmFyJyk7YFxuICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXCI6IFwiZXJyb3JcIixcblxuICAgICAgLy8gUmVxdWlyZSBhbGwgaW1wb3J0ZWQgZGVwZW5kZW5jaWVzIGFyZSBhY3R1YWxseSBkZWNsYXJlZCBpbiBwYWNrYWdlLmpzb25cbiAgICAgIFwiaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXCI6IFtcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gT25seSBhbGxvdyBpbXBvcnRpbmcgZGV2RGVwZW5kZW5jaWVzIGZyb20gXCJkZXZkaXJzXCIuXG4gICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiAoKSA9PiB0aGlzLnJlbmRlckRldkRlcHNBbGxvd0xpc3QoKSxcbiAgICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczogZmFsc2UsIC8vIERpc2FsbG93IGltcG9ydGluZyBvcHRpb25hbCBkZXBlbmRlbmNpZXMgKHRob3NlIHNob3VsZG4ndCBiZSBpbiB1c2UgaW4gdGhlIHByb2plY3QpXG4gICAgICAgICAgcGVlckRlcGVuZGVuY2llczogdHJ1ZSwgLy8gQWxsb3cgaW1wb3J0aW5nIHBlZXIgZGVwZW5kZW5jaWVzICh0aGF0IGFyZW4ndCBhbHNvIGRpcmVjdCBkZXBlbmRlbmNpZXMpXG4gICAgICAgIH0sXG4gICAgICBdLFxuXG4gICAgICAvLyBSZXF1aXJlIGFsbCBpbXBvcnRlZCBsaWJyYXJpZXMgYWN0dWFsbHkgcmVzb2x2ZSAoISFyZXF1aXJlZCBmb3IgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzIHRvIHdvcmshISlcbiAgICAgIFwiaW1wb3J0L25vLXVucmVzb2x2ZWRcIjogW1wiZXJyb3JcIl0sXG5cbiAgICAgIC8vIFJlcXVpcmUgYW4gb3JkZXJpbmcgb24gYWxsIGltcG9ydHNcbiAgICAgIFwiaW1wb3J0L29yZGVyXCI6IFtcbiAgICAgICAgXCJ3YXJuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cHM6IFtcImJ1aWx0aW5cIiwgXCJleHRlcm5hbFwiXSxcbiAgICAgICAgICBhbHBoYWJldGl6ZTogeyBvcmRlcjogXCJhc2NcIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuXG4gICAgICAvLyBDYW5ub3QgaW1wb3J0IGZyb20gdGhlIHNhbWUgbW9kdWxlIHR3aWNlXG4gICAgICBcImltcG9ydC9uby1kdXBsaWNhdGVzXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBDYW5ub3Qgc2hhZG93IG5hbWVzXG4gICAgICBcIm5vLXNoYWRvd1wiOiBbXCJvZmZcIl0sXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcIjogXCJlcnJvclwiLFxuICAgICAgLy8gT25lIG9mIHRoZSBlYXNpZXN0IG1pc3Rha2VzIHRvIG1ha2VcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXCI6IFwiZXJyb3JcIixcblxuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaW5zaWRlIHRyeS9jYXRjaCBibG9ja3MsIHByb21pc2VzIGFyZSAncmV0dXJuIGF3YWl0J2VkXG4gICAgICAvLyAobXVzdCBkaXNhYmxlIHRoZSBiYXNlIHJ1bGUgYXMgaXQgY2FuIHJlcG9ydCBpbmNvcnJlY3QgZXJyb3JzKVxuICAgICAgXCJuby1yZXR1cm4tYXdhaXRcIjogW1wib2ZmXCJdLFxuICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcmV0dXJuLWF3YWl0XCI6IFwiZXJyb3JcIixcblxuICAgICAgLy8gTXVzdCB1c2UgZm9vLmJhciBpbnN0ZWFkIG9mIGZvb1snYmFyJ10gaWYgcG9zc2libGVcbiAgICAgIFwiZG90LW5vdGF0aW9uXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBBcmUgeW91IHN1cmUgfCBpcyBub3QgYSB0eXBvIGZvciB8fCA/XG4gICAgICBcIm5vLWJpdHdpc2VcIjogW1wiZXJyb3JcIl0sXG5cbiAgICAgIC8vIE1lbWJlciBvcmRlcmluZ1xuICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXCI6IFtcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGVmYXVsdDogW1xuICAgICAgICAgICAgXCJwdWJsaWMtc3RhdGljLWZpZWxkXCIsXG4gICAgICAgICAgICBcInB1YmxpYy1zdGF0aWMtbWV0aG9kXCIsXG4gICAgICAgICAgICBcInByb3RlY3RlZC1zdGF0aWMtZmllbGRcIixcbiAgICAgICAgICAgIFwicHJvdGVjdGVkLXN0YXRpYy1tZXRob2RcIixcbiAgICAgICAgICAgIFwicHJpdmF0ZS1zdGF0aWMtZmllbGRcIixcbiAgICAgICAgICAgIFwicHJpdmF0ZS1zdGF0aWMtbWV0aG9kXCIsXG5cbiAgICAgICAgICAgIFwiZmllbGRcIixcblxuICAgICAgICAgICAgLy8gQ29uc3RydWN0b3JzXG4gICAgICAgICAgICBcImNvbnN0cnVjdG9yXCIsIC8vID0gW1wicHVibGljLWNvbnN0cnVjdG9yXCIsIFwicHJvdGVjdGVkLWNvbnN0cnVjdG9yXCIsIFwicHJpdmF0ZS1jb25zdHJ1Y3RvclwiXVxuXG4gICAgICAgICAgICAvLyBNZXRob2RzXG4gICAgICAgICAgICBcIm1ldGhvZFwiLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICB0aGlzLmlnbm9yZVBhdHRlcm5zID0gb3B0aW9ucy5pZ25vcmVQYXR0ZXJucyA/PyBbXG4gICAgICBcIiouanNcIixcbiAgICAgIFwiKi5kLnRzXCIsXG4gICAgICBcIm5vZGVfbW9kdWxlcy9cIixcbiAgICAgIFwiKi5nZW5lcmF0ZWQudHNcIixcbiAgICAgIFwiY292ZXJhZ2VcIixcbiAgICBdO1xuXG4gICAgY29uc3QgdHNjb25maWcgPSBvcHRpb25zLnRzY29uZmlnUGF0aCA/PyBcIi4vdHNjb25maWcuanNvblwiO1xuXG4gICAgdGhpcy5hZGRQbHVnaW5zKFwiQHR5cGVzY3JpcHQtZXNsaW50XCIpO1xuICAgIHRoaXMuYWRkUGx1Z2lucyhcImltcG9ydFwiKTtcbiAgICB0aGlzLmFkZEV4dGVuZHMoXCJwbHVnaW46aW1wb3J0L3R5cGVzY3JpcHRcIik7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGVudjoge1xuICAgICAgICBqZXN0OiB0cnVlLFxuICAgICAgICBub2RlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHJvb3Q6IHRydWUsXG4gICAgICBwbHVnaW5zOiB0aGlzLl9wbHVnaW5zLFxuICAgICAgcGFyc2VyOiBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIixcbiAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgZWNtYVZlcnNpb246IDIwMTgsXG4gICAgICAgIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsXG4gICAgICAgIHByb2plY3Q6IHRzY29uZmlnLFxuICAgICAgfSxcbiAgICAgIGV4dGVuZHM6ICgpID0+XG4gICAgICAgIEFycmF5LmZyb20odGhpcy5fZXh0ZW5kcykuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICB0aGlzLnNvcnRFeHRlbmRzLmNvbXBhcmUoYSwgYiksXG4gICAgICAgICksXG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICBcImltcG9ydC9wYXJzZXJzXCI6IHtcbiAgICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIjogW1wiLnRzXCIsIFwiLnRzeFwiXSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJpbXBvcnQvcmVzb2x2ZXJcIjoge1xuICAgICAgICAgIC4uLihvcHRpb25zLmFsaWFzTWFwICYmIHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgIG1hcDogT2JqZWN0LmVudHJpZXMob3B0aW9ucy5hbGlhc01hcCkubWFwKChbaywgdl0pID0+IFtrLCB2XSksXG4gICAgICAgICAgICAgIGV4dGVuc2lvbnM6IG9wdGlvbnMuYWxpYXNFeHRlbnNpb25zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub2RlOiB7fSxcbiAgICAgICAgICB0eXBlc2NyaXB0OiB7XG4gICAgICAgICAgICBwcm9qZWN0OiB0c2NvbmZpZyxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRzQWx3YXlzVHJ5VHlwZXMgIT09IGZhbHNlICYmIHsgYWx3YXlzVHJ5VHlwZXM6IHRydWUgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBpZ25vcmVQYXR0ZXJuczogdGhpcy5pZ25vcmVQYXR0ZXJucyxcbiAgICAgIHJ1bGVzOiAoKSA9PiAoeyAuLi50aGlzLl9mb3JtYXR0aW5nUnVsZXMsIC4uLnRoaXMucnVsZXMgfSksXG4gICAgICBvdmVycmlkZXM6IHRoaXMub3ZlcnJpZGVzLFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy55YW1sKSB7XG4gICAgICB0aGlzLmZpbGUgPSBuZXcgWWFtbEZpbGUocHJvamVjdCwgXCIuZXNsaW50cmMueW1sXCIsIHtcbiAgICAgICAgb2JqOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsZSA9IG5ldyBKc29uRmlsZShwcm9qZWN0LCBcIi5lc2xpbnRyYy5qc29uXCIsIHtcbiAgICAgICAgb2JqOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgLy8gaHR0cHM6Ly9lc2xpbnQub3JnL2RvY3MvbGF0ZXN0L3VzZXItZ3VpZGUvY29uZmlndXJpbmcvY29uZmlndXJhdGlvbi1maWxlcyNjb21tZW50cy1pbi1jb25maWd1cmF0aW9uLWZpbGVzXG4gICAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgICAgYWxsb3dDb21tZW50czogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIGVuYWJsZWQgcHJldHRpZXIgZXhwbGljaXRseSBfb3JfIGlmIHRoZSBwcm9qZWN0IGhhcyBhXG4gICAgLy8gYFByZXR0aWVyYCBjb21wb25lbnQsIHdlIHNoYWxsIHR3ZWFrIG91ciBjb25maWd1cmF0aW9uIGFjY29yZGluZ2x5LlxuICAgIGlmIChvcHRpb25zLnByZXR0aWVyIHx8IFByZXR0aWVyLm9mKHByb2plY3QpKSB7XG4gICAgICB0aGlzLmVuYWJsZVByZXR0aWVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm9kZVByb2plY3QuYWRkRGV2RGVwcyhcIkBzdHlsaXN0aWMvZXNsaW50LXBsdWdpbkBeMlwiKTtcbiAgICAgIHRoaXMuYWRkUGx1Z2lucyhcIkBzdHlsaXN0aWNcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gaW1tdXRhYmxlIGNvcHkgb2YgdGhlIGxpbnRQYXR0ZXJucyBiZWluZyB1c2VkIGJ5IHRoaXMgZXNsaW50IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxpbnRQYXR0ZXJucygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuX2xpbnRQYXR0ZXJucyAmJiB0aGlzLl9saW50UGF0dGVybnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybiBbLi4udGhpcy5fbGludFBhdHRlcm5zXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZmlsZSwgZ2xvYiBwYXR0ZXJuIG9yIGRpcmVjdG9yeSB3aXRoIHNvdXJjZSBmaWxlcyB0byBsaW50IChlLmcuIFsgXCJzcmNcIiBdKVxuICAgKi9cbiAgcHVibGljIGFkZExpbnRQYXR0ZXJuKHBhdHRlcm46IHN0cmluZykge1xuICAgIHRoaXMuX2xpbnRQYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgdGhpcy51cGRhdGVUYXNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGVzbGludCBydWxlLlxuICAgKi9cbiAgcHVibGljIGFkZFJ1bGVzKHJ1bGVzOiB7IFtydWxlOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHJ1bGVzKSkge1xuICAgICAgdGhpcy5ydWxlc1trXSA9IHY7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXNsaW50IHBsdWdpblxuICAgKiBAcGFyYW0gcGx1Z2lucyBUaGUgbmFtZXMgb2YgcGx1Z2lucyB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRQbHVnaW5zKC4uLnBsdWdpbnM6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykge1xuICAgICAgdGhpcy5fcGx1Z2lucy5hZGQocGx1Z2luKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGVzbGludCBvdmVycmlkZS5cbiAgICovXG4gIHB1YmxpYyBhZGRPdmVycmlkZShvdmVycmlkZTogRXNsaW50T3ZlcnJpZGUpIHtcbiAgICB0aGlzLm92ZXJyaWRlcy5wdXNoKG92ZXJyaWRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEbyBub3QgbGludCB0aGVzZSBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyBhZGRJZ25vcmVQYXR0ZXJuKHBhdHRlcm46IHN0cmluZykge1xuICAgIHRoaXMuaWdub3JlUGF0dGVybnMucHVzaChwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGBleHRlbmRzYCBpdGVtIHRvIHRoZSBlc2xpbnQgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIGV4dGVuZExpc3QgVGhlIGxpc3Qgb2YgXCJleHRlbmRzXCIgdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZEV4dGVuZHMoLi4uZXh0ZW5kTGlzdDogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IGV4dGVuZCBvZiBleHRlbmRMaXN0KSB7XG4gICAgICB0aGlzLl9leHRlbmRzLmFkZChleHRlbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBnbG9iIGZpbGUgcGF0dGVybiB3aGljaCBhbGxvd3MgaW1wb3J0aW5nIGRldiBkZXBlbmRlbmNpZXMuXG4gICAqIEBwYXJhbSBwYXR0ZXJuIGdsb2IgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhbGxvd0RldkRlcHMocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5fYWxsb3dEZXZEZXBzLmFkZChwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHByZXR0aWVyIGZvciBjb2RlIGZvcm1hdHRpbmcuXG4gICAqL1xuICBwcml2YXRlIGVuYWJsZVByZXR0aWVyKCkge1xuICAgIHRoaXMubm9kZVByb2plY3QuYWRkRGV2RGVwcyhcbiAgICAgIFwicHJldHRpZXJcIixcbiAgICAgIFwiZXNsaW50LXBsdWdpbi1wcmV0dGllclwiLFxuICAgICAgXCJlc2xpbnQtY29uZmlnLXByZXR0aWVyXCIsXG4gICAgKTtcblxuICAgIHRoaXMuX2Zvcm1hdHRpbmdSdWxlcyA9IHt9O1xuXG4gICAgdGhpcy5hZGRFeHRlbmRzKFwicGx1Z2luOnByZXR0aWVyL3JlY29tbWVuZGVkXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJEZXZEZXBzQWxsb3dMaXN0KCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2FsbG93RGV2RGVwcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB0YXNrIHdpdGggdGhlIGN1cnJlbnQgbGlzdCBvZiBsaW50IHBhdHRlcm5zIGFuZCBmaWxlIGV4dGVuc2lvbnNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVGFzaygpIHtcbiAgICBjb25zdCB0YXNrRXhlY0NvbW1hbmQgPSBcImVzbGludFwiO1xuICAgIGNvbnN0IGFyZ3NTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBpZiAodGhpcy5fZmlsZUV4dGVuc2lvbnMuc2l6ZSA+IDApIHtcbiAgICAgIGFyZ3NTZXQuYWRkKGAtLWV4dCAke1suLi50aGlzLl9maWxlRXh0ZW5zaW9uc10uam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGFyZ3NTZXQuYWRkKGAke1suLi50aGlzLl9mbGFnQXJnc10uam9pbihcIiBcIil9YCk7XG4gICAgYXJnc1NldC5hZGQoXCIkQFwiKTsgLy8gRXh0ZXJuYWwgYXJncyBnbyBoZXJlXG5cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5fbGludFBhdHRlcm5zKSB7XG4gICAgICBhcmdzU2V0LmFkZChwYXR0ZXJuKTtcbiAgICB9XG5cbiAgICB0aGlzLmVzbGludFRhc2sucmVzZXQoXG4gICAgICBbdGFza0V4ZWNDb21tYW5kLCAuLi5hcmdzU2V0XS5qb2luKFwiIFwiKSxcbiAgICAgIHRoaXMuYnVpbGRUYXNrU3RlcE9wdGlvbnModGFza0V4ZWNDb21tYW5kKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNhc2Ugb2YgZXh0ZXJuYWwgZWRpdGluZyBvZiB0aGUgZXNsaW50IHRhc2sgc3RlcCwgd2UgcHJlc2VydmUgdGhvc2UgY2hhbmdlcy5cbiAgICogT3RoZXJ3aXNlLCB3ZSByZXR1cm4gdGhlIGRlZmF1bHQgdGFzayBzdGVwIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrRXhlY0NvbW1hbmQgVGhlIGNvbW1hbmQgdGhhdCB0aGUgRVNMaW50IHRhc2tzIGV4ZWN1dGVzXG4gICAqIEByZXR1cm5zIEVpdGhlciB0aGUgZXh0ZXJuYWxseSBlZGl0ZWQsIG9yIHRoZSBkZWZhdWx0IHRhc2sgc3RlcCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVGFza1N0ZXBPcHRpb25zKHRhc2tFeGVjQ29tbWFuZDogc3RyaW5nKTogVGFza1N0ZXBPcHRpb25zIHtcbiAgICBjb25zdCBjdXJyZW50RXNsaW50VGFza1N0ZXAgPSB0aGlzLmVzbGludFRhc2s/LnN0ZXBzPy5maW5kKChzdGVwKSA9PlxuICAgICAgc3RlcD8uZXhlYz8uc3RhcnRzV2l0aD8uKHRhc2tFeGVjQ29tbWFuZCksXG4gICAgKTtcblxuICAgIGlmIChjdXJyZW50RXNsaW50VGFza1N0ZXApIHtcbiAgICAgIGNvbnN0IHsgYXJncywgY29uZGl0aW9uLCBjd2QsIGVudiwgbmFtZSwgcmVjZWl2ZUFyZ3MgfSA9XG4gICAgICAgIGN1cnJlbnRFc2xpbnRUYXNrU3RlcDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgY3dkLFxuICAgICAgICBlbnYsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJlY2VpdmVBcmdzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgY29tcGFyZSBwcm90b2NvbCB0cCBzb3J0IHRoZSBleHRlbmRzIGFycmF5IGluIGVzbGludCBjb25maWcgdXNpbmcga25vd24gRVNMaW50IGJlc3QgcHJhY3RpY2VzLlxuICpcbiAqIFBsYWNlcyBcInByZXR0aWVyXCIgcGx1Z2lucyBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheVxuICovXG5jbGFzcyBFeHRlbmRzRGVmYXVsdE9yZGVyIGltcGxlbWVudHMgSUNvbXBhcmVTdHJpbmcge1xuICAvLyBUaGlzIGlzIHRoZSBvcmRlciB0aGF0IEVTTGludCBiZXN0IHByYWN0aWNlcyBzdWdnZXN0XG4gIHByaXZhdGUgc3RhdGljIE9SREVSID0gW1wicGx1Z2luOnByZXR0aWVyL3JlY29tbWVuZGVkXCIsIFwicHJldHRpZXJcIl07XG5cbiAgcHVibGljIGNvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICBFeHRlbmRzRGVmYXVsdE9yZGVyLk9SREVSLmluZGV4T2YoYSkgLVxuICAgICAgRXh0ZW5kc0RlZmF1bHRPcmRlci5PUkRFUi5pbmRleE9mKGIpXG4gICAgKTtcbiAgfVxufVxuIl19
|
package/lib/javascript/index.js
CHANGED
|
@@ -10,9 +10,31 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
13
18
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
20
|
};
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
16
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
39
|
exports.biome_config = void 0;
|
|
18
40
|
__exportStar(require("./bundler"), exports);
|
|
@@ -28,5 +50,5 @@ __exportStar(require("./typescript-config"), exports);
|
|
|
28
50
|
__exportStar(require("./upgrade-dependencies"), exports);
|
|
29
51
|
__exportStar(require("./yarnrc"), exports);
|
|
30
52
|
__exportStar(require("./biome/biome"), exports);
|
|
31
|
-
exports.biome_config = require("./biome/biome-config");
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
exports.biome_config = __importStar(require("./biome/biome-config"));
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEI7QUFDMUIsMkNBQXlCO0FBQ3pCLHlDQUF1QjtBQUN2QixvREFBa0M7QUFDbEMsaURBQStCO0FBQy9CLGlEQUErQjtBQUMvQiwrQ0FBNkI7QUFDN0IsNkNBQTJCO0FBQzNCLDZDQUEyQjtBQUMzQixzREFBb0M7QUFDcEMseURBQXVDO0FBQ3ZDLDJDQUF5QjtBQUN6QixnREFBOEI7QUFDOUIscUVBQXFEIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYnVuZGxlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXNsaW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9qZXN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWNlbnNlLWNoZWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25vZGUtcGFja2FnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbm9kZS1wcm9qZWN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ucG0tY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcmV0dGllclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvamVucmNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzY3JpcHQtY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91cGdyYWRlLWRlcGVuZGVuY2llc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4veWFybnJjXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9iaW9tZS9iaW9tZVwiO1xuZXhwb3J0ICogYXMgYmlvbWVfY29uZmlnIGZyb20gXCIuL2Jpb21lL2Jpb21lLWNvbmZpZ1wiO1xuIl19
|