@cdktn/commons 0.23.2 → 0.23.3
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/build/checkpoint.js +23 -14
- package/build/config.d.ts.map +1 -1
- package/build/config.js +23 -13
- package/build/config.test.js +19 -10
- package/build/debug.js +30 -21
- package/build/errors.d.ts.map +1 -1
- package/build/errors.js +20 -10
- package/build/gradle.js +7 -8
- package/build/logging.d.ts +0 -2
- package/build/logging.d.ts.map +1 -1
- package/build/logging.js +18 -8
- package/build/provider-schema.js +3 -4
- package/build/terraform-module.js +2 -3
- package/build/util.d.ts +31 -2
- package/build/util.d.ts.map +1 -1
- package/build/util.js +95 -51
- package/build/util.test.d.ts +2 -0
- package/build/util.test.d.ts.map +1 -0
- package/build/util.test.js +86 -0
- package/package.json +3 -3
package/build/util.d.ts
CHANGED
|
@@ -1,12 +1,41 @@
|
|
|
1
|
-
/// <reference types="ambient" />
|
|
2
|
-
/// <reference types="node/child_process" />
|
|
3
1
|
import { SpawnOptions } from "child_process";
|
|
4
2
|
import { IManifest } from "cdktn";
|
|
3
|
+
/**
|
|
4
|
+
* Spawn a child process and mirror its stdout to the parent's console.
|
|
5
|
+
*
|
|
6
|
+
* Thin wrapper over {@link exec} for callers that want stdout chunks echoed via `console.log` as they arrive. Stderr is
|
|
7
|
+
* captured silently and surfaced on the thrown Error's `.stderr` / `toString()` if the process exits non-zero.
|
|
8
|
+
*
|
|
9
|
+
* @param program the executable to spawn
|
|
10
|
+
* @param args arguments passed to the executable
|
|
11
|
+
* @param options spawn options; `noColor: true` strips ANSI escapes from captured output
|
|
12
|
+
* @returns the full concatenated stdout as a string on success
|
|
13
|
+
* @throws an Error with `.stderr` and `.stdout` properties (see {@link attachProcessOutput}) on non-zero exit
|
|
14
|
+
*/
|
|
5
15
|
export declare function shell(program: string, args?: string[], options?: SpawnOptions & {
|
|
6
16
|
noColor?: boolean;
|
|
7
17
|
}): Promise<string>;
|
|
8
18
|
export declare function withTempDir(dirname: string, closure: () => Promise<void>): Promise<void>;
|
|
9
19
|
export declare function mkdtemp(closure: (dir: string) => Promise<void>): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Spawn a child process and resolve with its stdout, or reject with a decorated Error on non-zero exit.
|
|
22
|
+
*
|
|
23
|
+
* Captured stdout and stderr are always tee'd to `processLoggerDebug` / `processLoggerError`. The optional `stdout` and
|
|
24
|
+
* `stderr` callbacks receive each sanitized chunk as it arrives — useful for streaming output to the terminal.
|
|
25
|
+
* Passing a `stderr` callback (even a no-op) suppresses the default pass-through to `process.stderr` for that stream.
|
|
26
|
+
*
|
|
27
|
+
* On non-zero exit, rejects with an {@link ExecError} carrying `.stderr` / `.stdout` and a `toString()` that includes
|
|
28
|
+
* the captured body (see {@link attachProcessOutput}); `.message` itself stays as the headline.
|
|
29
|
+
*
|
|
30
|
+
* @param command the executable to spawn
|
|
31
|
+
* @param args arguments passed to the executable
|
|
32
|
+
* @param options spawn options; `noColor: true` strips ANSI escapes from captured output (auto-detected from CLI flags
|
|
33
|
+
* / `FORCE_COLOR=0` when omitted)
|
|
34
|
+
* @param stdout optional per-chunk callback for sanitized stdout
|
|
35
|
+
* @param stderr optional per-chunk callback for sanitized stderr; passing a callback suppresses default terminal echo
|
|
36
|
+
* @param sendToStderr when false, suppresses both the stderr callback invocation and the default terminal echo
|
|
37
|
+
* @returns the full concatenated stdout as a string on success
|
|
38
|
+
*/
|
|
10
39
|
export declare const exec: (command: string, args: string[], options: SpawnOptions & {
|
|
11
40
|
noColor?: boolean;
|
|
12
41
|
}, stdout?: (chunk: string) => any, stderr?: (chunk: string | Uint8Array) => any, sendToStderr?: boolean) => Promise<string>;
|
package/build/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAO7C,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAmC5C;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,mBAkBnD;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,iBAa7B;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,iBAOpE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,MAAM,EACf,MAAM,MAAM,EAAE,EACd,SAAS,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAC7C,SAAS,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,EAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,KAAK,GAAG,EAC5C,sBAAmB,KAClB,OAAO,CAAC,MAAM,CAgEhB,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASzE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,SAAS,CAAC,CAI5D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,qBAAa,SAAU,SAAQ,KAAK;IAGzB,UAAU,CAAC,EAAE,MAAM;gBAD1B,OAAO,CAAC,EAAE,MAAM,EACT,UAAU,CAAC,EAAE,MAAM,YAAA;CAM7B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EACf,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,iBAUvC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C"}
|
package/build/util.js
CHANGED
|
@@ -15,18 +15,37 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
|
28
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
39
|
+
exports.HttpError = exports.exec = void 0;
|
|
40
|
+
exports.shell = shell;
|
|
41
|
+
exports.withTempDir = withTempDir;
|
|
42
|
+
exports.mkdtemp = mkdtemp;
|
|
43
|
+
exports.readCDKTFVersion = readCDKTFVersion;
|
|
44
|
+
exports.readCDKTFManifest = readCDKTFManifest;
|
|
45
|
+
exports.downcaseFirst = downcaseFirst;
|
|
46
|
+
exports.downloadFile = downloadFile;
|
|
47
|
+
exports.ensureAllSettledBeforeThrowing = ensureAllSettledBeforeThrowing;
|
|
48
|
+
exports.hasNoColorFlagOrEnv = hasNoColorFlagOrEnv;
|
|
30
49
|
const cross_spawn_1 = require("cross-spawn");
|
|
31
50
|
const fs = __importStar(require("fs-extra"));
|
|
32
51
|
const follow_redirects_1 = require("follow-redirects");
|
|
@@ -36,40 +55,54 @@ const logging_1 = require("./logging");
|
|
|
36
55
|
const cdktn_1 = require("cdktn");
|
|
37
56
|
const config = __importStar(require("./config"));
|
|
38
57
|
const strip_ansi_1 = __importDefault(require("strip-ansi"));
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (stdout.length > 0) {
|
|
64
|
-
e.stdout = stdout.join("");
|
|
65
|
-
if (options.noColor) {
|
|
66
|
-
e.stdout = (0, strip_ansi_1.default)(e.stdout);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
throw e;
|
|
58
|
+
/**
|
|
59
|
+
* Attach captured stderr/stdout to a process-failure Error.
|
|
60
|
+
*
|
|
61
|
+
* The body text is exposed two ways:
|
|
62
|
+
* - `.stderr` and `.stdout` properties, for callers that render the streams separately (e.g. synth-stack's chalk
|
|
63
|
+
* formatting).
|
|
64
|
+
* - A `toString()` override that appends the body after the headline, so callers using `${e}` interpolation surface the
|
|
65
|
+
* underlying tool output without double-printing for the property-reading callers.
|
|
66
|
+
*
|
|
67
|
+
* The Error's `.message` is left untouched as the headline only.
|
|
68
|
+
*
|
|
69
|
+
* @param error the Error to decorate (its `.message` becomes the toString headline)
|
|
70
|
+
* @param stderrText captured stderr, may be empty
|
|
71
|
+
* @param stdoutText captured stdout, may be empty
|
|
72
|
+
*/
|
|
73
|
+
function attachProcessOutput(error, stderrText, stdoutText) {
|
|
74
|
+
error.stderr = stderrText;
|
|
75
|
+
error.stdout = stdoutText;
|
|
76
|
+
const body = [stderrText, stdoutText].filter(Boolean).join("\n");
|
|
77
|
+
if (body) {
|
|
78
|
+
const headline = error.message;
|
|
79
|
+
error.toString = () => `Error: ${headline}\n${body}`;
|
|
70
80
|
}
|
|
71
81
|
}
|
|
72
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Spawn a child process and mirror its stdout to the parent's console.
|
|
84
|
+
*
|
|
85
|
+
* Thin wrapper over {@link exec} for callers that want stdout chunks echoed via `console.log` as they arrive. Stderr is
|
|
86
|
+
* captured silently and surfaced on the thrown Error's `.stderr` / `toString()` if the process exits non-zero.
|
|
87
|
+
*
|
|
88
|
+
* @param program the executable to spawn
|
|
89
|
+
* @param args arguments passed to the executable
|
|
90
|
+
* @param options spawn options; `noColor: true` strips ANSI escapes from captured output
|
|
91
|
+
* @returns the full concatenated stdout as a string on success
|
|
92
|
+
* @throws an Error with `.stderr` and `.stdout` properties (see {@link attachProcessOutput}) on non-zero exit
|
|
93
|
+
*/
|
|
94
|
+
async function shell(program, args = [], options = {}) {
|
|
95
|
+
return (0, exports.exec)(program, args, options, (chunk) => {
|
|
96
|
+
const sanitizedChunk = options.noColor
|
|
97
|
+
? (0, strip_ansi_1.default)(chunk.toLocaleString())
|
|
98
|
+
: chunk.toLocaleString();
|
|
99
|
+
console.log(sanitizedChunk);
|
|
100
|
+
}, () => {
|
|
101
|
+
// No-op: passing a callback (vs. undefined) suppresses exec()'s default
|
|
102
|
+
// pass-through to process.stderr; inner exec() still collects it for
|
|
103
|
+
// the thrown error's .stderr field.
|
|
104
|
+
});
|
|
105
|
+
}
|
|
73
106
|
async function withTempDir(dirname, closure) {
|
|
74
107
|
const prevdir = process.cwd();
|
|
75
108
|
const parent = await fs.mkdtemp(path.join(os.tmpdir(), "cdktf."));
|
|
@@ -84,7 +117,6 @@ async function withTempDir(dirname, closure) {
|
|
|
84
117
|
await fs.remove(parent);
|
|
85
118
|
}
|
|
86
119
|
}
|
|
87
|
-
exports.withTempDir = withTempDir;
|
|
88
120
|
async function mkdtemp(closure) {
|
|
89
121
|
const workdir = await fs.mkdtemp(path.join(os.tmpdir(), "cdktf."));
|
|
90
122
|
try {
|
|
@@ -94,7 +126,25 @@ async function mkdtemp(closure) {
|
|
|
94
126
|
await fs.remove(workdir);
|
|
95
127
|
}
|
|
96
128
|
}
|
|
97
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Spawn a child process and resolve with its stdout, or reject with a decorated Error on non-zero exit.
|
|
131
|
+
*
|
|
132
|
+
* Captured stdout and stderr are always tee'd to `processLoggerDebug` / `processLoggerError`. The optional `stdout` and
|
|
133
|
+
* `stderr` callbacks receive each sanitized chunk as it arrives — useful for streaming output to the terminal.
|
|
134
|
+
* Passing a `stderr` callback (even a no-op) suppresses the default pass-through to `process.stderr` for that stream.
|
|
135
|
+
*
|
|
136
|
+
* On non-zero exit, rejects with an {@link ExecError} carrying `.stderr` / `.stdout` and a `toString()` that includes
|
|
137
|
+
* the captured body (see {@link attachProcessOutput}); `.message` itself stays as the headline.
|
|
138
|
+
*
|
|
139
|
+
* @param command the executable to spawn
|
|
140
|
+
* @param args arguments passed to the executable
|
|
141
|
+
* @param options spawn options; `noColor: true` strips ANSI escapes from captured output (auto-detected from CLI flags
|
|
142
|
+
* / `FORCE_COLOR=0` when omitted)
|
|
143
|
+
* @param stdout optional per-chunk callback for sanitized stdout
|
|
144
|
+
* @param stderr optional per-chunk callback for sanitized stderr; passing a callback suppresses default terminal echo
|
|
145
|
+
* @param sendToStderr when false, suppresses both the stderr callback invocation and the default terminal echo
|
|
146
|
+
* @returns the full concatenated stdout as a string on success
|
|
147
|
+
*/
|
|
98
148
|
const exec = async (command, args, options, stdout, stderr, sendToStderr = true) => {
|
|
99
149
|
// if options.noColor is not set, checking the flags & environment if it should be set
|
|
100
150
|
// This is required for collectDebugInformation() which does not have knowledge about flags
|
|
@@ -152,8 +202,8 @@ const exec = async (command, args, options, stdout, stderr, sendToStderr = true)
|
|
|
152
202
|
child.once("error", (err) => ko(err));
|
|
153
203
|
child.once("close", (code) => {
|
|
154
204
|
if (code !== 0) {
|
|
155
|
-
const error = new Error(
|
|
156
|
-
error
|
|
205
|
+
const error = new Error(`${command} ${args.join(" ")} exited with code ${code}`);
|
|
206
|
+
attachProcessOutput(error, err.join(""), out.join(""));
|
|
157
207
|
return ko(error);
|
|
158
208
|
}
|
|
159
209
|
return ok(out.join(""));
|
|
@@ -170,13 +220,11 @@ async function readCDKTFVersion(outputDir) {
|
|
|
170
220
|
}
|
|
171
221
|
return "";
|
|
172
222
|
}
|
|
173
|
-
exports.readCDKTFVersion = readCDKTFVersion;
|
|
174
223
|
async function readCDKTFManifest() {
|
|
175
224
|
const { output } = config.readConfigSync();
|
|
176
225
|
const json = await fs.readFile(path.join(output, cdktn_1.Manifest.fileName));
|
|
177
226
|
return JSON.parse(json.toString());
|
|
178
227
|
}
|
|
179
|
-
exports.readCDKTFManifest = readCDKTFManifest;
|
|
180
228
|
/**
|
|
181
229
|
* Downcase the first character in a string.
|
|
182
230
|
*
|
|
@@ -188,7 +236,6 @@ function downcaseFirst(str) {
|
|
|
188
236
|
}
|
|
189
237
|
return `${str[0].toLocaleLowerCase()}${str.slice(1)}`;
|
|
190
238
|
}
|
|
191
|
-
exports.downcaseFirst = downcaseFirst;
|
|
192
239
|
class HttpError extends Error {
|
|
193
240
|
constructor(message, statusCode) {
|
|
194
241
|
super(message); // 'Error' breaks prototype chain here
|
|
@@ -222,7 +269,6 @@ async function downloadFile(url, targetFilename) {
|
|
|
222
269
|
request.end();
|
|
223
270
|
});
|
|
224
271
|
}
|
|
225
|
-
exports.downloadFile = downloadFile;
|
|
226
272
|
/**
|
|
227
273
|
* Awaits a promise and makes sure it's error (if any) is only thrown after all other promises are settled
|
|
228
274
|
* if the promise does not throw an error, the other promises won't be awaited
|
|
@@ -240,7 +286,6 @@ async function ensureAllSettledBeforeThrowing(p, promises) {
|
|
|
240
286
|
throw e;
|
|
241
287
|
}
|
|
242
288
|
}
|
|
243
|
-
exports.ensureAllSettledBeforeThrowing = ensureAllSettledBeforeThrowing;
|
|
244
289
|
/**
|
|
245
290
|
* returns true if --no-color is passed as CLI flag or the env var FORCE_COLOR is set to "0"
|
|
246
291
|
* Used for cases where we can't pass down the noColor flag (e.g. when collecting debug information from the environment)
|
|
@@ -249,7 +294,6 @@ exports.ensureAllSettledBeforeThrowing = ensureAllSettledBeforeThrowing;
|
|
|
249
294
|
function hasNoColorFlagOrEnv() {
|
|
250
295
|
return hasFlag("no-color") || process.env.FORCE_COLOR === "0";
|
|
251
296
|
}
|
|
252
|
-
exports.hasNoColorFlagOrEnv = hasNoColorFlagOrEnv;
|
|
253
297
|
// From: https://github.com/sindresorhus/has-flag/blob/main/index.js
|
|
254
298
|
// as used in https://github.com/chalk/chalk
|
|
255
299
|
function hasFlag(flag) {
|
|
@@ -259,4 +303,4 @@ function hasFlag(flag) {
|
|
|
259
303
|
return (position !== -1 &&
|
|
260
304
|
(terminatorPosition === -1 || position < terminatorPosition));
|
|
261
305
|
}
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsNkNBQW9DO0FBQ3BDLDZDQUErQjtBQUMvQix1REFBK0M7QUFDL0MsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix1Q0FBbUU7QUFDbkUsaUNBQTRDO0FBQzVDLGlEQUFtQztBQUNuQyw0REFBbUM7QUFFNUIsS0FBSyxVQUFVLEtBQUssQ0FDekIsT0FBZSxFQUNmLE9BQWlCLEVBQUUsRUFDbkIsVUFBZ0QsRUFBRTtJQUVsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBdUIsQ0FBQztJQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQ25DLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxJQUFBLFlBQUksRUFDZixPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQ2hCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPO2dCQUNwQyxDQUFDLENBQUMsSUFBQSxvQkFBUyxFQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxFQUNELENBQUMsS0FBMEIsRUFBRSxFQUFFO1lBQzdCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPO2dCQUNwQyxDQUFDLENBQUMsSUFBQSxvQkFBUyxFQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsSUFBSSxD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QUNmLFFBQXNDO0lBRXRDLElBQUksQ0FBQztRQUNILE1BQU0sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCwwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsQ0FBQztJQUNWLENBQUM7QUFDSCxDQUFDO0FBWkQsd0VBWUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CO0lBQ2pDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQztBQUNoRSxDQUFDO0FBRkQsa0RBRUM7QUFFRCxvRUFBb0U7QUFDcEUsNENBQTRDO0FBQzVDLFNBQVMsT0FBTyxDQUFDLElBQVk7SUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUNMLFFBQVEsS0FBSyxDQUFDLENBQUM7UUFDZixDQUFDLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxDQUM3RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwiY3Jvc3Mtc3Bhd25cIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHsgaHR0cHMsIGh0dHAgfSBmcm9tIFwiZm9sbG93LXJlZGlyZWN0c1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwcm9jZXNzTG9nZ2VyRXJyb3IsIHByb2Nlc3NMb2dnZXJEZWJ1ZyB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB7IElNYW5pZmVzdCwgTWFuaWZlc3QgfSBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSBcInN0cmlwLWFuc2lcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoZWxsKFxuICBwcm9ncmFtOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM6IFNwYXduT3B0aW9ucyAmIHsgbm9Db2xvcj86IGJvb2xlYW4gfSA9IHt9LFxuKSB7XG4gIGNvbnN0IHN0ZGVyciA9IG5ldyBBcnJheTxzdHJpbmcgfCBVaW50OEFycmF5PigpO1xuICBjb25zdCBzdGRvdXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBleGVjKFxuICAgICAgcHJvZ3JhbSxcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRpb25zLFxuICAgICAgKGNodW5rOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgICA/IHN0cmlwQW5zaShjaHVuay50b0xvY2FsZVN0cmluZygpKVxuICAgICAgICAgIDogY2h1bmsudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgc3Rkb3V0LnB1c2goc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICBjb25zb2xlLmxvZyhzYW5pdGl6ZWRDaHVuayk7XG4gICAgICB9LFxuICAgICAgKGNodW5rOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZENodW5rID0gb3B0aW9ucy5ub0NvbG9yXG4gICAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgICA6IGNodW5rLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIHN0ZGVyci5wdXNoKHNhbml0aXplZENodW5rKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgaWYgKHN0ZGVyci5sZW5ndGggPiAwKSB7XG4gICAgICBlLnN0ZGVyciA9IHN0ZGVyci5tYXAoKGNodW5rKSA9PiBjaHVuay50b1N0cmluZygpKS5qb2luKFwiXCIpO1xuICAgICAgaWYgKG9wdGlvbnMubm9Db2xvcikge1xuICAgICAgICBlLnN0ZGVyciA9IHN0cmlwQW5zaShlLnN0ZGVycik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGRvdXQubGVuZ3RoID4gMCkge1xuICAgICAgZS5zdGRvdXQgPSBzdGRvdXQuam9pbihcIlwiKTtcbiAgICAgIGlmIChvcHRpb25zLm5vQ29sb3IpIHtcbiAgICAgICAgZS5zdGRvdXQgPSBzdHJpcEFuc2koZS5zdGRvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVGVtcERpcihcbiAgZGlybmFtZTogc3RyaW5nLFxuICBjbG9zdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuKSB7XG4gIGNvbnN0IHByZXZkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBwYXJlbnQgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjZGt0Zi5cIikpO1xuICBjb25zdCB3b3JrZGlyID0gcGF0aC5qb2luKHBhcmVudCwgZGlybmFtZSk7XG4gIGF3YWl0IGZzLm1rZGlycCh3b3JrZGlyKTtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHdvcmtkaXIpO1xuICAgIGF3YWl0IGNsb3N1cmUoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHByZXZkaXIpO1xuICAgIGF3YWl0IGZzLnJlbW92ZShwYXJlbnQpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBta2R0ZW1wKGNsb3N1cmU6IChkaXI6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPikge1xuICBjb25zdCB3b3JrZGlyID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY2RrdGYuXCIpKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbG9zdXJlKHdvcmtkaXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJlbW92ZSh3b3JrZGlyKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZXhlYyA9IGFzeW5jIChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogU3Bhd25PcHRpb25zICYgeyBub0NvbG9yPzogYm9vbGVhbiB9LFxuICBzdGRvdXQ/OiAoY2h1bms6IHN0cmluZykgPT4gYW55LFxuICBzdGRlcnI/OiAoY2h1bms6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IGFueSxcbiAgc2VuZFRvU3RkZXJyID0gdHJ1ZSxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIC8vIGlmIG9wdGlvbnMubm9Db2xvciBpcyBub3Qgc2V0LCBjaGVja2luZyB0aGUgZmxhZ3MgJiBlbnZpcm9ubWVudCBpZiBpdCBzaG91bGQgYmUgc2V0XG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvbGxlY3REZWJ1Z0luZm9ybWF0aW9uKCkgd2hpY2ggZG9lcyBub3QgaGF2ZSBrbm93bGVkZ2UgYWJvdXQgZmxhZ3NcbiAgaWYgKHR5cGVvZiBvcHRpb25zLm5vQ29sb3IgIT09IFwiYm9vbGVhblwiICYmIGhhc05vQ29sb3JGbGFnT3JFbnYoKSkge1xuICAgIG9wdGlvbnMubm9Db2xvciA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBrbykgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywgb3B0aW9ucyk7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBjb25zdCBlcnIgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGlmIChzdGRvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgICA/IHN0cmlwQW5zaShjaHVuay50b0xvY2FsZVN0cmluZygpKVxuICAgICAgICAgIDogY2h1bmsudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgcHJvY2Vzc0xvZ2dlckRlYnVnKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgb3V0LnB1c2goc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICBzdGRvdXQoc2FuaXRpemVkQ2h1bmspO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkLnN0ZG91dD8ub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZENodW5rID0gb3B0aW9ucy5ub0NvbG9yXG4gICAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgICA6IGNodW5rLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIHByb2Nlc3NMb2dnZXJEZWJ1ZyhzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIG91dC5wdXNoKHNhbml0aXplZENodW5rKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RkZXJyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkLnN0ZGVycj8ub24oXCJkYXRhXCIsIChjaHVuazogc3RyaW5nIHwgVWludDhBcnJheSkgPT4ge1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRDaHVuayA9IG9wdGlvbnMubm9Db2xvclxuICAgICAgICAgID8gc3RyaXBBbnNpKGNodW5rLnRvTG9jYWxlU3RyaW5nKCkpXG4gICAgICAgICAgOiBjaHVuay50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICBwcm9jZXNzTG9nZ2VyRXJyb3Ioc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICBpZiAoc2VuZFRvU3RkZXJyKSB7XG4gICAgICAgICAgc3RkZXJyKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlcnIucHVzaChzYW5pdGl6ZWRDaHVuayk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGQuc3RkZXJyPy5vbihcImRhdGFcIiwgKGNodW5rOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZENodW5rID0gb3B0aW9ucy5ub0NvbG9yXG4gICAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgICA6IGNodW5rLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIHByb2Nlc3NMb2dnZXJFcnJvcihzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIGlmIChzZW5kVG9TdGRlcnIpIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgZXJyLnB1c2goc2FuaXRpemVkQ2h1bmspO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNoaWxkLm9uY2UoXCJlcnJvclwiLCAoZXJyOiBhbnkpID0+IGtvKGVycikpO1xuICAgIGNoaWxkLm9uY2UoXCJjbG9zZVwiLCAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgbm9uLXplcm8gZXhpdCBjb2RlICR7Y29kZX1gKTtcbiAgICAgICAgKGVycm9yIGFzIGFueSkuc3RkZXJyID0gZXJyLm1hcCgoY2h1bmspID0+IGNodW5rLnRvU3RyaW5nKCkpLmpvaW4oXCJcIik7XG4gICAgICAgIHJldHVybiBrbyhlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2sob3V0LmpvaW4oXCJcIikpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ0RLVEZWZXJzaW9uKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgb3V0cHV0RmlsZSA9IHBhdGguam9pbihvdXRwdXREaXIsIFwiY2RrLnRmLmpzb25cIik7XG4gIGlmIChmcy5leGlzdHNTeW5jKG91dHB1dEZpbGUpKSB7XG4gICAgY29uc3Qgb3V0cHV0SlNPTiA9IGZzLnJlYWRGaWxlU3luYyhvdXRwdXRGaWxlLCBcInV0ZjhcIik7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uob3V0cHV0SlNPTik7XG4gICAgcmV0dXJuIGRhdGFbXCIvL1wiXS5tZXRhZGF0YS52ZXJzaW9uO1xuICB9XG5cbiAgcmV0dXJuIFwiXCI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ0RLVEZNYW5pZmVzdCgpOiBQcm9taXNlPElNYW5pZmVzdD4ge1xuICBjb25zdCB7IG91dHB1dCB9ID0gY29uZmlnLnJlYWRDb25maWdTeW5jKCk7XG4gIGNvbnN0IGpzb24gPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ob3V0cHV0LCBNYW5pZmVzdC5maWxlTmFtZSkpO1xuICByZXR1cm4gSlNPTi5wYXJzZShqc29uLnRvU3RyaW5nKCkpIGFzIElNYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBEb3duY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBiZSBwcm9jZXNzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3duY2FzZUZpcnN0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0ciA9PT0gXCJcIikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIGAke3N0clswXS50b0xvY2FsZUxvd2VyQ2FzZSgpfSR7c3RyLnNsaWNlKDEpfWA7XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgcHVibGljIHN0YXR1c0NvZGU/OiBudW1iZXIsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyAnRXJyb3InIGJyZWFrcyBwcm90b3R5cGUgY2hhaW4gaGVyZVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7IC8vIHJlc3RvcmUgcHJvdG90eXBlIGNoYWluXG4gICAgLy8gc2VlOiBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9yZWxlYXNlLW5vdGVzL3R5cGVzY3JpcHQtMi0yLmh0bWwjc3VwcG9ydC1mb3ItbmV3dGFyZ2V0XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZShcbiAgdXJsOiBzdHJpbmcsXG4gIHRhcmdldEZpbGVuYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gaWYgdGhlIHR5cGUgaXMgaW5mZXJyZWQgdG8gYmUgXCJodHRwfGh0dHBzXCIgY2FsbGluZyAuZ2V0KCkgaXMgbm90IHBvc3NpYmxlXG4gIC8vIGJlY2F1c2UgdGhlIG9wdGlvbnMgcGFyYW1ldGVyICh3aGljaCB3ZSBkb24ndCB1c2UgYW55d2F5KSBmb3IgZ2V0IGlzXG4gIC8vIG5vdCBjb21wYXRpYmxlIGJldHdlZW4gaHR0cCBhbmQgaHR0cHMgLT4gc28gd2UgdHJlYXQgaXQgYXMgaHR0cFxuICBjb25zdCBjbGllbnQgPSAodXJsLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpID8gaHR0cCA6IGh0dHBzKSBhcyB0eXBlb2YgaHR0cDtcbiAgY29uc3QgZmlsZSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKHRhcmdldEZpbGVuYW1lKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvaywga28pID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50LmdldCh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBrbyhcbiAgICAgICAgICBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBnZXQgJyR7dXJsfScgKCR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0pYCxcbiAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzcG9uc2UucGlwZShmaWxlKTtcbiAgICB9KTtcblxuICAgIGZpbGUub24oXCJmaW5pc2hcIiwgKCkgPT4gb2soKSk7XG5cbiAgICByZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGZzLnVubGluayh0YXJnZXRGaWxlbmFtZSwgKCkgPT4ga28oZXJyKSk7XG4gICAgfSk7XG5cbiAgICBmaWxlLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgZnMudW5saW5rKHRhcmdldEZpbGVuYW1lLCAoKSA9PiBrbyhlcnIpKTtcbiAgICB9KTtcblxuICAgIHJlcXVlc3QuZW5kKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEF3YWl0cyBhIHByb21pc2UgYW5kIG1ha2VzIHN1cmUgaXQncyBlcnJvciAoaWYgYW55KSBpcyBvbmx5IHRocm93biBhZnRlciBhbGwgb3RoZXIgcHJvbWlzZXMgYXJlIHNldHRsZWRcbiAqIGlmIHRoZSBwcm9taXNlIGRvZXMgbm90IHRocm93IGFuIGVycm9yLCB0aGUgb3RoZXIgcHJvbWlzZXMgd29uJ3QgYmUgYXdhaXRlZFxuICogQHBhcmFtIHAgcHJvbWlzZSB0byBhd2FpdFxuICogQHBhcmFtIHByb21pc2VzIHByb21pc2VzIHRvIGF3YWl0IHRvIGJlIGFsbCBzZXR0bGVkIGlmIHAgZmFpbGVkIGJlZm9yZSB0aHJvd2luZyBlcnJvciB0aGF0IHAgZmFpbGVkIHdpdGhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFsbFNldHRsZWRCZWZvcmVUaHJvd2luZyhcbiAgcDogUHJvbWlzZTxhbnk+LFxuICBwcm9taXNlczogKFByb21pc2U8YW55PiB8IHVuZGVmaW5lZClbXSxcbikge1xuICB0cnkge1xuICAgIGF3YWl0IHA7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBpZiBhbiBlcnJvciBoYXBwZW5lZCwgd2Ugc3RpbGwgbmVlZCB0byB3YWl0IGZvciBhbGwgb3RoZXIgcHJvbWlzZXMgdGhhdFxuICAgIC8vIGFyZSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgdG8gY29tcGxldGUgdG8gYWxsb3cgdGhlbSB0byBwcm9wZXJseSB3cmFwIHVwXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICogcmV0dXJucyB0cnVlIGlmIC0tbm8tY29sb3IgaXMgcGFzc2VkIGFzIENMSSBmbGFnIG9yIHRoZSBlbnYgdmFyIEZPUkNFX0NPTE9SIGlzIHNldCB0byBcIjBcIlxuICogVXNlZCBmb3IgY2FzZXMgd2hlcmUgd2UgY2FuJ3QgcGFzcyBkb3duIHRoZSBub0NvbG9yIGZsYWcgKGUuZy4gd2hlbiBjb2xsZWN0aW5nIGRlYnVnIGluZm9ybWF0aW9uIGZyb20gdGhlIGVudmlyb25tZW50KVxuICogVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgYGNoYWxrYCBsaWIgd2UgdXNlIGZvciBjb2xvcmluZyBvdXRwdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc05vQ29sb3JGbGFnT3JFbnYoKTogYm9vbGVhbiB7XG4gIHJldHVybiBoYXNGbGFnKFwibm8tY29sb3JcIikgfHwgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09IFwiMFwiO1xufVxuXG4vLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2hhcy1mbGFnL2Jsb2IvbWFpbi9pbmRleC5qc1xuLy8gYXMgdXNlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGtcbmZ1bmN0aW9uIGhhc0ZsYWcoZmxhZzogc3RyaW5nKSB7XG4gIGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aChcIi1cIikgPyBcIlwiIDogZmxhZy5sZW5ndGggPT09IDEgPyBcIi1cIiA6IFwiLS1cIjtcbiAgY29uc3QgcG9zaXRpb24gPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcbiAgY29uc3QgdGVybWluYXRvclBvc2l0aW9uID0gcHJvY2Vzcy5hcmd2LmluZGV4T2YoXCItLVwiKTtcbiAgcmV0dXJuIChcbiAgICBwb3NpdGlvbiAhPT0gLTEgJiZcbiAgICAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbilcbiAgKTtcbn1cbiJdfQ==
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdEQSxzQkFxQkM7QUFFRCxrQ0FlQztBQUVELDBCQU9DO0FBOEZELDRDQVNDO0FBRUQsOENBSUM7QUFPRCxzQ0FLQztBQWFELG9DQW1DQztBQVFELHdFQVlDO0FBT0Qsa0RBRUM7QUExU0QsNkNBQW9DO0FBQ3BDLDZDQUErQjtBQUMvQix1REFBK0M7QUFDL0MsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix1Q0FBbUU7QUFDbkUsaUNBQTRDO0FBQzVDLGlEQUFtQztBQUNuQyw0REFBbUM7QUFJbkM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixLQUFZLEVBQ1osVUFBa0IsRUFDbEIsVUFBa0I7SUFFakIsS0FBbUIsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0lBQ3hDLEtBQW1CLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxLQUFLLENBQ3pCLE9BQWUsRUFDZixPQUFpQixFQUFFLEVBQ25CLFVBQWdELEVBQUU7SUFFbEQsT0FBTyxJQUFBLFlBQUksRUFDVCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQ2hCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1lBQ3BDLENBQUMsQ0FBQyxJQUFBLG9CQUFTLEVBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25DLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QixDQUFDLEVBQ0QsR0FBRyxFQUFFO1FBQ0gsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxvQ0FBb0M7SUFDdEMsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBZSxFQUNmLE9BQTRCO0lBRTVCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixNQUFNLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUM7WUFBUyxDQUFDO1FBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUsT0FBTyxDQUFDLE9BQXVDO0lBQ25FLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNJLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsT0FBZSxFQUNmLElBQWMsRUFDZCxPQUE2QyxFQUM3QyxNQUErQixFQUMvQixNQUE0QyxFQUM1QyxZQUFZLEdBQUcsSUFBSSxFQUNGLEVBQUU7SUFDbkIsc0ZBQXNGO0lBQ3RGLDJGQUEyRjtJQUMzRixJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFOztRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFBLG1CQUFLLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDaEMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQ3pDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPO29CQUNwQyxDQUFDLENBQUMsSUFBQSxvQkFBUyxFQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDbkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDM0IsSUFBQSw0QkFBa0IsRUFBQyxjQUFjLENBQUMsQ0FBQztnQkFDbkMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU87b0JBQ3BDLENBQUMsQ0FBQyxJQUFBLG9CQUFTLEVBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNuQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzQixJQUFBLDRCQUFrQixFQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQTBCLEVBQUUsRUFBRTtnQkFDdEQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU87b0JBQ3BDLENBQUMsQ0FBQyxJQUFBLG9CQUFTLEVBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNuQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzQixJQUFBLDRCQUFrQixFQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7Z0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBMEIsRUFBRSxFQUFFO2dCQUN0RCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTztvQkFDcEMsQ0FBQyxDQUFDLElBQUEsb0JBQVMsRUFBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ25DLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzNCLElBQUEsNEJBQWtCLEVBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ25DLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQ3JCLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FDeEQsQ0FBQztnQkFDRixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQXZFVyxRQUFBLElBQUksUUF1RWY7QUFFSyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsU0FBaUI7SUFDdEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdkQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFTSxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNyRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFjLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsR0FBVztJQUN2QyxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNmLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQWEsU0FBVSxTQUFRLEtBQUs7SUFDbEMsWUFDRSxPQUFnQixFQUNULFVBQW1CO1FBRTFCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHNDQUFzQztRQUYvQyxlQUFVLEdBQVYsVUFBVSxDQUFTO1FBRzFCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7UUFDN0UsNEdBQTRHO0lBQzlHLENBQUM7Q0FDRjtBQVRELDhCQVNDO0FBRU0sS0FBSyxVQUFVLFlBQVksQ0FDaEMsR0FBVyxFQUNYLGNBQXNCO0lBRXRCLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUsa0VBQWtFO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQUksQ0FBQyxDQUFDLENBQUMsd0JBQUssQ0FBZ0IsQ0FBQztJQUN6RSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQzNDLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsRUFBRSxDQUNBLElBQUksU0FBUyxDQUNYLGtCQUFrQixHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsR0FBRyxFQUNqRCxRQUFRLENBQUMsVUFBVSxDQUNwQixDQUNGLENBQUM7Z0JBQ0YsT0FBTztZQUNULENBQUM7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU5QixPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVUsRUFBRSxFQUFFO1lBQ2pDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN2QixFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSw4QkFBOEIsQ0FDbEQsQ0FBZSxFQUNmLFFBQXNDO0lBRXRDLElBQUksQ0FBQztRQUNILE1BQU0sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCwwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsQ0FBQztJQUNWLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQjtJQUNqQyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUM7QUFDaEUsQ0FBQztBQUVELG9FQUFvRTtBQUNwRSw0Q0FBNEM7QUFDNUMsU0FBUyxPQUFPLENBQUMsSUFBWTtJQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQ0wsUUFBUSxLQUFLLENBQUMsQ0FBQztRQUNmLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLGtCQUFrQixDQUFDLENBQzdELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjcm9zcy1zcGF3blwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgeyBodHRwcywgaHR0cCB9IGZyb20gXCJmb2xsb3ctcmVkaXJlY3RzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHByb2Nlc3NMb2dnZXJFcnJvciwgcHJvY2Vzc0xvZ2dlckRlYnVnIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSU1hbmlmZXN0LCBNYW5pZmVzdCB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tIFwic3RyaXAtYW5zaVwiO1xuXG50eXBlIEV4ZWNFcnJvciA9IEVycm9yICYgeyBzdGRlcnI6IHN0cmluZzsgc3Rkb3V0OiBzdHJpbmcgfTtcblxuLyoqXG4gKiBBdHRhY2ggY2FwdHVyZWQgc3RkZXJyL3N0ZG91dCB0byBhIHByb2Nlc3MtZmFpbHVyZSBFcnJvci5cbiAqXG4gKiBUaGUgYm9keSB0ZXh0IGlzIGV4cG9zZWQgdHdvIHdheXM6XG4gKiAtIGAuc3RkZXJyYCBhbmQgYC5zdGRvdXRgIHByb3BlcnRpZXMsIGZvciBjYWxsZXJzIHRoYXQgcmVuZGVyIHRoZSBzdHJlYW1zIHNlcGFyYXRlbHkgKGUuZy4gc3ludGgtc3RhY2sncyBjaGFsa1xuICogICBmb3JtYXR0aW5nKS5cbiAqIC0gQSBgdG9TdHJpbmcoKWAgb3ZlcnJpZGUgdGhhdCBhcHBlbmRzIHRoZSBib2R5IGFmdGVyIHRoZSBoZWFkbGluZSwgc28gY2FsbGVycyB1c2luZyBgJHtlfWAgaW50ZXJwb2xhdGlvbiBzdXJmYWNlIHRoZVxuICogICB1bmRlcmx5aW5nIHRvb2wgb3V0cHV0IHdpdGhvdXQgZG91YmxlLXByaW50aW5nIGZvciB0aGUgcHJvcGVydHktcmVhZGluZyBjYWxsZXJzLlxuICpcbiAqIFRoZSBFcnJvcidzIGAubWVzc2FnZWAgaXMgbGVmdCB1bnRvdWNoZWQgYXMgdGhlIGhlYWRsaW5lIG9ubHkuXG4gKlxuICogQHBhcmFtIGVycm9yIHRoZSBFcnJvciB0byBkZWNvcmF0ZSAoaXRzIGAubWVzc2FnZWAgYmVjb21lcyB0aGUgdG9TdHJpbmcgaGVhZGxpbmUpXG4gKiBAcGFyYW0gc3RkZXJyVGV4dCBjYXB0dXJlZCBzdGRlcnIsIG1heSBiZSBlbXB0eVxuICogQHBhcmFtIHN0ZG91dFRleHQgY2FwdHVyZWQgc3Rkb3V0LCBtYXkgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUHJvY2Vzc091dHB1dChcbiAgZXJyb3I6IEVycm9yLFxuICBzdGRlcnJUZXh0OiBzdHJpbmcsXG4gIHN0ZG91dFRleHQ6IHN0cmluZyxcbik6IGFzc2VydHMgZXJyb3IgaXMgRXhlY0Vycm9yIHtcbiAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3RkZXJyID0gc3RkZXJyVGV4dDtcbiAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3Rkb3V0ID0gc3Rkb3V0VGV4dDtcbiAgY29uc3QgYm9keSA9IFtzdGRlcnJUZXh0LCBzdGRvdXRUZXh0XS5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKTtcbiAgaWYgKGJvZHkpIHtcbiAgICBjb25zdCBoZWFkbGluZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgZXJyb3IudG9TdHJpbmcgPSAoKSA9PiBgRXJyb3I6ICR7aGVhZGxpbmV9XFxuJHtib2R5fWA7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGF3biBhIGNoaWxkIHByb2Nlc3MgYW5kIG1pcnJvciBpdHMgc3Rkb3V0IHRvIHRoZSBwYXJlbnQncyBjb25zb2xlLlxuICpcbiAqIFRoaW4gd3JhcHBlciBvdmVyIHtAbGluayBleGVjfSBmb3IgY2FsbGVycyB0aGF0IHdhbnQgc3Rkb3V0IGNodW5rcyBlY2hvZWQgdmlhIGBjb25zb2xlLmxvZ2AgYXMgdGhleSBhcnJpdmUuIFN0ZGVyciBpc1xuICogY2FwdHVyZWQgc2lsZW50bHkgYW5kIHN1cmZhY2VkIG9uIHRoZSB0aHJvd24gRXJyb3IncyBgLnN0ZGVycmAgLyBgdG9TdHJpbmcoKWAgaWYgdGhlIHByb2Nlc3MgZXhpdHMgbm9uLXplcm8uXG4gKlxuICogQHBhcmFtIHByb2dyYW0gdGhlIGV4ZWN1dGFibGUgdG8gc3Bhd25cbiAqIEBwYXJhbSBhcmdzIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEBwYXJhbSBvcHRpb25zIHNwYXduIG9wdGlvbnM7IGBub0NvbG9yOiB0cnVlYCBzdHJpcHMgQU5TSSBlc2NhcGVzIGZyb20gY2FwdHVyZWQgb3V0cHV0XG4gKiBAcmV0dXJucyB0aGUgZnVsbCBjb25jYXRlbmF0ZWQgc3Rkb3V0IGFzIGEgc3RyaW5nIG9uIHN1Y2Nlc3NcbiAqIEB0aHJvd3MgYW4gRXJyb3Igd2l0aCBgLnN0ZGVycmAgYW5kIGAuc3Rkb3V0YCBwcm9wZXJ0aWVzIChzZWUge0BsaW5rIGF0dGFjaFByb2Nlc3NPdXRwdXR9KSBvbiBub24temVybyBleGl0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaGVsbChcbiAgcHJvZ3JhbTogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zOiBTcGF3bk9wdGlvbnMgJiB7IG5vQ29sb3I/OiBib29sZWFuIH0gPSB7fSxcbikge1xuICByZXR1cm4gZXhlYyhcbiAgICBwcm9ncmFtLFxuICAgIGFyZ3MsXG4gICAgb3B0aW9ucyxcbiAgICAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgOiBjaHVuay50b0xvY2FsZVN0cmluZygpO1xuICAgICAgY29uc29sZS5sb2coc2FuaXRpemVkQ2h1bmspO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgLy8gTm8tb3A6IHBhc3NpbmcgYSBjYWxsYmFjayAodnMuIHVuZGVmaW5lZCkgc3VwcHJlc3NlcyBleGVjKCkncyBkZWZhdWx0XG4gICAgICAvLyBwYXNzLXRocm91Z2ggdG8gcHJvY2Vzcy5zdGRlcnI7IGlubmVyIGV4ZWMoKSBzdGlsbCBjb2xsZWN0cyBpdCBmb3JcbiAgICAgIC8vIHRoZSB0aHJvd24gZXJyb3IncyAuc3RkZXJyIGZpZWxkLlxuICAgIH0sXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVGVtcERpcihcbiAgZGlybmFtZTogc3RyaW5nLFxuICBjbG9zdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuKSB7XG4gIGNvbnN0IHByZXZkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBwYXJlbnQgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjZGt0Zi5cIikpO1xuICBjb25zdCB3b3JrZGlyID0gcGF0aC5qb2luKHBhcmVudCwgZGlybmFtZSk7XG4gIGF3YWl0IGZzLm1rZGlycCh3b3JrZGlyKTtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHdvcmtkaXIpO1xuICAgIGF3YWl0IGNsb3N1cmUoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHByZXZkaXIpO1xuICAgIGF3YWl0IGZzLnJlbW92ZShwYXJlbnQpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBta2R0ZW1wKGNsb3N1cmU6IChkaXI6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPikge1xuICBjb25zdCB3b3JrZGlyID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY2RrdGYuXCIpKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbG9zdXJlKHdvcmtkaXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJlbW92ZSh3b3JrZGlyKTtcbiAgfVxufVxuXG4vKipcbiAqIFNwYXduIGEgY2hpbGQgcHJvY2VzcyBhbmQgcmVzb2x2ZSB3aXRoIGl0cyBzdGRvdXQsIG9yIHJlamVjdCB3aXRoIGEgZGVjb3JhdGVkIEVycm9yIG9uIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQ2FwdHVyZWQgc3Rkb3V0IGFuZCBzdGRlcnIgYXJlIGFsd2F5cyB0ZWUnZCB0byBgcHJvY2Vzc0xvZ2dlckRlYnVnYCAvIGBwcm9jZXNzTG9nZ2VyRXJyb3JgLiBUaGUgb3B0aW9uYWwgYHN0ZG91dGAgYW5kXG4gKiBgc3RkZXJyYCBjYWxsYmFja3MgcmVjZWl2ZSBlYWNoIHNhbml0aXplZCBjaHVuayBhcyBpdCBhcnJpdmVzIOKAlCB1c2VmdWwgZm9yIHN0cmVhbWluZyBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsLlxuICogUGFzc2luZyBhIGBzdGRlcnJgIGNhbGxiYWNrIChldmVuIGEgbm8tb3ApIHN1cHByZXNzZXMgdGhlIGRlZmF1bHQgcGFzcy10aHJvdWdoIHRvIGBwcm9jZXNzLnN0ZGVycmAgZm9yIHRoYXQgc3RyZWFtLlxuICpcbiAqIE9uIG5vbi16ZXJvIGV4aXQsIHJlamVjdHMgd2l0aCBhbiB7QGxpbmsgRXhlY0Vycm9yfSBjYXJyeWluZyBgLnN0ZGVycmAgLyBgLnN0ZG91dGAgYW5kIGEgYHRvU3RyaW5nKClgIHRoYXQgaW5jbHVkZXNcbiAqIHRoZSBjYXB0dXJlZCBib2R5IChzZWUge0BsaW5rIGF0dGFjaFByb2Nlc3NPdXRwdXR9KTsgYC5tZXNzYWdlYCBpdHNlbGYgc3RheXMgYXMgdGhlIGhlYWRsaW5lLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIHRoZSBleGVjdXRhYmxlIHRvIHNwYXduXG4gKiBAcGFyYW0gYXJncyBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlXG4gKiBAcGFyYW0gb3B0aW9ucyBzcGF3biBvcHRpb25zOyBgbm9Db2xvcjogdHJ1ZWAgc3RyaXBzIEFOU0kgZXNjYXBlcyBmcm9tIGNhcHR1cmVkIG91dHB1dCAoYXV0by1kZXRlY3RlZCBmcm9tIENMSSBmbGFnc1xuICogIC8gYEZPUkNFX0NPTE9SPTBgIHdoZW4gb21pdHRlZClcbiAqIEBwYXJhbSBzdGRvdXQgb3B0aW9uYWwgcGVyLWNodW5rIGNhbGxiYWNrIGZvciBzYW5pdGl6ZWQgc3Rkb3V0XG4gKiBAcGFyYW0gc3RkZXJyIG9wdGlvbmFsIHBlci1jaHVuayBjYWxsYmFjayBmb3Igc2FuaXRpemVkIHN0ZGVycjsgcGFzc2luZyBhIGNhbGxiYWNrIHN1cHByZXNzZXMgZGVmYXVsdCB0ZXJtaW5hbCBlY2hvXG4gKiBAcGFyYW0gc2VuZFRvU3RkZXJyIHdoZW4gZmFsc2UsIHN1cHByZXNzZXMgYm90aCB0aGUgc3RkZXJyIGNhbGxiYWNrIGludm9jYXRpb24gYW5kIHRoZSBkZWZhdWx0IHRlcm1pbmFsIGVjaG9cbiAqIEByZXR1cm5zIHRoZSBmdWxsIGNvbmNhdGVuYXRlZCBzdGRvdXQgYXMgYSBzdHJpbmcgb24gc3VjY2Vzc1xuICovXG5leHBvcnQgY29uc3QgZXhlYyA9IGFzeW5jIChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogU3Bhd25PcHRpb25zICYgeyBub0NvbG9yPzogYm9vbGVhbiB9LFxuICBzdGRvdXQ/OiAoY2h1bms6IHN0cmluZykgPT4gYW55LFxuICBzdGRlcnI/OiAoY2h1bms6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IGFueSxcbiAgc2VuZFRvU3RkZXJyID0gdHJ1ZSxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIC8vIGlmIG9wdGlvbnMubm9Db2xvciBpcyBub3Qgc2V0LCBjaGVja2luZyB0aGUgZmxhZ3MgJiBlbnZpcm9ubWVudCBpZiBpdCBzaG91bGQgYmUgc2V0XG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvbGxlY3REZWJ1Z0luZm9ybWF0aW9uKCkgd2hpY2ggZG9lcyBub3QgaGF2ZSBrbm93bGVkZ2UgYWJvdXQgZmxhZ3NcbiAgaWYgKHR5cGVvZiBvcHRpb25zLm5vQ29sb3IgIT09IFwiYm9vbGVhblwiICYmIGhhc05vQ29sb3JGbGFnT3JFbnYoKSkge1xuICAgIG9wdGlvbnMubm9Db2xvciA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBrbykgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywgb3B0aW9ucyk7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBjb25zdCBlcnIgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGlmIChzdGRvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgICA/IHN0cmlwQW5zaShjaHVuay50b0xvY2FsZVN0cmluZygpKVxuICAgICAgICAgIDogY2h1bmsudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgcHJvY2Vzc0xvZ2dlckRlYnVnKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgb3V0LnB1c2goc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICBzdGRvdXQoc2FuaXRpemVkQ2h1bmspO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkLnN0ZG91dD8ub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZENodW5rID0gb3B0aW9ucy5ub0NvbG9yXG4gICAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgICA6IGNodW5rLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIHByb2Nlc3NMb2dnZXJEZWJ1ZyhzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIG91dC5wdXNoKHNhbml0aXplZENodW5rKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RkZXJyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkLnN0ZGVycj8ub24oXCJkYXRhXCIsIChjaHVuazogc3RyaW5nIHwgVWludDhBcnJheSkgPT4ge1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRDaHVuayA9IG9wdGlvbnMubm9Db2xvclxuICAgICAgICAgID8gc3RyaXBBbnNpKGNodW5rLnRvTG9jYWxlU3RyaW5nKCkpXG4gICAgICAgICAgOiBjaHVuay50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICBwcm9jZXNzTG9nZ2VyRXJyb3Ioc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICBpZiAoc2VuZFRvU3RkZXJyKSB7XG4gICAgICAgICAgc3RkZXJyKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlcnIucHVzaChzYW5pdGl6ZWRDaHVuayk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGQuc3RkZXJyPy5vbihcImRhdGFcIiwgKGNodW5rOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZENodW5rID0gb3B0aW9ucy5ub0NvbG9yXG4gICAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgICA6IGNodW5rLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIHByb2Nlc3NMb2dnZXJFcnJvcihzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIGlmIChzZW5kVG9TdGRlcnIpIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgZXJyLnB1c2goc2FuaXRpemVkQ2h1bmspO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNoaWxkLm9uY2UoXCJlcnJvclwiLCAoZXJyOiBhbnkpID0+IGtvKGVycikpO1xuICAgIGNoaWxkLm9uY2UoXCJjbG9zZVwiLCAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtjb21tYW5kfSAke2FyZ3Muam9pbihcIiBcIil9IGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWAsXG4gICAgICAgICk7XG4gICAgICAgIGF0dGFjaFByb2Nlc3NPdXRwdXQoZXJyb3IsIGVyci5qb2luKFwiXCIpLCBvdXQuam9pbihcIlwiKSk7XG4gICAgICAgIHJldHVybiBrbyhlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2sob3V0LmpvaW4oXCJcIikpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ0RLVEZWZXJzaW9uKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgb3V0cHV0RmlsZSA9IHBhdGguam9pbihvdXRwdXREaXIsIFwiY2RrLnRmLmpzb25cIik7XG4gIGlmIChmcy5leGlzdHNTeW5jKG91dHB1dEZpbGUpKSB7XG4gICAgY29uc3Qgb3V0cHV0SlNPTiA9IGZzLnJlYWRGaWxlU3luYyhvdXRwdXRGaWxlLCBcInV0ZjhcIik7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uob3V0cHV0SlNPTik7XG4gICAgcmV0dXJuIGRhdGFbXCIvL1wiXS5tZXRhZGF0YS52ZXJzaW9uO1xuICB9XG5cbiAgcmV0dXJuIFwiXCI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ0RLVEZNYW5pZmVzdCgpOiBQcm9taXNlPElNYW5pZmVzdD4ge1xuICBjb25zdCB7IG91dHB1dCB9ID0gY29uZmlnLnJlYWRDb25maWdTeW5jKCk7XG4gIGNvbnN0IGpzb24gPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ob3V0cHV0LCBNYW5pZmVzdC5maWxlTmFtZSkpO1xuICByZXR1cm4gSlNPTi5wYXJzZShqc29uLnRvU3RyaW5nKCkpIGFzIElNYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBEb3duY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBiZSBwcm9jZXNzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3duY2FzZUZpcnN0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0ciA9PT0gXCJcIikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIGAke3N0clswXS50b0xvY2FsZUxvd2VyQ2FzZSgpfSR7c3RyLnNsaWNlKDEpfWA7XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgcHVibGljIHN0YXR1c0NvZGU/OiBudW1iZXIsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyAnRXJyb3InIGJyZWFrcyBwcm90b3R5cGUgY2hhaW4gaGVyZVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7IC8vIHJlc3RvcmUgcHJvdG90eXBlIGNoYWluXG4gICAgLy8gc2VlOiBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9yZWxlYXNlLW5vdGVzL3R5cGVzY3JpcHQtMi0yLmh0bWwjc3VwcG9ydC1mb3ItbmV3dGFyZ2V0XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZShcbiAgdXJsOiBzdHJpbmcsXG4gIHRhcmdldEZpbGVuYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gaWYgdGhlIHR5cGUgaXMgaW5mZXJyZWQgdG8gYmUgXCJodHRwfGh0dHBzXCIgY2FsbGluZyAuZ2V0KCkgaXMgbm90IHBvc3NpYmxlXG4gIC8vIGJlY2F1c2UgdGhlIG9wdGlvbnMgcGFyYW1ldGVyICh3aGljaCB3ZSBkb24ndCB1c2UgYW55d2F5KSBmb3IgZ2V0IGlzXG4gIC8vIG5vdCBjb21wYXRpYmxlIGJldHdlZW4gaHR0cCBhbmQgaHR0cHMgLT4gc28gd2UgdHJlYXQgaXQgYXMgaHR0cFxuICBjb25zdCBjbGllbnQgPSAodXJsLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpID8gaHR0cCA6IGh0dHBzKSBhcyB0eXBlb2YgaHR0cDtcbiAgY29uc3QgZmlsZSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKHRhcmdldEZpbGVuYW1lKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvaywga28pID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50LmdldCh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBrbyhcbiAgICAgICAgICBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBnZXQgJyR7dXJsfScgKCR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0pYCxcbiAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzcG9uc2UucGlwZShmaWxlKTtcbiAgICB9KTtcblxuICAgIGZpbGUub24oXCJmaW5pc2hcIiwgKCkgPT4gb2soKSk7XG5cbiAgICByZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGZzLnVubGluayh0YXJnZXRGaWxlbmFtZSwgKCkgPT4ga28oZXJyKSk7XG4gICAgfSk7XG5cbiAgICBmaWxlLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgZnMudW5saW5rKHRhcmdldEZpbGVuYW1lLCAoKSA9PiBrbyhlcnIpKTtcbiAgICB9KTtcblxuICAgIHJlcXVlc3QuZW5kKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEF3YWl0cyBhIHByb21pc2UgYW5kIG1ha2VzIHN1cmUgaXQncyBlcnJvciAoaWYgYW55KSBpcyBvbmx5IHRocm93biBhZnRlciBhbGwgb3RoZXIgcHJvbWlzZXMgYXJlIHNldHRsZWRcbiAqIGlmIHRoZSBwcm9taXNlIGRvZXMgbm90IHRocm93IGFuIGVycm9yLCB0aGUgb3RoZXIgcHJvbWlzZXMgd29uJ3QgYmUgYXdhaXRlZFxuICogQHBhcmFtIHAgcHJvbWlzZSB0byBhd2FpdFxuICogQHBhcmFtIHByb21pc2VzIHByb21pc2VzIHRvIGF3YWl0IHRvIGJlIGFsbCBzZXR0bGVkIGlmIHAgZmFpbGVkIGJlZm9yZSB0aHJvd2luZyBlcnJvciB0aGF0IHAgZmFpbGVkIHdpdGhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFsbFNldHRsZWRCZWZvcmVUaHJvd2luZyhcbiAgcDogUHJvbWlzZTxhbnk+LFxuICBwcm9taXNlczogKFByb21pc2U8YW55PiB8IHVuZGVmaW5lZClbXSxcbikge1xuICB0cnkge1xuICAgIGF3YWl0IHA7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBpZiBhbiBlcnJvciBoYXBwZW5lZCwgd2Ugc3RpbGwgbmVlZCB0byB3YWl0IGZvciBhbGwgb3RoZXIgcHJvbWlzZXMgdGhhdFxuICAgIC8vIGFyZSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgdG8gY29tcGxldGUgdG8gYWxsb3cgdGhlbSB0byBwcm9wZXJseSB3cmFwIHVwXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICogcmV0dXJucyB0cnVlIGlmIC0tbm8tY29sb3IgaXMgcGFzc2VkIGFzIENMSSBmbGFnIG9yIHRoZSBlbnYgdmFyIEZPUkNFX0NPTE9SIGlzIHNldCB0byBcIjBcIlxuICogVXNlZCBmb3IgY2FzZXMgd2hlcmUgd2UgY2FuJ3QgcGFzcyBkb3duIHRoZSBub0NvbG9yIGZsYWcgKGUuZy4gd2hlbiBjb2xsZWN0aW5nIGRlYnVnIGluZm9ybWF0aW9uIGZyb20gdGhlIGVudmlyb25tZW50KVxuICogVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgYGNoYWxrYCBsaWIgd2UgdXNlIGZvciBjb2xvcmluZyBvdXRwdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc05vQ29sb3JGbGFnT3JFbnYoKTogYm9vbGVhbiB7XG4gIHJldHVybiBoYXNGbGFnKFwibm8tY29sb3JcIikgfHwgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09IFwiMFwiO1xufVxuXG4vLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2hhcy1mbGFnL2Jsb2IvbWFpbi9pbmRleC5qc1xuLy8gYXMgdXNlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGtcbmZ1bmN0aW9uIGhhc0ZsYWcoZmxhZzogc3RyaW5nKSB7XG4gIGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aChcIi1cIikgPyBcIlwiIDogZmxhZy5sZW5ndGggPT09IDEgPyBcIi1cIiA6IFwiLS1cIjtcbiAgY29uc3QgcG9zaXRpb24gPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcbiAgY29uc3QgdGVybWluYXRvclBvc2l0aW9uID0gcHJvY2Vzcy5hcmd2LmluZGV4T2YoXCItLVwiKTtcbiAgcmV0dXJuIChcbiAgICBwb3NpdGlvbiAhPT0gLTEgJiZcbiAgICAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbilcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.test.d.ts","sourceRoot":"","sources":["../src/util.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) HashiCorp, Inc
|
|
3
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
// Import via the package barrel so the util.ts ↔ logging.ts module-init cycle
|
|
6
|
+
const index_1 = require("./index");
|
|
7
|
+
const log4js_1 = require("log4js");
|
|
8
|
+
// Silence log4js output so the test reporter shows only Jest's PASS/FAIL lines.
|
|
9
|
+
beforeAll(() => {
|
|
10
|
+
(0, log4js_1.getLogger)().level = "OFF";
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Spawn a failing child process and return the rejected Error.
|
|
14
|
+
*
|
|
15
|
+
* Using the running node binary keeps the failure surface portable across CI / dev machines (no shell builtins, no
|
|
16
|
+
* external binaries). The `stderr` / `stdout` payloads are hex-encoded inside the script so the captured bytes do not
|
|
17
|
+
* appear verbatim in the headline's `args.join(" ")` echo — that lets tests assert the headline does not include
|
|
18
|
+
* captured output.
|
|
19
|
+
*
|
|
20
|
+
* @param spec what the child should write to each stream and which exit code to use
|
|
21
|
+
* @returns the Error rejected by `exec`, narrowed to expose the attached `.stderr` / `.stdout`
|
|
22
|
+
* @throws if `exec` resolves rather than rejecting (the test setup is wrong)
|
|
23
|
+
*/
|
|
24
|
+
async function runFailing(spec) {
|
|
25
|
+
const parts = [];
|
|
26
|
+
if (spec.stderr !== undefined) {
|
|
27
|
+
const hex = Buffer.from(spec.stderr).toString("hex");
|
|
28
|
+
parts.push(`process.stderr.write(Buffer.from("${hex}","hex").toString())`);
|
|
29
|
+
}
|
|
30
|
+
if (spec.stdout !== undefined) {
|
|
31
|
+
const hex = Buffer.from(spec.stdout).toString("hex");
|
|
32
|
+
parts.push(`process.stdout.write(Buffer.from("${hex}","hex").toString())`);
|
|
33
|
+
}
|
|
34
|
+
parts.push(`process.exit(${spec.exitCode})`);
|
|
35
|
+
try {
|
|
36
|
+
await (0, index_1.exec)(process.execPath, ["-e", parts.join("; ")], {}, undefined,
|
|
37
|
+
// No-op stderr callback suppresses exec()'s default pass-through to process.stderr.
|
|
38
|
+
() => { });
|
|
39
|
+
throw new Error("exec() resolved unexpectedly");
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
return e;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const STDERR_PAYLOAD = "stderr-payload-marker";
|
|
46
|
+
const STDOUT_PAYLOAD = "stdout-payload-marker";
|
|
47
|
+
describe("exec() failure decoration", () => {
|
|
48
|
+
it("attaches both stderr and stdout and surfaces them via toString()", async () => {
|
|
49
|
+
const error = await runFailing({
|
|
50
|
+
stderr: STDERR_PAYLOAD,
|
|
51
|
+
stdout: STDOUT_PAYLOAD,
|
|
52
|
+
exitCode: 2,
|
|
53
|
+
});
|
|
54
|
+
expect(error.stderr).toBe(STDERR_PAYLOAD);
|
|
55
|
+
expect(error.stdout).toBe(STDOUT_PAYLOAD);
|
|
56
|
+
expect(error.message).toContain("exited with code 2");
|
|
57
|
+
expect(error.message).not.toContain(STDERR_PAYLOAD);
|
|
58
|
+
expect(error.message).not.toContain(STDOUT_PAYLOAD);
|
|
59
|
+
expect(String(error)).toBe(`Error: ${error.message}\n${STDERR_PAYLOAD}\n${STDOUT_PAYLOAD}`);
|
|
60
|
+
});
|
|
61
|
+
it("renders stderr-only failures without a trailing blank line for empty stdout", async () => {
|
|
62
|
+
const error = await runFailing({ stderr: STDERR_PAYLOAD, exitCode: 3 });
|
|
63
|
+
expect(error.stderr).toBe(STDERR_PAYLOAD);
|
|
64
|
+
expect(error.stdout).toBe("");
|
|
65
|
+
expect(String(error)).toBe(`Error: ${error.message}\n${STDERR_PAYLOAD}`);
|
|
66
|
+
});
|
|
67
|
+
it("renders stdout-only failures without a leading blank line for empty stderr", async () => {
|
|
68
|
+
const error = await runFailing({ stdout: STDOUT_PAYLOAD, exitCode: 4 });
|
|
69
|
+
expect(error.stderr).toBe("");
|
|
70
|
+
expect(error.stdout).toBe(STDOUT_PAYLOAD);
|
|
71
|
+
expect(String(error)).toBe(`Error: ${error.message}\n${STDOUT_PAYLOAD}`);
|
|
72
|
+
});
|
|
73
|
+
it("leaves toString() at the default headline when both streams are empty", async () => {
|
|
74
|
+
const error = await runFailing({ exitCode: 5 });
|
|
75
|
+
expect(error.stderr).toBe("");
|
|
76
|
+
expect(error.stdout).toBe("");
|
|
77
|
+
// No custom toString override → default Error.prototype.toString = "Error: <message>".
|
|
78
|
+
expect(String(error)).toBe(`Error: ${error.message}`);
|
|
79
|
+
});
|
|
80
|
+
it("surfaces stderr and the exit code through template-literal interpolation of the error", async () => {
|
|
81
|
+
const error = await runFailing({ stderr: STDERR_PAYLOAD, exitCode: 6 });
|
|
82
|
+
expect(`${error}`).toContain(STDERR_PAYLOAD);
|
|
83
|
+
expect(`${error}`).toContain("exited with code 6");
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWwudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQzs7QUFFbkMsOEVBQThFO0FBQzlFLG1DQUErQjtBQUMvQixtQ0FBbUM7QUFFbkMsZ0ZBQWdGO0FBQ2hGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixJQUFBLGtCQUFTLEdBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxDQUFDO0FBSUg7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxLQUFLLFVBQVUsVUFBVSxDQUFDLElBSXpCO0lBQ0MsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxJQUFJLENBQUMscUNBQXFDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFBLFlBQUksRUFDUixPQUFPLENBQUMsUUFBUSxFQUNoQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3hCLEVBQUUsRUFDRixTQUFTO1FBQ1Qsb0ZBQW9GO1FBQ3BGLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FDVCxDQUFDO1FBQ0YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztBQUMvQyxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztBQUUvQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO0lBQ3pDLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRixNQUFNLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQztZQUM3QixNQUFNLEVBQUUsY0FBYztZQUN0QixNQUFNLEVBQUUsY0FBYztZQUN0QixRQUFRLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4QixVQUFVLEtBQUssQ0FBQyxPQUFPLEtBQUssY0FBYyxLQUFLLGNBQWMsRUFBRSxDQUNoRSxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkVBQTZFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsT0FBTyxLQUFLLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsT0FBTyxLQUFLLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUVBQXVFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckYsTUFBTSxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVoRCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5Qix1RkFBdUY7UUFDdkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVGQUF1RixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JHLE1BQU0sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RSxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuXG4vLyBJbXBvcnQgdmlhIHRoZSBwYWNrYWdlIGJhcnJlbCBzbyB0aGUgdXRpbC50cyDihpQgbG9nZ2luZy50cyBtb2R1bGUtaW5pdCBjeWNsZVxuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwibG9nNGpzXCI7XG5cbi8vIFNpbGVuY2UgbG9nNGpzIG91dHB1dCBzbyB0aGUgdGVzdCByZXBvcnRlciBzaG93cyBvbmx5IEplc3QncyBQQVNTL0ZBSUwgbGluZXMuXG5iZWZvcmVBbGwoKCkgPT4ge1xuICBnZXRMb2dnZXIoKS5sZXZlbCA9IFwiT0ZGXCI7XG59KTtcblxudHlwZSBEZWNvcmF0ZWRFcnJvciA9IEVycm9yICYgeyBzdGRlcnI/OiBzdHJpbmc7IHN0ZG91dD86IHN0cmluZyB9O1xuXG4vKipcbiAqIFNwYXduIGEgZmFpbGluZyBjaGlsZCBwcm9jZXNzIGFuZCByZXR1cm4gdGhlIHJlamVjdGVkIEVycm9yLlxuICpcbiAqIFVzaW5nIHRoZSBydW5uaW5nIG5vZGUgYmluYXJ5IGtlZXBzIHRoZSBmYWlsdXJlIHN1cmZhY2UgcG9ydGFibGUgYWNyb3NzIENJIC8gZGV2IG1hY2hpbmVzIChubyBzaGVsbCBidWlsdGlucywgbm9cbiAqIGV4dGVybmFsIGJpbmFyaWVzKS4gVGhlIGBzdGRlcnJgIC8gYHN0ZG91dGAgcGF5bG9hZHMgYXJlIGhleC1lbmNvZGVkIGluc2lkZSB0aGUgc2NyaXB0IHNvIHRoZSBjYXB0dXJlZCBieXRlcyBkbyBub3RcbiAqIGFwcGVhciB2ZXJiYXRpbSBpbiB0aGUgaGVhZGxpbmUncyBgYXJncy5qb2luKFwiIFwiKWAgZWNobyDigJQgdGhhdCBsZXRzIHRlc3RzIGFzc2VydCB0aGUgaGVhZGxpbmUgZG9lcyBub3QgaW5jbHVkZVxuICogY2FwdHVyZWQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSBzcGVjIHdoYXQgdGhlIGNoaWxkIHNob3VsZCB3cml0ZSB0byBlYWNoIHN0cmVhbSBhbmQgd2hpY2ggZXhpdCBjb2RlIHRvIHVzZVxuICogQHJldHVybnMgdGhlIEVycm9yIHJlamVjdGVkIGJ5IGBleGVjYCwgbmFycm93ZWQgdG8gZXhwb3NlIHRoZSBhdHRhY2hlZCBgLnN0ZGVycmAgLyBgLnN0ZG91dGBcbiAqIEB0aHJvd3MgaWYgYGV4ZWNgIHJlc29sdmVzIHJhdGhlciB0aGFuIHJlamVjdGluZyAodGhlIHRlc3Qgc2V0dXAgaXMgd3JvbmcpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkZhaWxpbmcoc3BlYzoge1xuICBzdGRlcnI/OiBzdHJpbmc7XG4gIHN0ZG91dD86IHN0cmluZztcbiAgZXhpdENvZGU6IG51bWJlcjtcbn0pOiBQcm9taXNlPERlY29yYXRlZEVycm9yPiB7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoc3BlYy5zdGRlcnIgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGhleCA9IEJ1ZmZlci5mcm9tKHNwZWMuc3RkZXJyKS50b1N0cmluZyhcImhleFwiKTtcbiAgICBwYXJ0cy5wdXNoKGBwcm9jZXNzLnN0ZGVyci53cml0ZShCdWZmZXIuZnJvbShcIiR7aGV4fVwiLFwiaGV4XCIpLnRvU3RyaW5nKCkpYCk7XG4gIH1cbiAgaWYgKHNwZWMuc3Rkb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBoZXggPSBCdWZmZXIuZnJvbShzcGVjLnN0ZG91dCkudG9TdHJpbmcoXCJoZXhcIik7XG4gICAgcGFydHMucHVzaChgcHJvY2Vzcy5zdGRvdXQud3JpdGUoQnVmZmVyLmZyb20oXCIke2hleH1cIixcImhleFwiKS50b1N0cmluZygpKWApO1xuICB9XG4gIHBhcnRzLnB1c2goYHByb2Nlc3MuZXhpdCgke3NwZWMuZXhpdENvZGV9KWApO1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoXG4gICAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgICAgW1wiLWVcIiwgcGFydHMuam9pbihcIjsgXCIpXSxcbiAgICAgIHt9LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgLy8gTm8tb3Agc3RkZXJyIGNhbGxiYWNrIHN1cHByZXNzZXMgZXhlYygpJ3MgZGVmYXVsdCBwYXNzLXRocm91Z2ggdG8gcHJvY2Vzcy5zdGRlcnIuXG4gICAgICAoKSA9PiB7fSxcbiAgICApO1xuICAgIHRocm93IG5ldyBFcnJvcihcImV4ZWMoKSByZXNvbHZlZCB1bmV4cGVjdGVkbHlcIik7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmNvbnN0IFNUREVSUl9QQVlMT0FEID0gXCJzdGRlcnItcGF5bG9hZC1tYXJrZXJcIjtcbmNvbnN0IFNURE9VVF9QQVlMT0FEID0gXCJzdGRvdXQtcGF5bG9hZC1tYXJrZXJcIjtcblxuZGVzY3JpYmUoXCJleGVjKCkgZmFpbHVyZSBkZWNvcmF0aW9uXCIsICgpID0+IHtcbiAgaXQoXCJhdHRhY2hlcyBib3RoIHN0ZGVyciBhbmQgc3Rkb3V0IGFuZCBzdXJmYWNlcyB0aGVtIHZpYSB0b1N0cmluZygpXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJ1bkZhaWxpbmcoe1xuICAgICAgc3RkZXJyOiBTVERFUlJfUEFZTE9BRCxcbiAgICAgIHN0ZG91dDogU1RET1VUX1BBWUxPQUQsXG4gICAgICBleGl0Q29kZTogMixcbiAgICB9KTtcblxuICAgIGV4cGVjdChlcnJvci5zdGRlcnIpLnRvQmUoU1RERVJSX1BBWUxPQUQpO1xuICAgIGV4cGVjdChlcnJvci5zdGRvdXQpLnRvQmUoU1RET1VUX1BBWUxPQUQpO1xuICAgIGV4cGVjdChlcnJvci5tZXNzYWdlKS50b0NvbnRhaW4oXCJleGl0ZWQgd2l0aCBjb2RlIDJcIik7XG4gICAgZXhwZWN0KGVycm9yLm1lc3NhZ2UpLm5vdC50b0NvbnRhaW4oU1RERVJSX1BBWUxPQUQpO1xuICAgIGV4cGVjdChlcnJvci5tZXNzYWdlKS5ub3QudG9Db250YWluKFNURE9VVF9QQVlMT0FEKTtcbiAgICBleHBlY3QoU3RyaW5nKGVycm9yKSkudG9CZShcbiAgICAgIGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfVxcbiR7U1RERVJSX1BBWUxPQUR9XFxuJHtTVERPVVRfUEFZTE9BRH1gLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVuZGVycyBzdGRlcnItb25seSBmYWlsdXJlcyB3aXRob3V0IGEgdHJhaWxpbmcgYmxhbmsgbGluZSBmb3IgZW1wdHkgc3Rkb3V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJ1bkZhaWxpbmcoeyBzdGRlcnI6IFNUREVSUl9QQVlMT0FELCBleGl0Q29kZTogMyB9KTtcblxuICAgIGV4cGVjdChlcnJvci5zdGRlcnIpLnRvQmUoU1RERVJSX1BBWUxPQUQpO1xuICAgIGV4cGVjdChlcnJvci5zdGRvdXQpLnRvQmUoXCJcIik7XG4gICAgZXhwZWN0KFN0cmluZyhlcnJvcikpLnRvQmUoYEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9XFxuJHtTVERFUlJfUEFZTE9BRH1gKTtcbiAgfSk7XG5cbiAgaXQoXCJyZW5kZXJzIHN0ZG91dC1vbmx5IGZhaWx1cmVzIHdpdGhvdXQgYSBsZWFkaW5nIGJsYW5rIGxpbmUgZm9yIGVtcHR5IHN0ZGVyclwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBydW5GYWlsaW5nKHsgc3Rkb3V0OiBTVERPVVRfUEFZTE9BRCwgZXhpdENvZGU6IDQgfSk7XG5cbiAgICBleHBlY3QoZXJyb3Iuc3RkZXJyKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdChlcnJvci5zdGRvdXQpLnRvQmUoU1RET1VUX1BBWUxPQUQpO1xuICAgIGV4cGVjdChTdHJpbmcoZXJyb3IpKS50b0JlKGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfVxcbiR7U1RET1VUX1BBWUxPQUR9YCk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIHRvU3RyaW5nKCkgYXQgdGhlIGRlZmF1bHQgaGVhZGxpbmUgd2hlbiBib3RoIHN0cmVhbXMgYXJlIGVtcHR5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJ1bkZhaWxpbmcoeyBleGl0Q29kZTogNSB9KTtcblxuICAgIGV4cGVjdChlcnJvci5zdGRlcnIpLnRvQmUoXCJcIik7XG4gICAgZXhwZWN0KGVycm9yLnN0ZG91dCkudG9CZShcIlwiKTtcbiAgICAvLyBObyBjdXN0b20gdG9TdHJpbmcgb3ZlcnJpZGUg4oaSIGRlZmF1bHQgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gXCJFcnJvcjogPG1lc3NhZ2U+XCIuXG4gICAgZXhwZWN0KFN0cmluZyhlcnJvcikpLnRvQmUoYEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gIH0pO1xuXG4gIGl0KFwic3VyZmFjZXMgc3RkZXJyIGFuZCB0aGUgZXhpdCBjb2RlIHRocm91Z2ggdGVtcGxhdGUtbGl0ZXJhbCBpbnRlcnBvbGF0aW9uIG9mIHRoZSBlcnJvclwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBydW5GYWlsaW5nKHsgc3RkZXJyOiBTVERFUlJfUEFZTE9BRCwgZXhpdENvZGU6IDYgfSk7XG5cbiAgICBleHBlY3QoYCR7ZXJyb3J9YCkudG9Db250YWluKFNUREVSUl9QQVlMT0FEKTtcbiAgICBleHBlY3QoYCR7ZXJyb3J9YCkudG9Db250YWluKFwiZXhpdGVkIHdpdGggY29kZSA2XCIpO1xuICB9KTtcbn0pO1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdktn/commons",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"license": "MPL-2.0",
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@sentry/node": "7.120.4",
|
|
42
|
-
"cdktn": "0.23.
|
|
42
|
+
"cdktn": "0.23.3",
|
|
43
43
|
"ci-info": "3.9.0",
|
|
44
44
|
"codemaker": "1.128.0",
|
|
45
45
|
"cross-spawn": "7.0.6",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@types/uuid": "9.0.8",
|
|
57
57
|
"@types/validator": "13.15.10",
|
|
58
58
|
"tsc-files": "1.1.4",
|
|
59
|
-
"typescript": "5.
|
|
59
|
+
"typescript": "^5.0.0"
|
|
60
60
|
},
|
|
61
61
|
"lint-staged": {
|
|
62
62
|
"src/**/*.{ts,tsx}": "tsc-files ambient.d.ts --noEmit"
|