@mnaoumov/typescript-dev-toolkit 4.0.0 → 5.1.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/bundlers/esbuild-impl/svelte-preprocessor/package.json +6 -0
- package/dist/lib/cjs/bulk-concurrency.cjs +49 -0
- package/dist/lib/cjs/bulk-concurrency.d.cts +14 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +3 -3
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.cjs +152 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.d.cts +95 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +4 -3
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
- package/dist/lib/cjs/docs-site/docs-links.cjs +3 -2
- package/dist/lib/cjs/docs-site/og-images.cjs +3 -2
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/library-build.cjs +8 -8
- package/dist/lib/cjs/linters/eslint-config.cjs +7 -5
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +5 -1
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +5 -1
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +7 -1
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +2 -0
- package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.cjs +144 -0
- package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.d.cts +11 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +5 -5
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +80 -3
- package/dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.cjs +130 -0
- package/dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.d.cts +6 -0
- package/dist/lib/cjs/linters/markdownlint.cjs +8 -2
- package/dist/lib/cjs/linters/over-exposure.cjs +14 -3
- package/dist/lib/cjs/linters/over-exposure.d.cts +3 -1
- package/dist/lib/cjs/nano-staged-config.cjs +24 -3
- package/dist/lib/cjs/nano-staged-config.d.cts +4 -0
- package/dist/lib/cjs/released-issues.cjs +4 -4
- package/dist/lib/cjs/test-runners/auto.cjs +1 -1
- package/dist/lib/cjs/test-runners/auto.d.cts +5 -0
- package/dist/lib/cjs/test-runners/forwarded-arguments.cjs +50 -0
- package/dist/lib/cjs/test-runners/forwarded-arguments.d.cts +49 -0
- package/dist/lib/cjs/test-runners/index.cjs +4 -1
- package/dist/lib/cjs/test-runners/index.d.cts +1 -0
- package/dist/lib/cjs/test-runners/jest.cjs +16 -3
- package/dist/lib/cjs/test-runners/jest.d.cts +5 -0
- package/dist/lib/cjs/test-runners/vitest.cjs +111 -5
- package/dist/lib/cjs/test-runners/vitest.d.cts +5 -0
- package/dist/lib/cjs/upstream-sync.cjs +3 -3
- package/dist/lib/esm/bulk-concurrency.d.mts +14 -0
- package/dist/lib/esm/bulk-concurrency.mjs +15 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +3 -3
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.d.mts +95 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.mjs +126 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +4 -3
- package/dist/lib/esm/docs-site/docs-links.mjs +3 -2
- package/dist/lib/esm/docs-site/og-images.mjs +3 -2
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/library-build.mjs +8 -8
- package/dist/lib/esm/linters/eslint-config.mjs +7 -5
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +2 -0
- package/dist/lib/esm/linters/eslint-rules/index.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.d.mts +11 -0
- package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.mjs +120 -0
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +5 -5
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +80 -3
- package/dist/lib/esm/linters/eslint-rules/readonly-member-arrays.d.mts +6 -0
- package/dist/lib/esm/linters/eslint-rules/readonly-member-arrays.mjs +106 -0
- package/dist/lib/esm/linters/markdownlint.mjs +8 -2
- package/dist/lib/esm/linters/over-exposure.d.mts +3 -1
- package/dist/lib/esm/linters/over-exposure.mjs +16 -3
- package/dist/lib/esm/nano-staged-config.d.mts +4 -0
- package/dist/lib/esm/nano-staged-config.mjs +24 -3
- package/dist/lib/esm/released-issues.mjs +4 -4
- package/dist/lib/esm/test-runners/auto.d.mts +5 -0
- package/dist/lib/esm/test-runners/auto.mjs +1 -1
- package/dist/lib/esm/test-runners/forwarded-arguments.d.mts +49 -0
- package/dist/lib/esm/test-runners/forwarded-arguments.mjs +26 -0
- package/dist/lib/esm/test-runners/index.d.mts +1 -0
- package/dist/lib/esm/test-runners/index.mjs +3 -1
- package/dist/lib/esm/test-runners/jest.d.mts +5 -0
- package/dist/lib/esm/test-runners/jest.mjs +16 -3
- package/dist/lib/esm/test-runners/vitest.d.mts +5 -0
- package/dist/lib/esm/test-runners/vitest.mjs +105 -6
- package/dist/lib/esm/upstream-sync.mjs +3 -3
- package/linters/eslint-rules/no-keyword-identifiers/package.json +6 -0
- package/linters/eslint-rules/readonly-member-arrays/package.json +6 -0
- package/package.json +5 -2
- package/test-runners/forwarded-arguments/package.json +6 -0
|
@@ -2,10 +2,62 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return '/';
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: 'android'
|
|
14
|
+
};
|
|
5
15
|
|
|
6
|
-
|
|
16
|
+
const existingProcess = globalThis.process;
|
|
17
|
+
|
|
18
|
+
if (!existingProcess) {
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (existingProcess.versions?.node) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingProcessRecord = existingProcess;
|
|
28
|
+
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
existingProcessRecord['browser'] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
import { availableParallelism } from "node:os";
|
|
40
|
+
import process from "node:process";
|
|
41
|
+
import { getBulkConcurrency } from "../bulk-concurrency.mjs";
|
|
42
|
+
import {
|
|
43
|
+
execFromRoot,
|
|
44
|
+
resolvePathFromRootSafe
|
|
45
|
+
} from "../root.mjs";
|
|
46
|
+
import { assertNoOwnedArguments } from "./forwarded-arguments.mjs";
|
|
47
|
+
const WATCH_WORKER_DIVISOR = 2;
|
|
48
|
+
const workerEnvironmentQueue = { pending: Promise.resolve(void 0) };
|
|
49
|
+
const PROJECT_OPTION = { names: ["--project"], replacement: "the `projects` option" };
|
|
50
|
+
const RUN_MODE_OPTION = { names: ["--run", "--watch", "-w"], replacement: "the `test`, `testCoverage` or `testWatch` wrapper" };
|
|
51
|
+
const COVERAGE_OPTION = {
|
|
52
|
+
names: ["--coverage", "--no-coverage"],
|
|
53
|
+
prefixes: ["--coverage."],
|
|
54
|
+
replacement: "the `testCoverage` wrapper and its `minCoverageInPercents` option"
|
|
55
|
+
};
|
|
56
|
+
const OWNED_OPTIONS = [PROJECT_OPTION, RUN_MODE_OPTION, COVERAGE_OPTION];
|
|
7
57
|
async function test(options = {}) {
|
|
8
|
-
await execFromRoot(["vitest", "run", ...buildProjectFlags(options.projects)]
|
|
58
|
+
await execFromRoot(["vitest", "run", ...buildProjectFlags(options.projects), ...getAdditionalArguments(options)], {
|
|
59
|
+
env: await getWorkerEnvironment(options)
|
|
60
|
+
});
|
|
9
61
|
}
|
|
10
62
|
async function testCoverage(options = {}) {
|
|
11
63
|
const threshold = String(options.minCoverageInPercents ?? 0);
|
|
@@ -17,18 +69,65 @@ async function testCoverage(options = {}) {
|
|
|
17
69
|
`--coverage.thresholds.lines=${threshold}`,
|
|
18
70
|
`--coverage.thresholds.functions=${threshold}`,
|
|
19
71
|
`--coverage.thresholds.branches=${threshold}`,
|
|
20
|
-
`--coverage.thresholds.statements=${threshold}
|
|
21
|
-
|
|
72
|
+
`--coverage.thresholds.statements=${threshold}`,
|
|
73
|
+
...getAdditionalArguments(options)
|
|
74
|
+
], { env: await getWorkerEnvironment(options) });
|
|
22
75
|
}
|
|
23
76
|
async function testWatch(options = {}) {
|
|
24
|
-
await execFromRoot(["vitest", ...buildProjectFlags(options.projects)]
|
|
77
|
+
await execFromRoot(["vitest", ...buildProjectFlags(options.projects), ...getAdditionalArguments(options)], {
|
|
78
|
+
env: await getWorkerEnvironment(options, true)
|
|
79
|
+
});
|
|
25
80
|
}
|
|
26
81
|
function buildProjectFlags(projects) {
|
|
27
82
|
return (projects ?? []).flatMap((project) => [`--project=${project}`, `--project=${project}:*`]);
|
|
28
83
|
}
|
|
84
|
+
function getAdditionalArguments(options) {
|
|
85
|
+
const { additionalArguments = [] } = options;
|
|
86
|
+
assertNoOwnedArguments({ forwardedArguments: additionalArguments, ownedOptions: OWNED_OPTIONS, runnerName: "vitest" });
|
|
87
|
+
return additionalArguments;
|
|
88
|
+
}
|
|
89
|
+
async function getWorkerEnvironment(options, isWatch = false) {
|
|
90
|
+
const next = workerEnvironmentQueue.pending.then(() => resolveWorkerEnvironment(options, isWatch));
|
|
91
|
+
workerEnvironmentQueue.pending = next.catch(() => void 0);
|
|
92
|
+
return next;
|
|
93
|
+
}
|
|
94
|
+
async function resolveWorkerEnvironment(options, isWatch) {
|
|
95
|
+
const budget = getBulkConcurrency(Infinity);
|
|
96
|
+
if (!Number.isFinite(budget)) {
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
const { resolveConfig } = await import("vitest/node");
|
|
100
|
+
const inheritedWorkers = process.env["VITEST_MAX_WORKERS"];
|
|
101
|
+
delete process.env["VITEST_MAX_WORKERS"];
|
|
102
|
+
let config;
|
|
103
|
+
try {
|
|
104
|
+
config = await resolveConfig({
|
|
105
|
+
project: (options.projects ?? []).flatMap((project) => [project, `${project}:*`]),
|
|
106
|
+
root: resolvePathFromRootSafe({ path: "." }),
|
|
107
|
+
watch: isWatch
|
|
108
|
+
});
|
|
109
|
+
} finally {
|
|
110
|
+
if (inheritedWorkers !== void 0) {
|
|
111
|
+
process.env["VITEST_MAX_WORKERS"] = inheritedWorkers;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const ordinaryWorkers = Math.max(isWatch ? Math.floor(availableParallelism() / WATCH_WORKER_DIVISOR) : availableParallelism() - 1, 1);
|
|
115
|
+
const inheritedLimit = Number.parseInt(inheritedWorkers ?? "", 10);
|
|
116
|
+
let workers = Math.min(budget, ordinaryWorkers);
|
|
117
|
+
if (Number.isSafeInteger(inheritedLimit) && inheritedLimit > 0) {
|
|
118
|
+
workers = Math.min(workers, inheritedLimit);
|
|
119
|
+
}
|
|
120
|
+
const configs = [config.test, ...config.test.resolvedProjects.filter((entry) => !entry.hidden).map((entry) => entry.projectConfig)];
|
|
121
|
+
for (const testConfig of configs) {
|
|
122
|
+
if (testConfig.maxWorkers) {
|
|
123
|
+
workers = Math.min(workers, testConfig.maxWorkers);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return { VITEST_MAX_WORKERS: String(workers) };
|
|
127
|
+
}
|
|
29
128
|
export {
|
|
30
129
|
test,
|
|
31
130
|
testCoverage,
|
|
32
131
|
testWatch
|
|
33
132
|
};
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy92aXRlc3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMgdXNpbmcgdGhlIFZpdGVzdCBmcmFtZXdvcmsuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4ZWN1dGVzIHZpdGVzdCBhcyBhIENMSSBzdWJwcm9jZXNzOyBjb3JyZWN0bmVzcyBpcyB2ZXJpZmllZCBieSBydW5uaW5nIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgZXhlY0Zyb21Sb290IH0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyB0ZXN0cyB3aXRoIGNvdmVyYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDb3ZlcmFnZU9wdGlvbnMgZXh0ZW5kcyBUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvdmVyYWdlIHBlcmNlbnRhZ2UgcmVxdWlyZWQuIElmIHRoZSBhY3R1YWwgY292ZXJhZ2UgZmFsbHMgYmVsb3dcbiAgICogdGhpcyB0aHJlc2hvbGQsIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGggYSBub24temVybyBjb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMGBcbiAgICovXG4gIHJlYWRvbmx5IG1pbkNvdmVyYWdlSW5QZXJjZW50cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0cyB0byBydW4uXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMgaW4gd2F0Y2ggbW9kZS5cbiAqL1xuZXhwb3J0IHR5cGUgVGVzdFdhdGNoT3B0aW9ucyA9IFRlc3RPcHRpb25zO1xuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHRlc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdChvcHRpb25zOiBUZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ3ZpdGVzdCcsICdydW4nLCAuLi5idWlsZFByb2plY3RGbGFncyhvcHRpb25zLnByb2plY3RzKV0pO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgd2l0aCBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvdmVyYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdENvdmVyYWdlKG9wdGlvbnM6IFRlc3RDb3ZlcmFnZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0aHJlc2hvbGQgPSBTdHJpbmcob3B0aW9ucy5taW5Db3ZlcmFnZUluUGVyY2VudHMgPz8gMCk7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgJ3ZpdGVzdCcsXG4gICAgJ3J1bicsXG4gICAgLi4uYnVpbGRQcm9qZWN0RmxhZ3Mob3B0aW9ucy5wcm9qZWN0cyksXG4gICAgJy0tY292ZXJhZ2UnLFxuICAgIGAtLWNvdmVyYWdlLnRocmVzaG9sZHMubGluZXM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLmZ1bmN0aW9ucz0ke3RocmVzaG9sZH1gLFxuICAgIGAtLWNvdmVyYWdlLnRocmVzaG9sZHMuYnJhbmNoZXM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLnN0YXRlbWVudHM9JHt0aHJlc2hvbGR9YFxuICBdKTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlIGluIHdhdGNoIG1vZGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHRlc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFdhdGNoKG9wdGlvbnM6IFRlc3RXYXRjaE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyd2aXRlc3QnLCAuLi5idWlsZFByb2plY3RGbGFncyhvcHRpb25zLnByb2plY3RzKV0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBgLS1wcm9qZWN0YCBmbGFncyBmb3IgdGhlIGdpdmVuIHByb2plY3QgcHJlZml4ZXMuXG4gKiBFYWNoIHByZWZpeCBleHBhbmRzIHRvIGJvdGggYC0tcHJvamVjdD1wcmVmaXhgIChleGFjdCBtYXRjaClcbiAqIGFuZCBgLS1wcm9qZWN0PXByZWZpeDoqYCAoc3ViLXByb2plY3RzKS5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdHMgLSBUaGUgcHJvamVjdCBuYW1lIHByZWZpeGVzLlxuICogQHJldHVybnMgVGhlIGAtLXByb2plY3RgIGZsYWdzIGFycmF5LlxuICovXG5mdW5jdGlvbiBidWlsZFByb2plY3RGbGFncyhwcm9qZWN0cz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gKHByb2plY3RzID8/IFtdKS5mbGF0TWFwKChwcm9qZWN0KSA9PiBbYC0tcHJvamVjdD0ke3Byb2plY3R9YCwgYC0tcHJvamVjdD0ke3Byb2plY3R9OipgXSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQVFBLFNBQVMsb0JBQW9CO0FBb0M3QixlQUFzQixLQUFLLFVBQXVCLENBQUMsR0FBa0I7QUFDbkUsUUFBTSxhQUFhLENBQUMsVUFBVSxPQUFPLEdBQUcsa0JBQWtCLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFDOUU7QUFRQSxlQUFzQixhQUFhLFVBQStCLENBQUMsR0FBa0I7QUFDbkYsUUFBTSxZQUFZLE9BQU8sUUFBUSx5QkFBeUIsQ0FBQztBQUMzRCxRQUFNLGFBQWE7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUcsa0JBQWtCLFFBQVEsUUFBUTtBQUFBLElBQ3JDO0FBQUEsSUFDQSwrQkFBK0IsU0FBUztBQUFBLElBQ3hDLG1DQUFtQyxTQUFTO0FBQUEsSUFDNUMsa0NBQWtDLFNBQVM7QUFBQSxJQUMzQyxvQ0FBb0MsU0FBUztBQUFBLEVBQy9DLENBQUM7QUFDSDtBQVFBLGVBQXNCLFVBQVUsVUFBNEIsQ0FBQyxHQUFrQjtBQUM3RSxRQUFNLGFBQWEsQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFDdkU7QUFVQSxTQUFTLGtCQUFrQixVQUErQjtBQUN4RCxVQUFRLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxPQUFPLElBQUksYUFBYSxPQUFPLElBQUksQ0FBQztBQUNqRzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvdml0ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMgdXNpbmcgdGhlIFZpdGVzdCBmcmFtZXdvcmsuXG4gKi9cblxuaW1wb3J0IHsgYXZhaWxhYmxlUGFyYWxsZWxpc20gfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgT3duZWRPcHRpb24gfSBmcm9tICcuL2ZvcndhcmRlZC1hcmd1bWVudHMudHMnO1xuXG5pbXBvcnQgeyBnZXRCdWxrQ29uY3VycmVuY3kgfSBmcm9tICcuLi9idWxrLWNvbmN1cnJlbmN5LnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBhc3NlcnROb093bmVkQXJndW1lbnRzIH0gZnJvbSAnLi9mb3J3YXJkZWQtYXJndW1lbnRzLnRzJztcblxuY29uc3QgV0FUQ0hfV09SS0VSX0RJVklTT1IgPSAyO1xuY29uc3Qgd29ya2VyRW52aXJvbm1lbnRRdWV1ZSA9IHsgcGVuZGluZzogUHJvbWlzZS5yZXNvbHZlPHVua25vd24+KHVuZGVmaW5lZCkgfTtcblxuY29uc3QgUFJPSkVDVF9PUFRJT046IE93bmVkT3B0aW9uID0geyBuYW1lczogWyctLXByb2plY3QnXSwgcmVwbGFjZW1lbnQ6ICd0aGUgYHByb2plY3RzYCBvcHRpb24nIH07XG5jb25zdCBSVU5fTU9ERV9PUFRJT046IE93bmVkT3B0aW9uID0geyBuYW1lczogWyctLXJ1bicsICctLXdhdGNoJywgJy13J10sIHJlcGxhY2VtZW50OiAndGhlIGB0ZXN0YCwgYHRlc3RDb3ZlcmFnZWAgb3IgYHRlc3RXYXRjaGAgd3JhcHBlcicgfTtcbmNvbnN0IENPVkVSQUdFX09QVElPTjogT3duZWRPcHRpb24gPSB7XG4gIG5hbWVzOiBbJy0tY292ZXJhZ2UnLCAnLS1uby1jb3ZlcmFnZSddLFxuICBwcmVmaXhlczogWyctLWNvdmVyYWdlLiddLFxuICByZXBsYWNlbWVudDogJ3RoZSBgdGVzdENvdmVyYWdlYCB3cmFwcGVyIGFuZCBpdHMgYG1pbkNvdmVyYWdlSW5QZXJjZW50c2Agb3B0aW9uJ1xufTtcbmNvbnN0IE9XTkVEX09QVElPTlM6IHJlYWRvbmx5IE93bmVkT3B0aW9uW10gPSBbUFJPSkVDVF9PUFRJT04sIFJVTl9NT0RFX09QVElPTiwgQ09WRVJBR0VfT1BUSU9OXTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIHdpdGggY292ZXJhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENvdmVyYWdlT3B0aW9ucyBleHRlbmRzIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIE1pbmltdW0gY292ZXJhZ2UgcGVyY2VudGFnZSByZXF1aXJlZC4gSWYgdGhlIGFjdHVhbCBjb3ZlcmFnZSBmYWxscyBiZWxvd1xuICAgKiB0aGlzIHRocmVzaG9sZCwgdGhlIHByb2Nlc3MgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIGNvZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbWluQ292ZXJhZ2VJblBlcmNlbnRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogRnVydGhlciB2aXRlc3QgQ0xJIGFyZ3VtZW50cywgYXBwZW5kZWQgYWZ0ZXIgdGhlIHdyYXBwZXIncyBvd246IGZpbGUgZmlsdGVycywgYC10YCwgYC0tbWF4V29ya2Vyc2AsIGAtLXJlcG9ydGVyYC5cbiAgICogQW4gYXJndW1lbnQgbmFtaW5nIGFuIG9wdGlvbiB0aGUgd3JhcHBlciBzZXRzIGl0c2VsZiAoYC0tcHJvamVjdGAsIGAtLWNvdmVyYWdlKmAsIGAtLXJ1bmAsIGAtLXdhdGNoYCkgdGhyb3dzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEFyZ3VtZW50cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdHMgdG8gcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIGluIHdhdGNoIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIFRlc3RXYXRjaE9wdGlvbnMgPSBUZXN0T3B0aW9ucztcblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSB0ZXN0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3Qob3B0aW9uczogVGVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyd2aXRlc3QnLCAncnVuJywgLi4uYnVpbGRQcm9qZWN0RmxhZ3Mob3B0aW9ucy5wcm9qZWN0cyksIC4uLmdldEFkZGl0aW9uYWxBcmd1bWVudHMob3B0aW9ucyldLCB7XG4gICAgZW52OiBhd2FpdCBnZXRXb3JrZXJFbnZpcm9ubWVudChvcHRpb25zKVxuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlIHdpdGggY292ZXJhZ2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb3ZlcmFnZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RDb3ZlcmFnZShvcHRpb25zOiBUZXN0Q292ZXJhZ2VPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdGhyZXNob2xkID0gU3RyaW5nKG9wdGlvbnMubWluQ292ZXJhZ2VJblBlcmNlbnRzID8/IDApO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoW1xuICAgICd2aXRlc3QnLFxuICAgICdydW4nLFxuICAgIC4uLmJ1aWxkUHJvamVjdEZsYWdzKG9wdGlvbnMucHJvamVjdHMpLFxuICAgICctLWNvdmVyYWdlJyxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLmxpbmVzPSR7dGhyZXNob2xkfWAsXG4gICAgYC0tY292ZXJhZ2UudGhyZXNob2xkcy5mdW5jdGlvbnM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLmJyYW5jaGVzPSR7dGhyZXNob2xkfWAsXG4gICAgYC0tY292ZXJhZ2UudGhyZXNob2xkcy5zdGF0ZW1lbnRzPSR7dGhyZXNob2xkfWAsXG4gICAgLi4uZ2V0QWRkaXRpb25hbEFyZ3VtZW50cyhvcHRpb25zKVxuICBdLCB7IGVudjogYXdhaXQgZ2V0V29ya2VyRW52aXJvbm1lbnQob3B0aW9ucykgfSk7XG59XG5cbi8qKlxuICogUnVucyB0aGUgdGVzdCBzdWl0ZSBpbiB3YXRjaCBtb2RlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSB0ZXN0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RXYXRjaChvcHRpb25zOiBUZXN0V2F0Y2hPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsndml0ZXN0JywgLi4uYnVpbGRQcm9qZWN0RmxhZ3Mob3B0aW9ucy5wcm9qZWN0cyksIC4uLmdldEFkZGl0aW9uYWxBcmd1bWVudHMob3B0aW9ucyldLCB7XG4gICAgZW52OiBhd2FpdCBnZXRXb3JrZXJFbnZpcm9ubWVudChvcHRpb25zLCB0cnVlKVxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYC0tcHJvamVjdGAgZmxhZ3MgZm9yIHRoZSBnaXZlbiBwcm9qZWN0IHByZWZpeGVzLlxuICogRWFjaCBwcmVmaXggZXhwYW5kcyB0byBib3RoIGAtLXByb2plY3Q9cHJlZml4YCAoZXhhY3QgbWF0Y2gpXG4gKiBhbmQgYC0tcHJvamVjdD1wcmVmaXg6KmAgKHN1Yi1wcm9qZWN0cykuXG4gKlxuICogQHBhcmFtIHByb2plY3RzIC0gVGhlIHByb2plY3QgbmFtZSBwcmVmaXhlcy5cbiAqIEByZXR1cm5zIFRoZSBgLS1wcm9qZWN0YCBmbGFncyBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRQcm9qZWN0RmxhZ3MocHJvamVjdHM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIChwcm9qZWN0cyA/PyBbXSkuZmxhdE1hcCgocHJvamVjdCkgPT4gW2AtLXByb2plY3Q9JHtwcm9qZWN0fWAsIGAtLXByb2plY3Q9JHtwcm9qZWN0fToqYF0pO1xufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgZm9yd2FyZGVkIGFyZ3VtZW50cyBhZ2FpbnN0IHRoZSBvcHRpb25zIHRoZSB3cmFwcGVycyBzZXQgdGhlbXNlbHZlcy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgdGVzdC5cbiAqIEByZXR1cm5zIFRoZSBmb3J3YXJkZWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsQXJndW1lbnRzKG9wdGlvbnM6IFRlc3RPcHRpb25zKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICBjb25zdCB7IGFkZGl0aW9uYWxBcmd1bWVudHMgPSBbXSB9ID0gb3B0aW9ucztcbiAgYXNzZXJ0Tm9Pd25lZEFyZ3VtZW50cyh7IGZvcndhcmRlZEFyZ3VtZW50czogYWRkaXRpb25hbEFyZ3VtZW50cywgb3duZWRPcHRpb25zOiBPV05FRF9PUFRJT05TLCBydW5uZXJOYW1lOiAndml0ZXN0JyB9KTtcbiAgcmV0dXJuIGFkZGl0aW9uYWxBcmd1bWVudHM7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGJ1bGsgY2FwIHdpdGhvdXQgbGV0dGluZyBWaXRlc3QncyBlbnZpcm9ubWVudCBvdmVycmlkZSBoaWRlIG5hcnJvd2VyIHByb2plY3QgbGltaXRzLlxuICogVGhlIG5hcnJvd2VzdCBsaW1pdCBhcHBsaWVzIHRvIHRoZSB3aG9sZSBpbnZvY2F0aW9uIGJlY2F1c2UgQ0xJIGFuZCBlbnZpcm9ubWVudCBsaW1pdHMgcmVwbGFjZSBwcm9qZWN0IGxpbWl0cy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBzZWxlY3RlZCB0ZXN0IHByb2plY3RzLlxuICogQHBhcmFtIGlzV2F0Y2ggLSBXaGV0aGVyIHRoaXMgaW52b2NhdGlvbiB3YXRjaGVzIGZvciBjaGFuZ2VzLlxuICogQHJldHVybnMgQ2hpbGQgZW52aXJvbm1lbnQgb3ZlcnJpZGVzLCBlbXB0eSBvdXRzaWRlIGJ1bGsgd29yay5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V29ya2VyRW52aXJvbm1lbnQob3B0aW9uczogVGVzdE9wdGlvbnMsIGlzV2F0Y2ggPSBmYWxzZSk6IFByb21pc2U8Tm9kZUpTLlByb2Nlc3NFbnY+IHtcbiAgY29uc3QgbmV4dCA9IHdvcmtlckVudmlyb25tZW50UXVldWUucGVuZGluZy50aGVuKCgpID0+IHJlc29sdmVXb3JrZXJFbnZpcm9ubWVudChvcHRpb25zLCBpc1dhdGNoKSk7XG4gIHdvcmtlckVudmlyb25tZW50UXVldWUucGVuZGluZyA9IG5leHQuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25lIGludm9jYXRpb24ncyB3b3JrZXIgZW52aXJvbm1lbnQgd2hpbGUgaG9sZGluZyB0aGUgY29uZmlndXJhdGlvbi1yZXNvbHV0aW9uIHF1ZXVlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHNlbGVjdGVkIHRlc3QgcHJvamVjdHMuXG4gKiBAcGFyYW0gaXNXYXRjaCAtIFdoZXRoZXIgdGhpcyBpbnZvY2F0aW9uIHdhdGNoZXMgZm9yIGNoYW5nZXMuXG4gKiBAcmV0dXJucyBDaGlsZCBlbnZpcm9ubWVudCBvdmVycmlkZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3JrZXJFbnZpcm9ubWVudChvcHRpb25zOiBUZXN0T3B0aW9ucywgaXNXYXRjaDogYm9vbGVhbik6IFByb21pc2U8Tm9kZUpTLlByb2Nlc3NFbnY+IHtcbiAgY29uc3QgYnVkZ2V0ID0gZ2V0QnVsa0NvbmN1cnJlbmN5KEluZmluaXR5KTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYnVkZ2V0KSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIE9wdGlvbmFsIHBlZXI6IGxlYXZlIGxvYWRpbmcgVml0ZXN0IHRvIHRoZSBDTEkgb3V0c2lkZSBidWxrIHdvcmsuXG4gIGNvbnN0IHsgcmVzb2x2ZUNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KCd2aXRlc3Qvbm9kZScpO1xuICBjb25zdCBpbmhlcml0ZWRXb3JrZXJzID0gcHJvY2Vzcy5lbnZbJ1ZJVEVTVF9NQVhfV09SS0VSUyddO1xuICBkZWxldGUgcHJvY2Vzcy5lbnZbJ1ZJVEVTVF9NQVhfV09SS0VSUyddO1xuICBsZXQgY29uZmlnO1xuICB0cnkge1xuICAgIGNvbmZpZyA9IGF3YWl0IHJlc29sdmVDb25maWcoe1xuICAgICAgcHJvamVjdDogKG9wdGlvbnMucHJvamVjdHMgPz8gW10pLmZsYXRNYXAoKHByb2plY3QpID0+IFtwcm9qZWN0LCBgJHtwcm9qZWN0fToqYF0pLFxuICAgICAgcm9vdDogcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiAnLicgfSksXG4gICAgICB3YXRjaDogaXNXYXRjaFxuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChpbmhlcml0ZWRXb3JrZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFdvcmtlciBlbnZpcm9ubWVudCByZXNvbHV0aW9ucyBhcmUgc2VyaWFsaXplZDsgcmVzdG9yZSB0aGUgaW5oZXJpdGVkIHZhbHVlIGJlZm9yZSB0aGUgbmV4dCBpbnZvY2F0aW9uIHJlYWRzIGl0LlxuICAgICAgcHJvY2Vzcy5lbnZbJ1ZJVEVTVF9NQVhfV09SS0VSUyddID0gaW5oZXJpdGVkV29ya2VycztcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmRpbmFyeVdvcmtlcnMgPSBNYXRoLm1heChpc1dhdGNoID8gTWF0aC5mbG9vcihhdmFpbGFibGVQYXJhbGxlbGlzbSgpIC8gV0FUQ0hfV09SS0VSX0RJVklTT1IpIDogYXZhaWxhYmxlUGFyYWxsZWxpc20oKSAtIDEsIDEpO1xuICBjb25zdCBpbmhlcml0ZWRMaW1pdCA9IE51bWJlci5wYXJzZUludChpbmhlcml0ZWRXb3JrZXJzID8/ICcnLCAxMCk7XG4gIGxldCB3b3JrZXJzID0gTWF0aC5taW4oYnVkZ2V0LCBvcmRpbmFyeVdvcmtlcnMpO1xuICBpZiAoTnVtYmVyLmlzU2FmZUludGVnZXIoaW5oZXJpdGVkTGltaXQpICYmIGluaGVyaXRlZExpbWl0ID4gMCkge1xuICAgIHdvcmtlcnMgPSBNYXRoLm1pbih3b3JrZXJzLCBpbmhlcml0ZWRMaW1pdCk7XG4gIH1cblxuICBjb25zdCBjb25maWdzID0gW2NvbmZpZy50ZXN0LCAuLi5jb25maWcudGVzdC5yZXNvbHZlZFByb2plY3RzLmZpbHRlcigoZW50cnkpID0+ICFlbnRyeS5oaWRkZW4pLm1hcCgoZW50cnkpID0+IGVudHJ5LnByb2plY3RDb25maWcpXTtcbiAgZm9yIChjb25zdCB0ZXN0Q29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICBpZiAodGVzdENvbmZpZy5tYXhXb3JrZXJzKSB7XG4gICAgICB3b3JrZXJzID0gTWF0aC5taW4od29ya2VycywgdGVzdENvbmZpZy5tYXhXb3JrZXJzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBWSVRFU1RfTUFYX1dPUktFUlM6IFN0cmluZyh3b3JrZXJzKSB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMsNEJBQTRCO0FBQ3JDLE9BQU8sYUFBYTtBQUlwQixTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsOEJBQThCO0FBRXZDLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0seUJBQXlCLEVBQUUsU0FBUyxRQUFRLFFBQWlCLE1BQVMsRUFBRTtBQUU5RSxNQUFNLGlCQUE4QixFQUFFLE9BQU8sQ0FBQyxXQUFXLEdBQUcsYUFBYSx3QkFBd0I7QUFDakcsTUFBTSxrQkFBK0IsRUFBRSxPQUFPLENBQUMsU0FBUyxXQUFXLElBQUksR0FBRyxhQUFhLG9EQUFvRDtBQUMzSSxNQUFNLGtCQUErQjtBQUFBLEVBQ25DLE9BQU8sQ0FBQyxjQUFjLGVBQWU7QUFBQSxFQUNyQyxVQUFVLENBQUMsYUFBYTtBQUFBLEVBQ3hCLGFBQWE7QUFDZjtBQUNBLE1BQU0sZ0JBQXdDLENBQUMsZ0JBQWdCLGlCQUFpQixlQUFlO0FBMEMvRixlQUFzQixLQUFLLFVBQXVCLENBQUMsR0FBa0I7QUFDbkUsUUFBTSxhQUFhLENBQUMsVUFBVSxPQUFPLEdBQUcsa0JBQWtCLFFBQVEsUUFBUSxHQUFHLEdBQUcsdUJBQXVCLE9BQU8sQ0FBQyxHQUFHO0FBQUEsSUFDaEgsS0FBSyxNQUFNLHFCQUFxQixPQUFPO0FBQUEsRUFDekMsQ0FBQztBQUNIO0FBUUEsZUFBc0IsYUFBYSxVQUErQixDQUFDLEdBQWtCO0FBQ25GLFFBQU0sWUFBWSxPQUFPLFFBQVEseUJBQXlCLENBQUM7QUFDM0QsUUFBTSxhQUFhO0FBQUEsSUFDakI7QUFBQSxJQUNBO0FBQUEsSUFDQSxH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
|
|
@@ -238,8 +238,8 @@ function execOrThrow(dependencies, file, arguments_) {
|
|
|
238
238
|
return result.output;
|
|
239
239
|
}
|
|
240
240
|
function findOpenPr(dependencies, branch) {
|
|
241
|
-
const number = execOrThrow(dependencies, "gh", ["pr", "list", "--head", branch, "--state", "open", "--json", "number", "--jq", ".[0].number"]).trim();
|
|
242
|
-
return number === "" || number === "null" ? null : number;
|
|
241
|
+
const $number = execOrThrow(dependencies, "gh", ["pr", "list", "--head", branch, "--state", "open", "--json", "number", "--jq", ".[0].number"]).trim();
|
|
242
|
+
return $number === "" || $number === "null" ? null : $number;
|
|
243
243
|
}
|
|
244
244
|
function isGitUpstream(entry) {
|
|
245
245
|
return "repo" in entry;
|
|
@@ -291,4 +291,4 @@ export {
|
|
|
291
291
|
syncUpstreams,
|
|
292
292
|
writePin
|
|
293
293
|
};
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Vwc3RyZWFtLXN5bmMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXYXRjaGVzIHRoZSB1cHN0cmVhbXMgYSByZXBvc2l0b3J5IG1pcnJvcnMgYW5kIG9wZW5zIG9uZSB1cGRhdGUgUFIgcGVyIHVwc3RyZWFtIHRoYXQgbW92ZWQuXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIGRyaXZlbiBieSBgdXBzdHJlYW1zLmpzb25gIGFuZCB0aGUgaGFuZGxlciBjb21tYW5kcyBpdCBuYW1lcywgc28gYW55IHJlcG9zaXRvcnkgdGhhdCB2ZW5kb3JzXG4gKiB1cHN0cmVhbSBjb2RlIGNhbiB1c2UgaXQ6IHRocm91Z2ggdGhlIGBzeW5jLXVwc3RyZWFtc2AgYmluLCBvciB0aGUgcmV1c2FibGUgYHN5bmMtdXBzdHJlYW1zLnltbGAgd29ya2Zsb3cuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWF0Y2hlc0dsb2IgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFdoYXQgYSBjb21tYW5kIHByaW50ZWQgYW5kIGhvdyBpdCBleGl0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdCB7XG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIG9uIGEgR2l0SHViIGJyYW5jaCBvciB0YWcsIHBpbm5lZCB0byBhIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgY29tbWl0OiB0aGUgbGFzdCB1cHN0cmVhbSBzdGF0ZSB0aGUgaGFuZGxlciB3YXMgcnVuIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBjb21taXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgdHVybnMgYSBuZXdlciB1cHN0cmVhbSBzdGF0ZSBpbnRvIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgd2F0Y2hlZCB1cHN0cmVhbSwgYXMgZ2xvYnMgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gQSBtb3ZlIHRoYXQgdG91Y2hlcyBub25lIG9mIHRoZW0gb3BlbnMgbm8gUFIuXG4gICAqL1xuICByZWFkb25seSBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIG9yIHRhZyBmb2xsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZjogc3RyaW5nO1xuICAvKipcbiAgICogYDxvd25lcj4vPHJlcG8+YCBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgaGFuZGxlcidzIHJlc3VsdC4gT3ZlcnJpZGVzIHRoZSBmaWxlJ3MgdG9wLWxldmVsIGB2ZXJpZnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIGFzIGFuIG5wbSBwYWNrYWdlJ3MgZGlzdC10YWcsIHBpbm5lZCB0byBhIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtVXBzdHJlYW1FbnRyeSB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5wbTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRpc3QtdGFnIGZvbGxvd2VkLiBgbGF0ZXN0YCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBpbm5lZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgdGhlIHN5bmMgZG9lcyB0byB0aGUgb3V0c2lkZSB3b3JsZCwgc28gYSB0ZXN0IGNhbiBzdGFuZCBhIGZpeHR1cmUgaW4gZm9yIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNEZXBlbmRlbmNpZXMge1xuICAvKipcbiAgICogUnVucyBhbiBleGVjdXRhYmxlIHdpdGggYXJndW1lbnRzIGFuZCBubyBzaGVsbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWM6IChmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdLCBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4gQ29tbWFuZFJlc3VsdDtcbiAgLyoqXG4gICAqIEdFVHMgYSBVUkwgYW5kIHBhcnNlcyB0aGUgSlNPTiBpdCByZXR1cm5zLCB0aHJvd2luZyBvbiBhbiBIVFRQIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hKc29uOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRvbmx5IGxvZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgc2hlbGw6IGEgaGFuZGxlciBvciBhIHZlcmlmeSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGw6IChjb21tYW5kOiBzdHJpbmcsIGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSA9PiBDb21tYW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBQUiBhbiB1cHN0cmVhbSBtb3ZlIGFza3MgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNQbGFuIHtcbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1czogVXBzdHJlYW1TdGF0dXM7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBoYXBwZW5lZCB0byBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBjaGVja2luZyBvciBhcHBseWluZyB0aHJldzogdGhlIGpvYiByZXBvcnRzIGl0IGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgcGxhbm5lZGAgaW4gYSBkcnkgcnVuLCBgb3BlbmVkYC9gdXBkYXRlZGAgd2hlbiBhIFBSIHdhcyBwdXNoZWQsIGB1bmNoYW5nZWRgIHdoZW4gdGhlIGJyYW5jaCBhbHJlYWR5IGhlbGQgdGhpcyByZXN1bHQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiAnY3VycmVudCcgfCAnZXJyb3InIHwgJ29wZW5lZCcgfCAncGxhbm5lZCcgfCAndW5jaGFuZ2VkJyB8ICd1bndhdGNoZWQnIHwgJ3VwZGF0ZWQnO1xuICByZWFkb25seSBwck51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzeW5jVXBzdHJlYW1zfSBzeW5jcywgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW5jVXBzdHJlYW1zT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIGVhY2ggUFIgdGFyZ2V0cyBhbmQgZWFjaCB1cGRhdGUgYnJhbmNoIGlzIGN1dCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gYHVwc3RyZWFtcy5qc29uYCwgd2hpY2ggdGhlIHN5bmMgdXBkYXRlcyB0aGUgcGluIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGxhbiBhbmQgcHJpbnQgZXZlcnkgUFIsIGFuZCBjaGFuZ2Ugbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9ubHkgdGhlIGVudHJpZXMgd2l0aCB0aGVzZSBuYW1lcywgb3IgZXZlcnkgZW50cnkgd2hlbiBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IG9ubHk6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSB1cHN0cmVhbSB0aGF0IGB1cHN0cmVhbXMuanNvbmAgbGlzdHM6IGEgZ2l0IG9uZSBvciBhbiBucG0gb25lLlxuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbUVudHJ5ID0gR2l0VXBzdHJlYW1FbnRyeSB8IE5wbVVwc3RyZWFtRW50cnk7XG5cbi8qKlxuICogVGhlIGNvbnRlbnQgb2YgYHVwc3RyZWFtcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHN0cmVhbXNDb25maWcge1xuICByZWFkb25seSB1cHN0cmVhbXM6IHJlYWRvbmx5IFVwc3RyZWFtRW50cnlbXTtcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgY2hlY2tzIGV2ZXJ5IGhhbmRsZXIncyByZXN1bHQsIHVubGVzcyBhbiBlbnRyeSBuYW1lcyBpdHMgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgb25lIGNvbXBhcmlzb24gb2YgYW4gZW50cnkgd2l0aCBpdHMgdXBzdHJlYW0gZm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzdHJlYW1TdGF0dXMge1xuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIHBhdGhzIHRoYXQgY2hhbmdlZCBhbmQgYXJlIHdhdGNoZWQsIHNvcnRlZC4gQWx3YXlzIGVtcHR5IGZvciBhbiBucG0gdXBzdHJlYW0uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VkUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQSBsaW5rIHRoYXQgc2hvd3Mgd2hhdCBjaGFuZ2VkIGJldHdlZW4gdGhlIHBpbiBhbmQgdGhlIGhlYWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXJlVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudHJ5OiBVcHN0cmVhbUVudHJ5O1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBvciB2ZXJzaW9uIHRoZSB1cHN0cmVhbSBpcyBhdCBub3cuXG4gICAqL1xuICByZWFkb25seSBoZWFkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG9yIHZlcnNpb24gYHVwc3RyZWFtcy5qc29uYCByZWNvcmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGluOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgY3VycmVudGA6IG5vdGhpbmcgdG8gZG8uIGBtb3ZlZGA6IGEgUFIgaXMgZHVlLiBgdW53YXRjaGVkYDogdXBzdHJlYW0gbW92ZWQsIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiAnY3VycmVudCcgfCAnbW92ZWQnIHwgJ3Vud2F0Y2hlZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEdpdEh1YiB0cnVuY2F0ZWQgdGhlIGNvbXBhcmUncyBmaWxlIGxpc3QsIHNvIGEgd2F0Y2hlZCBwYXRoIG1heSBiZSBtaXNzaW5nIGZyb20gYGNoYW5nZWRQYXRoc2AuXG4gICAqL1xuICByZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBHaXRIdWJDb21taXQge1xuICByZWFkb25seSBzaGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YkNvbXBhcmUge1xuICByZWFkb25seSBmaWxlcz86IHJlYWRvbmx5IEdpdEh1YkNvbXBhcmVGaWxlW107XG59XG5cbi8qKlxuICogT25lIGZpbGUgb2YgYSBHaXRIdWIgY29tcGFyZSwgYXMgdGhlIEFQSSBzcGVsbHMgaXQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJDb21wYXJlRmlsZSB7XG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgcHJldmlvdXNfZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOcG1QYWNrdW1lbnQge1xuICByZWFkb25seSAnZGlzdC10YWdzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBSZXN1bHQge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdDogQ29tbWFuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxlciBhbmQgdmVyaWZ5IHJ1bnMgYSBQUiBib2R5IHJlcG9ydHMuXG4gKi9cbmludGVyZmFjZSBTdGVwUmVzdWx0cyB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IFN0ZXBSZXN1bHQ7XG4gIHJlYWRvbmx5IHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQ7XG59XG5cbi8qKlxuICogYHVwc3RyZWFtcy5qc29uYCByZWFkIGxvb3NlbHksIHRvIHdyaXRlIG9uZSB2YWx1ZSBiYWNrIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgcmVzdC5cbiAqL1xuaW50ZXJmYWNlIFVwc3RyZWFtc0ZpbGVTaGFwZSB7XG4gIHJlYWRvbmx5IHVwc3RyZWFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBHaXRIdWIncyBjb21wYXJlIEFQSSBsaXN0cyBhdCBtb3N0IHRoaXMgbWFueSBmaWxlcywgYW5kIHNheXMgbm90aGluZyB3aGVuIGl0IHN0b3BzLlxuICovXG5jb25zdCBDT01QQVJFX0ZJTEVfTElNSVQgPSAzMDA7XG5cbmNvbnN0IFNIT1JUX1NIQV9MRU5HVEggPSAxMjtcblxuLyoqXG4gKiBUaGUgdGFpbCBvZiBhIGNvbW1hbmQncyBvdXRwdXQgYSBQUiBib2R5IHF1b3RlczogZW5vdWdoIHRvIHJlYWQgYSBmYWlsdXJlLCBzaG9ydCBlbm91Z2ggdG8gc3RheSB1bmRlciBHaXRIdWIncyBib2R5IGxpbWl0LlxuICovXG5jb25zdCBPVVRQVVRfVEFJTF9MSU5FUyA9IDYwO1xuXG4vKipcbiAqIFRoZSBtb3N0IGxpbmVzIHRoYXQgcmVwb3J0IGEgZmFpbHVyZSBhIGZhaWxlZCBzdGVwJ3Mgc2VjdGlvbiBvcGVucyB3aXRoLCBhaGVhZCBvZiBpdHMgb3V0cHV0IHRhaWwuXG4gKi9cbmNvbnN0IEZBSUxVUkVfTElORV9MSU1JVCA9IDIwO1xuXG5jb25zdCBKU09OX0lOREVOVF9TUEFDRVMgPSAyO1xuXG4vKipcbiAqIFRoZSBFU0MgdGhhdCBvcGVucyBhIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UsIGVpdGhlciBhcyB0aGUgYnl0ZSBvciBhcyB0aGUgY2FyZXQgdGV4dCBgXltgIGEgbG9nIHZpZXdlciBvciBhblxuICogZWFybGllciBjb3B5IHR1cm5lZCBpdCBpbnRvLiBCb3RoIHJlYWNoZWQgYSBQUiBib2R5OiBjcmVhdGUtb2JzaWRpYW4tcGx1Z2luIzIgY2FycmllZCB0aGUgY2FyZXQgZm9ybS5cbiAqL1xuY29uc3QgRVNDID0gU3RyaW5nLnJhd2AoPzpcXHUwMDFCfFxcXlxcWylgO1xuXG4vKipcbiAqIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciBzZXF1ZW5jZXMgKGNvbG9ycywgY3Vyc29yIG1vdmVzKSwgT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kIHNlcXVlbmNlcyAoaHlwZXJsaW5rcyxcbiAqIHRpdGxlcywgZW5kZWQgYnkgQkVMIG9yIFNULCBhbHNvIGFzIGBeR2ApLCBhbmQgdGhlIHR3by1jaGFyYWN0ZXIgZXNjYXBlcy4gQSB0d28tY2hhcmFjdGVyIGVzY2FwZSBpcyBtYXRjaGVkIG9ubHkgYXNcbiAqIHRoZSBieXRlLCBiZWNhdXNlIGl0cyBjYXJldCB0ZXh0IGFsc28gc3BlbGxzIGFuIG9yZGluYXJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiwgc3VjaCBhcyBgXltBLVpdYC5cbiAqL1xuY29uc3QgVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQID0gbmV3IFJlZ0V4cChcbiAgU3RyaW5nLnJhd2Ake0VTQ31cXFtbMC0/XSpbIC0vXSpbQC1+XXwke0VTQ31cXF1bXlxcdTAwMDdcXHUwMDFCXl0qKD86XFx1MDAwN3xcXF5HfCR7RVNDfVxcXFwpfFxcdTAwMUJbQC1aXFxcXC1fXWAsXG4gICdnJ1xuKTtcblxuLyoqXG4gKiBBIGxpbmUgdGhhdCByZXBvcnRzIGEgZmFpbHVyZSwgd2hpY2ggYSBmYWlsZWQgc3RlcCdzIHNlY3Rpb24gcXVvdGVzIGZpcnN0LCBiZWNhdXNlIHRoZSB0YWlsIG1heSBiZSBhIGdyZWVuIHRlc3QgcnVuXG4gKiB0aGF0IGZpbmlzaGVkIGFmdGVyIGl0LlxuICovXG5jb25zdCBGQUlMVVJFX0xJTkVfUkVHX0VYUCA9IC9zdGVwLWZhaWxlZHxcXGJmYWlsKD86c3xlZHx1cmV8aW5nKT9cXGJ8XFxiZXJyb3JcXGJ8XFxibm90IGZvdW5kXFxifFxcYkVSUiF8W1x1MjcxN1x1MDBEN10vaTtcblxuLyoqXG4gKiBXcml0ZXMgdGhlIFBSIGJvZHkuXG4gKlxuICogQHBhcmFtIHBsYW4gLSBUaGUgcGxhbi5cbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBoYW5kbGVyIGFuZCB2ZXJpZnkgcnVucywgb3IgYG51bGxgIGluIGEgZHJ5IHJ1biwgd2hlcmUgbmVpdGhlciBydW5zLlxuICogQHBhcmFtIGRpZmZTdGF0IC0gYGdpdCBkaWZmIC0tc3RhdGAgb2YgdGhlIHVwZGF0ZSBjb21taXQsIG9yIGBudWxsYCBpbiBhIGRyeSBydW4uXG4gKiBAcmV0dXJucyBUaGUgYm9keSwgaW4gTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByQm9keShwbGFuOiBTeW5jUGxhbiwgc3RlcHM6IG51bGwgfCBTdGVwUmVzdWx0cywgZGlmZlN0YXQ6IG51bGwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB7IGVudHJ5LCBoZWFkLCBwaW4gfSA9IHBsYW4uc3RhdHVzO1xuICBjb25zdCBzb3VyY2UgPSBpc0dpdFVwc3RyZWFtKGVudHJ5KSA/IGBcXGAke2VudHJ5LnJlcG99QCR7ZW50cnkucmVmfVxcYGAgOiBgbnBtIFxcYCR7ZW50cnkubnBtfUAke2VudHJ5LnRhZyA/PyAnbGF0ZXN0J31cXGBgO1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgVXBzdHJlYW0gXFxgJHtlbnRyeS5uYW1lfVxcYCBtb3ZlZDogJHtzb3VyY2V9IGZyb20gXFxgJHtwaW59XFxgIHRvIFxcYCR7aGVhZH1cXGAuYCxcbiAgICAnJyxcbiAgICBgQ29tcGFyZTogJHtwbGFuLnN0YXR1cy5jb21wYXJlVXJsfWAsXG4gICAgJydcbiAgXTtcblxuICBpZiAoaXNHaXRVcHN0cmVhbShlbnRyeSkpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgQ2hhbmdlZCB1cHN0cmVhbSBmaWxlcycsICcnLCAuLi5wbGFuLnN0YXR1cy5jaGFuZ2VkUGF0aHMubWFwKChwYXRoKSA9PiBgLSBcXGAke3BhdGh9XFxgYCkpO1xuICAgIGlmIChwbGFuLnN0YXR1cy50cnVuY2F0ZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gR2l0SHViIGxpc3RzIGF0IG1vc3QgJHtTdHJpbmcoQ09NUEFSRV9GSUxFX0xJTUlUKX0gZmlsZXM6IG9wZW4gdGhlIGNvbXBhcmUgbGluayBmb3IgdGhlIHJlc3QuYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgaWYgKHN0ZXBzID09PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEhhbmRsZXInLCAnJywgYFxcYCR7ZW50cnkuaGFuZGxlcn1cXGA6IG5vdCBydW4gKGRyeSBydW4pLmAsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnSGFuZGxlcicsIHN0ZXBzLmhhbmRsZXIpKTtcbiAgICBpZiAoc3RlcHMudmVyaWZ5ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnVmVyaWZ5Jywgc3RlcHMudmVyaWZ5KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpZmZTdGF0ICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEdlbmVyYXRlZCBjaGFuZ2VzJywgJycsICdgYGB0ZXh0JywgY2xlYW5Db21tYW5kT3V0cHV0KGRpZmZTdGF0KS50cmltRW5kKCksICdgYGAnLCAnJyk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCdUaGlzIFBSIHdhcyBvcGVuZWQgYnkgdGhlIHVwc3RyZWFtLXN5bmMgam9iIGFuZCBpcyBuZXZlciBtZXJnZWQgYXV0b21hdGljYWxseS4nKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbi8qKlxuICogVHVybnMgYSBjb21tYW5kJ3MgY2FwdHVyZWQgb3V0cHV0IGludG8gcGxhaW4gdGV4dCBhIFBSIGJvZHkgY2FuIHF1b3RlOiB0ZXJtaW5hbCBjb250cm9sIHNlcXVlbmNlcyBhcmUgcmVtb3ZlZCxcbiAqIHdoZXRoZXIgdGhleSBhcnJpdmVkIGFzIEVTQyBieXRlcyBvciBhcyB0aGVpciBjYXJldC1yZW5kZXJlZCBgXltbLi4ubWAgdGV4dCwgYW5kIGEgbGluZSBhIHByb2dyZXNzIGRpc3BsYXkgcmV3cm90ZVxuICogd2l0aCBgXFxyYCBrZWVwcyBvbmx5IGl0cyBsYXN0IHN0YXRlLlxuICpcbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgY2FwdHVyZWQgb3V0cHV0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNvbW1hbmRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gb3V0cHV0XG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQLCAnJylcbiAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHRvTGFzdExpbmVTdGF0ZShsaW5lKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgb25lIGVudHJ5IHdpdGggaXRzIHVwc3RyZWFtLlxuICpcbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgb3V0c2lkZSB3b3JsZC5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIGNvbXBhcmlzb24gZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBkZXBlbmRlbmNpZXM6IFBpY2s8U3luY0RlcGVuZGVuY2llcywgJ2ZldGNoSnNvbic+KTogUHJvbWlzZTxVcHN0cmVhbVN0YXR1cz4ge1xuICBpZiAoIWlzR2l0VXBzdHJlYW0oZW50cnkpKSB7XG4gICAgY29uc3QgdGFnID0gZW50cnkudGFnID8/ICdsYXRlc3QnO1xuICAgIGNvbnN0IHBhY2t1bWVudCA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7ZW50cnkubnBtLnJlcGxhY2UoJy8nLCAnJTJmJyl9YCkgYXMgTnBtUGFja3VtZW50O1xuICAgIGNvbnN0IGhlYWQgPSBwYWNrdW1lbnRbJ2Rpc3QtdGFncyddW3RhZ107XG4gICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBucG0gcGFja2FnZSAke2VudHJ5Lm5wbX0gaGFzIG5vIGRpc3QtdGFnIFwiJHt0YWd9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VkUGF0aHM6IFtdLFxuICAgICAgY29tcGFyZVVybDogYGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlLyR7ZW50cnkubnBtfS92LyR7aGVhZH1gLFxuICAgICAgZW50cnksXG4gICAgICBoZWFkLFxuICAgICAgcGluOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgc3RhdGU6IGhlYWQgPT09IGVudHJ5LnZlcnNpb24gPyAnY3VycmVudCcgOiAnbW92ZWQnLFxuICAgICAgdHJ1bmNhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21taXQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuZmV0Y2hKc29uKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7ZW50cnkucmVwb30vY29tbWl0cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbnRyeS5yZWYpfWApIGFzIEdpdEh1YkNvbW1pdDtcbiAgY29uc3QgaGVhZCA9IGNvbW1pdC5zaGE7XG4gIGNvbnN0IGNvbXBhcmVVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vY29tcGFyZS8ke2VudHJ5LmNvbW1pdH0uLi4ke2hlYWR9YDtcbiAgaWYgKGhlYWQgPT09IGVudHJ5LmNvbW1pdCkge1xuICAgIHJldHVybiB7IGNoYW5nZWRQYXRoczogW10sIGNvbXBhcmVVcmwsIGVudHJ5LCBoZWFkLCBwaW46IGVudHJ5LmNvbW1pdCwgc3RhdGU6ICdjdXJyZW50JywgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgY29tcGFyZSA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9jb21wYXJlLyR7ZW50cnkuY29tbWl0fS4uLiR7aGVhZH1gKSBhcyBHaXRIdWJDb21wYXJlO1xuICBjb25zdCBmaWxlcyA9IGNvbXBhcmUuZmlsZXMgPz8gW107XG4gIGNvbnN0IHRvdWNoZWQgPSBuZXcgU2V0KGZpbGVzLmZsYXRNYXAoKGZpbGUpID0+IGZpbGUucHJldmlvdXNfZmlsZW5hbWUgPT09IHVuZGVmaW5lZCA/IFtmaWxlLmZpbGVuYW1lXSA6IFtmaWxlLmZpbGVuYW1lLCBmaWxlLnByZXZpb3VzX2ZpbGVuYW1lXSkpO1xuICBjb25zdCBjaGFuZ2VkUGF0aHMgPSBbLi4udG91Y2hlZF0uZmlsdGVyKChwYXRoKSA9PiBlbnRyeS5wYXRocy5zb21lKChnbG9iKSA9PiBtYXRjaGVzR2xvYihwYXRoLCBnbG9iKSkpLnNvcnQoKTtcbiAgY29uc3QgaXNUcnVuY2F0ZWQgPSBmaWxlcy5sZW5ndGggPj0gQ09NUEFSRV9GSUxFX0xJTUlUO1xuICByZXR1cm4ge1xuICAgIGNoYW5nZWRQYXRocyxcbiAgICBjb21wYXJlVXJsLFxuICAgIGVudHJ5LFxuICAgIGhlYWQsXG4gICAgcGluOiBlbnRyeS5jb21taXQsXG4gICAgc3RhdGU6IGNoYW5nZWRQYXRocy5sZW5ndGggPiAwIHx8IGlzVHJ1bmNhdGVkID8gJ21vdmVkJyA6ICd1bndhdGNoZWQnLFxuICAgIHRydW5jYXRlZDogaXNUcnVuY2F0ZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhbiBgdXBzdHJlYW1zLmpzb25gLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIGZpbGUncyBjb250ZW50LlxuICogQHJldHVybnMgVGhlIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBzdHJlYW1zQ29uZmlnKHRleHQ6IHN0cmluZyk6IFVwc3RyZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGV4dCkgYXMgUGFydGlhbDxVcHN0cmVhbXNDb25maWc+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnVwc3RyZWFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1cHN0cmVhbXMuanNvbiBoYXMgbm8gXCJ1cHN0cmVhbXNcIiBhcnJheS4nKTtcbiAgfVxuICAvLyBSZWFkIHRocm91Z2ggYFJlZmxlY3QuZ2V0YCwgYmVjYXVzZSBub3RoaW5nIGFib3V0IHRoZSBwYXJzZWQgZW50cmllcyBpcyBrbm93biB5ZXQuXG4gIGNvbnN0IGVudHJpZXM6IHJlYWRvbmx5IG9iamVjdFtdID0gY29uZmlnLnVwc3RyZWFtcztcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5hbWU6IHVua25vd24gPSBSZWZsZWN0LmdldChlbnRyeSwgJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IGBcIiR7bmFtZX1cImAgOiAnd2l0aCBubyBuYW1lJztcbiAgICBjb25zdCBpc0dpdCA9ICdyZXBvJyBpbiBlbnRyeTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGlzR2l0ID8gWyduYW1lJywgJ3JlcG8nLCAncmVmJywgJ2NvbW1pdCcsICdoYW5kbGVyJ10gOiBbJ25hbWUnLCAnbnBtJywgJ3ZlcnNpb24nLCAnaGFuZGxlciddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QuZ2V0KGVudHJ5LCBrZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1cHN0cmVhbXMuanNvbjogZW50cnkgJHtsYWJlbH0gbmVlZHMgYSBzdHJpbmcgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzR2l0ICYmICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGVudHJ5LCAncGF0aHMnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb246IGVudHJ5ICR7bGFiZWx9IG5lZWRzIGEgXCJwYXRoc1wiIGFycmF5LmApO1xuICAgIH1cbiAgICBpZiAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uOiB0aGUgbmFtZSAke2xhYmVsfSBpcyB1c2VkIHR3aWNlLmApO1xuICAgIH1cbiAgICBuYW1lcy5hZGQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZyBhcyBVcHN0cmVhbXNDb25maWc7XG59XG5cbi8qKlxuICogUGxhbnMgdGhlIFBSIGEgbW92ZWQgdXBzdHJlYW0gYXNrcyBmb3IuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBjb21wYXJpc29uIG9mIGEgbW92ZWQgZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgYnJhbmNoIGFuZCB0aXRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYW5TeW5jKHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiBTeW5jUGxhbiB7XG4gIHJldHVybiB7XG4gICAgYnJhbmNoOiBgdXBzdHJlYW0vJHtzdGF0dXMuZW50cnkubmFtZX1gLFxuICAgIHN0YXR1cyxcbiAgICB0aXRsZTogYGNob3JlKHVwc3RyZWFtKTogc3luYyAke3N0YXR1cy5lbnRyeS5uYW1lfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgZXZlcnkgZW50cnksIGFuZCBvcGVucyBvciB1cGRhdGVzIG9uZSBQUiBwZXIgbW92ZWQgdXBzdHJlYW0uXG4gKlxuICogQSBoYW5kbGVyIG9yIHZlcmlmeSBmYWlsdXJlIHN0aWxsIG9wZW5zIHRoZSBQUiwgYXMgYSBkcmFmdCB3aXRoIHRoZSBmYWlsdXJlIGluIGl0cyBib2R5LCBzbyBhIGJyZWFraW5nIHVwc3RyZWFtIGNoYW5nZVxuICogaXMgc2VlbiByYXRoZXIgdGhhbiBza2lwcGVkLiBBbiBlcnJvciBpbiB0aGUgc3luYyBpdHNlbGYsIHN1Y2ggYXMgYSBmYWlsZWQgQVBJIGNhbGwsIGlzIHJlcG9ydGVkIGluIHRoZSBlbnRyeSdzIHJlc3VsdFxuICogYW5kIHRoZSBuZXh0IGVudHJ5IHN0aWxsIHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBXaGF0IHRvIHN5bmMsIGFuZCBob3cuXG4gKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIG91dHNpZGUgd29ybGQuXG4gKiBAcmV0dXJucyBPbmUgcmVzdWx0IHBlciBlbnRyeSBjaGVja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1Vwc3RyZWFtcyhvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogUHJvbWlzZTxTeW5jUmVzdWx0W10+IHtcbiAgY29uc3QgY29uZmlnID0gcGFyc2VVcHN0cmVhbXNDb25maWcocmVhZEZpbGVTeW5jKG9wdGlvbnMuY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICBjb25zdCB1bmtub3duID0gb3B0aW9ucy5vbmx5LmZpbHRlcigobmFtZSkgPT4gY29uZmlnLnVwc3RyZWFtcy5ldmVyeSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpKTtcbiAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb24gaGFzIG5vIGVudHJ5IG5hbWVkICR7dW5rbm93bi5tYXAoKG5hbWUpID0+IGBcIiR7bmFtZX1cImApLmpvaW4oJywgJyl9LmApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0czogU3luY1Jlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgY29uZmlnLnVwc3RyZWFtcykge1xuICAgIGlmIChvcHRpb25zLm9ubHkubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5vbmx5LmluY2x1ZGVzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCBzeW5jRW50cnkoZW50cnksIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBFUlJPUiAke21lc3NhZ2V9YCk7XG4gICAgICByZXN1bHRzLnB1c2goeyBlcnJvcjogbWVzc2FnZSwgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogUmVjb3JkcyBgaGVhZGAgYXMgdGhlIGVudHJ5J3MgcGluIGluIGB1cHN0cmVhbXMuanNvbmAsIHVubGVzcyB0aGUgaGFuZGxlciBhbHJlYWR5IG1vdmVkIGl0LCBrZWVwaW5nIHRoZSBmaWxlJ3NcbiAqIGtleSBvcmRlciBhbmQgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnUGF0aCAtIFRoZSBwYXRoIHRvIGB1cHN0cmVhbXMuanNvbmAuXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIGNvbXBhcmlzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBpbihjb25maWdQYXRoOiBzdHJpbmcsIHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiB2b2lkIHtcbiAgY29uc3QgdGV4dCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyBVcHN0cmVhbXNGaWxlU2hhcGU7XG4gIGNvbnN0IGtleSA9IGlzR2l0VXBzdHJlYW0oc3RhdHVzLmVudHJ5KSA/ICdjb21taXQnIDogJ3ZlcnNpb24nO1xuICBjb25zdCB0YXJnZXQgPSBwYXJzZWQudXBzdHJlYW1zLmZpbmQoKGVudHJ5KSA9PiBlbnRyeVsnbmFtZSddID09PSBzdGF0dXMuZW50cnkubmFtZSk7XG4gIGlmICh0YXJnZXQ/LltrZXldICE9PSBzdGF0dXMucGluKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRhcmdldFtrZXldID0gc3RhdHVzLmhlYWQ7XG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBKU09OX0lOREVOVF9TUEFDRVMpfVxcbmApO1xufVxuXG5mdW5jdGlvbiBhcHBseVBsYW4ocGxhbjogU3luY1BsYW4sIGNvbmZpZzogVXBzdHJlYW1zQ29uZmlnLCBvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogU3luY1Jlc3VsdCB7XG4gIGNvbnN0IHsgZW50cnkgfSA9IHBsYW4uc3RhdHVzO1xuICAvLyBObyBjb2xvcjogdGhlIG91dHB1dCBpcyBxdW90ZWQgaW4gYSBQUiBib2R5LCB3aGVyZSBhIGNvbG9yIGNvZGUgaXMgb25seSBub2lzZS4gYENJYCBpcyBsZWZ0IGFsb25lLCBiZWNhdXNlIGl0XG4gIC8vIGNoYW5nZXMgd2hhdCBzb21lIHRvb2xzIGRvLCBub3QganVzdCBob3cgdGhleSBwcmludC5cbiAgY29uc3QgZW52ID0geyBGT1JDRV9DT0xPUjogJzAnLCBOT19DT0xPUjogJzEnLCBVUFNUUkVBTV9OQU1FOiBlbnRyeS5uYW1lLCBVUFNUUkVBTV9UQVJHRVQ6IHBsYW4uc3RhdHVzLmhlYWQgfTtcbiAgY29uc3QgaGFuZGxlcjogU3RlcFJlc3VsdCA9IHsgY29tbWFuZDogZW50cnkuaGFuZGxlciwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwoZW50cnkuaGFuZGxlciwgZW52KSB9O1xuICB3cml0ZVBpbihvcHRpb25zLmNvbmZpZ1BhdGgsIHBsYW4uc3RhdHVzKTtcbiAgY29uc3QgdmVyaWZ5Q29tbWFuZCA9IGVudHJ5LnZlcmlmeSA/PyBjb25maWcudmVyaWZ5O1xuICBjb25zdCB2ZXJpZnk6IG51bGwgfCBTdGVwUmVzdWx0ID0gdmVyaWZ5Q29tbWFuZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHsgY29tbWFuZDogdmVyaWZ5Q29tbWFuZCwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwodmVyaWZ5Q29tbWFuZCwgZW52KSB9O1xuICBjb25zdCBpc0ZhaWxlZCA9IGhhbmRsZXIucmVzdWx0LmV4aXRDb2RlICE9PSAwIHx8ICh2ZXJpZnkgIT09IG51bGwgJiYgdmVyaWZ5LnJlc3VsdC5leGl0Q29kZSAhPT0gMCk7XG5cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydhZGQnLCAnLS1hbGwnXSk7XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnY29tbWl0JywgJy0tbm8tdmVyaWZ5JywgJy0tbWVzc2FnZScsIHBsYW4udGl0bGVdKTtcbiAgY29uc3QgZGlmZlN0YXQgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2RpZmYnLCAnLS1zdGF0JywgJ0hFQUR+MScsICdIRUFEJ10pO1xuXG4gIGNvbnN0IGJvZHkgPSBidWlsZFByQm9keShwbGFuLCB7IGhhbmRsZXIsIHZlcmlmeSB9LCBkaWZmU3RhdCk7XG4gIGNvbnN0IGlzUmVtb3RlQnJhbmNoID0gZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnbHMtcmVtb3RlJywgJy0tZXhpdC1jb2RlJywgJy0taGVhZHMnLCAnb3JpZ2luJywgcGxhbi5icmFuY2hdKS5leGl0Q29kZSA9PT0gMDtcbiAgaWYgKGlzUmVtb3RlQnJhbmNoKSB7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBwbGFuLmJyYW5jaF0pO1xuICAgIGlmIChkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydkaWZmJywgJy0tcXVpZXQnLCAnRkVUQ0hfSEVBRCcsICdIRUFEJ10pLmV4aXRDb2RlID09PSAwKSB7XG4gICAgICAvLyBUaGUgYm9keSBpcyBzdGlsbCByZXdyaXR0ZW4sIHNvIGEgY2hhbmdlIHRvIGhvdyBpdCBpcyB3cml0dGVuIHJlYWNoZXMgYSBQUiB3aG9zZSBicmFuY2ggaGFzIG5vdCBtb3ZlZC5cbiAgICAgIGNvbnN0IG9wZW4gPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICAgICAgaWYgKG9wZW4gIT09IG51bGwpIHtcbiAgICAgICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBvcGVuLCAnLS1ib2R5JywgYm9keV0pO1xuICAgICAgfVxuICAgICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogJHtwbGFuLmJyYW5jaH0gYWxyZWFkeSBob2xkcyB0aGlzIHJlc3VsdDsgbm90aGluZyBwdXNoZWQke29wZW4gPT09IG51bGwgPyAnJyA6IGAsIFBSICMke29wZW59J3MgYm9keSByZXdyaXR0ZW5gfS5gKTtcbiAgICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bmNoYW5nZWQnIH07XG4gICAgfVxuICB9XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsncHVzaCcsICctLWZvcmNlJywgJ29yaWdpbicsIGBIRUFEOnJlZnMvaGVhZHMvJHtwbGFuLmJyYW5jaH1gXSk7XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICBpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcbiAgICBjb25zdCBwck51bWJlciA9IE51bWJlcihleGlzdGluZyk7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBleGlzdGluZywgJy0tdGl0bGUnLCBwbGFuLnRpdGxlLCAnLS1ib2R5JywgYm9keV0pO1xuICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgaXNGYWlsZWQgPyBbJ3ByJywgJ3JlYWR5JywgZXhpc3RpbmcsICctLXVuZG8nXSA6IFsncHInLCAncmVhZHknLCBleGlzdGluZ10pO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IHVwZGF0ZWQgUFIgIyR7ZXhpc3Rpbmd9JHtpc0ZhaWxlZCA/ICcgKGRyYWZ0OiBhIHN0ZXAgZmFpbGVkKScgOiAnJ30uYCk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3VwZGF0ZWQnLCBwck51bWJlciB9O1xuICB9XG5cbiAgY29uc3QgdXJsID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbXG4gICAgJ3ByJyxcbiAgICAnY3JlYXRlJyxcbiAgICAnLS1iYXNlJyxcbiAgICBvcHRpb25zLmJhc2VCcmFuY2gsXG4gICAgJy0taGVhZCcsXG4gICAgcGxhbi5icmFuY2gsXG4gICAgJy0tdGl0bGUnLFxuICAgIHBsYW4udGl0bGUsXG4gICAgJy0tYm9keScsXG4gICAgYm9keSxcbiAgICAuLi4oaXNGYWlsZWQgPyBbJy0tZHJhZnQnXSA6IFtdKVxuICBdKS50cmltKCk7XG4gIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG9wZW5lZCAke3VybH0ke2lzRmFpbGVkID8gJyAoZHJhZnQ6IGEgc3RlcCBmYWlsZWQpJyA6ICcnfS5gKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBOdW1iZXIoL1xcL3B1bGxcXC8oPzxOdW1iZXI+XFxkKykvLmV4ZWModXJsKT8uZ3JvdXBzPy5bJ051bWJlciddID8/IE5hTik7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocHJOdW1iZXIpID8geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJyB9IDogeyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJywgcHJOdW1iZXIgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVTdGVwKGhlYWRpbmc6IHN0cmluZywgc3RlcDogU3RlcFJlc3VsdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaXNQYXNzZWQgPSBzdGVwLnJlc3VsdC5leGl0Q29kZSA9PT0gMDtcbiAgY29uc3Qgb3V0cHV0TGluZXMgPSBjbGVhbkNvbW1hbmRPdXRwdXQoc3RlcC5yZXN1bHQub3V0cHV0KS50cmltRW5kKCkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0YWlsID0gb3V0cHV0TGluZXMuc2xpY2UoLU9VVFBVVF9UQUlMX0xJTkVTKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmFpbHVyZUxpbmVzID0gaXNQYXNzZWQgPyBbXSA6IG91dHB1dExpbmVzLmZpbHRlcigobGluZSkgPT4gRkFJTFVSRV9MSU5FX1JFR19FWFAudGVzdChsaW5lKSkuc2xpY2UoMCwgRkFJTFVSRV9MSU5FX0xJTUlUKTtcbiAgcmV0dXJuIFtcbiAgICBgIyMjICR7aGVhZGluZ31gLFxuICAgICcnLFxuICAgIGBcXGAke3N0ZXAuY29tbWFuZH1cXGA6ICR7aXNQYXNzZWQgPyAncGFzc2VkJyA6IGAqKkZBSUxFRCoqIChleGl0ICR7U3RyaW5nKHN0ZXAucmVzdWx0LmV4aXRDb2RlKX0pYH0uYCxcbiAgICAnJyxcbiAgICAuLi4oZmFpbHVyZUxpbmVzLmxlbmd0aCA9PT0gMCA/IFtdIDogWydMaW5lcyByZXBvcnRpbmcgdGhlIGZhaWx1cmU6JywgJycsICdgYGB0ZXh0JywgLi4uZmFpbHVyZUxpbmVzLCAnYGBgJywgJyddKSxcbiAgICBpc1Bhc3NlZCA/ICc8ZGV0YWlscz48c3VtbWFyeT5PdXRwdXQ8L3N1bW1hcnk+JyA6ICc8ZGV0YWlscyBvcGVuPjxzdW1tYXJ5Pk91dHB1dDwvc3VtbWFyeT4nLFxuICAgICcnLFxuICAgICdgYGB0ZXh0JyxcbiAgICB0YWlsLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgICc8L2RldGFpbHM+JyxcbiAgICAnJ1xuICBdO1xufVxuXG5mdW5jdGlvbiBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMsIGZpbGU6IHN0cmluZywgYXJndW1lbnRzXzogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBkZXBlbmRlbmNpZXMuZXhlYyhmaWxlLCBhcmd1bWVudHNfKTtcbiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWxlfSAke2FyZ3VtZW50c18uam9pbignICcpfSBmYWlsZWQgKGV4aXQgJHtTdHJpbmcocmVzdWx0LmV4aXRDb2RlKX0pOiAke3Jlc3VsdC5vdXRwdXQudHJpbSgpfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmaW5kT3BlblByKGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcywgYnJhbmNoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgbnVtYmVyID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2xpc3QnLCAnLS1oZWFkJywgYnJhbmNoLCAnLS1zdGF0ZScsICdvcGVuJywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcuWzBdLm51bWJlciddKS50cmltKCk7XG4gIHJldHVybiBudW1iZXIgPT09ICcnIHx8IG51bWJlciA9PT0gJ251bGwnID8gbnVsbCA6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNHaXRVcHN0cmVhbShlbnRyeTogVXBzdHJlYW1FbnRyeSk6IGVudHJ5IGlzIEdpdFVwc3RyZWFtRW50cnkge1xuICByZXR1cm4gJ3JlcG8nIGluIGVudHJ5O1xufVxuXG5mdW5jdGlvbiBzaG9ydGVuKGhlYWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAvXlswLTlhLWZdezQwfSQvLnRlc3QoaGVhZCkgPyBoZWFkLnNsaWNlKDAsIFNIT1JUX1NIQV9MRU5HVEgpIDogaGVhZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3luY0VudHJ5KGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBjb25maWc6IFVwc3RyZWFtc0NvbmZpZywgb3B0aW9uczogU3luY1Vwc3RyZWFtc09wdGlvbnMsIGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcyk6IFByb21pc2U8U3luY1Jlc3VsdD4ge1xuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5LCBkZXBlbmRlbmNpZXMpO1xuICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY3VycmVudCcpIHtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBjdXJyZW50IGF0ICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdjdXJyZW50JyB9O1xuICB9XG4gIGlmIChzdGF0dXMuc3RhdGUgPT09ICd1bndhdGNoZWQnKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogbW92ZWQgdG8gJHtzaG9ydGVuKHN0YXR1cy5oZWFkKX0sIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZCBzaW5jZSAke3Nob3J0ZW4oc3RhdHVzLnBpbil9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bndhdGNoZWQnIH07XG4gIH1cblxuICBjb25zdCBwbGFuID0gcGxhblN5bmMoc3RhdHVzKTtcbiAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogbW92ZWQgZnJvbSAke3Nob3J0ZW4oc3RhdHVzLnBpbil9IHRvICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LiBXb3VsZCBwdXNoICR7cGxhbi5icmFuY2h9IGFuZCBvcGVuOmApO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCAgdGl0bGU6ICR7cGxhbi50aXRsZX1gKTtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGJ1aWxkUHJCb2R5KHBsYW4sIG51bGwsIG51bGwpLnJlcGxhY2VBbGwoL14vZ20sICcgIHwgJykpO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdwbGFubmVkJyB9O1xuICB9XG5cbiAgLy8gVGhlIHVwZGF0ZSBjb21taXQgdGFrZXMgZXZlcnkgZmlsZSBpbiB0aGUgdHJlZSwgc28gYSBmaWxlIGxlZnQgbHlpbmcgYXJvdW5kIHdvdWxkIGJlIHB1c2hlZCB3aXRoIGl0LlxuICBjb25zdCBkaXJ0eSA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnc3RhdHVzJywgJy0tcG9yY2VsYWluJ10pLnRyaW0oKTtcbiAgaWYgKGRpcnR5ICE9PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgdGhlIHdvcmtpbmcgdHJlZSBpcyBub3QgY2xlYW4sIGFuZCB0aGUgdXBkYXRlIGNvbW1pdCB3b3VsZCB0YWtlIHRoZXNlIGZpbGVzIHdpdGggaXQ6XFxuJHtkaXJ0eX1gKTtcbiAgfVxuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2ZldGNoJywgJ29yaWdpbicsIG9wdGlvbnMuYmFzZUJyYW5jaF0pO1xuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2NoZWNrb3V0JywgJy1CJywgcGxhbi5icmFuY2gsIGBvcmlnaW4vJHtvcHRpb25zLmJhc2VCcmFuY2h9YF0pO1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseVBsYW4ocGxhbiwgY29uZmlnLCBvcHRpb25zLCBkZXBlbmRlbmNpZXMpO1xuICB9IGZpbmFsbHkge1xuICAgIGRlcGVuZGVuY2llcy5leGVjKCdnaXQnLCBbJ2NoZWNrb3V0JywgJy0tZm9yY2UnLCBvcHRpb25zLmJhc2VCcmFuY2hdKTtcbiAgICBkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydicmFuY2gnLCAnLS1kZWxldGUnLCAnLS1mb3JjZScsIHBsYW4uYnJhbmNoXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9MYXN0TGluZVN0YXRlKGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXRlcyA9IGxpbmUucmVwbGFjZSgvXFxyKyQvLCAnJyk7XG4gIHJldHVybiBzdGF0ZXMuc2xpY2Uoc3RhdGVzLmxhc3RJbmRleE9mKCdcXHInKSArIDEpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFTQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUJBQW1CO0FBMk41QixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLG1CQUFtQjtBQUt6QixNQUFNLG9CQUFvQjtBQUsxQixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLHFCQUFxQjtBQU0zQixNQUFNLE1BQU0sT0FBTztBQU9uQixNQUFNLDJCQUEyQixJQUFJO0FBQUEsRUFDbkMsT0FBTyxNQUFNLEdBQUcsdUJBQXVCLEdBQUcsb0NBQW9DLEdBQUc7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
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Vwc3RyZWFtLXN5bmMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXYXRjaGVzIHRoZSB1cHN0cmVhbXMgYSByZXBvc2l0b3J5IG1pcnJvcnMgYW5kIG9wZW5zIG9uZSB1cGRhdGUgUFIgcGVyIHVwc3RyZWFtIHRoYXQgbW92ZWQuXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIGRyaXZlbiBieSBgdXBzdHJlYW1zLmpzb25gIGFuZCB0aGUgaGFuZGxlciBjb21tYW5kcyBpdCBuYW1lcywgc28gYW55IHJlcG9zaXRvcnkgdGhhdCB2ZW5kb3JzXG4gKiB1cHN0cmVhbSBjb2RlIGNhbiB1c2UgaXQ6IHRocm91Z2ggdGhlIGBzeW5jLXVwc3RyZWFtc2AgYmluLCBvciB0aGUgcmV1c2FibGUgYHN5bmMtdXBzdHJlYW1zLnltbGAgd29ya2Zsb3cuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWF0Y2hlc0dsb2IgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFdoYXQgYSBjb21tYW5kIHByaW50ZWQgYW5kIGhvdyBpdCBleGl0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdCB7XG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIG9uIGEgR2l0SHViIGJyYW5jaCBvciB0YWcsIHBpbm5lZCB0byBhIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgY29tbWl0OiB0aGUgbGFzdCB1cHN0cmVhbSBzdGF0ZSB0aGUgaGFuZGxlciB3YXMgcnVuIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBjb21taXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgdHVybnMgYSBuZXdlciB1cHN0cmVhbSBzdGF0ZSBpbnRvIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgd2F0Y2hlZCB1cHN0cmVhbSwgYXMgZ2xvYnMgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gQSBtb3ZlIHRoYXQgdG91Y2hlcyBub25lIG9mIHRoZW0gb3BlbnMgbm8gUFIuXG4gICAqL1xuICByZWFkb25seSBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIG9yIHRhZyBmb2xsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZjogc3RyaW5nO1xuICAvKipcbiAgICogYDxvd25lcj4vPHJlcG8+YCBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgaGFuZGxlcidzIHJlc3VsdC4gT3ZlcnJpZGVzIHRoZSBmaWxlJ3MgdG9wLWxldmVsIGB2ZXJpZnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIGFzIGFuIG5wbSBwYWNrYWdlJ3MgZGlzdC10YWcsIHBpbm5lZCB0byBhIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtVXBzdHJlYW1FbnRyeSB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5wbTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRpc3QtdGFnIGZvbGxvd2VkLiBgbGF0ZXN0YCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBpbm5lZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgdGhlIHN5bmMgZG9lcyB0byB0aGUgb3V0c2lkZSB3b3JsZCwgc28gYSB0ZXN0IGNhbiBzdGFuZCBhIGZpeHR1cmUgaW4gZm9yIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNEZXBlbmRlbmNpZXMge1xuICAvKipcbiAgICogUnVucyBhbiBleGVjdXRhYmxlIHdpdGggYXJndW1lbnRzIGFuZCBubyBzaGVsbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWM6IChmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdLCBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4gQ29tbWFuZFJlc3VsdDtcbiAgLyoqXG4gICAqIEdFVHMgYSBVUkwgYW5kIHBhcnNlcyB0aGUgSlNPTiBpdCByZXR1cm5zLCB0aHJvd2luZyBvbiBhbiBIVFRQIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hKc29uOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRvbmx5IGxvZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgc2hlbGw6IGEgaGFuZGxlciBvciBhIHZlcmlmeSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGw6IChjb21tYW5kOiBzdHJpbmcsIGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSA9PiBDb21tYW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBQUiBhbiB1cHN0cmVhbSBtb3ZlIGFza3MgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNQbGFuIHtcbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1czogVXBzdHJlYW1TdGF0dXM7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBoYXBwZW5lZCB0byBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBjaGVja2luZyBvciBhcHBseWluZyB0aHJldzogdGhlIGpvYiByZXBvcnRzIGl0IGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgcGxhbm5lZGAgaW4gYSBkcnkgcnVuLCBgb3BlbmVkYC9gdXBkYXRlZGAgd2hlbiBhIFBSIHdhcyBwdXNoZWQsIGB1bmNoYW5nZWRgIHdoZW4gdGhlIGJyYW5jaCBhbHJlYWR5IGhlbGQgdGhpcyByZXN1bHQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiAnY3VycmVudCcgfCAnZXJyb3InIHwgJ29wZW5lZCcgfCAncGxhbm5lZCcgfCAndW5jaGFuZ2VkJyB8ICd1bndhdGNoZWQnIHwgJ3VwZGF0ZWQnO1xuICByZWFkb25seSBwck51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzeW5jVXBzdHJlYW1zfSBzeW5jcywgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW5jVXBzdHJlYW1zT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIGVhY2ggUFIgdGFyZ2V0cyBhbmQgZWFjaCB1cGRhdGUgYnJhbmNoIGlzIGN1dCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gYHVwc3RyZWFtcy5qc29uYCwgd2hpY2ggdGhlIHN5bmMgdXBkYXRlcyB0aGUgcGluIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGxhbiBhbmQgcHJpbnQgZXZlcnkgUFIsIGFuZCBjaGFuZ2Ugbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9ubHkgdGhlIGVudHJpZXMgd2l0aCB0aGVzZSBuYW1lcywgb3IgZXZlcnkgZW50cnkgd2hlbiBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IG9ubHk6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSB1cHN0cmVhbSB0aGF0IGB1cHN0cmVhbXMuanNvbmAgbGlzdHM6IGEgZ2l0IG9uZSBvciBhbiBucG0gb25lLlxuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbUVudHJ5ID0gR2l0VXBzdHJlYW1FbnRyeSB8IE5wbVVwc3RyZWFtRW50cnk7XG5cbi8qKlxuICogVGhlIGNvbnRlbnQgb2YgYHVwc3RyZWFtcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHN0cmVhbXNDb25maWcge1xuICByZWFkb25seSB1cHN0cmVhbXM6IHJlYWRvbmx5IFVwc3RyZWFtRW50cnlbXTtcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgY2hlY2tzIGV2ZXJ5IGhhbmRsZXIncyByZXN1bHQsIHVubGVzcyBhbiBlbnRyeSBuYW1lcyBpdHMgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgb25lIGNvbXBhcmlzb24gb2YgYW4gZW50cnkgd2l0aCBpdHMgdXBzdHJlYW0gZm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzdHJlYW1TdGF0dXMge1xuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIHBhdGhzIHRoYXQgY2hhbmdlZCBhbmQgYXJlIHdhdGNoZWQsIHNvcnRlZC4gQWx3YXlzIGVtcHR5IGZvciBhbiBucG0gdXBzdHJlYW0uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VkUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQSBsaW5rIHRoYXQgc2hvd3Mgd2hhdCBjaGFuZ2VkIGJldHdlZW4gdGhlIHBpbiBhbmQgdGhlIGhlYWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXJlVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudHJ5OiBVcHN0cmVhbUVudHJ5O1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBvciB2ZXJzaW9uIHRoZSB1cHN0cmVhbSBpcyBhdCBub3cuXG4gICAqL1xuICByZWFkb25seSBoZWFkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG9yIHZlcnNpb24gYHVwc3RyZWFtcy5qc29uYCByZWNvcmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGluOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgY3VycmVudGA6IG5vdGhpbmcgdG8gZG8uIGBtb3ZlZGA6IGEgUFIgaXMgZHVlLiBgdW53YXRjaGVkYDogdXBzdHJlYW0gbW92ZWQsIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiAnY3VycmVudCcgfCAnbW92ZWQnIHwgJ3Vud2F0Y2hlZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEdpdEh1YiB0cnVuY2F0ZWQgdGhlIGNvbXBhcmUncyBmaWxlIGxpc3QsIHNvIGEgd2F0Y2hlZCBwYXRoIG1heSBiZSBtaXNzaW5nIGZyb20gYGNoYW5nZWRQYXRoc2AuXG4gICAqL1xuICByZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBHaXRIdWJDb21taXQge1xuICByZWFkb25seSBzaGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YkNvbXBhcmUge1xuICByZWFkb25seSBmaWxlcz86IHJlYWRvbmx5IEdpdEh1YkNvbXBhcmVGaWxlW107XG59XG5cbi8qKlxuICogT25lIGZpbGUgb2YgYSBHaXRIdWIgY29tcGFyZSwgYXMgdGhlIEFQSSBzcGVsbHMgaXQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJDb21wYXJlRmlsZSB7XG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgcHJldmlvdXNfZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOcG1QYWNrdW1lbnQge1xuICByZWFkb25seSAnZGlzdC10YWdzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBSZXN1bHQge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdDogQ29tbWFuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxlciBhbmQgdmVyaWZ5IHJ1bnMgYSBQUiBib2R5IHJlcG9ydHMuXG4gKi9cbmludGVyZmFjZSBTdGVwUmVzdWx0cyB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IFN0ZXBSZXN1bHQ7XG4gIHJlYWRvbmx5IHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQ7XG59XG5cbi8qKlxuICogYHVwc3RyZWFtcy5qc29uYCByZWFkIGxvb3NlbHksIHRvIHdyaXRlIG9uZSB2YWx1ZSBiYWNrIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgcmVzdC5cbiAqL1xuaW50ZXJmYWNlIFVwc3RyZWFtc0ZpbGVTaGFwZSB7XG4gIHJlYWRvbmx5IHVwc3RyZWFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBHaXRIdWIncyBjb21wYXJlIEFQSSBsaXN0cyBhdCBtb3N0IHRoaXMgbWFueSBmaWxlcywgYW5kIHNheXMgbm90aGluZyB3aGVuIGl0IHN0b3BzLlxuICovXG5jb25zdCBDT01QQVJFX0ZJTEVfTElNSVQgPSAzMDA7XG5cbmNvbnN0IFNIT1JUX1NIQV9MRU5HVEggPSAxMjtcblxuLyoqXG4gKiBUaGUgdGFpbCBvZiBhIGNvbW1hbmQncyBvdXRwdXQgYSBQUiBib2R5IHF1b3RlczogZW5vdWdoIHRvIHJlYWQgYSBmYWlsdXJlLCBzaG9ydCBlbm91Z2ggdG8gc3RheSB1bmRlciBHaXRIdWIncyBib2R5IGxpbWl0LlxuICovXG5jb25zdCBPVVRQVVRfVEFJTF9MSU5FUyA9IDYwO1xuXG4vKipcbiAqIFRoZSBtb3N0IGxpbmVzIHRoYXQgcmVwb3J0IGEgZmFpbHVyZSBhIGZhaWxlZCBzdGVwJ3Mgc2VjdGlvbiBvcGVucyB3aXRoLCBhaGVhZCBvZiBpdHMgb3V0cHV0IHRhaWwuXG4gKi9cbmNvbnN0IEZBSUxVUkVfTElORV9MSU1JVCA9IDIwO1xuXG5jb25zdCBKU09OX0lOREVOVF9TUEFDRVMgPSAyO1xuXG4vKipcbiAqIFRoZSBFU0MgdGhhdCBvcGVucyBhIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UsIGVpdGhlciBhcyB0aGUgYnl0ZSBvciBhcyB0aGUgY2FyZXQgdGV4dCBgXltgIGEgbG9nIHZpZXdlciBvciBhblxuICogZWFybGllciBjb3B5IHR1cm5lZCBpdCBpbnRvLiBCb3RoIHJlYWNoZWQgYSBQUiBib2R5OiBjcmVhdGUtb2JzaWRpYW4tcGx1Z2luIzIgY2FycmllZCB0aGUgY2FyZXQgZm9ybS5cbiAqL1xuY29uc3QgRVNDID0gU3RyaW5nLnJhd2AoPzpcXHUwMDFCfFxcXlxcWylgO1xuXG4vKipcbiAqIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciBzZXF1ZW5jZXMgKGNvbG9ycywgY3Vyc29yIG1vdmVzKSwgT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kIHNlcXVlbmNlcyAoaHlwZXJsaW5rcyxcbiAqIHRpdGxlcywgZW5kZWQgYnkgQkVMIG9yIFNULCBhbHNvIGFzIGBeR2ApLCBhbmQgdGhlIHR3by1jaGFyYWN0ZXIgZXNjYXBlcy4gQSB0d28tY2hhcmFjdGVyIGVzY2FwZSBpcyBtYXRjaGVkIG9ubHkgYXNcbiAqIHRoZSBieXRlLCBiZWNhdXNlIGl0cyBjYXJldCB0ZXh0IGFsc28gc3BlbGxzIGFuIG9yZGluYXJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiwgc3VjaCBhcyBgXltBLVpdYC5cbiAqL1xuY29uc3QgVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQID0gbmV3IFJlZ0V4cChcbiAgU3RyaW5nLnJhd2Ake0VTQ31cXFtbMC0/XSpbIC0vXSpbQC1+XXwke0VTQ31cXF1bXlxcdTAwMDdcXHUwMDFCXl0qKD86XFx1MDAwN3xcXF5HfCR7RVNDfVxcXFwpfFxcdTAwMUJbQC1aXFxcXC1fXWAsXG4gICdnJ1xuKTtcblxuLyoqXG4gKiBBIGxpbmUgdGhhdCByZXBvcnRzIGEgZmFpbHVyZSwgd2hpY2ggYSBmYWlsZWQgc3RlcCdzIHNlY3Rpb24gcXVvdGVzIGZpcnN0LCBiZWNhdXNlIHRoZSB0YWlsIG1heSBiZSBhIGdyZWVuIHRlc3QgcnVuXG4gKiB0aGF0IGZpbmlzaGVkIGFmdGVyIGl0LlxuICovXG5jb25zdCBGQUlMVVJFX0xJTkVfUkVHX0VYUCA9IC9zdGVwLWZhaWxlZHxcXGJmYWlsKD86c3xlZHx1cmV8aW5nKT9cXGJ8XFxiZXJyb3JcXGJ8XFxibm90IGZvdW5kXFxifFxcYkVSUiF8W1x1MjcxN1x1MDBEN10vaTtcblxuLyoqXG4gKiBXcml0ZXMgdGhlIFBSIGJvZHkuXG4gKlxuICogQHBhcmFtIHBsYW4gLSBUaGUgcGxhbi5cbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBoYW5kbGVyIGFuZCB2ZXJpZnkgcnVucywgb3IgYG51bGxgIGluIGEgZHJ5IHJ1biwgd2hlcmUgbmVpdGhlciBydW5zLlxuICogQHBhcmFtIGRpZmZTdGF0IC0gYGdpdCBkaWZmIC0tc3RhdGAgb2YgdGhlIHVwZGF0ZSBjb21taXQsIG9yIGBudWxsYCBpbiBhIGRyeSBydW4uXG4gKiBAcmV0dXJucyBUaGUgYm9keSwgaW4gTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByQm9keShwbGFuOiBTeW5jUGxhbiwgc3RlcHM6IG51bGwgfCBTdGVwUmVzdWx0cywgZGlmZlN0YXQ6IG51bGwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB7IGVudHJ5LCBoZWFkLCBwaW4gfSA9IHBsYW4uc3RhdHVzO1xuICBjb25zdCBzb3VyY2UgPSBpc0dpdFVwc3RyZWFtKGVudHJ5KSA/IGBcXGAke2VudHJ5LnJlcG99QCR7ZW50cnkucmVmfVxcYGAgOiBgbnBtIFxcYCR7ZW50cnkubnBtfUAke2VudHJ5LnRhZyA/PyAnbGF0ZXN0J31cXGBgO1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgVXBzdHJlYW0gXFxgJHtlbnRyeS5uYW1lfVxcYCBtb3ZlZDogJHtzb3VyY2V9IGZyb20gXFxgJHtwaW59XFxgIHRvIFxcYCR7aGVhZH1cXGAuYCxcbiAgICAnJyxcbiAgICBgQ29tcGFyZTogJHtwbGFuLnN0YXR1cy5jb21wYXJlVXJsfWAsXG4gICAgJydcbiAgXTtcblxuICBpZiAoaXNHaXRVcHN0cmVhbShlbnRyeSkpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgQ2hhbmdlZCB1cHN0cmVhbSBmaWxlcycsICcnLCAuLi5wbGFuLnN0YXR1cy5jaGFuZ2VkUGF0aHMubWFwKChwYXRoKSA9PiBgLSBcXGAke3BhdGh9XFxgYCkpO1xuICAgIGlmIChwbGFuLnN0YXR1cy50cnVuY2F0ZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gR2l0SHViIGxpc3RzIGF0IG1vc3QgJHtTdHJpbmcoQ09NUEFSRV9GSUxFX0xJTUlUKX0gZmlsZXM6IG9wZW4gdGhlIGNvbXBhcmUgbGluayBmb3IgdGhlIHJlc3QuYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgaWYgKHN0ZXBzID09PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEhhbmRsZXInLCAnJywgYFxcYCR7ZW50cnkuaGFuZGxlcn1cXGA6IG5vdCBydW4gKGRyeSBydW4pLmAsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnSGFuZGxlcicsIHN0ZXBzLmhhbmRsZXIpKTtcbiAgICBpZiAoc3RlcHMudmVyaWZ5ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnVmVyaWZ5Jywgc3RlcHMudmVyaWZ5KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpZmZTdGF0ICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEdlbmVyYXRlZCBjaGFuZ2VzJywgJycsICdgYGB0ZXh0JywgY2xlYW5Db21tYW5kT3V0cHV0KGRpZmZTdGF0KS50cmltRW5kKCksICdgYGAnLCAnJyk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCdUaGlzIFBSIHdhcyBvcGVuZWQgYnkgdGhlIHVwc3RyZWFtLXN5bmMgam9iIGFuZCBpcyBuZXZlciBtZXJnZWQgYXV0b21hdGljYWxseS4nKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbi8qKlxuICogVHVybnMgYSBjb21tYW5kJ3MgY2FwdHVyZWQgb3V0cHV0IGludG8gcGxhaW4gdGV4dCBhIFBSIGJvZHkgY2FuIHF1b3RlOiB0ZXJtaW5hbCBjb250cm9sIHNlcXVlbmNlcyBhcmUgcmVtb3ZlZCxcbiAqIHdoZXRoZXIgdGhleSBhcnJpdmVkIGFzIEVTQyBieXRlcyBvciBhcyB0aGVpciBjYXJldC1yZW5kZXJlZCBgXltbLi4ubWAgdGV4dCwgYW5kIGEgbGluZSBhIHByb2dyZXNzIGRpc3BsYXkgcmV3cm90ZVxuICogd2l0aCBgXFxyYCBrZWVwcyBvbmx5IGl0cyBsYXN0IHN0YXRlLlxuICpcbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgY2FwdHVyZWQgb3V0cHV0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNvbW1hbmRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gb3V0cHV0XG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQLCAnJylcbiAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHRvTGFzdExpbmVTdGF0ZShsaW5lKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgb25lIGVudHJ5IHdpdGggaXRzIHVwc3RyZWFtLlxuICpcbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgb3V0c2lkZSB3b3JsZC5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIGNvbXBhcmlzb24gZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBkZXBlbmRlbmNpZXM6IFBpY2s8U3luY0RlcGVuZGVuY2llcywgJ2ZldGNoSnNvbic+KTogUHJvbWlzZTxVcHN0cmVhbVN0YXR1cz4ge1xuICBpZiAoIWlzR2l0VXBzdHJlYW0oZW50cnkpKSB7XG4gICAgY29uc3QgdGFnID0gZW50cnkudGFnID8/ICdsYXRlc3QnO1xuICAgIGNvbnN0IHBhY2t1bWVudCA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7ZW50cnkubnBtLnJlcGxhY2UoJy8nLCAnJTJmJyl9YCkgYXMgTnBtUGFja3VtZW50O1xuICAgIGNvbnN0IGhlYWQgPSBwYWNrdW1lbnRbJ2Rpc3QtdGFncyddW3RhZ107XG4gICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBucG0gcGFja2FnZSAke2VudHJ5Lm5wbX0gaGFzIG5vIGRpc3QtdGFnIFwiJHt0YWd9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VkUGF0aHM6IFtdLFxuICAgICAgY29tcGFyZVVybDogYGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlLyR7ZW50cnkubnBtfS92LyR7aGVhZH1gLFxuICAgICAgZW50cnksXG4gICAgICBoZWFkLFxuICAgICAgcGluOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgc3RhdGU6IGhlYWQgPT09IGVudHJ5LnZlcnNpb24gPyAnY3VycmVudCcgOiAnbW92ZWQnLFxuICAgICAgdHJ1bmNhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21taXQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuZmV0Y2hKc29uKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7ZW50cnkucmVwb30vY29tbWl0cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbnRyeS5yZWYpfWApIGFzIEdpdEh1YkNvbW1pdDtcbiAgY29uc3QgaGVhZCA9IGNvbW1pdC5zaGE7XG4gIGNvbnN0IGNvbXBhcmVVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vY29tcGFyZS8ke2VudHJ5LmNvbW1pdH0uLi4ke2hlYWR9YDtcbiAgaWYgKGhlYWQgPT09IGVudHJ5LmNvbW1pdCkge1xuICAgIHJldHVybiB7IGNoYW5nZWRQYXRoczogW10sIGNvbXBhcmVVcmwsIGVudHJ5LCBoZWFkLCBwaW46IGVudHJ5LmNvbW1pdCwgc3RhdGU6ICdjdXJyZW50JywgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgY29tcGFyZSA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9jb21wYXJlLyR7ZW50cnkuY29tbWl0fS4uLiR7aGVhZH1gKSBhcyBHaXRIdWJDb21wYXJlO1xuICBjb25zdCBmaWxlcyA9IGNvbXBhcmUuZmlsZXMgPz8gW107XG4gIGNvbnN0IHRvdWNoZWQgPSBuZXcgU2V0KGZpbGVzLmZsYXRNYXAoKGZpbGUpID0+IGZpbGUucHJldmlvdXNfZmlsZW5hbWUgPT09IHVuZGVmaW5lZCA/IFtmaWxlLmZpbGVuYW1lXSA6IFtmaWxlLmZpbGVuYW1lLCBmaWxlLnByZXZpb3VzX2ZpbGVuYW1lXSkpO1xuICBjb25zdCBjaGFuZ2VkUGF0aHMgPSBbLi4udG91Y2hlZF0uZmlsdGVyKChwYXRoKSA9PiBlbnRyeS5wYXRocy5zb21lKChnbG9iKSA9PiBtYXRjaGVzR2xvYihwYXRoLCBnbG9iKSkpLnNvcnQoKTtcbiAgY29uc3QgaXNUcnVuY2F0ZWQgPSBmaWxlcy5sZW5ndGggPj0gQ09NUEFSRV9GSUxFX0xJTUlUO1xuICByZXR1cm4ge1xuICAgIGNoYW5nZWRQYXRocyxcbiAgICBjb21wYXJlVXJsLFxuICAgIGVudHJ5LFxuICAgIGhlYWQsXG4gICAgcGluOiBlbnRyeS5jb21taXQsXG4gICAgc3RhdGU6IGNoYW5nZWRQYXRocy5sZW5ndGggPiAwIHx8IGlzVHJ1bmNhdGVkID8gJ21vdmVkJyA6ICd1bndhdGNoZWQnLFxuICAgIHRydW5jYXRlZDogaXNUcnVuY2F0ZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhbiBgdXBzdHJlYW1zLmpzb25gLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIGZpbGUncyBjb250ZW50LlxuICogQHJldHVybnMgVGhlIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBzdHJlYW1zQ29uZmlnKHRleHQ6IHN0cmluZyk6IFVwc3RyZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGV4dCkgYXMgUGFydGlhbDxVcHN0cmVhbXNDb25maWc+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnVwc3RyZWFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1cHN0cmVhbXMuanNvbiBoYXMgbm8gXCJ1cHN0cmVhbXNcIiBhcnJheS4nKTtcbiAgfVxuICAvLyBSZWFkIHRocm91Z2ggYFJlZmxlY3QuZ2V0YCwgYmVjYXVzZSBub3RoaW5nIGFib3V0IHRoZSBwYXJzZWQgZW50cmllcyBpcyBrbm93biB5ZXQuXG4gIGNvbnN0IGVudHJpZXM6IHJlYWRvbmx5IG9iamVjdFtdID0gY29uZmlnLnVwc3RyZWFtcztcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5hbWU6IHVua25vd24gPSBSZWZsZWN0LmdldChlbnRyeSwgJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IGBcIiR7bmFtZX1cImAgOiAnd2l0aCBubyBuYW1lJztcbiAgICBjb25zdCBpc0dpdCA9ICdyZXBvJyBpbiBlbnRyeTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGlzR2l0ID8gWyduYW1lJywgJ3JlcG8nLCAncmVmJywgJ2NvbW1pdCcsICdoYW5kbGVyJ10gOiBbJ25hbWUnLCAnbnBtJywgJ3ZlcnNpb24nLCAnaGFuZGxlciddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QuZ2V0KGVudHJ5LCBrZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1cHN0cmVhbXMuanNvbjogZW50cnkgJHtsYWJlbH0gbmVlZHMgYSBzdHJpbmcgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzR2l0ICYmICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGVudHJ5LCAncGF0aHMnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb246IGVudHJ5ICR7bGFiZWx9IG5lZWRzIGEgXCJwYXRoc1wiIGFycmF5LmApO1xuICAgIH1cbiAgICBpZiAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uOiB0aGUgbmFtZSAke2xhYmVsfSBpcyB1c2VkIHR3aWNlLmApO1xuICAgIH1cbiAgICBuYW1lcy5hZGQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZyBhcyBVcHN0cmVhbXNDb25maWc7XG59XG5cbi8qKlxuICogUGxhbnMgdGhlIFBSIGEgbW92ZWQgdXBzdHJlYW0gYXNrcyBmb3IuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBjb21wYXJpc29uIG9mIGEgbW92ZWQgZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgYnJhbmNoIGFuZCB0aXRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYW5TeW5jKHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiBTeW5jUGxhbiB7XG4gIHJldHVybiB7XG4gICAgYnJhbmNoOiBgdXBzdHJlYW0vJHtzdGF0dXMuZW50cnkubmFtZX1gLFxuICAgIHN0YXR1cyxcbiAgICB0aXRsZTogYGNob3JlKHVwc3RyZWFtKTogc3luYyAke3N0YXR1cy5lbnRyeS5uYW1lfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgZXZlcnkgZW50cnksIGFuZCBvcGVucyBvciB1cGRhdGVzIG9uZSBQUiBwZXIgbW92ZWQgdXBzdHJlYW0uXG4gKlxuICogQSBoYW5kbGVyIG9yIHZlcmlmeSBmYWlsdXJlIHN0aWxsIG9wZW5zIHRoZSBQUiwgYXMgYSBkcmFmdCB3aXRoIHRoZSBmYWlsdXJlIGluIGl0cyBib2R5LCBzbyBhIGJyZWFraW5nIHVwc3RyZWFtIGNoYW5nZVxuICogaXMgc2VlbiByYXRoZXIgdGhhbiBza2lwcGVkLiBBbiBlcnJvciBpbiB0aGUgc3luYyBpdHNlbGYsIHN1Y2ggYXMgYSBmYWlsZWQgQVBJIGNhbGwsIGlzIHJlcG9ydGVkIGluIHRoZSBlbnRyeSdzIHJlc3VsdFxuICogYW5kIHRoZSBuZXh0IGVudHJ5IHN0aWxsIHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBXaGF0IHRvIHN5bmMsIGFuZCBob3cuXG4gKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIG91dHNpZGUgd29ybGQuXG4gKiBAcmV0dXJucyBPbmUgcmVzdWx0IHBlciBlbnRyeSBjaGVja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1Vwc3RyZWFtcyhvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogUHJvbWlzZTxTeW5jUmVzdWx0W10+IHtcbiAgY29uc3QgY29uZmlnID0gcGFyc2VVcHN0cmVhbXNDb25maWcocmVhZEZpbGVTeW5jKG9wdGlvbnMuY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICBjb25zdCB1bmtub3duID0gb3B0aW9ucy5vbmx5LmZpbHRlcigobmFtZSkgPT4gY29uZmlnLnVwc3RyZWFtcy5ldmVyeSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpKTtcbiAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb24gaGFzIG5vIGVudHJ5IG5hbWVkICR7dW5rbm93bi5tYXAoKG5hbWUpID0+IGBcIiR7bmFtZX1cImApLmpvaW4oJywgJyl9LmApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0czogU3luY1Jlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgY29uZmlnLnVwc3RyZWFtcykge1xuICAgIGlmIChvcHRpb25zLm9ubHkubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5vbmx5LmluY2x1ZGVzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCBzeW5jRW50cnkoZW50cnksIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBFUlJPUiAke21lc3NhZ2V9YCk7XG4gICAgICByZXN1bHRzLnB1c2goeyBlcnJvcjogbWVzc2FnZSwgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogUmVjb3JkcyBgaGVhZGAgYXMgdGhlIGVudHJ5J3MgcGluIGluIGB1cHN0cmVhbXMuanNvbmAsIHVubGVzcyB0aGUgaGFuZGxlciBhbHJlYWR5IG1vdmVkIGl0LCBrZWVwaW5nIHRoZSBmaWxlJ3NcbiAqIGtleSBvcmRlciBhbmQgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnUGF0aCAtIFRoZSBwYXRoIHRvIGB1cHN0cmVhbXMuanNvbmAuXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIGNvbXBhcmlzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBpbihjb25maWdQYXRoOiBzdHJpbmcsIHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiB2b2lkIHtcbiAgY29uc3QgdGV4dCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyBVcHN0cmVhbXNGaWxlU2hhcGU7XG4gIGNvbnN0IGtleSA9IGlzR2l0VXBzdHJlYW0oc3RhdHVzLmVudHJ5KSA/ICdjb21taXQnIDogJ3ZlcnNpb24nO1xuICBjb25zdCB0YXJnZXQgPSBwYXJzZWQudXBzdHJlYW1zLmZpbmQoKGVudHJ5KSA9PiBlbnRyeVsnbmFtZSddID09PSBzdGF0dXMuZW50cnkubmFtZSk7XG4gIGlmICh0YXJnZXQ/LltrZXldICE9PSBzdGF0dXMucGluKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRhcmdldFtrZXldID0gc3RhdHVzLmhlYWQ7XG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBKU09OX0lOREVOVF9TUEFDRVMpfVxcbmApO1xufVxuXG5mdW5jdGlvbiBhcHBseVBsYW4ocGxhbjogU3luY1BsYW4sIGNvbmZpZzogVXBzdHJlYW1zQ29uZmlnLCBvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogU3luY1Jlc3VsdCB7XG4gIGNvbnN0IHsgZW50cnkgfSA9IHBsYW4uc3RhdHVzO1xuICAvLyBObyBjb2xvcjogdGhlIG91dHB1dCBpcyBxdW90ZWQgaW4gYSBQUiBib2R5LCB3aGVyZSBhIGNvbG9yIGNvZGUgaXMgb25seSBub2lzZS4gYENJYCBpcyBsZWZ0IGFsb25lLCBiZWNhdXNlIGl0XG4gIC8vIGNoYW5nZXMgd2hhdCBzb21lIHRvb2xzIGRvLCBub3QganVzdCBob3cgdGhleSBwcmludC5cbiAgY29uc3QgZW52ID0geyBGT1JDRV9DT0xPUjogJzAnLCBOT19DT0xPUjogJzEnLCBVUFNUUkVBTV9OQU1FOiBlbnRyeS5uYW1lLCBVUFNUUkVBTV9UQVJHRVQ6IHBsYW4uc3RhdHVzLmhlYWQgfTtcbiAgY29uc3QgaGFuZGxlcjogU3RlcFJlc3VsdCA9IHsgY29tbWFuZDogZW50cnkuaGFuZGxlciwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwoZW50cnkuaGFuZGxlciwgZW52KSB9O1xuICB3cml0ZVBpbihvcHRpb25zLmNvbmZpZ1BhdGgsIHBsYW4uc3RhdHVzKTtcbiAgY29uc3QgdmVyaWZ5Q29tbWFuZCA9IGVudHJ5LnZlcmlmeSA/PyBjb25maWcudmVyaWZ5O1xuICBjb25zdCB2ZXJpZnk6IG51bGwgfCBTdGVwUmVzdWx0ID0gdmVyaWZ5Q29tbWFuZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHsgY29tbWFuZDogdmVyaWZ5Q29tbWFuZCwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwodmVyaWZ5Q29tbWFuZCwgZW52KSB9O1xuICBjb25zdCBpc0ZhaWxlZCA9IGhhbmRsZXIucmVzdWx0LmV4aXRDb2RlICE9PSAwIHx8ICh2ZXJpZnkgIT09IG51bGwgJiYgdmVyaWZ5LnJlc3VsdC5leGl0Q29kZSAhPT0gMCk7XG5cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydhZGQnLCAnLS1hbGwnXSk7XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnY29tbWl0JywgJy0tbm8tdmVyaWZ5JywgJy0tbWVzc2FnZScsIHBsYW4udGl0bGVdKTtcbiAgY29uc3QgZGlmZlN0YXQgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2RpZmYnLCAnLS1zdGF0JywgJ0hFQUR+MScsICdIRUFEJ10pO1xuXG4gIGNvbnN0IGJvZHkgPSBidWlsZFByQm9keShwbGFuLCB7IGhhbmRsZXIsIHZlcmlmeSB9LCBkaWZmU3RhdCk7XG4gIGNvbnN0IGlzUmVtb3RlQnJhbmNoID0gZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnbHMtcmVtb3RlJywgJy0tZXhpdC1jb2RlJywgJy0taGVhZHMnLCAnb3JpZ2luJywgcGxhbi5icmFuY2hdKS5leGl0Q29kZSA9PT0gMDtcbiAgaWYgKGlzUmVtb3RlQnJhbmNoKSB7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBwbGFuLmJyYW5jaF0pO1xuICAgIGlmIChkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydkaWZmJywgJy0tcXVpZXQnLCAnRkVUQ0hfSEVBRCcsICdIRUFEJ10pLmV4aXRDb2RlID09PSAwKSB7XG4gICAgICAvLyBUaGUgYm9keSBpcyBzdGlsbCByZXdyaXR0ZW4sIHNvIGEgY2hhbmdlIHRvIGhvdyBpdCBpcyB3cml0dGVuIHJlYWNoZXMgYSBQUiB3aG9zZSBicmFuY2ggaGFzIG5vdCBtb3ZlZC5cbiAgICAgIGNvbnN0IG9wZW4gPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICAgICAgaWYgKG9wZW4gIT09IG51bGwpIHtcbiAgICAgICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBvcGVuLCAnLS1ib2R5JywgYm9keV0pO1xuICAgICAgfVxuICAgICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogJHtwbGFuLmJyYW5jaH0gYWxyZWFkeSBob2xkcyB0aGlzIHJlc3VsdDsgbm90aGluZyBwdXNoZWQke29wZW4gPT09IG51bGwgPyAnJyA6IGAsIFBSICMke29wZW59J3MgYm9keSByZXdyaXR0ZW5gfS5gKTtcbiAgICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bmNoYW5nZWQnIH07XG4gICAgfVxuICB9XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsncHVzaCcsICctLWZvcmNlJywgJ29yaWdpbicsIGBIRUFEOnJlZnMvaGVhZHMvJHtwbGFuLmJyYW5jaH1gXSk7XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICBpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcbiAgICBjb25zdCBwck51bWJlciA9IE51bWJlcihleGlzdGluZyk7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBleGlzdGluZywgJy0tdGl0bGUnLCBwbGFuLnRpdGxlLCAnLS1ib2R5JywgYm9keV0pO1xuICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgaXNGYWlsZWQgPyBbJ3ByJywgJ3JlYWR5JywgZXhpc3RpbmcsICctLXVuZG8nXSA6IFsncHInLCAncmVhZHknLCBleGlzdGluZ10pO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IHVwZGF0ZWQgUFIgIyR7ZXhpc3Rpbmd9JHtpc0ZhaWxlZCA/ICcgKGRyYWZ0OiBhIHN0ZXAgZmFpbGVkKScgOiAnJ30uYCk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3VwZGF0ZWQnLCBwck51bWJlciB9O1xuICB9XG5cbiAgY29uc3QgdXJsID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbXG4gICAgJ3ByJyxcbiAgICAnY3JlYXRlJyxcbiAgICAnLS1iYXNlJyxcbiAgICBvcHRpb25zLmJhc2VCcmFuY2gsXG4gICAgJy0taGVhZCcsXG4gICAgcGxhbi5icmFuY2gsXG4gICAgJy0tdGl0bGUnLFxuICAgIHBsYW4udGl0bGUsXG4gICAgJy0tYm9keScsXG4gICAgYm9keSxcbiAgICAuLi4oaXNGYWlsZWQgPyBbJy0tZHJhZnQnXSA6IFtdKVxuICBdKS50cmltKCk7XG4gIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG9wZW5lZCAke3VybH0ke2lzRmFpbGVkID8gJyAoZHJhZnQ6IGEgc3RlcCBmYWlsZWQpJyA6ICcnfS5gKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBOdW1iZXIoL1xcL3B1bGxcXC8oPzxOdW1iZXI+XFxkKykvLmV4ZWModXJsKT8uZ3JvdXBzPy5bJ051bWJlciddID8/IE5hTik7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocHJOdW1iZXIpID8geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJyB9IDogeyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJywgcHJOdW1iZXIgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVTdGVwKGhlYWRpbmc6IHN0cmluZywgc3RlcDogU3RlcFJlc3VsdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaXNQYXNzZWQgPSBzdGVwLnJlc3VsdC5leGl0Q29kZSA9PT0gMDtcbiAgY29uc3Qgb3V0cHV0TGluZXMgPSBjbGVhbkNvbW1hbmRPdXRwdXQoc3RlcC5yZXN1bHQub3V0cHV0KS50cmltRW5kKCkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0YWlsID0gb3V0cHV0TGluZXMuc2xpY2UoLU9VVFBVVF9UQUlMX0xJTkVTKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmFpbHVyZUxpbmVzID0gaXNQYXNzZWQgPyBbXSA6IG91dHB1dExpbmVzLmZpbHRlcigobGluZSkgPT4gRkFJTFVSRV9MSU5FX1JFR19FWFAudGVzdChsaW5lKSkuc2xpY2UoMCwgRkFJTFVSRV9MSU5FX0xJTUlUKTtcbiAgcmV0dXJuIFtcbiAgICBgIyMjICR7aGVhZGluZ31gLFxuICAgICcnLFxuICAgIGBcXGAke3N0ZXAuY29tbWFuZH1cXGA6ICR7aXNQYXNzZWQgPyAncGFzc2VkJyA6IGAqKkZBSUxFRCoqIChleGl0ICR7U3RyaW5nKHN0ZXAucmVzdWx0LmV4aXRDb2RlKX0pYH0uYCxcbiAgICAnJyxcbiAgICAuLi4oZmFpbHVyZUxpbmVzLmxlbmd0aCA9PT0gMCA/IFtdIDogWydMaW5lcyByZXBvcnRpbmcgdGhlIGZhaWx1cmU6JywgJycsICdgYGB0ZXh0JywgLi4uZmFpbHVyZUxpbmVzLCAnYGBgJywgJyddKSxcbiAgICBpc1Bhc3NlZCA/ICc8ZGV0YWlscz48c3VtbWFyeT5PdXRwdXQ8L3N1bW1hcnk+JyA6ICc8ZGV0YWlscyBvcGVuPjxzdW1tYXJ5Pk91dHB1dDwvc3VtbWFyeT4nLFxuICAgICcnLFxuICAgICdgYGB0ZXh0JyxcbiAgICB0YWlsLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgICc8L2RldGFpbHM+JyxcbiAgICAnJ1xuICBdO1xufVxuXG5mdW5jdGlvbiBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMsIGZpbGU6IHN0cmluZywgYXJndW1lbnRzXzogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBkZXBlbmRlbmNpZXMuZXhlYyhmaWxlLCBhcmd1bWVudHNfKTtcbiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWxlfSAke2FyZ3VtZW50c18uam9pbignICcpfSBmYWlsZWQgKGV4aXQgJHtTdHJpbmcocmVzdWx0LmV4aXRDb2RlKX0pOiAke3Jlc3VsdC5vdXRwdXQudHJpbSgpfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmaW5kT3BlblByKGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcywgYnJhbmNoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgJG51bWJlciA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgWydwcicsICdsaXN0JywgJy0taGVhZCcsIGJyYW5jaCwgJy0tc3RhdGUnLCAnb3BlbicsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLlswXS5udW1iZXInXSkudHJpbSgpO1xuICByZXR1cm4gJG51bWJlciA9PT0gJycgfHwgJG51bWJlciA9PT0gJ251bGwnID8gbnVsbCA6ICRudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGlzR2l0VXBzdHJlYW0oZW50cnk6IFVwc3RyZWFtRW50cnkpOiBlbnRyeSBpcyBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgcmV0dXJuICdyZXBvJyBpbiBlbnRyeTtcbn1cblxuZnVuY3Rpb24gc2hvcnRlbihoZWFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gL15bMC05YS1mXXs0MH0kLy50ZXN0KGhlYWQpID8gaGVhZC5zbGljZSgwLCBTSE9SVF9TSEFfTEVOR1RIKSA6IGhlYWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN5bmNFbnRyeShlbnRyeTogVXBzdHJlYW1FbnRyeSwgY29uZmlnOiBVcHN0cmVhbXNDb25maWcsIG9wdGlvbnM6IFN5bmNVcHN0cmVhbXNPcHRpb25zLCBkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMpOiBQcm9taXNlPFN5bmNSZXN1bHQ+IHtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgY29tcGFyZVdpdGhVcHN0cmVhbShlbnRyeSwgZGVwZW5kZW5jaWVzKTtcbiAgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ2N1cnJlbnQnKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogY3VycmVudCBhdCAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfS5gKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnY3VycmVudCcgfTtcbiAgfVxuICBpZiAoc3RhdHVzLnN0YXRlID09PSAndW53YXRjaGVkJykge1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG1vdmVkIHRvICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LCBidXQgbm8gd2F0Y2hlZCBwYXRoIGNoYW5nZWQgc2luY2UgJHtzaG9ydGVuKHN0YXR1cy5waW4pfS5gKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAndW53YXRjaGVkJyB9O1xuICB9XG5cbiAgY29uc3QgcGxhbiA9IHBsYW5TeW5jKHN0YXR1cyk7XG4gIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG1vdmVkIGZyb20gJHtzaG9ydGVuKHN0YXR1cy5waW4pfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfS4gV291bGQgcHVzaCAke3BsYW4uYnJhbmNofSBhbmQgb3BlbjpgKTtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAgIHRpdGxlOiAke3BsYW4udGl0bGV9YCk7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhidWlsZFByQm9keShwbGFuLCBudWxsLCBudWxsKS5yZXBsYWNlQWxsKC9eL2dtLCAnICB8ICcpKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAncGxhbm5lZCcgfTtcbiAgfVxuXG4gIC8vIFRoZSB1cGRhdGUgY29tbWl0IHRha2VzIGV2ZXJ5IGZpbGUgaW4gdGhlIHRyZWUsIHNvIGEgZmlsZSBsZWZ0IGx5aW5nIGFyb3VuZCB3b3VsZCBiZSBwdXNoZWQgd2l0aCBpdC5cbiAgY29uc3QgZGlydHkgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ3N0YXR1cycsICctLXBvcmNlbGFpbiddKS50cmltKCk7XG4gIGlmIChkaXJ0eSAhPT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRoZSB3b3JraW5nIHRyZWUgaXMgbm90IGNsZWFuLCBhbmQgdGhlIHVwZGF0ZSBjb21taXQgd291bGQgdGFrZSB0aGVzZSBmaWxlcyB3aXRoIGl0OlxcbiR7ZGlydHl9YCk7XG4gIH1cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBvcHRpb25zLmJhc2VCcmFuY2hdKTtcbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydjaGVja291dCcsICctQicsIHBsYW4uYnJhbmNoLCBgb3JpZ2luLyR7b3B0aW9ucy5iYXNlQnJhbmNofWBdKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXBwbHlQbGFuKHBsYW4sIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydjaGVja291dCcsICctLWZvcmNlJywgb3B0aW9ucy5iYXNlQnJhbmNoXSk7XG4gICAgZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnYnJhbmNoJywgJy0tZGVsZXRlJywgJy0tZm9yY2UnLCBwbGFuLmJyYW5jaF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvTGFzdExpbmVTdGF0ZShsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzdGF0ZXMgPSBsaW5lLnJlcGxhY2UoL1xcciskLywgJycpO1xuICByZXR1cm4gc3RhdGVzLnNsaWNlKHN0YXRlcy5sYXN0SW5kZXhPZignXFxyJykgKyAxKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBU0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1CQUFtQjtBQTJONUIsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSxtQkFBbUI7QUFLekIsTUFBTSxvQkFBb0I7QUFLMUIsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSxxQkFBcUI7QUFNM0IsTUFBTSxNQUFNLE9BQU87QUFPbkIsTUFBTSwyQkFBMkIsSUFBSTtBQUFBLEVBQ25DLE9BQU8sTUFBTSxHQUFHLHVCQUF1QixHQUFHLG9DQUFvQyxH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
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"main": "../../../dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.cjs",
|
|
3
|
+
"module": "../../../dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.mjs",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "../../../dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.d.cts"
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"main": "../../../dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.cjs",
|
|
3
|
+
"module": "../../../dist/lib/esm/linters/eslint-rules/readonly-member-arrays.mjs",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "../../../dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.d.cts"
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mnaoumov/typescript-dev-toolkit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.1.0",
|
|
4
4
|
"description": "Generic TypeScript project tooling: build, lint, format, spellcheck, test, gate and release scripts.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -313,7 +313,6 @@
|
|
|
313
313
|
"markdownlint-rule-relative-links": "^5.1.2",
|
|
314
314
|
"semver": "^7.8.5",
|
|
315
315
|
"svelte-check": "^4.7.6",
|
|
316
|
-
"svelte-preprocess": "^6.0.5",
|
|
317
316
|
"type-fest": "^5.10.0",
|
|
318
317
|
"typescript": "6.0.3",
|
|
319
318
|
"typescript-eslint": "^8.71.2"
|
|
@@ -361,6 +360,7 @@
|
|
|
361
360
|
"prettier": "^3.0.0",
|
|
362
361
|
"satori": "^0.33.5",
|
|
363
362
|
"satteri": "^0.10.5",
|
|
363
|
+
"svelte-preprocess": "^6.0.5",
|
|
364
364
|
"ts-jest": "^29.4.0",
|
|
365
365
|
"ts-morph": "^28.0.0",
|
|
366
366
|
"typedoc-plugin-mdn-links": "^5.1.1",
|
|
@@ -401,6 +401,9 @@
|
|
|
401
401
|
"satteri": {
|
|
402
402
|
"optional": true
|
|
403
403
|
},
|
|
404
|
+
"svelte-preprocess": {
|
|
405
|
+
"optional": true
|
|
406
|
+
},
|
|
404
407
|
"ts-jest": {
|
|
405
408
|
"optional": true
|
|
406
409
|
},
|