@decaf-ts/utils 0.1.6 → 0.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/assets/slogans.json +802 -0
- package/dist/utils.cjs +4471 -0
- package/dist/utils.esm.cjs +4424 -0
- package/lib/bin/build-scripts.cjs +11 -0
- package/lib/bin/tag-release.cjs +1 -2
- package/lib/bin/update-scripts.cjs +1 -2
- package/lib/bin/update-scripts.d.ts +1 -0
- package/lib/cli/command.cjs +1 -2
- package/lib/cli/commands/build-scripts.cjs +270 -0
- package/lib/cli/commands/build-scripts.d.ts +50 -0
- package/lib/cli/commands/index.cjs +2 -2
- package/{dist/types → lib}/cli/commands/index.d.ts +1 -0
- package/lib/cli/commands/tag-release.cjs +1 -2
- package/lib/cli/commands/update-scripts.cjs +6 -3
- package/lib/cli/constants.cjs +1 -2
- package/lib/cli/index.cjs +1 -2
- package/lib/cli/types.cjs +1 -2
- package/lib/esm/assets/slogans.json +801 -801
- package/lib/esm/bin/build-scripts.d.ts +1 -0
- package/lib/esm/bin/build-scripts.js +9 -0
- package/lib/esm/bin/tag-release.d.ts +1 -0
- package/lib/esm/bin/tag-release.js +1 -2
- package/lib/esm/bin/update-scripts.d.ts +1 -0
- package/lib/esm/bin/update-scripts.js +1 -2
- package/lib/esm/cli/command.d.ts +110 -0
- package/lib/esm/cli/command.js +1 -2
- package/lib/esm/cli/commands/build-scripts.d.ts +50 -0
- package/lib/esm/cli/commands/build-scripts.js +263 -0
- package/lib/esm/cli/commands/index.d.ts +3 -0
- package/lib/esm/cli/commands/index.js +2 -2
- package/lib/esm/cli/commands/tag-release.d.ts +105 -0
- package/lib/esm/cli/commands/tag-release.js +1 -2
- package/lib/esm/cli/commands/update-scripts.d.ts +211 -0
- package/lib/esm/cli/commands/update-scripts.js +6 -3
- package/lib/esm/cli/constants.d.ts +73 -0
- package/lib/esm/cli/constants.js +1 -2
- package/lib/esm/cli/index.d.ts +4 -0
- package/lib/esm/cli/index.js +1 -2
- package/lib/esm/cli/types.d.ts +28 -0
- package/lib/esm/cli/types.js +1 -2
- package/{dist/types → lib/esm}/index.d.ts +2 -2
- package/lib/esm/index.js +3 -4
- package/lib/esm/input/index.js +1 -2
- package/{dist/types → lib/esm}/input/input.d.ts +3 -3
- package/lib/esm/input/input.js +1 -2
- package/lib/esm/input/types.js +1 -2
- package/lib/esm/output/common.js +1 -2
- package/lib/esm/output/index.js +1 -2
- package/lib/esm/output/logging.js +1 -2
- package/lib/esm/output/types.js +1 -2
- package/lib/esm/utils/accumulator.js +1 -2
- package/lib/esm/utils/constants.js +1 -2
- package/lib/esm/utils/environment.js +1 -2
- package/{dist/types → lib/esm}/utils/fs.d.ts +16 -0
- package/lib/esm/utils/fs.js +115 -2
- package/lib/esm/utils/http.js +1 -2
- package/lib/esm/utils/index.js +1 -2
- package/lib/esm/utils/md.js +1 -2
- package/lib/esm/utils/tests.js +1 -2
- package/lib/esm/utils/text.js +1 -2
- package/lib/esm/utils/timeout.js +1 -2
- package/lib/esm/utils/types.js +1 -2
- package/lib/esm/utils/utils.js +1 -2
- package/lib/esm/utils/web.js +1 -2
- package/lib/esm/writers/OutputWriter.js +1 -2
- package/lib/esm/writers/RegexpOutputWriter.js +1 -2
- package/lib/esm/writers/StandardOutputWriter.js +2 -4
- package/lib/esm/writers/index.js +1 -2
- package/lib/esm/writers/types.js +1 -2
- package/lib/index.cjs +3 -4
- package/lib/index.d.ts +39 -0
- package/lib/input/index.cjs +1 -2
- package/lib/input/index.d.ts +2 -0
- package/lib/input/input.cjs +1 -2
- package/lib/input/input.d.ts +472 -0
- package/lib/input/types.cjs +1 -2
- package/lib/input/types.d.ts +76 -0
- package/lib/output/common.cjs +1 -2
- package/lib/output/common.d.ts +51 -0
- package/lib/output/index.cjs +1 -2
- package/lib/output/index.d.ts +3 -0
- package/lib/output/logging.cjs +1 -2
- package/lib/output/logging.d.ts +177 -0
- package/lib/output/types.cjs +1 -2
- package/lib/output/types.d.ts +203 -0
- package/lib/utils/accumulator.cjs +1 -2
- package/lib/utils/accumulator.d.ts +105 -0
- package/lib/utils/constants.cjs +1 -2
- package/lib/utils/constants.d.ts +136 -0
- package/lib/utils/environment.cjs +1 -2
- package/lib/utils/environment.d.ts +57 -0
- package/lib/utils/fs.cjs +119 -2
- package/lib/utils/fs.d.ts +149 -0
- package/lib/utils/http.cjs +1 -2
- package/lib/utils/http.d.ts +41 -0
- package/lib/utils/index.cjs +1 -2
- package/lib/utils/index.d.ts +7 -0
- package/lib/utils/md.cjs +1 -2
- package/lib/utils/md.d.ts +156 -0
- package/lib/utils/tests.cjs +1 -2
- package/lib/utils/tests.d.ts +170 -0
- package/lib/utils/text.cjs +1 -2
- package/lib/utils/text.d.ts +106 -0
- package/lib/utils/timeout.cjs +1 -2
- package/lib/utils/timeout.d.ts +1 -0
- package/lib/utils/types.cjs +1 -2
- package/lib/utils/types.d.ts +81 -0
- package/lib/utils/utils.cjs +1 -2
- package/lib/utils/utils.d.ts +91 -0
- package/lib/utils/web.cjs +1 -2
- package/lib/utils/web.d.ts +7 -0
- package/lib/writers/OutputWriter.cjs +1 -2
- package/lib/writers/OutputWriter.d.ts +49 -0
- package/lib/writers/RegexpOutputWriter.cjs +1 -2
- package/lib/writers/RegexpOutputWriter.d.ts +69 -0
- package/lib/writers/StandardOutputWriter.cjs +2 -4
- package/lib/writers/StandardOutputWriter.d.ts +91 -0
- package/lib/writers/index.cjs +1 -2
- package/lib/writers/index.d.ts +4 -0
- package/lib/writers/types.cjs +1 -2
- package/lib/writers/types.d.ts +29 -0
- package/package.json +24 -30
- package/dist/esm/utils.js +0 -1
- package/dist/utils.js +0 -1
- /package/{dist/types/bin/tag-release.d.ts → lib/bin/build-scripts.d.ts} +0 -0
- /package/{dist/types/bin/update-scripts.d.ts → lib/bin/tag-release.d.ts} +0 -0
- /package/{dist/types → lib}/cli/command.d.ts +0 -0
- /package/{dist/types → lib}/cli/commands/tag-release.d.ts +0 -0
- /package/{dist/types → lib}/cli/commands/update-scripts.d.ts +0 -0
- /package/{dist/types → lib}/cli/constants.d.ts +0 -0
- /package/{dist/types → lib}/cli/index.d.ts +0 -0
- /package/{dist/types → lib}/cli/types.d.ts +0 -0
- /package/{dist/types → lib/esm}/input/index.d.ts +0 -0
- /package/{dist/types → lib/esm}/input/types.d.ts +0 -0
- /package/{dist/types → lib/esm}/output/common.d.ts +0 -0
- /package/{dist/types → lib/esm}/output/index.d.ts +0 -0
- /package/{dist/types → lib/esm}/output/logging.d.ts +0 -0
- /package/{dist/types → lib/esm}/output/types.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/accumulator.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/constants.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/environment.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/http.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/index.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/md.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/tests.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/text.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/timeout.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/types.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/utils.d.ts +0 -0
- /package/{dist/types → lib/esm}/utils/web.d.ts +0 -0
- /package/{dist/types → lib/esm}/writers/OutputWriter.d.ts +0 -0
- /package/{dist/types → lib/esm}/writers/RegexpOutputWriter.d.ts +0 -0
- /package/{dist/types → lib/esm}/writers/StandardOutputWriter.d.ts +0 -0
- /package/{dist/types → lib/esm}/writers/index.d.ts +0 -0
- /package/{dist/types → lib/esm}/writers/types.d.ts +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Command } from "../command";
|
|
2
|
+
import { LoggingConfig } from "../../output";
|
|
3
|
+
import { DefaultCommandValues } from "../index";
|
|
4
|
+
declare const options: {
|
|
5
|
+
ci: {
|
|
6
|
+
type: string;
|
|
7
|
+
default: boolean;
|
|
8
|
+
};
|
|
9
|
+
message: {
|
|
10
|
+
type: string;
|
|
11
|
+
short: string;
|
|
12
|
+
};
|
|
13
|
+
tag: {
|
|
14
|
+
type: string;
|
|
15
|
+
short: string;
|
|
16
|
+
default: undefined;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* @class ReleaseScript
|
|
21
|
+
* @extends {Command}
|
|
22
|
+
* @cavegory scripts
|
|
23
|
+
* @description A command-line script for managing releases and version updates.
|
|
24
|
+
* @summary This script automates the process of creating and pushing new releases. It handles version updates,
|
|
25
|
+
* commit messages, and optionally publishes to NPM. The script supports semantic versioning and can work in both CI and non-CI environments.
|
|
26
|
+
*
|
|
27
|
+
* @param {Object} options - Configuration options for the script
|
|
28
|
+
* @param {boolean} options.ci - Whether the script is running in a CI environment (default: true)
|
|
29
|
+
* @param {string} options.message - The release message (short: 'm')
|
|
30
|
+
* @param {string} options.tag - The version tag to use (short: 't', default: undefined)
|
|
31
|
+
*/
|
|
32
|
+
export declare class ReleaseScript extends Command<typeof options, void> {
|
|
33
|
+
constructor();
|
|
34
|
+
/**
|
|
35
|
+
* @description Prepares the version for the release.
|
|
36
|
+
* @summary This method validates the provided tag or prompts the user for a new one if not provided or invalid.
|
|
37
|
+
* It also displays the latest git tags for reference.
|
|
38
|
+
* @param {string} tag - The version tag to prepare
|
|
39
|
+
* @returns {Promise<string>} The prepared version tag
|
|
40
|
+
*
|
|
41
|
+
* @mermaid
|
|
42
|
+
* sequenceDiagram
|
|
43
|
+
* participant R as ReleaseScript
|
|
44
|
+
* participant T as TestVersion
|
|
45
|
+
* participant U as UserInput
|
|
46
|
+
* participant G as Git
|
|
47
|
+
* R->>T: testVersion(tag)
|
|
48
|
+
* alt tag is valid
|
|
49
|
+
* T-->>R: return tag
|
|
50
|
+
* else tag is invalid or not provided
|
|
51
|
+
* R->>G: List latest git tags
|
|
52
|
+
* R->>U: Prompt for new tag
|
|
53
|
+
* U-->>R: return new tag
|
|
54
|
+
* end
|
|
55
|
+
*/
|
|
56
|
+
prepareVersion(tag?: string): Promise<string>;
|
|
57
|
+
/**
|
|
58
|
+
* @description Tests if the provided version is valid.
|
|
59
|
+
* @summary This method checks if the version is a valid semantic version or a predefined update type (PATCH, MINOR, MAJOR).
|
|
60
|
+
* @param {string} version - The version to test
|
|
61
|
+
* @returns {string | undefined} The validated version or undefined if invalid
|
|
62
|
+
*/
|
|
63
|
+
testVersion(version: string): string | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* @description Prepares the release message.
|
|
66
|
+
* @summary This method either returns the provided message or prompts the user for a new one if not provided.
|
|
67
|
+
* @param {string} [message] - The release message
|
|
68
|
+
* @returns {Promise<string>} The prepared release message
|
|
69
|
+
*/
|
|
70
|
+
prepareMessage(message?: string): Promise<string>;
|
|
71
|
+
/**
|
|
72
|
+
* @description Runs the release script.
|
|
73
|
+
* @summary This method orchestrates the entire release process, including version preparation, message creation,
|
|
74
|
+
* git operations, and npm publishing (if not in CI environment).
|
|
75
|
+
* @param {ParseArgsResult} args - The parsed command-line arguments
|
|
76
|
+
* @returns {Promise<void>}
|
|
77
|
+
*
|
|
78
|
+
* @mermaid
|
|
79
|
+
* sequenceDiagram
|
|
80
|
+
* participant R as ReleaseScript
|
|
81
|
+
* participant V as PrepareVersion
|
|
82
|
+
* participant M as PrepareMessage
|
|
83
|
+
* participant N as NPM
|
|
84
|
+
* participant G as Git
|
|
85
|
+
* participant U as UserInput
|
|
86
|
+
* R->>V: prepareVersion(tag)
|
|
87
|
+
* R->>M: prepareMessage(message)
|
|
88
|
+
* R->>N: Run prepare-release script
|
|
89
|
+
* R->>G: Check git status
|
|
90
|
+
* alt changes exist
|
|
91
|
+
* R->>U: Ask for confirmation
|
|
92
|
+
* U-->>R: Confirm
|
|
93
|
+
* R->>G: Add and commit changes
|
|
94
|
+
* end
|
|
95
|
+
* R->>N: Update npm version
|
|
96
|
+
* R->>G: Push changes and tags
|
|
97
|
+
* alt not CI environment
|
|
98
|
+
* R->>N: Publish to npm
|
|
99
|
+
* end
|
|
100
|
+
*/
|
|
101
|
+
run(args: LoggingConfig & typeof DefaultCommandValues & {
|
|
102
|
+
[k in keyof typeof options]: unknown;
|
|
103
|
+
}): Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
export {};
|
|
@@ -160,5 +160,4 @@ export class ReleaseScript extends Command {
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
-
|
|
164
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jbGkvY29tbWFuZHMvdGFnLXJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSXJDLE1BQU0sT0FBTyxHQUFHO0lBQ2QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsR0FBRztLQUNYO0lBQ0QsR0FBRyxFQUFFO1FBQ0gsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsR0FBRztRQUNWLE9BQU8sRUFBRSxTQUFTO0tBQ25CO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsT0FBNkI7SUFDOUQ7UUFDRSxLQUFLLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFZO1FBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBRSxHQUFjLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQy9ELEdBQUcsQ0FBQyxJ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TUFBTSxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDNUQsTUFBTSxNQUFNLENBQUM7UUFDYixJQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUNsQixDQUFDLE1BQU0sU0FBUyxDQUFDLGVBQWUsQ0FDOUIsYUFBYSxFQUNiLDJEQUEyRCxFQUMzRCxJQUFJLENBQ0wsQ0FBQyxFQUNGLENBQUM7WUFDRCxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDdEMsTUFBTSxVQUFVLENBQ2Qsa0JBQWtCLEdBQUcsTUFBTSxPQUFPLCtCQUErQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQ3ZGLENBQUMsT0FBTyxDQUFDO1FBQ1osQ0FBQztRQUNELE1BQU0sVUFBVSxDQUNkLGdCQUFnQixHQUFHLFNBQVMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FDNUQsQ0FBQyxPQUFPLENBQUM7UUFDVixNQUFNLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNuRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixNQUFNLFVBQVUsQ0FBQyx3REFBd0QsQ0FBQztpQkFDdkUsT0FBTyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7Q0FDRiIsImZpbGUiOiJjbGkvY29tbWFuZHMvdGFnLXJlbGVhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBOb0NJRkxhZywgU2VtVmVyc2lvbiwgU2VtVmVyc2lvblJlZ2V4IH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSBcIi4uLy4uL2lucHV0L2lucHV0XCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRcIjtcbmltcG9ydCB7IExvZ2dpbmdDb25maWcgfSBmcm9tIFwiLi4vLi4vb3V0cHV0XCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZFZhbHVlcyB9IGZyb20gXCIuLi9pbmRleFwiO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICBjaToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIG1lc3NhZ2U6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNob3J0OiBcIm1cIixcbiAgfSxcbiAgdGFnOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzaG9ydDogXCJ0XCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxufTtcblxuLyoqXG4gKiBAY2xhc3MgUmVsZWFzZVNjcmlwdFxuICogQGV4dGVuZHMge0NvbW1hbmR9XG4gKiBAY2F2ZWdvcnkgc2NyaXB0c1xuICogQGRlc2NyaXB0aW9uIEEgY29tbWFuZC1saW5lIHNjcmlwdCBmb3IgbWFuYWdpbmcgcmVsZWFzZXMgYW5kIHZlcnNpb24gdXBkYXRlcy5cbiAqIEBzdW1tYXJ5IFRoaXMgc2NyaXB0IGF1dG9tYXRlcyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhbmQgcHVzaGluZyBuZXcgcmVsZWFzZXMuIEl0IGhhbmRsZXMgdmVyc2lvbiB1cGRhdGVzLFxuICogY29tbWl0IG1lc3NhZ2VzLCBhbmQgb3B0aW9uYWxseSBwdWJsaXNoZXMgdG8gTlBNLiBUaGUgc2NyaXB0IHN1cHBvcnRzIHNlbWFudGljIHZlcnNpb25pbmcgYW5kIGNhbiB3b3JrIGluIGJvdGggQ0kgYW5kIG5vbi1DSSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzY3JpcHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5jaSAtIFdoZXRoZXIgdGhlIHNjcmlwdCBpcyBydW5uaW5nIGluIGEgQ0kgZW52aXJvbm1lbnQgKGRlZmF1bHQ6IHRydWUpXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlIC0gVGhlIHJlbGVhc2UgbWVzc2FnZSAoc2hvcnQ6ICdtJylcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnRhZyAtIFRoZSB2ZXJzaW9uIHRhZyB0byB1c2UgKHNob3J0OiAndCcsIGRlZmF1bHQ6IHVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGVhc2VTY3JpcHQgZXh0ZW5kcyBDb21tYW5kPHR5cGVvZiBvcHRpb25zLCB2b2lkPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUmVsZWFzZVNjcmlwdFwiLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgdGhlIHZlcnNpb24gZm9yIHRoZSByZWxlYXNlLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCB2YWxpZGF0ZXMgdGhlIHByb3ZpZGVkIHRhZyBvciBwcm9tcHRzIHRoZSB1c2VyIGZvciBhIG5ldyBvbmUgaWYgbm90IHByb3ZpZGVkIG9yIGludmFsaWQuXG4gICAqIEl0IGFsc28gZGlzcGxheXMgdGhlIGxhdGVzdCBnaXQgdGFncyBmb3IgcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHZlcnNpb24gdGFnIHRvIHByZXBhcmVcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIHByZXBhcmVkIHZlcnNpb24gdGFnXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgUmVsZWFzZVNjcmlwdFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVGVzdFZlcnNpb25cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJJbnB1dFxuICAgKiAgIHBhcnRpY2lwYW50IEcgYXMgR2l0XG4gICAqICAgUi0+PlQ6IHRlc3RWZXJzaW9uKHRhZylcbiAgICogICBhbHQgdGFnIGlzIHZhbGlkXG4gICAqICAgICBULS0+PlI6IHJldHVybiB0YWdcbiAgICogICBlbHNlIHRhZyBpcyBpbnZhbGlkIG9yIG5vdCBwcm92aWRlZFxuICAgKiAgICAgUi0+Pkc6IExpc3QgbGF0ZXN0IGdpdCB0YWdzXG4gICAqICAgICBSLT4+VTogUHJvbXB0IGZvciBuZXcgdGFnXG4gICAqICAgICBVLS0+PlI6IHJldHVybiBuZXcgdGFnXG4gICAqICAgZW5kXG4gICAqL1xuICBhc3luYyBwcmVwYXJlVmVyc2lvbih0YWc/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnByZXBhcmVWZXJzaW9uKTtcbiAgICB0YWcgPSB0aGlzLnRlc3RWZXJzaW9uKCh0YWcgYXMgc3RyaW5nKSB8fCBcIlwiKTtcbiAgICBpZiAoIXRhZykge1xuICAgICAgbG9nLnZlcmJvc2UoXCJObyByZWxlYXNlIG1lc3NhZ2UgcHJvdmlkZWQuIFByb21wdGluZyBmb3Igb25lOlwiKTtcbiAgICAgIGxvZy5pbmZvKGBMaXN0aW5nIGxhdGVzdCBnaXQgdGFnczpgKTtcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgdGFnIC0tc29ydD0tdGFnZ2VyZGF0ZSB8IGhlYWQgLW4gNVwiKS5wcm9taXNlO1xuICAgICAgcmV0dXJuIGF3YWl0IFVzZXJJbnB1dC5pbnNpc3RGb3JUZXh0KFxuICAgICAgICBcInRhZ1wiLFxuICAgICAgICBcIkVudGVyIHRoZSBuZXcgdGFnIG51bWJlciAoYWNjZXB0cyB2Ki4qLipbLS4uLl0pXCIsXG4gICAgICAgICh2YWwpID0+XG4gICAgICAgICAgISF2YWwudG9TdHJpbmcoKS5tYXRjaCgvXnZbMC05XStcXC5bMC05XSsuWzAtOV0rKC1bMC05YS16QS1aLV0rKT8kLylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRlc3RzIGlmIHRoZSBwcm92aWRlZCB2ZXJzaW9uIGlzIHZhbGlkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHZlcnNpb24gaXMgYSB2YWxpZCBzZW1hbnRpYyB2ZXJzaW9uIG9yIGEgcHJlZGVmaW5lZCB1cGRhdGUgdHlwZSAoUEFUQ0gsIE1JTk9SLCBNQUpPUikuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIHZlcnNpb24gdG8gdGVzdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgdmFsaWRhdGVkIHZlcnNpb24gb3IgdW5kZWZpbmVkIGlmIGludmFsaWRcbiAgICovXG4gIHRlc3RWZXJzaW9uKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMudGVzdFZlcnNpb24pO1xuICAgIHZlcnNpb24gPSB2ZXJzaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgY2FzZSBTZW1WZXJzaW9uLlBBVENIOlxuICAgICAgY2FzZSBTZW1WZXJzaW9uLk1JTk9SOlxuICAgICAgY2FzZSBTZW1WZXJzaW9uLk1BSk9SOlxuICAgICAgICBsb2cudmVyYm9zZShgVXNpbmcgcHJvdmlkZWQgU2VtVmVyIHVwZGF0ZTogJHt2ZXJzaW9ufWAsIDEpO1xuICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICAgIGBUZXN0aW5nIHByb3ZpZGVkIHZlcnNpb24gZm9yIFNlbVZlciBjb21wYXRpYmlsaXR5OiAke3ZlcnNpb259YCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbmV3IFJlZ0V4cChTZW1WZXJzaW9uUmVnZXgpLnRlc3QodmVyc2lvbikpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYEludmFsaWQgdmVyc2lvbiBudW1iZXI6ICR7dmVyc2lvbn1gKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxvZy52ZXJib3NlKGB2ZXJzaW9uIGFwcHJvdmVkOiAke3ZlcnNpb259YCwgMSk7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgdGhlIHJlbGVhc2UgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgZWl0aGVyIHJldHVybnMgdGhlIHByb3ZpZGVkIG1lc3NhZ2Ugb3IgcHJvbXB0cyB0aGUgdXNlciBmb3IgYSBuZXcgb25lIGlmIG5vdCBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSAtIFRoZSByZWxlYXNlIG1lc3NhZ2VcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIHByZXBhcmVkIHJlbGVhc2UgbWVzc2FnZVxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZU1lc3NhZ2UobWVzc2FnZT86IHN0cmluZykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnByZXBhcmVNZXNzYWdlKTtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIGxvZy52ZXJib3NlKFwiTm8gcmVsZWFzZSBtZXNzYWdlIHByb3ZpZGVkLiBQcm9tcHRpbmcgZm9yIG9uZVwiKTtcbiAgICAgIHJldHVybiBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgICAgXCJtZXNzYWdlXCIsXG4gICAgICAgIFwiV2hhdCBzaG91bGQgYmUgdGhlIHJlbGVhc2UgbWVzc2FnZS90aWNrZXQ/XCIsXG4gICAgICAgICh2YWwpID0+ICEhdmFsICYmIHZhbC50b1N0cmluZygpLmxlbmd0aCA+IDVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSdW5zIHRoZSByZWxlYXNlIHNjcmlwdC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgb3JjaGVzdHJhdGVzIHRoZSBlbnRpcmUgcmVsZWFzZSBwcm9jZXNzLCBpbmNsdWRpbmcgdmVyc2lvbiBwcmVwYXJhdGlvbiwgbWVzc2FnZSBjcmVhdGlvbixcbiAgICogZ2l0IG9wZXJhdGlvbnMsIGFuZCBucG0gcHVibGlzaGluZyAoaWYgbm90IGluIENJIGVudmlyb25tZW50KS5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFyZ3MgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgUmVsZWFzZVNjcmlwdFxuICAgKiAgIHBhcnRpY2lwYW50IFYgYXMgUHJlcGFyZVZlcnNpb25cbiAgICogICBwYXJ0aWNpcGFudCBNIGFzIFByZXBhcmVNZXNzYWdlXG4gICAqICAgcGFydGljaXBhbnQgTiBhcyBOUE1cbiAgICogICBwYXJ0aWNpcGFudCBHIGFzIEdpdFxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlcklucHV0XG4gICAqICAgUi0+PlY6IHByZXBhcmVWZXJzaW9uKHRhZylcbiAgICogICBSLT4+TTogcHJlcGFyZU1lc3NhZ2UobWVzc2FnZSlcbiAgICogICBSLT4+TjogUnVuIHByZXBhcmUtcmVsZWFzZSBzY3JpcHRcbiAgICogICBSLT4+RzogQ2hlY2sgZ2l0IHN0YXR1c1xuICAgKiAgIGFsdCBjaGFuZ2VzIGV4aXN0XG4gICAqICAgICBSLT4+VTogQXNrIGZvciBjb25maXJtYXRpb25cbiAgICogICAgIFUtLT4+UjogQ29uZmlybVxuICAgKiAgICAgUi0+Pkc6IEFkZCBhbmQgY29tbWl0IGNoYW5nZXNcbiAgICogICBlbmRcbiAgICogICBSLT4+TjogVXBkYXRlIG5wbSB2ZXJzaW9uXG4gICAqICAgUi0+Pkc6IFB1c2ggY2hhbmdlcyBhbmQgdGFnc1xuICAgKiAgIGFsdCBub3QgQ0kgZW52aXJvbm1lbnRcbiAgICogICAgIFItPj5OOiBQdWJsaXNoIHRvIG5wbVxuICAgKiAgIGVuZFxuICAgKi9cbiAgYXN5bmMgcnVuKFxuICAgIGFyZ3M6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiB0eXBlb2Ygb3B0aW9uc106IHVua25vd24gfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgY29uc3QgeyBjaSB9ID0gYXJncztcbiAgICBsZXQgeyB0YWcsIG1lc3NhZ2UgfSA9IGFyZ3M7XG4gICAgdGFnID0gYXdhaXQgdGhpcy5wcmVwYXJlVmVyc2lvbih0YWcgYXMgc3RyaW5nKTtcbiAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5wcmVwYXJlTWVzc2FnZShtZXNzYWdlIGFzIHN0cmluZyk7XG4gICAgcmVzdWx0ID0gYXdhaXQgcnVuQ29tbWFuZChgbnBtIHJ1biBwcmVwYXJlLXJlbGVhc2UgLS0gJHt0YWd9ICR7bWVzc2FnZX1gLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSkucHJvbWlzZTtcbiAgICByZXN1bHQgPSBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpblwiKS5wcm9taXNlO1xuICAgIGF3YWl0IHJlc3VsdDtcbiAgICBpZiAoXG4gICAgICByZXN1bHQubG9ncy5sZW5ndGggJiZcbiAgICAgIChhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImdpdC1jaGFuZ2VzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gcHVzaCB0aGUgY2hhbmdlcyB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnk/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICkpXG4gICAgKSB7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IGFkZCAuXCIpLnByb21pc2U7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKFxuICAgICAgICBgZ2l0IGNvbW1pdCAtbSBcIiR7dGFnfSAtICR7bWVzc2FnZX0gLSBhZnRlciByZWxlYXNlIHByZXBhcmF0aW9uJHtjaSA/IFwiXCIgOiBOb0NJRkxhZ31cImBcbiAgICAgICkucHJvbWlzZTtcbiAgICB9XG4gICAgYXdhaXQgcnVuQ29tbWFuZChcbiAgICAgIGBucG0gdmVyc2lvbiBcIiR7dGFnfVwiIC1tIFwiJHttZXNzYWdlfSR7Y2kgPyBcIlwiIDogTm9DSUZMYWd9XCJgXG4gICAgKS5wcm9taXNlO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgcHVzaCAtLWZvbGxvdy10YWdzXCIpLnByb21pc2U7XG4gICAgaWYgKCFjaSkge1xuICAgICAgYXdhaXQgcnVuQ29tbWFuZChcIk5QTV9UT0tFTj0kKGNhdCAubnBtdG9rZW4pIG5wbSBwdWJsaXNoIC0tYWNjZXNzIHB1YmxpY1wiKVxuICAgICAgICAucHJvbWlzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLXJlbGVhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL3RhZy1yZWxlYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlyQyxNQUFNLE9BQU8sR0FBRztJQUNkLEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxTQUFTO1FBQ2YsT0FBTyxFQUFFLElBQUk7S0FDZDtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLEdBQUc7S0FDWDtJQUNELEdBQUcsRUFBRTtRQUNILElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLEdBQUc7UUFDVixPQUFPLEVBQUUsU0FBUztLQUNuQjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLE9BQTZCO0lBQzlEO1FBQ0UsS0FBSyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFCRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBWTtRQUMvQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUUsR0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULEdBQUcsQ0FBQyxPQUFPLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUMvRCxHQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDckMsTUFBTSxVQUFVLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbkUsT0FBTyxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQ2xDLEtBQUssRUFDTCxpREFBaUQsRUFDakQsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQ3RFLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsT0FBZTtRQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxRQUFRLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQztZQUN0QixLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDdEIsS0FBSyxVQUFVLENBQUMsS0FBSztnQkFDbkIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE9BQU8sT0FBTyxDQUFDO1lBQ2pCO2dCQUNFLEdBQUcsQ0FBQyxPQUFPLENBQ1Qsc0RBQXNELE9BQU8sRUFBRSxFQUMvRCxDQUFDLENBQ0YsQ0FBQztnQkFDRixJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQy9DLEdBQUcsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ2hELE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELEdBQUcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFnQjtRQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQzlELE9BQU8sTUFBTSxTQUFTLENBQUMsYUFBYSxDQUNsQyxTQUFTLEVBQ1QsNENBQTRDLEVBQzVDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUM1QyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E2Qkc7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUNQLElBQ3dFO1FBRXhFLElBQUksTUFBVyxDQUFDO1FBQ2hCLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDNUIsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFhLENBQUMsQ0FBQztRQUMvQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQWlCLENBQUMsQ0FBQztRQUN2RCxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsOEJBQThCLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFBRTtZQUN4RSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtTQUNuQixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1gsTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzVELE1BQU0sTUFBTSxDQUFDO1FBQ2IsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDbEIsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxlQUFlLENBQzlCLGFBQWEsRUFDYiwyREFBMkQsRUFDM0QsSUFBSSxDQUNMLENBQUMsRUFDRixDQUFDO1lBQ0QsTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3RDLE1BQU0sVUFBVSxDQUNkLGtCQUFrQixHQUFHLE1BQU0sT0FBTywrQkFBK0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUN2RixDQUFDLE9BQU8sQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLFVBQVUsQ0FDZCxnQkFBZ0IsR0FBRyxTQUFTLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQzVELENBQUMsT0FBTyxDQUFDO1FBQ1YsTUFBTSxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsTUFBTSxVQUFVLENBQUMsd0RBQXdELENBQUM7aUJBQ3ZFLE9BQU8sQ0FBQztRQUNiLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBOb0NJRkxhZywgU2VtVmVyc2lvbiwgU2VtVmVyc2lvblJlZ2V4IH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSBcIi4uLy4uL2lucHV0L2lucHV0XCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRcIjtcbmltcG9ydCB7IExvZ2dpbmdDb25maWcgfSBmcm9tIFwiLi4vLi4vb3V0cHV0XCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZFZhbHVlcyB9IGZyb20gXCIuLi9pbmRleFwiO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICBjaToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIG1lc3NhZ2U6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNob3J0OiBcIm1cIixcbiAgfSxcbiAgdGFnOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzaG9ydDogXCJ0XCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxufTtcblxuLyoqXG4gKiBAY2xhc3MgUmVsZWFzZVNjcmlwdFxuICogQGV4dGVuZHMge0NvbW1hbmR9XG4gKiBAY2F2ZWdvcnkgc2NyaXB0c1xuICogQGRlc2NyaXB0aW9uIEEgY29tbWFuZC1saW5lIHNjcmlwdCBmb3IgbWFuYWdpbmcgcmVsZWFzZXMgYW5kIHZlcnNpb24gdXBkYXRlcy5cbiAqIEBzdW1tYXJ5IFRoaXMgc2NyaXB0IGF1dG9tYXRlcyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhbmQgcHVzaGluZyBuZXcgcmVsZWFzZXMuIEl0IGhhbmRsZXMgdmVyc2lvbiB1cGRhdGVzLFxuICogY29tbWl0IG1lc3NhZ2VzLCBhbmQgb3B0aW9uYWxseSBwdWJsaXNoZXMgdG8gTlBNLiBUaGUgc2NyaXB0IHN1cHBvcnRzIHNlbWFudGljIHZlcnNpb25pbmcgYW5kIGNhbiB3b3JrIGluIGJvdGggQ0kgYW5kIG5vbi1DSSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzY3JpcHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5jaSAtIFdoZXRoZXIgdGhlIHNjcmlwdCBpcyBydW5uaW5nIGluIGEgQ0kgZW52aXJvbm1lbnQgKGRlZmF1bHQ6IHRydWUpXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlIC0gVGhlIHJlbGVhc2UgbWVzc2FnZSAoc2hvcnQ6ICdtJylcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnRhZyAtIFRoZSB2ZXJzaW9uIHRhZyB0byB1c2UgKHNob3J0OiAndCcsIGRlZmF1bHQ6IHVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGVhc2VTY3JpcHQgZXh0ZW5kcyBDb21tYW5kPHR5cGVvZiBvcHRpb25zLCB2b2lkPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUmVsZWFzZVNjcmlwdFwiLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgdGhlIHZlcnNpb24gZm9yIHRoZSByZWxlYXNlLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCB2YWxpZGF0ZXMgdGhlIHByb3ZpZGVkIHRhZyBvciBwcm9tcHRzIHRoZSB1c2VyIGZvciBhIG5ldyBvbmUgaWYgbm90IHByb3ZpZGVkIG9yIGludmFsaWQuXG4gICAqIEl0IGFsc28gZGlzcGxheXMgdGhlIGxhdGVzdCBnaXQgdGFncyBmb3IgcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHZlcnNpb24gdGFnIHRvIHByZXBhcmVcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIHByZXBhcmVkIHZlcnNpb24gdGFnXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgUmVsZWFzZVNjcmlwdFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVGVzdFZlcnNpb25cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJJbnB1dFxuICAgKiAgIHBhcnRpY2lwYW50IEcgYXMgR2l0XG4gICAqICAgUi0+PlQ6IHRlc3RWZXJzaW9uKHRhZylcbiAgICogICBhbHQgdGFnIGlzIHZhbGlkXG4gICAqICAgICBULS0+PlI6IHJldHVybiB0YWdcbiAgICogICBlbHNlIHRhZyBpcyBpbnZhbGlkIG9yIG5vdCBwcm92aWRlZFxuICAgKiAgICAgUi0+Pkc6IExpc3QgbGF0ZXN0IGdpdCB0YWdzXG4gICAqICAgICBSLT4+VTogUHJvbXB0IGZvciBuZXcgdGFnXG4gICAqICAgICBVLS0+PlI6IHJldHVybiBuZXcgdGFnXG4gICAqICAgZW5kXG4gICAqL1xuICBhc3luYyBwcmVwYXJlVmVyc2lvbih0YWc/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnByZXBhcmVWZXJzaW9uKTtcbiAgICB0YWcgPSB0aGlzLnRlc3RWZXJzaW9uKCh0YWcgYXMgc3RyaW5nKSB8fCBcIlwiKTtcbiAgICBpZiAoIXRhZykge1xuICAgICAgbG9nLnZlcmJvc2UoXCJObyByZWxlYXNlIG1lc3NhZ2UgcHJvdmlkZWQuIFByb21wdGluZyBmb3Igb25lOlwiKTtcbiAgICAgIGxvZy5pbmZvKGBMaXN0aW5nIGxhdGVzdCBnaXQgdGFnczpgKTtcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgdGFnIC0tc29ydD0tdGFnZ2VyZGF0ZSB8IGhlYWQgLW4gNVwiKS5wcm9taXNlO1xuICAgICAgcmV0dXJuIGF3YWl0IFVzZXJJbnB1dC5pbnNpc3RGb3JUZXh0KFxuICAgICAgICBcInRhZ1wiLFxuICAgICAgICBcIkVudGVyIHRoZSBuZXcgdGFnIG51bWJlciAoYWNjZXB0cyB2Ki4qLipbLS4uLl0pXCIsXG4gICAgICAgICh2YWwpID0+XG4gICAgICAgICAgISF2YWwudG9TdHJpbmcoKS5tYXRjaCgvXnZbMC05XStcXC5bMC05XSsuWzAtOV0rKC1bMC05YS16QS1aLV0rKT8kLylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRlc3RzIGlmIHRoZSBwcm92aWRlZCB2ZXJzaW9uIGlzIHZhbGlkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHZlcnNpb24gaXMgYSB2YWxpZCBzZW1hbnRpYyB2ZXJzaW9uIG9yIGEgcHJlZGVmaW5lZCB1cGRhdGUgdHlwZSAoUEFUQ0gsIE1JTk9SLCBNQUpPUikuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIHZlcnNpb24gdG8gdGVzdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgdmFsaWRhdGVkIHZlcnNpb24gb3IgdW5kZWZpbmVkIGlmIGludmFsaWRcbiAgICovXG4gIHRlc3RWZXJzaW9uKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMudGVzdFZlcnNpb24pO1xuICAgIHZlcnNpb24gPSB2ZXJzaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgY2FzZSBTZW1WZXJzaW9uLlBBVENIOlxuICAgICAgY2FzZSBTZW1WZXJzaW9uLk1JTk9SOlxuICAgICAgY2FzZSBTZW1WZXJzaW9uLk1BSk9SOlxuICAgICAgICBsb2cudmVyYm9zZShgVXNpbmcgcHJvdmlkZWQgU2VtVmVyIHVwZGF0ZTogJHt2ZXJzaW9ufWAsIDEpO1xuICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICAgIGBUZXN0aW5nIHByb3ZpZGVkIHZlcnNpb24gZm9yIFNlbVZlciBjb21wYXRpYmlsaXR5OiAke3ZlcnNpb259YCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbmV3IFJlZ0V4cChTZW1WZXJzaW9uUmVnZXgpLnRlc3QodmVyc2lvbikpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYEludmFsaWQgdmVyc2lvbiBudW1iZXI6ICR7dmVyc2lvbn1gKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxvZy52ZXJib3NlKGB2ZXJzaW9uIGFwcHJvdmVkOiAke3ZlcnNpb259YCwgMSk7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgdGhlIHJlbGVhc2UgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgZWl0aGVyIHJldHVybnMgdGhlIHByb3ZpZGVkIG1lc3NhZ2Ugb3IgcHJvbXB0cyB0aGUgdXNlciBmb3IgYSBuZXcgb25lIGlmIG5vdCBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSAtIFRoZSByZWxlYXNlIG1lc3NhZ2VcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIHByZXBhcmVkIHJlbGVhc2UgbWVzc2FnZVxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZU1lc3NhZ2UobWVzc2FnZT86IHN0cmluZykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnByZXBhcmVNZXNzYWdlKTtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIGxvZy52ZXJib3NlKFwiTm8gcmVsZWFzZSBtZXNzYWdlIHByb3ZpZGVkLiBQcm9tcHRpbmcgZm9yIG9uZVwiKTtcbiAgICAgIHJldHVybiBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgICAgXCJtZXNzYWdlXCIsXG4gICAgICAgIFwiV2hhdCBzaG91bGQgYmUgdGhlIHJlbGVhc2UgbWVzc2FnZS90aWNrZXQ/XCIsXG4gICAgICAgICh2YWwpID0+ICEhdmFsICYmIHZhbC50b1N0cmluZygpLmxlbmd0aCA+IDVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSdW5zIHRoZSByZWxlYXNlIHNjcmlwdC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgb3JjaGVzdHJhdGVzIHRoZSBlbnRpcmUgcmVsZWFzZSBwcm9jZXNzLCBpbmNsdWRpbmcgdmVyc2lvbiBwcmVwYXJhdGlvbiwgbWVzc2FnZSBjcmVhdGlvbixcbiAgICogZ2l0IG9wZXJhdGlvbnMsIGFuZCBucG0gcHVibGlzaGluZyAoaWYgbm90IGluIENJIGVudmlyb25tZW50KS5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFyZ3MgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgUmVsZWFzZVNjcmlwdFxuICAgKiAgIHBhcnRpY2lwYW50IFYgYXMgUHJlcGFyZVZlcnNpb25cbiAgICogICBwYXJ0aWNpcGFudCBNIGFzIFByZXBhcmVNZXNzYWdlXG4gICAqICAgcGFydGljaXBhbnQgTiBhcyBOUE1cbiAgICogICBwYXJ0aWNpcGFudCBHIGFzIEdpdFxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlcklucHV0XG4gICAqICAgUi0+PlY6IHByZXBhcmVWZXJzaW9uKHRhZylcbiAgICogICBSLT4+TTogcHJlcGFyZU1lc3NhZ2UobWVzc2FnZSlcbiAgICogICBSLT4+TjogUnVuIHByZXBhcmUtcmVsZWFzZSBzY3JpcHRcbiAgICogICBSLT4+RzogQ2hlY2sgZ2l0IHN0YXR1c1xuICAgKiAgIGFsdCBjaGFuZ2VzIGV4aXN0XG4gICAqICAgICBSLT4+VTogQXNrIGZvciBjb25maXJtYXRpb25cbiAgICogICAgIFUtLT4+UjogQ29uZmlybVxuICAgKiAgICAgUi0+Pkc6IEFkZCBhbmQgY29tbWl0IGNoYW5nZXNcbiAgICogICBlbmRcbiAgICogICBSLT4+TjogVXBkYXRlIG5wbSB2ZXJzaW9uXG4gICAqICAgUi0+Pkc6IFB1c2ggY2hhbmdlcyBhbmQgdGFnc1xuICAgKiAgIGFsdCBub3QgQ0kgZW52aXJvbm1lbnRcbiAgICogICAgIFItPj5OOiBQdWJsaXNoIHRvIG5wbVxuICAgKiAgIGVuZFxuICAgKi9cbiAgYXN5bmMgcnVuKFxuICAgIGFyZ3M6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiB0eXBlb2Ygb3B0aW9uc106IHVua25vd24gfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgY29uc3QgeyBjaSB9ID0gYXJncztcbiAgICBsZXQgeyB0YWcsIG1lc3NhZ2UgfSA9IGFyZ3M7XG4gICAgdGFnID0gYXdhaXQgdGhpcy5wcmVwYXJlVmVyc2lvbih0YWcgYXMgc3RyaW5nKTtcbiAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5wcmVwYXJlTWVzc2FnZShtZXNzYWdlIGFzIHN0cmluZyk7XG4gICAgcmVzdWx0ID0gYXdhaXQgcnVuQ29tbWFuZChgbnBtIHJ1biBwcmVwYXJlLXJlbGVhc2UgLS0gJHt0YWd9ICR7bWVzc2FnZX1gLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSkucHJvbWlzZTtcbiAgICByZXN1bHQgPSBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpblwiKS5wcm9taXNlO1xuICAgIGF3YWl0IHJlc3VsdDtcbiAgICBpZiAoXG4gICAgICByZXN1bHQubG9ncy5sZW5ndGggJiZcbiAgICAgIChhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImdpdC1jaGFuZ2VzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gcHVzaCB0aGUgY2hhbmdlcyB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnk/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICkpXG4gICAgKSB7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IGFkZCAuXCIpLnByb21pc2U7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKFxuICAgICAgICBgZ2l0IGNvbW1pdCAtbSBcIiR7dGFnfSAtICR7bWVzc2FnZX0gLSBhZnRlciByZWxlYXNlIHByZXBhcmF0aW9uJHtjaSA/IFwiXCIgOiBOb0NJRkxhZ31cImBcbiAgICAgICkucHJvbWlzZTtcbiAgICB9XG4gICAgYXdhaXQgcnVuQ29tbWFuZChcbiAgICAgIGBucG0gdmVyc2lvbiBcIiR7dGFnfVwiIC1tIFwiJHttZXNzYWdlfSR7Y2kgPyBcIlwiIDogTm9DSUZMYWd9XCJgXG4gICAgKS5wcm9taXNlO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgcHVzaCAtLWZvbGxvdy10YWdzXCIpLnByb21pc2U7XG4gICAgaWYgKCFjaSkge1xuICAgICAgYXdhaXQgcnVuQ29tbWFuZChcIk5QTV9UT0tFTj0kKGNhdCAubnBtdG9rZW4pIG5wbSBwdWJsaXNoIC0tYWNjZXNzIHB1YmxpY1wiKVxuICAgICAgICAucHJvbWlzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { Command } from "../command";
|
|
2
|
+
import { CommandOptions } from "../types";
|
|
3
|
+
import { LoggingConfig } from "../../output";
|
|
4
|
+
import { DefaultCommandValues } from "../index";
|
|
5
|
+
declare const options: {
|
|
6
|
+
templates: string[];
|
|
7
|
+
workflows: string[];
|
|
8
|
+
ide: string[];
|
|
9
|
+
docs: string[];
|
|
10
|
+
styles: string[];
|
|
11
|
+
scripts: string[];
|
|
12
|
+
tests: string[];
|
|
13
|
+
typescript: string[];
|
|
14
|
+
docker: string[];
|
|
15
|
+
automation: string[];
|
|
16
|
+
};
|
|
17
|
+
declare const argzz: {
|
|
18
|
+
boot: {
|
|
19
|
+
type: string;
|
|
20
|
+
};
|
|
21
|
+
org: {
|
|
22
|
+
type: string;
|
|
23
|
+
short: string;
|
|
24
|
+
};
|
|
25
|
+
name: {
|
|
26
|
+
type: string;
|
|
27
|
+
short: string;
|
|
28
|
+
default: undefined;
|
|
29
|
+
};
|
|
30
|
+
author: {
|
|
31
|
+
type: string;
|
|
32
|
+
short: string;
|
|
33
|
+
default: undefined;
|
|
34
|
+
};
|
|
35
|
+
all: {
|
|
36
|
+
type: string;
|
|
37
|
+
};
|
|
38
|
+
license: {
|
|
39
|
+
type: string;
|
|
40
|
+
message: string;
|
|
41
|
+
};
|
|
42
|
+
scripts: {
|
|
43
|
+
type: string;
|
|
44
|
+
};
|
|
45
|
+
styles: {
|
|
46
|
+
type: string;
|
|
47
|
+
};
|
|
48
|
+
docs: {
|
|
49
|
+
type: string;
|
|
50
|
+
};
|
|
51
|
+
ide: {
|
|
52
|
+
type: string;
|
|
53
|
+
};
|
|
54
|
+
workflows: {
|
|
55
|
+
type: string;
|
|
56
|
+
};
|
|
57
|
+
templates: {
|
|
58
|
+
type: string;
|
|
59
|
+
};
|
|
60
|
+
typescript: {
|
|
61
|
+
type: string;
|
|
62
|
+
};
|
|
63
|
+
docker: {
|
|
64
|
+
type: string;
|
|
65
|
+
};
|
|
66
|
+
pkg: {
|
|
67
|
+
type: string;
|
|
68
|
+
};
|
|
69
|
+
dependencies: {
|
|
70
|
+
type: string;
|
|
71
|
+
};
|
|
72
|
+
tests: {
|
|
73
|
+
type: string;
|
|
74
|
+
};
|
|
75
|
+
automation: {
|
|
76
|
+
type: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* @class TemplateSync
|
|
81
|
+
* @extends {Command}
|
|
82
|
+
* @category scripts
|
|
83
|
+
* @description A command-line tool for synchronizing project templates and configurations.
|
|
84
|
+
* @summary This class provides functionality to download and update various project files and configurations from a remote repository.
|
|
85
|
+
* It supports updating licenses, IDE configurations, scripts, styles, documentation, workflows, and templates.
|
|
86
|
+
*
|
|
87
|
+
* @param {CommandOptions} args - The command options for TemplateSync
|
|
88
|
+
*/
|
|
89
|
+
export declare class TemplateSync extends Command<CommandOptions<typeof argzz>, void> {
|
|
90
|
+
private replacements;
|
|
91
|
+
constructor();
|
|
92
|
+
private loadValuesFromPackage;
|
|
93
|
+
/**
|
|
94
|
+
* @description Downloads files for a specific option category.
|
|
95
|
+
* @summary This method downloads all files associated with a given option key from the remote repository.
|
|
96
|
+
* @param {string} key - The key representing the option category to download
|
|
97
|
+
* @returns {Promise<void>}
|
|
98
|
+
* @throws {Error} If the specified option key is not found
|
|
99
|
+
*/
|
|
100
|
+
downloadOption(key: keyof typeof options): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* @description Downloads and sets up the specified license.
|
|
103
|
+
* @summary This method downloads the chosen license file, saves it to the project, and updates the package.json license field.
|
|
104
|
+
* @param {"MIT" | "GPL" | "Apache" | "LGPL" | "AGPL"} license - The license to download and set up
|
|
105
|
+
* @returns {Promise<void>}
|
|
106
|
+
*/
|
|
107
|
+
getLicense(license: "MIT" | "GPL" | "Apache" | "LGPL" | "AGPL"): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* @description Downloads IDE configuration files.
|
|
110
|
+
* @returns {Promise<void>}
|
|
111
|
+
*/
|
|
112
|
+
getIde(): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* @description Update npm scripts
|
|
115
|
+
* @returns {Promise<void>}
|
|
116
|
+
*/
|
|
117
|
+
getScripts(): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* @description Downloads style configuration files.
|
|
120
|
+
* @returns {Promise<void>}
|
|
121
|
+
*/
|
|
122
|
+
getStyles: () => Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* @description Downloads template files.
|
|
125
|
+
* @returns {Promise<void>}
|
|
126
|
+
*/
|
|
127
|
+
getTemplates: () => Promise<void>;
|
|
128
|
+
/**
|
|
129
|
+
* @description Downloads workflow configuration files.
|
|
130
|
+
* @returns {Promise<void>}
|
|
131
|
+
*/
|
|
132
|
+
getWorkflows: () => Promise<void>;
|
|
133
|
+
/**
|
|
134
|
+
* @description Downloads documentation files.
|
|
135
|
+
* @returns {Promise<void>}
|
|
136
|
+
*/
|
|
137
|
+
getDocs: () => Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* @description Downloads typescript config files.
|
|
140
|
+
* @returns {Promise<void>}
|
|
141
|
+
*/
|
|
142
|
+
getTypescript: () => Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* @description Downloads automation documentation files.
|
|
145
|
+
* @returns {Promise<void>}
|
|
146
|
+
*/
|
|
147
|
+
getAutomation: () => Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* @description Downloads automation documentation files.
|
|
150
|
+
* @returns {Promise<void>}
|
|
151
|
+
*/
|
|
152
|
+
getTests: () => Promise<void>;
|
|
153
|
+
/**
|
|
154
|
+
* @description Downloads docker image files.
|
|
155
|
+
* @returns {Promise<void>}
|
|
156
|
+
*/
|
|
157
|
+
getDocker: () => Promise<void>;
|
|
158
|
+
initPackage(pkgName: string, author: string, license: string): Promise<void>;
|
|
159
|
+
updatePackageScrips(): Promise<void>;
|
|
160
|
+
createTokenFiles(): Promise<void>;
|
|
161
|
+
getOrg(): Promise<string>;
|
|
162
|
+
auditFix(): Promise<string>;
|
|
163
|
+
patchFiles(): void;
|
|
164
|
+
updateDependencies(): Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* @description Runs the template synchronization process.
|
|
167
|
+
* @summary This method orchestrates the downloading of various project components based on the provided arguments.
|
|
168
|
+
* @param {ParseArgsResult} args - The parsed command-line arguments
|
|
169
|
+
* @returns {Promise<void>}
|
|
170
|
+
*
|
|
171
|
+
* @mermaid
|
|
172
|
+
* sequenceDiagram
|
|
173
|
+
* participant T as TemplateSync
|
|
174
|
+
* participant L as getLicense
|
|
175
|
+
* participant I as getIde
|
|
176
|
+
* participant S as getScripts
|
|
177
|
+
* participant St as getStyles
|
|
178
|
+
* participant D as getDocs
|
|
179
|
+
* participant W as getWorkflows
|
|
180
|
+
* participant Te as getTemplates
|
|
181
|
+
* T->>T: Parse arguments
|
|
182
|
+
* alt all flag is true
|
|
183
|
+
* T->>T: Set all component flags to true
|
|
184
|
+
* end
|
|
185
|
+
* alt license is specified
|
|
186
|
+
* T->>L: getLicense(license)
|
|
187
|
+
* end
|
|
188
|
+
* alt ide flag is true
|
|
189
|
+
* T->>I: getIde()
|
|
190
|
+
* end
|
|
191
|
+
* alt scripts flag is true
|
|
192
|
+
* T->>S: getScripts()
|
|
193
|
+
* end
|
|
194
|
+
* alt styles flag is true
|
|
195
|
+
* T->>St: getStyles()
|
|
196
|
+
* end
|
|
197
|
+
* alt docs flag is true
|
|
198
|
+
* T->>D: getDocs()
|
|
199
|
+
* end
|
|
200
|
+
* alt workflows flag is true
|
|
201
|
+
* T->>W: getWorkflows()
|
|
202
|
+
* end
|
|
203
|
+
* alt templates flag is true
|
|
204
|
+
* T->>Te: getTemplates()
|
|
205
|
+
* end
|
|
206
|
+
*/
|
|
207
|
+
run(args: LoggingConfig & typeof DefaultCommandValues & {
|
|
208
|
+
[k in keyof typeof argzz]: unknown;
|
|
209
|
+
}): Promise<void>;
|
|
210
|
+
}
|
|
211
|
+
export {};
|
|
@@ -45,7 +45,11 @@ const options = {
|
|
|
45
45
|
"workdocs/readme-md.json",
|
|
46
46
|
],
|
|
47
47
|
styles: [".prettierrc", "eslint.config.js"],
|
|
48
|
-
scripts: [
|
|
48
|
+
scripts: [
|
|
49
|
+
"bin/update-scripts.cjs",
|
|
50
|
+
"bin/tag-release.cjs",
|
|
51
|
+
"bin/build-scripts.cjs",
|
|
52
|
+
],
|
|
49
53
|
tests: ["jest.config.ts", "workdocs/reports/jest.coverage.config.ts"],
|
|
50
54
|
typescript: ["tsconfig.json"],
|
|
51
55
|
docker: ["Dockerfile"],
|
|
@@ -500,5 +504,4 @@ export class TemplateSync extends Command {
|
|
|
500
504
|
await this.updateDependencies();
|
|
501
505
|
}
|
|
502
506
|
}
|
|
503
|
-
|
|
504
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jbGkvY29tbWFuZHMvdXBkYXRlLXNjcmlwdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFckMsT0FBTyxFQUNMLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXBCLE1BQU0sT0FBTyxHQUNYLGdFQUFnRSxDQUFDO0FBRW5FLE1BQU0sT0FBTyxHQUFHO0lBQ2QsU0FBUyxFQUFFO1FBQ1Qsc0NBQXNDO1FBQ3RDLDJDQUEyQztRQUMzQyxxQkFBcUI7S0FDdEI7SUFDRCxTQUFTLEVBQUU7UUFDVCx1Q0FBdUM7UUFDdkMsc0NBQXNDO1FBQ3RDLDBDQUEwQztRQUMxQyw4QkFBOEI7UUFDOUIsMkNBQTJDO1FBQzNDLHVDQUF1QztRQUN2QyxzQ0FBc0M7S0FDdkM7SUFDRCxHQUFHLEVBQUU7UUFDSCwyQ0FBMkM7UUFDM0MsdUNBQXVDO1FBQ3ZDLDRDQUE0QztRQUM1QywwQ0FBMEM7UUFDMUMsc0NBQXNDO1FBQ3RDLDBDQUEwQztRQUMxQywrQ0FBK0M7UUFDL0MsbURBQW1EO1FBQ25ELGdEQUFnRDtRQUNoRCwwQ0FBMEM7UUFDMUMseUNBQXlDO1FBQ3pDLCtDQUErQztRQUMvQyxxQ0FBcUM7UUFDckMsNENBQTRDO1FBQzVDLGdEQUFnRDtLQUNqRDtJQUNELElBQUksRUFBRTtRQUNKLG9DQUFvQztRQUNwQyxxQ0FBcUM7UUFDckMsc0NBQXNDO1FBQ3RDLHNCQUFzQjtRQUN0QixzQkFBc0I7UUFDdEIseUJBQXlCO0tBQzFCO0lBQ0QsTUFBTSxF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QWUsQ0FDNUMsS0FBSyxFQUNMLHlDQUF5QyxFQUN6QyxJQUFJLENBQ0wsQ0FBQztRQUNKLElBQUksWUFBWTtZQUFFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwiZmlsZSI6ImNsaS9jb21tYW5kcy91cGRhdGUtc2NyaXB0cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRcIjtcbmltcG9ydCB7IENvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXRQYWNrYWdlLFxuICBIdHRwQ2xpZW50LFxuICBwYXRjaEZpbGUsXG4gIHBhdGNoU3RyaW5nLFxuICBydW5Db21tYW5kLFxuICBzZXRQYWNrYWdlQXR0cmlidXRlLFxuICBTZXR1cFNjcmlwdEtleSxcbiAgVG9rZW5zLFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgTG9nZ2luZ0NvbmZpZyB9IGZyb20gXCIuLi8uLi9vdXRwdXRcIjtcbmltcG9ydCB7IERlZmF1bHRDb21tYW5kVmFsdWVzIH0gZnJvbSBcIi4uL2luZGV4XCI7XG5pbXBvcnQgeyBVc2VySW5wdXQgfSBmcm9tIFwiLi4vLi4vaW5wdXRcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcblxuY29uc3QgYmFzZVVybCA9XG4gIFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlY2FmLXRzL3RzLXdvcmtzcGFjZS9tYXN0ZXJcIjtcblxuY29uc3Qgb3B0aW9ucyA9IHtcbiAgdGVtcGxhdGVzOiBbXG4gICAgXCIuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2J1Z19yZXBvcnQubWRcIixcbiAgICBcIi5naXRodWIvSVNTVUVfVEVNUExBVEUvZmVhdHVyZV9yZXF1ZXN0Lm1kXCIsXG4gICAgXCIuZ2l0aHViL0ZVTkRJTkcueW1sXCIsXG4gIF0sXG4gIHdvcmtmbG93czogW1xuICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvY29kZXFsLWFuYWx5c2lzLnltbFwiLFxuICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvamVzdC1jb3ZlcmFnZS55YW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9ub2RlanMtYnVpbGQtcHJvZC55YW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9wYWdlcy55YW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLW9uLXJlbGVhc2UueWFtbFwiLFxuICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvcmVsZWFzZS1vbi10YWcueWFtbFwiLFxuICAgIFwiLmdpdGh1Yi93b3JrZmxvd3Mvc255ay1hbmFseXNpcy55YW1sXCIsXG4gIF0sXG4gIGlkZTogW1xuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvQWxsIFRlc3RzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2J1aWxkLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2J1aWxkX3Byb2QucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvY292ZXJhZ2UucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvZG9jcy5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9kcmF3aW5ncy5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9mbGFzaC1mb3J3YXJkLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL0ludGVncmF0aW9uX1Rlc3RzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL0J1bmRsaW5nX1Rlc3RzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2xpbnQtZml4LnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL3JlbGVhc2UucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvdGVzdF9jaXJjdWxhci5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy91bWwucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvVW5pdCBUZXN0cy5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy91cGRhdGUtc2NyaXB0cy5ydW4ueG1sXCIsXG4gIF0sXG4gIGRvY3M6IFtcbiAgICBcIndvcmtkb2NzL3R1dG9yaWFscy9Db250cmlidXRpbmcubWRcIixcbiAgICBcIndvcmtkb2NzL3R1dG9yaWFscy9Eb2N1bWVudGF0aW9uLm1kXCIsXG4gICAgXCJ3b3JrZG9jcy90dXRvcmlhbHMvRm9yIERldmVsb3BlcnMubWRcIixcbiAgICBcIndvcmtkb2NzLzItQmFkZ2VzLm1kXCIsXG4gICAgXCJ3b3JrZG9jcy9qc2RvY3MuanNvblwiLFxuICAgIFwid29ya2RvY3MvcmVhZG1lLW1kLmpzb25cIixcbiAgXSxcbiAgc3R5bGVzOiBbXCIucHJldHRpZXJyY1wiLCBcImVzbGludC5jb25maWcuanNcIl0sXG4gIHNjcmlwdHM6IFtcImJpbi91cGRhdGUtc2NyaXB0cy5janNcIiwgXCJiaW4vdGFnLXJlbGVhc2UuY2pzXCJdLFxuICB0ZXN0czogW1wiamVzdC5jb25maWcudHNcIiwgXCJ3b3JrZG9jcy9yZXBvcnRzL2plc3QuY292ZXJhZ2UuY29uZmlnLnRzXCJdLFxuICB0eXBlc2NyaXB0OiBbXCJ0c2NvbmZpZy5qc29uXCJdLFxuICBkb2NrZXI6IFtcIkRvY2tlcmZpbGVcIl0sXG4gIGF1dG9tYXRpb246IFtcbiAgICBcIndvcmtkb2NzL2NvbmZsdWVuY2UvQ29udGludW91cyBJbnRlZ3JhdGlvbi1EZXBsb3ltZW50L0dpdEh1Yi5tZFwiLFxuICAgIFwid29ya2RvY3MvY29uZmx1ZW5jZS9Db250aW51b3VzIEludGVncmF0aW9uLURlcGxveW1lbnQvSmlyYS5tZFwiLFxuICAgIFwid29ya2RvY3MvY29uZmx1ZW5jZS9Db250aW51b3VzIEludGVncmF0aW9uLURlcGxveW1lbnQvVGVhbXMubWRcIixcbiAgXSxcbn07XG5cbmNvbnN0IGFyZ3p6ID0ge1xuICAvLyBpbml0IGF0dHJpYnV0ZXNcbiAgYm9vdDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBvcmc6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNob3J0OiBcIm9cIixcbiAgfSxcbiAgbmFtZToge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2hvcnQ6IFwiblwiLFxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgfSxcbiAgYXV0aG9yOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzaG9ydDogXCJhXCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxuICAvLyB1cGRhdGUgYXR0cmlidXRlc1xuICBhbGw6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgbGljZW5zZToge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgbWVzc2FnZTogXCJQaWNrIHRoZSBsaWNlbnNlXCIsXG4gIH0sXG4gIHNjcmlwdHM6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgc3R5bGVzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIGRvY3M6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgaWRlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIHdvcmtmbG93czoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICB0ZW1wbGF0ZXM6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgdHlwZXNjcmlwdDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBkb2NrZXI6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgcGtnOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIGRlcGVuZGVuY2llczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICB0ZXN0czoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBhdXRvbWF0aW9uOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG59O1xuXG4vKipcbiAqIEBjbGFzcyBUZW1wbGF0ZVN5bmNcbiAqIEBleHRlbmRzIHtDb21tYW5kfVxuICogQGNhdGVnb3J5IHNjcmlwdHNcbiAqIEBkZXNjcmlwdGlvbiBBIGNvbW1hbmQtbGluZSB0b29sIGZvciBzeW5jaHJvbml6aW5nIHByb2plY3QgdGVtcGxhdGVzIGFuZCBjb25maWd1cmF0aW9ucy5cbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBkb3dubG9hZCBhbmQgdXBkYXRlIHZhcmlvdXMgcHJvamVjdCBmaWxlcyBhbmQgY29uZmlndXJhdGlvbnMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LlxuICogSXQgc3VwcG9ydHMgdXBkYXRpbmcgbGljZW5zZXMsIElERSBjb25maWd1cmF0aW9ucywgc2NyaXB0cywgc3R5bGVzLCBkb2N1bWVudGF0aW9uLCB3b3JrZmxvd3MsIGFuZCB0ZW1wbGF0ZXMuXG4gKlxuICogQHBhcmFtIHtDb21tYW5kT3B0aW9uc30gYXJncyAtIFRoZSBjb21tYW5kIG9wdGlvbnMgZm9yIFRlbXBsYXRlU3luY1xuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVTeW5jIGV4dGVuZHMgQ29tbWFuZDxDb21tYW5kT3B0aW9uczx0eXBlb2YgYXJneno+LCB2b2lkPiB7XG4gIHByaXZhdGUgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ID0ge307XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJUZW1wbGF0ZVN5bmNcIiwgYXJnenopO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkVmFsdWVzRnJvbVBhY2thZ2UoKSB7XG4gICAgY29uc3QgcCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgYXV0aG9yID0gZ2V0UGFja2FnZShwLCBcImF1dGhvclwiKSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgc2NvcGVkTmFtZSA9IGdldFBhY2thZ2UocCwgXCJuYW1lXCIpO1xuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBzY29wZWROYW1lIGFzIHN0cmluZztcbiAgICBsZXQgb3JnOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKG5hbWUuc3RhcnRzV2l0aChcIkBcIikpIHtcbiAgICAgIGNvbnN0IHNwbGl0ID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgICBuYW1lID0gc3BsaXRbMV07XG4gICAgICBvcmcgPSBzcGxpdFswXS5yZXBsYWNlKFwiQFwiLCBcIlwiKTtcbiAgICB9XG4gICAgW1wiVGlhZ28gVmVuY2VzbGF1XCIsIFwiVGlhZ29WZW5jZXNsYXVcIiwgXCIke2F1dGhvcn1cIl0uZm9yRWFjaChcbiAgICAgIChlbCkgPT4gKHRoaXMucmVwbGFjZW1lbnRzW2VsXSA9IGF1dGhvcilcbiAgICApO1xuICAgIFtcIlRTLVdvcmtzcGFjZVwiLCBcInRzLXdvcmtzcGFjZVwiLCBcIiR7bmFtZX1cIl0uZm9yRWFjaChcbiAgICAgIChlbCkgPT4gKHRoaXMucmVwbGFjZW1lbnRzW2VsXSA9IG5hbWUpXG4gICAgKTtcbiAgICBbXCJkZWNhZi10c1wiLCBcIiR7b3JnfVwiXS5mb3JFYWNoKFxuICAgICAgKGVsKSA9PiAodGhpcy5yZXBsYWNlbWVudHNbZWxdID0gKG9yZyBhcyBzdHJpbmcpIHx8ICdcIlwiJylcbiAgICApO1xuICAgIHRoaXMucmVwbGFjZW1lbnRzW1wiJHtvcmdfb3Jfb3duZXJ9XCJdID0gb3JnIHx8IG5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBmaWxlcyBmb3IgYSBzcGVjaWZpYyBvcHRpb24gY2F0ZWdvcnkuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGRvd25sb2FkcyBhbGwgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gb3B0aW9uIGtleSBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgcmVwcmVzZW50aW5nIHRoZSBvcHRpb24gY2F0ZWdvcnkgdG8gZG93bmxvYWRcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgc3BlY2lmaWVkIG9wdGlvbiBrZXkgaXMgbm90IGZvdW5kXG4gICAqL1xuICBhc3luYyBkb3dubG9hZE9wdGlvbihrZXk6IGtleW9mIHR5cGVvZiBvcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCEoa2V5IGluIG9wdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbiBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBvcHRpb25zYCk7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVzID0gb3B0aW9uc1trZXkgYXMga2V5b2YgdHlwZW9mIG9wdGlvbnNdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBEb3dubG9hZGluZyAke2ZpbGV9YCk7XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgSHR0cENsaWVudC5kb3dubG9hZEZpbGUoYCR7YmFzZVVybH0vJHtmaWxlfWApO1xuICAgICAgZGF0YSA9IHBhdGNoU3RyaW5nKGRhdGEsIHRoaXMucmVwbGFjZW1lbnRzKTtcbiAgICAgIHdyaXRlRmlsZShwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgZmlsZSksIGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGFuZCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgbGljZW5zZS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgZG93bmxvYWRzIHRoZSBjaG9zZW4gbGljZW5zZSBmaWxlLCBzYXZlcyBpdCB0byB0aGUgcHJvamVjdCwgYW5kIHVwZGF0ZXMgdGhlIHBhY2thZ2UuanNvbiBsaWNlbnNlIGZpZWxkLlxuICAgKiBAcGFyYW0ge1wiTUlUXCIgfCBcIkdQTFwiIHwgXCJBcGFjaGVcIiB8IFwiTEdQTFwiIHwgXCJBR1BMXCJ9IGxpY2Vuc2UgLSBUaGUgbGljZW5zZSB0byBkb3dubG9hZCBhbmQgc2V0IHVwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgZ2V0TGljZW5zZShsaWNlbnNlOiBcIk1JVFwiIHwgXCJHUExcIiB8IFwiQXBhY2hlXCIgfCBcIkxHUExcIiB8IFwiQUdQTFwiKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgRG93bmxvYWRpbmcgJHtsaWNlbnNlfSBsaWNlbnNlYCk7XG4gICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vd29ya2RvY3MvbGljZW5zZXMvJHtsaWNlbnNlfS5tZGA7XG4gICAgbGV0IGRhdGEgPSBhd2FpdCBIdHRwQ2xpZW50LmRvd25sb2FkRmlsZSh1cmwpO1xuICAgIGRhdGEgPSBwYXRjaFN0cmluZyhkYXRhLCB0aGlzLnJlcGxhY2VtZW50cyk7XG4gICAgd3JpdGVGaWxlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcIkxJQ0VOU0UubWRcIiksIGRhdGEpO1xuICAgIHNldFBhY2thZ2VBdHRyaWJ1dGUoXCJsaWNlbnNlXCIsIGxpY2Vuc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgSURFIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgZ2V0SWRlKCkge1xuICAgIGZzLm1rZGlyU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCIuaWRlYVwiLCBcInJ1bkNvbmZpZ3VyYXRpb25zXCIpLCB7XG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5kb3dubG9hZE9wdGlvbihcImlkZVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlIG5wbSBzY3JpcHRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgZ2V0U2NyaXB0cygpIHtcbiAgICBhd2FpdCB0aGlzLmRvd25sb2FkT3B0aW9uKFwic2NyaXB0c1wiKTtcbiAgICB0aGlzLmxvZy5pbmZvKFwicGxlYXNlIHJlLXJ1biB0aGUgY29tbWFuZFwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBzdHlsZSBjb25maWd1cmF0aW9uIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldFN0eWxlcyA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJzdHlsZXNcIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgdGVtcGxhdGUgZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0VGVtcGxhdGVzID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcInRlbXBsYXRlc1wiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyB3b3JrZmxvdyBjb25maWd1cmF0aW9uIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldFdvcmtmbG93cyA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJ3b3JrZmxvd3NcIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgZG9jdW1lbnRhdGlvbiBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXREb2NzID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcImRvY3NcIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgdHlwZXNjcmlwdCBjb25maWcgZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0VHlwZXNjcmlwdCA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJ0eXBlc2NyaXB0XCIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGF1dG9tYXRpb24gZG9jdW1lbnRhdGlvbiBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXRBdXRvbWF0aW9uID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcImF1dG9tYXRpb25cIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgYXV0b21hdGlvbiBkb2N1bWVudGF0aW9uIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldFRlc3RzID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcInRlc3RzXCIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGRvY2tlciBpbWFnZSBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXREb2NrZXIgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwiZG9ja2VyXCIpO1xuXG4gIGFzeW5jIGluaXRQYWNrYWdlKHBrZ05hbWU6IHN0cmluZywgYXV0aG9yOiBzdHJpbmcsIGxpY2Vuc2U6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2cgPSBnZXRQYWNrYWdlKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBkZWxldGUgcGtnW1NldHVwU2NyaXB0S2V5XTtcbiAgICAgIHBrZy5uYW1lID0gcGtnTmFtZTtcbiAgICAgIHBrZy52ZXJzaW9uID0gXCIwLjAuMVwiO1xuICAgICAgcGtnLmF1dGhvciA9IGF1dGhvcjtcbiAgICAgIHBrZy5saWNlbnNlID0gbGljZW5zZTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXCJwYWNrYWdlLmpzb25cIiwgSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBmaXhpbmcgcGFja2FnZS5qc29uOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlUGFja2FnZVNjcmlwcygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxQa2cgPSBKU09OLnBhcnNlKFxuICAgICAgICBhd2FpdCBIdHRwQ2xpZW50LmRvd25sb2FkRmlsZShgJHtiYXNlVXJsfS9wYWNrYWdlLmpzb25gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgc2NyaXB0cyB9ID0gb3JpZ2luYWxQa2c7XG5cbiAgICAgIGNvbnN0IHBrZzogdHlwZW9mIG9yaWdpbmFsUGtnID0gZ2V0UGFja2FnZSgpIGFzIHtcbiAgICAgICAgc2NyaXB0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIH07XG4gICAgICBPYmplY3Qua2V5cyhwa2cuc2NyaXB0cykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgaW4gc2NyaXB0cykge1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2VkID0gcGF0Y2hTdHJpbmcoc2NyaXB0c1trZXldLCB0aGlzLnJlcGxhY2VtZW50cyk7XG4gICAgICAgICAgaWYgKHJlcGxhY2VkICE9PSBzY3JpcHRzW2tleV0pIHtcbiAgICAgICAgICAgIHBrZy5zY3JpcHRzW2tleV0gPSByZXBsYWNlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBwa2dbXCJleHBvcnRzXCJdW1wicmVxdWlyZVwiXSA9IG9yaWdpbmFsUGtnW1wiZXhwb3J0c1wiXVtcInJlcXVpcmVcIl07XG4gICAgICBwa2dbXCJleHBvcnRzXCJdW1wiaW1wb3J0XCJdID0gb3JpZ2luYWxQa2dbXCJleHBvcnRzXCJdW1wiaW1wb3J0XCJdO1xuICAgICAgcGtnW1widHlwZXNcIl0gPSBvcmlnaW5hbFBrZ1tcInR5cGVzXCJdO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFwicGFja2FnZS5qc29uXCIsIEpTT04uc3RyaW5naWZ5KHBrZywgbnVsbCwgMikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZml4aW5nIHBhY2thZ2UuanNvbiBzY3JpcHRzOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlVG9rZW5GaWxlcygpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5jcmVhdGVUb2tlbkZpbGVzKTtcbiAgICBjb25zdCBnaXRUb2tlbiA9IGF3YWl0IFVzZXJJbnB1dC5pbnNpc3RGb3JUZXh0KFxuICAgICAgXCJ0b2tlblwiLFxuICAgICAgXCJwbGVhc2UgaW5wdXQgeW91ciBnaXRodWIgdG9rZW5cIixcbiAgICAgIChyZXM6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gISFyZXMubWF0Y2goL15naHBfWzAtOWEtekEtWl17MzZ9JC9nKTtcbiAgICAgIH1cbiAgICApO1xuICAgIE9iamVjdC52YWx1ZXMoVG9rZW5zKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHN0YXR1cztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzdGF0dXMgPSBmcy5leGlzdHNTeW5jKHRva2VuKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICBsb2cuaW5mbyhgVG9rZW4gZmlsZSAke3Rva2VufSBub3QgZm91bmQuIENyZWF0aW5nIGEgbmV3IG9uZS4uLmApO1xuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModG9rZW4sIHRva2VuID09PSBcIi50b2tlblwiID8gZ2l0VG9rZW4gOiBcIlwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRva2VuLCB0b2tlbiA9PT0gXCIudG9rZW5cIiA/IGdpdFRva2VuIDogXCJcIik7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBjcmVhdGluZyB0b2tlbiBmaWxlICR7dG9rZW59OiAke2V9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRPcmcoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBvcmcgPSBhd2FpdCBVc2VySW5wdXQuYXNrVGV4dChcbiAgICAgIFwiT3JnYW5pemF0aW9uXCIsXG4gICAgICBcIkVudGVyIHRoZSBvcmdhbml6YXRpb24gbmFtZSAod2lsbCBiZSB1c2VkIHRvIHNjb3BlIHlvdXIgbnBtIHByb2plY3QuIGxlYXZlIGJsYW5rIHRvIGNyZWF0ZSBhIHVuc2NvcGVkIHByb2plY3QpOlwiXG4gICAgKTtcbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgXCJDb25maXJtIG9yZ2FuaXphdGlvblwiLFxuICAgICAgXCJJcyB0aGlzIG9yZ2FuaXphdGlvbiBjb3JyZWN0P1wiLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKCFjb25maXJtYXRpb24pIHJldHVybiB0aGlzLmdldE9yZygpO1xuXG4gICAgcmV0dXJuIG9yZztcbiAgfVxuXG4gIGFzeW5jIGF1ZGl0Rml4KCkge1xuICAgIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFwibnBtIGF1ZGl0IGZpeCAtLWZvcmNlXCIpLnByb21pc2U7XG4gIH1cblxuICBwYXRjaEZpbGVzKCkge1xuICAgIGNvbnN0IGZpbGVzID0gW1xuICAgICAgLi4uZnNcbiAgICAgICAgLnJlYWRkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInNyY1wiKSwge1xuICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuaXNGaWxlKCkpXG4gICAgICAgIC5tYXAoKGVudHJ5KSA9PiBwYXRoLmpvaW4oZW50cnkucGFyZW50UGF0aCwgZW50cnkubmFtZSkpLFxuICAgICAgLi4uZnNcbiAgICAgICAgLnJlYWRkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcIndvcmtkb2NzXCIpLCB7XG4gICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0ZpbGUoKSAmJiBlbnRyeS5uYW1lLmVuZHNXaXRoKFwiLm1kXCIpKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4gcGF0aC5qb2luKGVudHJ5LnBhcmVudFBhdGgsIGVudHJ5Lm5hbWUpKSxcbiAgICAgIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcIi5naXRsYWItY2kueW1sXCIpLFxuICAgICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwid29ya2RvY3NcIiwgXCJqc2RvY3MuanNvblwiKSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBwYXRjaEZpbGUoZmlsZSBhcyBzdHJpbmcsIHRoaXMucmVwbGFjZW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXBlbmRlbmNpZXMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsUGtnID0gSlNPTi5wYXJzZShcbiAgICAgICAgYXdhaXQgSHR0cENsaWVudC5kb3dubG9hZEZpbGUoYCR7YmFzZVVybH0vcGFja2FnZS5qc29uYClcbiAgICAgICk7XG4gICAgICBjb25zdCB7IGRldkRlcGVuZGVuY2llcyB9ID0gb3JpZ2luYWxQa2c7XG5cbiAgICAgIGNvbnN0IHBrZzogdHlwZW9mIG9yaWdpbmFsUGtnID0gZ2V0UGFja2FnZSgpIGFzIHtcbiAgICAgICAgc2NyaXB0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIH07XG4gICAgICBPYmplY3Qua2V5cyhwa2cuc2NyaXB0cykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgaW4gZGV2RGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgY29uc3QgcmVwbGFjZWQgPSBkZXZEZXBlbmRlbmNpZXNba2V5XTtcbiAgICAgICAgICBpZiAocmVwbGFjZWQgIT09IGRldkRlcGVuZGVuY2llc1trZXldKSB7XG4gICAgICAgICAgICAocGtnIGFzIGFueSlbXCJkZXZEZXBlbmRlbmNpZXNcIl0gPVxuICAgICAgICAgICAgICAocGtnIGFzIGFueSlbXCJkZXZEZXBlbmRlbmNpZXNcIl0gfHwge307XG4gICAgICAgICAgICAocGtnIGFzIGFueSlbXCJkZXZEZXBlbmRlbmNpZXNcIl1ba2V5XSA9IHJlcGxhY2VkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXCJwYWNrYWdlLmpzb25cIiwgSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSk7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKFwibnBtIGluc3RhbGxcIikucHJvbWlzZTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpeGluZyBwYWNrYWdlLmpzb24gZGVwZW5kZW5jaWVzOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSdW5zIHRoZSB0ZW1wbGF0ZSBzeW5jaHJvbml6YXRpb24gcHJvY2Vzcy5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgb3JjaGVzdHJhdGVzIHRoZSBkb3dubG9hZGluZyBvZiB2YXJpb3VzIHByb2plY3QgY29tcG9uZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge1BhcnNlQXJnc1Jlc3VsdH0gYXJncyAtIFRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVCBhcyBUZW1wbGF0ZVN5bmNcbiAgICogICBwYXJ0aWNpcGFudCBMIGFzIGdldExpY2Vuc2VcbiAgICogICBwYXJ0aWNpcGFudCBJIGFzIGdldElkZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgZ2V0U2NyaXB0c1xuICAgKiAgIHBhcnRpY2lwYW50IFN0IGFzIGdldFN0eWxlc1xuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgZ2V0RG9jc1xuICAgKiAgIHBhcnRpY2lwYW50IFcgYXMgZ2V0V29ya2Zsb3dzXG4gICAqICAgcGFydGljaXBhbnQgVGUgYXMgZ2V0VGVtcGxhdGVzXG4gICAqICAgVC0+PlQ6IFBhcnNlIGFyZ3VtZW50c1xuICAgKiAgIGFsdCBhbGwgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+VDogU2V0IGFsbCBjb21wb25lbnQgZmxhZ3MgdG8gdHJ1ZVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBsaWNlbnNlIGlzIHNwZWNpZmllZFxuICAgKiAgICAgVC0+Pkw6IGdldExpY2Vuc2UobGljZW5zZSlcbiAgICogICBlbmRcbiAgICogICBhbHQgaWRlIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+Pkk6IGdldElkZSgpXG4gICAqICAgZW5kXG4gICAqICAgYWx0IHNjcmlwdHMgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+UzogZ2V0U2NyaXB0cygpXG4gICAqICAgZW5kXG4gICAqICAgYWx0IHN0eWxlcyBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5TdDogZ2V0U3R5bGVzKClcbiAgICogICBlbmRcbiAgICogICBhbHQgZG9jcyBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5EOiBnZXREb2NzKClcbiAgICogICBlbmRcbiAgICogICBhbHQgd29ya2Zsb3dzIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+Plc6IGdldFdvcmtmbG93cygpXG4gICAqICAgZW5kXG4gICAqICAgYWx0IHRlbXBsYXRlcyBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5UZTogZ2V0VGVtcGxhdGVzKClcbiAgICogICBlbmRcbiAgICovXG4gIGFzeW5jIHJ1bihcbiAgICBhcmdzOiBMb2dnaW5nQ29uZmlnICZcbiAgICAgIHR5cGVvZiBEZWZhdWx0Q29tbWFuZFZhbHVlcyAmIHsgW2sgaW4ga2V5b2YgdHlwZW9mIGFyZ3p6XTogdW5rbm93biB9XG4gICkge1xuICAgIGxldCB7IGxpY2Vuc2UgfSA9IGFyZ3M7XG4gICAgY29uc3QgeyBib290IH0gPSBhcmdzO1xuICAgIGxldCB7XG4gICAgICBhbGwsXG4gICAgICBzY3JpcHRzLFxuICAgICAgc3R5bGVzLFxuICAgICAgZG9jcyxcbiAgICAgIGlkZSxcbiAgICAgIHdvcmtmbG93cyxcbiAgICAgIHRlbXBsYXRlcyxcbiAgICAgIGRvY2tlcixcbiAgICAgIHR5cGVzY3JpcHQsXG4gICAgICBkZXBlbmRlbmNpZXMsXG4gICAgICB0ZXN0cyxcbiAgICAgIGF1dG9tYXRpb24sXG4gICAgICBwa2csXG4gICAgfSA9IGFyZ3M7XG4gICAgaWYgKFxuICAgICAgc2NyaXB0cyB8fFxuICAgICAgc3R5bGVzIHx8XG4gICAgICBkb2NzIHx8XG4gICAgICBpZGUgfHxcbiAgICAgIHdvcmtmbG93cyB8fFxuICAgICAgdGVtcGxhdGVzIHx8XG4gICAgICBkb2NrZXIgfHxcbiAgICAgIHR5cGVzY3JpcHQgfHxcbiAgICAgIGF1dG9tYXRpb24gfHxcbiAgICAgIGRlcGVuZGVuY2llcyB8fFxuICAgICAgdGVzdHMgfHxcbiAgICAgIHBrZ1xuICAgIClcbiAgICAgIGFsbCA9IGZhbHNlO1xuXG4gICAgaWYgKGJvb3QpIHtcbiAgICAgIGNvbnN0IG9yZyA9IGF3YWl0IHRoaXMuZ2V0T3JnKCk7XG4gICAgICBjb25zdCBuYW1lID0gYXdhaXQgVXNlcklucHV0Lmluc2lzdEZvclRleHQoXG4gICAgICAgIFwiUHJvamVjdCBuYW1lXCIsXG4gICAgICAgIFwiRW50ZXIgdGhlIHByb2plY3QgbmFtZTpcIixcbiAgICAgICAgKHJlczogc3RyaW5nKSA9PiByZXMubGVuZ3RoID4gMVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGF1dGhvciA9IGF3YWl0IFVzZXJJbnB1dC5pbnNpc3RGb3JUZXh0KFxuICAgICAgICBcIkF1dGhvclwiLFxuICAgICAgICBcIkVudGVyIHRoZSBhdXRob3IgbmFtZTpcIixcbiAgICAgICAgKHJlczogc3RyaW5nKSA9PiByZXMubGVuZ3RoID4gMVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBrZ05hbWUgPSBvcmcgPyBgQCR7b3JnfS8ke25hbWV9YCA6IG5hbWU7XG5cbiAgICAgIGF3YWl0IHRoaXMuaW5pdFBhY2thZ2UocGtnTmFtZSwgYXV0aG9yLCBsaWNlbnNlIGFzIHN0cmluZyk7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVRva2VuRmlsZXMoKTtcbiAgICAgIGF3YWl0IHRoaXMuYXVkaXRGaXgoKTtcbiAgICAgIHRoaXMucGF0Y2hGaWxlcygpO1xuICAgIH1cblxuICAgIGlmIChhbGwpIHtcbiAgICAgIHNjcmlwdHMgPSBmYWxzZTtcbiAgICAgIHN0eWxlcyA9IHRydWU7XG4gICAgICBkb2NzID0gdHJ1ZTtcbiAgICAgIGlkZSA9IHRydWU7XG4gICAgICB3b3JrZmxvd3MgPSB0cnVlO1xuICAgICAgdGVtcGxhdGVzID0gdHJ1ZTtcbiAgICAgIGRvY2tlciA9IHRydWU7XG4gICAgICB0eXBlc2NyaXB0ID0gdHJ1ZTtcbiAgICAgIHBrZyA9IHRydWU7XG4gICAgICBkZXBlbmRlbmNpZXMgPSB0cnVlO1xuICAgICAgdGVzdHMgPSB0cnVlO1xuICAgICAgYXV0b21hdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2NyaXB0cyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHNjcmlwdHMgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInNjcmlwdHNcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgc2NyaXB0cz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcblxuICAgIGlmIChzY3JpcHRzKSBhd2FpdCB0aGlzLmdldFNjcmlwdHMoKTtcblxuICAgIHRoaXMubG9hZFZhbHVlc0Zyb21QYWNrYWdlKCk7XG4gICAgaWYgKCFhbGwgJiYgdHlwZW9mIGxpY2Vuc2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwibGljZW5zZVwiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIHNldCBhIGxpY2Vuc2U/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBpZiAoY29uZmlybWF0aW9uKVxuICAgICAgICBsaWNlbnNlID0gYXdhaXQgVXNlcklucHV0Lmluc2lzdEZvclRleHQoXG4gICAgICAgICAgXCJsaWNlbnNlXCIsXG4gICAgICAgICAgXCJFbnRlciB0aGUgZGVzaXJlZCBMaWNlbnNlIChNSVR8R1BMfEFwYWNoZXxMR1BMfEFHUEwpOlwiLFxuICAgICAgICAgICh2YWwpID0+ICEhdmFsICYmICEhdmFsLm1hdGNoKC9eKE1JVHxHUEx8QXBhY2hlfExHUEx8QUdQTCkkL2cpXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TGljZW5zZShcbiAgICAgICAgbGljZW5zZSBhcyBcIk1JVFwiIHwgXCJHUExcIiB8IFwiQXBhY2hlXCIgfCBcIkxHUExcIiB8IFwiQUdQTFwiXG4gICAgICApO1xuXG4gICAgaWYgKHR5cGVvZiBpZGUgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBpZGUgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImlkZVwiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCBpZGUgY29uZmlncz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcblxuICAgIGlmIChpZGUpIGF3YWl0IHRoaXMuZ2V0SWRlKCk7XG5cbiAgICBpZiAodHlwZW9mIHR5cGVzY3JpcHQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICB0eXBlc2NyaXB0ID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IHR5cGVzY3JpcHQgY29uZmlncz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAodHlwZXNjcmlwdCkgYXdhaXQgdGhpcy5nZXRUeXBlc2NyaXB0KCk7XG5cbiAgICBpZiAodHlwZW9mIGRvY2tlciA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIGRvY2tlciA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwiZG9ja2VyXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IGRvY2tlciBjb25maWdzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuXG4gICAgaWYgKGRvY2tlcikgYXdhaXQgdGhpcy5nZXREb2NrZXIoKTtcbiAgICBpZiAodHlwZW9mIGF1dG9tYXRpb24gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBhdXRvbWF0aW9uID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJhdXRvbWF0aW9uXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IGF1dG9tYXRpb24gY29uZmlncz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAoYXV0b21hdGlvbikgYXdhaXQgdGhpcy5nZXRBdXRvbWF0aW9uKCk7XG5cbiAgICBpZiAodHlwZW9mIHN0eWxlcyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHN0eWxlcyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwic3R5bGVzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IHN0eWxlcz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAoc3R5bGVzKSBhd2FpdCB0aGlzLmdldFN0eWxlcygpO1xuXG4gICAgaWYgKHR5cGVvZiBkb2NzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgZG9jcyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwiZG9jc1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCBkb2NzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmIChkb2NzKSBhd2FpdCB0aGlzLmdldERvY3MoKTtcbiAgICBpZiAodHlwZW9mIHdvcmtmbG93cyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHdvcmtmbG93cyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwid29ya2Zsb3dzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IHdvcmtmbG93cz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAod29ya2Zsb3dzKSBhd2FpdCB0aGlzLmdldFdvcmtmbG93cygpO1xuICAgIGlmICh0eXBlb2YgdGVtcGxhdGVzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgdGVtcGxhdGVzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJ0ZW1wbGF0ZXNcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgdGVtcGxhdGVzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmICh0ZW1wbGF0ZXMpIGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGVzKCk7XG4gICAgaWYgKHR5cGVvZiBwa2cgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBwa2cgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInBrZ1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIHVwZGF0ZSB5b3VyIHBhY2thZ2UuanNvbiBzY3JpcHRzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmIChwa2cpIGF3YWl0IHRoaXMudXBkYXRlUGFja2FnZVNjcmlwcygpO1xuXG4gICAgaWYgKHR5cGVvZiB0ZXN0cyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHRlc3RzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJwa2dcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byB1cGRhdGUgeW91ciB0ZXN0IGNvbmZpZ3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKHRlc3RzKSBhd2FpdCB0aGlzLmdldFRlc3RzKCk7XG5cbiAgICBpZiAodHlwZW9mIGRlcGVuZGVuY2llcyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIGRlcGVuZGVuY2llcyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwicGtnXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gdXBkYXRlIGRldiBkZXBlbmRlbmNpZXM/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKGRlcGVuZGVuY2llcykgYXdhaXQgdGhpcy51cGRhdGVEZXBlbmRlbmNpZXMoKTtcbiAgfVxufVxuIl19
|
|
507
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXNjcmlwdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL3VwZGF0ZS1zY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXJDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGFBQWEsQ0FBQztBQUdyQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUVwQixNQUFNLE9BQU8sR0FDWCxnRUFBZ0UsQ0FBQztBQUVuRSxNQUFNLE9BQU8sR0FBRztJQUNkLFNBQVMsRUFBRTtRQUNULHNDQUFzQztRQUN0QywyQ0FBMkM7UUFDM0MscUJBQXFCO0tBQ3RCO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsdUNBQXVDO1FBQ3ZDLHNDQUFzQztRQUN0QywwQ0FBMEM7UUFDMUMsOEJBQThCO1FBQzlCLDJDQUEyQztRQUMzQyx1Q0FBdUM7UUFDdkMsc0NBQXNDO0tBQ3ZDO0lBQ0QsR0FBRyxFQUFFO1FBQ0gsMkNBQTJDO1FBQzNDLHVDQUF1QztRQUN2Qyw0Q0FBNEM7UUFDNUMsMENBQTBDO1FBQzFDLHNDQUFzQztRQUN0QywwQ0FBMEM7UUFDMUMsK0NBQStDO1FBQy9DLG1EQUFtRDtRQUNuRCxnREFBZ0Q7UUFDaEQsMENBQTBDO1FBQzFDLHlDQUF5QztRQUN6QywrQ0FBK0M7UUFDL0MscUNBQXFDO1FBQ3JDLDRDQUE0QztRQUM1QyxnREFBZ0Q7S0FDakQ7SUFDRCxJQUFJLEVBQUU7UUFDSixvQ0FBb0M7UUFDcEMscUNBQXFDO1FBQ3JDLHNDQUFzQztR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Q0FBQztRQUVqQyxJQUFJLE9BQU8sWUFBWSxLQUFLLFdBQVc7WUFDckMsWUFBWSxHQUFHLE1BQU0sU0FBUyxDQUFDLGVBQWUsQ0FDNUMsS0FBSyxFQUNMLHlDQUF5QyxFQUN6QyxJQUFJLENBQ0wsQ0FBQztRQUNKLElBQUksWUFBWTtZQUFFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZFwiO1xuaW1wb3J0IHsgQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldFBhY2thZ2UsXG4gIEh0dHBDbGllbnQsXG4gIHBhdGNoRmlsZSxcbiAgcGF0Y2hTdHJpbmcsXG4gIHJ1bkNvbW1hbmQsXG4gIHNldFBhY2thZ2VBdHRyaWJ1dGUsXG4gIFNldHVwU2NyaXB0S2V5LFxuICBUb2tlbnMsXG4gIHdyaXRlRmlsZSxcbn0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyBMb2dnaW5nQ29uZmlnIH0gZnJvbSBcIi4uLy4uL291dHB1dFwiO1xuaW1wb3J0IHsgRGVmYXVsdENvbW1hbmRWYWx1ZXMgfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCB7IFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi9pbnB1dFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuXG5jb25zdCBiYXNlVXJsID1cbiAgXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGVjYWYtdHMvdHMtd29ya3NwYWNlL21hc3RlclwiO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICB0ZW1wbGF0ZXM6IFtcbiAgICBcIi5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZFwiLFxuICAgIFwiLmdpdGh1Yi9JU1NVRV9URU1QTEFURS9mZWF0dXJlX3JlcXVlc3QubWRcIixcbiAgICBcIi5naXRodWIvRlVORElORy55bWxcIixcbiAgXSxcbiAgd29ya2Zsb3dzOiBbXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9jb2RlcWwtYW5hbHlzaXMueW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9qZXN0LWNvdmVyYWdlLnlhbWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL25vZGVqcy1idWlsZC1wcm9kLnlhbWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL3BhZ2VzLnlhbWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL3B1Ymxpc2gtb24tcmVsZWFzZS55YW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLW9uLXRhZy55YW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9zbnlrLWFuYWx5c2lzLnlhbWxcIixcbiAgXSxcbiAgaWRlOiBbXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9BbGwgVGVzdHMucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvYnVpbGQucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvYnVpbGRfcHJvZC5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9jb3ZlcmFnZS5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9kb2NzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2RyYXdpbmdzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2ZsYXNoLWZvcndhcmQucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvSW50ZWdyYXRpb25fVGVzdHMucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvQnVuZGxpbmdfVGVzdHMucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvbGludC1maXgucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvcmVsZWFzZS5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy90ZXN0X2NpcmN1bGFyLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL3VtbC5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9Vbml0IFRlc3RzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL3VwZGF0ZS1zY3JpcHRzLnJ1bi54bWxcIixcbiAgXSxcbiAgZG9jczogW1xuICAgIFwid29ya2RvY3MvdHV0b3JpYWxzL0NvbnRyaWJ1dGluZy5tZFwiLFxuICAgIFwid29ya2RvY3MvdHV0b3JpYWxzL0RvY3VtZW50YXRpb24ubWRcIixcbiAgICBcIndvcmtkb2NzL3R1dG9yaWFscy9Gb3IgRGV2ZWxvcGVycy5tZFwiLFxuICAgIFwid29ya2RvY3MvMi1CYWRnZXMubWRcIixcbiAgICBcIndvcmtkb2NzL2pzZG9jcy5qc29uXCIsXG4gICAgXCJ3b3JrZG9jcy9yZWFkbWUtbWQuanNvblwiLFxuICBdLFxuICBzdHlsZXM6IFtcIi5wcmV0dGllcnJjXCIsIFwiZXNsaW50LmNvbmZpZy5qc1wiXSxcbiAgc2NyaXB0czogW1xuICAgIFwiYmluL3VwZGF0ZS1zY3JpcHRzLmNqc1wiLFxuICAgIFwiYmluL3RhZy1yZWxlYXNlLmNqc1wiLFxuICAgIFwiYmluL2J1aWxkLXNjcmlwdHMuY2pzXCIsXG4gIF0sXG4gIHRlc3RzOiBbXCJqZXN0LmNvbmZpZy50c1wiLCBcIndvcmtkb2NzL3JlcG9ydHMvamVzdC5jb3ZlcmFnZS5jb25maWcudHNcIl0sXG4gIHR5cGVzY3JpcHQ6IFtcInRzY29uZmlnLmpzb25cIl0sXG4gIGRvY2tlcjogW1wiRG9ja2VyZmlsZVwiXSxcbiAgYXV0b21hdGlvbjogW1xuICAgIFwid29ya2RvY3MvY29uZmx1ZW5jZS9Db250aW51b3VzIEludGVncmF0aW9uLURlcGxveW1lbnQvR2l0SHViLm1kXCIsXG4gICAgXCJ3b3JrZG9jcy9jb25mbHVlbmNlL0NvbnRpbnVvdXMgSW50ZWdyYXRpb24tRGVwbG95bWVudC9KaXJhLm1kXCIsXG4gICAgXCJ3b3JrZG9jcy9jb25mbHVlbmNlL0NvbnRpbnVvdXMgSW50ZWdyYXRpb24tRGVwbG95bWVudC9UZWFtcy5tZFwiLFxuICBdLFxufTtcblxuY29uc3QgYXJnenogPSB7XG4gIC8vIGluaXQgYXR0cmlidXRlc1xuICBib290OiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIG9yZzoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2hvcnQ6IFwib1wiLFxuICB9LFxuICBuYW1lOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzaG9ydDogXCJuXCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxuICBhdXRob3I6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNob3J0OiBcImFcIixcbiAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gIH0sXG4gIC8vIHVwZGF0ZSBhdHRyaWJ1dGVzXG4gIGFsbDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBsaWNlbnNlOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBtZXNzYWdlOiBcIlBpY2sgdGhlIGxpY2Vuc2VcIixcbiAgfSxcbiAgc2NyaXB0czoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBzdHlsZXM6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgZG9jczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBpZGU6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgd29ya2Zsb3dzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIHRlbXBsYXRlczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICB0eXBlc2NyaXB0OiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIGRvY2tlcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBwa2c6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgZGVwZW5kZW5jaWVzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIHRlc3RzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIGF1dG9tYXRpb246IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbn07XG5cbi8qKlxuICogQGNsYXNzIFRlbXBsYXRlU3luY1xuICogQGV4dGVuZHMge0NvbW1hbmR9XG4gKiBAY2F0ZWdvcnkgc2NyaXB0c1xuICogQGRlc2NyaXB0aW9uIEEgY29tbWFuZC1saW5lIHRvb2wgZm9yIHN5bmNocm9uaXppbmcgcHJvamVjdCB0ZW1wbGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGRvd25sb2FkIGFuZCB1cGRhdGUgdmFyaW91cyBwcm9qZWN0IGZpbGVzIGFuZCBjb25maWd1cmF0aW9ucyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuXG4gKiBJdCBzdXBwb3J0cyB1cGRhdGluZyBsaWNlbnNlcywgSURFIGNvbmZpZ3VyYXRpb25zLCBzY3JpcHRzLCBzdHlsZXMsIGRvY3VtZW50YXRpb24sIHdvcmtmbG93cywgYW5kIHRlbXBsYXRlcy5cbiAqXG4gKiBAcGFyYW0ge0NvbW1hbmRPcHRpb25zfSBhcmdzIC0gVGhlIGNvbW1hbmQgb3B0aW9ucyBmb3IgVGVtcGxhdGVTeW5jXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZVN5bmMgZXh0ZW5kcyBDb21tYW5kPENvbW1hbmRPcHRpb25zPHR5cGVvZiBhcmd6ej4sIHZvaWQ+IHtcbiAgcHJpdmF0ZSByZXBsYWNlbWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlRlbXBsYXRlU3luY1wiLCBhcmd6eik7XG4gIH1cblxuICBwcml2YXRlIGxvYWRWYWx1ZXNGcm9tUGFja2FnZSgpIHtcbiAgICBjb25zdCBwID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBhdXRob3IgPSBnZXRQYWNrYWdlKHAsIFwiYXV0aG9yXCIpIGFzIHN0cmluZztcbiAgICBjb25zdCBzY29wZWROYW1lID0gZ2V0UGFja2FnZShwLCBcIm5hbWVcIik7XG4gICAgbGV0IG5hbWU6IHN0cmluZyA9IHNjb3BlZE5hbWUgYXMgc3RyaW5nO1xuICAgIGxldCBvcmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAobmFtZS5zdGFydHNXaXRoKFwiQFwiKSkge1xuICAgICAgY29uc3Qgc3BsaXQgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgICAgIG5hbWUgPSBzcGxpdFsxXTtcbiAgICAgIG9yZyA9IHNwbGl0WzBdLnJlcGxhY2UoXCJAXCIsIFwiXCIpO1xuICAgIH1cbiAgICBbXCJUaWFnbyBWZW5jZXNsYXVcIiwgXCJUaWFnb1ZlbmNlc2xhdVwiLCBcIiR7YXV0aG9yfVwiXS5mb3JFYWNoKFxuICAgICAgKGVsKSA9PiAodGhpcy5yZXBsYWNlbWVudHNbZWxdID0gYXV0aG9yKVxuICAgICk7XG4gICAgW1wiVFMtV29ya3NwYWNlXCIsIFwidHMtd29ya3NwYWNlXCIsIFwiJHtuYW1lfVwiXS5mb3JFYWNoKFxuICAgICAgKGVsKSA9PiAodGhpcy5yZXBsYWNlbWVudHNbZWxdID0gbmFtZSlcbiAgICApO1xuICAgIFtcImRlY2FmLXRzXCIsIFwiJHtvcmd9XCJdLmZvckVhY2goXG4gICAgICAoZWwpID0+ICh0aGlzLnJlcGxhY2VtZW50c1tlbF0gPSAob3JnIGFzIHN0cmluZykgfHwgJ1wiXCInKVxuICAgICk7XG4gICAgdGhpcy5yZXBsYWNlbWVudHNbXCIke29yZ19vcl9vd25lcn1cIl0gPSBvcmcgfHwgbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGZpbGVzIGZvciBhIHNwZWNpZmljIG9wdGlvbiBjYXRlZ29yeS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgZG93bmxvYWRzIGFsbCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBvcHRpb24ga2V5IGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSByZXByZXNlbnRpbmcgdGhlIG9wdGlvbiBjYXRlZ29yeSB0byBkb3dubG9hZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzcGVjaWZpZWQgb3B0aW9uIGtleSBpcyBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIGRvd25sb2FkT3B0aW9uKGtleToga2V5b2YgdHlwZW9mIG9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIShrZXkgaW4gb3B0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgT3B0aW9uIFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIG9wdGlvbnNgKTtcbiAgICB9XG4gICAgY29uc3QgZmlsZXMgPSBvcHRpb25zW2tleSBhcyBrZXlvZiB0eXBlb2Ygb3B0aW9uc107XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYERvd25sb2FkaW5nICR7ZmlsZX1gKTtcblxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCBIdHRwQ2xpZW50LmRvd25sb2FkRmlsZShgJHtiYXNlVXJsfS8ke2ZpbGV9YCk7XG4gICAgICBkYXRhID0gcGF0Y2hTdHJpbmcoZGF0YSwgdGhpcy5yZXBsYWNlbWVudHMpO1xuICAgICAgd3JpdGVGaWxlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBmaWxlKSwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgYW5kIHNldHMgdXAgdGhlIHNwZWNpZmllZCBsaWNlbnNlLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBkb3dubG9hZHMgdGhlIGNob3NlbiBsaWNlbnNlIGZpbGUsIHNhdmVzIGl0IHRvIHRoZSBwcm9qZWN0LCBhbmQgdXBkYXRlcyB0aGUgcGFja2FnZS5qc29uIGxpY2Vuc2UgZmllbGQuXG4gICAqIEBwYXJhbSB7XCJNSVRcIiB8IFwiR1BMXCIgfCBcIkFwYWNoZVwiIHwgXCJMR1BMXCIgfCBcIkFHUExcIn0gbGljZW5zZSAtIFRoZSBsaWNlbnNlIHRvIGRvd25sb2FkIGFuZCBzZXQgdXBcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBnZXRMaWNlbnNlKGxpY2Vuc2U6IFwiTUlUXCIgfCBcIkdQTFwiIHwgXCJBcGFjaGVcIiB8IFwiTEdQTFwiIHwgXCJBR1BMXCIpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBEb3dubG9hZGluZyAke2xpY2Vuc2V9IGxpY2Vuc2VgKTtcbiAgICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS93b3JrZG9jcy9saWNlbnNlcy8ke2xpY2Vuc2V9Lm1kYDtcbiAgICBsZXQgZGF0YSA9IGF3YWl0IEh0dHBDbGllbnQuZG93bmxvYWRGaWxlKHVybCk7XG4gICAgZGF0YSA9IHBhdGNoU3RyaW5nKGRhdGEsIHRoaXMucmVwbGFjZW1lbnRzKTtcbiAgICB3cml0ZUZpbGUocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiTElDRU5TRS5tZFwiKSwgZGF0YSk7XG4gICAgc2V0UGFja2FnZUF0dHJpYnV0ZShcImxpY2Vuc2VcIiwgbGljZW5zZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBJREUgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBnZXRJZGUoKSB7XG4gICAgZnMubWtkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcIi5pZGVhXCIsIFwicnVuQ29uZmlndXJhdGlvbnNcIiksIHtcbiAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLmRvd25sb2FkT3B0aW9uKFwiaWRlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGUgbnBtIHNjcmlwdHNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBnZXRTY3JpcHRzKCkge1xuICAgIGF3YWl0IHRoaXMuZG93bmxvYWRPcHRpb24oXCJzY3JpcHRzXCIpO1xuICAgIHRoaXMubG9nLmluZm8oXCJwbGVhc2UgcmUtcnVuIHRoZSBjb21tYW5kXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIHN0eWxlIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0U3R5bGVzID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcInN0eWxlc1wiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyB0ZW1wbGF0ZSBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXRUZW1wbGF0ZXMgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwidGVtcGxhdGVzXCIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIHdvcmtmbG93IGNvbmZpZ3VyYXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0V29ya2Zsb3dzID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcIndvcmtmbG93c1wiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBkb2N1bWVudGF0aW9uIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldERvY3MgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwiZG9jc1wiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyB0eXBlc2NyaXB0IGNvbmZpZyBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXRUeXBlc2NyaXB0ID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcInR5cGVzY3JpcHRcIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgYXV0b21hdGlvbiBkb2N1bWVudGF0aW9uIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldEF1dG9tYXRpb24gPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwiYXV0b21hdGlvblwiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBhdXRvbWF0aW9uIGRvY3VtZW50YXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0VGVzdHMgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwidGVzdHNcIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgZG9ja2VyIGltYWdlIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldERvY2tlciA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJkb2NrZXJcIik7XG5cbiAgYXN5bmMgaW5pdFBhY2thZ2UocGtnTmFtZTogc3RyaW5nLCBhdXRob3I6IHN0cmluZywgbGljZW5zZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBrZyA9IGdldFBhY2thZ2UoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGRlbGV0ZSBwa2dbU2V0dXBTY3JpcHRLZXldO1xuICAgICAgcGtnLm5hbWUgPSBwa2dOYW1lO1xuICAgICAgcGtnLnZlcnNpb24gPSBcIjAuMC4xXCI7XG4gICAgICBwa2cuYXV0aG9yID0gYXV0aG9yO1xuICAgICAgcGtnLmxpY2Vuc2UgPSBsaWNlbnNlO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhcInBhY2thZ2UuanNvblwiLCBKU09OLnN0cmluZ2lmeShwa2csIG51bGwsIDIpKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpeGluZyBwYWNrYWdlLmpzb246ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVQYWNrYWdlU2NyaXBzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFBrZyA9IEpTT04ucGFyc2UoXG4gICAgICAgIGF3YWl0IEh0dHBDbGllbnQuZG93bmxvYWRGaWxlKGAke2Jhc2VVcmx9L3BhY2thZ2UuanNvbmApXG4gICAgICApO1xuICAgICAgY29uc3QgeyBzY3JpcHRzIH0gPSBvcmlnaW5hbFBrZztcblxuICAgICAgY29uc3QgcGtnOiB0eXBlb2Ygb3JpZ2luYWxQa2cgPSBnZXRQYWNrYWdlKCkgYXMge1xuICAgICAgICBzY3JpcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgfTtcbiAgICAgIE9iamVjdC5rZXlzKHBrZy5zY3JpcHRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSBpbiBzY3JpcHRzKSB7XG4gICAgICAgICAgY29uc3QgcmVwbGFjZWQgPSBwYXRjaFN0cmluZyhzY3JpcHRzW2tleV0sIHRoaXMucmVwbGFjZW1lbnRzKTtcbiAgICAgICAgICBpZiAocmVwbGFjZWQgIT09IHNjcmlwdHNba2V5XSkge1xuICAgICAgICAgICAgcGtnLnNjcmlwdHNba2V5XSA9IHJlcGxhY2VkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHBrZ1tcImV4cG9ydHNcIl1bXCJyZXF1aXJlXCJdID0gb3JpZ2luYWxQa2dbXCJleHBvcnRzXCJdW1wicmVxdWlyZVwiXTtcbiAgICAgIHBrZ1tcImV4cG9ydHNcIl1bXCJpbXBvcnRcIl0gPSBvcmlnaW5hbFBrZ1tcImV4cG9ydHNcIl1bXCJpbXBvcnRcIl07XG4gICAgICBwa2dbXCJ0eXBlc1wiXSA9IG9yaWdpbmFsUGtnW1widHlwZXNcIl07XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXCJwYWNrYWdlLmpzb25cIiwgSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBmaXhpbmcgcGFja2FnZS5qc29uIHNjcmlwdHM6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVUb2tlbkZpbGVzKCkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmNyZWF0ZVRva2VuRmlsZXMpO1xuICAgIGNvbnN0IGdpdFRva2VuID0gYXdhaXQgVXNlcklucHV0Lmluc2lzdEZvclRleHQoXG4gICAgICBcInRva2VuXCIsXG4gICAgICBcInBsZWFzZSBpbnB1dCB5b3VyIGdpdGh1YiB0b2tlblwiLFxuICAgICAgKHJlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiAhIXJlcy5tYXRjaCgvXmdocF9bMC05YS16QS1aXXszNn0kL2cpO1xuICAgICAgfVxuICAgICk7XG4gICAgT2JqZWN0LnZhbHVlcyhUb2tlbnMpLmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgc3RhdHVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN0YXR1cyA9IGZzLmV4aXN0c1N5bmModG9rZW4pO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIGxvZy5pbmZvKGBUb2tlbiBmaWxlICR7dG9rZW59IG5vdCBmb3VuZC4gQ3JlYXRpbmcgYSBuZXcgb25lLi4uYCk7XG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0b2tlbiwgdG9rZW4gPT09IFwiLnRva2VuXCIgPyBnaXRUb2tlbiA6IFwiXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModG9rZW4sIHRva2VuID09PSBcIi50b2tlblwiID8gZ2l0VG9rZW4gOiBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGNyZWF0aW5nIHRva2VuIGZpbGUgJHt0b2tlbn06ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldE9yZygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IG9yZyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tUZXh0KFxuICAgICAgXCJPcmdhbml6YXRpb25cIixcbiAgICAgIFwiRW50ZXIgdGhlIG9yZ2FuaXphdGlvbiBuYW1lICh3aWxsIGJlIHVzZWQgdG8gc2NvcGUgeW91ciBucG0gcHJvamVjdC4gbGVhdmUgYmxhbmsgdG8gY3JlYXRlIGEgdW5zY29wZWQgcHJvamVjdCk6XCJcbiAgICApO1xuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICBcIkNvbmZpcm0gb3JnYW5pemF0aW9uXCIsXG4gICAgICBcIklzIHRoaXMgb3JnYW5pemF0aW9uIGNvcnJlY3Q/XCIsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmV0dXJuIHRoaXMuZ2V0T3JnKCk7XG5cbiAgICByZXR1cm4gb3JnO1xuICB9XG5cbiAgYXN5bmMgYXVkaXRGaXgoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoXCJucG0gYXVkaXQgZml4IC0tZm9yY2VcIikucHJvbWlzZTtcbiAgfVxuXG4gIHBhdGNoRmlsZXMoKSB7XG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICAuLi5mc1xuICAgICAgICAucmVhZGRpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwic3JjXCIpLCB7XG4gICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0ZpbGUoKSlcbiAgICAgICAgLm1hcCgoZW50cnkpID0+IHBhdGguam9pbihlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKSksXG4gICAgICAuLi5mc1xuICAgICAgICAucmVhZGRpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwid29ya2RvY3NcIiksIHtcbiAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRmlsZSgpICYmIGVudHJ5Lm5hbWUuZW5kc1dpdGgoXCIubWRcIikpXG4gICAgICAgIC5tYXAoKGVudHJ5KSA9PiBwYXRoLmpvaW4oZW50cnkucGFyZW50UGF0aCwgZW50cnkubmFtZSkpLFxuICAgICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiLmdpdGxhYi1jaS55bWxcIiksXG4gICAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJ3b3JrZG9jc1wiLCBcImpzZG9jcy5qc29uXCIpLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIHBhdGNoRmlsZShmaWxlIGFzIHN0cmluZywgdGhpcy5yZXBsYWNlbWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURlcGVuZGVuY2llcygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxQa2cgPSBKU09OLnBhcnNlKFxuICAgICAgICBhd2FpdCBIdHRwQ2xpZW50LmRvd25sb2FkRmlsZShgJHtiYXNlVXJsfS9wYWNrYWdlLmpzb25gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgZGV2RGVwZW5kZW5jaWVzIH0gPSBvcmlnaW5hbFBrZztcblxuICAgICAgY29uc3QgcGtnOiB0eXBlb2Ygb3JpZ2luYWxQa2cgPSBnZXRQYWNrYWdlKCkgYXMge1xuICAgICAgICBzY3JpcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgfTtcbiAgICAgIE9iamVjdC5rZXlzKHBrZy5zY3JpcHRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSBpbiBkZXZEZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBjb25zdCByZXBsYWNlZCA9IGRldkRlcGVuZGVuY2llc1trZXldO1xuICAgICAgICAgIGlmIChyZXBsYWNlZCAhPT0gZGV2RGVwZW5kZW5jaWVzW2tleV0pIHtcbiAgICAgICAgICAgIChwa2cgYXMgYW55KVtcImRldkRlcGVuZGVuY2llc1wiXSA9XG4gICAgICAgICAgICAgIChwa2cgYXMgYW55KVtcImRldkRlcGVuZGVuY2llc1wiXSB8fCB7fTtcbiAgICAgICAgICAgIChwa2cgYXMgYW55KVtcImRldkRlcGVuZGVuY2llc1wiXVtrZXldID0gcmVwbGFjZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhcInBhY2thZ2UuanNvblwiLCBKU09OLnN0cmluZ2lmeShwa2csIG51bGwsIDIpKTtcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoXCJucG0gaW5zdGFsbFwiKS5wcm9taXNlO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZml4aW5nIHBhY2thZ2UuanNvbiBkZXBlbmRlbmNpZXM6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJ1bnMgdGhlIHRlbXBsYXRlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBvcmNoZXN0cmF0ZXMgdGhlIGRvd25sb2FkaW5nIG9mIHZhcmlvdXMgcHJvamVjdCBjb21wb25lbnRzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7UGFyc2VBcmdzUmVzdWx0fSBhcmdzIC0gVGhlIHBhcnNlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBUIGFzIFRlbXBsYXRlU3luY1xuICAgKiAgIHBhcnRpY2lwYW50IEwgYXMgZ2V0TGljZW5zZVxuICAgKiAgIHBhcnRpY2lwYW50IEkgYXMgZ2V0SWRlXG4gICAqICAgcGFydGljaXBhbnQgUyBhcyBnZXRTY3JpcHRzXG4gICAqICAgcGFydGljaXBhbnQgU3QgYXMgZ2V0U3R5bGVzXG4gICAqICAgcGFydGljaXBhbnQgRCBhcyBnZXREb2NzXG4gICAqICAgcGFydGljaXBhbnQgVyBhcyBnZXRXb3JrZmxvd3NcbiAgICogICBwYXJ0aWNpcGFudCBUZSBhcyBnZXRUZW1wbGF0ZXNcbiAgICogICBULT4+VDogUGFyc2UgYXJndW1lbnRzXG4gICAqICAgYWx0IGFsbCBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5UOiBTZXQgYWxsIGNvbXBvbmVudCBmbGFncyB0byB0cnVlXG4gICAqICAgZW5kXG4gICAqICAgYWx0IGxpY2Vuc2UgaXMgc3BlY2lmaWVkXG4gICAqICAgICBULT4+TDogZ2V0TGljZW5zZShsaWNlbnNlKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBpZGUgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+STogZ2V0SWRlKClcbiAgICogICBlbmRcbiAgICogICBhbHQgc2NyaXB0cyBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5TOiBnZXRTY3JpcHRzKClcbiAgICogICBlbmRcbiAgICogICBhbHQgc3R5bGVzIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+PlN0OiBnZXRTdHlsZXMoKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBkb2NzIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+PkQ6IGdldERvY3MoKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCB3b3JrZmxvd3MgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+VzogZ2V0V29ya2Zsb3dzKClcbiAgICogICBlbmRcbiAgICogICBhbHQgdGVtcGxhdGVzIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+PlRlOiBnZXRUZW1wbGF0ZXMoKVxuICAgKiAgIGVuZFxuICAgKi9cbiAgYXN5bmMgcnVuKFxuICAgIGFyZ3M6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiB0eXBlb2YgYXJnenpdOiB1bmtub3duIH1cbiAgKSB7XG4gICAgbGV0IHsgbGljZW5zZSB9ID0gYXJncztcbiAgICBjb25zdCB7IGJvb3QgfSA9IGFyZ3M7XG4gICAgbGV0IHtcbiAgICAgIGFsbCxcbiAgICAgIHNjcmlwdHMsXG4gICAgICBzdHlsZXMsXG4gICAgICBkb2NzLFxuICAgICAgaWRlLFxuICAgICAgd29ya2Zsb3dzLFxuICAgICAgdGVtcGxhdGVzLFxuICAgICAgZG9ja2VyLFxuICAgICAgdHlwZXNjcmlwdCxcbiAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgIHRlc3RzLFxuICAgICAgYXV0b21hdGlvbixcbiAgICAgIHBrZyxcbiAgICB9ID0gYXJncztcbiAgICBpZiAoXG4gICAgICBzY3JpcHRzIHx8XG4gICAgICBzdHlsZXMgfHxcbiAgICAgIGRvY3MgfHxcbiAgICAgIGlkZSB8fFxuICAgICAgd29ya2Zsb3dzIHx8XG4gICAgICB0ZW1wbGF0ZXMgfHxcbiAgICAgIGRvY2tlciB8fFxuICAgICAgdHlwZXNjcmlwdCB8fFxuICAgICAgYXV0b21hdGlvbiB8fFxuICAgICAgZGVwZW5kZW5jaWVzIHx8XG4gICAgICB0ZXN0cyB8fFxuICAgICAgcGtnXG4gICAgKVxuICAgICAgYWxsID0gZmFsc2U7XG5cbiAgICBpZiAoYm9vdCkge1xuICAgICAgY29uc3Qgb3JnID0gYXdhaXQgdGhpcy5nZXRPcmcoKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgICAgXCJQcm9qZWN0IG5hbWVcIixcbiAgICAgICAgXCJFbnRlciB0aGUgcHJvamVjdCBuYW1lOlwiLFxuICAgICAgICAocmVzOiBzdHJpbmcpID0+IHJlcy5sZW5ndGggPiAxXG4gICAgICApO1xuICAgICAgY29uc3QgYXV0aG9yID0gYXdhaXQgVXNlcklucHV0Lmluc2lzdEZvclRleHQoXG4gICAgICAgIFwiQXV0aG9yXCIsXG4gICAgICAgIFwiRW50ZXIgdGhlIGF1dGhvciBuYW1lOlwiLFxuICAgICAgICAocmVzOiBzdHJpbmcpID0+IHJlcy5sZW5ndGggPiAxXG4gICAgICApO1xuICAgICAgY29uc3QgcGtnTmFtZSA9IG9yZyA/IGBAJHtvcmd9LyR7bmFtZX1gIDogbmFtZTtcblxuICAgICAgYXdhaXQgdGhpcy5pbml0UGFja2FnZShwa2dOYW1lLCBhdXRob3IsIGxpY2Vuc2UgYXMgc3RyaW5nKTtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlVG9rZW5GaWxlcygpO1xuICAgICAgYXdhaXQgdGhpcy5hdWRpdEZpeCgpO1xuICAgICAgdGhpcy5wYXRjaEZpbGVzKCk7XG4gICAgfVxuXG4gICAgaWYgKGFsbCkge1xuICAgICAgc2NyaXB0cyA9IGZhbHNlO1xuICAgICAgc3R5bGVzID0gdHJ1ZTtcbiAgICAgIGRvY3MgPSB0cnVlO1xuICAgICAgaWRlID0gdHJ1ZTtcbiAgICAgIHdvcmtmbG93cyA9IHRydWU7XG4gICAgICB0ZW1wbGF0ZXMgPSB0cnVlO1xuICAgICAgZG9ja2VyID0gdHJ1ZTtcbiAgICAgIHR5cGVzY3JpcHQgPSB0cnVlO1xuICAgICAgcGtnID0gdHJ1ZTtcbiAgICAgIGRlcGVuZGVuY2llcyA9IHRydWU7XG4gICAgICB0ZXN0cyA9IHRydWU7XG4gICAgICBhdXRvbWF0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzY3JpcHRzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgc2NyaXB0cyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwic2NyaXB0c1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCBzY3JpcHRzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuXG4gICAgaWYgKHNjcmlwdHMpIGF3YWl0IHRoaXMuZ2V0U2NyaXB0cygpO1xuXG4gICAgdGhpcy5sb2FkVmFsdWVzRnJvbVBhY2thZ2UoKTtcbiAgICBpZiAoIWFsbCAmJiB0eXBlb2YgbGljZW5zZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJsaWNlbnNlXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gc2V0IGEgbGljZW5zZT9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIGlmIChjb25maXJtYXRpb24pXG4gICAgICAgIGxpY2Vuc2UgPSBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgICAgICBcImxpY2Vuc2VcIixcbiAgICAgICAgICBcIkVudGVyIHRoZSBkZXNpcmVkIExpY2Vuc2UgKE1JVHxHUEx8QXBhY2hlfExHUEx8QUdQTCk6XCIsXG4gICAgICAgICAgKHZhbCkgPT4gISF2YWwgJiYgISF2YWwubWF0Y2goL14oTUlUfEdQTHxBcGFjaGV8TEdQTHxBR1BMKSQvZylcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsaWNlbnNlICE9PSBcInVuZGVmaW5lZFwiKVxuICAgICAgYXdhaXQgdGhpcy5nZXRMaWNlbnNlKFxuICAgICAgICBsaWNlbnNlIGFzIFwiTUlUXCIgfCBcIkdQTFwiIHwgXCJBcGFjaGVcIiB8IFwiTEdQTFwiIHwgXCJBR1BMXCJcbiAgICAgICk7XG5cbiAgICBpZiAodHlwZW9mIGlkZSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIGlkZSA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwiaWRlXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IGlkZSBjb25maWdzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuXG4gICAgaWYgKGlkZSkgYXdhaXQgdGhpcy5nZXRJZGUoKTtcblxuICAgIGlmICh0eXBlb2YgdHlwZXNjcmlwdCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHR5cGVzY3JpcHQgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInR5cGVzY3JpcHRcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgdHlwZXNjcmlwdCBjb25maWdzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmICh0eXBlc2NyaXB0KSBhd2FpdCB0aGlzLmdldFR5cGVzY3JpcHQoKTtcblxuICAgIGlmICh0eXBlb2YgZG9ja2VyID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgZG9ja2VyID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJkb2NrZXJcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgZG9ja2VyIGNvbmZpZ3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICBpZiAoZG9ja2VyKSBhd2FpdCB0aGlzLmdldERvY2tlcigpO1xuICAgIGlmICh0eXBlb2YgYXV0b21hdGlvbiA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIGF1dG9tYXRpb24gPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImF1dG9tYXRpb25cIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgYXV0b21hdGlvbiBjb25maWdzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmIChhdXRvbWF0aW9uKSBhd2FpdCB0aGlzLmdldEF1dG9tYXRpb24oKTtcblxuICAgIGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgc3R5bGVzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJzdHlsZXNcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgc3R5bGVzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmIChzdHlsZXMpIGF3YWl0IHRoaXMuZ2V0U3R5bGVzKCk7XG5cbiAgICBpZiAodHlwZW9mIGRvY3MgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBkb2NzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJkb2NzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IGRvY3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKGRvY3MpIGF3YWl0IHRoaXMuZ2V0RG9jcygpO1xuICAgIGlmICh0eXBlb2Ygd29ya2Zsb3dzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgd29ya2Zsb3dzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJ3b3JrZmxvd3NcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgd29ya2Zsb3dzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmICh3b3JrZmxvd3MpIGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dzKCk7XG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZXMgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICB0ZW1wbGF0ZXMgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInRlbXBsYXRlc1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCB0ZW1wbGF0ZXM/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKHRlbXBsYXRlcykgYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcbiAgICBpZiAodHlwZW9mIHBrZyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHBrZyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwicGtnXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gdXBkYXRlIHlvdXIgcGFja2FnZS5qc29uIHNjcmlwdHM/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKHBrZykgYXdhaXQgdGhpcy51cGRhdGVQYWNrYWdlU2NyaXBzKCk7XG5cbiAgICBpZiAodHlwZW9mIHRlc3RzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgdGVzdHMgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInBrZ1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIHVwZGF0ZSB5b3VyIHRlc3QgY29uZmlncz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAodGVzdHMpIGF3YWl0IHRoaXMuZ2V0VGVzdHMoKTtcblxuICAgIGlmICh0eXBlb2YgZGVwZW5kZW5jaWVzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgZGVwZW5kZW5jaWVzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJwa2dcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byB1cGRhdGUgZGV2IGRlcGVuZGVuY2llcz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAoZGVwZW5kZW5jaWVzKSBhd2FpdCB0aGlzLnVwZGF0ZURlcGVuZGVuY2llcygpO1xuICB9XG59XG4iXX0=
|