@mnaoumov/typescript-dev-toolkit 1.0.0 → 1.2.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/dist/lib/cjs/build.cjs +2 -24
- package/dist/lib/cjs/build.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +2 -24
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +1 -56
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +4 -25
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +6 -61
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +129 -27
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +4 -2
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +3 -25
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/index.cjs +2 -57
- package/dist/lib/cjs/bundlers/index.d.cts +1 -1
- package/dist/lib/cjs/check-project-types.cjs +3 -25
- package/dist/lib/cjs/check-project-types.d.cts +1 -1
- package/dist/lib/cjs/cli-utils.cjs +3 -25
- package/dist/lib/cjs/cli-utils.d.cts +1 -1
- package/dist/lib/cjs/code-generator.cjs +1 -56
- package/dist/lib/cjs/code-generator.d.cts +1 -1
- package/dist/lib/cjs/commitlint-config.cjs +2 -24
- package/dist/lib/cjs/commitlint-config.d.cts +1 -1
- package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +1 -56
- package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
- package/dist/lib/cjs/commitlint-spellcheck-header.cjs +1 -56
- package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
- package/dist/lib/cjs/env-toggle.cjs +3 -25
- package/dist/lib/cjs/env-toggle.d.cts +1 -1
- package/dist/lib/cjs/exec.cjs +3 -25
- package/dist/lib/cjs/exec.d.cts +2 -1
- package/dist/lib/cjs/forbidden-patterns.cjs +3 -25
- package/dist/lib/cjs/forbidden-patterns.d.cts +1 -1
- package/dist/lib/cjs/formatters/dprint.cjs +2 -24
- package/dist/lib/cjs/formatters/dprint.d.cts +1 -1
- package/dist/lib/cjs/formatters/index.cjs +2 -57
- package/dist/lib/cjs/formatters/index.d.cts +1 -1
- package/dist/lib/cjs/fs.cjs +2 -24
- package/dist/lib/cjs/fs.d.cts +2 -1
- package/dist/lib/cjs/gate.cjs +1 -56
- package/dist/lib/cjs/gate.d.cts +1 -1
- package/dist/lib/cjs/git.cjs +1 -56
- package/dist/lib/cjs/git.d.cts +1 -1
- package/dist/lib/cjs/index.cjs +31 -86
- package/dist/lib/cjs/json.cjs +2 -24
- package/dist/lib/cjs/json.d.cts +1 -1
- package/dist/lib/cjs/library-build.cjs +101 -35
- package/dist/lib/cjs/library-build.d.cts +12 -2
- package/dist/lib/cjs/library-references.d.cts +2 -0
- package/dist/lib/cjs/linters/cspell-content.cjs +2 -24
- package/dist/lib/cjs/linters/cspell-content.d.cts +1 -1
- package/dist/lib/cjs/linters/cspell.cjs +1 -56
- package/dist/lib/cjs/linters/cspell.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-config.cjs +8 -30
- package/dist/lib/cjs/linters/eslint-config.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +13 -68
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint.cjs +78 -26
- package/dist/lib/cjs/linters/eslint.d.cts +40 -1
- package/dist/lib/cjs/linters/index.cjs +15 -70
- package/dist/lib/cjs/linters/index.d.cts +1 -1
- package/dist/lib/cjs/linters/lint-ignores.cjs +2 -24
- package/dist/lib/cjs/linters/lint-ignores.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +3 -25
- package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-content.cjs +2 -24
- package/dist/lib/cjs/linters/markdownlint-content.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-ignores.cjs +1 -56
- package/dist/lib/cjs/linters/markdownlint-ignores.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +2 -57
- package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +1 -56
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint.cjs +2 -24
- package/dist/lib/cjs/linters/markdownlint.d.cts +1 -1
- package/dist/lib/cjs/linters/over-exposure.cjs +2 -24
- package/dist/lib/cjs/linters/over-exposure.d.cts +1 -1
- package/dist/lib/cjs/nano-staged-config.cjs +2 -57
- package/dist/lib/cjs/nano-staged-config.d.cts +1 -1
- package/dist/lib/cjs/npm-publish.cjs +1 -56
- package/dist/lib/cjs/npm-publish.d.cts +1 -1
- package/dist/lib/cjs/npm-run.cjs +2 -24
- package/dist/lib/cjs/npm-run.d.cts +1 -1
- package/dist/lib/cjs/npm.cjs +2 -24
- package/dist/lib/cjs/npm.d.cts +1 -1
- package/dist/lib/cjs/package-lock-integrity.cjs +1 -56
- package/dist/lib/cjs/package-lock-integrity.d.cts +1 -1
- package/dist/lib/cjs/package-manager.cjs +3 -25
- package/dist/lib/cjs/package-manager.d.cts +1 -1
- package/dist/lib/cjs/released-issues.cjs +2 -24
- package/dist/lib/cjs/released-issues.d.cts +1 -1
- package/dist/lib/cjs/repo-paths.cjs +1 -56
- package/dist/lib/cjs/repo-paths.d.cts +1 -1
- package/dist/lib/cjs/root.cjs +2 -24
- package/dist/lib/cjs/root.d.cts +1 -1
- package/dist/lib/cjs/test-runners/index.cjs +3 -58
- package/dist/lib/cjs/test-runners/index.d.cts +1 -1
- package/dist/lib/cjs/test-runners/vitest-config.cjs +1 -56
- package/dist/lib/cjs/test-runners/vitest-config.d.cts +1 -1
- package/dist/lib/cjs/test-runners/vitest.cjs +1 -56
- package/dist/lib/cjs/test-runners/vitest.d.cts +1 -1
- package/dist/lib/cjs/validate-declarations.cjs +2 -24
- package/dist/lib/cjs/validate-declarations.d.cts +1 -1
- package/dist/lib/cjs/version.cjs +2 -24
- package/dist/lib/cjs/version.d.cts +2 -1
- package/dist/lib/esm/build.d.mts +1 -1
- package/dist/lib/esm/build.mjs +2 -11
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +2 -11
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +1 -43
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +4 -12
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +1 -43
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +4 -2
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +154 -14
- 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 +2 -11
- package/dist/lib/esm/bundlers/index.d.mts +1 -1
- package/dist/lib/esm/bundlers/index.mjs +1 -43
- package/dist/lib/esm/check-project-types.d.mts +1 -1
- package/dist/lib/esm/check-project-types.mjs +2 -11
- package/dist/lib/esm/cli-utils.d.mts +1 -1
- package/dist/lib/esm/cli-utils.mjs +2 -11
- package/dist/lib/esm/code-generator.d.mts +1 -1
- package/dist/lib/esm/code-generator.mjs +1 -43
- package/dist/lib/esm/commitlint-config.d.mts +1 -1
- package/dist/lib/esm/commitlint-config.mjs +2 -11
- package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
- package/dist/lib/esm/commitlint-forbidden-patterns.mjs +1 -43
- package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
- package/dist/lib/esm/commitlint-spellcheck-header.mjs +1 -43
- package/dist/lib/esm/env-toggle.d.mts +1 -1
- package/dist/lib/esm/env-toggle.mjs +2 -11
- package/dist/lib/esm/exec.d.mts +2 -1
- package/dist/lib/esm/exec.mjs +2 -11
- package/dist/lib/esm/forbidden-patterns.d.mts +1 -1
- package/dist/lib/esm/forbidden-patterns.mjs +2 -11
- package/dist/lib/esm/formatters/dprint.d.mts +1 -1
- package/dist/lib/esm/formatters/dprint.mjs +2 -11
- package/dist/lib/esm/formatters/index.d.mts +1 -1
- package/dist/lib/esm/formatters/index.mjs +1 -43
- package/dist/lib/esm/fs.d.mts +2 -1
- package/dist/lib/esm/fs.mjs +2 -11
- package/dist/lib/esm/gate.d.mts +1 -1
- package/dist/lib/esm/gate.mjs +1 -43
- package/dist/lib/esm/git.d.mts +1 -1
- package/dist/lib/esm/git.mjs +1 -43
- package/dist/lib/esm/index.mjs +1 -43
- package/dist/lib/esm/json.d.mts +1 -1
- package/dist/lib/esm/json.mjs +2 -11
- package/dist/lib/esm/library-build.d.mts +12 -2
- package/dist/lib/esm/library-build.mjs +110 -22
- package/dist/lib/esm/library-references.d.mts +2 -0
- package/dist/lib/esm/linters/cspell-content.d.mts +1 -1
- package/dist/lib/esm/linters/cspell-content.mjs +2 -11
- package/dist/lib/esm/linters/cspell.d.mts +1 -1
- package/dist/lib/esm/linters/cspell.mjs +1 -43
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +1 -43
- package/dist/lib/esm/linters/eslint-config.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-config.mjs +2 -11
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/index.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/require-method-template.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/require-super-call.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +2 -11
- package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +1 -1
- package/dist/lib/esm/linters/eslint.d.mts +40 -1
- package/dist/lib/esm/linters/eslint.mjs +75 -13
- package/dist/lib/esm/linters/index.d.mts +1 -1
- package/dist/lib/esm/linters/index.mjs +1 -43
- package/dist/lib/esm/linters/lint-ignores.d.mts +1 -1
- package/dist/lib/esm/linters/lint-ignores.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-content.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-content.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-ignores.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-ignores.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-rules/index.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint.mjs +2 -11
- package/dist/lib/esm/linters/over-exposure.d.mts +1 -1
- package/dist/lib/esm/linters/over-exposure.mjs +2 -11
- package/dist/lib/esm/nano-staged-config.d.mts +1 -1
- package/dist/lib/esm/nano-staged-config.mjs +1 -43
- package/dist/lib/esm/npm-publish.d.mts +1 -1
- package/dist/lib/esm/npm-publish.mjs +1 -43
- package/dist/lib/esm/npm-run.d.mts +1 -1
- package/dist/lib/esm/npm-run.mjs +2 -11
- package/dist/lib/esm/npm.d.mts +1 -1
- package/dist/lib/esm/npm.mjs +2 -11
- package/dist/lib/esm/package-lock-integrity.d.mts +1 -1
- package/dist/lib/esm/package-lock-integrity.mjs +1 -43
- package/dist/lib/esm/package-manager.d.mts +1 -1
- package/dist/lib/esm/package-manager.mjs +2 -11
- package/dist/lib/esm/released-issues.d.mts +1 -1
- package/dist/lib/esm/released-issues.mjs +2 -11
- package/dist/lib/esm/repo-paths.d.mts +1 -1
- package/dist/lib/esm/repo-paths.mjs +1 -43
- package/dist/lib/esm/root.d.mts +1 -1
- package/dist/lib/esm/root.mjs +2 -11
- package/dist/lib/esm/test-runners/index.d.mts +1 -1
- package/dist/lib/esm/test-runners/index.mjs +1 -43
- package/dist/lib/esm/test-runners/vitest-config.d.mts +1 -1
- package/dist/lib/esm/test-runners/vitest-config.mjs +1 -43
- package/dist/lib/esm/test-runners/vitest.d.mts +1 -1
- package/dist/lib/esm/test-runners/vitest.mjs +1 -43
- package/dist/lib/esm/validate-declarations.d.mts +1 -1
- package/dist/lib/esm/validate-declarations.mjs +2 -11
- package/dist/lib/esm/version.d.mts +2 -1
- package/dist/lib/esm/version.mjs +2 -11
- package/package.json +1 -1
|
@@ -2,13 +2,7 @@
|
|
|
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
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
|
|
|
39
33
|
existingProcessRecord['browser'] = true;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
|
|
43
|
-
return $unknown;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
(function initCjs() {
|
|
47
|
-
const globalThisRecord = globalThis;
|
|
48
|
-
ensureDisposeSymbols();
|
|
49
|
-
globalThisRecord['__name'] ??= keepName;
|
|
50
|
-
globalThisRecord['__extractDefault'] ??= extractDefault;
|
|
51
|
-
|
|
52
|
-
ensureBrowserProcess();
|
|
53
|
-
|
|
54
|
-
// eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
|
|
55
|
-
function extractDefault(module) {
|
|
56
|
-
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
57
|
-
}
|
|
58
|
-
})();
|
|
36
|
+
ensureBrowserProcess();
|
|
59
37
|
})();
|
|
60
38
|
|
|
61
39
|
"use strict";
|
|
@@ -87,7 +65,14 @@ __export(preprocess_plugin_exports, {
|
|
|
87
65
|
module.exports = __toCommonJS(preprocess_plugin_exports);
|
|
88
66
|
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
89
67
|
var import_string = require('@mnaoumov/typescript-lib/string');
|
|
68
|
+
var import_node_buffer = require('node:buffer');
|
|
90
69
|
var import_promises = require('node:fs/promises');
|
|
70
|
+
var import_typescript = require('typescript');
|
|
71
|
+
const DISPOSE_SYMBOL_NAMES = /* @__PURE__ */ new Set(["asyncDispose", "dispose"]);
|
|
72
|
+
const INLINE_SOURCE_MAP_PREFIX = "//# sourceMappingURL=data:application/json;base64,";
|
|
73
|
+
const JS_OUTPUT_REG_EXP = /\.[cm]?js$/;
|
|
74
|
+
const KNOWN_SYMBOL_HELPER_NAME = "__knownSymbol";
|
|
75
|
+
const NON_BARE_SPECIFIER_REG_EXP = /^(?:\.|\/|node:)/;
|
|
91
76
|
function ensureBrowserProcess() {
|
|
92
77
|
const browserProcess = {
|
|
93
78
|
browser: true,
|
|
@@ -148,9 +133,16 @@ function preprocessPlugin(options = {}) {
|
|
|
148
133
|
for (const key of Object.keys(replacements)) {
|
|
149
134
|
build.initialOptions.define[key] = `__${(0, import_string.makeValidVariableName)(key)}`;
|
|
150
135
|
}
|
|
151
|
-
build.initialOptions.
|
|
152
|
-
|
|
153
|
-
|
|
136
|
+
if (build.initialOptions.bundle === false) {
|
|
137
|
+
const leadingBanner = build.initialOptions.banner?.["js"] ?? "";
|
|
138
|
+
build.onEnd((result) => {
|
|
139
|
+
addModulePreambles({ additionalBannerInitFunctions, leadingBanner, outputFiles: result.outputFiles ?? [] });
|
|
140
|
+
});
|
|
141
|
+
} else {
|
|
142
|
+
build.initialOptions.banner ??= {};
|
|
143
|
+
build.initialOptions.banner["js"] ??= "";
|
|
144
|
+
build.initialOptions.banner["js"] += makePreprocessBanner({ additionalBannerInitFunctions, isEsm });
|
|
145
|
+
}
|
|
154
146
|
build.onLoad({ filter: /\.(?:js|ts|cjs|mjs|cts|mts)$/ }, async ($arguments) => {
|
|
155
147
|
let contents = await (0, import_promises.readFile)($arguments.path, "utf-8");
|
|
156
148
|
for (const [key, value] of Object.entries(replacements)) {
|
|
@@ -176,6 +168,20 @@ ${contents}`;
|
|
|
176
168
|
}
|
|
177
169
|
};
|
|
178
170
|
}
|
|
171
|
+
function addModulePreambles(params) {
|
|
172
|
+
const { additionalBannerInitFunctions, leadingBanner, outputFiles } = params;
|
|
173
|
+
for (const outputFile of outputFiles) {
|
|
174
|
+
if (!JS_OUTPUT_REG_EXP.test(outputFile.path)) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const code = outputFile.text;
|
|
178
|
+
const preamble = makeModulePreamble(getModuleShimNeeds(code), additionalBannerInitFunctions);
|
|
179
|
+
if (preamble === "") {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
outputFile.contents = new TextEncoder().encode(insertPreamble({ code, leadingBanner, preamble }));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
179
185
|
function getCjsImportMetaUrl() {
|
|
180
186
|
if (typeof __filename === "string") {
|
|
181
187
|
const localRequire = require;
|
|
@@ -186,6 +192,63 @@ function getCjsImportMetaUrl() {
|
|
|
186
192
|
}
|
|
187
193
|
return globalThis.location?.href ?? "";
|
|
188
194
|
}
|
|
195
|
+
function getIdentifierUsage(node) {
|
|
196
|
+
const { parent } = node;
|
|
197
|
+
if (((0, import_typescript.isPropertyAccessExpression)(parent) || (0, import_typescript.isPropertyAssignment)(parent) || (0, import_typescript.isMethodDeclaration)(parent) || (0, import_typescript.isPropertyDeclaration)(parent) || (0, import_typescript.isGetAccessorDeclaration)(parent) || (0, import_typescript.isSetAccessorDeclaration)(parent)) && parent.name === node) {
|
|
198
|
+
return "member" /* Member */;
|
|
199
|
+
}
|
|
200
|
+
return ((0, import_typescript.isVariableDeclaration)(parent) || (0, import_typescript.isFunctionDeclaration)(parent) || (0, import_typescript.isClassDeclaration)(parent) || (0, import_typescript.isParameter)(parent) || (0, import_typescript.isBindingElement)(parent) || (0, import_typescript.isImportClause)(parent) || (0, import_typescript.isImportSpecifier)(parent) || (0, import_typescript.isNamespaceImport)(parent)) && parent.name === node ? "binding" /* Binding */ : "read" /* Read */;
|
|
201
|
+
}
|
|
202
|
+
function getModuleShimNeeds(code) {
|
|
203
|
+
const sourceFile = (0, import_typescript.createSourceFile)("module.js", code, import_typescript.ScriptTarget.Latest, true, import_typescript.ScriptKind.JS);
|
|
204
|
+
const boundNames = /* @__PURE__ */ new Set();
|
|
205
|
+
const readNames = /* @__PURE__ */ new Set();
|
|
206
|
+
let isBareImportFound = false;
|
|
207
|
+
let isDisposeSymbolFound = false;
|
|
208
|
+
function visit(node) {
|
|
209
|
+
const specifier = getModuleSpecifier(node);
|
|
210
|
+
if (specifier !== void 0 && !NON_BARE_SPECIFIER_REG_EXP.test(specifier)) {
|
|
211
|
+
isBareImportFound = true;
|
|
212
|
+
}
|
|
213
|
+
if ((0, import_typescript.isPropertyAccessExpression)(node) && (0, import_typescript.isIdentifier)(node.expression) && node.expression.text === "Symbol" && DISPOSE_SYMBOL_NAMES.has(node.name.text)) {
|
|
214
|
+
isDisposeSymbolFound = true;
|
|
215
|
+
}
|
|
216
|
+
if ((0, import_typescript.isIdentifier)(node)) {
|
|
217
|
+
if (node.text === KNOWN_SYMBOL_HELPER_NAME) {
|
|
218
|
+
isDisposeSymbolFound = true;
|
|
219
|
+
}
|
|
220
|
+
const usage = getIdentifierUsage(node);
|
|
221
|
+
if (usage === "binding" /* Binding */) {
|
|
222
|
+
boundNames.add(node.text);
|
|
223
|
+
} else if (usage === "read" /* Read */) {
|
|
224
|
+
readNames.add(node.text);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
(0, import_typescript.forEachChild)(node, visit);
|
|
228
|
+
}
|
|
229
|
+
visit(sourceFile);
|
|
230
|
+
function isFreeRead(name) {
|
|
231
|
+
return readNames.has(name) && !boundNames.has(name);
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
isBrowserProcessNeeded: isFreeRead("process") || isBareImportFound,
|
|
235
|
+
isDisposeSymbolsNeeded: isDisposeSymbolFound,
|
|
236
|
+
isNameNeeded: isFreeRead("__name")
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function getModuleSpecifier(node) {
|
|
240
|
+
if (((0, import_typescript.isImportDeclaration)(node) || (0, import_typescript.isExportDeclaration)(node)) && node.moduleSpecifier !== void 0 && (0, import_typescript.isStringLiteral)(node.moduleSpecifier)) {
|
|
241
|
+
return node.moduleSpecifier.text;
|
|
242
|
+
}
|
|
243
|
+
if ((0, import_typescript.isCallExpression)(node)) {
|
|
244
|
+
const [firstArgument] = node.arguments;
|
|
245
|
+
const isLoader = node.expression.kind === import_typescript.SyntaxKind.ImportKeyword || (0, import_typescript.isIdentifier)(node.expression) && node.expression.text === "require";
|
|
246
|
+
if (isLoader && firstArgument !== void 0 && (0, import_typescript.isStringLiteral)(firstArgument)) {
|
|
247
|
+
return firstArgument.text;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return void 0;
|
|
251
|
+
}
|
|
189
252
|
function initCjs() {
|
|
190
253
|
const globalThisRecord = globalThis;
|
|
191
254
|
ensureDisposeSymbols();
|
|
@@ -200,6 +263,45 @@ function initEsm() {
|
|
|
200
263
|
ensureDisposeSymbols();
|
|
201
264
|
ensureBrowserProcess();
|
|
202
265
|
}
|
|
266
|
+
function insertPreamble(params) {
|
|
267
|
+
const { code, leadingBanner, preamble } = params;
|
|
268
|
+
const insertAt = leadingBanner.endsWith("\n") && code.startsWith(leadingBanner) ? leadingBanner.length : 0;
|
|
269
|
+
const addedLineCount = preamble.split("\n").length - 1;
|
|
270
|
+
let shiftedCode = code;
|
|
271
|
+
const sourceMapStart = code.lastIndexOf(INLINE_SOURCE_MAP_PREFIX);
|
|
272
|
+
if (sourceMapStart !== -1) {
|
|
273
|
+
const dataStart = sourceMapStart + INLINE_SOURCE_MAP_PREFIX.length;
|
|
274
|
+
const data = code.slice(dataStart).trimEnd();
|
|
275
|
+
const sourceMap = JSON.parse(import_node_buffer.Buffer.from(data, "base64").toString("utf-8"));
|
|
276
|
+
sourceMap.mappings = ";".repeat(addedLineCount) + sourceMap.mappings;
|
|
277
|
+
shiftedCode = code.slice(0, dataStart) + import_node_buffer.Buffer.from(JSON.stringify(sourceMap), "utf-8").toString("base64") + code.slice(dataStart + data.length);
|
|
278
|
+
}
|
|
279
|
+
return shiftedCode.slice(0, insertAt) + preamble + shiftedCode.slice(insertAt);
|
|
280
|
+
}
|
|
281
|
+
function makeModulePreamble(needs, additionalBannerInitFunctions) {
|
|
282
|
+
const shims = [];
|
|
283
|
+
const calls = [];
|
|
284
|
+
if (needs.isDisposeSymbolsNeeded) {
|
|
285
|
+
shims.push(ensureDisposeSymbols);
|
|
286
|
+
calls.push("ensureDisposeSymbols();");
|
|
287
|
+
}
|
|
288
|
+
if (needs.isBrowserProcessNeeded) {
|
|
289
|
+
shims.push(ensureBrowserProcess);
|
|
290
|
+
calls.push("ensureBrowserProcess();");
|
|
291
|
+
}
|
|
292
|
+
if (needs.isNameNeeded) {
|
|
293
|
+
shims.push(keepName);
|
|
294
|
+
calls.push("globalThis['__name'] ??= keepName;");
|
|
295
|
+
}
|
|
296
|
+
const sharedScope = shims.length === 0 ? "" : `(function () {
|
|
297
|
+
${shims.map(String).join("\n\n")}
|
|
298
|
+
|
|
299
|
+
${calls.join("\n")}
|
|
300
|
+
})();
|
|
301
|
+
`;
|
|
302
|
+
return sharedScope + additionalBannerInitFunctions.map((function_) => `(${String(function_)})();
|
|
303
|
+
`).join("");
|
|
304
|
+
}
|
|
203
305
|
// Annotate the CommonJS export names for ESM import in node:
|
|
204
306
|
0 && (module.exports = {
|
|
205
307
|
ensureBrowserProcess,
|
|
@@ -208,4 +310,4 @@ function initEsm() {
|
|
|
208
310
|
makePreprocessBanner,
|
|
209
311
|
preprocessPlugin
|
|
210
312
|
});
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9wcmVwcm9jZXNzLXBsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBUaGF0IGlzXG4gKiB3aHkgdGhleSBhbGwgbGl2ZSBpbiB0aGlzIG1vZHVsZTogZXNidWlsZCBjb21waWxlcyBhIGNyb3NzLW1vZHVsZSBjYWxsIHRvIGAoMCwgaW1wb3J0X21vZHVsZS5mbikoXHUyMDI2KWAsXG4gKiB3aGljaCB3b3VsZCBuYW1lIGEgYmluZGluZyB0aGUgZW1pdHRlZCBidW5kbGUgZG9lcyBub3QgaGF2ZS4gU2FtZS1tb2R1bGUgcmVmZXJlbmNlcyBzdGF5IGJhcmUsIGFuZFxuICoge0BsaW5rIG1ha2VQcmVwcm9jZXNzQmFubmVyfSBzZXJpYWxpemVzIHRoZSBzaGltcyBhbG9uZ3NpZGUgdGhlIGBpbml0YCBmdW5jdGlvbiBzbyB0aGV5IGFyZSBpbiBzY29wZSB0aGVyZS4gQSBzaGltXG4gKiB0aGF0IGlzIG5vdCBzZXJpYWxpemVkIHNpbGVudGx5IGRlZ3JhZGVzIHRvIHdoYXRldmVyIHRoZSBjb25zdW1lcidzIGdsb2JhbCBzY29wZSBob2xkcyB1bmRlciB0aGF0IG5hbWUgXHUyMDE0IHdoaWNoXG4gKiBpcyBob3cgYF9fbmFtZWAgdXNlZCB0byBlbmQgdXAgaG9sZGluZyBgd2luZG93Lm5hbWVgLlxuICpcbiAqIEEgY2FsbGVyIHRoYXQgbmVlZHMgbW9yZSBpbiB0aGUgYmFubmVyICh0aGUgT2JzaWRpYW4gcGx1Z2luIGJ1aWxkZXIgcGF0Y2hlcyBgcmVxdWlyZWApIGhhbmRzIGluXG4gKiB7QGxpbmsgUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMuYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnN9LiBFYWNoIG9uZSBpcyBzZXJpYWxpemVkIGFzIGl0cyBPV04gaW1tZWRpYXRlbHlcbiAqIGludm9rZWQgZnVuY3Rpb24gYWZ0ZXIgdGhlIHNoYXJlZCBzY29wZSwgc28gaXQgbXVzdCBiZSBzZWxmLWNvbnRhaW5lZDogaXQgY2Fubm90IHNlZSB0aGUgc2hpbXMsIGFuZCBjYWxsaW5nIG9uZVxuICogZnJvbSBhbm90aGVyIG1vZHVsZSB3b3VsZCBoaXQgZXhhY3RseSB0aGUgY3Jvc3MtbW9kdWxlIHRyYXAgYWJvdmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljT2JqZWN0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBicm93c2VyLWZsYXZvcmVkIHN0YW5kLWluIGZvciBOb2RlJ3MgYHByb2Nlc3NgIGdsb2JhbC5cbiAqL1xuaW50ZXJmYWNlIEJyb3dzZXJQcm9jZXNzIGV4dGVuZHMgUGFydGlhbDxOb2RlSlMuUHJvY2Vzcz4ge1xuICAvKipcbiAgICogTWFya3MgdGhlIHByb2Nlc3MgYXMgYSBicm93c2VyIG9uZS4gVGhlIGJ1bmRsZWQgYGRlYnVnYCBwYWNrYWdlIHNlbGVjdHMgaXRzIGJyb3dzZXIgZW50cnkgcG9pbnQgb24gaXQuXG4gICAqL1xuICBicm93c2VyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgYFN5bWJvbGAgY29uc3RydWN0b3Ige0BsaW5rIGVuc3VyZURpc3Bvc2VTeW1ib2xzfSByZWFkcyBhbmQgd3JpdGVzLCB3aXRoIHRoZSB0d28gZGlzcG9zZVxuICogc3ltYm9scyBvcHRpb25hbCBiZWNhdXNlIGFuIGVuZ2luZSB3aXRob3V0IEV4cGxpY2l0IFJlc291cmNlIE1hbmFnZW1lbnQgZG9lcyBub3QgaGF2ZSB0aGVtLlxuICovXG5pbnRlcmZhY2UgRGlzcG9zZVN5bWJvbEhvc3Qge1xuICBhc3luY0Rpc3Bvc2U/OiBzeW1ib2w7XG4gIGRpc3Bvc2U/OiBzeW1ib2w7XG4gIGZvcjogKGtleTogc3RyaW5nKSA9PiBzeW1ib2w7XG59XG5cbmludGVyZmFjZSBFc21Nb2R1bGUge1xuICBfX2VzTW9kdWxlOiBib29sZWFuO1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBhIGJyb3dzZXIgZ2xvYmFsIHtAbGluayBnZXRDanNJbXBvcnRNZXRhVXJsfSByZWFkcywgb3B0aW9uYWwgYmVjYXVzZSBhIG5vbi1icm93c2VyIGhvc3QgaGFzIG5vbmUuXG4gKi9cbmludGVyZmFjZSBMb2NhdGlvbkhvc3Qge1xuICBsb2NhdGlvbj86IFBhZ2VMb2NhdGlvbjtcbn1cblxuaW50ZXJmYWNlIFBhZ2VMb2NhdGlvbiB7XG4gIGhyZWY6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFVybE1vZHVsZSB7XG4gIHBhdGhUb0ZpbGVVUkw6IHR5cGVvZiBwYXRoVG9GaWxlVVJMO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhlIGJ1bmRsZSBydW5zIGFnYWluc3QgYSBgcHJvY2Vzc2AgZ2xvYmFsIHRoYXQgYnJvd3Nlci10YXJnZXRpbmcgcGFja2FnZXMgcmVjb2duaXplLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLCBzbyBpdCBuZXZlciBydW5zIGluIHRoZSBidWlsZGVyIHByb2Nlc3MgXHUyMDE0IGJ1dCBpdCBpcyBhbiBvcmRpbmFyeVxuICogZnVuY3Rpb24gaGVyZSwgc28gaXQgaXMgdW5pdC10ZXN0ZWQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gYnkgZXZhbHVhdGluZyB0aGUgYmFubmVyIHRleHQuXG4gKlxuICogRmlsbHMgaW4gdGhlIGtleXMgTUlTU0lORyBmcm9tIGEgaG9zdC1wcm92aWRlZCBgcHJvY2Vzc2AgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIG9yIHNraXBwaW5nIGl0LiBPYnNpZGlhblxuICogTW9iaWxlIGV4cG9zZXMgYSBwYXJ0aWFsIGBwcm9jZXNzYCwgYW5kIHRoZSB3aG9sZS1vYmplY3QgZ3VhcmRzIHRoaXMgcmVwbGFjZWQgKGBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzKSB7XG4gKiByZXR1cm47IH1gIC8gYGdsb2JhbFRoaXNSZWNvcmRbJ3Byb2Nlc3MnXSA/Pz0gXHUyMDI2YCkgdG9vayB0aGF0IGFzIFwiYWxyZWFkeSBzaGltbWVkXCIsIHNvIGBicm93c2VyYCBuZXZlclxuICogbGFuZGVkLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2UgdGhlbiBzZWxlY3RlZCBpdHMgTm9kZSBlbnRyeSBwb2ludCwgd2hpY2ggY2FsbHNcbiAqIGByZXF1aXJlKCd1dGlsJykuZGVwcmVjYXRlKClgIGF0IG1vZHVsZSB0b3AgbGV2ZWwsIGFuZCBvbiBtb2JpbGUgdGhlIHBhdGNoZWQgYHJlcXVpcmVgIHJldHVybnMgYHt9YCBcdTIwMTQgc29cbiAqIHRoZSBwbHVnaW4gdGhyZXcgYmVmb3JlIGl0cyBgb25sb2FkYCByYW4uXG4gKlxuICogQSByZWFsIE5vZGUgb3IgRWxlY3Ryb24gYHByb2Nlc3NgIGlzIGxlZnQgY29tcGxldGVseSB1bnRvdWNoZWQuIGBwcm9jZXNzLnZlcnNpb25zLm5vZGVgIGlzIHRoZSBzaWduYWwgZm9yXG4gKiBpdCwgYW5kIGl0IGlzIHNlbGYtY29udGFpbmVkLCBzbyBpdCBhbHNvIGhvbGRzIGluIHRoZSBOb2RlIENMSSBidW5kbGVzIHRoaXMgYmFubmVyIGlzIGVtaXR0ZWQgaW50by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk6IHZvaWQge1xuICBjb25zdCBicm93c2VyUHJvY2VzczogR2VuZXJpY09iamVjdDxCcm93c2VyUHJvY2Vzcz4gPSB7XG4gICAgYnJvd3NlcjogdHJ1ZSxcbiAgICBjd2QoKSB7XG4gICAgICByZXR1cm4gJy8nO1xuICAgIH0sXG4gICAgZW52OiB7fSxcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnXG4gIH07XG5cbiAgY29uc3QgZXhpc3RpbmdQcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzIGFzIFBhcnRpYWw8Tm9kZUpTLlByb2Nlc3M+IHwgdW5kZWZpbmVkO1xuXG4gIGlmICghZXhpc3RpbmdQcm9jZXNzKSB7XG4gICAgZ2xvYmFsVGhpcy5wcm9jZXNzID0gYnJvd3NlclByb2Nlc3MgYXMgTm9kZUpTLlByb2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nUHJvY2Vzcy52ZXJzaW9ucz8ubm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nUHJvY2Vzc1JlY29yZCA9IGV4aXN0aW5nUHJvY2VzcyBhcyBHZW5lcmljT2JqZWN0O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGJyb3dzZXJQcm9jZXNzKSkge1xuICAgIGV4aXN0aW5nUHJvY2Vzc1JlY29yZFtrZXldID8/PSB2YWx1ZTtcbiAgfVxuXG4gIGV4aXN0aW5nUHJvY2Vzc1JlY29yZFsnYnJvd3NlciddID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBNYWtlcyBgU3ltYm9sLmRpc3Bvc2VgIGFuZCBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgZXhpc3QsIGZhbGxpbmcgYmFjayB0byB0aGUgcmVnaXN0cnkgc3ltYm9scyBlc2J1aWxkJ3NcbiAqIGB1c2luZ2AgaGVscGVycyBsb29rIHVwLlxuICpcbiAqIEBwYXJhbSBzeW1ib2xDb25zdHJ1Y3RvciAtIFRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB0byBwYXRjaC4gRGVmYXVsdHMgdG8gdGhlIGFtYmllbnQgb25lOyB0aGUgcGFyYW1ldGVyXG4gKiBleGlzdHMgc28gYSB0ZXN0IGNhbiBoYW5kIGluIGFuIGVuZ2luZSB0aGF0IGxhY2tzIHRoZSB3ZWxsLWtub3duIHN5bWJvbHMuXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIuIEEgZGlzcG9zYWJsZSBkZWNsYXJlcyBpdHMgbWV0aG9kIHVuZGVyIHRoZSBMSVRFUkFMIGtleVxuICogYFtTeW1ib2wuZGlzcG9zZV1gLCB3aGlsZSBlc2J1aWxkIGxvd2VycyBldmVyeSBgdXNpbmdgIHRvIGEgbG9va3VwIHRocm91Z2ggYF9fa25vd25TeW1ib2woJ2Rpc3Bvc2UnKWAsXG4gKiB3aGljaCBmYWxscyBiYWNrIHRvIGBTeW1ib2wuZm9yKCdTeW1ib2wuZGlzcG9zZScpYCB3aGVuIHRoZSBlbmdpbmUgaGFzIG5vIHdlbGwta25vd24gc3ltYm9sLiBPbiBzdWNoIGFuXG4gKiBlbmdpbmUgdGhlIGxpdGVyYWwga2V5IGV2YWx1YXRlcyB0byBgdW5kZWZpbmVkYCwgdGhlIG1ldGhvZCBsYW5kcyB1bmRlciB0aGUgc3RyaW5nIGBcInVuZGVmaW5lZFwiYCwgYW5kXG4gKiBldmVyeSBgdXNpbmdgIG9mIGl0IHRocm93cyBgT2JqZWN0IG5vdCBkaXNwb3NhYmxlYC4gRmlsbGluZyB0aGUgd2VsbC1rbm93biBzbG90IHdpdGggdGhhdCBzYW1lIHJlZ2lzdHJ5XG4gKiBzeW1ib2wgbWFrZXMgYm90aCBzaWRlcyBuYW1lIG9uZSBrZXkgb24gZXZlcnkgZW5naW5lLiBBIGhvc3QgdGhhdCBhbHJlYWR5IGhhcyB0aGUgc3ltYm9sIGlzIGxlZnRcbiAqIHVudG91Y2hlZDogYD8/PWAgbmV2ZXIgcmVhY2hlcyB0aGUgYXNzaWdubWVudCwgd2hpY2ggdGhlIGhvc3QncyBub24td3JpdGFibGUgcHJvcGVydHkgd291bGQgcmVmdXNlLlxuICpcbiAqIFRoZSBkZWZhdWx0IG5hbWVzIGBTeW1ib2xgIGJhcmUgb24gcHVycG9zZTogaXQgZXhpc3RzIG9uIGV2ZXJ5IGVuZ2luZSB0aGlzIHJ1bnMgb24sIGFuZCBhIGJhcmUgcmVmZXJlbmNlXG4gKiByZXNvbHZlcyBhZ2FpbnN0IHdoYXRldmVyIHNjb3BlIHRoZSBiYW5uZXIgaXMgZXZhbHVhdGVkIGluLCBleGFjdGx5IGFzIHRoZSBidW5kbGUncyBvd25cbiAqIGBbU3ltYm9sLmRpc3Bvc2VdYCBrZXlzIGRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRGlzcG9zZVN5bWJvbHMoc3ltYm9sQ29uc3RydWN0b3I6IERpc3Bvc2VTeW1ib2xIb3N0ID0gU3ltYm9sKTogdm9pZCB7XG4gIHN5bWJvbENvbnN0cnVjdG9yLmFzeW5jRGlzcG9zZSA/Pz0gc3ltYm9sQ29uc3RydWN0b3IuZm9yKCdTeW1ib2wuYXN5bmNEaXNwb3NlJyk7XG4gIHN5bWJvbENvbnN0cnVjdG9yLmRpc3Bvc2UgPz89IHN5bWJvbENvbnN0cnVjdG9yLmZvcignU3ltYm9sLmRpc3Bvc2UnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGl0cyBhcmd1bWVudCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gVGhlIHZhbHVlIHRvIHJldHVybi5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBwYXNzZWQgaW4uXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHdoZXJlIGl0IHN0YW5kcyBpbiBmb3IgZXNidWlsZCdzIGBfX25hbWVgIGhlbHBlciBcdTIwMTQgd2hpY2ggbmFtZXMgYVxuICogZnVuY3Rpb24gYW5kIHJldHVybnMgaXQgXHUyMDE0IGZvciBidW5kbGVzIHRoYXQgcmVmZXJlbmNlIHRoZSBoZWxwZXIgd2l0aG91dCBlbWl0dGluZyB0aGVpciBvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZWVwTmFtZSgkdW5rbm93bjogdW5rbm93bik6IHVua25vd24ge1xuICByZXR1cm4gJHVua25vd247XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBiYW5uZXIgaW5qZWN0ZWQgYXQgdGhlIHRvcCBvZiBldmVyeSBlbWl0dGVkIGJ1bmRsZS5cbiAqXG4gKiBgU3RyaW5nKGZuKWAgY2FwdHVyZXMgb25seSB0aGUgZnVuY3Rpb24ncyBvd24gYm9keSwgc28gZXZlcnkgc2hpbSB0aGUgYGluaXRgIGZ1bmN0aW9uIGNhbGxzIGhhcyB0byBiZVxuICogc2VyaWFsaXplZCBuZXh0IHRvIGl0IGFuZCB3cmFwcGVkIGluIG9uZSBzaGFyZWQgc2NvcGU7IG90aGVyd2lzZSB0aGUgY2FsbCBpdCBtYWtlcyByZXNvbHZlcyBhZ2FpbnN0IHRoZVxuICogY29uc3VtZXIncyBnbG9iYWwgc2NvcGUgYXQgcnVudGltZS4gU2VlIHRoaXMgZmlsZSdzIGBAZmlsZWAgcmVtYXJrcy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBiYW5uZXIgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBiYW5uZXIgc291cmNlIHRvIHByZXBlbmQgdG8gdGhlIGVtaXR0ZWQgYnVuZGxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVByZXByb2Nlc3NCYW5uZXIob3B0aW9uczogTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zID0gW10sIGlzRXNtID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNoaW1zID0gaXNFc20gPyBbZW5zdXJlRGlzcG9zZVN5bWJvbHMsIGVuc3VyZUJyb3dzZXJQcm9jZXNzXSA6IFtlbnN1cmVEaXNwb3NlU3ltYm9scywgZW5zdXJlQnJvd3NlclByb2Nlc3MsIGtlZXBOYW1lXTtcbiAgY29uc3QgaW5pdCA9IGlzRXNtID8gaW5pdEVzbSA6IGluaXRDanM7XG4gIGNvbnN0IGFkZGl0aW9uYWxJbml0cyA9IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLm1hcCgoZnVuY3Rpb25fKSA9PiBgKCR7U3RyaW5nKGZ1bmN0aW9uXyl9KSgpO1xcbmApLmpvaW4oJycpO1xuICByZXR1cm4gYFxcbihmdW5jdGlvbiAoKSB7XFxuJHtzaGltcy5tYXAoU3RyaW5nKS5qb2luKCdcXG5cXG4nKX1cXG5cXG4oJHtTdHJpbmcoaW5pdCl9KSgpO1xcbn0pKCk7XFxuJHthZGRpdGlvbmFsSW5pdHN9YDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIHRvIHRoZSBtYXRjaGluZyBgc3RvcGAgZWl0aGVyIG5lZWRzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQgb3IgaXMgc2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciBhbmQgc28gcnVucyBpbnNpZGUgdGhlIGJ1aWx0IGJ1bmRsZSwgbmV2ZXIgaW4gdGhpcyBwcm9jZXNzLiBUaGUgc2hpbXMgYWJvdmUgYXJlIGRlbGliZXJhdGVseSBOT1QgaWdub3JlZDogdGhleSBhcmUgb3JkaW5hcnkgZnVuY3Rpb25zIGhlcmUgYW5kIGFyZSB1bml0LXRlc3RlZCBkaXJlY3RseS4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgcHJlcHJvY2Vzc2VzIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZmlsZXMuXG4gKlxuICogVGhpcyBwbHVnaW4gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczpcbiAqIC0gUmVwbGFjZXMgaW5zdGFuY2VzIG9mIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgd2l0aCBhIENvbW1vbkpTLWNvbXBhdGlibGUgYF9fZmlsZW5hbWVgIGFsdGVybmF0aXZlLlxuICogLSBNb2RpZmllcyB0aGUgYHNvdXJjZU1hcHBpbmdVUkxgIGNvbW1lbnQgc28gYSB0ZW1wbGF0ZSBsaXRlcmFsIGVuZGluZyBhIGZpbGUgZG9lcyBub3Qgc3dhbGxvdyBpdC5cbiAqIC0gQWRkcyBhIGJhc2ljIGBwcm9jZXNzYCBvYmplY3QgdG8gdGhlIGdsb2JhbCBzY29wZSBpZiBgcHJvY2Vzc2AgaXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQuXG4gKiAtIEZpbGxzIGluIGBTeW1ib2wuZGlzcG9zZWAgLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgb24gZW5naW5lcyB0aGF0IGxhY2sgdGhlbSwgc28gYHVzaW5nYCB3b3JrcyB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgaGFuZGxlcyB0aGUgcHJlcHJvY2Vzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3NQbHVnaW4ob3B0aW9uczogUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMgPSB7fSk6IFBsdWdpbiB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyID0gZ2V0Q2pzSW1wb3J0TWV0YVVybCwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gaXNFc21cbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICBbXG4gICAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6ICdpbXBvcnQoZG90KW1ldGEoZG90KXVybCcsXG4gICAgICAgICAgcmVwbGFjZXI6ICcuJyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogJyhkb3QpJ1xuICAgICAgICB9KVxuICAgICAgXTogY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyXG4gICAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdwcmVwcm9jZXNzJyxcbiAgICBzZXR1cChidWlsZCk6IHZvaWQge1xuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lID8/PSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKSkge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmVba2V5XSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgIH1cblxuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyID8/PSB7fTtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lclsnanMnXSA/Pz0gJyc7XG4gICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gKz0gbWFrZVByZXByb2Nlc3NCYW5uZXIoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgaXNFc20gfSk7XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogL1xcLig/OmpzfHRzfGNqc3xtanN8Y3RzfG10cykkLyB9LCBhc3luYyAoJGFyZ3VtZW50cykgPT4ge1xuICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCByZWFkRmlsZSgkYXJndW1lbnRzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgICAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKGtleSkgfHwgY29udGVudHMuaW5jbHVkZXMoYHZhciAke3ZhcmlhYmxlfWApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyBgKCR7U3RyaW5nKHZhbHVlKX0pKClgIDogdG9Kc29uKHZhbHVlLCB7IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsIH0pO1xuICAgICAgICAgIGNvbnRlbnRzID0gYHZhciAke3ZhcmlhYmxlfSA9IGdsb2JhbFRoaXNbJyR7a2V5fSddID8/ICR7dmFsdWVTdHJpbmd9O1xcbiR7Y29udGVudHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhBQ0s6IFRoZSAkeycnfSBwYXJ0IGlzIHVzZWQgdG8gZW5zdXJlIE9ic2lkaWFuIGxvYWRzIHRoZSBwbHVnaW4gcHJvcGVybHksXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgc3RvcHMgbG9hZGluZyBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlTWFwcGluZ1VSTCBjb21tZW50LlxuXG4gICAgICAgIGNvbnRlbnRzID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgJHN0cmluZzogY29udGVudHMsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAtLSBJdCBpcyBpbnRlbnRpb25hbCwgdGhlIHN0cmluZyBsb29rcyBsaWtlIGEgdGVtcGxhdGUgbGl0ZXJhbCwgYnV0IGl0IGlzIG5vdC5cbiAgICAgICAgICByZXBsYWNlcjogJ2BcXG4vLyMke1xcJ1xcJ30gc291cmNlTWFwcGluZ1VSTCcsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IC9gXFxyP1xcblxcL1xcLyMgc291cmNlTWFwcGluZ1VSTC9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgbG9hZGVyOiAndHMnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpIGFzIFVybE1vZHVsZTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIExvY2F0aW9uSG9zdCkubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXRDanMoKTogdm9pZCB7XG4gIGNvbnN0IGdsb2JhbFRoaXNSZWNvcmQgPSBnbG9iYWxUaGlzIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBrZWVwTmFtZTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19leHRyYWN0RGVmYXVsdCddID8/PSBleHRyYWN0RGVmYXVsdDtcblxuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBTZXJpYWxpemVkIHdpdGggaW5pdENqcyBpbnRvIHRoZSBiYW5uZXI7IGF0IG1vZHVsZSBzY29wZSBpdCB3b3VsZCBiZSBsZWZ0IG91dCBvZiBpdC5cbiAgZnVuY3Rpb24gZXh0cmFjdERlZmF1bHQobW9kdWxlOiBQYXJ0aWFsPEVzbU1vZHVsZT4gfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgICByZXR1cm4gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtb2R1bGUgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBlbnN1cmVEaXNwb3NlU3ltYm9scygpO1xuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIGFzeW5jRGlzcG9zZT86IHN5bWJvbDtcbiAgZGlzcG9zZT86IHN5bWJvbDtcbiAgZm9yOiAoa2V5OiBzdHJpbmcpID0+IHN5bWJvbDtcbn1cblxuaW50ZXJmYWNlIEVzbU1vZHVsZSB7XG4gIF9fZXNNb2R1bGU6IGJvb2xlYW47XG4gIGRlZmF1bHQ6IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIGEgYnJvd3NlciBnbG9iYWwge0BsaW5rIGdldENqc0ltcG9ydE1ldGFVcmx9IHJlYWRzLCBvcHRpb25hbCBiZWNhdXNlIGEgbm9uLWJyb3dzZXIgaG9zdCBoYXMgbm9uZS5cbiAqL1xuaW50ZXJmYWNlIEluc2VydFByZWFtYmxlUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBsZWFkaW5nQmFubmVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWFtYmxlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMb2NhdGlvbkhvc3Qge1xuICBsb2NhdGlvbj86IFBhZ2VMb2NhdGlvbjtcbn1cblxuaW50ZXJmYWNlIE1vZHVsZVNoaW1OZWVkcyB7XG4gIHJlYWRvbmx5IGlzQnJvd3NlclByb2Nlc3NOZWVkZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzTmFtZU5lZWRlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBhZ2VMb2NhdGlvbiB7XG4gIGhyZWY6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvdXJjZU1hcFdpdGhNYXBwaW5ncyB7XG4gIG1hcHBpbmdzOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBVcmxNb2R1bGUge1xuICBwYXRoVG9GaWxlVVJMOiB0eXBlb2YgcGF0aFRvRmlsZVVSTDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBidW5kbGUgcnVucyBhZ2FpbnN0IGEgYHByb2Nlc3NgIGdsb2JhbCB0aGF0IGJyb3dzZXItdGFyZ2V0aW5nIHBhY2thZ2VzIHJlY29nbml6ZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgc28gaXQgbmV2ZXIgcnVucyBpbiB0aGUgYnVpbGRlciBwcm9jZXNzIOKAlCBidXQgaXQgaXMgYW4gb3JkaW5hcnlcbiAqIGZ1bmN0aW9uIGhlcmUsIHNvIGl0IGlzIHVuaXQtdGVzdGVkIGRpcmVjdGx5IHJhdGhlciB0aGFuIGJ5IGV2YWx1YXRpbmcgdGhlIGJhbm5lciB0ZXh0LlxuICpcbiAqIEZpbGxzIGluIHRoZSBrZXlzIE1JU1NJTkcgZnJvbSBhIGhvc3QtcHJvdmlkZWQgYHByb2Nlc3NgIHJhdGhlciB0aGFuIHJlcGxhY2luZyBvciBza2lwcGluZyBpdC4gT2JzaWRpYW5cbiAqIE1vYmlsZSBleHBvc2VzIGEgcGFydGlhbCBgcHJvY2Vzc2AsIGFuZCB0aGUgd2hvbGUtb2JqZWN0IGd1YXJkcyB0aGlzIHJlcGxhY2VkIChgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcykge1xuICogcmV0dXJuOyB9YCAvIGBnbG9iYWxUaGlzUmVjb3JkWydwcm9jZXNzJ10gPz89IOKApmApIHRvb2sgdGhhdCBhcyBcImFscmVhZHkgc2hpbW1lZFwiLCBzbyBgYnJvd3NlcmAgbmV2ZXJcbiAqIGxhbmRlZC4gVGhlIGJ1bmRsZWQgYGRlYnVnYCBwYWNrYWdlIHRoZW4gc2VsZWN0ZWQgaXRzIE5vZGUgZW50cnkgcG9pbnQsIHdoaWNoIGNhbGxzXG4gKiBgcmVxdWlyZSgndXRpbCcpLmRlcHJlY2F0ZSgpYCBhdCBtb2R1bGUgdG9wIGxldmVsLCBhbmQgb24gbW9iaWxlIHRoZSBwYXRjaGVkIGByZXF1aXJlYCByZXR1cm5zIGB7fWAg4oCUIHNvXG4gKiB0aGUgcGx1Z2luIHRocmV3IGJlZm9yZSBpdHMgYG9ubG9hZGAgcmFuLlxuICpcbiAqIEEgcmVhbCBOb2RlIG9yIEVsZWN0cm9uIGBwcm9jZXNzYCBpcyBsZWZ0IGNvbXBsZXRlbHkgdW50b3VjaGVkLiBgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlYCBpcyB0aGUgc2lnbmFsIGZvclxuICogaXQsIGFuZCBpdCBpcyBzZWxmLWNvbnRhaW5lZCwgc28gaXQgYWxzbyBob2xkcyBpbiB0aGUgTm9kZSBDTEkgYnVuZGxlcyB0aGlzIGJhbm5lciBpcyBlbWl0dGVkIGludG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVCcm93c2VyUHJvY2VzcygpOiB2b2lkIHtcbiAgY29uc3QgYnJvd3NlclByb2Nlc3M6IEdlbmVyaWNPYmplY3Q8QnJvd3NlclByb2Nlc3M+ID0ge1xuICAgIGJyb3dzZXI6IHRydWUsXG4gICAgY3dkKCkge1xuICAgICAgcmV0dXJuICcvJztcbiAgICB9LFxuICAgIGVudjoge30sXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJ1xuICB9O1xuXG4gIGNvbnN0IGV4aXN0aW5nUHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcyBhcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB8IHVuZGVmaW5lZDtcblxuICBpZiAoIWV4aXN0aW5nUHJvY2Vzcykge1xuICAgIGdsb2JhbFRoaXMucHJvY2VzcyA9IGJyb3dzZXJQcm9jZXNzIGFzIE5vZGVKUy5Qcm9jZXNzO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChleGlzdGluZ1Byb2Nlc3MudmVyc2lvbnM/Lm5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3NSZWNvcmQgPSBleGlzdGluZ1Byb2Nlc3MgYXMgR2VuZXJpY09iamVjdDtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhicm93c2VyUHJvY2VzcykpIHtcbiAgICBleGlzdGluZ1Byb2Nlc3NSZWNvcmRba2V5XSA/Pz0gdmFsdWU7XG4gIH1cblxuICBleGlzdGluZ1Byb2Nlc3NSZWNvcmRbJ2Jyb3dzZXInXSA9IHRydWU7XG59XG5cbi8qKlxuICogTWFrZXMgYFN5bWJvbC5kaXNwb3NlYCBhbmQgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIGV4aXN0LCBmYWxsaW5nIGJhY2sgdG8gdGhlIHJlZ2lzdHJ5IHN5bWJvbHMgZXNidWlsZCdzXG4gKiBgdXNpbmdgIGhlbHBlcnMgbG9vayB1cC5cbiAqXG4gKiBAcGFyYW0gc3ltYm9sQ29uc3RydWN0b3IgLSBUaGUgYFN5bWJvbGAgY29uc3RydWN0b3IgdG8gcGF0Y2guIERlZmF1bHRzIHRvIHRoZSBhbWJpZW50IG9uZTsgdGhlIHBhcmFtZXRlclxuICogZXhpc3RzIHNvIGEgdGVzdCBjYW4gaGFuZCBpbiBhbiBlbmdpbmUgdGhhdCBsYWNrcyB0aGUgd2VsbC1rbm93biBzeW1ib2xzLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLiBBIGRpc3Bvc2FibGUgZGVjbGFyZXMgaXRzIG1ldGhvZCB1bmRlciB0aGUgTElURVJBTCBrZXlcbiAqIGBbU3ltYm9sLmRpc3Bvc2VdYCwgd2hpbGUgZXNidWlsZCBsb3dlcnMgZXZlcnkgYHVzaW5nYCB0byBhIGxvb2t1cCB0aHJvdWdoIGBfX2tub3duU3ltYm9sKCdkaXNwb3NlJylgLFxuICogd2hpY2ggZmFsbHMgYmFjayB0byBgU3ltYm9sLmZvcignU3ltYm9sLmRpc3Bvc2UnKWAgd2hlbiB0aGUgZW5naW5lIGhhcyBubyB3ZWxsLWtub3duIHN5bWJvbC4gT24gc3VjaCBhblxuICogZW5naW5lIHRoZSBsaXRlcmFsIGtleSBldmFsdWF0ZXMgdG8gYHVuZGVmaW5lZGAsIHRoZSBtZXRob2QgbGFuZHMgdW5kZXIgdGhlIHN0cmluZyBgXCJ1bmRlZmluZWRcImAsIGFuZFxuICogZXZlcnkgYHVzaW5nYCBvZiBpdCB0aHJvd3MgYE9iamVjdCBub3QgZGlzcG9zYWJsZWAuIEZpbGxpbmcgdGhlIHdlbGwta25vd24gc2xvdCB3aXRoIHRoYXQgc2FtZSByZWdpc3RyeVxuICogc3ltYm9sIG1ha2VzIGJvdGggc2lkZXMgbmFtZSBvbmUga2V5IG9uIGV2ZXJ5IGVuZ2luZS4gQSBob3N0IHRoYXQgYWxyZWFkeSBoYXMgdGhlIHN5bWJvbCBpcyBsZWZ0XG4gKiB1bnRvdWNoZWQ6IGA/Pz1gIG5ldmVyIHJlYWNoZXMgdGhlIGFzc2lnbm1lbnQsIHdoaWNoIHRoZSBob3N0J3Mgbm9uLXdyaXRhYmxlIHByb3BlcnR5IHdvdWxkIHJlZnVzZS5cbiAqXG4gKiBUaGUgZGVmYXVsdCBuYW1lcyBgU3ltYm9sYCBiYXJlIG9uIHB1cnBvc2U6IGl0IGV4aXN0cyBvbiBldmVyeSBlbmdpbmUgdGhpcyBydW5zIG9uLCBhbmQgYSBiYXJlIHJlZmVyZW5jZVxuICogcmVzb2x2ZXMgYWdhaW5zdCB3aGF0ZXZlciBzY29wZSB0aGUgYmFubmVyIGlzIGV2YWx1YXRlZCBpbiwgZXhhY3RseSBhcyB0aGUgYnVuZGxlJ3Mgb3duXG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAga2V5cyBkby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZURpc3Bvc2VTeW1ib2xzKHN5bWJvbENvbnN0cnVjdG9yOiBEaXNwb3NlU3ltYm9sSG9zdCA9IFN5bWJvbCk6IHZvaWQge1xuICBzeW1ib2xDb25zdHJ1Y3Rvci5hc3luY0Rpc3Bvc2UgPz89IHN5bWJvbENvbnN0cnVjdG9yLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuICBzeW1ib2xDb25zdHJ1Y3Rvci5kaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBpdHMgYXJndW1lbnQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIFRoZSB2YWx1ZSB0byByZXR1cm4uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgcGFzc2VkIGluLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLCB3aGVyZSBpdCBzdGFuZHMgaW4gZm9yIGVzYnVpbGQncyBgX19uYW1lYCBoZWxwZXIg4oCUIHdoaWNoIG5hbWVzIGFcbiAqIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGl0IOKAlCBmb3IgYnVuZGxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgaGVscGVyIHdpdGhvdXQgZW1pdHRpbmcgdGhlaXIgb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcE5hbWUoJHVua25vd246IHVua25vd24pOiB1bmtub3duIHtcbiAgcmV0dXJuICR1bmtub3duO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYmFubmVyIGluamVjdGVkIGF0IHRoZSB0b3Agb2YgZXZlcnkgZW1pdHRlZCBidW5kbGUuXG4gKlxuICogYFN0cmluZyhmbilgIGNhcHR1cmVzIG9ubHkgdGhlIGZ1bmN0aW9uJ3Mgb3duIGJvZHksIHNvIGV2ZXJ5IHNoaW0gdGhlIGBpbml0YCBmdW5jdGlvbiBjYWxscyBoYXMgdG8gYmVcbiAqIHNlcmlhbGl6ZWQgbmV4dCB0byBpdCBhbmQgd3JhcHBlZCBpbiBvbmUgc2hhcmVkIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNhbGwgaXQgbWFrZXMgcmVzb2x2ZXMgYWdhaW5zdCB0aGVcbiAqIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGF0IHJ1bnRpbWUuIFNlZSB0aGlzIGZpbGUncyBgQGZpbGVgIHJlbWFya3MuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgYmFubmVyIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgYmFubmVyIHNvdXJjZSB0byBwcmVwZW5kIHRvIHRoZSBlbWl0dGVkIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQcmVwcm9jZXNzQmFubmVyKG9wdGlvbnM6IE1ha2VQcmVwcm9jZXNzQmFubmVyT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucyA9IFtdLCBpc0VzbSA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBzaGltcyA9IGlzRXNtID8gW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzc10gOiBbZW5zdXJlRGlzcG9zZVN5bWJvbHMsIGVuc3VyZUJyb3dzZXJQcm9jZXNzLCBrZWVwTmFtZV07XG4gIGNvbnN0IGluaXQgPSBpc0VzbSA/IGluaXRFc20gOiBpbml0Q2pzO1xuICBjb25zdCBhZGRpdGlvbmFsSW5pdHMgPSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucy5tYXAoKGZ1bmN0aW9uXykgPT4gYCgke1N0cmluZyhmdW5jdGlvbl8pfSkoKTtcXG5gKS5qb2luKCcnKTtcbiAgcmV0dXJuIGBcXG4oZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuKCR7U3RyaW5nKGluaXQpfSkoKTtcXG59KSgpO1xcbiR7YWRkaXRpb25hbEluaXRzfWA7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGx1Z2luJ3Mgc2V0dXAgbmVlZHMgYSBsaXZlIGVzYnVpbGQgY29udGV4dCwgYW5kIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxhdGVyIGlnbm9yZWQgcmFuZ2VzIGFyZSBzZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyIGFuZCBzbyBydW4gaW5zaWRlIHRoZSBidWlsdCBidW5kbGUsIG5ldmVyIGluIHRoaXMgcHJvY2Vzcy4gVGhlIHNoaW1zIGFib3ZlIGFyZSBkZWxpYmVyYXRlbHkgTk9UIGlnbm9yZWQ6IHRoZXkgYXJlIG9yZGluYXJ5IGZ1bmN0aW9ucyBoZXJlIGFuZCBhcmUgdW5pdC10ZXN0ZWQgZGlyZWN0bHksIGFuZCBuZWl0aGVyIGFyZSB0aGUgdW5idW5kbGVkLWJ1aWxkIGhlbHBlcnMsIHdoaWNoIHRoZSB0ZXN0cyBkcml2ZSB0aHJvdWdoIGEgc3R1YiBidWlsZC4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgcHJlcHJvY2Vzc2VzIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZmlsZXMuXG4gKlxuICogVGhpcyBwbHVnaW4gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczpcbiAqIC0gUmVwbGFjZXMgaW5zdGFuY2VzIG9mIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgd2l0aCBhIENvbW1vbkpTLWNvbXBhdGlibGUgYF9fZmlsZW5hbWVgIGFsdGVybmF0aXZlLlxuICogLSBNb2RpZmllcyB0aGUgYHNvdXJjZU1hcHBpbmdVUkxgIGNvbW1lbnQgc28gYSB0ZW1wbGF0ZSBsaXRlcmFsIGVuZGluZyBhIGZpbGUgZG9lcyBub3Qgc3dhbGxvdyBpdC5cbiAqIC0gQWRkcyBhIGJhc2ljIGBwcm9jZXNzYCBvYmplY3QgdG8gdGhlIGdsb2JhbCBzY29wZSBpZiBgcHJvY2Vzc2AgaXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQuXG4gKiAtIEZpbGxzIGluIGBTeW1ib2wuZGlzcG9zZWAgLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgb24gZW5naW5lcyB0aGF0IGxhY2sgdGhlbSwgc28gYHVzaW5nYCB3b3JrcyB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgaGFuZGxlcyB0aGUgcHJlcHJvY2Vzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3NQbHVnaW4ob3B0aW9uczogUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMgPSB7fSk6IFBsdWdpbiB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyID0gZ2V0Q2pzSW1wb3J0TWV0YVVybCwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gaXNFc21cbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICBbXG4gICAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6ICdpbXBvcnQoZG90KW1ldGEoZG90KXVybCcsXG4gICAgICAgICAgcmVwbGFjZXI6ICcuJyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogJyhkb3QpJ1xuICAgICAgICB9KVxuICAgICAgXTogY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyXG4gICAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdwcmVwcm9jZXNzJyxcbiAgICBzZXR1cChidWlsZCk6IHZvaWQge1xuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lID8/PSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKSkge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmVba2V5XSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1aWxkLmluaXRpYWxPcHRpb25zLmJ1bmRsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gT25lIG91dHB1dCBwZXIgc291cmNlOiBlYWNoIG1vZHVsZSBnZXRzIG9ubHkgdGhlIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgc28gYSBwYWdlIGltcG9ydGluZyBhIHB1cmVcbiAgICAgICAgLy8gbW9kdWxlIG9mIGEgbGlicmFyeSBpcyBsZWZ0IHdpdGggaXRzIGdsb2JhbHMgdW50b3VjaGVkLlxuICAgICAgICBjb25zdCBsZWFkaW5nQmFubmVyID0gYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyPy5bJ2pzJ10gPz8gJyc7XG4gICAgICAgIGJ1aWxkLm9uRW5kKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBhZGRNb2R1bGVQcmVhbWJsZXMoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgbGVhZGluZ0Jhbm5lciwgb3V0cHV0RmlsZXM6IHJlc3VsdC5vdXRwdXRGaWxlcyA/PyBbXSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXIgPz89IHt9O1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gPz89ICcnO1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gKz0gbWFrZVByZXByb2Nlc3NCYW5uZXIoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgaXNFc20gfSk7XG4gICAgICB9XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogL1xcLig/OmpzfHRzfGNqc3xtanN8Y3RzfG10cykkLyB9LCBhc3luYyAoJGFyZ3VtZW50cykgPT4ge1xuICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCByZWFkRmlsZSgkYXJndW1lbnRzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgICAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKGtleSkgfHwgY29udGVudHMuaW5jbHVkZXMoYHZhciAke3ZhcmlhYmxlfWApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyBgKCR7U3RyaW5nKHZhbHVlKX0pKClgIDogdG9Kc29uKHZhbHVlLCB7IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsIH0pO1xuICAgICAgICAgIGNvbnRlbnRzID0gYHZhciAke3ZhcmlhYmxlfSA9IGdsb2JhbFRoaXNbJyR7a2V5fSddID8/ICR7dmFsdWVTdHJpbmd9O1xcbiR7Y29udGVudHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhBQ0s6IFRoZSAkeycnfSBwYXJ0IGlzIHVzZWQgdG8gZW5zdXJlIE9ic2lkaWFuIGxvYWRzIHRoZSBwbHVnaW4gcHJvcGVybHksXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgc3RvcHMgbG9hZGluZyBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlTWFwcGluZ1VSTCBjb21tZW50LlxuXG4gICAgICAgIGNvbnRlbnRzID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgJHN0cmluZzogY29udGVudHMsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAtLSBJdCBpcyBpbnRlbnRpb25hbCwgdGhlIHN0cmluZyBsb29rcyBsaWtlIGEgdGVtcGxhdGUgbGl0ZXJhbCwgYnV0IGl0IGlzIG5vdC5cbiAgICAgICAgICByZXBsYWNlcjogJ2BcXG4vLyMke1xcJ1xcJ30gc291cmNlTWFwcGluZ1VSTCcsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IC9gXFxyP1xcblxcL1xcLyMgc291cmNlTWFwcGluZ1VSTC9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgbG9hZGVyOiAndHMnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogUHJlcGVuZHMgdG8gZWFjaCBlbWl0dGVkIG1vZHVsZSB0aGUgcHJlYW1ibGUgaXRzIG93biBjb2RlIG5lZWRzLCBhbmQgbm90aGluZyB3aGVuIGl0IG5lZWRzIG5vbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbWl0dGVkIG1vZHVsZXMsIHRoZSBiYW5uZXIgdGhlIGNhbGxlciBhbHJlYWR5IHB1dCBmaXJzdCwgYW5kIHRoZSBjYWxsZXIncyBleHRyYSBpbml0cy5cbiAqL1xuZnVuY3Rpb24gYWRkTW9kdWxlUHJlYW1ibGVzKHBhcmFtczogQWRkTW9kdWxlUHJlYW1ibGVzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzIH0gPSBwYXJhbXM7XG4gIGZvciAoY29uc3Qgb3V0cHV0RmlsZSBvZiBvdXRwdXRGaWxlcykge1xuICAgIGlmICghSlNfT1VUUFVUX1JFR19FWFAudGVzdChvdXRwdXRGaWxlLnBhdGgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2RlID0gb3V0cHV0RmlsZS50ZXh0O1xuICAgIGNvbnN0IHByZWFtYmxlID0gbWFrZU1vZHVsZVByZWFtYmxlKGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlKSwgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMpO1xuICAgIGlmIChwcmVhbWJsZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG91dHB1dEZpbGUuY29udGVudHMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoaW5zZXJ0UHJlYW1ibGUoeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9KSk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBtb2R1bGUsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpIGFzIFVybE1vZHVsZTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIExvY2F0aW9uSG9zdCkubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG5mdW5jdGlvbiBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZTogSWRlbnRpZmllcik6IElkZW50aWZpZXJVc2FnZSB7XG4gIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuICBpZiAoXG4gICAgKGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHBhcmVudCkgfHwgaXNQcm9wZXJ0eUFzc2lnbm1lbnQocGFyZW50KSB8fCBpc01ldGhvZERlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKHBhcmVudClcbiAgICAgIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwYXJlbnQpKVxuICAgICYmIHBhcmVudC5uYW1lID09PSBub2RlXG4gICkge1xuICAgIHJldHVybiBJZGVudGlmaWVyVXNhZ2UuTWVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIChpc1ZhcmlhYmxlRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc0NsYXNzRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1BhcmFtZXRlcihwYXJlbnQpIHx8IGlzQmluZGluZ0VsZW1lbnQocGFyZW50KVxuICAgICAgfHwgaXNJbXBvcnRDbGF1c2UocGFyZW50KSB8fCBpc0ltcG9ydFNwZWNpZmllcihwYXJlbnQpIHx8IGlzTmFtZXNwYWNlSW1wb3J0KHBhcmVudCkpXG4gICAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICAgID8gSWRlbnRpZmllclVzYWdlLkJpbmRpbmdcbiAgICA6IElkZW50aWZpZXJVc2FnZS5SZWFkO1xufVxuXG4vKipcbiAqIFJlYWRzIHdoaWNoIHNoaW1zIGFuIGVtaXR0ZWQgbW9kdWxlIG5lZWRzIGZyb20gaXRzIGNvZGUuXG4gKlxuICogLSBgZW5zdXJlQnJvd3NlclByb2Nlc3NgOiBpdCByZWFkcyBhIGBwcm9jZXNzYCBpdCBkb2VzIG5vdCBiaW5kIGl0c2VsZiwgb3IgaXQgbG9hZHMgYSBiYXJlIHBhY2thZ2UgdGhhdCBpcyBub3QgYVxuICogICBgbm9kZTpgIGJ1aWx0LWluLiBUaGUgc2Vjb25kIGNhc2UgaXMgdGhlcmUgYmVjYXVzZSBzdWNoIGEgcGFja2FnZSAoYHBhdGgtYnJvd3NlcmlmeWAgcmVhZHMgYHByb2Nlc3MuY3dkKClgKSBjYW5ub3RcbiAqICAgY2FycnkgYSBzaGltIG9mIGl0cyBvd24sIGFuZCBpbiBhbiB1bmJ1bmRsZWQgYnVpbGQgaXRzIGltcG9ydGVyIGlzIHRoZSBvbmx5IG1vZHVsZSB0aGF0IGNhbi5cbiAqIC0gYGVuc3VyZURpc3Bvc2VTeW1ib2xzYDogaXQgbmFtZXMgYFN5bWJvbC5kaXNwb3NlYCBvciBgU3ltYm9sLmFzeW5jRGlzcG9zZWAsIG9yIGhvbGRzIGVzYnVpbGQncyBgX19rbm93blN5bWJvbGBcbiAqICAgaGVscGVyLCB3aGljaCBhIGxvd2VyZWQgYHVzaW5nYCBlbWl0cy5cbiAqIC0gYF9fbmFtZWA6IGl0IHJlYWRzIGEgYF9fbmFtZWAgaXQgZG9lcyBub3QgZGVjbGFyZS5cbiAqXG4gKiBAcGFyYW0gY29kZSAtIFRoZSBlbWl0dGVkIG1vZHVsZS5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIG1vZHVsZSBuZWVkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlU2hpbU5lZWRzKGNvZGU6IHN0cmluZyk6IE1vZHVsZVNoaW1OZWVkcyB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBjcmVhdGVTb3VyY2VGaWxlKCdtb2R1bGUuanMnLCBjb2RlLCBTY3JpcHRUYXJnZXQuTGF0ZXN0LCB0cnVlLCBTY3JpcHRLaW5kLkpTKTtcbiAgY29uc3QgYm91bmROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZWFkTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IGlzQmFyZUltcG9ydEZvdW5kID0gZmFsc2U7XG4gIGxldCBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBzcGVjaWZpZXIgPSBnZXRNb2R1bGVTcGVjaWZpZXIobm9kZSk7XG4gICAgaWYgKHNwZWNpZmllciAhPT0gdW5kZWZpbmVkICYmICFOT05fQkFSRV9TUEVDSUZJRVJfUkVHX0VYUC50ZXN0KHNwZWNpZmllcikpIHtcbiAgICAgIGlzQmFyZUltcG9ydEZvdW5kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKSAmJiBpc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJiBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gJ1N5bWJvbCdcbiAgICAgICYmIERJU1BPU0VfU1lNQk9MX05BTUVTLmhhcyhub2RlLm5hbWUudGV4dClcbiAgICApIHtcbiAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICBpZiAobm9kZS50ZXh0ID09PSBLTk9XTl9TWU1CT0xfSEVMUEVSX05BTUUpIHtcbiAgICAgICAgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2FnZSA9IGdldElkZW50aWZpZXJVc2FnZShub2RlKTtcbiAgICAgIGlmICh1c2FnZSA9PT0gSWRlbnRpZmllclVzYWdlLkJpbmRpbmcpIHtcbiAgICAgICAgYm91bmROYW1lcy5hZGQobm9kZS50ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5SZWFkKSB7XG4gICAgICAgIHJlYWROYW1lcy5hZGQobm9kZS50ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICB9XG4gIHZpc2l0KHNvdXJjZUZpbGUpO1xuXG4gIGZ1bmN0aW9uIGlzRnJlZVJlYWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlYWROYW1lcy5oYXMobmFtZSkgJiYgIWJvdW5kTmFtZXMuaGFzKG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc0Jyb3dzZXJQcm9jZXNzTmVlZGVkOiBpc0ZyZWVSZWFkKCdwcm9jZXNzJykgfHwgaXNCYXJlSW1wb3J0Rm91bmQsXG4gICAgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogaXNEaXNwb3NlU3ltYm9sRm91bmQsXG4gICAgaXNOYW1lTmVlZGVkOiBpc0ZyZWVSZWFkKCdfX25hbWUnKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIobm9kZTogTm9kZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgoaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSB8fCBpc0V4cG9ydERlY2xhcmF0aW9uKG5vZGUpKSAmJiBub2RlLm1vZHVsZVNwZWNpZmllciAhPT0gdW5kZWZpbmVkICYmIGlzU3RyaW5nTGl0ZXJhbChub2RlLm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICByZXR1cm4gbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dDtcbiAgfVxuXG4gIGlmIChpc0NhbGxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgY29uc3QgW2ZpcnN0QXJndW1lbnRdID0gbm9kZS5hcmd1bWVudHM7XG4gICAgY29uc3QgaXNMb2FkZXIgPSBub2RlLmV4cHJlc3Npb24ua2luZCA9PT0gU3ludGF4S2luZC5JbXBvcnRLZXl3b3JkIHx8IChpc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJiBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gJ3JlcXVpcmUnKTtcbiAgICBpZiAoaXNMb2FkZXIgJiYgZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkICYmIGlzU3RyaW5nTGl0ZXJhbChmaXJzdEFyZ3VtZW50KSkge1xuICAgICAgcmV0dXJuIGZpcnN0QXJndW1lbnQudGV4dDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgc2VlIGFib3ZlLiAqL1xuZnVuY3Rpb24gaW5pdENqcygpOiB2b2lkIHtcbiAgY29uc3QgZ2xvYmFsVGhpc1JlY29yZCA9IGdsb2JhbFRoaXMgYXMgR2VuZXJpY09iamVjdDtcbiAgZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19uYW1lJ10gPz89IGtlZXBOYW1lO1xuICBnbG9iYWxUaGlzUmVjb3JkWydfX2V4dHJhY3REZWZhdWx0J10gPz89IGV4dHJhY3REZWZhdWx0O1xuXG4gIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nIC0tIFNlcmlhbGl6ZWQgd2l0aCBpbml0Q2pzIGludG8gdGhlIGJhbm5lcjsgYXQgbW9kdWxlIHNjb3BlIGl0IHdvdWxkIGJlIGxlZnQgb3V0IG9mIGl0LlxuICBmdW5jdGlvbiBleHRyYWN0RGVmYXVsdChtb2R1bGU6IFBhcnRpYWw8RXNtTW9kdWxlPiB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICAgIHJldHVybiBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgJiYgJ2RlZmF1bHQnIGluIG1vZHVsZSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRFc20oKTogdm9pZCB7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIEluc2VydHMgdGhlIHByZWFtYmxlIGFmdGVyIHRoZSBjYWxsZXIncyBsZWFkaW5nIGJhbm5lciwgYW5kIHNoaWZ0cyBhbiBpbmxpbmUgc291cmNlIG1hcCBkb3duIGJ5IHRoZSBsaW5lcyBpdCBhZGRzLFxuICogc28gdGhlIG1vZHVsZSdzIG93biBsaW5lcyBrZWVwIG1hcHBpbmcgb250byB0aGVpciBzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbW9kdWxlLCBpdHMgbGVhZGluZyBiYW5uZXIgYW5kIHRoZSBwcmVhbWJsZS5cbiAqIEByZXR1cm5zIFRoZSBtb2R1bGUgd2l0aCB0aGUgcHJlYW1ibGUgaW4gaXQuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFByZWFtYmxlKHBhcmFtczogSW5zZXJ0UHJlYW1ibGVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGNvZGUsIGxlYWRpbmdCYW5uZXIsIHByZWFtYmxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGluc2VydEF0ID0gbGVhZGluZ0Jhbm5lci5lbmRzV2l0aCgnXFxuJykgJiYgY29kZS5zdGFydHNXaXRoKGxlYWRpbmdCYW5uZXIpID8gbGVhZGluZ0Jhbm5lci5sZW5ndGggOiAwO1xuICBjb25zdCBhZGRlZExpbmVDb3VudCA9IHByZWFtYmxlLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxO1xuICBsZXQgc2hpZnRlZENvZGUgPSBjb2RlO1xuICBjb25zdCBzb3VyY2VNYXBTdGFydCA9IGNvZGUubGFzdEluZGV4T2YoSU5MSU5FX1NPVVJDRV9NQVBfUFJFRklYKTtcbiAgaWYgKHNvdXJjZU1hcFN0YXJ0ICE9PSAtMSkge1xuICAgIGNvbnN0IGRhdGFTdGFydCA9IHNvdXJjZU1hcFN0YXJ0ICsgSU5MSU5FX1NPVVJDRV9NQVBfUFJFRklYLmxlbmd0aDtcbiAgICBjb25zdCBkYXRhID0gY29kZS5zbGljZShkYXRhU3RhcnQpLnRyaW1FbmQoKTtcbiAgICBjb25zdCBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGRhdGEsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKSkgYXMgU291cmNlTWFwV2l0aE1hcHBpbmdzO1xuICAgIHNvdXJjZU1hcC5tYXBwaW5ncyA9ICc7Jy5yZXBlYXQoYWRkZWRMaW5lQ291bnQpICsgc291cmNlTWFwLm1hcHBpbmdzO1xuICAgIHNoaWZ0ZWRDb2RlID0gY29kZS5zbGljZSgwLCBkYXRhU3RhcnQpICsgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpICsgY29kZS5zbGljZShkYXRhU3RhcnQgKyBkYXRhLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHNoaWZ0ZWRDb2RlLnNsaWNlKDAsIGluc2VydEF0KSArIHByZWFtYmxlICsgc2hpZnRlZENvZGUuc2xpY2UoaW5zZXJ0QXQpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcHJlYW1ibGUgb2Ygb25lIHVuYnVuZGxlZCBtb2R1bGU6IHRoZSBzaGltcyBpdCBuZWVkcyBpbiBvbmUgc2hhcmVkIHNjb3BlLCB0aGVuIHRoZSBjYWxsZXIncyBleHRyYSBpbml0cy5cbiAqXG4gKiBAcGFyYW0gbmVlZHMgLSBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKiBAcGFyYW0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgLSBUaGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMsIHdoaWNoIGV2ZXJ5IG1vZHVsZSBnZXRzLlxuICogQHJldHVybnMgVGhlIHByZWFtYmxlLCBlbXB0eSB3aGVuIHRoZSBtb2R1bGUgbmVlZHMgbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gbWFrZU1vZHVsZVByZWFtYmxlKG5lZWRzOiBNb2R1bGVTaGltTmVlZHMsIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zOiByZWFkb25seSAoKCkgPT4gdm9pZClbXSk6IHN0cmluZyB7XG4gIGNvbnN0IHNoaW1zOiAoKC4uLmFyZ3VtZW50c186IG5ldmVyW10pID0+IHVua25vd24pW10gPSBbXTtcbiAgY29uc3QgY2FsbHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5lZWRzLmlzRGlzcG9zZVN5bWJvbHNOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGVuc3VyZURpc3Bvc2VTeW1ib2xzKTtcbiAgICBjYWxscy5wdXNoKCdlbnN1cmVEaXNwb3NlU3ltYm9scygpOycpO1xuICB9XG5cbiAgaWYgKG5lZWRzLmlzQnJvd3NlclByb2Nlc3NOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGVuc3VyZUJyb3dzZXJQcm9jZXNzKTtcbiAgICBjYWxscy5wdXNoKCdlbnN1cmVCcm93c2VyUHJvY2VzcygpOycpO1xuICB9XG5cbiAgaWYgKG5lZWRzLmlzTmFtZU5lZWRlZCkge1xuICAgIHNoaW1zLnB1c2goa2VlcE5hbWUpO1xuICAgIGNhbGxzLnB1c2goJ2dsb2JhbFRoaXNbXFwnX19uYW1lXFwnXSA/Pz0ga2VlcE5hbWU7Jyk7XG4gIH1cblxuICBjb25zdCBzaGFyZWRTY29wZSA9IHNoaW1zLmxlbmd0aCA9PT0gMCA/ICcnIDogYChmdW5jdGlvbiAoKSB7XFxuJHtzaGltcy5tYXAoU3RyaW5nKS5qb2luKCdcXG5cXG4nKX1cXG5cXG4ke2NhbGxzLmpvaW4oJ1xcbicpfVxcbn0pKCk7XFxuYDtcbiAgcmV0dXJuIHNoYXJlZFNjb3BlICsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUNBLDBCQUdPO0FBQ1Asb0JBR087QUFDUCx5QkFBdUI7QUFDdkIsc0JBQXlCO0FBQ3pCLHdCQXlCTztBQUVQLE1BQU0sdUJBQXVCLG9CQUFJLElBQUksQ0FBQyxnQkFBZ0IsU0FBUyxDQUFDO0FBQ2hFLE1BQU0sMkJBQTJCO0FBQ2pDLE1BQU0sb0JBQW9CO0FBRTFCLE1BQU0sMkJBQTJCO0FBRWpDLE1BQU0sNkJBQTZCO0FBZ0k1QixTQUFTLHVCQUE2QjtBQUMzQyxRQUFNLGlCQUFnRDtBQUFBLElBQ3BELFNBQVM7QUFBQSxJQUNULE1BQU07QUFDSixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FB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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/// <reference path="../../
|
|
1
|
+
/// <reference path="../../library-references.d.cts" />
|
|
2
2
|
/**
|
|
3
3
|
* @file
|
|
4
4
|
*
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* We cannot use `.` instead of `(dot)` in the above description because the file itself is preprocessed with the same rule.
|
|
9
9
|
*
|
|
10
10
|
* `initCjs`, `initEsm` and the shims they call are stringified with `String(fn)` and injected into every
|
|
11
|
-
* built bundle as an esbuild banner, so they must be reachable from one another by BARE identifier.
|
|
11
|
+
* built bundle as an esbuild banner, so they must be reachable from one another by BARE identifier. An unbundled
|
|
12
|
+
* build (`bundle: false`, one output per source) gets no banner: each emitted module gets a preamble holding only the
|
|
13
|
+
* shims its own code needs, and a module that needs none gets nothing. That is
|
|
12
14
|
* why they all live in this module: esbuild compiles a cross-module call to `(0, import_module.fn)(…)`,
|
|
13
15
|
* which would name a binding the emitted bundle does not have. Same-module references stay bare, and
|
|
14
16
|
* {@link makePreprocessBanner} serializes the shims alongside the `init` function so they are in scope there. A shim
|
|
@@ -2,13 +2,7 @@
|
|
|
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
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
|
|
|
39
33
|
existingProcessRecord['browser'] = true;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
|
|
43
|
-
return $unknown;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
(function initCjs() {
|
|
47
|
-
const globalThisRecord = globalThis;
|
|
48
|
-
ensureDisposeSymbols();
|
|
49
|
-
globalThisRecord['__name'] ??= keepName;
|
|
50
|
-
globalThisRecord['__extractDefault'] ??= extractDefault;
|
|
51
|
-
|
|
52
|
-
ensureBrowserProcess();
|
|
53
|
-
|
|
54
|
-
// eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
|
|
55
|
-
function extractDefault(module) {
|
|
56
|
-
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
57
|
-
}
|
|
58
|
-
})();
|
|
36
|
+
ensureBrowserProcess();
|
|
59
37
|
})();
|
|
60
38
|
|
|
61
39
|
"use strict";
|
|
@@ -92,7 +70,7 @@ __export(svelte_wrapper_plugin_exports, {
|
|
|
92
70
|
});
|
|
93
71
|
module.exports = __toCommonJS(svelte_wrapper_plugin_exports);
|
|
94
72
|
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
95
|
-
var import_esbuild_svelte = __toESM(
|
|
73
|
+
var import_esbuild_svelte = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('esbuild-svelte')), 1);
|
|
96
74
|
var import_svelte_preprocess = require('svelte-preprocess');
|
|
97
75
|
var import_npm = require('../../npm.cjs');
|
|
98
76
|
const esbuildSvelte = (0, import_object_utils.extractDefaultExportInterop)(import_esbuild_svelte.default);
|
|
@@ -126,4 +104,4 @@ function svelteWrapperPlugin(isProductionBuild) {
|
|
|
126
104
|
0 && (module.exports = {
|
|
127
105
|
svelteWrapperPlugin
|
|
128
106
|
});
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvc3ZlbHRlLXdyYXBwZXItcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTdmVsdGUgd3JhcHBlciBlc2J1aWxkIHBsdWdpbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZCBwbHVnaW4gd3JhcHBpbmcgZXNidWlsZC1zdmVsdGUgd2l0aCBzdmVsdGUtcHJlcHJvY2VzczsgcmVxdWlyZXMgYSBsaXZlIGVzYnVpbGQgY29udGV4dC4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcblxuaW1wb3J0IHsgZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgZXNidWlsZFN2ZWx0ZV8gZnJvbSAnZXNidWlsZC1zdmVsdGUnO1xuaW1wb3J0IHsgc3ZlbHRlUHJlcHJvY2VzcyB9IGZyb20gJ3N2ZWx0ZS1wcmVwcm9jZXNzJztcblxuaW1wb3J0IHsgcmVhZFBhY2thZ2VKc29uIH0gZnJvbSAnLi4vLi4vbnBtLnRzJztcblxuY29uc3QgZXNidWlsZFN2ZWx0ZSA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChlc2J1aWxkU3ZlbHRlXyk7XG5cbi8qKlxuICogV3JhcHMgdGhlIGVzYnVpbGQtc3ZlbHRlIHBsdWdpbiB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBmb3JtYXQgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0gaXNQcm9kdWN0aW9uQnVpbGQgLSBXaGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gKiBAcmV0dXJucyBUaGUgZXNidWlsZCBwbHVnaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdmVsdGVXcmFwcGVyUGx1Z2luKGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuKTogUGx1Z2luIHtcbiAgY29uc3QgZXNidWlsZFN2ZWx0ZVBsdWdpbiA9IGVzYnVpbGRTdmVsdGUoe1xuICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgY3NzOiAnaW5qZWN0ZWQnLFxuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIG1vZHVsZUNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIHByZXByb2Nlc3M6IHN2ZWx0ZVByZXByb2Nlc3MoKVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzdmVsdGUtd3JhcHBlcicsXG4gICAgYXN5bmMgc2V0dXAoYnVpbGQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJyA/ICdlc20nIDogJ2Nqcyc7XG4gICAgICBhd2FpdCBlc2J1aWxkU3ZlbHRlUGx1Z2luLnNldHVwKHtcbiAgICAgICAgLi4uYnVpbGQsXG4gICAgICAgIGluaXRpYWxPcHRpb25zOiB7XG4gICAgICAgICAgLi4uYnVpbGQuaW5pdGlhbE9wdGlvbnMsXG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVVBLDBCQUE0QztBQUM1Qyw0QkFBMkI7QUFDM0IsK0JBQWlDO0FBRWpDLGlCQUFnQztBQUVoQyxNQUFNLG9CQUFnQixpREFBNEIsc0JBQUFBLE9BQWM7QUFRekQsU0FBUyxvQkFBb0IsbUJBQW9DO0FBQ3RFLFFBQU0sc0JBQXNCLGNBQWM7QUFBQSxJQUN4QyxpQkFBaUI7QUFBQSxNQUNmLEtBQUs7QUFBQSxNQUNMLEtBQUssQ0FBQztBQUFBLElBQ1I7QUFBQSxJQUNBLHVCQUF1QjtBQUFBLE1BQ3JCLEtBQUssQ0FBQztBQUFBLElBQ1I7QUFBQSxJQUNBLGdCQUFZLDJDQUFpQjtBQUFBLEVBQy9CLENBQUM7QUFFRCxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNLE1BQU0sT0FBc0I7QUFDaEMsWUFBTSxjQUFjLFVBQU0sNEJBQWdCO0FBQzFDLFlBQU0sU0FBUyxZQUFZLFNBQVMsV0FBVyxRQUFRO0FBQ3ZELFlBQU0sb0JBQW9CLE1BQU07QUFBQSxRQUM5QixHQUFHO0FBQUEsUUFDSCxnQkFBZ0I7QUFBQSxVQUNkLEdBQUcsTUFBTTtBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6WyJlc2J1aWxkU3ZlbHRlXyJdfQ==
|
|
@@ -3,61 +3,6 @@ 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
5
|
|
|
6
|
-
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function ensureBrowserProcess() {
|
|
13
|
-
const browserProcess = {
|
|
14
|
-
browser: true,
|
|
15
|
-
cwd() {
|
|
16
|
-
return '/';
|
|
17
|
-
},
|
|
18
|
-
env: {},
|
|
19
|
-
platform: 'android'
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const existingProcess = globalThis.process;
|
|
23
|
-
|
|
24
|
-
if (!existingProcess) {
|
|
25
|
-
globalThis.process = browserProcess;
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (existingProcess.versions?.node) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const existingProcessRecord = existingProcess;
|
|
34
|
-
|
|
35
|
-
for (const [key, value] of Object.entries(browserProcess)) {
|
|
36
|
-
existingProcessRecord[key] ??= value;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
existingProcessRecord['browser'] = true;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function keepName($unknown) {
|
|
43
|
-
return $unknown;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
(function initCjs() {
|
|
47
|
-
const globalThisRecord = globalThis;
|
|
48
|
-
ensureDisposeSymbols();
|
|
49
|
-
globalThisRecord['__name'] ??= keepName;
|
|
50
|
-
globalThisRecord['__extractDefault'] ??= extractDefault;
|
|
51
|
-
|
|
52
|
-
ensureBrowserProcess();
|
|
53
|
-
|
|
54
|
-
// eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
|
|
55
|
-
function extractDefault(module) {
|
|
56
|
-
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
57
|
-
}
|
|
58
|
-
})();
|
|
59
|
-
})();
|
|
60
|
-
|
|
61
6
|
"use strict";
|
|
62
7
|
var __create = Object.create;
|
|
63
8
|
var __defProp = Object.defineProperty;
|
|
@@ -91,9 +36,9 @@ __export(bundlers_exports, {
|
|
|
91
36
|
"esbuild-impl": () => esbuild_impl
|
|
92
37
|
});
|
|
93
38
|
module.exports = __toCommonJS(bundlers_exports);
|
|
94
|
-
var esbuild_impl = __toESM(
|
|
39
|
+
var esbuild_impl = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./esbuild-impl/index.cjs')), 1);
|
|
95
40
|
// Annotate the CommonJS export names for ESM import in node:
|
|
96
41
|
0 && (module.exports = {
|
|
97
42
|
"esbuild-impl": null
|
|
98
43
|
});
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2VzYnVpbGQtaW1wbCcgZnJvbSAnLi9lc2J1aWxkLWltcGwvaW5kZXgudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLHdCQUFBQTtBQUFBO0FBQUE7QUFFQSxJQUFBQSxlQUFnQzsiLAogICJuYW1lcyI6IFsiZXNidWlsZC1pbXBsIl0KfQo=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/// <reference path="../
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
2
|
export * as 'esbuild-impl' from './esbuild-impl/index.cjs';
|
|
@@ -2,13 +2,7 @@
|
|
|
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
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
|
|
|
39
33
|
existingProcessRecord['browser'] = true;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
|
|
43
|
-
return $unknown;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
(function initCjs() {
|
|
47
|
-
const globalThisRecord = globalThis;
|
|
48
|
-
ensureDisposeSymbols();
|
|
49
|
-
globalThisRecord['__name'] ??= keepName;
|
|
50
|
-
globalThisRecord['__extractDefault'] ??= extractDefault;
|
|
51
|
-
|
|
52
|
-
ensureBrowserProcess();
|
|
53
|
-
|
|
54
|
-
// eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
|
|
55
|
-
function extractDefault(module) {
|
|
56
|
-
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
57
|
-
}
|
|
58
|
-
})();
|
|
36
|
+
ensureBrowserProcess();
|
|
59
37
|
})();
|
|
60
38
|
|
|
61
39
|
"use strict";
|
|
@@ -93,7 +71,7 @@ __export(check_project_types_exports, {
|
|
|
93
71
|
toCanonical: () => toCanonical
|
|
94
72
|
});
|
|
95
73
|
module.exports = __toCommonJS(check_project_types_exports);
|
|
96
|
-
var import_node_process = __toESM(
|
|
74
|
+
var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
|
|
97
75
|
var import_typescript = require('typescript');
|
|
98
76
|
const FORMAT_HOST = {
|
|
99
77
|
getCanonicalFileName: (fileName) => fileName,
|
|
@@ -160,4 +138,4 @@ function shouldKeepDiagnosticByFile(diagnostic, shouldKeepFile) {
|
|
|
160
138
|
parseTsConfig,
|
|
161
139
|
toCanonical
|
|
162
140
|
});
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NoZWNrLXByb2plY3QtdHlwZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlLWNoZWNrcyBhIHNldCBvZiBUeXBlU2NyaXB0IGZpbGVzIHdpdGggYHNraXBMaWJDaGVja2AgZGlzYWJsZWQsIGJ1dCByZXBvcnRzIG9ubHkgdGhlXG4gKiBkaWFnbm9zdGljcyB3aG9zZSBzb3VyY2UgZmlsZSB3ZSBvd24uIFRoaXMgbGV0cyB0aGUgZ2VuZXJhbCBidWlsZCBydW4gd2l0aCBgc2tpcExpYkNoZWNrOiB0cnVlYFxuICogKHNvIGl0IGRvZXMgbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wsIHN1Y2ggYXMgYSBnaXZlblxuICogdmVyc2lvbidzIGBvYnNpZGlhbi5kLnRzYCkgd2hpbGUgc3RpbGwgZnVsbHkgdmFsaWRhdGluZyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvci5cbiAqXG4gKiBXaGVuIHVwc3RyZWFtIHR5cGVzIGFyZSBmaXhlZCwgdGhlIGBJZ25vcmVkIE4gZGlhZ25vc3RpYyhzKWAgY291bnQgZHJvcHMgdG8gYDBgLCBzaWduYWxsaW5nIHRoZVxuICogd29ya2Fyb3VuZCBpcyBubyBsb25nZXIgZG9pbmcgYW55dGhpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21waWxlck9wdGlvbnMsXG4gIERpYWdub3N0aWMsXG4gIEZvcm1hdERpYWdub3N0aWNzSG9zdCxcbiAgUGFyc2VDb25maWdGaWxlSG9zdFxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIERpYWdub3N0aWNDYXRlZ29yeSxcbiAgZm9ybWF0RGlhZ25vc3RpYyxcbiAgZm9ybWF0RGlhZ25vc3RpY3MsXG4gIGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dCxcbiAgZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUsXG4gIGdldFByZUVtaXREaWFnbm9zdGljcyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja1Byb2plY3RUeXBlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tQcm9qZWN0VHlwZXNQYXJhbXMge1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBpZ25vcmVkIGRpYWdub3N0aWNzICh0aG9zZSBkcm9wcGVkIGJ5IHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX1cbiAgICogb3Ige0BsaW5rIENoZWNrUHJvamVjdFR5cGVzUGFyYW1zLnNob3VsZEtlZXBEaWFnbm9zdGljfSkgYXJlIHByaW50ZWQgaW4gZnVsbCBhZnRlciB0aGUgaWdub3JlZFxuICAgKiBjb3VudCwgc28gdGhleSBjYW4gYmUgaW5zcGVjdGVkLiBXaGVuIG9taXR0ZWQgb3IgYGZhbHNlYCwgb25seSB0aGUgY291bnQgaXMgcHJpbnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNWZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgQ29tcGlsZXIgb3B0aW9ucyBmb3IgdGhlIHByb2dyYW0uIGBza2lwTGliQ2hlY2tgIGlzIGFsd2F5cyBmb3JjZWQgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IENvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgVGhlIHJvb3QgZmlsZXMgdG8gdHlwZS1jaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciBhIGRpYWdub3N0aWMgc2hvdWxkIGJlIHJlcG9ydGVkLCBiYXNlZCBvbiB0aGUgZGlhZ25vc3RpYyBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzXG4gICAqIHNvdXJjZSBmaWxlLiBSdW5zIGluIGFkZGl0aW9uIHRvIHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX0gXHUyMDE0IGEgZGlhZ25vc3RpYyBpc1xuICAgKiByZXBvcnRlZCBvbmx5IHdoZW4gYm90aCBwcmVkaWNhdGVzIGtlZXAgaXQuIFVzZSB0aGlzIHRvIGRyb3AgZGlhZ25vc3RpY3MgdGhhdCBhcmUgcmVwb3J0ZWQgaW4gYVxuICAgKiBmaWxlIHdlIG93biBidXQgYXJlIGNhdXNlZCBieSBzb21ldGhpbmcgd2UgZG8gbm90IGNvbnRyb2wgKGUuZy4gYSBjcm9zcy1tb2R1bGUtZm9ybWF0IGludGVyb3BcbiAgICogY29tcGxhaW50IGFib3V0IGEgdGhpcmQtcGFydHkgaW1wb3J0KS4gV2hlbiBvbWl0dGVkLCBubyBkaWFnbm9zdGljIGlzIGRyb3BwZWQgb24gdGhpcyBiYXNpcy5cbiAgICpcbiAgICogQHBhcmFtIGRpYWdub3N0aWMgLSBUaGUgZGlhZ25vc3RpYyB0byBldmFsdWF0ZS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRGlhZ25vc3RpYz86IChkaWFnbm9zdGljOiBEaWFnbm9zdGljKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUgaXMgb25lIHdlIGNhcmUgYWJvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIFRoZSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUsIGFscmVhZHkgcGFzc2VkIHRocm91Z2gge0BsaW5rIHRvQ2Fub25pY2FsfS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRmlsZTogKGZpbGVOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlc29sdmVkIHJlc3VsdCBvZiB7QGxpbmsgcGFyc2VUc0NvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkVHNDb25maWcge1xuICAvKipcbiAgVGhlIHJlc29sdmVkIGxpc3Qgb2YgZmlsZXMgdGhlIGNvbmZpZyBpbmNsdWRlcyAoYWJzb2x1dGUgcGF0aHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIGNvbXBpbGVyIG9wdGlvbnMgKHdpdGggYGV4dGVuZHNgIGFwcGxpZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xufVxuXG5jb25zdCBGT1JNQVRfSE9TVDogRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICBnZXRDYW5vbmljYWxGaWxlTmFtZTogKGZpbGVOYW1lKSA9PiBmaWxlTmFtZSxcbiAgZ2V0Q3VycmVudERpcmVjdG9yeTogKCkgPT4gc3lzLmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgZ2V0TmV3TGluZTogKCkgPT4gc3lzLm5ld0xpbmVcbn07XG5cbi8qKlxuICogVHlwZS1jaGVja3MgYSBzZXQgb2YgZmlsZXMgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAsIGJ1dCByZXBvcnRzIG9ubHkgdGhlIGRpYWdub3N0aWNzIHdob3NlXG4gKiBzb3VyY2UgZmlsZSBwYXNzZXMgYHNob3VsZEtlZXBGaWxlYC4gRGlhZ25vc3RpY3MgZnJvbSBmaWxlcyB3ZSBkbyBub3QgY29udHJvbCAoZS5nLiBicm9rZW5cbiAqIHRoaXJkLXBhcnR5IGAuZC50c2AgcHVsbGVkIGluIHRyYW5zaXRpdmVseSkgYXJlIGRyb3BwZWQsIHdoaWxlIHN0aWxsIGJlaW5nIGNvdW50ZWQgZm9yXG4gKiB2aXNpYmlsaXR5LiBXaGVuIGBpc1ZlcmJvc2VgIGlzIHNldCwgdGhlIGRyb3BwZWQgZGlhZ25vc3RpY3MgYXJlIGFsc28gcHJpbnRlZCBpbiBmdWxsLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcHJvZ3JhbSBpbnB1dHMgYW5kIHRoZSBrZWVwIHByZWRpY2F0ZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIG5vIHJlcG9ydGVkIGRpYWdub3N0aWMgaXMgYW4gZXJyb3IsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcm9qZWN0VHlwZXMocGFyYW1zOiBDaGVja1Byb2plY3RUeXBlc1BhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCBvcHRpb25zOiBDb21waWxlck9wdGlvbnMgPSB7XG4gICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgc2tpcExpYkNoZWNrOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKHtcbiAgICBvcHRpb25zLFxuICAgIHJvb3ROYW1lczogWy4uLnBhcmFtcy5yb290TmFtZXNdXG4gIH0pO1xuXG4gIGNvbnN0IGFsbERpYWdub3N0aWNzID0gZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBjb25zdCBrZXB0RGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+IHNob3VsZEtlZXBEaWFnbm9zdGljQnlGaWxlKGRpYWdub3N0aWMsIHBhcmFtcy5zaG91bGRLZWVwRmlsZSkgJiYgKHBhcmFtcy5zaG91bGRLZWVwRGlhZ25vc3RpYz8uKGRpYWdub3N0aWMpID8/IHRydWUpKTtcbiAgY29uc3QgaWdub3JlZENvdW50ID0gYWxsRGlhZ25vc3RpY3MubGVuZ3RoIC0ga2VwdERpYWdub3N0aWNzLmxlbmd0aDtcblxuICBpZiAoa2VwdERpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQoa2VwdERpYWdub3N0aWNzLCBGT1JNQVRfSE9TVCkpO1xuICB9XG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYElnbm9yZWQgJHtTdHJpbmcoaWdub3JlZENvdW50KX0gZGlhZ25vc3RpYyhzKSBvdXRzaWRlIHRoZSB2YWxpZGF0ZWQgc2V0LlxcbmApO1xuXG4gIGlmIChwYXJhbXMuaXNWZXJib3NlICYmIGlnbm9yZWRDb3VudCA+IDApIHtcbiAgICBjb25zdCBpZ25vcmVkRGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+ICFrZXB0RGlhZ25vc3RpY3MuaW5jbHVkZXMoZGlhZ25vc3RpYykpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChpZ25vcmVkRGlhZ25vc3RpY3MsIEZPUk1BVF9IT1NUKSk7XG4gIH1cblxuICByZXR1cm4ga2VwdERpYWdub3N0aWNzLmV2ZXJ5KChkaWFnbm9zdGljKSA9PiBkaWFnbm9zdGljLmNhdGVnb3J5ICE9PSBEaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGB0c2NvbmZpZy5qc29uYCAocmVzb2x2aW5nIGBleHRlbmRzYCwgYGluY2x1ZGVgLCBgZXhjbHVkZWApIGludG8gdGhlIHJlc29sdmVkIGZpbGUgbGlzdFxuICogYW5kIGNvbXBpbGVyIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHRzQ29uZmlnUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGZpbGUgbmFtZXMgYW5kIG9wdGlvbnMuXG4gKiBAdGhyb3dzIElmIHRoZSBjb25maWcgY2Fubm90IGJlIHBhcnNlZCBvciBjb250YWlucyBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRzQ29uZmlnKHRzQ29uZmlnUGF0aDogc3RyaW5nKTogUGFyc2VkVHNDb25maWcge1xuICBjb25zdCBob3N0OiBQYXJzZUNvbmZpZ0ZpbGVIb3N0ID0ge1xuICAgIGZpbGVFeGlzdHM6IChwYXRoKSA9PiBzeXMuZmlsZUV4aXN0cyhwYXRoKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiBzeXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICAgIG9uVW5SZWNvdmVyYWJsZUNvbmZpZ0ZpbGVEaWFnbm9zdGljOiAoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWMoZGlhZ25vc3RpYywgRk9STUFUX0hPU1QpKTtcbiAgICB9LFxuICAgIHJlYWREaXJlY3Rvcnk6IChyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSA9PiBzeXMucmVhZERpcmVjdG9yeShyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSxcbiAgICByZWFkRmlsZTogKHBhdGgpID0+IHN5cy5yZWFkRmlsZShwYXRoKSxcbiAgICB1c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzOiBzeXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lc1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlZCA9IGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlKHRzQ29uZmlnUGF0aCwgdW5kZWZpbmVkLCBob3N0KTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFR5cGVTY3JpcHQgY29uZmlnOiAke3RzQ29uZmlnUGF0aH1gKTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyB3aGlsZSBwYXJzaW5nIFR5cGVTY3JpcHQgY29uZmlnICR7dHNDb25maWdQYXRofTpcXG4ke2Zvcm1hdERpYWdub3N0aWNzKHBhcnNlZC5lcnJvcnMsIEZPUk1BVF9IT1NUKX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZU5hbWVzOiBwYXJzZWQuZmlsZU5hbWVzLFxuICAgIG9wdGlvbnM6IHBhcnNlZC5vcHRpb25zXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGZpbGUgcGF0aCBmb3IgY29tcGFyaXNvbjogZm9yd2FyZCBzbGFzaGVzIGV2ZXJ5d2hlcmUsIGxvd2VyLWNhc2VkIG9uIGFcbiAqIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIGNhbm9uaWNhbCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW5vbmljYWwoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWxlTmFtZS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgcmV0dXJuIHN5cy51c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzID8gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkS2VlcERpYWdub3N0aWNCeUZpbGUoZGlhZ25vc3RpYzogRGlhZ25vc3RpYywgc2hvdWxkS2VlcEZpbGU6IChmaWxlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhZGlhZ25vc3RpYy5maWxlIHx8IHNob3VsZEtlZXBGaWxlKHRvQ2Fub25pY2FsKGRpYWdub3N0aWMuZmlsZS5maWxlTmFtZSkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLDBCQUFvQjtB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
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jaGVjay1wcm9qZWN0LXR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlLWNoZWNrcyBhIHNldCBvZiBUeXBlU2NyaXB0IGZpbGVzIHdpdGggYHNraXBMaWJDaGVja2AgZGlzYWJsZWQsIGJ1dCByZXBvcnRzIG9ubHkgdGhlXG4gKiBkaWFnbm9zdGljcyB3aG9zZSBzb3VyY2UgZmlsZSB3ZSBvd24uIFRoaXMgbGV0cyB0aGUgZ2VuZXJhbCBidWlsZCBydW4gd2l0aCBgc2tpcExpYkNoZWNrOiB0cnVlYFxuICogKHNvIGl0IGRvZXMgbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wsIHN1Y2ggYXMgYSBnaXZlblxuICogdmVyc2lvbidzIGBvYnNpZGlhbi5kLnRzYCkgd2hpbGUgc3RpbGwgZnVsbHkgdmFsaWRhdGluZyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvci5cbiAqXG4gKiBXaGVuIHVwc3RyZWFtIHR5cGVzIGFyZSBmaXhlZCwgdGhlIGBJZ25vcmVkIE4gZGlhZ25vc3RpYyhzKWAgY291bnQgZHJvcHMgdG8gYDBgLCBzaWduYWxsaW5nIHRoZVxuICogd29ya2Fyb3VuZCBpcyBubyBsb25nZXIgZG9pbmcgYW55dGhpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21waWxlck9wdGlvbnMsXG4gIERpYWdub3N0aWMsXG4gIEZvcm1hdERpYWdub3N0aWNzSG9zdCxcbiAgUGFyc2VDb25maWdGaWxlSG9zdFxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIERpYWdub3N0aWNDYXRlZ29yeSxcbiAgZm9ybWF0RGlhZ25vc3RpYyxcbiAgZm9ybWF0RGlhZ25vc3RpY3MsXG4gIGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dCxcbiAgZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUsXG4gIGdldFByZUVtaXREaWFnbm9zdGljcyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja1Byb2plY3RUeXBlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tQcm9qZWN0VHlwZXNQYXJhbXMge1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBpZ25vcmVkIGRpYWdub3N0aWNzICh0aG9zZSBkcm9wcGVkIGJ5IHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX1cbiAgICogb3Ige0BsaW5rIENoZWNrUHJvamVjdFR5cGVzUGFyYW1zLnNob3VsZEtlZXBEaWFnbm9zdGljfSkgYXJlIHByaW50ZWQgaW4gZnVsbCBhZnRlciB0aGUgaWdub3JlZFxuICAgKiBjb3VudCwgc28gdGhleSBjYW4gYmUgaW5zcGVjdGVkLiBXaGVuIG9taXR0ZWQgb3IgYGZhbHNlYCwgb25seSB0aGUgY291bnQgaXMgcHJpbnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNWZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgQ29tcGlsZXIgb3B0aW9ucyBmb3IgdGhlIHByb2dyYW0uIGBza2lwTGliQ2hlY2tgIGlzIGFsd2F5cyBmb3JjZWQgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IENvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgVGhlIHJvb3QgZmlsZXMgdG8gdHlwZS1jaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciBhIGRpYWdub3N0aWMgc2hvdWxkIGJlIHJlcG9ydGVkLCBiYXNlZCBvbiB0aGUgZGlhZ25vc3RpYyBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzXG4gICAqIHNvdXJjZSBmaWxlLiBSdW5zIGluIGFkZGl0aW9uIHRvIHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX0g4oCUIGEgZGlhZ25vc3RpYyBpc1xuICAgKiByZXBvcnRlZCBvbmx5IHdoZW4gYm90aCBwcmVkaWNhdGVzIGtlZXAgaXQuIFVzZSB0aGlzIHRvIGRyb3AgZGlhZ25vc3RpY3MgdGhhdCBhcmUgcmVwb3J0ZWQgaW4gYVxuICAgKiBmaWxlIHdlIG93biBidXQgYXJlIGNhdXNlZCBieSBzb21ldGhpbmcgd2UgZG8gbm90IGNvbnRyb2wgKGUuZy4gYSBjcm9zcy1tb2R1bGUtZm9ybWF0IGludGVyb3BcbiAgICogY29tcGxhaW50IGFib3V0IGEgdGhpcmQtcGFydHkgaW1wb3J0KS4gV2hlbiBvbWl0dGVkLCBubyBkaWFnbm9zdGljIGlzIGRyb3BwZWQgb24gdGhpcyBiYXNpcy5cbiAgICpcbiAgICogQHBhcmFtIGRpYWdub3N0aWMgLSBUaGUgZGlhZ25vc3RpYyB0byBldmFsdWF0ZS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRGlhZ25vc3RpYz86IChkaWFnbm9zdGljOiBEaWFnbm9zdGljKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUgaXMgb25lIHdlIGNhcmUgYWJvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIFRoZSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUsIGFscmVhZHkgcGFzc2VkIHRocm91Z2gge0BsaW5rIHRvQ2Fub25pY2FsfS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRmlsZTogKGZpbGVOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlc29sdmVkIHJlc3VsdCBvZiB7QGxpbmsgcGFyc2VUc0NvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkVHNDb25maWcge1xuICAvKipcbiAgVGhlIHJlc29sdmVkIGxpc3Qgb2YgZmlsZXMgdGhlIGNvbmZpZyBpbmNsdWRlcyAoYWJzb2x1dGUgcGF0aHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIGNvbXBpbGVyIG9wdGlvbnMgKHdpdGggYGV4dGVuZHNgIGFwcGxpZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xufVxuXG5jb25zdCBGT1JNQVRfSE9TVDogRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICBnZXRDYW5vbmljYWxGaWxlTmFtZTogKGZpbGVOYW1lKSA9PiBmaWxlTmFtZSxcbiAgZ2V0Q3VycmVudERpcmVjdG9yeTogKCkgPT4gc3lzLmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgZ2V0TmV3TGluZTogKCkgPT4gc3lzLm5ld0xpbmVcbn07XG5cbi8qKlxuICogVHlwZS1jaGVja3MgYSBzZXQgb2YgZmlsZXMgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAsIGJ1dCByZXBvcnRzIG9ubHkgdGhlIGRpYWdub3N0aWNzIHdob3NlXG4gKiBzb3VyY2UgZmlsZSBwYXNzZXMgYHNob3VsZEtlZXBGaWxlYC4gRGlhZ25vc3RpY3MgZnJvbSBmaWxlcyB3ZSBkbyBub3QgY29udHJvbCAoZS5nLiBicm9rZW5cbiAqIHRoaXJkLXBhcnR5IGAuZC50c2AgcHVsbGVkIGluIHRyYW5zaXRpdmVseSkgYXJlIGRyb3BwZWQsIHdoaWxlIHN0aWxsIGJlaW5nIGNvdW50ZWQgZm9yXG4gKiB2aXNpYmlsaXR5LiBXaGVuIGBpc1ZlcmJvc2VgIGlzIHNldCwgdGhlIGRyb3BwZWQgZGlhZ25vc3RpY3MgYXJlIGFsc28gcHJpbnRlZCBpbiBmdWxsLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcHJvZ3JhbSBpbnB1dHMgYW5kIHRoZSBrZWVwIHByZWRpY2F0ZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIG5vIHJlcG9ydGVkIGRpYWdub3N0aWMgaXMgYW4gZXJyb3IsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcm9qZWN0VHlwZXMocGFyYW1zOiBDaGVja1Byb2plY3RUeXBlc1BhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCBvcHRpb25zOiBDb21waWxlck9wdGlvbnMgPSB7XG4gICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgc2tpcExpYkNoZWNrOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKHtcbiAgICBvcHRpb25zLFxuICAgIHJvb3ROYW1lczogWy4uLnBhcmFtcy5yb290TmFtZXNdXG4gIH0pO1xuXG4gIGNvbnN0IGFsbERpYWdub3N0aWNzID0gZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBjb25zdCBrZXB0RGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+IHNob3VsZEtlZXBEaWFnbm9zdGljQnlGaWxlKGRpYWdub3N0aWMsIHBhcmFtcy5zaG91bGRLZWVwRmlsZSkgJiYgKHBhcmFtcy5zaG91bGRLZWVwRGlhZ25vc3RpYz8uKGRpYWdub3N0aWMpID8/IHRydWUpKTtcbiAgY29uc3QgaWdub3JlZENvdW50ID0gYWxsRGlhZ25vc3RpY3MubGVuZ3RoIC0ga2VwdERpYWdub3N0aWNzLmxlbmd0aDtcblxuICBpZiAoa2VwdERpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQoa2VwdERpYWdub3N0aWNzLCBGT1JNQVRfSE9TVCkpO1xuICB9XG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYElnbm9yZWQgJHtTdHJpbmcoaWdub3JlZENvdW50KX0gZGlhZ25vc3RpYyhzKSBvdXRzaWRlIHRoZSB2YWxpZGF0ZWQgc2V0LlxcbmApO1xuXG4gIGlmIChwYXJhbXMuaXNWZXJib3NlICYmIGlnbm9yZWRDb3VudCA+IDApIHtcbiAgICBjb25zdCBpZ25vcmVkRGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+ICFrZXB0RGlhZ25vc3RpY3MuaW5jbHVkZXMoZGlhZ25vc3RpYykpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChpZ25vcmVkRGlhZ25vc3RpY3MsIEZPUk1BVF9IT1NUKSk7XG4gIH1cblxuICByZXR1cm4ga2VwdERpYWdub3N0aWNzLmV2ZXJ5KChkaWFnbm9zdGljKSA9PiBkaWFnbm9zdGljLmNhdGVnb3J5ICE9PSBEaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGB0c2NvbmZpZy5qc29uYCAocmVzb2x2aW5nIGBleHRlbmRzYCwgYGluY2x1ZGVgLCBgZXhjbHVkZWApIGludG8gdGhlIHJlc29sdmVkIGZpbGUgbGlzdFxuICogYW5kIGNvbXBpbGVyIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHRzQ29uZmlnUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGZpbGUgbmFtZXMgYW5kIG9wdGlvbnMuXG4gKiBAdGhyb3dzIElmIHRoZSBjb25maWcgY2Fubm90IGJlIHBhcnNlZCBvciBjb250YWlucyBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRzQ29uZmlnKHRzQ29uZmlnUGF0aDogc3RyaW5nKTogUGFyc2VkVHNDb25maWcge1xuICBjb25zdCBob3N0OiBQYXJzZUNvbmZpZ0ZpbGVIb3N0ID0ge1xuICAgIGZpbGVFeGlzdHM6IChwYXRoKSA9PiBzeXMuZmlsZUV4aXN0cyhwYXRoKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiBzeXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICAgIG9uVW5SZWNvdmVyYWJsZUNvbmZpZ0ZpbGVEaWFnbm9zdGljOiAoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWMoZGlhZ25vc3RpYywgRk9STUFUX0hPU1QpKTtcbiAgICB9LFxuICAgIHJlYWREaXJlY3Rvcnk6IChyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSA9PiBzeXMucmVhZERpcmVjdG9yeShyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSxcbiAgICByZWFkRmlsZTogKHBhdGgpID0+IHN5cy5yZWFkRmlsZShwYXRoKSxcbiAgICB1c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzOiBzeXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lc1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlZCA9IGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlKHRzQ29uZmlnUGF0aCwgdW5kZWZpbmVkLCBob3N0KTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFR5cGVTY3JpcHQgY29uZmlnOiAke3RzQ29uZmlnUGF0aH1gKTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyB3aGlsZSBwYXJzaW5nIFR5cGVTY3JpcHQgY29uZmlnICR7dHNDb25maWdQYXRofTpcXG4ke2Zvcm1hdERpYWdub3N0aWNzKHBhcnNlZC5lcnJvcnMsIEZPUk1BVF9IT1NUKX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZU5hbWVzOiBwYXJzZWQuZmlsZU5hbWVzLFxuICAgIG9wdGlvbnM6IHBhcnNlZC5vcHRpb25zXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGZpbGUgcGF0aCBmb3IgY29tcGFyaXNvbjogZm9yd2FyZCBzbGFzaGVzIGV2ZXJ5d2hlcmUsIGxvd2VyLWNhc2VkIG9uIGFcbiAqIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIGNhbm9uaWNhbCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW5vbmljYWwoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWxlTmFtZS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgcmV0dXJuIHN5cy51c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzID8gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkS2VlcERpYWdub3N0aWNCeUZpbGUoZGlhZ25vc3RpYzogRGlhZ25vc3RpYywgc2hvdWxkS2VlcEZpbGU6IChmaWxlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhZGlhZ25vc3RpYy5maWxlIHx8IHNob3VsZEtlZXBGaWxlKHRvQ2Fub25pY2FsKGRpYWdub3N0aWMuZmlsZS5maWxlTmFtZSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSwwQkFBb0I7QUFDcEIsd0JBU087QUE2RFAsTUFBTSxjQUFxQztBQUFBLEVBQ3pDLHNC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
|