@workflow/cli 5.0.0-beta.35 → 5.0.0-beta.37
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/commands/health.d.ts +1 -3
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +26 -50
- package/dist/lib/config/workflow-config.d.ts.map +1 -1
- package/dist/lib/config/workflow-config.js +2 -2
- package/dist/lib/inspect/hydration.d.ts.map +1 -1
- package/dist/lib/inspect/hydration.js +6 -3
- package/dist/lib/inspect/output.d.ts.map +1 -1
- package/dist/lib/inspect/output.js +5 -4
- package/dist/lib/inspect/run.js +2 -2
- package/package.json +9 -9
|
@@ -3,7 +3,6 @@ export default class Health extends BaseCommand {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
readonly endpoint: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
6
|
readonly timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
7
|
readonly port: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
8
|
readonly verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
@@ -17,8 +16,7 @@ export default class Health extends BaseCommand {
|
|
|
17
16
|
catch(error: any): Promise<void>;
|
|
18
17
|
run(): Promise<void>;
|
|
19
18
|
private verifyLocalServer;
|
|
20
|
-
private
|
|
21
|
-
private checkSingleEndpoint;
|
|
19
|
+
private checkEndpoint;
|
|
22
20
|
private outputResults;
|
|
23
21
|
}
|
|
24
22
|
//# sourceMappingURL=health.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmMzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAC6C;IAE/D,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MAyBD;IAEL,KAAK,CAAC,KAAK,EAAE,GAAG;IAIT,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAwDnB,iBAAiB;YAiCjB,aAAa;IAsC3B,OAAO,CAAC,aAAa;CAetB"}
|
package/dist/commands/health.js
CHANGED
|
@@ -6,28 +6,23 @@ import { BaseCommand } from '../base.js';
|
|
|
6
6
|
import { LOGGING_CONFIG, logger } from '../lib/config/log.js';
|
|
7
7
|
import { cliFlags } from '../lib/inspect/flags.js';
|
|
8
8
|
import { setupCliWorld } from '../lib/inspect/setup.js';
|
|
9
|
-
function formatHealthyResult(
|
|
10
|
-
return (chalk.green(
|
|
9
|
+
function formatHealthyResult(latencyMs) {
|
|
10
|
+
return (chalk.green(' ✓ workflow endpoint is healthy') +
|
|
11
11
|
chalk.gray(` (${latencyMs}ms)`));
|
|
12
12
|
}
|
|
13
|
-
function formatUnhealthyResult(
|
|
13
|
+
function formatUnhealthyResult(error) {
|
|
14
14
|
const errorSuffix = error ? chalk.gray(` - ${error}`) : '';
|
|
15
|
-
return chalk.red(
|
|
16
|
-
}
|
|
17
|
-
function getEndpointsToCheck(endpointFlag) {
|
|
18
|
-
return endpointFlag === 'both'
|
|
19
|
-
? ['workflow', 'step']
|
|
20
|
-
: [endpointFlag];
|
|
15
|
+
return chalk.red(' ✗ workflow endpoint is unhealthy') + errorSuffix;
|
|
21
16
|
}
|
|
22
17
|
function printSummary(results, backend) {
|
|
23
18
|
const allHealthy = results.every((r) => r.healthy);
|
|
24
19
|
logger.log('');
|
|
25
20
|
if (allHealthy) {
|
|
26
|
-
logger.log(chalk.green('
|
|
21
|
+
logger.log(chalk.green('Workflow endpoint is healthy!'));
|
|
27
22
|
}
|
|
28
23
|
else {
|
|
29
24
|
const unhealthyCount = results.filter((r) => !r.healthy).length;
|
|
30
|
-
logger.log(chalk.red(`${unhealthyCount}
|
|
25
|
+
logger.log(chalk.red(`${unhealthyCount} workflow endpoint(s) unhealthy`));
|
|
31
26
|
// Provide helpful hints for common issues
|
|
32
27
|
if (backend === 'local' || backend === '@workflow/world-local') {
|
|
33
28
|
logger.log('');
|
|
@@ -61,9 +56,9 @@ function resolveLocalBaseUrl(explicitPort, detectedPort) {
|
|
|
61
56
|
// Fall back to default port 3000 (common for Next.js, Nuxt, etc.)
|
|
62
57
|
return `http://localhost:${DEFAULT_LOCAL_PORT}`;
|
|
63
58
|
}
|
|
64
|
-
async function testHttpHealthEndpoint(baseUrl,
|
|
59
|
+
async function testHttpHealthEndpoint(baseUrl, verbose) {
|
|
65
60
|
try {
|
|
66
|
-
const healthUrl = `${baseUrl}/.well-known/workflow/v1
|
|
61
|
+
const healthUrl = `${baseUrl}/.well-known/workflow/v1/flow?__health`;
|
|
67
62
|
if (verbose) {
|
|
68
63
|
logger.debug(`Testing HTTP health at: ${healthUrl}`);
|
|
69
64
|
}
|
|
@@ -100,7 +95,7 @@ async function verifyLocalServerAccessible(verbose, explicitPort) {
|
|
|
100
95
|
if (verbose) {
|
|
101
96
|
logger.debug(`Resolved base URL: ${baseUrl}`);
|
|
102
97
|
}
|
|
103
|
-
const result = await testHttpHealthEndpoint(baseUrl,
|
|
98
|
+
const result = await testHttpHealthEndpoint(baseUrl, verbose);
|
|
104
99
|
if (result.ok) {
|
|
105
100
|
return baseUrl;
|
|
106
101
|
}
|
|
@@ -118,21 +113,21 @@ function logWorldConfig() {
|
|
|
118
113
|
logger.debug(`Base URL: ${process.env.WORKFLOW_LOCAL_BASE_URL || '(not set)'}`);
|
|
119
114
|
logger.debug(`PORT: ${process.env.PORT || '(not set)'}`);
|
|
120
115
|
}
|
|
121
|
-
async function runHealthCheckWithLogging(healthCheck, world,
|
|
116
|
+
async function runHealthCheckWithLogging(healthCheck, world, timeout, verbose) {
|
|
122
117
|
try {
|
|
123
118
|
if (verbose) {
|
|
124
|
-
logger.debug(
|
|
119
|
+
logger.debug('Starting health check for workflow endpoint...');
|
|
125
120
|
}
|
|
126
|
-
const result = await healthCheck(world,
|
|
121
|
+
const result = await healthCheck(world, { timeout });
|
|
127
122
|
if (verbose) {
|
|
128
|
-
logger.debug(`
|
|
123
|
+
logger.debug(`Workflow health check completed: ${JSON.stringify(result)}`);
|
|
129
124
|
}
|
|
130
125
|
return result;
|
|
131
126
|
}
|
|
132
127
|
catch (error) {
|
|
133
128
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
134
129
|
if (verbose) {
|
|
135
|
-
logger.debug(`
|
|
130
|
+
logger.debug(`Workflow health check threw: ${errorMessage}`);
|
|
136
131
|
}
|
|
137
132
|
return {
|
|
138
133
|
healthy: false,
|
|
@@ -141,22 +136,13 @@ async function runHealthCheckWithLogging(healthCheck, world, endpoint, timeout,
|
|
|
141
136
|
}
|
|
142
137
|
}
|
|
143
138
|
export default class Health extends BaseCommand {
|
|
144
|
-
static description = 'Check
|
|
139
|
+
static description = 'Check the workflow endpoint via a queue-based health check';
|
|
145
140
|
static examples = [
|
|
146
141
|
'$ workflow health',
|
|
147
|
-
'$ workflow health --
|
|
148
|
-
'$ workflow health --endpoint step --timeout 60000',
|
|
142
|
+
'$ workflow health --timeout 60000',
|
|
149
143
|
'$ workflow health --backend vercel --project my-project --team my-team',
|
|
150
144
|
];
|
|
151
145
|
static flags = {
|
|
152
|
-
endpoint: Flags.string({
|
|
153
|
-
description: 'Which endpoint(s) to check',
|
|
154
|
-
options: ['workflow', 'step', 'both'],
|
|
155
|
-
default: 'both',
|
|
156
|
-
helpGroup: 'Health Check',
|
|
157
|
-
helpLabel: '--endpoint',
|
|
158
|
-
helpValue: ['workflow', 'step', 'both'],
|
|
159
|
-
}),
|
|
160
146
|
timeout: Flags.integer({
|
|
161
147
|
char: 't',
|
|
162
148
|
description: 'Timeout in milliseconds for health check',
|
|
@@ -210,20 +196,18 @@ export default class Health extends BaseCommand {
|
|
|
210
196
|
throw new Error('Failed to connect to backend. Check your configuration.');
|
|
211
197
|
}
|
|
212
198
|
const { healthCheck } = await import('@workflow/core/runtime');
|
|
213
|
-
const endpoints = getEndpointsToCheck(flags.endpoint);
|
|
214
199
|
if (!flags.json) {
|
|
215
200
|
const backendName = flags.backend === 'local' ? 'local server' : flags.backend;
|
|
216
201
|
logger.log(chalk.gray(`Running queue-based health check against ${backendName}...`));
|
|
217
202
|
logger.log('');
|
|
218
203
|
}
|
|
219
|
-
const
|
|
204
|
+
const result = await this.checkEndpoint(healthCheck, world, {
|
|
220
205
|
timeout: flags.timeout,
|
|
221
206
|
json: flags.json,
|
|
222
207
|
verbose: flags.verbose,
|
|
223
208
|
});
|
|
224
|
-
this.outputResults(
|
|
225
|
-
|
|
226
|
-
process.exit(allHealthy ? 0 : 1);
|
|
209
|
+
this.outputResults([result], flags.json, flags.backend);
|
|
210
|
+
process.exit(result.healthy ? 0 : 1);
|
|
227
211
|
}
|
|
228
212
|
async verifyLocalServer(jsonMode, verbose, port) {
|
|
229
213
|
if (!jsonMode) {
|
|
@@ -252,30 +236,22 @@ export default class Health extends BaseCommand {
|
|
|
252
236
|
return false;
|
|
253
237
|
}
|
|
254
238
|
}
|
|
255
|
-
async
|
|
239
|
+
async checkEndpoint(healthCheck, world, flags) {
|
|
256
240
|
if (flags.verbose) {
|
|
257
241
|
logWorldConfig();
|
|
258
242
|
}
|
|
259
|
-
const results = [];
|
|
260
|
-
for (const endpoint of endpoints) {
|
|
261
|
-
const result = await this.checkSingleEndpoint(endpoint, healthCheck, world, flags);
|
|
262
|
-
results.push(result);
|
|
263
|
-
}
|
|
264
|
-
return results;
|
|
265
|
-
}
|
|
266
|
-
async checkSingleEndpoint(endpoint, healthCheck, world, flags) {
|
|
267
243
|
if (!flags.json) {
|
|
268
|
-
logger.log(
|
|
244
|
+
logger.log('Checking workflow endpoint...');
|
|
269
245
|
}
|
|
270
|
-
const result = await runHealthCheckWithLogging(healthCheck, world,
|
|
246
|
+
const result = await runHealthCheckWithLogging(healthCheck, world, flags.timeout, flags.verbose);
|
|
271
247
|
if (!flags.json) {
|
|
272
248
|
const message = result.healthy
|
|
273
|
-
? formatHealthyResult(
|
|
274
|
-
: formatUnhealthyResult(
|
|
249
|
+
? formatHealthyResult(result.latencyMs ?? 0)
|
|
250
|
+
: formatUnhealthyResult(result.error);
|
|
275
251
|
logger.log(message);
|
|
276
252
|
}
|
|
277
253
|
return {
|
|
278
|
-
endpoint,
|
|
254
|
+
endpoint: 'workflow',
|
|
279
255
|
healthy: result.healthy,
|
|
280
256
|
error: result.error,
|
|
281
257
|
latencyMs: result.latencyMs,
|
|
@@ -307,4 +283,4 @@ function handleHealthCheckError(error) {
|
|
|
307
283
|
}
|
|
308
284
|
process.exit(1);
|
|
309
285
|
}
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFpQnhELFNBQVMsbUJBQW1CLENBQUMsUUFBZ0IsRUFBRSxTQUFpQjtJQUM5RCxPQUFPLENBQ0wsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLFFBQVEsc0JBQXNCLENBQUM7UUFDbEQsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsS0FBSyxDQUFDLENBQ2hDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLEtBQWM7SUFDN0QsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLFFBQVEsd0JBQXdCLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDMUUsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsWUFBb0I7SUFDL0MsT0FBTyxZQUFZLEtBQUssTUFBTTtRQUM1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QUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxhZ3MgfSBmcm9tICdAb2NsaWYvY29yZSc7XG5pbXBvcnQgeyBWRVJDRUxfNDAzX0VSUk9SX01FU1NBR0UgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UG9ydCB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9nZXQtcG9ydCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgQmFzZUNvbW1hbmQgfSBmcm9tICcuLi9iYXNlLmpzJztcbmltcG9ydCB7IExPR0dJTkdfQ09ORklHLCBsb2dnZXIgfSBmcm9tICcuLi9saWIvY29uZmlnL2xvZy5qcyc7XG5pbXBvcnQgeyBjbGlGbGFncyB9IGZyb20gJy4uL2xpYi9pbnNwZWN0L2ZsYWdzLmpzJztcbmltcG9ydCB7IHNldHVwQ2xpV29ybGQgfSBmcm9tICcuLi9saWIvaW5zcGVjdC9zZXR1cC5qcyc7XG5cbnR5cGUgSGVhbHRoQ2hlY2tFbmRwb2ludCA9ICd3b3JrZmxvdycgfCAnc3RlcCc7XG5cbmludGVyZmFjZSBIZWFsdGhDaGVja1Jlc3VsdCB7XG4gIGhlYWx0aHk6IGJvb2xlYW47XG4gIGVycm9yPzogc3RyaW5nO1xuICBsYXRlbmN5TXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBFbmRwb2ludEhlYWx0aFJlc3VsdCB7XG4gIGVuZHBvaW50OiBIZWFsdGhDaGVja0VuZHBvaW50O1xuICBoZWFsdGh5OiBib29sZWFuO1xuICBlcnJvcj86IHN0cmluZztcbiAgbGF0ZW5jeU1zPzogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFsdGh5UmVzdWx0KGVuZHBvaW50OiBzdHJpbmcsIGxhdGVuY3lNczogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBjaGFsay5ncmVlbihgICDinJMgJHtlbmRwb2ludH0gZW5kcG9pbnQgaXMgaGVhbHRoeWApICtcbiAgICBjaGFsay5ncmF5KGAgKCR7bGF0ZW5jeU1zfW1zKWApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaGVhbHRoeVJlc3VsdChlbmRwb2ludDogc3RyaW5nLCBlcnJvcj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVycm9yU3VmZml4ID0gZXJyb3IgPyBjaGFsay5ncmF5KGAgLSAke2Vycm9yfWApIDogJyc7XG4gIHJldHVybiBjaGFsay5yZWQoYCAg4pyXICR7ZW5kcG9pbnR9IGVuZHBvaW50IGlzIHVuaGVhbHRoeWApICsgZXJyb3JTdWZmaXg7XG59XG5cbmZ1bmN0aW9uIGdldEVuZHBvaW50c1RvQ2hlY2soZW5kcG9pbnRGbGFnOiBzdHJpbmcpOiBIZWFsdGhDaGVja0VuZHBvaW50W10ge1xuICByZXR1cm4gZW5kcG9pbnRGbGFnID09PSAnYm90aCdcbiAgICA/IFsnd29ya2Zsb3cnLCAnc3RlcCddXG4gICAgOiBbZW5kcG9pbnRGbGFnIGFzIEhlYWx0aENoZWNrRW5kcG9pbnRdO1xufVxuXG5mdW5jdGlvbiBwcmludFN1bW1hcnkocmVzdWx0czogRW5kcG9pbnRIZWFsdGhSZXN1bHRbXSwgYmFja2VuZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGFsbEhlYWx0aHkgPSByZXN1bHRzLmV2ZXJ5KChyKSA9PiByLmhlYWx0aHkpO1xuICBsb2dnZXIubG9nKCcnKTtcbiAgaWYgKGFsbEhlYWx0aHkpIHtcbiAgICBsb2dnZXIubG9nKGNoYWxrLmdyZWVuKCdBbGwgZW5kcG9pbnRzIGFyZSBoZWFsdGh5IScpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1bmhlYWx0aHlDb3VudCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiAhci5oZWFsdGh5KS5sZW5ndGg7XG4gICAgbG9nZ2VyLmxvZyhcbiAgICAgIGNoYWxrLnJlZChgJHt1bmhlYWx0aHlDb3VudH0gb2YgJHtyZXN1bHRzLmxlbmd0aH0gZW5kcG9pbnQocykgdW5oZWFsdGh5YClcbiAgICApO1xuICAgIC8vIFByb3ZpZGUgaGVscGZ1bCBoaW50cyBmb3IgY29tbW9uIGlzc3Vlc1xuICAgIGlmIChiYWNrZW5kID09PSAnbG9jYWwnIHx8IGJhY2tlbmQgPT09ICdAd29ya2Zsb3cvd29ybGQtbG9jYWwnKSB7XG4gICAgICBsb2dnZXIubG9nKCcnKTtcbiAgICAgIGxvZ2dlci5sb2coY2hhbGsueWVsbG93KCdIaW50OiBGb3IgbG9jYWwgaGVhbHRoIGNoZWNrcywgZW5zdXJlOicpKTtcbiAgICAgIGxvZ2dlci5sb2coY2hhbGsueWVsbG93KCcgIDEuIFlvdXIgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIHJ1bm5pbmcnKSk7XG4gICAgICBsb2dnZXIubG9nKFxuICAgICAgICBjaGFsay55ZWxsb3coJyAgMi4gVGhlIHNlcnZlciBpcyBhY2Nlc3NpYmxlIGF0IHRoZSBjb25maWd1cmVkIFVSTCcpXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsb2dQb3J0RGV0ZWN0aW9uRGVidWcoXG4gIGV4cGxpY2l0UG9ydDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBkZXRlY3RlZFBvcnQ6IG51bWJlciB8IHVuZGVmaW5lZFxuKTogdm9pZCB7XG4gIGxvZ2dlci5kZWJ1ZyhgRXhwbGljaXQgcG9ydCBmbGFnOiAke2V4cGxpY2l0UG9ydCB8fCAnKG5vdCBzZXQpJ31gKTtcbiAgbG9nZ2VyLmRlYnVnKGBQT1JUIGVudjogJHtwcm9jZXNzLmVudi5QT1JUIHx8ICcobm90IHNldCknfWApO1xuICBsb2dnZXIuZGVidWcoXG4gICAgYFdPUktGTE9XX0xPQ0FMX0JBU0VfVVJMIGVudjogJHtwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTCB8fCAnKG5vdCBzZXQpJ31gXG4gICk7XG4gIGxvZ2dlci5kZWJ1ZyhgRGV0ZWN0ZWQvcmVzb2x2ZWQgcG9ydDogJHtkZXRlY3RlZFBvcnQgfHwgJyhub25lKSd9YCk7XG59XG5cbi8vIERlZmF1bHQgcG9ydCBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQgc2VydmVyc1xuY29uc3QgREVGQVVMVF9MT0NBTF9QT1JUID0gMzAwMDtcblxuZnVuY3Rpb24gcmVzb2x2ZUxvY2FsQmFzZVVybChcbiAgZXhwbGljaXRQb3J0OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIGRldGVjdGVkUG9ydDogbnVtYmVyIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuICBpZiAoZXhwbGljaXRQb3J0KSB7XG4gICAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OiR7ZXhwbGljaXRQb3J0fWA7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0JBU0VfVVJMKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0JBU0VfVVJMO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5QT1JUKSB7XG4gICAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OiR7cHJvY2Vzcy5lbnYuUE9SVH1gO1xuICB9XG4gIGlmIChkZXRlY3RlZFBvcnQpIHtcbiAgICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtkZXRlY3RlZFBvcnR9YDtcbiAgfVxuICAvLyBGYWxsIGJhY2sgdG8gZGVmYXVsdCBwb3J0IDMwMDAgKGNvbW1vbiBmb3IgTmV4dC5qcywgTnV4dCwgZXRjLilcbiAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OiR7REVGQVVMVF9MT0NBTF9QT1JUfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRlc3RIdHRwSGVhbHRoRW5kcG9pbnQoXG4gIGJhc2VVcmw6IHN0cmluZyxcbiAgZW5kcG9pbnQ6ICdmbG93JyB8ICdzdGVwJyxcbiAgdmVyYm9zZTogYm9vbGVhblxuKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBzdGF0dXM/OiBudW1iZXI7IGVycm9yPzogc3RyaW5nIH0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFsdGhVcmwgPSBgJHtiYXNlVXJsfS8ud2VsbC1rbm93bi93b3JrZmxvdy92MS8ke2VuZHBvaW50fT9fX2hlYWx0aGA7XG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVGVzdGluZyBIVFRQIGhlYWx0aCBhdDogJHtoZWFsdGhVcmx9YCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goaGVhbHRoVXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCg1MDAwKSxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiB7IG9rOiB0cnVlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9O1xuICAgIH1cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBIVFRQIGhlYWx0aCBjaGVjayByZXR1cm5lZCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBIVFRQIGhlYWx0aCBjaGVjayBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnJvck1lc3NhZ2UgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZvciBsb2NhbCBiYWNrZW5kLCB2ZXJpZnkgdGhlIHNlcnZlciBpcyBhY2Nlc3NpYmxlIGJlZm9yZSBhdHRlbXB0aW5nIGhlYWx0aCBjaGVjay5cbiAqIFJldHVybnMgdGhlIGJhc2UgVVJMIGlmIGFjY2Vzc2libGUsIG9yIHRocm93cyBhbiBlcnJvciB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlMb2NhbFNlcnZlckFjY2Vzc2libGUoXG4gIHZlcmJvc2U6IGJvb2xlYW4sXG4gIGV4cGxpY2l0UG9ydD86IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGV0ZWN0ZWRQb3J0ID0gZXhwbGljaXRQb3J0ID8/IChhd2FpdCBnZXRXb3JrZmxvd1BvcnQoKSk7XG5cbiAgaWYgKHZlcmJvc2UpIHtcbiAgICBsb2dQb3J0RGV0ZWN0aW9uRGVidWcoZXhwbGljaXRQb3J0LCBkZXRlY3RlZFBvcnQpO1xuICB9XG5cbiAgY29uc3QgYmFzZVVybCA9IHJlc29sdmVMb2NhbEJhc2VVcmwoZXhwbGljaXRQb3J0LCBkZXRlY3RlZFBvcnQpO1xuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBSZXNvbHZlZCBiYXNlIFVSTDogJHtiYXNlVXJsfWApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGVzdEh0dHBIZWFsdGhFbmRwb2ludChiYXNlVXJsLCAnZmxvdycsIHZlcmJvc2UpO1xuICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgcmV0dXJuIGJhc2VVcmw7XG4gIH1cblxuICBjb25zdCBwb3J0SGludCA9XG4gICAgYmFzZVVybCA9PT0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtERUZBVUxUX0xPQ0FMX1BPUlR9YFxuICAgICAgPyAnSWYgeW91ciBzZXJ2ZXIgcnVucyBvbiBhIGRpZmZlcmVudCBwb3J0LCB1c2UgLS1wb3J0IDxwb3J0PiBvciBzZXQgV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwnXG4gICAgICA6IGBIaW50OiBVc2UgLS1wb3J0IDxwb3J0PiBvciBzZXQgV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkw9aHR0cDovL2xvY2FsaG9zdDo8cG9ydD5gO1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCByZWFjaCBsb2NhbCBzZXJ2ZXIgYXQgJHtiYXNlVXJsfS4gTWFrZSBzdXJlIHlvdXIgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIHJ1bm5pbmcuXFxuYCArXG4gICAgICBwb3J0SGludFxuICApO1xufVxuXG5mdW5jdGlvbiBpc0xvY2FsQmFja2VuZChiYWNrZW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGJhY2tlbmQgPT09ICdsb2NhbCcgfHwgYmFja2VuZCA9PT0gJ0B3b3JrZmxvdy93b3JsZC1sb2NhbCc7XG59XG5cbmZ1bmN0aW9uIGxvZ1dvcmxkQ29uZmlnKCk6IHZvaWQge1xuICBsb2dnZXIuZGVidWcoXG4gICAgYERhdGEgZGlyZWN0b3J5OiAke3Byb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0RBVEFfRElSIHx8ICcobm90IHNldCknfWBcbiAgKTtcbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBCYXNlIFVSTDogJHtwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTCB8fCAnKG5vdCBzZXQpJ31gXG4gICk7XG4gIGxvZ2dlci5kZWJ1ZyhgUE9SVDogJHtwcm9jZXNzLmVudi5QT1JUIHx8ICcobm90IHNldCknfWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5IZWFsdGhDaGVja1dpdGhMb2dnaW5nKFxuICBoZWFsdGhDaGVjazogKFxuICAgIHdvcmxkOiBhbnksXG4gICAgZW5kcG9pbnQ6IEhlYWx0aENoZWNrRW5kcG9pbnQsXG4gICAgb3B0aW9uczogeyB0aW1lb3V0OiBudW1iZXIgfVxuICApID0+IFByb21pc2U8SGVhbHRoQ2hlY2tSZXN1bHQ+LFxuICB3b3JsZDogYW55LFxuICBlbmRwb2ludDogSGVhbHRoQ2hlY2tFbmRwb2ludCxcbiAgdGltZW91dDogbnVtYmVyLFxuICB2ZXJib3NlOiBib29sZWFuXG4pOiBQcm9taXNlPEhlYWx0aENoZWNrUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU3RhcnRpbmcgaGVhbHRoIGNoZWNrIGZvciAke2VuZHBvaW50fS4uLmApO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoZWFsdGhDaGVjayh3b3JsZCwgZW5kcG9pbnQsIHsgdGltZW91dCB9KTtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgSGVhbHRoIGNoZWNrIGZvciAke2VuZHBvaW50fSBjb21wbGV0ZWQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBIZWFsdGggY2hlY2sgZm9yICR7ZW5kcG9pbnR9IHRocmV3OiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWx0aHk6IGZhbHNlLFxuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBkdXJpbmcgaGVhbHRoIGNoZWNrJyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYWx0aCBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID1cbiAgICAnQ2hlY2sgaGVhbHRoIG9mIHdvcmtmbG93IGFuZCBzdGVwIGVuZHBvaW50cyB2aWEgcXVldWUtYmFzZWQgaGVhbHRoIGNoZWNrJztcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgJyQgd29ya2Zsb3cgaGVhbHRoJyxcbiAgICAnJCB3b3JrZmxvdyBoZWFsdGggLS1lbmRwb2ludCB3b3JrZmxvdycsXG4gICAgJyQgd29ya2Zsb3cgaGVhbHRoIC0tZW5kcG9pbnQgc3RlcCAtLXRpbWVvdXQgNjAwMDAnLFxuICAgICckIHdvcmtmbG93IGhlYWx0aCAtLWJhY2tlbmQgdmVyY2VsIC0tcHJvamVjdCBteS1wcm9qZWN0IC0tdGVhbSBteS10ZWFtJyxcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgZW5kcG9pbnQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogJ1doaWNoIGVuZHBvaW50KHMpIHRvIGNoZWNrJyxcbiAgICAgIG9wdGlvbnM6IFsnd29ya2Zsb3cnLCAnc3RlcCcsICdib3RoJ10sXG4gICAgICBkZWZhdWx0OiAnYm90aCcsXG4gICAgICBoZWxwR3JvdXA6ICdIZWFsdGggQ2hlY2snLFxuICAgICAgaGVscExhYmVsOiAnLS1lbmRwb2ludCcsXG4gICAgICBoZWxwVmFsdWU6IFsnd29ya2Zsb3cnLCAnc3RlcCcsICdib3RoJ10sXG4gICAgfSksXG4gICAgdGltZW91dDogRmxhZ3MuaW50ZWdlcih7XG4gICAgICBjaGFyOiAndCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBoZWFsdGggY2hlY2snLFxuICAgICAgZGVmYXVsdDogMzAwMDAsXG4gICAgICBoZWxwR3JvdXA6ICdIZWFsdGggQ2hlY2snLFxuICAgICAgaGVscExhYmVsOiAnLXQsIC0tdGltZW91dCcsXG4gICAgICBoZWxwVmFsdWU6ICdNUycsXG4gICAgfSksXG4gICAgcG9ydDogRmxhZ3MuaW50ZWdlcih7XG4gICAgICBjaGFyOiAncCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0xvY2FsIHNlcnZlciBwb3J0IChmb3IgbG9jYWwgYmFja2VuZCknLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscEdyb3VwOiAnSGVhbHRoIENoZWNrJyxcbiAgICAgIGhlbHBMYWJlbDogJy1wLCAtLXBvcnQnLFxuICAgICAgaGVscFZhbHVlOiAnUE9SVCcsXG4gICAgfSksXG4gICAgLy8gSW5jbHVkZSByZWxldmFudCBmbGFncyBmcm9tIGNsaUZsYWdzIChleGNsdWRpbmcgb25lcyBub3QgcmVsZXZhbnQgdG8gaGVhbHRoIGNoZWNrKVxuICAgIHZlcmJvc2U6IGNsaUZsYWdzLnZlcmJvc2UsXG4gICAganNvbjogY2xpRmxhZ3MuanNvbixcbiAgICBiYWNrZW5kOiBjbGlGbGFncy5iYWNrZW5kLFxuICAgIGF1dGhUb2tlbjogY2xpRmxhZ3MuYXV0aFRva2VuLFxuICAgIHByb2plY3Q6IGNsaUZsYWdzLnByb2plY3QsXG4gICAgdGVhbTogY2xpRmxhZ3MudGVhbSxcbiAgICBlbnY6IGNsaUZsYWdzLmVudixcbiAgfSBhcyBjb25zdDtcblxuICBhc3luYyBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgaGFuZGxlSGVhbHRoQ2hlY2tFcnJvcihlcnJvcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoSGVhbHRoKTtcblxuICAgIC8vIEZvciBsb2NhbCBiYWNrZW5kLCBzZXQgdXAgcG9ydCBjb25maWd1cmF0aW9uIGVhcmx5XG4gICAgaWYgKGlzTG9jYWxCYWNrZW5kKGZsYWdzLmJhY2tlbmQpKSB7XG4gICAgICAvLyBJZiB1c2VyIHNwZWNpZmllcyBhIHBvcnQsIHNldCB0aGUgZW52IHZhciBzbyB0aGUgV29ybGQgdXNlcyBpdFxuICAgICAgaWYgKGZsYWdzLnBvcnQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwgPSBgaHR0cDovL2xvY2FsaG9zdDoke2ZsYWdzLnBvcnR9YDtcbiAgICAgIH1cbiAgICAgIC8vIFNldCBkZWZhdWx0IFdPUktGTE9XX0xPQ0FMX0JBU0VfVVJMIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgLy8gV2UgdXNlIFdPUktGTE9XX0xPQ0FMX0JBU0VfVVJMIGluc3RlYWQgb2YgUE9SVCB0byBhdm9pZCBjb25mbGljdHNcbiAgICAgIC8vIHdpdGggb3RoZXIgdG9vbHMgKGxpa2UgTmV4dC5qcykgdGhhdCBhbHNvIHVzZSB0aGUgUE9SVCBlbnYgdmFyXG4gICAgICBpZiAoIXByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0JBU0VfVVJMICYmICFwcm9jZXNzLmVudi5QT1JUKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0JBU0VfVVJMID0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtERUZBVUxUX0xPQ0FMX1BPUlR9YDtcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZ5IHRoZSBzZXJ2ZXIgaXMgYWNjZXNzaWJsZSBiZWZvcmUgcHJvY2VlZGluZ1xuICAgICAgY29uc3QgYWNjZXNzaWJsZSA9IGF3YWl0IHRoaXMudmVyaWZ5TG9jYWxTZXJ2ZXIoXG4gICAgICAgIGZsYWdzLmpzb24sXG4gICAgICAgIGZsYWdzLnZlcmJvc2UsXG4gICAgICAgIGZsYWdzLnBvcnRcbiAgICAgICk7XG4gICAgICBpZiAoIWFjY2Vzc2libGUpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgc2V0dXBDbGlXb3JsZChmbGFncywgdGhpcy5jb25maWcudmVyc2lvbik7XG4gICAgaWYgKCF3b3JsZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRmFpbGVkIHRvIGNvbm5lY3QgdG8gYmFja2VuZC4gQ2hlY2sgeW91ciBjb25maWd1cmF0aW9uLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBoZWFsdGhDaGVjayB9ID0gYXdhaXQgaW1wb3J0KCdAd29ya2Zsb3cvY29yZS9ydW50aW1lJyk7XG4gICAgY29uc3QgZW5kcG9pbnRzID0gZ2V0RW5kcG9pbnRzVG9DaGVjayhmbGFncy5lbmRwb2ludCk7XG5cbiAgICBpZiAoIWZsYWdzLmpzb24pIHtcbiAgICAgIGNvbnN0IGJhY2tlbmROYW1lID1cbiAgICAgICAgZmxhZ3MuYmFja2VuZCA9PT0gJ2xvY2FsJyA/ICdsb2NhbCBzZXJ2ZXInIDogZmxhZ3MuYmFja2VuZDtcbiAgICAgIGxvZ2dlci5sb2coXG4gICAgICAgIGNoYWxrLmdyYXkoYFJ1bm5pbmcgcXVldWUtYmFzZWQgaGVhbHRoIGNoZWNrIGFnYWluc3QgJHtiYWNrZW5kTmFtZX0uLi5gKVxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5sb2coJycpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmNoZWNrRW5kcG9pbnRzKGVuZHBvaW50cywgaGVhbHRoQ2hlY2ssIHdvcmxkLCB7XG4gICAgICB0aW1lb3V0OiBmbGFncy50aW1lb3V0LFxuICAgICAganNvbjogZmxhZ3MuanNvbixcbiAgICAgIHZlcmJvc2U6IGZsYWdzLnZlcmJvc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLm91dHB1dFJlc3VsdHMocmVzdWx0cywgZmxhZ3MuanNvbiwgZmxhZ3MuYmFja2VuZCk7XG5cbiAgICBjb25zdCBhbGxIZWFsdGh5ID0gcmVzdWx0cy5ldmVyeSgocikgPT4gci5oZWFsdGh5KTtcbiAgICBwcm9jZXNzLmV4aXQoYWxsSGVhbHRoeSA/IDAgOiAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmVyaWZ5TG9jYWxTZXJ2ZXIoXG4gICAganNvbk1vZGU6IGJvb2xlYW4sXG4gICAgdmVyYm9zZTogYm9vbGVhbixcbiAgICBwb3J0PzogbnVtYmVyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghanNvbk1vZGUpIHtcbiAgICAgIGxvZ2dlci5sb2coY2hhbGsuZ3JheSgnQ2hlY2tpbmcgbG9jYWwgc2VydmVyIGFjY2Vzc2liaWxpdHkuLi4nKSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgdmVyaWZ5TG9jYWxTZXJ2ZXJBY2Nlc3NpYmxlKHZlcmJvc2UsIHBvcnQpO1xuICAgICAgaWYgKCFqc29uTW9kZSkge1xuICAgICAgICBsb2dnZXIubG9nKGNoYWxrLmdyZWVuKGAgIOKckyBMb2NhbCBzZXJ2ZXIgYWNjZXNzaWJsZSBhdCAke2Jhc2VVcmx9YCkpO1xuICAgICAgICBsb2dnZXIubG9nKCcnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBpZiAoanNvbk1vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcmVzdWx0czogW10sXG4gICAgICAgICAgICBhbGxIZWFsdGh5OiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tFbmRwb2ludHMoXG4gICAgZW5kcG9pbnRzOiBIZWFsdGhDaGVja0VuZHBvaW50W10sXG4gICAgaGVhbHRoQ2hlY2s6IChcbiAgICAgIHdvcmxkOiBhbnksXG4gICAgICBlbmRwb2ludDogSGVhbHRoQ2hlY2tFbmRwb2ludCxcbiAgICAgIG9wdGlvbnM6IHsgdGltZW91dDogbnVtYmVyIH1cbiAgICApID0+IFByb21pc2U8SGVhbHRoQ2hlY2tSZXN1bHQ+LFxuICAgIHdvcmxkOiBhbnksXG4gICAgZmxhZ3M6IHsgdGltZW91dDogbnVtYmVyOyBqc29uOiBib29sZWFuOyB2ZXJib3NlOiBib29sZWFuIH1cbiAgKTogUHJvbWlzZTxFbmRwb2ludEhlYWx0aFJlc3VsdFtdPiB7XG4gICAgaWYgKGZsYWdzLnZlcmJvc2UpIHtcbiAgICAgIGxvZ1dvcmxkQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0czogRW5kcG9pbnRIZWFsdGhSZXN1bHRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW5kcG9pbnQgb2YgZW5kcG9pbnRzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoZWNrU2luZ2xlRW5kcG9pbnQoXG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICBoZWFsdGhDaGVjayxcbiAgICAgICAgd29ybGQsXG4gICAgICAgIGZsYWdzXG4gICAgICApO1xuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja1NpbmdsZUVuZHBvaW50KFxuICAgIGVuZHBvaW50OiBIZWFsdGhDaGVja0VuZHBvaW50LFxuICAgIGhlYWx0aENoZWNrOiAoXG4gICAgICB3b3JsZDogYW55LFxuICAgICAgZW5kcG9pbnQ6IEhlYWx0aENoZWNrRW5kcG9pbnQsXG4gICAgICBvcHRpb25zOiB7IHRpbWVvdXQ6IG51bWJlciB9XG4gICAgKSA9PiBQcm9taXNlPEhlYWx0aENoZWNrUmVzdWx0PixcbiAgICB3b3JsZDogYW55LFxuICAgIGZsYWdzOiB7IHRpbWVvdXQ6IG51bWJlcjsganNvbjogYm9vbGVhbjsgdmVyYm9zZTogYm9vbGVhbiB9XG4gICk6IFByb21pc2U8RW5kcG9pbnRIZWFsdGhSZXN1bHQ+IHtcbiAgICBpZiAoIWZsYWdzLmpzb24pIHtcbiAgICAgIGxvZ2dlci5sb2coYENoZWNraW5nICR7ZW5kcG9pbnR9IGVuZHBvaW50Li4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuSGVhbHRoQ2hlY2tXaXRoTG9nZ2luZyhcbiAgICAgIGhlYWx0aENoZWNrLFxuICAgICAgd29ybGQsXG4gICAgICBlbmRwb2ludCxcbiAgICAgIGZsYWdzLnRpbWVvdXQsXG4gICAgICBmbGFncy52ZXJib3NlXG4gICAgKTtcblxuICAgIGlmICghZmxhZ3MuanNvbikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3VsdC5oZWFsdGh5XG4gICAgICAgID8gZm9ybWF0SGVhbHRoeVJlc3VsdChlbmRwb2ludCwgcmVzdWx0LmxhdGVuY3lNcyA/PyAwKVxuICAgICAgICA6IGZvcm1hdFVuaGVhbHRoeVJlc3VsdChlbmRwb2ludCwgcmVzdWx0LmVycm9yKTtcbiAgICAgIGxvZ2dlci5sb2cobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVuZHBvaW50LFxuICAgICAgaGVhbHRoeTogcmVzdWx0LmhlYWx0aHksXG4gICAgICBlcnJvcjogcmVzdWx0LmVycm9yLFxuICAgICAgbGF0ZW5jeU1zOiByZXN1bHQubGF0ZW5jeU1zLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG91dHB1dFJlc3VsdHMoXG4gICAgcmVzdWx0czogRW5kcG9pbnRIZWFsdGhSZXN1bHRbXSxcbiAgICBqc29uTW9kZTogYm9vbGVhbixcbiAgICBiYWNrZW5kOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgaWYgKGpzb25Nb2RlKSB7XG4gICAgICBjb25zdCBqc29uT3V0cHV0ID0ge1xuICAgICAgICByZXN1bHRzLFxuICAgICAgICBhbGxIZWFsdGh5OiByZXN1bHRzLmV2ZXJ5KChyKSA9PiByLmhlYWx0aHkpLFxuICAgICAgfTtcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGpzb25PdXRwdXQsIG51bGwsIDIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJpbnRTdW1tYXJ5KHJlc3VsdHMsIGJhY2tlbmQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVIZWFsdGhDaGVja0Vycm9yKGVycm9yOiBhbnkpOiBuZXZlciB7XG4gIGlmIChlcnJvcj8uc3RhdHVzID09PSA0MDMpIHtcbiAgICBsb2dnZXIuZXJyb3IoVkVSQ0VMXzQwM19FUlJPUl9NRVNTQUdFKTtcbiAgfSBlbHNlIGlmIChMT0dHSU5HX0NPTkZJRy5WRVJCT1NFX01PREUpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcikgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgIGxvZ2dlci5lcnJvcihgRXJyb3I6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICB9XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbiJdfQ==
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFleEQsU0FBUyxtQkFBbUIsQ0FBQyxTQUFpQjtJQUM1QyxPQUFPLENBQ0wsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQztRQUMvQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxLQUFLLENBQUMsQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEtBQWM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN2RSxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBK0IsRUFBRSxPQUFlO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFD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Q0FBQztJQUVPLGFBQWEsQ0FDbkIsT0FBK0IsRUFDL0IsUUFBaUIsRUFDakIsT0FBZTtRQUVmLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLFVBQVUsR0FBRztnQkFDakIsT0FBTztnQkFDUCxVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzthQUM1QyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7O0FBR0gsU0FBUyxzQkFBc0IsQ0FBQyxLQUFVO0lBQ3hDLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDekMsQ0FBQztTQUFNLElBQUksY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUM7UUFDeEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSAnQG9jbGlmL2NvcmUnO1xuaW1wb3J0IHsgVkVSQ0VMXzQwM19FUlJPUl9NRVNTQUdFIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1BvcnQgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvZ2V0LXBvcnQnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IEJhc2VDb21tYW5kIH0gZnJvbSAnLi4vYmFzZS5qcyc7XG5pbXBvcnQgeyBMT0dHSU5HX0NPTkZJRywgbG9nZ2VyIH0gZnJvbSAnLi4vbGliL2NvbmZpZy9sb2cuanMnO1xuaW1wb3J0IHsgY2xpRmxhZ3MgfSBmcm9tICcuLi9saWIvaW5zcGVjdC9mbGFncy5qcyc7XG5pbXBvcnQgeyBzZXR1cENsaVdvcmxkIH0gZnJvbSAnLi4vbGliL2luc3BlY3Qvc2V0dXAuanMnO1xuXG5pbnRlcmZhY2UgSGVhbHRoQ2hlY2tSZXN1bHQge1xuICBoZWFsdGh5OiBib29sZWFuO1xuICBlcnJvcj86IHN0cmluZztcbiAgbGF0ZW5jeU1zPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRW5kcG9pbnRIZWFsdGhSZXN1bHQge1xuICBlbmRwb2ludDogJ3dvcmtmbG93JztcbiAgaGVhbHRoeTogYm9vbGVhbjtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGxhdGVuY3lNcz86IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhbHRoeVJlc3VsdChsYXRlbmN5TXM6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgY2hhbGsuZ3JlZW4oJyAg4pyTIHdvcmtmbG93IGVuZHBvaW50IGlzIGhlYWx0aHknKSArXG4gICAgY2hhbGsuZ3JheShgICgke2xhdGVuY3lNc31tcylgKVxuICApO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbmhlYWx0aHlSZXN1bHQoZXJyb3I/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBlcnJvclN1ZmZpeCA9IGVycm9yID8gY2hhbGsuZ3JheShgIC0gJHtlcnJvcn1gKSA6ICcnO1xuICByZXR1cm4gY2hhbGsucmVkKCcgIOKclyB3b3JrZmxvdyBlbmRwb2ludCBpcyB1bmhlYWx0aHknKSArIGVycm9yU3VmZml4O1xufVxuXG5mdW5jdGlvbiBwcmludFN1bW1hcnkocmVzdWx0czogRW5kcG9pbnRIZWFsdGhSZXN1bHRbXSwgYmFja2VuZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGFsbEhlYWx0aHkgPSByZXN1bHRzLmV2ZXJ5KChyKSA9PiByLmhlYWx0aHkpO1xuICBsb2dnZXIubG9nKCcnKTtcbiAgaWYgKGFsbEhlYWx0aHkpIHtcbiAgICBsb2dnZXIubG9nKGNoYWxrLmdyZWVuKCdXb3JrZmxvdyBlbmRwb2ludCBpcyBoZWFsdGh5IScpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1bmhlYWx0aHlDb3VudCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiAhci5oZWFsdGh5KS5sZW5ndGg7XG4gICAgbG9nZ2VyLmxvZyhjaGFsay5yZWQoYCR7dW5oZWFsdGh5Q291bnR9IHdvcmtmbG93IGVuZHBvaW50KHMpIHVuaGVhbHRoeWApKTtcbiAgICAvLyBQcm92aWRlIGhlbHBmdWwgaGludHMgZm9yIGNvbW1vbiBpc3N1ZXNcbiAgICBpZiAoYmFja2VuZCA9PT0gJ2xvY2FsJyB8fCBiYWNrZW5kID09PSAnQHdvcmtmbG93L3dvcmxkLWxvY2FsJykge1xuICAgICAgbG9nZ2VyLmxvZygnJyk7XG4gICAgICBsb2dnZXIubG9nKGNoYWxrLnllbGxvdygnSGludDogRm9yIGxvY2FsIGhlYWx0aCBjaGVja3MsIGVuc3VyZTonKSk7XG4gICAgICBsb2dnZXIubG9nKGNoYWxrLnllbGxvdygnICAxLiBZb3VyIGRldmVsb3BtZW50IHNlcnZlciBpcyBydW5uaW5nJykpO1xuICAgICAgbG9nZ2VyLmxvZyhcbiAgICAgICAgY2hhbGsueWVsbG93KCcgIDIuIFRoZSBzZXJ2ZXIgaXMgYWNjZXNzaWJsZSBhdCB0aGUgY29uZmlndXJlZCBVUkwnKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9nUG9ydERldGVjdGlvbkRlYnVnKFxuICBleHBsaWNpdFBvcnQ6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZGV0ZWN0ZWRQb3J0OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IHZvaWQge1xuICBsb2dnZXIuZGVidWcoYEV4cGxpY2l0IHBvcnQgZmxhZzogJHtleHBsaWNpdFBvcnQgfHwgJyhub3Qgc2V0KSd9YCk7XG4gIGxvZ2dlci5kZWJ1ZyhgUE9SVCBlbnY6ICR7cHJvY2Vzcy5lbnYuUE9SVCB8fCAnKG5vdCBzZXQpJ31gKTtcbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBXT1JLRkxPV19MT0NBTF9CQVNFX1VSTCBlbnY6ICR7cHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwgfHwgJyhub3Qgc2V0KSd9YFxuICApO1xuICBsb2dnZXIuZGVidWcoYERldGVjdGVkL3Jlc29sdmVkIHBvcnQ6ICR7ZGV0ZWN0ZWRQb3J0IHx8ICcobm9uZSknfWApO1xufVxuXG4vLyBEZWZhdWx0IHBvcnQgZm9yIGxvY2FsIGRldmVsb3BtZW50IHNlcnZlcnNcbmNvbnN0IERFRkFVTFRfTE9DQUxfUE9SVCA9IDMwMDA7XG5cbmZ1bmN0aW9uIHJlc29sdmVMb2NhbEJhc2VVcmwoXG4gIGV4cGxpY2l0UG9ydDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBkZXRlY3RlZFBvcnQ6IG51bWJlciB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcbiAgaWYgKGV4cGxpY2l0UG9ydCkge1xuICAgIHJldHVybiBgaHR0cDovL2xvY2FsaG9zdDoke2V4cGxpY2l0UG9ydH1gO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuUE9SVCkge1xuICAgIHJldHVybiBgaHR0cDovL2xvY2FsaG9zdDoke3Byb2Nlc3MuZW52LlBPUlR9YDtcbiAgfVxuICBpZiAoZGV0ZWN0ZWRQb3J0KSB7XG4gICAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OiR7ZGV0ZWN0ZWRQb3J0fWA7XG4gIH1cbiAgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHQgcG9ydCAzMDAwIChjb21tb24gZm9yIE5leHQuanMsIE51eHQsIGV0Yy4pXG4gIHJldHVybiBgaHR0cDovL2xvY2FsaG9zdDoke0RFRkFVTFRfTE9DQUxfUE9SVH1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0ZXN0SHR0cEhlYWx0aEVuZHBvaW50KFxuICBiYXNlVXJsOiBzdHJpbmcsXG4gIHZlcmJvc2U6IGJvb2xlYW5cbik6IFByb21pc2U8eyBvazogYm9vbGVhbjsgc3RhdHVzPzogbnVtYmVyOyBlcnJvcj86IHN0cmluZyB9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgaGVhbHRoVXJsID0gYCR7YmFzZVVybH0vLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdz9fX2hlYWx0aGA7XG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVGVzdGluZyBIVFRQIGhlYWx0aCBhdDogJHtoZWFsdGhVcmx9YCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goaGVhbHRoVXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCg1MDAwKSxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiB7IG9rOiB0cnVlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9O1xuICAgIH1cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBIVFRQIGhlYWx0aCBjaGVjayByZXR1cm5lZCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBIVFRQIGhlYWx0aCBjaGVjayBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnJvck1lc3NhZ2UgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZvciBsb2NhbCBiYWNrZW5kLCB2ZXJpZnkgdGhlIHNlcnZlciBpcyBhY2Nlc3NpYmxlIGJlZm9yZSBhdHRlbXB0aW5nIGhlYWx0aCBjaGVjay5cbiAqIFJldHVybnMgdGhlIGJhc2UgVVJMIGlmIGFjY2Vzc2libGUsIG9yIHRocm93cyBhbiBlcnJvciB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlMb2NhbFNlcnZlckFjY2Vzc2libGUoXG4gIHZlcmJvc2U6IGJvb2xlYW4sXG4gIGV4cGxpY2l0UG9ydD86IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGV0ZWN0ZWRQb3J0ID0gZXhwbGljaXRQb3J0ID8/IChhd2FpdCBnZXRXb3JrZmxvd1BvcnQoKSk7XG5cbiAgaWYgKHZlcmJvc2UpIHtcbiAgICBsb2dQb3J0RGV0ZWN0aW9uRGVidWcoZXhwbGljaXRQb3J0LCBkZXRlY3RlZFBvcnQpO1xuICB9XG5cbiAgY29uc3QgYmFzZVVybCA9IHJlc29sdmVMb2NhbEJhc2VVcmwoZXhwbGljaXRQb3J0LCBkZXRlY3RlZFBvcnQpO1xuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBSZXNvbHZlZCBiYXNlIFVSTDogJHtiYXNlVXJsfWApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGVzdEh0dHBIZWFsdGhFbmRwb2ludChiYXNlVXJsLCB2ZXJib3NlKTtcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIHJldHVybiBiYXNlVXJsO1xuICB9XG5cbiAgY29uc3QgcG9ydEhpbnQgPVxuICAgIGJhc2VVcmwgPT09IGBodHRwOi8vbG9jYWxob3N0OiR7REVGQVVMVF9MT0NBTF9QT1JUfWBcbiAgICAgID8gJ0lmIHlvdXIgc2VydmVyIHJ1bnMgb24gYSBkaWZmZXJlbnQgcG9ydCwgdXNlIC0tcG9ydCA8cG9ydD4gb3Igc2V0IFdPUktGTE9XX0xPQ0FMX0JBU0VfVVJMJ1xuICAgICAgOiBgSGludDogVXNlIC0tcG9ydCA8cG9ydD4gb3Igc2V0IFdPUktGTE9XX0xPQ0FMX0JBU0VfVVJMPWh0dHA6Ly9sb2NhbGhvc3Q6PHBvcnQ+YDtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBDYW5ub3QgcmVhY2ggbG9jYWwgc2VydmVyIGF0ICR7YmFzZVVybH0uIE1ha2Ugc3VyZSB5b3VyIGRldmVsb3BtZW50IHNlcnZlciBpcyBydW5uaW5nLlxcbmAgK1xuICAgICAgcG9ydEhpbnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbEJhY2tlbmQoYmFja2VuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBiYWNrZW5kID09PSAnbG9jYWwnIHx8IGJhY2tlbmQgPT09ICdAd29ya2Zsb3cvd29ybGQtbG9jYWwnO1xufVxuXG5mdW5jdGlvbiBsb2dXb3JsZENvbmZpZygpOiB2b2lkIHtcbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBEYXRhIGRpcmVjdG9yeTogJHtwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9EQVRBX0RJUiB8fCAnKG5vdCBzZXQpJ31gXG4gICk7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgQmFzZSBVUkw6ICR7cHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwgfHwgJyhub3Qgc2V0KSd9YFxuICApO1xuICBsb2dnZXIuZGVidWcoYFBPUlQ6ICR7cHJvY2Vzcy5lbnYuUE9SVCB8fCAnKG5vdCBzZXQpJ31gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuSGVhbHRoQ2hlY2tXaXRoTG9nZ2luZyhcbiAgaGVhbHRoQ2hlY2s6IChcbiAgICB3b3JsZDogYW55LFxuICAgIG9wdGlvbnM6IHsgdGltZW91dDogbnVtYmVyIH1cbiAgKSA9PiBQcm9taXNlPEhlYWx0aENoZWNrUmVzdWx0PixcbiAgd29ybGQ6IGFueSxcbiAgdGltZW91dDogbnVtYmVyLFxuICB2ZXJib3NlOiBib29sZWFuXG4pOiBQcm9taXNlPEhlYWx0aENoZWNrUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnU3RhcnRpbmcgaGVhbHRoIGNoZWNrIGZvciB3b3JrZmxvdyBlbmRwb2ludC4uLicpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoZWFsdGhDaGVjayh3b3JsZCwgeyB0aW1lb3V0IH0pO1xuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBXb3JrZmxvdyBoZWFsdGggY2hlY2sgY29tcGxldGVkOiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgV29ya2Zsb3cgaGVhbHRoIGNoZWNrIHRocmV3OiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWx0aHk6IGZhbHNlLFxuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBkdXJpbmcgaGVhbHRoIGNoZWNrJyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYWx0aCBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID1cbiAgICAnQ2hlY2sgdGhlIHdvcmtmbG93IGVuZHBvaW50IHZpYSBhIHF1ZXVlLWJhc2VkIGhlYWx0aCBjaGVjayc7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgICckIHdvcmtmbG93IGhlYWx0aCcsXG4gICAgJyQgd29ya2Zsb3cgaGVhbHRoIC0tdGltZW91dCA2MDAwMCcsXG4gICAgJyQgd29ya2Zsb3cgaGVhbHRoIC0tYmFja2VuZCB2ZXJjZWwgLS1wcm9qZWN0IG15LXByb2plY3QgLS10ZWFtIG15LXRlYW0nLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICB0aW1lb3V0OiBGbGFncy5pbnRlZ2VyKHtcbiAgICAgIGNoYXI6ICd0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGhlYWx0aCBjaGVjaycsXG4gICAgICBkZWZhdWx0OiAzMDAwMCxcbiAgICAgIGhlbHBHcm91cDogJ0hlYWx0aCBDaGVjaycsXG4gICAgICBoZWxwTGFiZWw6ICctdCwgLS10aW1lb3V0JyxcbiAgICAgIGhlbHBWYWx1ZTogJ01TJyxcbiAgICB9KSxcbiAgICBwb3J0OiBGbGFncy5pbnRlZ2VyKHtcbiAgICAgIGNoYXI6ICdwJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTG9jYWwgc2VydmVyIHBvcnQgKGZvciBsb2NhbCBiYWNrZW5kKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBoZWxwR3JvdXA6ICdIZWFsdGggQ2hlY2snLFxuICAgICAgaGVscExhYmVsOiAnLXAsIC0tcG9ydCcsXG4gICAgICBoZWxwVmFsdWU6ICdQT1JUJyxcbiAgICB9KSxcbiAgICAvLyBJbmNsdWRlIHJlbGV2YW50IGZsYWdzIGZyb20gY2xpRmxhZ3MgKGV4Y2x1ZGluZyBvbmVzIG5vdCByZWxldmFudCB0byBoZWFsdGggY2hlY2spXG4gICAgdmVyYm9zZTogY2xpRmxhZ3MudmVyYm9zZSxcbiAgICBqc29uOiBjbGlGbGFncy5qc29uLFxuICAgIGJhY2tlbmQ6IGNsaUZsYWdzLmJhY2tlbmQsXG4gICAgYXV0aFRva2VuOiBjbGlGbGFncy5hdXRoVG9rZW4sXG4gICAgcHJvamVjdDogY2xpRmxhZ3MucHJvamVjdCxcbiAgICB0ZWFtOiBjbGlGbGFncy50ZWFtLFxuICAgIGVudjogY2xpRmxhZ3MuZW52LFxuICB9IGFzIGNvbnN0O1xuXG4gIGFzeW5jIGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICBoYW5kbGVIZWFsdGhDaGVja0Vycm9yKGVycm9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShIZWFsdGgpO1xuXG4gICAgLy8gRm9yIGxvY2FsIGJhY2tlbmQsIHNldCB1cCBwb3J0IGNvbmZpZ3VyYXRpb24gZWFybHlcbiAgICBpZiAoaXNMb2NhbEJhY2tlbmQoZmxhZ3MuYmFja2VuZCkpIHtcbiAgICAgIC8vIElmIHVzZXIgc3BlY2lmaWVzIGEgcG9ydCwgc2V0IHRoZSBlbnYgdmFyIHNvIHRoZSBXb3JsZCB1c2VzIGl0XG4gICAgICBpZiAoZmxhZ3MucG9ydCkge1xuICAgICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTCA9IGBodHRwOi8vbG9jYWxob3N0OiR7ZmxhZ3MucG9ydH1gO1xuICAgICAgfVxuICAgICAgLy8gU2V0IGRlZmF1bHQgV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAvLyBXZSB1c2UgV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwgaW5zdGVhZCBvZiBQT1JUIHRvIGF2b2lkIGNvbmZsaWN0c1xuICAgICAgLy8gd2l0aCBvdGhlciB0b29scyAobGlrZSBOZXh0LmpzKSB0aGF0IGFsc28gdXNlIHRoZSBQT1JUIGVudiB2YXJcbiAgICAgIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwgJiYgIXByb2Nlc3MuZW52LlBPUlQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfQkFTRV9VUkwgPSBgaHR0cDovL2xvY2FsaG9zdDoke0RFRkFVTFRfTE9DQUxfUE9SVH1gO1xuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZnkgdGhlIHNlcnZlciBpcyBhY2Nlc3NpYmxlIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICBjb25zdCBhY2Nlc3NpYmxlID0gYXdhaXQgdGhpcy52ZXJpZnlMb2NhbFNlcnZlcihcbiAgICAgICAgZmxhZ3MuanNvbixcbiAgICAgICAgZmxhZ3MudmVyYm9zZSxcbiAgICAgICAgZmxhZ3MucG9ydFxuICAgICAgKTtcbiAgICAgIGlmICghYWNjZXNzaWJsZSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCBzZXR1cENsaVdvcmxkKGZsYWdzLCB0aGlzLmNvbmZpZy52ZXJzaW9uKTtcbiAgICBpZiAoIXdvcmxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdGYWlsZWQgdG8gY29ubmVjdCB0byBiYWNrZW5kLiBDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGhlYWx0aENoZWNrIH0gPSBhd2FpdCBpbXBvcnQoJ0B3b3JrZmxvdy9jb3JlL3J1bnRpbWUnKTtcblxuICAgIGlmICghZmxhZ3MuanNvbikge1xuICAgICAgY29uc3QgYmFja2VuZE5hbWUgPVxuICAgICAgICBmbGFncy5iYWNrZW5kID09PSAnbG9jYWwnID8gJ2xvY2FsIHNlcnZlcicgOiBmbGFncy5iYWNrZW5kO1xuICAgICAgbG9nZ2VyLmxvZyhcbiAgICAgICAgY2hhbGsuZ3JheShgUnVubmluZyBxdWV1ZS1iYXNlZCBoZWFsdGggY2hlY2sgYWdhaW5zdCAke2JhY2tlbmROYW1lfS4uLmApXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmxvZygnJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGVja0VuZHBvaW50KGhlYWx0aENoZWNrLCB3b3JsZCwge1xuICAgICAgdGltZW91dDogZmxhZ3MudGltZW91dCxcbiAgICAgIGpzb246IGZsYWdzLmpzb24sXG4gICAgICB2ZXJib3NlOiBmbGFncy52ZXJib3NlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRwdXRSZXN1bHRzKFtyZXN1bHRdLCBmbGFncy5qc29uLCBmbGFncy5iYWNrZW5kKTtcblxuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuaGVhbHRoeSA/IDAgOiAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmVyaWZ5TG9jYWxTZXJ2ZXIoXG4gICAganNvbk1vZGU6IGJvb2xlYW4sXG4gICAgdmVyYm9zZTogYm9vbGVhbixcbiAgICBwb3J0PzogbnVtYmVyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghanNvbk1vZGUpIHtcbiAgICAgIGxvZ2dlci5sb2coY2hhbGsuZ3JheSgnQ2hlY2tpbmcgbG9jYWwgc2VydmVyIGFjY2Vzc2liaWxpdHkuLi4nKSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgdmVyaWZ5TG9jYWxTZXJ2ZXJBY2Nlc3NpYmxlKHZlcmJvc2UsIHBvcnQpO1xuICAgICAgaWYgKCFqc29uTW9kZSkge1xuICAgICAgICBsb2dnZXIubG9nKGNoYWxrLmdyZWVuKGAgIOKckyBMb2NhbCBzZXJ2ZXIgYWNjZXNzaWJsZSBhdCAke2Jhc2VVcmx9YCkpO1xuICAgICAgICBsb2dnZXIubG9nKCcnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBpZiAoanNvbk1vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcmVzdWx0czogW10sXG4gICAgICAgICAgICBhbGxIZWFsdGh5OiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tFbmRwb2ludChcbiAgICBoZWFsdGhDaGVjazogKFxuICAgICAgd29ybGQ6IGFueSxcbiAgICAgIG9wdGlvbnM6IHsgdGltZW91dDogbnVtYmVyIH1cbiAgICApID0+IFByb21pc2U8SGVhbHRoQ2hlY2tSZXN1bHQ+LFxuICAgIHdvcmxkOiBhbnksXG4gICAgZmxhZ3M6IHsgdGltZW91dDogbnVtYmVyOyBqc29uOiBib29sZWFuOyB2ZXJib3NlOiBib29sZWFuIH1cbiAgKTogUHJvbWlzZTxFbmRwb2ludEhlYWx0aFJlc3VsdD4ge1xuICAgIGlmIChmbGFncy52ZXJib3NlKSB7XG4gICAgICBsb2dXb3JsZENvbmZpZygpO1xuICAgIH1cblxuICAgIGlmICghZmxhZ3MuanNvbikge1xuICAgICAgbG9nZ2VyLmxvZygnQ2hlY2tpbmcgd29ya2Zsb3cgZW5kcG9pbnQuLi4nKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5IZWFsdGhDaGVja1dpdGhMb2dnaW5nKFxuICAgICAgaGVhbHRoQ2hlY2ssXG4gICAgICB3b3JsZCxcbiAgICAgIGZsYWdzLnRpbWVvdXQsXG4gICAgICBmbGFncy52ZXJib3NlXG4gICAgKTtcblxuICAgIGlmICghZmxhZ3MuanNvbikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3VsdC5oZWFsdGh5XG4gICAgICAgID8gZm9ybWF0SGVhbHRoeVJlc3VsdChyZXN1bHQubGF0ZW5jeU1zID8/IDApXG4gICAgICAgIDogZm9ybWF0VW5oZWFsdGh5UmVzdWx0KHJlc3VsdC5lcnJvcik7XG4gICAgICBsb2dnZXIubG9nKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbmRwb2ludDogJ3dvcmtmbG93JyxcbiAgICAgIGhlYWx0aHk6IHJlc3VsdC5oZWFsdGh5LFxuICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvcixcbiAgICAgIGxhdGVuY3lNczogcmVzdWx0LmxhdGVuY3lNcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvdXRwdXRSZXN1bHRzKFxuICAgIHJlc3VsdHM6IEVuZHBvaW50SGVhbHRoUmVzdWx0W10sXG4gICAganNvbk1vZGU6IGJvb2xlYW4sXG4gICAgYmFja2VuZDogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGlmIChqc29uTW9kZSkge1xuICAgICAgY29uc3QganNvbk91dHB1dCA9IHtcbiAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgYWxsSGVhbHRoeTogcmVzdWx0cy5ldmVyeSgocikgPT4gci5oZWFsdGh5KSxcbiAgICAgIH07XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShqc29uT3V0cHV0LCBudWxsLCAyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50U3VtbWFyeShyZXN1bHRzLCBiYWNrZW5kKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlSGVhbHRoQ2hlY2tFcnJvcihlcnJvcjogYW55KTogbmV2ZXIge1xuICBpZiAoZXJyb3I/LnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgbG9nZ2VyLmVycm9yKFZFUkNFTF80MDNfRVJST1JfTUVTU0FHRSk7XG4gIH0gZWxzZSBpZiAoTE9HR0lOR19DT05GSUcuVkVSQk9TRV9NT0RFKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpIHx8ICdVbmtub3duIGVycm9yJztcbiAgICBsb2dnZXIuZXJyb3IoYEVycm9yOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/workflow-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow-config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/workflow-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAY9D,eAAO,MAAM,iBAAiB,GAC5B,qCAGG;IACD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAG3B,mBAeF,CAAC"}
|
|
@@ -15,7 +15,7 @@ export const getWorkflowConfig = ({ buildTarget, workflowManifest, } = {
|
|
|
15
15
|
dirs: ['./workflows'],
|
|
16
16
|
workingDir: resolveObservabilityCwd(),
|
|
17
17
|
buildTarget: buildTarget,
|
|
18
|
-
stepsBundlePath: './.well-known/workflow/v1/
|
|
18
|
+
stepsBundlePath: './.well-known/workflow/v1/__step_registrations.mjs',
|
|
19
19
|
workflowsBundlePath: './.well-known/workflow/v1/flow.mjs',
|
|
20
20
|
webhookBundlePath: './.well-known/workflow/v1/webhook.mjs',
|
|
21
21
|
workflowManifestPath: workflowManifest,
|
|
@@ -24,4 +24,4 @@ export const getWorkflowConfig = ({ buildTarget, workflowManifest, } = {
|
|
|
24
24
|
};
|
|
25
25
|
return config;
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25maWcvd29ya2Zsb3ctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHcEMsU0FBUyx1QkFBdUI7SUFDOUIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztJQUNuRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0Qsc0VBQXNFO0lBQ3RFLG9DQUFvQztJQUNwQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLEVBQ0UsV0FBVyxFQUNYLGdCQUFnQixNQUlkO0lBQ0YsV0FBVyxFQUFFLFlBQVk7Q0FDMUIsRUFDRCxFQUFFO0lBQ0YsTUFBTSxNQUFNLEdBQW1CO1FBQzdCLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUNyQixVQUFVLEVBQUUsdUJBQXVCLEVBQUU7UUFDckMsV0FBVyxFQUFFLFdBQTBCO1FBQ3ZDLGVBQWUsRUFBRSxvREFBb0Q7UUFDckUsbUJBQW1CLEVBQUUsb0NBQW9DO1FBQ3pELGlCQUFpQixFQUFFLHVDQUF1QztRQUMxRCxvQkFBb0IsRUFBRSxnQkFBZ0I7UUFFdEMsbUVBQW1FO1FBQ25FLG9EQUFvRDtLQUNyRCxDQUFDO0lBQ0YsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkVGFyZ2V0LCBXb3JrZmxvd0NvbmZpZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5mdW5jdGlvbiByZXNvbHZlT2JzZXJ2YWJpbGl0eUN3ZCgpOiBzdHJpbmcge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5XT1JLRkxPV19PQlNFUlZBQklMSVRZX0NXRDtcbiAgaWYgKCFyYXcpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5jd2QoKTtcbiAgfVxuICAvLyBBbGxvdyByZWxhdGl2ZSBwYXRoczsgcmVzb2x2ZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwcm9jZXNzLmN3ZCgpXG4gIC8vIChpLmUuIHdoZXJlIHRoZSBDTEkgd2FzIGludm9rZWQpLlxuICByZXR1cm4gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByYXcpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0V29ya2Zsb3dDb25maWcgPSAoXG4gIHtcbiAgICBidWlsZFRhcmdldCxcbiAgICB3b3JrZmxvd01hbmlmZXN0LFxuICB9OiB7XG4gICAgYnVpbGRUYXJnZXQ/OiBCdWlsZFRhcmdldDtcbiAgICB3b3JrZmxvd01hbmlmZXN0Pzogc3RyaW5nO1xuICB9ID0ge1xuICAgIGJ1aWxkVGFyZ2V0OiAnc3RhbmRhbG9uZScsXG4gIH1cbikgPT4ge1xuICBjb25zdCBjb25maWc6IFdvcmtmbG93Q29uZmlnID0ge1xuICAgIGRpcnM6IFsnLi93b3JrZmxvd3MnXSxcbiAgICB3b3JraW5nRGlyOiByZXNvbHZlT2JzZXJ2YWJpbGl0eUN3ZCgpLFxuICAgIGJ1aWxkVGFyZ2V0OiBidWlsZFRhcmdldCBhcyBCdWlsZFRhcmdldCxcbiAgICBzdGVwc0J1bmRsZVBhdGg6ICcuLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL19fc3RlcF9yZWdpc3RyYXRpb25zLm1qcycsXG4gICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogJy4vLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdy5tanMnLFxuICAgIHdlYmhvb2tCdW5kbGVQYXRoOiAnLi8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rLm1qcycsXG4gICAgd29ya2Zsb3dNYW5pZmVzdFBhdGg6IHdvcmtmbG93TWFuaWZlc3QsXG5cbiAgICAvLyBXSVA6IGdlbmVyYXRlIGEgY2xpZW50IGxpYnJhcnkgdG8gZWFzaWx5IGV4ZWN1dGUgd29ya2Zsb3dzL3N0ZXBzXG4gICAgLy8gY2xpZW50QnVuZGxlUGF0aDogJy4vbGliL2dlbmVyYXRlZC93b3JrZmxvd3MuanMnLFxuICB9O1xuICByZXR1cm4gY29uZmlnO1xufTtcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/hydration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAQL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAK7C;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,GACpD,IAAI,CAAC;AAGT,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,eAAe,EACf,KAAK,SAAS,EACd,UAAU,GACX,MAAM,qCAAqC,CAAC;AA8B7C;;;;;;GAMG;AACH,cAAM,gBAAgB;IACpB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAExE;AAMD;;;;;;GAMG;AACH,cAAM,cAAc;IAClB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAEpE;AAwED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA6DzC;
|
|
1
|
+
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/hydration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAQL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAK7C;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,GACpD,IAAI,CAAC;AAGT,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,eAAe,EACf,KAAK,SAAS,EACd,UAAU,GACX,MAAM,qCAAqC,CAAC;AA8B7C;;;;;;GAMG;AACH,cAAM,gBAAgB;IACpB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAExE;AAMD;;;;;;GAMG;AACH,cAAM,cAAc;IAClB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAEpE;AAwED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA6DzC;AAgID;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,QAAQ,EAAE,CAAC,EACX,WAAW,CAAC,EAAE,qBAAqB,GAClC,OAAO,CAAC,CAAC,CAAC,CASZ"}
|
|
@@ -261,8 +261,11 @@ async function maybeDecryptFields(resource, resolver) {
|
|
|
261
261
|
const result = { ...resource };
|
|
262
262
|
try {
|
|
263
263
|
const rawKey = await resolver(runId);
|
|
264
|
-
|
|
265
|
-
|
|
264
|
+
// Resolve the full key capability so `--decrypt` can open sealed
|
|
265
|
+
// ('encp') payloads that other runs wrote to this one, not just the
|
|
266
|
+
// run's own symmetric ('encr') payloads.
|
|
267
|
+
const { deriveRunPayloadKeys } = await import('@workflow/core/serialization');
|
|
268
|
+
const k = rawKey ? await deriveRunPayloadKeys(rawKey) : undefined;
|
|
266
269
|
// Decrypt input/output/error fields (WorkflowRun, Step)
|
|
267
270
|
result.input = await maybeDecrypt(result.input, k);
|
|
268
271
|
result.output = await maybeDecrypt(result.output, k);
|
|
@@ -342,4 +345,4 @@ export async function hydrateResourceIO(resource, keyResolver) {
|
|
|
342
345
|
// Post-process: swap encrypted Uint8Arrays and expired stubs for CLI-styled objects
|
|
343
346
|
return replaceEncryptedAndExpiredWithRef(hydrated);
|
|
344
347
|
}
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L2h5ZHJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixJQUFJLHdCQUF3QixFQUM3QyxlQUFlLEVBQ2YsYUFBYSxFQUNiLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsdUJBQXVCLEdBQ3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVcxQixvREFBb0Q7QUFDcEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFVBQVUsRUFDVixXQUFXLEVBRVgsZUFBZSxFQUVmLFVBQVUsR0FDWCxNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLDhFQUE4RTtBQUM5RSwyQ0FBMkM7QUFDM0MsOEVBQThFO0FBRTlFOzs7R0FHRztBQUNILE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBQ2hELENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUNkLE1BQWMsRUFDZCxPQUFtRDtRQUVuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sZUFBZSxHQUFHLE1BQU0sRUFBRSxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNoRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLGVBQWUsQ0FBQztRQUNyRSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTztZQUNwQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLFdBQVcsQ0FBQztZQUM5QyxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNuQixPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBRUQsOEVBQThFO0FBQzlFLHFEQUFxRDtBQUNyRCw4RUFBOEU7QUFFOUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxnQkFBZ0I7SUFDcEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2QsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBRUQsMkRBQTJEO0FBQzNELE1BQU0sYUFBYSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUU3QyxtRkFBbUY7QUFDbkYsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFjO0lBQzNDLE9BQU8sS0FBSyxZQUFZLGdCQUFnQixDQUFDO0FBQzNDLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsbURBQW1EO0FBQ25ELDhFQUE4RTtBQUU5RTs7Ozs7O0dBTUc7QUFDSCxNQUFNLGNBQWM7SUFDbEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFFRCx5REFBeUQ7QUFDekQsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUV6QyxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFjO0lBQ3pDLE9BQU8sS0FBSyxZQUFZLGNBQWMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLHNDQUFzQztBQUN0Qyw4RUFBOEU7QUFFOUU7Ozs7R0FJRztBQUNILE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxPQUFPO0lBQ1AsV0FBVztJQUNYLFlBQVk7SUFDWixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLGFBQWE7SUFDYixXQUFXO0lBQ1gsVUFBVTtDQUNGLENBQUM7QUFFWDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLDBCQUEwQixDQUNqQyxPQUFnQztJQUVoQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtZQUN0QyxLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxJQUFJLEdBQTRCO29CQUNwQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7aUJBQ2xCLENBQUM7Z0JBQ0YsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUksSUFBMkIsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xELENBQUM7Z0JBQ0Qsc0VBQXNFO2dCQUN0RSxxREFBcUQ7Z0JBQ3JELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxVQUFVLEVBQUUsS0FBSztZQUNqQixRQUFRLEVBQUUsSUFBSTtZQUNkLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxVQUFVLGNBQWM7SUFDNUIsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDdEMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDakMsTUFBTSxPQUFPLEdBQUksWUFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyRSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTztRQUNMLEdBQUcsWUFBWTtRQUNmLEdBQUcsYUFBYTtRQUNoQixzRUFBc0U7UUFDdEUsR0FBRyxxQkFBcUI7UUFDeEIscUVBQXFFO1FBQ3JFLG9FQUFvRTtRQUNwRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixvRkFBb0Y7WUFDcEYsTUFBTSxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsY0FBYSxDQUFDLEVBQUUsQ0FBQyxPQUFRLENBQUM7WUFDbEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2dCQUNkLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUNuQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7b0JBQ3hCLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDOUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNSLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLG9GQUFvRjtZQUNwRixNQUFNLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxjQUFhLENBQUMsRUFBRSxDQUFDLFFBQVMsQ0FBQztZQUNwRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzVCLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxPQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDbkMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzVCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTthQUNqQixDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxpRUFBaUU7UUFDakUsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRztRQUM5RCxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQiwrREFBK0Q7WUFDL0QsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUNELE9BQU8sSUFBSSxtQkFBbUIsQ0FDNUIsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUMvQixLQUFLLENBQUMsT0FBTyxFQUNiLEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxrQ0FBa0M7QUFDbEMsOEVBQThFO0FBRTlFLElBQUksY0FBYyxHQUFvQixJQUFJLENBQUM7QUFFM0MsU0FBUyxXQUFXO0lBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixjQUFjLEdBQUcsY0FBYyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUscUJBQXFCO0FBQ3JCLDhFQUE4RTtBQUU5RTs7Ozs7Ozs7O0dBU0c7QUFDSCxLQUFLLFVBQVUsa0JBQWtCLENBUy9CLFFBQVcsRUFBRSxRQUErQjtJQUM1QyxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBRS9CLE1BQU0sS0FBSyxHQUFJLFFBQWdCLENBQUMsS0FBMkIsQ0FBQztJQUM1RCxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBRTVCLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUUvQixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFdkQsd0RBQXdEO1FBQ3hELE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsTUFBYyxDQUFDLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBRSxNQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXJFLGdDQUFnQztRQUNoQyxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFekQsbUNBQW1DO1FBQ25DLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0QsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxPQUFPLEdBQUcsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpFLHFFQUFxRTtRQUNyRSxxRUFBcUU7UUFDckUsc0RBQXNEO1FBQ3RELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUVELHNFQUFzRTtRQUN0RSxpRUFBaUU7UUFDakUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsS0FBSyxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsYUFBYTtBQUNiLDhFQUE4RTtBQUU5RSxvRkFBb0Y7QUFDcEYsU0FBUyxZQUFZLENBQUMsS0FBYztJQUNsQyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLGFBQWEsQ0FBQztJQUNqRCxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM3QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlDQUFpQyxDQUFJLFFBQVc7SUFDdkQsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDL0QsTUFBTSxDQUFDLEdBQUcsUUFBbUMsQ0FBQztJQUM5QyxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFFeEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3RCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUksTUFBTSxDQUFDLFNBQXFDLEVBQUUsQ0FBQztRQUNoRSxNQUFNLFNBQVMsR0FDYixPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ25ELEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLE1BQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxRQUFXLEVBQ1gsV0FBbUM7SUFFbkMsd0VBQXdFO0lBQ3hFLE1BQU0sWUFBWSxHQUFHLE1BQU0sa0JBQWtCLENBQzNDLFFBQWUsRUFDZixXQUFXLElBQUksSUFBSSxDQUNwQixDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFNLENBQUM7SUFDNUUsb0ZBQW9GO0lBQ3BGLE9BQU8saUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0xJLXNwZWNpZmljIGh5ZHJhdGlvbiBmb3IgbzExeSBkaXNwbGF5LlxuICpcbiAqIE5vZGUuanMgcmV2aXZlcnMgdGhhdCB1c2UgYEJ1ZmZlci5mcm9tKClgIGZvciBiYXNlNjQgZGVjb2RpbmcgYW5kIGFkZFxuICogYHV0aWwuaW5zcGVjdC5jdXN0b21gIHRvIENsYXNzSW5zdGFuY2VSZWYgZm9yIHByZXR0eSBDTEkgb3V0cHV0LlxuICovXG5cbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgZ2V0Q29tbW9uUmV2aXZlcnMsIG1heWJlRGVjcnlwdCB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHtcbiAgQ2xhc3NJbnN0YW5jZVJlZixcbiAgZXh0cmFjdENsYXNzTmFtZSxcbiAgaHlkcmF0ZVJlc291cmNlSU8gYXMgaHlkcmF0ZVJlc291cmNlSU9HZW5lcmljLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzRXhwaXJlZFN0dWIsXG4gIGlzUnVuUmVmLFxuICBvYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG4gIHR5cGUgUmV2aXZlcnMsXG4gIHNlcmlhbGl6ZWRJbnN0YW5jZVRvUmVmLFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uLWZvcm1hdCc7XG5pbXBvcnQgeyBwYXJzZUNsYXNzTmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB7IGdldEV2ZW50RGF0YVJlZkZpZWxkcyB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyBhbiBlbmNyeXB0aW9uIGtleSBmb3IgYSBydW4sIG9yIG51bGwgdG8gc2tpcFxuICogZGVjcnlwdGlvbi4gQWNjZXB0cyBhIHJ1bklkIOKAlCB0aGUgcmVzb2x2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGxvb2tpbmdcbiAqIHVwIHRoZSBXb3JrZmxvd1J1biBpbnRlcm5hbGx5ICh3aXRoIGNhY2hpbmcpIGlmIHRoZSBXb3JsZCBuZWVkcyBpdC5cbiAqL1xuZXhwb3J0IHR5cGUgRW5jcnlwdGlvbktleVJlc29sdmVyID1cbiAgfCAoKHJ1bklkOiBzdHJpbmcpID0+IFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD4pXG4gIHwgbnVsbDtcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGFuZCB1dGlsaXRpZXMgdGhhdCBjb25zdW1lcnMgbmVlZFxuZXhwb3J0IHtcbiAgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUsXG4gIENsYXNzSW5zdGFuY2VSZWYsXG4gIEVOQ1JZUFRFRF9QTEFDRUhPTERFUixcbiAgZXh0cmFjdFN0cmVhbUlkcyxcbiAgaXNDbGFzc0luc3RhbmNlUmVmLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzU3RyZWFtSWQsXG4gIGlzU3RyZWFtUmVmLFxuICB0eXBlIFJldml2ZXJzLFxuICBTVFJFQU1fUkVGX1RZUEUsXG4gIHR5cGUgU3RyZWFtUmVmLFxuICB0cnVuY2F0ZUlkLFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uLWZvcm1hdCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0xJIENsYXNzSW5zdGFuY2VSZWYgd2l0aCBpbnNwZWN0LmN1c3RvbVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXh0ZW5kZWQgQ2xhc3NJbnN0YW5jZVJlZiB3aXRoIE5vZGUuanMgYHV0aWwuaW5zcGVjdC5jdXN0b21gIGZvclxuICogcHJldHR5IENMSSBvdXRwdXQ6IGBDbGFzc05hbWVAZmlsZW5hbWUgeyAuLi5kYXRhIH1gXG4gKi9cbmNsYXNzIENMSUNsYXNzSW5zdGFuY2VSZWYgZXh0ZW5kcyBDbGFzc0luc3RhbmNlUmVmIHtcbiAgW2luc3BlY3QuY3VzdG9tXShcbiAgICBfZGVwdGg6IG51bWJlcixcbiAgICBvcHRpb25zOiBpbXBvcnQoJ25vZGU6dXRpbCcpLkluc3BlY3RPcHRpb25zU3R5bGl6ZWRcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhU3RyID0gaW5zcGVjdCh0aGlzLmRhdGEsIHsgLi4ub3B0aW9ucywgZGVwdGg6IG9wdGlvbnMuZGVwdGggfSk7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VDbGFzc05hbWUodGhpcy5jbGFzc0lkKTtcbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSBwYXJzZWQ/Lm1vZHVsZVNwZWNpZmllciA/PyB0aGlzLmNsYXNzSWQ7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBtb2R1bGVTcGVjaWZpZXIuc3BsaXQoJy8nKS5wb3AoKSA/PyBtb2R1bGVTcGVjaWZpZXI7XG4gICAgY29uc3Qgc3R5bGVkRmlsZU5hbWUgPSBvcHRpb25zLnN0eWxpemVcbiAgICAgID8gb3B0aW9ucy5zdHlsaXplKGBAJHtmaWxlTmFtZX1gLCAndW5kZWZpbmVkJylcbiAgICAgIDogYEAke2ZpbGVOYW1lfWA7XG4gICAgcmV0dXJuIGAke3RoaXMuY2xhc3NOYW1lfSR7c3R5bGVkRmlsZU5hbWV9ICR7ZGF0YVN0cn1gO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0xJIGVuY3J5cHRlZCBkYXRhIHBsYWNlaG9sZGVyIHdpdGggY3VzdG9tIGluc3BlY3Rcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFBsYWNlaG9sZGVyIG9iamVjdCBmb3IgZW5jcnlwdGVkIGRhdGEgZmllbGRzIGluIENMSSBvdXRwdXQuXG4gKlxuICogVXNlcyBgdXRpbC5pbnNwZWN0LmN1c3RvbWAgdG8gcmVuZGVyIGFzIGEgc3R5bGVkLCB1bnF1b3RlZCBzdHJpbmdcbiAqIChlLmcuLCBkaW0geWVsbG93IFwi8J+UkiBFbmNyeXB0ZWRcIikgaW5zdGVhZCBvZiBhIHBsYWluIHF1b3RlZCBzdHJpbmcuXG4gKiBBbHNvIHByb3ZpZGVzIGB0b0pTT04oKWAgZm9yIGAtLWpzb25gIG91dHB1dC5cbiAqL1xuY2xhc3MgRW5jcnlwdGVkRGF0YVJlZiB7XG4gIFtpbnNwZWN0LmN1c3RvbV0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2hhbGsuZGltLnllbGxvdygnXFx1ezFGNTEyfSBFbmNyeXB0ZWQnKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXFx1ezFGNTEyfSBFbmNyeXB0ZWQnO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJztcbiAgfVxufVxuXG4vKiogU2luZ2xldG9uIGVuY3J5cHRlZCBkYXRhIHBsYWNlaG9sZGVyIGZvciBDTEkgZGlzcGxheSAqL1xuY29uc3QgRU5DUllQVEVEX1JFRiA9IG5ldyBFbmNyeXB0ZWREYXRhUmVmKCk7XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIEVuY3J5cHRlZERhdGFSZWYgKGZvciBjdXN0b20gdGFibGUgZm9ybWF0dGluZyBpbiBDTEkpICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbmNyeXB0ZWRSZWYodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFbmNyeXB0ZWREYXRhUmVmIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRW5jcnlwdGVkRGF0YVJlZjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDTEkgZXhwaXJlZCBkYXRhIHBsYWNlaG9sZGVyIHdpdGggY3VzdG9tIGluc3BlY3Rcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFBsYWNlaG9sZGVyIG9iamVjdCBmb3IgZXhwaXJlZCBkYXRhIGZpZWxkcyBpbiBDTEkgb3V0cHV0LlxuICpcbiAqIFVzZXMgYHV0aWwuaW5zcGVjdC5jdXN0b21gIHRvIHJlbmRlciBhcyBhIHN0eWxlZCwgdW5xdW90ZWQgc3RyaW5nXG4gKiAoZS5nLiwgZGltIGdyYXkgXCI8ZGF0YSBleHBpcmVkPlwiKSBpbnN0ZWFkIG9mIGEgcmF3IHN0dWIgb2JqZWN0LlxuICogQWxzbyBwcm92aWRlcyBgdG9KU09OKClgIGZvciBgLS1qc29uYCBvdXRwdXQuXG4gKi9cbmNsYXNzIEV4cGlyZWREYXRhUmVmIHtcbiAgW2luc3BlY3QuY3VzdG9tXSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjaGFsay5ncmF5KCc8ZGF0YSBleHBpcmVkPicpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICc8ZGF0YSBleHBpcmVkPic7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnPGRhdGEgZXhwaXJlZD4nO1xuICB9XG59XG5cbi8qKiBTaW5nbGV0b24gZXhwaXJlZCBkYXRhIHBsYWNlaG9sZGVyIGZvciBDTEkgZGlzcGxheSAqL1xuY29uc3QgRVhQSVJFRF9SRUYgPSBuZXcgRXhwaXJlZERhdGFSZWYoKTtcblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gRXhwaXJlZERhdGFSZWYgKGZvciBjdXN0b20gdGFibGUgZm9ybWF0dGluZyBpbiBDTEkpICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeHBpcmVkUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRXhwaXJlZERhdGFSZWYge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFeHBpcmVkRGF0YVJlZjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDTEkgcmV2aXZlcnMgKE5vZGUuanMsIHVzZXMgQnVmZmVyKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogVGhlIHNldCBvZiByZWR1Y2VyIGtleXMgd2hvc2UgYGdldENvbW1vblJldml2ZXJzKClgIG91dHB1dCBwcm9kdWNlcyBhXG4gKiBuYXRpdmUgYEVycm9yYCBpbnN0YW5jZS4gV2Ugd3JhcCBlYWNoIG9mIHRoZXNlIHdpdGggYW4gYWRkaXRpb25hbFxuICogYHRvSlNPTmAgYXR0YWNobWVudCBpbiBDTEkgbW9kZSAoc2VlIGB3cmFwRXJyb3JSZXZpdmVyV2l0aFRvSlNPTmApLlxuICovXG5jb25zdCBFUlJPUl9SRVZJVkVSX0tFWVMgPSBbXG4gICdBZ2dyZWdhdGVFcnJvcicsXG4gICdET01FeGNlcHRpb24nLFxuICAnRXJyb3InLFxuICAnRXZhbEVycm9yJyxcbiAgJ0ZhdGFsRXJyb3InLFxuICAnSG9va0NvbmZsaWN0RXJyb3InLFxuICAnUmFuZ2VFcnJvcicsXG4gICdSZWZlcmVuY2VFcnJvcicsXG4gICdSZXRyeWFibGVFcnJvcicsXG4gICdSdW50aW1lRGVjcnlwdGlvbkVycm9yJyxcbiAgJ1N5bnRheEVycm9yJyxcbiAgJ1R5cGVFcnJvcicsXG4gICdVUklFcnJvcicsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFdyYXBzIGEgcnVudGltZSBFcnJvciByZXZpdmVyIHNvIHRoYXQgdGhlIHByb2R1Y2VkIGluc3RhbmNlIGNhcnJpZXMgYVxuICogbm9uLWVudW1lcmFibGUgYHRvSlNPTmAgbWV0aG9kLiBUaGUgcnVudGltZSByZXZpdmVycyByZXR1cm4gcmVhbCBgRXJyb3JgXG4gKiBpbnN0YW5jZXMgKGdvb2QgZm9yIGB1dGlsLmluc3BlY3RgLCBgaW5zdGFuY2VvZmAsIGB0b1N0cmluZ2AsIGV0Yy4pLCBidXRcbiAqIGBFcnJvci5wcm90b3R5cGVgJ3MgYG5hbWVgIC8gYG1lc3NhZ2VgIC8gYHN0YWNrYCAvIGBjYXVzZWAgYXJlXG4gKiBub24tZW51bWVyYWJsZSBhbmQgd291bGQgYmUgZHJvcHBlZCBieSBgSlNPTi5zdHJpbmdpZnlgIOKAlCB3aGljaCBpcyBob3dcbiAqIHRoZSBDTEkgZW1pdHMgaXRzIGAtLWpzb25gIG91dHB1dC4gQWRkaW5nIGB0b0pTT05gICh3aGljaCBgSlNPTi5zdHJpbmdpZnlgXG4gKiBjYWxscyBidXQgYHV0aWwuaW5zcGVjdGAgaWdub3JlcykgZ2l2ZXMgdXMgdGhlIGJlc3Qgb2YgYm90aCB3b3JsZHM6XG4gKiByb3VuZC10cmlwcGVkIGVycm9ycyByZW5kZXIgY2xlYW5seSBpbiBib3RoIG1vZGVzIHdpdGhvdXQgdGhlXG4gKiBkYXRhLXZlcnN1cy1kaXNwbGF5IHRyYWRlb2ZmIHRoYXQgcGxhaW4tb2JqZWN0IHJldml2ZXJzIHdvdWxkIGZvcmNlLlxuICpcbiAqIFN1YmNsYXNzLXNwZWNpZmljIGVudW1lcmFibGUgZmllbGRzIChlLmcuIGBSZXRyeWFibGVFcnJvci5yZXRyeUFmdGVyYCxcbiAqIGBBZ2dyZWdhdGVFcnJvci5lcnJvcnNgLCBgRmF0YWxFcnJvci5mYXRhbGApIGFyZSBwaWNrZWQgdXAgYXV0b21hdGljYWxseVxuICogdmlhIGBPYmplY3QuYXNzaWduYCBhZnRlciB0aGUgYmFzZSBmaWVsZHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gZW51bWVyYXRlXG4gKiB0aGVtIHBlci1zdWJjbGFzcy5cbiAqL1xuZnVuY3Rpb24gd3JhcEVycm9yUmV2aXZlcldpdGhUb0pTT04oXG4gIHJldml2ZXI6ICh2YWx1ZTogYW55KSA9PiB1bmtub3duXG4pOiAodmFsdWU6IGFueSkgPT4gdW5rbm93biB7XG4gIHJldHVybiAodmFsdWUpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSByZXZpdmVyKHZhbHVlKTtcbiAgICBpZiAoIShyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikpIHJldHVybiByZXN1bHQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgJ3RvSlNPTicsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAodGhpczogRXJyb3IpIHtcbiAgICAgICAgY29uc3QganNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCdjYXVzZScgaW4gdGhpcykge1xuICAgICAgICAgIGpzb24uY2F1c2UgPSAodGhpcyBhcyB7IGNhdXNlOiB1bmtub3duIH0pLmNhdXNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBpY2sgdXAgc3ViY2xhc3Mtc3BlY2lmaWMgZW51bWVyYWJsZSBmaWVsZHMgKGUuZy4gRmF0YWxFcnJvci5mYXRhbCxcbiAgICAgICAgLy8gUmV0cnlhYmxlRXJyb3IucmV0cnlBZnRlciwgQWdncmVnYXRlRXJyb3IuZXJyb3JzKS5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgcmV2aXZlcnMgdXNlZCBieSBDTEkgaW5zcGVjdCBvdXRwdXQuXG4gKlxuICogQnVpbHQgb24gdG9wIG9mIGBnZXRDb21tb25SZXZpdmVycygpYCBmcm9tIGBAd29ya2Zsb3cvY29yZWAgc28gdGhhdCB0aGVcbiAqIENMSSBzdGF5cyBpbiBzeW5jIHdpdGggdGhlIHJ1bnRpbWUncyByZXZpdmVyIHNldCBhdXRvbWF0aWNhbGx5LiBXaXRob3V0XG4gKiB0aGlzLCBldmVyeSBuZXcgcmV2aXZlciBhZGRlZCB0byBjb3JlIChlLmcuIGBGYXRhbEVycm9yYCxcbiAqIGBSZXRyeWFibGVFcnJvcmAsIHRoZSBidWlsdC1pbiBgRXJyb3JgIHN1YmNsYXNzZXMpIHdvdWxkIHNpbGVudGx5XG4gKiBkaXNhcHBlYXIgZnJvbSBDTEkgb3V0cHV0OiBkZXZhbHVlIHRocm93cyBcIlVua25vd24gdHlwZSBYXCIgZm9yXG4gKiB1bnJlY29nbml6ZWQgcmVkdWNlZCB0eXBlcywgYW5kIGBoeWRyYXRlUmVzb3VyY2VJT2Agc3dhbGxvd3MgdGhhdCBlcnJvclxuICogYW5kIHN1cmZhY2VzIHRoZSByYXcgYFVpbnQ4QXJyYXlgIHBheWxvYWQgdG8gY29uc3VtZXJzIOKAlCB3aGljaCB0aGVuXG4gKiBzaG93cyB1cCBhcyBgc3RlcC5lcnJvcmAgLyBgcnVuLmVycm9yYCBieXRlIGR1bXBzIGluc3RlYWQgb2YgdXNhYmxlXG4gKiBgeyBtZXNzYWdlLCBzdGFjaywg4oCmIH1gIG9iamVjdHMuXG4gKlxuICogT24gdG9wIG9mIHRoZSBjb21tb24gc2V0IHdlIGxheWVyOlxuICogICAtIEEgYHRvSlNPTmAgc2hpbSBvbiBlYWNoIEVycm9yIHJldml2ZXIgc28gbm9uLWVudW1lcmFibGVcbiAqICAgICBgRXJyb3IucHJvdG90eXBlYCBmaWVsZHMgc3Vydml2ZSBgSlNPTi5zdHJpbmdpZnlgIGZvciBgLS1qc29uYCBvdXRwdXRcbiAqICAgICB3aGlsZSBsZWF2aW5nIGB1dGlsLmluc3BlY3RgIHJlbmRlcmluZyB1bnRvdWNoZWRcbiAqICAgLSBgb2JzZXJ2YWJpbGl0eVJldml2ZXJzYCBmb3Igc3RyZWFtcyAvIHN0ZXArd29ya2Zsb3cgZnVuY3Rpb24gcmVmc1xuICogICAtIENMSS1zcGVjaWZpYyBvdmVycmlkZXMgdGhhdCBwcm9kdWNlIGRpc3BsYXktZnJpZW5kbHkgcGxhY2Vob2xkZXJzXG4gKiAgICAgZm9yIGBDbGFzc2AgLyBgSW5zdGFuY2VgICh0aGUgcnVudGltZSB2ZXJzaW9ucyBuZWVkIGZ1bGwgY2xhc3NcbiAqICAgICBpZGVudGl0eSB3aGljaCB0aGUgQ0xJIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDTElSZXZpdmVycygpOiBSZXZpdmVycyB7XG4gIGNvbnN0IGJhc2VSZXZpdmVycyA9IGdldENvbW1vblJldml2ZXJzKGdsb2JhbFRoaXMpO1xuICBjb25zdCBlcnJvclJldml2ZXJzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIEVSUk9SX1JFVklWRVJfS0VZUy5mbGF0TWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHJldml2ZXIgPSAoYmFzZVJldml2ZXJzIGFzIFJldml2ZXJzKVtrZXldO1xuICAgICAgcmV0dXJuIHJldml2ZXIgPyBbW2tleSwgd3JhcEVycm9yUmV2aXZlcldpdGhUb0pTT04ocmV2aXZlcildXSA6IFtdO1xuICAgIH0pXG4gICk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVJldml2ZXJzLFxuICAgIC4uLmVycm9yUmV2aXZlcnMsXG4gICAgLy8gTzExeS1zcGVjaWZpYyByZXZpdmVycyAoc3RyZWFtcywgc3RlcCBmdW5jdGlvbnMg4oaSIGRpc3BsYXkgb2JqZWN0cykuXG4gICAgLi4ub2JzZXJ2YWJpbGl0eVJldml2ZXJzLFxuICAgIC8vIE5vZGUgYFJlcXVlc3RgIC8gYFJlc3BvbnNlYCByZXZpdmVycyB0aGF0IGRvbid0IHJlbHkgb24gcnVubmluZyBhblxuICAgIC8vIGFjdHVhbCBmZXRjaCBoYW5kbGVyIOKAlCB1c2VkIHRvIHJlbmRlciByZXF1ZXN0L3Jlc3BvbnNlIElPIGlubGluZS5cbiAgICBSZXF1ZXN0OiAodmFsdWUpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgUmVxdWVzdDogZnVuY3Rpb24gKCkge30gfS5SZXF1ZXN0ITtcbiAgICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHtcbiAgICAgICAgbWV0aG9kOiB2YWx1ZS5tZXRob2QsXG4gICAgICAgIHVybDogdmFsdWUudXJsLFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh2YWx1ZS5oZWFkZXJzKSxcbiAgICAgICAgYm9keTogdmFsdWUuYm9keSxcbiAgICAgICAgZHVwbGV4OiB2YWx1ZS5kdXBsZXgsXG4gICAgICAgIC4uLih2YWx1ZS5yZXNwb25zZVdyaXRhYmxlXG4gICAgICAgICAgPyB7IHJlc3BvbnNlV3JpdGFibGU6IHZhbHVlLnJlc3BvbnNlV3JpdGFibGUgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgUmVzcG9uc2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VBcnJvd0Z1bmN0aW9uOiBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlXG4gICAgICBjb25zdCBjdG9yID0geyBSZXNwb25zZTogZnVuY3Rpb24gKCkge30gfS5SZXNwb25zZSE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIHN0YXR1czogdmFsdWUuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB2YWx1ZS5zdGF0dXNUZXh0LFxuICAgICAgICB1cmw6IHZhbHVlLnVybCxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModmFsdWUuaGVhZGVycyksXG4gICAgICAgIGJvZHk6IHZhbHVlLmJvZHksXG4gICAgICAgIHJlZGlyZWN0ZWQ6IHZhbHVlLnJlZGlyZWN0ZWQsXG4gICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBDTEktc3BlY2lmaWMgb3ZlcnJpZGVzIGZvciBjbGFzcyBpbnN0YW5jZXMgd2l0aCBpbnNwZWN0LmN1c3RvbVxuICAgIENsYXNzOiAodmFsdWUpID0+IGA8Y2xhc3M6JHtleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpfT5gLFxuICAgIEluc3RhbmNlOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIFJ1biBpbnN0YW5jZXMgYXJlIHJlbmRlcmVkIGFzIFJ1blJlZiBmb3IgY2xpY2thYmxlIHJlbmRlcmluZ1xuICAgICAgY29uc3QgcnVuUmVmID0gc2VyaWFsaXplZEluc3RhbmNlVG9SZWYodmFsdWUpO1xuICAgICAgaWYgKGlzUnVuUmVmKHJ1blJlZikpIHtcbiAgICAgICAgcmV0dXJuIHJ1blJlZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQ0xJQ2xhc3NJbnN0YW5jZVJlZihcbiAgICAgICAgZXh0cmFjdENsYXNzTmFtZSh2YWx1ZS5jbGFzc0lkKSxcbiAgICAgICAgdmFsdWUuY2xhc3NJZCxcbiAgICAgICAgdmFsdWUuZGF0YVxuICAgICAgKTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByZS1idWlsdCBDTEkgcmV2aXZlcnMgKGNhY2hlZClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5sZXQgY2FjaGVkUmV2aXZlcnM6IFJldml2ZXJzIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldFJldml2ZXJzKCk6IFJldml2ZXJzIHtcbiAgaWYgKCFjYWNoZWRSZXZpdmVycykge1xuICAgIGNhY2hlZFJldml2ZXJzID0gZ2V0Q0xJUmV2aXZlcnMoKTtcbiAgfVxuICByZXR1cm4gY2FjaGVkUmV2aXZlcnM7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRGVjcnlwdGlvbiBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQcmUtcHJvY2VzcyBhIHJlc291cmNlJ3MgZGF0YSBmaWVsZHM6IGlmIHRoZSByZXNvbHZlciBpcyBwcm92aWRlZCBhbmRcbiAqIHRoZSBmaWVsZCBpcyBlbmNyeXB0ZWQsIGRlY3J5cHQgaXQgYmVmb3JlIGdlbmVyaWMgaHlkcmF0aW9uLlxuICpcbiAqIFVzZXMgY29yZSdzIGBtYXliZURlY3J5cHQoKWAgd2hpY2ggaGFuZGxlcyB0aGUgJ2VuY3InIHByZWZpeCBzdHJpcHBpbmdcbiAqIGFuZCBBRVMtR0NNIGRlY3J5cHRpb24gdHJhbnNwYXJlbnRseS5cbiAqXG4gKiBXaGVuIHRoZSByZXNvbHZlciBpcyBudWxsIChubyAtLWRlY3J5cHQgZmxhZyksIGVuY3J5cHRlZCBmaWVsZHMgcGFzc1xuICogdGhyb3VnaCBhcyBVaW50OEFycmF5IGFuZCBhcmUgcmVwbGFjZWQgd2l0aCBFbmNyeXB0ZWREYXRhUmVmIGluIHBvc3QtcHJvY2Vzc2luZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWF5YmVEZWNyeXB0RmllbGRzPFxuICBUIGV4dGVuZHMge1xuICAgIHJ1bklkPzogc3RyaW5nO1xuICAgIGlucHV0PzogYW55O1xuICAgIG91dHB1dD86IGFueTtcbiAgICBtZXRhZGF0YT86IGFueTtcbiAgICBldmVudFR5cGU/OiBzdHJpbmc7XG4gICAgZXZlbnREYXRhPzogYW55O1xuICB9LFxuPihyZXNvdXJjZTogVCwgcmVzb2x2ZXI6IEVuY3J5cHRpb25LZXlSZXNvbHZlcik6IFByb21pc2U8VD4ge1xuICBpZiAoIXJlc29sdmVyKSByZXR1cm4gcmVzb3VyY2U7XG5cbiAgY29uc3QgcnVuSWQgPSAocmVzb3VyY2UgYXMgYW55KS5ydW5JZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmICghcnVuSWQpIHJldHVybiByZXNvdXJjZTtcblxuICBjb25zdCByZXN1bHQgPSB7IC4uLnJlc291cmNlIH07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByYXdLZXkgPSBhd2FpdCByZXNvbHZlcihydW5JZCk7XG4gICAgY29uc3QgeyBpbXBvcnRLZXkgfSA9IGF3YWl0IGltcG9ydCgnQHdvcmtmbG93L2NvcmUvZW5jcnlwdGlvbicpO1xuICAgIGNvbnN0IGsgPSByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIERlY3J5cHQgaW5wdXQvb3V0cHV0L2Vycm9yIGZpZWxkcyAoV29ya2Zsb3dSdW4sIFN0ZXApXG4gICAgcmVzdWx0LmlucHV0ID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5pbnB1dCwgayk7XG4gICAgcmVzdWx0Lm91dHB1dCA9IGF3YWl0IG1heWJlRGVjcnlwdChyZXN1bHQub3V0cHV0LCBrKTtcbiAgICAocmVzdWx0IGFzIGFueSkuZXJyb3IgPSBhd2FpdCBtYXliZURlY3J5cHQoKHJlc3VsdCBhcyBhbnkpLmVycm9yLCBrKTtcblxuICAgIC8vIERlY3J5cHQgbWV0YWRhdGEgZmllbGQgKEhvb2spXG4gICAgcmVzdWx0Lm1ldGFkYXRhID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5tZXRhZGF0YSwgayk7XG5cbiAgICAvLyBEZWNyeXB0IGV2ZW50RGF0YSBmaWVsZHMgKEV2ZW50KVxuICAgIGlmIChyZXN1bHQuZXZlbnREYXRhICYmIHR5cGVvZiByZXN1bHQuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgZXZlbnREYXRhID0geyAuLi5yZXN1bHQuZXZlbnREYXRhIH07XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGdldEV2ZW50RGF0YVJlZkZpZWxkcyhyZXN1bHQuZXZlbnRUeXBlID8/ICcnKSkge1xuICAgICAgICBldmVudERhdGFbZmllbGRdID0gYXdhaXQgbWF5YmVEZWNyeXB0KGV2ZW50RGF0YVtmaWVsZF0sIGspO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmV2ZW50RGF0YSA9IGV2ZW50RGF0YTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cbiAgICAvLyBJZiB0aGUga2V5IGZldGNoIGZhaWxlZCBkdWUgdG8gYW4gSFRUUCBlcnJvciAoZS5nLiA0MjkgcmF0ZSBsaW1pdCxcbiAgICAvLyA1MDAgc2VydmVyIGVycm9yKSwgcmUtdGhyb3cgc28gdGhlIGNhbGxlciBzdXJmYWNlcyBhIGNsZWFyIGZhaWx1cmVcbiAgICAvLyBpbnN0ZWFkIG9mIHNpbGVudGx5IHNob3dpbmcgZW5jcnlwdGVkIHBsYWNlaG9sZGVycy5cbiAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnSFRUUCAnKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIC8vIERlY3J5cHRpb24gZmFpbGVkIChiYWQga2V5LCBjb3JydXB0ZWQgY2lwaGVydGV4dCwgZXRjLikg4oCUIGZhbGwgYmFja1xuICAgIC8vIHRvIHNob3dpbmcgZW5jcnlwdGVkIHBsYWNlaG9sZGVycyBpbnN0ZWFkIG9mIGNyYXNoaW5nIHRoZSBDTEkuXG4gICAgY29uc3QgeyBsb2dnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vY29uZmlnL2xvZy5qcycpO1xuICAgIGxvZ2dlci53YXJuKGBEZWNyeXB0aW9uIGZhaWxlZCBmb3IgcmVzb3VyY2UgJHtydW5JZH06ICR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIEFQSVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBSZXBsYWNlIGEgc2luZ2xlIGZpZWxkIHZhbHVlIHdpdGggYSBkaXNwbGF5IHJlZiBpZiBpdCdzIGVuY3J5cHRlZCBvciBleHBpcmVkLiAqL1xuZnVuY3Rpb24gdG9EaXNwbGF5UmVmKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmIChpc0VuY3J5cHRlZERhdGEodmFsdWUpKSByZXR1cm4gRU5DUllQVEVEX1JFRjtcbiAgaWYgKGlzRXhwaXJlZFN0dWIodmFsdWUpKSByZXR1cm4gRVhQSVJFRF9SRUY7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIGVuY3J5cHRlZCBVaW50OEFycmF5IHZhbHVlcyBhbmQgZXhwaXJlZCBzdHVicyB3aXRoIHN0eWxlZFxuICogcmVmIG9iamVjdHMgaW4ga25vd24gZGF0YSBmaWVsZHMgZm9yIGN1c3RvbSBpbnNwZWN0IHJlbmRlcmluZy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUVuY3J5cHRlZEFuZEV4cGlyZWRXaXRoUmVmPFQ+KHJlc291cmNlOiBUKTogVCB7XG4gIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIHJlc291cmNlO1xuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uciB9O1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICByZXN1bHRba2V5XSA9IHRvRGlzcGxheVJlZihyZXN1bHRba2V5XSk7XG4gIH1cblxuICBpZiAocmVzdWx0LmV2ZW50RGF0YSAmJiB0eXBlb2YgcmVzdWx0LmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBlZCA9IHsgLi4uKHJlc3VsdC5ldmVudERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG4gICAgY29uc3QgZXZlbnRUeXBlID1cbiAgICAgIHR5cGVvZiByZXN1bHQuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHJlc3VsdC5ldmVudFR5cGUgOiAnJztcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBnZXRFdmVudERhdGFSZWZGaWVsZHMoZXZlbnRUeXBlKSkge1xuICAgICAgZWRba2V5XSA9IHRvRGlzcGxheVJlZihlZFtrZXldKTtcbiAgICB9XG4gICAgcmVzdWx0LmV2ZW50RGF0YSA9IGVkO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufVxuXG4vKipcbiAqIEh5ZHJhdGUgdGhlIHNlcmlhbGl6ZWQgZGF0YSBmaWVsZHMgb2YgYSByZXNvdXJjZSBmb3IgQ0xJIGRpc3BsYXkuXG4gKlxuICogV2hlbiBgZW5jcnlwdG9yUmVzb2x2ZXJgIGlzIG51bGwgKGRlZmF1bHQgLyBubyAtLWRlY3J5cHQgZmxhZyksIGVuY3J5cHRlZFxuICogZmllbGRzIGFyZSBzaG93biBhcyBzdHlsZWQgXCLwn5SSIEVuY3J5cHRlZFwiIHBsYWNlaG9sZGVycyB2aWEgRW5jcnlwdGVkRGF0YVJlZi5cbiAqXG4gKiBXaGVuIGBlbmNyeXB0b3JSZXNvbHZlcmAgaXMgcHJvdmlkZWQgKC0tZGVjcnlwdCBmbGFnKSwgZW5jcnlwdGVkIGZpZWxkc1xuICogYXJlIGRlY3J5cHRlZCBiZWZvcmUgaHlkcmF0aW9uIHNvIHRoZSBhY3R1YWwgdXNlciBkYXRhIGlzIGRpc3BsYXllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVSZXNvdXJjZUlPPFQ+KFxuICByZXNvdXJjZTogVCxcbiAga2V5UmVzb2x2ZXI/OiBFbmNyeXB0aW9uS2V5UmVzb2x2ZXJcbik6IFByb21pc2U8VD4ge1xuICAvLyBQcmUtcHJvY2VzczogZGVjcnlwdCBhbnkgZW5jcnlwdGVkIGZpZWxkcyB3aGVuIGEgcmVzb2x2ZXIgaXMgcHJvdmlkZWRcbiAgY29uc3QgcHJlcHJvY2Vzc2VkID0gYXdhaXQgbWF5YmVEZWNyeXB0RmllbGRzKFxuICAgIHJlc291cmNlIGFzIGFueSxcbiAgICBrZXlSZXNvbHZlciA/PyBudWxsXG4gICk7XG4gIGNvbnN0IGh5ZHJhdGVkID0gaHlkcmF0ZVJlc291cmNlSU9HZW5lcmljKHByZXByb2Nlc3NlZCwgZ2V0UmV2aXZlcnMoKSkgYXMgVDtcbiAgLy8gUG9zdC1wcm9jZXNzOiBzd2FwIGVuY3J5cHRlZCBVaW50OEFycmF5cyBhbmQgZXhwaXJlZCBzdHVicyBmb3IgQ0xJLXN0eWxlZCBvYmplY3RzXG4gIHJldHVybiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhSZWYoaHlkcmF0ZWQpO1xufVxuIl19
|
|
348
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L2h5ZHJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixJQUFJLHdCQUF3QixFQUM3QyxlQUFlLEVBQ2YsYUFBYSxFQUNiLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsdUJBQXVCLEdBQ3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVcxQixvREFBb0Q7QUFDcEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFVBQVUsRUFDVixXQUFXLEVBRVgsZUFBZSxFQUVmLFVBQVUsR0FDWCxNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLDhFQUE4RTtBQUM5RSwyQ0FBMkM7QUFDM0MsOEVBQThFO0FBRTlFOzs7R0FHRztBQUNILE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBQ2hELENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUNkLE1BQWMsRUFDZCxPQUFtRDtRQUVuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztR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aUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDTEktc3BlY2lmaWMgaHlkcmF0aW9uIGZvciBvMTF5IGRpc3BsYXkuXG4gKlxuICogTm9kZS5qcyByZXZpdmVycyB0aGF0IHVzZSBgQnVmZmVyLmZyb20oKWAgZm9yIGJhc2U2NCBkZWNvZGluZyBhbmQgYWRkXG4gKiBgdXRpbC5pbnNwZWN0LmN1c3RvbWAgdG8gQ2xhc3NJbnN0YW5jZVJlZiBmb3IgcHJldHR5IENMSSBvdXRwdXQuXG4gKi9cblxuaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBnZXRDb21tb25SZXZpdmVycywgbWF5YmVEZWNyeXB0IH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1xuICBDbGFzc0luc3RhbmNlUmVmLFxuICBleHRyYWN0Q2xhc3NOYW1lLFxuICBoeWRyYXRlUmVzb3VyY2VJTyBhcyBoeWRyYXRlUmVzb3VyY2VJT0dlbmVyaWMsXG4gIGlzRW5jcnlwdGVkRGF0YSxcbiAgaXNFeHBpcmVkU3R1YixcbiAgaXNSdW5SZWYsXG4gIG9ic2VydmFiaWxpdHlSZXZpdmVycyxcbiAgdHlwZSBSZXZpdmVycyxcbiAgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcbmltcG9ydCB7IHBhcnNlQ2xhc3NOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHsgZ2V0RXZlbnREYXRhUmVmRmllbGRzIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGFuIGVuY3J5cHRpb24ga2V5IGZvciBhIHJ1biwgb3IgbnVsbCB0byBza2lwXG4gKiBkZWNyeXB0aW9uLiBBY2NlcHRzIGEgcnVuSWQg4oCUIHRoZSByZXNvbHZlciBpcyByZXNwb25zaWJsZSBmb3IgbG9va2luZ1xuICogdXAgdGhlIFdvcmtmbG93UnVuIGludGVybmFsbHkgKHdpdGggY2FjaGluZykgaWYgdGhlIFdvcmxkIG5lZWRzIGl0LlxuICovXG5leHBvcnQgdHlwZSBFbmNyeXB0aW9uS2V5UmVzb2x2ZXIgPVxuICB8ICgocnVuSWQ6IHN0cmluZykgPT4gUHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPilcbiAgfCBudWxsO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgYW5kIHV0aWxpdGllcyB0aGF0IGNvbnN1bWVycyBuZWVkXG5leHBvcnQge1xuICBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRSxcbiAgQ2xhc3NJbnN0YW5jZVJlZixcbiAgRU5DUllQVEVEX1BMQUNFSE9MREVSLFxuICBleHRyYWN0U3RyZWFtSWRzLFxuICBpc0NsYXNzSW5zdGFuY2VSZWYsXG4gIGlzRW5jcnlwdGVkRGF0YSxcbiAgaXNTdHJlYW1JZCxcbiAgaXNTdHJlYW1SZWYsXG4gIHR5cGUgUmV2aXZlcnMsXG4gIFNUUkVBTV9SRUZfVFlQRSxcbiAgdHlwZSBTdHJlYW1SZWYsXG4gIHRydW5jYXRlSWQsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDTEkgQ2xhc3NJbnN0YW5jZVJlZiB3aXRoIGluc3BlY3QuY3VzdG9tXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeHRlbmRlZCBDbGFzc0luc3RhbmNlUmVmIHdpdGggTm9kZS5qcyBgdXRpbC5pbnNwZWN0LmN1c3RvbWAgZm9yXG4gKiBwcmV0dHkgQ0xJIG91dHB1dDogYENsYXNzTmFtZUBmaWxlbmFtZSB7IC4uLmRhdGEgfWBcbiAqL1xuY2xhc3MgQ0xJQ2xhc3NJbnN0YW5jZVJlZiBleHRlbmRzIENsYXNzSW5zdGFuY2VSZWYge1xuICBbaW5zcGVjdC5jdXN0b21dKFxuICAgIF9kZXB0aDogbnVtYmVyLFxuICAgIG9wdGlvbnM6IGltcG9ydCgnbm9kZTp1dGlsJykuSW5zcGVjdE9wdGlvbnNTdHlsaXplZFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGFTdHIgPSBpbnNwZWN0KHRoaXMuZGF0YSwgeyAuLi5vcHRpb25zLCBkZXB0aDogb3B0aW9ucy5kZXB0aCB9KTtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNsYXNzTmFtZSh0aGlzLmNsYXNzSWQpO1xuICAgIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IHBhcnNlZD8ubW9kdWxlU3BlY2lmaWVyID8/IHRoaXMuY2xhc3NJZDtcbiAgICBjb25zdCBmaWxlTmFtZSA9IG1vZHVsZVNwZWNpZmllci5zcGxpdCgnLycpLnBvcCgpID8/IG1vZHVsZVNwZWNpZmllcjtcbiAgICBjb25zdCBzdHlsZWRGaWxlTmFtZSA9IG9wdGlvbnMuc3R5bGl6ZVxuICAgICAgPyBvcHRpb25zLnN0eWxpemUoYEAke2ZpbGVOYW1lfWAsICd1bmRlZmluZWQnKVxuICAgICAgOiBgQCR7ZmlsZU5hbWV9YDtcbiAgICByZXR1cm4gYCR7dGhpcy5jbGFzc05hbWV9JHtzdHlsZWRGaWxlTmFtZX0gJHtkYXRhU3RyfWA7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDTEkgZW5jcnlwdGVkIGRhdGEgcGxhY2Vob2xkZXIgd2l0aCBjdXN0b20gaW5zcGVjdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUGxhY2Vob2xkZXIgb2JqZWN0IGZvciBlbmNyeXB0ZWQgZGF0YSBmaWVsZHMgaW4gQ0xJIG91dHB1dC5cbiAqXG4gKiBVc2VzIGB1dGlsLmluc3BlY3QuY3VzdG9tYCB0byByZW5kZXIgYXMgYSBzdHlsZWQsIHVucXVvdGVkIHN0cmluZ1xuICogKGUuZy4sIGRpbSB5ZWxsb3cgXCLwn5SSIEVuY3J5cHRlZFwiKSBpbnN0ZWFkIG9mIGEgcGxhaW4gcXVvdGVkIHN0cmluZy5cbiAqIEFsc28gcHJvdmlkZXMgYHRvSlNPTigpYCBmb3IgYC0tanNvbmAgb3V0cHV0LlxuICovXG5jbGFzcyBFbmNyeXB0ZWREYXRhUmVmIHtcbiAgW2luc3BlY3QuY3VzdG9tXSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjaGFsay5kaW0ueWVsbG93KCdcXHV7MUY1MTJ9IEVuY3J5cHRlZCcpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdcXHV7MUY1MTJ9IEVuY3J5cHRlZCc7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXFx1ezFGNTEyfSBFbmNyeXB0ZWQnO1xuICB9XG59XG5cbi8qKiBTaW5nbGV0b24gZW5jcnlwdGVkIGRhdGEgcGxhY2Vob2xkZXIgZm9yIENMSSBkaXNwbGF5ICovXG5jb25zdCBFTkNSWVBURURfUkVGID0gbmV3IEVuY3J5cHRlZERhdGFSZWYoKTtcblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gRW5jcnlwdGVkRGF0YVJlZiAoZm9yIGN1c3RvbSB0YWJsZSBmb3JtYXR0aW5nIGluIENMSSkgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VuY3J5cHRlZFJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVuY3J5cHRlZERhdGFSZWYge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFbmNyeXB0ZWREYXRhUmVmO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENMSSBleHBpcmVkIGRhdGEgcGxhY2Vob2xkZXIgd2l0aCBjdXN0b20gaW5zcGVjdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUGxhY2Vob2xkZXIgb2JqZWN0IGZvciBleHBpcmVkIGRhdGEgZmllbGRzIGluIENMSSBvdXRwdXQuXG4gKlxuICogVXNlcyBgdXRpbC5pbnNwZWN0LmN1c3RvbWAgdG8gcmVuZGVyIGFzIGEgc3R5bGVkLCB1bnF1b3RlZCBzdHJpbmdcbiAqIChlLmcuLCBkaW0gZ3JheSBcIjxkYXRhIGV4cGlyZWQ+XCIpIGluc3RlYWQgb2YgYSByYXcgc3R1YiBvYmplY3QuXG4gKiBBbHNvIHByb3ZpZGVzIGB0b0pTT04oKWAgZm9yIGAtLWpzb25gIG91dHB1dC5cbiAqL1xuY2xhc3MgRXhwaXJlZERhdGFSZWYge1xuICBbaW5zcGVjdC5jdXN0b21dKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNoYWxrLmdyYXkoJzxkYXRhIGV4cGlyZWQ+Jyk7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJzxkYXRhIGV4cGlyZWQ+JztcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICc8ZGF0YSBleHBpcmVkPic7XG4gIH1cbn1cblxuLyoqIFNpbmdsZXRvbiBleHBpcmVkIGRhdGEgcGxhY2Vob2xkZXIgZm9yIENMSSBkaXNwbGF5ICovXG5jb25zdCBFWFBJUkVEX1JFRiA9IG5ldyBFeHBpcmVkRGF0YVJlZigpO1xuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBFeHBpcmVkRGF0YVJlZiAoZm9yIGN1c3RvbSB0YWJsZSBmb3JtYXR0aW5nIGluIENMSSkgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cGlyZWRSZWYodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFeHBpcmVkRGF0YVJlZiB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEV4cGlyZWREYXRhUmVmO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENMSSByZXZpdmVycyAoTm9kZS5qcywgdXNlcyBCdWZmZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIHJlZHVjZXIga2V5cyB3aG9zZSBgZ2V0Q29tbW9uUmV2aXZlcnMoKWAgb3V0cHV0IHByb2R1Y2VzIGFcbiAqIG5hdGl2ZSBgRXJyb3JgIGluc3RhbmNlLiBXZSB3cmFwIGVhY2ggb2YgdGhlc2Ugd2l0aCBhbiBhZGRpdGlvbmFsXG4gKiBgdG9KU09OYCBhdHRhY2htZW50IGluIENMSSBtb2RlIChzZWUgYHdyYXBFcnJvclJldml2ZXJXaXRoVG9KU09OYCkuXG4gKi9cbmNvbnN0IEVSUk9SX1JFVklWRVJfS0VZUyA9IFtcbiAgJ0FnZ3JlZ2F0ZUVycm9yJyxcbiAgJ0RPTUV4Y2VwdGlvbicsXG4gICdFcnJvcicsXG4gICdFdmFsRXJyb3InLFxuICAnRmF0YWxFcnJvcicsXG4gICdIb29rQ29uZmxpY3RFcnJvcicsXG4gICdSYW5nZUVycm9yJyxcbiAgJ1JlZmVyZW5jZUVycm9yJyxcbiAgJ1JldHJ5YWJsZUVycm9yJyxcbiAgJ1J1bnRpbWVEZWNyeXB0aW9uRXJyb3InLFxuICAnU3ludGF4RXJyb3InLFxuICAnVHlwZUVycm9yJyxcbiAgJ1VSSUVycm9yJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogV3JhcHMgYSBydW50aW1lIEVycm9yIHJldml2ZXIgc28gdGhhdCB0aGUgcHJvZHVjZWQgaW5zdGFuY2UgY2FycmllcyBhXG4gKiBub24tZW51bWVyYWJsZSBgdG9KU09OYCBtZXRob2QuIFRoZSBydW50aW1lIHJldml2ZXJzIHJldHVybiByZWFsIGBFcnJvcmBcbiAqIGluc3RhbmNlcyAoZ29vZCBmb3IgYHV0aWwuaW5zcGVjdGAsIGBpbnN0YW5jZW9mYCwgYHRvU3RyaW5nYCwgZXRjLiksIGJ1dFxuICogYEVycm9yLnByb3RvdHlwZWAncyBgbmFtZWAgLyBgbWVzc2FnZWAgLyBgc3RhY2tgIC8gYGNhdXNlYCBhcmVcbiAqIG5vbi1lbnVtZXJhYmxlIGFuZCB3b3VsZCBiZSBkcm9wcGVkIGJ5IGBKU09OLnN0cmluZ2lmeWAg4oCUIHdoaWNoIGlzIGhvd1xuICogdGhlIENMSSBlbWl0cyBpdHMgYC0tanNvbmAgb3V0cHV0LiBBZGRpbmcgYHRvSlNPTmAgKHdoaWNoIGBKU09OLnN0cmluZ2lmeWBcbiAqIGNhbGxzIGJ1dCBgdXRpbC5pbnNwZWN0YCBpZ25vcmVzKSBnaXZlcyB1cyB0aGUgYmVzdCBvZiBib3RoIHdvcmxkczpcbiAqIHJvdW5kLXRyaXBwZWQgZXJyb3JzIHJlbmRlciBjbGVhbmx5IGluIGJvdGggbW9kZXMgd2l0aG91dCB0aGVcbiAqIGRhdGEtdmVyc3VzLWRpc3BsYXkgdHJhZGVvZmYgdGhhdCBwbGFpbi1vYmplY3QgcmV2aXZlcnMgd291bGQgZm9yY2UuXG4gKlxuICogU3ViY2xhc3Mtc3BlY2lmaWMgZW51bWVyYWJsZSBmaWVsZHMgKGUuZy4gYFJldHJ5YWJsZUVycm9yLnJldHJ5QWZ0ZXJgLFxuICogYEFnZ3JlZ2F0ZUVycm9yLmVycm9yc2AsIGBGYXRhbEVycm9yLmZhdGFsYCkgYXJlIHBpY2tlZCB1cCBhdXRvbWF0aWNhbGx5XG4gKiB2aWEgYE9iamVjdC5hc3NpZ25gIGFmdGVyIHRoZSBiYXNlIGZpZWxkcywgc28gd2UgZG9uJ3QgaGF2ZSB0byBlbnVtZXJhdGVcbiAqIHRoZW0gcGVyLXN1YmNsYXNzLlxuICovXG5mdW5jdGlvbiB3cmFwRXJyb3JSZXZpdmVyV2l0aFRvSlNPTihcbiAgcmV2aXZlcjogKHZhbHVlOiBhbnkpID0+IHVua25vd25cbik6ICh2YWx1ZTogYW55KSA9PiB1bmtub3duIHtcbiAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHJldml2ZXIodmFsdWUpO1xuICAgIGlmICghKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSkgcmV0dXJuIHJlc3VsdDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCAndG9KU09OJywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uICh0aGlzOiBFcnJvcikge1xuICAgICAgICBjb25zdCBqc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoJ2NhdXNlJyBpbiB0aGlzKSB7XG4gICAgICAgICAganNvbi5jYXVzZSA9ICh0aGlzIGFzIHsgY2F1c2U6IHVua25vd24gfSkuY2F1c2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGljayB1cCBzdWJjbGFzcy1zcGVjaWZpYyBlbnVtZXJhYmxlIGZpZWxkcyAoZS5nLiBGYXRhbEVycm9yLmZhdGFsLFxuICAgICAgICAvLyBSZXRyeWFibGVFcnJvci5yZXRyeUFmdGVyLCBBZ2dyZWdhdGVFcnJvci5lcnJvcnMpLlxuICAgICAgICBPYmplY3QuYXNzaWduKGpzb24sIHRoaXMpO1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiByZXZpdmVycyB1c2VkIGJ5IENMSSBpbnNwZWN0IG91dHB1dC5cbiAqXG4gKiBCdWlsdCBvbiB0b3Agb2YgYGdldENvbW1vblJldml2ZXJzKClgIGZyb20gYEB3b3JrZmxvdy9jb3JlYCBzbyB0aGF0IHRoZVxuICogQ0xJIHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgcnVudGltZSdzIHJldml2ZXIgc2V0IGF1dG9tYXRpY2FsbHkuIFdpdGhvdXRcbiAqIHRoaXMsIGV2ZXJ5IG5ldyByZXZpdmVyIGFkZGVkIHRvIGNvcmUgKGUuZy4gYEZhdGFsRXJyb3JgLFxuICogYFJldHJ5YWJsZUVycm9yYCwgdGhlIGJ1aWx0LWluIGBFcnJvcmAgc3ViY2xhc3Nlcykgd291bGQgc2lsZW50bHlcbiAqIGRpc2FwcGVhciBmcm9tIENMSSBvdXRwdXQ6IGRldmFsdWUgdGhyb3dzIFwiVW5rbm93biB0eXBlIFhcIiBmb3JcbiAqIHVucmVjb2duaXplZCByZWR1Y2VkIHR5cGVzLCBhbmQgYGh5ZHJhdGVSZXNvdXJjZUlPYCBzd2FsbG93cyB0aGF0IGVycm9yXG4gKiBhbmQgc3VyZmFjZXMgdGhlIHJhdyBgVWludDhBcnJheWAgcGF5bG9hZCB0byBjb25zdW1lcnMg4oCUIHdoaWNoIHRoZW5cbiAqIHNob3dzIHVwIGFzIGBzdGVwLmVycm9yYCAvIGBydW4uZXJyb3JgIGJ5dGUgZHVtcHMgaW5zdGVhZCBvZiB1c2FibGVcbiAqIGB7IG1lc3NhZ2UsIHN0YWNrLCDigKYgfWAgb2JqZWN0cy5cbiAqXG4gKiBPbiB0b3Agb2YgdGhlIGNvbW1vbiBzZXQgd2UgbGF5ZXI6XG4gKiAgIC0gQSBgdG9KU09OYCBzaGltIG9uIGVhY2ggRXJyb3IgcmV2aXZlciBzbyBub24tZW51bWVyYWJsZVxuICogICAgIGBFcnJvci5wcm90b3R5cGVgIGZpZWxkcyBzdXJ2aXZlIGBKU09OLnN0cmluZ2lmeWAgZm9yIGAtLWpzb25gIG91dHB1dFxuICogICAgIHdoaWxlIGxlYXZpbmcgYHV0aWwuaW5zcGVjdGAgcmVuZGVyaW5nIHVudG91Y2hlZFxuICogICAtIGBvYnNlcnZhYmlsaXR5UmV2aXZlcnNgIGZvciBzdHJlYW1zIC8gc3RlcCt3b3JrZmxvdyBmdW5jdGlvbiByZWZzXG4gKiAgIC0gQ0xJLXNwZWNpZmljIG92ZXJyaWRlcyB0aGF0IHByb2R1Y2UgZGlzcGxheS1mcmllbmRseSBwbGFjZWhvbGRlcnNcbiAqICAgICBmb3IgYENsYXNzYCAvIGBJbnN0YW5jZWAgKHRoZSBydW50aW1lIHZlcnNpb25zIG5lZWQgZnVsbCBjbGFzc1xuICogICAgIGlkZW50aXR5IHdoaWNoIHRoZSBDTEkgZG9lc24ndCBoYXZlIGFjY2VzcyB0bylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENMSVJldml2ZXJzKCk6IFJldml2ZXJzIHtcbiAgY29uc3QgYmFzZVJldml2ZXJzID0gZ2V0Q29tbW9uUmV2aXZlcnMoZ2xvYmFsVGhpcyk7XG4gIGNvbnN0IGVycm9yUmV2aXZlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgRVJST1JfUkVWSVZFUl9LRVlTLmZsYXRNYXAoKGtleSkgPT4ge1xuICAgICAgY29uc3QgcmV2aXZlciA9IChiYXNlUmV2aXZlcnMgYXMgUmV2aXZlcnMpW2tleV07XG4gICAgICByZXR1cm4gcmV2aXZlciA/IFtba2V5LCB3cmFwRXJyb3JSZXZpdmVyV2l0aFRvSlNPTihyZXZpdmVyKV1dIDogW107XG4gICAgfSlcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlUmV2aXZlcnMsXG4gICAgLi4uZXJyb3JSZXZpdmVycyxcbiAgICAvLyBPMTF5LXNwZWNpZmljIHJldml2ZXJzIChzdHJlYW1zLCBzdGVwIGZ1bmN0aW9ucyDihpIgZGlzcGxheSBvYmplY3RzKS5cbiAgICAuLi5vYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG4gICAgLy8gTm9kZSBgUmVxdWVzdGAgLyBgUmVzcG9uc2VgIHJldml2ZXJzIHRoYXQgZG9uJ3QgcmVseSBvbiBydW5uaW5nIGFuXG4gICAgLy8gYWN0dWFsIGZldGNoIGhhbmRsZXIg4oCUIHVzZWQgdG8gcmVuZGVyIHJlcXVlc3QvcmVzcG9uc2UgSU8gaW5saW5lLlxuICAgIFJlcXVlc3Q6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VBcnJvd0Z1bmN0aW9uOiBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlXG4gICAgICBjb25zdCBjdG9yID0geyBSZXF1ZXN0OiBmdW5jdGlvbiAoKSB7fSB9LlJlcXVlc3QhO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwge1xuICAgICAgICBtZXRob2Q6IHZhbHVlLm1ldGhvZCxcbiAgICAgICAgdXJsOiB2YWx1ZS51cmwsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHZhbHVlLmhlYWRlcnMpLFxuICAgICAgICBib2R5OiB2YWx1ZS5ib2R5LFxuICAgICAgICBkdXBsZXg6IHZhbHVlLmR1cGxleCxcbiAgICAgICAgLi4uKHZhbHVlLnJlc3BvbnNlV3JpdGFibGVcbiAgICAgICAgICA/IHsgcmVzcG9uc2VXcml0YWJsZTogdmFsdWUucmVzcG9uc2VXcml0YWJsZSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICBSZXNwb25zZTogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFJlc3BvbnNlOiBmdW5jdGlvbiAoKSB7fSB9LlJlc3BvbnNlITtcbiAgICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHtcbiAgICAgICAgc3RhdHVzOiB2YWx1ZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHZhbHVlLnN0YXR1c1RleHQsXG4gICAgICAgIHVybDogdmFsdWUudXJsLFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh2YWx1ZS5oZWFkZXJzKSxcbiAgICAgICAgYm9keTogdmFsdWUuYm9keSxcbiAgICAgICAgcmVkaXJlY3RlZDogdmFsdWUucmVkaXJlY3RlZCxcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIC8vIENMSS1zcGVjaWZpYyBvdmVycmlkZXMgZm9yIGNsYXNzIGluc3RhbmNlcyB3aXRoIGluc3BlY3QuY3VzdG9tXG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4gYDxjbGFzczoke2V4dHJhY3RDbGFzc05hbWUodmFsdWUuY2xhc3NJZCl9PmAsXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gUnVuIGluc3RhbmNlcyBhcmUgcmVuZGVyZWQgYXMgUnVuUmVmIGZvciBjbGlja2FibGUgcmVuZGVyaW5nXG4gICAgICBjb25zdCBydW5SZWYgPSBzZXJpYWxpemVkSW5zdGFuY2VUb1JlZih2YWx1ZSk7XG4gICAgICBpZiAoaXNSdW5SZWYocnVuUmVmKSkge1xuICAgICAgICByZXR1cm4gcnVuUmVmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBDTElDbGFzc0luc3RhbmNlUmVmKFxuICAgICAgICBleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpLFxuICAgICAgICB2YWx1ZS5jbGFzc0lkLFxuICAgICAgICB2YWx1ZS5kYXRhXG4gICAgICApO1xuICAgIH0sXG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJlLWJ1aWx0IENMSSByZXZpdmVycyAoY2FjaGVkKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmxldCBjYWNoZWRSZXZpdmVyczogUmV2aXZlcnMgfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gZ2V0UmV2aXZlcnMoKTogUmV2aXZlcnMge1xuICBpZiAoIWNhY2hlZFJldml2ZXJzKSB7XG4gICAgY2FjaGVkUmV2aXZlcnMgPSBnZXRDTElSZXZpdmVycygpO1xuICB9XG4gIHJldHVybiBjYWNoZWRSZXZpdmVycztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEZWNyeXB0aW9uIGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFByZS1wcm9jZXNzIGEgcmVzb3VyY2UncyBkYXRhIGZpZWxkczogaWYgdGhlIHJlc29sdmVyIGlzIHByb3ZpZGVkIGFuZFxuICogdGhlIGZpZWxkIGlzIGVuY3J5cHRlZCwgZGVjcnlwdCBpdCBiZWZvcmUgZ2VuZXJpYyBoeWRyYXRpb24uXG4gKlxuICogVXNlcyBjb3JlJ3MgYG1heWJlRGVjcnlwdCgpYCB3aGljaCBoYW5kbGVzIHRoZSAnZW5jcicgcHJlZml4IHN0cmlwcGluZ1xuICogYW5kIEFFUy1HQ00gZGVjcnlwdGlvbiB0cmFuc3BhcmVudGx5LlxuICpcbiAqIFdoZW4gdGhlIHJlc29sdmVyIGlzIG51bGwgKG5vIC0tZGVjcnlwdCBmbGFnKSwgZW5jcnlwdGVkIGZpZWxkcyBwYXNzXG4gKiB0aHJvdWdoIGFzIFVpbnQ4QXJyYXkgYW5kIGFyZSByZXBsYWNlZCB3aXRoIEVuY3J5cHRlZERhdGFSZWYgaW4gcG9zdC1wcm9jZXNzaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBtYXliZURlY3J5cHRGaWVsZHM8XG4gIFQgZXh0ZW5kcyB7XG4gICAgcnVuSWQ/OiBzdHJpbmc7XG4gICAgaW5wdXQ/OiBhbnk7XG4gICAgb3V0cHV0PzogYW55O1xuICAgIG1ldGFkYXRhPzogYW55O1xuICAgIGV2ZW50VHlwZT86IHN0cmluZztcbiAgICBldmVudERhdGE/OiBhbnk7XG4gIH0sXG4+KHJlc291cmNlOiBULCByZXNvbHZlcjogRW5jcnlwdGlvbktleVJlc29sdmVyKTogUHJvbWlzZTxUPiB7XG4gIGlmICghcmVzb2x2ZXIpIHJldHVybiByZXNvdXJjZTtcblxuICBjb25zdCBydW5JZCA9IChyZXNvdXJjZSBhcyBhbnkpLnJ1bklkIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKCFydW5JZCkgcmV0dXJuIHJlc291cmNlO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ucmVzb3VyY2UgfTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJhd0tleSA9IGF3YWl0IHJlc29sdmVyKHJ1bklkKTtcbiAgICAvLyBSZXNvbHZlIHRoZSBmdWxsIGtleSBjYXBhYmlsaXR5IHNvIGAtLWRlY3J5cHRgIGNhbiBvcGVuIHNlYWxlZFxuICAgIC8vICgnZW5jcCcpIHBheWxvYWRzIHRoYXQgb3RoZXIgcnVucyB3cm90ZSB0byB0aGlzIG9uZSwgbm90IGp1c3QgdGhlXG4gICAgLy8gcnVuJ3Mgb3duIHN5bW1ldHJpYyAoJ2VuY3InKSBwYXlsb2Fkcy5cbiAgICBjb25zdCB7IGRlcml2ZVJ1blBheWxvYWRLZXlzIH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgICAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbidcbiAgICApO1xuICAgIGNvbnN0IGsgPSByYXdLZXkgPyBhd2FpdCBkZXJpdmVSdW5QYXlsb2FkS2V5cyhyYXdLZXkpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gRGVjcnlwdCBpbnB1dC9vdXRwdXQvZXJyb3IgZmllbGRzIChXb3JrZmxvd1J1biwgU3RlcClcbiAgICByZXN1bHQuaW5wdXQgPSBhd2FpdCBtYXliZURlY3J5cHQocmVzdWx0LmlucHV0LCBrKTtcbiAgICByZXN1bHQub3V0cHV0ID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5vdXRwdXQsIGspO1xuICAgIChyZXN1bHQgYXMgYW55KS5lcnJvciA9IGF3YWl0IG1heWJlRGVjcnlwdCgocmVzdWx0IGFzIGFueSkuZXJyb3IsIGspO1xuXG4gICAgLy8gRGVjcnlwdCBtZXRhZGF0YSBmaWVsZCAoSG9vaylcbiAgICByZXN1bHQubWV0YWRhdGEgPSBhd2FpdCBtYXliZURlY3J5cHQocmVzdWx0Lm1ldGFkYXRhLCBrKTtcblxuICAgIC8vIERlY3J5cHQgZXZlbnREYXRhIGZpZWxkcyAoRXZlbnQpXG4gICAgaWYgKHJlc3VsdC5ldmVudERhdGEgJiYgdHlwZW9mIHJlc3VsdC5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBldmVudERhdGEgPSB7IC4uLnJlc3VsdC5ldmVudERhdGEgfTtcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZ2V0RXZlbnREYXRhUmVmRmllbGRzKHJlc3VsdC5ldmVudFR5cGUgPz8gJycpKSB7XG4gICAgICAgIGV2ZW50RGF0YVtmaWVsZF0gPSBhd2FpdCBtYXliZURlY3J5cHQoZXZlbnREYXRhW2ZpZWxkXSwgayk7XG4gICAgICB9XG4gICAgICByZXN1bHQuZXZlbnREYXRhID0gZXZlbnREYXRhO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblxuICAgIC8vIElmIHRoZSBrZXkgZmV0Y2ggZmFpbGVkIGR1ZSB0byBhbiBIVFRQIGVycm9yIChlLmcuIDQyOSByYXRlIGxpbWl0LFxuICAgIC8vIDUwMCBzZXJ2ZXIgZXJyb3IpLCByZS10aHJvdyBzbyB0aGUgY2FsbGVyIHN1cmZhY2VzIGEgY2xlYXIgZmFpbHVyZVxuICAgIC8vIGluc3RlYWQgb2Ygc2lsZW50bHkgc2hvd2luZyBlbmNyeXB0ZWQgcGxhY2Vob2xkZXJzLlxuICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdIVFRQICcpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgLy8gRGVjcnlwdGlvbiBmYWlsZWQgKGJhZCBrZXksIGNvcnJ1cHRlZCBjaXBoZXJ0ZXh0LCBldGMuKSDigJQgZmFsbCBiYWNrXG4gICAgLy8gdG8gc2hvd2luZyBlbmNyeXB0ZWQgcGxhY2Vob2xkZXJzIGluc3RlYWQgb2YgY3Jhc2hpbmcgdGhlIENMSS5cbiAgICBjb25zdCB7IGxvZ2dlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9jb25maWcvbG9nLmpzJyk7XG4gICAgbG9nZ2VyLndhcm4oYERlY3J5cHRpb24gZmFpbGVkIGZvciByZXNvdXJjZSAke3J1bklkfTogJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWMgQVBJXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFJlcGxhY2UgYSBzaW5nbGUgZmllbGQgdmFsdWUgd2l0aCBhIGRpc3BsYXkgcmVmIGlmIGl0J3MgZW5jcnlwdGVkIG9yIGV4cGlyZWQuICovXG5mdW5jdGlvbiB0b0Rpc3BsYXlSZWYodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGlzRW5jcnlwdGVkRGF0YSh2YWx1ZSkpIHJldHVybiBFTkNSWVBURURfUkVGO1xuICBpZiAoaXNFeHBpcmVkU3R1Yih2YWx1ZSkpIHJldHVybiBFWFBJUkVEX1JFRjtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgZW5jcnlwdGVkIFVpbnQ4QXJyYXkgdmFsdWVzIGFuZCBleHBpcmVkIHN0dWJzIHdpdGggc3R5bGVkXG4gKiByZWYgb2JqZWN0cyBpbiBrbm93biBkYXRhIGZpZWxkcyBmb3IgY3VzdG9tIGluc3BlY3QgcmVuZGVyaW5nLlxuICovXG5mdW5jdGlvbiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhSZWY8VD4ocmVzb3VyY2U6IFQpOiBUIHtcbiAgaWYgKCFyZXNvdXJjZSB8fCB0eXBlb2YgcmVzb3VyY2UgIT09ICdvYmplY3QnKSByZXR1cm4gcmVzb3VyY2U7XG4gIGNvbnN0IHIgPSByZXNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5yIH07XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAnZXJyb3InXSkge1xuICAgIHJlc3VsdFtrZXldID0gdG9EaXNwbGF5UmVmKHJlc3VsdFtrZXldKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQuZXZlbnREYXRhICYmIHR5cGVvZiByZXN1bHQuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGVkID0geyAuLi4ocmVzdWx0LmV2ZW50RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBjb25zdCBldmVudFR5cGUgPVxuICAgICAgdHlwZW9mIHJlc3VsdC5ldmVudFR5cGUgPT09ICdzdHJpbmcnID8gcmVzdWx0LmV2ZW50VHlwZSA6ICcnO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGdldEV2ZW50RGF0YVJlZkZpZWxkcyhldmVudFR5cGUpKSB7XG4gICAgICBlZFtrZXldID0gdG9EaXNwbGF5UmVmKGVkW2tleV0pO1xuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCBkYXRhIGZpZWxkcyBvZiBhIHJlc291cmNlIGZvciBDTEkgZGlzcGxheS5cbiAqXG4gKiBXaGVuIGBlbmNyeXB0b3JSZXNvbHZlcmAgaXMgbnVsbCAoZGVmYXVsdCAvIG5vIC0tZGVjcnlwdCBmbGFnKSwgZW5jcnlwdGVkXG4gKiBmaWVsZHMgYXJlIHNob3duIGFzIHN0eWxlZCBcIvCflJIgRW5jcnlwdGVkXCIgcGxhY2Vob2xkZXJzIHZpYSBFbmNyeXB0ZWREYXRhUmVmLlxuICpcbiAqIFdoZW4gYGVuY3J5cHRvclJlc29sdmVyYCBpcyBwcm92aWRlZCAoLS1kZWNyeXB0IGZsYWcpLCBlbmNyeXB0ZWQgZmllbGRzXG4gKiBhcmUgZGVjcnlwdGVkIGJlZm9yZSBoeWRyYXRpb24gc28gdGhlIGFjdHVhbCB1c2VyIGRhdGEgaXMgZGlzcGxheWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZVJlc291cmNlSU88VD4oXG4gIHJlc291cmNlOiBULFxuICBrZXlSZXNvbHZlcj86IEVuY3J5cHRpb25LZXlSZXNvbHZlclxuKTogUHJvbWlzZTxUPiB7XG4gIC8vIFByZS1wcm9jZXNzOiBkZWNyeXB0IGFueSBlbmNyeXB0ZWQgZmllbGRzIHdoZW4gYSByZXNvbHZlciBpcyBwcm92aWRlZFxuICBjb25zdCBwcmVwcm9jZXNzZWQgPSBhd2FpdCBtYXliZURlY3J5cHRGaWVsZHMoXG4gICAgcmVzb3VyY2UgYXMgYW55LFxuICAgIGtleVJlc29sdmVyID8/IG51bGxcbiAgKTtcbiAgY29uc3QgaHlkcmF0ZWQgPSBoeWRyYXRlUmVzb3VyY2VJT0dlbmVyaWMocHJlcHJvY2Vzc2VkLCBnZXRSZXZpdmVycygpKSBhcyBUO1xuICAvLyBQb3N0LXByb2Nlc3M6IHN3YXAgZW5jcnlwdGVkIFVpbnQ4QXJyYXlzIGFuZCBleHBpcmVkIHN0dWJzIGZvciBDTEktc3R5bGVkIG9iamVjdHNcbiAgcmV0dXJuIHJlcGxhY2VFbmNyeXB0ZWRBbmRFeHBpcmVkV2l0aFJlZihoeWRyYXRlZCk7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/output.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA0C5D,OAAO,EAGL,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAuO7B,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,OAAO,OAAO,EACd,OAAM,iBAAsB,EAC5B,kBAAkB,UAAU,CAAC,OAAO,kBAAkB,CAAC,EACvD,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAuE/B,CAAC;AAuLF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,WAAW,KAAG,OAMjD,CAAC;AA4EF,eAAO,MAAM,QAAQ,GAAU,OAAO,KAAK,EAAE,OAAM,iBAAsB,kBAyIxE,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,KAAK,EACZ,OAAM,iBAAsB,8DAoB7B,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,OAAM,iBAAsB,kBAwC7B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,OAAO,KAAK,EACZ,OAAM,iBAEL,kBA2GF,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,OAAO,KAAK,EACZ,QAAQ,MAAM,EACd,OAAM,iBAAsB,kBA+C7B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,UAAU,MAAM,EAChB,OAAM,iBAAsB,
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/output.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA0C5D,OAAO,EAGL,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAuO7B,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,OAAO,OAAO,EACd,OAAM,iBAAsB,EAC5B,kBAAkB,UAAU,CAAC,OAAO,kBAAkB,CAAC,EACvD,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAuE/B,CAAC;AAuLF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,WAAW,KAAG,OAMjD,CAAC;AA4EF,eAAO,MAAM,QAAQ,GAAU,OAAO,KAAK,EAAE,OAAM,iBAAsB,kBAyIxE,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,KAAK,EACZ,OAAM,iBAAsB,8DAoB7B,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,OAAM,iBAAsB,kBAwC7B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,OAAO,KAAK,EACZ,OAAM,iBAEL,kBA2GF,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,OAAO,KAAK,EACZ,QAAQ,MAAM,EACd,OAAM,iBAAsB,kBA+C7B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,UAAU,MAAM,EAChB,OAAM,iBAAsB,kBA6C7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBAgD7B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBA0G7B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,OAAO,KAAK,EAAE,OAAM,iBAAsB,kBA6EzE,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,OAAO,KAAK,EACZ,QAAQ,MAAM,EACd,OAAM,iBAAsB,kBA+B7B,CAAC;AAqDF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBAmI7B,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getDeserializeStream, getExternalRevivers, } from '@workflow/core/serialization';
|
|
1
|
+
import { deriveRunPayloadKeys, getDeserializeStream, getExternalRevivers, } from '@workflow/core/serialization';
|
|
3
2
|
import { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';
|
|
4
3
|
import { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';
|
|
5
4
|
import { isWaitEventType, } from '@workflow/world';
|
|
@@ -802,7 +801,9 @@ export const showStream = async (world, streamId, opts = {}) => {
|
|
|
802
801
|
encryptionKey = (async () => {
|
|
803
802
|
const run = await world.runs.get(opts.runId);
|
|
804
803
|
const rawKey = await world.getEncryptionKeyForRun?.(run);
|
|
805
|
-
|
|
804
|
+
// Full capability, so sealed ('encp') stream frames written by other
|
|
805
|
+
// runs are readable too — not just the run's own symmetric frames.
|
|
806
|
+
return rawKey ? await deriveRunPayloadKeys(rawKey) : undefined;
|
|
806
807
|
})();
|
|
807
808
|
}
|
|
808
809
|
else if (opts.decrypt && !opts.runId) {
|
|
@@ -1187,4 +1188,4 @@ export const listSleeps = async (world, opts = {}) => {
|
|
|
1187
1188
|
throw error;
|
|
1188
1189
|
}
|
|
1189
1190
|
};
|
|
1190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L291dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUVMLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUdMLGVBQWUsR0FJaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsbUNBQW1DLEdBQ3BDLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJEOzs7Ozs7R0FNRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQVksRUFBRSxPQUFnQjtJQUNwRCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQTJDLENBQUM7SUFDakUsT0FBTyxDQUFDLEtBQWEsRUFBRSxFQUFFO1FB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LENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxDQUNSLFNBQVMsQ0FDUCxNQUE4QyxFQUM5QyxpQkFBaUIsRUFDakIsRUFBRSxHQUFHLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FDeEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1wb3J0S2V5IH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvZW5jcnlwdGlvbic7XG5pbXBvcnQge1xuICB0eXBlIEVuY3J5cHRpb25LZXlQYXJhbSxcbiAgZ2V0RGVzZXJpYWxpemVTdHJlYW0sXG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgVkVSQ0VMXzQwM19FUlJPUl9NRVNTQUdFIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB7XG4gIHR5cGUgRXZlbnQsXG4gIHR5cGUgSG9vayxcbiAgaXNXYWl0RXZlbnRUeXBlLFxuICB0eXBlIFN0ZXAsXG4gIHR5cGUgV29ya2Zsb3dSdW4sXG4gIHR5cGUgV29ybGQsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5pbXBvcnQgeyBmb3JtYXREaXN0YW5jZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCBUYWJsZSBmcm9tICdlYXN5LXRhYmxlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2NvbmZpZy9sb2cuanMnO1xuaW1wb3J0IHR5cGUgeyBJbnNwZWN0Q0xJT3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBnZXRPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkTWVzc2FnZSxcbiAgaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3IsXG59IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgRW5jcnlwdGlvbktleVJlc29sdmVyLFxuICBoeWRyYXRlUmVzb3VyY2VJTyxcbiAgaXNFbmNyeXB0ZWRSZWYsXG4gIGlzRXhwaXJlZFJlZixcbn0gZnJvbSAnLi9oeWRyYXRpb24uanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRpbWVXaW5kb3cgfSBmcm9tICcuL3RpbWUtd2luZG93LmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRW5jcnlwdGlvbktleVJlc29sdmVyIGZyb20gYSBXb3JsZCBpbnN0YW5jZS5cbiAqIFJldHVybnMgbnVsbCBpZiBkZWNyeXB0IGlzIGZhbHNlIOKAlCBlbmNyeXB0ZWQgZGF0YSB3aWxsIHNob3cgYXMgYSBwbGFjZWhvbGRlci5cbiAqXG4gKiBUaGUgcmVzb2x2ZXIgZmV0Y2hlcyB0aGUgZnVsbCBXb3JrZmxvd1J1biAoY2FjaGVkIHBlciBydW5JZCkgc28gdGhhdCB0aGVcbiAqIFdvcmxkIGNhbiBpbnNwZWN0IGRlcGxveW1lbnQtc3BlY2lmaWMgZmllbGRzIGZvciBrZXkgcmVzb2x1dGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZXIod29ybGQ6IFdvcmxkLCBkZWNyeXB0OiBib29sZWFuKTogRW5jcnlwdGlvbktleVJlc29sdmVyIHtcbiAgaWYgKCFkZWNyeXB0KSByZXR1cm4gbnVsbDtcbiAgaWYgKCF3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPj4oKTtcbiAgcmV0dXJuIChydW5JZDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IGNhY2hlZCA9IGNhY2hlLmdldChydW5JZCk7XG4gICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgIGNhY2hlZCA9IHdvcmxkLnJ1bnNcbiAgICAgICAgLmdldChydW5JZClcbiAgICAgICAgLnRoZW4oKHJ1bikgPT4gd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1biEocnVuKSk7XG4gICAgICBjYWNoZS5zZXQocnVuSWQsIGNhY2hlZCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQ7XG4gIH07XG59XG5cbmltcG9ydCB7XG4gIHR5cGUgQW5hbHl0aWNzUGFnZUluZm8sXG4gIHR5cGUgUGFnZURhdGEsXG4gIHNldHVwTGlzdFBhZ2luYXRpb24sXG59IGZyb20gJy4vcGFnaW5hdGlvbi5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Ub0NvbnNvbGUgfSBmcm9tICcuL3N0cmVhbS5qcyc7XG5pbXBvcnQge1xuICBmb3JtYXRJU09EYXRlLFxuICBmb3JtYXRTdGF0dXMgYXMgZm9ybWF0U3RhdHVzQWJicmV2LFxuICBnZXREaXNwbGF5U2V0dGluZ3MsXG4gIGdldFRlcm1pbmFsV2lkdGgsXG4gIGlzQ0ksXG59IGZyb20gJy4vdGVybWluYWwtdXRpbHMuanMnO1xuXG5jb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDIwO1xubGV0IFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSCA9IDE1OyAvLyBXaWxsIGJlIGFkanVzdGVkIGJhc2VkIG9uIHRlcm1pbmFsIHdpZHRoXG5cbmNvbnN0IFdPUktGTE9XX1JVTl9JT19QUk9QUzogKGtleW9mIFdvcmtmbG93UnVuKVtdID0gWydpbnB1dCcsICdvdXRwdXQnXTtcblxuY29uc3QgU1RFUF9JT19QUk9QUzogKGtleW9mIFN0ZXApW10gPSBbJ2lucHV0JywgJ291dHB1dCddO1xuXG5jb25zdCBXT1JLRkxPV19SVU5fTElTVEVEX1BST1BTOiAoa2V5b2YgV29ya2Zsb3dSdW4pW10gPSBbXG4gICdydW5JZCcsXG4gICd3b3JrZmxvd05hbWUnLFxuICAnc3RhdHVzJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdjb21wbGV0ZWRBdCcsXG4gIC4uLldPUktGTE9XX1JVTl9JT19QUk9QUyxcbl07XG5cbmNvbnN0IFNURVBfTElTVEVEX1BST1BTOiAoa2V5b2YgU3RlcClbXSA9IFtcbiAgJ3J1bklkJyxcbiAgJ3N0ZXBJZCcsXG4gICdzdGVwTmFtZScsXG4gICdzdGF0dXMnLFxuICAnc3RhcnRlZEF0JyxcbiAgJ2NvbXBsZXRlZEF0JyxcbiAgLi4uU1RFUF9JT19QUk9QUyxcbl07XG5cbmNvbnN0IEVWRU5UX0lPX1BST1BTOiAoa2V5b2YgRXZlbnQgfCAnZXZlbnREYXRhJylbXSA9IFsnZXZlbnREYXRhJ107XG5cbmNvbnN0IEVWRU5UX0xJU1RFRF9QUk9QUzogKGtleW9mIEV2ZW50IHwgJ2V2ZW50RGF0YScpW10gPSBbXG4gICdldmVudElkJyxcbiAgJ2V2ZW50VHlwZScsXG4gICdjb3JyZWxhdGlvbklkJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gIC4uLkVWRU5UX0lPX1BST1BTLFxuXTtcblxuLy8gY29uc3QgSE9PS19EQVRBX1BST1BTOiAoa2V5b2YgSG9vayB8ICdoYXNSZXNwb25zZScpW10gPSBbJ2hhc1Jlc3BvbnNlJ107XG5cbmNvbnN0IEhPT0tfTElTVEVEX1BST1BTOiAoa2V5b2YgSG9vayB8ICdoYXNSZXNwb25zZScpW10gPSBbXG4gICdydW5JZCcsXG4gICdob29rSWQnLFxuICAnb3duZXJJZCcsXG4gICdjcmVhdGVkQXQnLFxuICAvLyAuLi5IT09LX0RBVEFfUFJPUFMsXG5dO1xuXG5pbnRlcmZhY2UgU2xlZXAge1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGV2ZW50SWQ6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICByZXN1bWVBdDogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgY29tcGxldGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFdBSVRfTElTVEVEX1BST1BTOiAoa2V5b2YgU2xlZXApW10gPSBbXG4gICdjb3JyZWxhdGlvbklkJyxcbiAgJ2V2ZW50SWQnLFxuICAnY3JlYXRlZEF0JyxcbiAgJ3Jlc3VtZUF0JyxcbiAgJ2NvbXBsZXRlZEF0Jyxcbl07XG5cbmNvbnN0IFNUQVRVU19DT0xPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc+ID0ge1xuICBydW5uaW5nOiBjaGFsay5ibHVlLFxuICBjb21wbGV0ZWQ6IGNoYWxrLmdyZWVuLFxuICBmYWlsZWQ6IGNoYWxrLnJlZCxcbiAgY2FuY2VsbGVkOiBjaGFsay5zdHJpa2V0aHJvdWdoLnllbGxvdyxcbiAgcGVuZGluZzogY2hhbGsuYmx1ZSxcbiAgd2FpdGluZzogY2hhbGsuYmx1ZSxcbn07XG5cbmNvbnN0IGlzU3RyZWFtSWQgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5zdGFydHNXaXRoKCdzdHJtXycpO1xufTtcblxuY29uc3Qgc2hvd1N0YXR1c0xlZ2VuZCA9ICgpID0+IHtcbiAgbG9nZ2VyLmxvZygnXFxuU3RhdHVzIExlZ2VuZDonKTtcbiAgY29uc3Qgc3RhdHVzZXMgPSBbXG4gICAgJ3J1bm5pbmcnLFxuICAgICdjb21wbGV0ZWQnLFxuICAgICdmYWlsZWQnLFxuICAgICdjYW5jZWxsZWQnLFxuICAgICdwZW5kaW5nJyxcbiAgICAnd2FpdGluZycsXG4gIF07XG5cbiAgY29uc3QgbGVnZW5kSXRlbXMgPSBzdGF0dXNlcy5tYXAoKHN0YXR1cykgPT4ge1xuICAgIGNvbnN0IGNvbG9yRnVuYyA9IFNUQVRVU19DT0xPUlNbc3RhdHVzXTtcbiAgICBjb25zdCBhYmJyZXYgPSBmb3JtYXRTdGF0dXNBYmJyZXYoc3RhdHVzLCB0cnVlKTtcbiAgICByZXR1cm4gYCR7Y29sb3JGdW5jKGFiYnJldil9ID0gJHtzdGF0dXN9YDtcbiAgfSk7XG5cbiAgbG9nZ2VyLmxvZyhgICAke2xlZ2VuZEl0ZW1zLmpvaW4oJyAgJyl9YCk7XG4gIGxvZ2dlci5sb2coJycpO1xufTtcblxuY29uc3QgaXNTbGVlcFN0ZXAgPSAoc3RlcE5hbWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gc3RlcE5hbWUuaW5jbHVkZXMoJy1zbGVlcCcpO1xufTtcblxuY29uc3QgY2hlY2tBbmRIYW5kbGVWZXJjZWxBY2Nlc3NFcnJvciA9IChcbiAgZXJyb3I6IHVua25vd24sXG4gIGJhY2tlbmQ/OiBzdHJpbmdcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoYmFja2VuZCA9PT0gJ3ZlcmNlbCcgJiYgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGVyciA9IGVycm9yIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChlcnIuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihWRVJDRUxfNDAzX0VSUk9SX01FU1NBR0UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGV4dHJhY3RFcnJvck1lc3NhZ2UgPSAoXG4gIGVycjogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChlcnIubWVzc2FnZSAmJiB0eXBlb2YgZXJyLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVyci5tZXNzYWdlO1xuICB9XG5cbiAgaWYgKGVyci5ib2R5ICYmIHR5cGVvZiBlcnIuYm9keSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBib2R5ID0gZXJyLmJvZHkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGJvZHkubWVzc2FnZSAmJiB0eXBlb2YgYm9keS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGJvZHkubWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKGJvZHkuZXJyb3IgJiYgdHlwZW9mIGJvZHkuZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYm9keS5lcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZ2V0UGFnZUluZm8gPSAocmVzdWx0OiB1bmtub3duKTogQW5hbHl0aWNzUGFnZUluZm8gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoXG4gICAgdHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcgfHxcbiAgICByZXN1bHQgPT09IG51bGwgfHxcbiAgICAhKCdwYWdlSW5mbycgaW4gcmVzdWx0KVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiAocmVzdWx0IGFzIHsgcGFnZUluZm8/OiBBbmFseXRpY3NQYWdlSW5mbyB9KS5wYWdlSW5mbztcbn07XG5cbmNvbnN0IGhhbmRsZUFwaUVycm9yID0gKGVycm9yOiB1bmtub3duLCBiYWNrZW5kPzogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIC8vIEZpcnN0IGNoZWNrIGZvciBWZXJjZWwgYWNjZXNzIGVycm9yc1xuICBpZiAoY2hlY2tBbmRIYW5kbGVWZXJjZWxBY2Nlc3NFcnJvcihlcnJvciwgYmFja2VuZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc09ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRFcnJvcihlcnJvcikpIHtcbiAgICBsb2dnZXIuZXJyb3IoZ2V0T2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZE1lc3NhZ2UoKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBIYW5kbGUgb3RoZXIgSFRUUCBlcnJvcnNcbiAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBlcnIgPSBlcnJvciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIEhhbmRsZSA0MDAgQmFkIFJlcXVlc3RcbiAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0JhZCBSZXF1ZXN0OiBUaGUgcmVxdWVzdCB3YXMgaW52YWxpZC4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYERldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBvdGhlciBIVFRQIGVycm9ycyAoNDA0LCA1MDAsIGV0Yy4pXG4gICAgaWYgKHR5cGVvZiBlcnIuc3RhdHVzID09PSAnbnVtYmVyJyAmJiBlcnIuc3RhdHVzID49IDQwMCkge1xuICAgICAgbG9nZ2VyLmVycm9yKGBIVFRQIEVycm9yICR7ZXJyLnN0YXR1c306ICR7Z2V0U3RhdHVzVGV4dChlcnIuc3RhdHVzKX1gKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYERldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGdldFN0YXR1c1RleHQgPSAoc3RhdHVzOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzdGF0dXNUZXh0czogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcbiAgICA0MDA6ICdCYWQgUmVxdWVzdCcsXG4gICAgNDAxOiAnVW5hdXRob3JpemVkJyxcbiAgICA0MDI6ICdQYXltZW50IFJlcXVpcmVkJyxcbiAgICA0MDM6ICdGb3JiaWRkZW4nLFxuICAgIDQwNDogJ05vdCBGb3VuZCcsXG4gICAgNDI5OiAnVG9vIE1hbnkgUmVxdWVzdHMnLFxuICAgIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG4gICAgNTAyOiAnQmFkIEdhdGV3YXknLFxuICAgIDUwMzogJ1NlcnZpY2UgVW5hdmFpbGFibGUnLFxuICB9O1xuICByZXR1cm4gc3RhdHVzVGV4dHNbc3RhdHVzXSB8fCAnVW5rbm93biBFcnJvcic7XG59O1xuXG5jb25zdCB0cnVuY2F0ZU5hbWVJZk5lZWRlZCA9IChuYW1lOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIG1heExlbmd0aCA8IG5hbWUubGVuZ3RoID8gYCR7bmFtZS5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKX0uLi5gIDogbmFtZTtcbn07XG5cbmNvbnN0IGZvcm1hdE5hbWVGaWVsZCA9IChcbiAgbmFtZU5vblVuaXF1ZTogc3RyaW5nLFxuICB0cnVuY2F0ZUxlbmd0aDogbnVtYmVyLFxuICBpc1NsZWVwOiBib29sZWFuXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0cnVuY2F0ZWROYW1lID0gdHJ1bmNhdGVOYW1lSWZOZWVkZWQobmFtZU5vblVuaXF1ZSwgdHJ1bmNhdGVMZW5ndGgpO1xuICBpZiAoaXNTbGVlcCkge1xuICAgIHJldHVybiBjaGFsay55ZWxsb3dCcmlnaHQodHJ1bmNhdGVkTmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNoYWxrLmJsdWUuYmx1ZUJyaWdodCh0cnVuY2F0ZWROYW1lKTtcbn07XG5cbmNvbnN0IGZvcm1hdElkRmllbGQgPSAoXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4gIHNob3VsZFRydW5jYXRlSWRzOiBib29sZWFuXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB2YWx1ZVN0ciA9IFN0cmluZyh2YWx1ZSk7XG4gIGNvbnN0IGlkU3RyID0gc2hvdWxkVHJ1bmNhdGVJZHMgPyB0cnVuY2F0ZUlkVG9MYXN0Q2hhcnModmFsdWVTdHIpIDogdmFsdWVTdHI7XG4gIGlmIChwcm9wID09PSAnc3RyZWFtSWQnKSB7XG4gICAgcmV0dXJuIGNoYWxrLmdyZWVuKGlkU3RyKTtcbiAgfVxuICByZXR1cm4gaWRTdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VGFibGVWYWx1ZSA9IChcbiAgcHJvcDogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSxcbiAgZGlzcGxheVNldHRpbmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGlzcGxheVNldHRpbmdzPixcbiAgaXRlbT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pID0+IHtcbiAgY29uc3QgbmFtZXNUcnVuY2F0ZSA9IGRpc3BsYXlTZXR0aW5ncz8ubmFtZXNUcnVuY2F0ZUxlbmd0aCA/PyA0MDtcbiAgY29uc3Qgc2hvdWxkVHJ1bmNhdGVJZHMgPSBkaXNwbGF5U2V0dGluZ3M/LnRydW5jYXRlSWRzVG9MYXN0Q2hhcnMgPz8gZmFsc2U7XG5cbiAgLy8gSGFuZGxlIElEcyB3aXRoIHBvdGVudGlhbCB0cnVuY2F0aW9uXG4gIGlmIChcbiAgICBbXG4gICAgICAnc3RyZWFtSWQnLFxuICAgICAgJ3J1bklkJyxcbiAgICAgICdzdGVwSWQnLFxuICAgICAgJ2hvb2tJZCcsXG4gICAgICAnZXZlbnRJZCcsXG4gICAgICAnY29ycmVsYXRpb25JZCcsXG4gICAgICAnb3duZXJJZCcsXG4gICAgXS5pbmNsdWRlcyhwcm9wKVxuICApIHtcbiAgICByZXR1cm4gZm9ybWF0SWRGaWVsZChwcm9wLCB2YWx1ZSwgc2hvdWxkVHJ1bmNhdGVJZHMpO1xuICB9XG5cbiAgLy8gSGFuZGxlIG5hbWVzIHdpdGggdHJ1bmNhdGlvblxuICBpZiAocHJvcCA9PT0gJ3N0ZXBOYW1lJykge1xuICAgIGNvbnN0IG5hbWVOb25VbmlxdWUgPSBwYXJzZVN0ZXBOYW1lKFN0cmluZyh2YWx1ZSkpPy5zaG9ydE5hbWUgfHwgJz8nO1xuICAgIHJldHVybiBmb3JtYXROYW1lRmllbGQoXG4gICAgICBuYW1lTm9uVW5pcXVlLFxuICAgICAgbmFtZXNUcnVuY2F0ZSxcbiAgICAgIGlzU2xlZXBTdGVwKFN0cmluZyh2YWx1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnd29ya2Zsb3dOYW1lJykge1xuICAgIGNvbnN0IG5hbWVOb25VbmlxdWUgPSBwYXJzZVdvcmtmbG93TmFtZShTdHJpbmcodmFsdWUpKT8uc2hvcnROYW1lIHx8ICc/JztcbiAgICBjb25zdCB0cnVuY2F0ZWROYW1lID0gdHJ1bmNhdGVOYW1lSWZOZWVkZWQobmFtZU5vblVuaXF1ZSwgbmFtZXNUcnVuY2F0ZSk7XG4gICAgcmV0dXJuIGNoYWxrLmJsdWUuYmx1ZUJyaWdodCh0cnVuY2F0ZWROYW1lKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnb3V0cHV0JyB8fCBwcm9wID09PSAnaW5wdXQnIHx8IHByb3AgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtICYmXG4gICAgICAnZXhwaXJlZEF0JyBpbiBpdGVtICYmXG4gICAgICBpdGVtLmV4cGlyZWRBdCAhPSBudWxsICYmXG4gICAgICBuZXcgRGF0ZShpdGVtLmV4cGlyZWRBdCBhcyBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKSA8IG5ldyBEYXRlKClcbiAgICApIHtcbiAgICAgIHJldHVybiBFWFBJUkVEX0RBVEFfTUVTU0FHRTtcbiAgICB9XG4gICAgcmV0dXJuIGlubGluZUZvcm1hdElPKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnc3RhdHVzJykge1xuICAgIGNvbnN0IHN0YXR1cyA9IHZhbHVlIGFzIFdvcmtmbG93UnVuWydzdGF0dXMnXSB8IFN0ZXBbJ3N0YXR1cyddO1xuICAgIGNvbnN0IGNvbG9yRnVuYyA9XG4gICAgICBTVEFUVVNfQ09MT1JTW3N0YXR1c10gPz8gKChmb3JtYXR0ZWQ6IHN0cmluZykgPT4gZm9ybWF0dGVkKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRTdGF0dXMgPSBkaXNwbGF5U2V0dGluZ3M/LmFiYnJldmlhdGVTdGF0dXNcbiAgICAgID8gZm9ybWF0U3RhdHVzQWJicmV2KHN0YXR1cywgdHJ1ZSlcbiAgICAgIDogc3RhdHVzO1xuICAgIHJldHVybiBjb2xvckZ1bmMoZm9ybWF0dGVkU3RhdHVzKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnZXZlbnREYXRhJykge1xuICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgaWYgKHByb3AgPT09ICdoYXNSZXNwb25zZScpIHtcbiAgICByZXR1cm4gdmFsdWUgPyBjaGFsay5ncmVlbigndHJ1ZScpIDogY2hhbGsuZ3JheSgnZmFsc2UnKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0VGFibGVUaW1lc3RhbXAodmFsdWUsIG9wdHMsIGRpc3BsYXlTZXR0aW5ncyk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBnZXRWaXNpYmxlUHJvcHMgPSAoXG4gIHByb3BzOiBzdHJpbmdbXSxcbiAgZGlzcGxheVNldHRpbmdzOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREaXNwbGF5U2V0dGluZ3M+XG4pOiBzdHJpbmdbXSA9PiB7XG4gIGlmIChkaXNwbGF5U2V0dGluZ3MuaGlkZUNvbXBsZXRlZEF0KSB7XG4gICAgcmV0dXJuIHByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcCAhPT0gJ2NvbXBsZXRlZEF0Jyk7XG4gIH1cbiAgcmV0dXJuIHByb3BzO1xufTtcblxuY29uc3Qgc2hvd1RhYmxlID0gKFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICBwcm9wczogc3RyaW5nW10sXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICAvLyBHZXQgZGlzcGxheSBzZXR0aW5ncyBiYXNlZCBvbiB0ZXJtaW5hbCB3aWR0aFxuICBjb25zdCB0ZXJtaW5hbFdpZHRoID0gZ2V0VGVybWluYWxXaWR0aCgpO1xuICBjb25zdCBkaXNwbGF5U2V0dGluZ3MgPSBnZXREaXNwbGF5U2V0dGluZ3MoXG4gICAgdGVybWluYWxXaWR0aCxcbiAgICBvcHRzLndpdGhEYXRhIHx8IGZhbHNlLFxuICAgIHByb3BzLmluY2x1ZGVzKCdydW5OYW1lJylcbiAgKTtcblxuICAvLyBGaWx0ZXIgb3V0IGNvbXBsZXRlZEF0IGNvbHVtbiBpZiBuZWVkZWRcbiAgY29uc3QgdmlzaWJsZVByb3BzID0gZ2V0VmlzaWJsZVByb3BzKHByb3BzLCBkaXNwbGF5U2V0dGluZ3MpO1xuXG4gIC8vIFVwZGF0ZSB0cnVuY2F0ZSBsZW5ndGggZm9yIElPIGZpZWxkc1xuICBjb25zdCBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoID0gVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIO1xuICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBkaXNwbGF5U2V0dGluZ3MuZGF0YUZpZWxkV2lkdGg7XG5cbiAgLy8gU2hvdyBzdGF0dXMgbGVnZW5kIGlmIHVzaW5nIGFiYnJldmlhdGVkIHN0YXR1c1xuICBpZiAoXG4gICAgZGF0YS5sZW5ndGggPiAwICYmXG4gICAgZGlzcGxheVNldHRpbmdzLmFiYnJldmlhdGVTdGF0dXMgJiZcbiAgICB2aXNpYmxlUHJvcHMuaW5jbHVkZXMoJ3N0YXR1cycpXG4gICkge1xuICAgIHNob3dTdGF0dXNMZWdlbmQoKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBoZWFkZXIgbWFwcGluZyBmb3IgYWJicmV2aWF0ZWQgc3RhdHVzXG4gIGNvbnN0IGhlYWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoZGlzcGxheVNldHRpbmdzLmFiYnJldmlhdGVTdGF0dXMgJiYgdmlzaWJsZVByb3BzLmluY2x1ZGVzKCdzdGF0dXMnKSkge1xuICAgIGhlYWRlck1hcFsnc3RhdHVzJ10gPSAnUyc7XG4gIH1cblxuICAvLyBBZGQgYSBibGFuayBsaW5lIGJlZm9yZSBhbnkgdGFibGVcbiAgY29uc3QgdGFibGUgPSBuZXcgVGFibGUoKTtcbiAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIud2FybignTm8gZGF0YSBmb3VuZCBmb3IgdGhpcyBxdWVyeSBhbmQgcmVzb3VyY2UuXFxuJyk7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHZpc2libGVQcm9wcykge1xuICAgICAgY29uc3QgaGVhZGVyID0gaGVhZGVyTWFwW3Byb3BdIHx8IHByb3A7XG4gICAgICB0YWJsZS5jZWxsKGhlYWRlciwgJ04vQScpO1xuICAgIH1cbiAgICB0YWJsZS5uZXdSb3coKTtcbiAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRydW5jYXRlIGxlbmd0aFxuICAgIFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSCA9IG9yaWdpbmFsVHJ1bmNhdGVMZW5ndGg7XG4gICAgcmV0dXJuIHRhYmxlLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoIWRhdGEpIHtcbiAgICBsb2dnZXIud2FybignRXhwZWN0aW5nIGFuIGFycmF5IG9mIGRhdGEsIGJ1dCBnb3QgbnVsbC5cXG4nKTtcbiAgfVxuICBsb2dnZXIubG9nKCcnKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdmlzaWJsZVByb3BzKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBoZWFkZXJNYXBbcHJvcF0gfHwgcHJvcDtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtwcm9wXTtcbiAgICAgIHRhYmxlLmNlbGwoXG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgZm9ybWF0VGFibGVWYWx1ZShwcm9wLCB2YWx1ZSwgb3B0cywgZGlzcGxheVNldHRpbmdzLCBpdGVtKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGFibGUubmV3Um93KCk7XG4gIH1cblxuICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRydW5jYXRlIGxlbmd0aFxuICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoO1xuICByZXR1cm4gdGFibGUudG9TdHJpbmcoKTtcbn07XG5cbmNvbnN0IHNob3dKc29uID0gKGRhdGE6IHVua25vd24pID0+IHtcbiAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtqc29ufVxcbmApO1xufTtcblxuLyoqXG4gKiBEZWZlbnNpdmVseSBldmFsdWF0ZSBgV29ybGQuZGVzY3JpYmVSdW5gIGZvciBvbmUgcnVuIHJvdy5cbiAqXG4gKiBUaGUgaW50ZXJmYWNlIGNvbnRyYWN0IHNheXMgaW1wbGVtZW50YXRpb25zIGFyZSBwdXJlIGFuZCBtdXN0IG5vdFxuICogdGhyb3cg4oCUIGJ1dCBpdCBpcyBhbiBleHRlcm5hbCBleHRlbnNpb24gcG9pbnQsIHNvIHRoZSBDTEkgZG9lcyBub3RcbiAqIHRydXN0IHRoYXQ6IGEgdGhyb3dpbmcgaW1wbGVtZW50YXRpb24gY29udHJpYnV0ZXMgbm8gZmllbGRzIGluc3RlYWRcbiAqIG9mIGNyYXNoaW5nIHRoZSBjb21tYW5kLiBLZXlzIHRoYXQgYWxyZWFkeSBleGlzdCBvbiB0aGUgcnVuIHJvdyBhcmVcbiAqIGRyb3BwZWQgc28gYSB3b3JsZCBjYW4gbmV2ZXIgb3ZlcndyaXRlIGNhbm9uaWNhbCBmaWVsZHMgKGBzdGF0dXNgLFxuICogYHJ1bklkYCwgLi4uKSBpbiBpbnNwZWN0IG91dHB1dC5cbiAqL1xuY29uc3Qgc2FmZVdvcmxkRmllbGRzID0gYXN5bmMgKFxuICBkZXNjcmliZVJ1bjogTm9uTnVsbGFibGU8V29ybGRbJ2Rlc2NyaWJlUnVuJ10+LFxuICByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+PiA9PiB7XG4gIGxldCBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+IHwgbnVsbDtcbiAgdHJ5IHtcbiAgICAvLyBUaGUgaG9vayBtYXkgYmUgc3luYyBvciBhc3luYzsgYSByZWplY3Rpb24gaXMgdHJlYXRlZCB0aGUgc2FtZSBhc1xuICAgIC8vIGEgdGhyb3cg4oCUIG5vIGZpZWxkcy5cbiAgICBmaWVsZHMgPSBhd2FpdCBkZXNjcmliZVJ1bihyb3cpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgaWYgKCFmaWVsZHMpIHJldHVybiB7fTtcbiAgY29uc3Qgc2FmZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgIGlmICghKGtleSBpbiByb3cpKSB7XG4gICAgICBzYWZlW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuXG5jb25zdCBzaG93SnNvblBhZ2UgPSA8VD4ocGFnZTogUGFnZURhdGE8VD4pID0+IHtcbiAgc2hvd0pzb24oe1xuICAgIGRhdGE6IHBhZ2UuZGF0YSxcbiAgICBjdXJzb3I6IHBhZ2UuY3Vyc29yLFxuICAgIGhhc01vcmU6IHBhZ2UuaGFzTW9yZSxcbiAgICAuLi4ocGFnZS5wYWdlSW5mbyA/IHsgcGFnZUluZm86IHBhZ2UucGFnZUluZm8gfSA6IHt9KSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEluIHRhYmxlcywgd2Ugd2FudCB0byBzaG93IGEgc2hvcnRlciB0aW1lc3RhbXAsIFlZWVktTU0tREQgSEg6TU06U1NcbiAqL1xuY29uc3QgZm9ybWF0VGFibGVUaW1lc3RhbXAgPSAoXG4gIHZhbHVlOiBEYXRlLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9LFxuICBkaXNwbGF5U2V0dGluZ3M/OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREaXNwbGF5U2V0dGluZ3M+XG4pID0+IHtcbiAgLy8gRm9ybWF0IElTTyB0aW1lIHdpdGhvdXQgVCBhbmQgWlxuICBjb25zdCBpc29UaW1lID0gZm9ybWF0SVNPRGF0ZSh2YWx1ZSk7XG5cbiAgLy8gU2hvdyByZWxhdGl2ZSB0aW1lIG9ubHkgaWY6XG4gIC8vIC0gTm90IGluIENJIG1vZGVcbiAgLy8gLSBEaXNwbGF5IHNldHRpbmdzIGFsbG93IGl0IChiYXNlZCBvbiB0ZXJtaW5hbCB3aWR0aClcbiAgLy8gLSB3aXRoRGF0YSBpcyBkaXNhYmxlZCAobW9yZSBzcGFjZSBhdmFpbGFibGUpXG4gIC8vIC0gTm90IGluIEpTT04gbW9kZVxuICAvLyAtIGRpc2FibGVSZWxhdGl2ZURhdGVzIGlzIG5vdCBzZXRcbiAgY29uc3Qgc2hvdWxkU2hvd1JlbGF0aXZlID1cbiAgICAhaXNDSSgpICYmXG4gICAgZGlzcGxheVNldHRpbmdzPy5zaG93UmVsYXRpdmVEYXRlcyAhPT0gZmFsc2UgJiZcbiAgICAhb3B0cy53aXRoRGF0YSAmJlxuICAgICFvcHRzLmpzb24gJiZcbiAgICAhb3B0cy5kaXNhYmxlUmVsYXRpdmVEYXRlcztcblxuICBpZiAoc2hvdWxkU2hvd1JlbGF0aXZlKSB7XG4gICAgY29uc3QgcmVsYXRpdmUgPSBmb3JtYXREaXN0YW5jZSh2YWx1ZSwgbmV3IERhdGUoKSwgeyBhZGRTdWZmaXg6IHRydWUgfSk7XG4gICAgcmV0dXJuIGAke2lzb1RpbWV9ICgke3JlbGF0aXZlfSlgO1xuICB9XG5cbiAgcmV0dXJuIGlzb1RpbWU7XG59O1xuXG5jb25zdCB0cnVuY2F0ZVN0cmluZyA9IChcbiAgc3RyOiBzdHJpbmcsXG4gIG1heExlbmd0aDogbnVtYmVyID0gVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIXG4pID0+IHtcbiAgcmV0dXJuIHN0ciAmJiBzdHIubGVuZ3RoID4gbWF4TGVuZ3RoXG4gICAgPyBgJHtzdHIuc3Vic3RyaW5nKDAsIG1heExlbmd0aCl9Li4uYFxuICAgIDogc3RyO1xufTtcblxuY29uc3QgdHJ1bmNhdGVJZFRvTGFzdENoYXJzID0gKGlkOiBzdHJpbmcsIGNoYXJzOiBudW1iZXIgPSA0KTogc3RyaW5nID0+IHtcbiAgaWYgKCFpZCB8fCBpZC5sZW5ndGggPD0gY2hhcnMpIHJldHVybiBpZDtcbiAgcmV0dXJuIGAuLi4ke2lkLnN1YnN0cmluZyhpZC5sZW5ndGggLSBjaGFycyl9YDtcbn07XG5cbmNvbnN0IHNob3dJbnNwZWN0SW5mb0JveCA9IChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gIGxvZ2dlci5pbmZvKFxuICAgIGBUbyB2aWV3IGRldGFpbHMgZm9yIGEgJHtyZXNvdXJjZX0sIHVzZSBcXGB3b3JrZmxvdyBpbnNwZWN0ICR7cmVzb3VyY2V9XFxgIDxpZD5gXG4gICk7XG4gIGxvZ2dlci5pbmZvKFxuICAgIGBUbyB2aWV3IHRoZSBjb250ZW50IG9mIGFueSBzdHJlYW0sIHVzZSBcXGB3b3JrZmxvdyBpbnNwZWN0IHN0cmVhbSA8c3RyZWFtLWlkPlxcYGBcbiAgKTtcbn07XG5cbmNvbnN0IEVYUElSRURfREFUQV9NRVNTQUdFID0gY2hhbGsuZ3JheSgnPGRhdGEgZXhwaXJlZD4nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBydW4gaGFzIGV4cGlyZWQgZGF0YSBzdG9yYWdlIChydW4tbGV2ZWwgZXhwaXJlZEF0IGZpZWxkKS5cbiAqIE9ubHkgcmV0dXJucyB0cnVlIHdoZW4gYGV4cGlyZWRBdGAgaXMgaW4gdGhlIHBhc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNFeHBpcmVkRGF0YSA9IChydW46IFdvcmtmbG93UnVuKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgJ2V4cGlyZWRBdCcgaW4gcnVuICYmXG4gICAgcnVuLmV4cGlyZWRBdCAhPSBudWxsICYmXG4gICAgbmV3IERhdGUocnVuLmV4cGlyZWRBdCkgPCBuZXcgRGF0ZSgpXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbnkgZGF0YSBmaWVsZCBpbiBhIGh5ZHJhdGVkIHJlc291cmNlIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYW5cbiAqIGV4cGlyZWQgcGxhY2Vob2xkZXIuIFdvcmtzIGZvciBydW5zLCBzdGVwcywgaG9va3MsIGFuZCBldmVudHMg4oCUIHVubGlrZVxuICogYGhhc0V4cGlyZWREYXRhYCB3aGljaCBvbmx5IGNoZWNrcyB0aGUgcnVuLWxldmVsIGBleHBpcmVkQXRgIGZpZWxkLlxuICovXG5jb25zdCBoYXNFeHBpcmVkRmllbGRzID0gKHJlc291cmNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gWydpbnB1dCcsICdvdXRwdXQnLCAnZXJyb3InLCAnbWV0YWRhdGEnXS5zb21lKChrZXkpID0+XG4gICAgaXNFeHBpcmVkUmVmKHJlc291cmNlW2tleV0pXG4gICk7XG59O1xuXG4vKipcbiAqIFRha2VzIGh5ZHJhdGVkIHN0ZXAvd29ya2Zsb3cgaW5wdXQvb3V0cHV0IGFuZCBzZXJpYWxpemVzIGl0IGZvciBpbmxpbmUgZGlzcGxheS5cbiAqL1xuY29uc3QgaW5saW5lRm9ybWF0SU8gPSA8VD4oaW86IFQsIHRvcExldmVsOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgaW87XG4gIGxldCB2YWx1ZSA9ICcnO1xuICBpZiAoaW8gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhbHVlID0gJzxlbXB0eT4nO1xuICB9IGVsc2UgaWYgKGlvID09PSBudWxsKSB7XG4gICAgdmFsdWUgPSAnPG51bGw+JztcbiAgfSBlbHNlIGlmIChpc0VuY3J5cHRlZFJlZihpbykpIHtcbiAgICB2YWx1ZSA9IGNoYWxrLmRpbS55ZWxsb3coJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJyk7XG4gIH0gZWxzZSBpZiAoaXNFeHBpcmVkUmVmKGlvKSkge1xuICAgIHZhbHVlID0gY2hhbGsuZ3JheSgnPGRhdGEgZXhwaXJlZD4nKTtcbiAgfSBlbHNlIGlmIChpbyAmJiBBcnJheS5pc0FycmF5KGlvKSkge1xuICAgIGlmIChpby5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhbHVlID0gJzxlbXB0eT4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJpbmdpZmllZCA9IGlvXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGlubGluZUZvcm1hdElPKGl0ZW0sIGZhbHNlKSlcbiAgICAgICAgLmpvaW4oJywnKTtcbiAgICAgIGlmIChzdHJpbmdpZmllZC5sZW5ndGggPiBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggJiYgdG9wTGV2ZWwpIHtcbiAgICAgICAgdmFsdWUgPSBjaGFsay55ZWxsb3coYCR7aW8ubGVuZ3RofSBhcmdzYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHN0cmluZ2lmaWVkO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChpbyBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHZhbHVlID0gaW8udG9JU09TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0cnVuY2F0ZVN0cmluZyhKU09OLnN0cmluZ2lmeShpbykpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgaWYgKGlzU3RyZWFtSWQoaW8gYXMgc3RyaW5nKSkge1xuICAgICAgdmFsdWUgPSBpby50b1N0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgKGlvIGFzIHN0cmluZykuaW5jbHVkZXMoJ3N0cm1fJykpIHtcbiAgICAgIHZhbHVlID0gaW8gYXMgc3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRydW5jYXRlU3RyaW5nKFN0cmluZyhpbykpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGA8JHt0eXBlfT5gO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogTGlzdCB2aWV3cyBzdXJmYWNlIG1ldGFkYXRhIG9ubHkuIFdoZW4gdGhlIGFjdGl2ZSBiYWNrZW5kIGV4cG9zZXMgdGhlXG4gKiBvcHRpb25hbCBgd29ybGQuYW5hbHl0aWNzYCByZWFkIG5hbWVzcGFjZSB3ZSByZWFkIGxpc3QgcGFnZXMgZnJvbSBpdFxuICogKG1ldGFkYXRhLW9ubHkg4oCUIG5vIHBheWxvYWQgcmVzb2x1dGlvbik7IG90aGVyd2lzZSB3ZSBmYWxsIGJhY2sgdG8gdGhlXG4gKiBydW50aW1lIHN0b3JhZ2UgQVBJcyB3aXRoIGByZXNvbHZlRGF0YTogJ25vbmUnYC5cbiAqXG4gKiBgLS13aXRoRGF0YWAgZm9yY2VzIHRoZSBydW50aW1lIHBhdGggc28gcGF5bG9hZHMgY2FuIGJlIHJlc29sdmVkIGludG8gdGhlXG4gKiB0YWJsZS4gSXQgaXMgZGVwcmVjYXRlZCBmb3IgbGlzdCB2aWV3czogdmlldyBwYXlsb2FkcyBwZXItcmVzb3VyY2Ugd2l0aFxuICogYHdvcmtmbG93IGluc3BlY3QgPHJlc291cmNlPiA8aWQ+YC5cbiAqL1xuY29uc3Qgd2FybldpdGhEYXRhRGVwcmVjYXRlZEZvckxpc3QgPSAoc2luZ3VsYXI6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBsb2dnZXIud2FybihcbiAgICBgJy0td2l0aERhdGEnIGlzIGRlcHJlY2F0ZWQgZm9yIGxpc3Qgdmlld3MgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiBVc2UgJ3dvcmtmbG93IGluc3BlY3QgJHtzaW5ndWxhcn0gPGlkPicgdG8gdmlldyBwYXlsb2FkcyBmb3IgYSBzaW5nbGUgJHtzaW5ndWxhcn0uYFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RSdW5zID0gYXN5bmMgKHdvcmxkOiBXb3JsZCwgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLnN0ZXBJZCB8fCBvcHRzLnJ1bklkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgb3IgcnVuLWlkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGlzdCBjYWxscywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICB3YXJuV2l0aERhdGFEZXByZWNhdGVkRm9yTGlzdCgncnVuJyk7XG4gIH1cblxuICBjb25zdCB1c2VBbmFseXRpY3MgPSAhb3B0cy53aXRoRGF0YSAmJiBCb29sZWFuKHdvcmxkLmFuYWx5dGljcyk7XG4gIGNvbnN0IHJlc29sdmVEYXRhID0gb3B0cy53aXRoRGF0YSA/ICdhbGwnIDogJ25vbmUnO1xuICBjb25zdCBzdGF0dXMgPSBvcHRzLnN0YXR1cztcblxuICAvLyBSZXNvbHZlIC0tc2luY2UvLS11bnRpbCBpbnRvIGFuIGV4cGxpY2l0IGxpc3Rpbmcgd2luZG93LiBPbmx5IHRoZVxuICAvLyBhbmFseXRpY3MgcmVhZCBwYXRoIHN1cHBvcnRzIG9uZTsgdGhlIHJ1bnRpbWUgc3RvcmFnZSBBUElzIGhhdmUgbm8gdGltZVxuICAvLyBmaWx0ZXIuIFdpdGhvdXQgdGhlIGZsYWdzIHRoZSBiYWNrZW5kIGFwcGxpZXMgaXRzIGRlZmF1bHQgd2luZG93XG4gIC8vICh0cmFpbGluZyAyNGggb24gdGhlIFZlcmNlbCBiYWNrZW5kKS5cbiAgY29uc3QgdGltZVdpbmRvdyA9IHJlc29sdmVUaW1lV2luZG93KG9wdHMpO1xuICBpZiAodGltZVdpbmRvdyAmJiAhdXNlQW5hbHl0aWNzKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnLS1zaW5jZS8tLXVudGlsIHJlcXVpcmUgdGhlIGFuYWx5dGljcyByZWFkIHBhdGggYW5kIGFyZSBpZ25vcmVkIGJ5IHRoaXMgYmFja2VuZC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB0byBzaG93IGJhc2VkIG9uIHdpdGhEYXRhIGZsYWdcbiAgY29uc3QgYmFzZVByb3BzID0gb3B0cy53aXRoRGF0YVxuICAgID8gV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QU1xuICAgIDogV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QUy5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PiAhV09SS0ZMT1dfUlVOX0lPX1BST1BTLmluY2x1ZGVzKHByb3ApXG4gICAgICApO1xuXG4gIC8vIFdvcmxkLXNwZWNpZmljIGRpc3BsYXkgZmllbGRzIChXb3JsZC5kZXNjcmliZVJ1bik6IGVhY2gga2V5IHRoZVxuICAvLyB3b3JsZCByZXR1cm5zIGJlY29tZXMgYW4gZXh0cmEgY29sdW1uLCBpbnNlcnRlZCBiZWZvcmUgYHN0YXR1c2AuXG4gIC8vIERldGFjaGVkIGNhbGwgc2l0ZSwgc28gYmluZCBleHBsaWNpdGx5LiBgbnVsbGAgZmllbGQgdmFsdWVzIGFyZVxuICAvLyBwcmVzZXJ2ZWQgKHRoZXkgbWVhbiBcImFwcGxpY2FibGUgYnV0IHVuZGV0ZXJtaW5hYmxlXCIgcGVyIHRoZVxuICAvLyBpbnRlcmZhY2UgY29udHJhY3QpLCBkaXN0aW5ndWlzaGluZyB0aGVtIGluIEpTT04gb3V0cHV0IGZyb20gdGhlXG4gIC8vIGhvb2sgYmVpbmcgYWJzZW50IGVudGlyZWx5LlxuICBjb25zdCBkZXNjcmliZVJ1biA9IHdvcmxkLmRlc2NyaWJlUnVuPy5iaW5kKHdvcmxkKTtcbiAgY29uc3QgZGVzY3JpYmVkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgd2l0aFdvcmxkRmllbGRzID0gYXN5bmMgKFxuICAgIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiA9PiB7XG4gICAgaWYgKCFkZXNjcmliZVJ1bikgcmV0dXJuIHJvd3M7XG4gICAgLy8gUm93cyBldmFsdWF0ZWQgY29uY3VycmVudGx5IHNvIGFuIGFzeW5jIGltcGxlbWVudGF0aW9uIGNvc3RzIG9uZVxuICAgIC8vIGF3YWl0IHBlciBwYWdlLCBub3QgcGVyIHJvdy5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICByb3dzLm1hcChhc3luYyAocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IGF3YWl0IHNhZmVXb3JsZEZpZWxkcyhkZXNjcmliZVJ1biwgcm93KTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGRzKSkge1xuICAgICAgICAgIGlmICghZGVzY3JpYmVkS2V5cy5pbmNsdWRlcyhrZXkpKSBkZXNjcmliZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5yb3csIC4uLmZpZWxkcyB9O1xuICAgICAgfSlcbiAgICApO1xuICB9O1xuICBjb25zdCBwcm9wc0ZvciA9IChiYXNlTGlzdDogKGtleW9mIFdvcmtmbG93UnVuKVtdKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IGxpc3Q6IHN0cmluZ1tdID0gWy4uLmJhc2VMaXN0XTtcbiAgICBsaXN0LnNwbGljZShsaXN0LmluZGV4T2YoJ3N0YXR1cycpLCAwLCAuLi5kZXNjcmliZWRLZXlzKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfTtcblxuICBjb25zdCBmZXRjaFJ1bnNQYWdlID0gYXN5bmMgKFxuICAgIGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGFnZURhdGE8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIH07XG4gICAgaWYgKHVzZUFuYWx5dGljcyAmJiB3b3JsZC5hbmFseXRpY3MpIHtcbiAgICAgIGNvbnN0IHJ1bnMgPSBhd2FpdCB3b3JsZC5hbmFseXRpY3MucnVucy5saXN0KHtcbiAgICAgICAgd29ya2Zsb3dOYW1lOiBvcHRzLndvcmtmbG93TmFtZSxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICAuLi4odGltZVdpbmRvdyA/PyB7fSksXG4gICAgICAgIHBhZ2luYXRpb24sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGF3YWl0IHdpdGhXb3JsZEZpZWxkcyhcbiAgICAgICAgICBydW5zLmRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdXG4gICAgICAgICksXG4gICAgICAgIGN1cnNvcjogcnVucy5jdXJzb3IsXG4gICAgICAgIGhhc01vcmU6IHJ1bnMuaGFzTW9yZSxcbiAgICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHJ1bnMpLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcnVucyA9IGF3YWl0IHdvcmxkLnJ1bnMubGlzdCh7XG4gICAgICB3b3JrZmxvd05hbWU6IG9wdHMud29ya2Zsb3dOYW1lLFxuICAgICAgc3RhdHVzLFxuICAgICAgcGFnaW5hdGlvbixcbiAgICAgIHJlc29sdmVEYXRhLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJ1bnMuZGF0YS5tYXAoKHIpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKHIsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGF3YWl0IHdpdGhXb3JsZEZpZWxkcyhkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSksXG4gICAgICBjdXJzb3I6IHJ1bnMuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogcnVucy5oYXNNb3JlLFxuICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHJ1bnMpLFxuICAgIH07XG4gIH07XG5cbiAgLy8gRm9yIEpTT04gb3V0cHV0LCBqdXN0IGZldGNoIG9uY2UgYW5kIHJldHVyblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaFJ1bnNQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICAgIHNob3dKc29uUGFnZShwYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaFJ1bnNQYWdlKGN1cnNvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKHJ1bnMpID0+IHtcbiAgICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKHJ1bnMsIHByb3BzRm9yKGJhc2VQcm9wcyksIG9wdHMpKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWNlbnRSdW4gPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgbG9nZ2VyLndhcm4oYE5vIHJ1bklkIHByb3ZpZGVkLCBmZXRjaGluZyBkYXRhIGZvciBsYXRlc3QgcnVuIGluc3RlYWQuYCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcnVucyA9IGF3YWl0IHdvcmxkLnJ1bnMubGlzdCh7XG4gICAgICBwYWdpbmF0aW9uOiB7IGxpbWl0OiAxLCBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycgfSxcbiAgICAgIHJlc29sdmVEYXRhOiAnbm9uZScsIC8vIERvbid0IG5lZWQgZGF0YSBmb3IganVzdCBnZXR0aW5nIHRoZSBJRFxuICAgIH0pO1xuICAgIHJ1bnMuZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcnVucy5kYXRhLm1hcCgocikgPT4gaHlkcmF0ZVJlc291cmNlSU8ociwgcmVzb2x2ZUtleSkpXG4gICAgKTtcbiAgICByZXR1cm4gcnVucy5kYXRhWzBdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNob3dSdW4gPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBzaG93aW5nIGluZGl2aWR1YWwgcmVzb3VyY2VzJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ2FsbCcgfSk7XG4gICAgY29uc3QgaHlkcmF0ZWQgPSBhd2FpdCBoeWRyYXRlUmVzb3VyY2VJTyhydW4sIHJlc29sdmVLZXkpO1xuICAgIC8vIFdvcmxkLXNwZWNpZmljIGRpc3BsYXkgZmllbGRzIChXb3JsZC5kZXNjcmliZVJ1biksIGV2YWx1YXRlZFxuICAgIC8vIGRlZmVuc2l2ZWx5IOKAlCBzZWUgc2FmZVdvcmxkRmllbGRzLiBgbnVsbGAgZmllbGQgdmFsdWVzIGFyZSBrZXB0IHNvXG4gICAgLy8gc3RydWN0dXJlZCBvdXRwdXQgZGlzdGluZ3Vpc2hlcyBcInVuZGV0ZXJtaW5hYmxlXCIgZnJvbSBcImhvb2sgYWJzZW50XCIuXG4gICAgY29uc3Qgd29ybGRGaWVsZHMgPSB3b3JsZC5kZXNjcmliZVJ1blxuICAgICAgPyBhd2FpdCBzYWZlV29ybGRGaWVsZHMoXG4gICAgICAgICAgd29ybGQuZGVzY3JpYmVSdW4uYmluZCh3b3JsZCksXG4gICAgICAgICAgcnVuIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcnVuV2l0aEh5ZHJhdGVkSU8gPVxuICAgICAgd29ybGRGaWVsZHMgJiYgT2JqZWN0LmtleXMod29ybGRGaWVsZHMpLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IC4uLmh5ZHJhdGVkLCAuLi53b3JsZEZpZWxkcyB9XG4gICAgICAgIDogaHlkcmF0ZWQ7XG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgc2hvd0pzb24ocnVuV2l0aEh5ZHJhdGVkSU8pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzRXhwaXJlZERhdGEocnVuKSkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBcIlRoaXMgcnVuJ3MgZGF0YSAoaW5wdXQvb3V0cHV0L2Vycm9yKSBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmxvZyhydW5XaXRoSHlkcmF0ZWRJTyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RTdGVwcyA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHtcbiAgICBydW5JZDogdW5kZWZpbmVkLFxuICB9XG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcblxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGluIGxpc3QgY2FsbHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAob3B0cy53b3JrZmxvd05hbWUpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgd29ya2Zsb3ctbmFtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBzdGVwcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcnVuSWQgPSBvcHRzLnJ1bklkXG4gICAgPyBvcHRzLnJ1bklkXG4gICAgOiAoYXdhaXQgZ2V0UmVjZW50UnVuKHdvcmxkLCBvcHRzKSk/LnJ1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdObyBydW4gZm91bmQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICB3YXJuV2l0aERhdGFEZXByZWNhdGVkRm9yTGlzdCgnc3RlcCcpO1xuICB9XG5cbiAgY29uc3QgdXNlQW5hbHl0aWNzID0gIW9wdHMud2l0aERhdGEgJiYgQm9vbGVhbih3b3JsZC5hbmFseXRpY3MpO1xuICBjb25zdCByZXNvbHZlRGF0YSA9IG9wdHMud2l0aERhdGEgPyAnYWxsJyA6ICdub25lJztcblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgdG8gc2hvdyBiYXNlZCBvbiB3aXRoRGF0YSBmbGFnXG4gIGNvbnN0IHByb3BzID0gb3B0cy53aXRoRGF0YVxuICAgID8gU1RFUF9MSVNURURfUFJPUFNcbiAgICA6IFNURVBfTElTVEVEX1BST1BTLmZpbHRlcigocHJvcCkgPT4gIVNURVBfSU9fUFJPUFMuaW5jbHVkZXMocHJvcCkpO1xuXG4gIGNvbnN0IGZldGNoU3RlcHNQYWdlID0gYXN5bmMgKFxuICAgIGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGFnZURhdGE8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBzdGVwcyBmb3IgcnVuICR7cnVuSWR9YCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIH07XG4gICAgaWYgKHVzZUFuYWx5dGljcyAmJiB3b3JsZC5hbmFseXRpY3MpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gYXdhaXQgd29ybGQuYW5hbHl0aWNzLnN0ZXBzLmxpc3QoeyBydW5JZCwgcGFnaW5hdGlvbiB9KTtcbiAgICAgIGNvbnN0IHBhZ2UgPSB7XG4gICAgICAgIGRhdGE6IHN0ZXBzLmRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgICBjdXJzb3I6IHN0ZXBzLmN1cnNvcixcbiAgICAgICAgaGFzTW9yZTogc3RlcHMuaGFzTW9yZSxcbiAgICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHN0ZXBzKSxcbiAgICAgIH07XG4gICAgICBpZiAoY3Vyc29yIHx8IHBhZ2UuZGF0YS5sZW5ndGggPiAwIHx8IHBhZ2UuaGFzTW9yZSkge1xuICAgICAgICByZXR1cm4gcGFnZTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYE5vIGFuYWx5dGljcyBzdGVwcyBmb3VuZCBmb3IgcnVuICR7cnVuSWR9OyBmYWxsaW5nIGJhY2sgdG8gc3RvcmFnZWBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHN0ZXBDaHVua3MgPSBhd2FpdCB3b3JsZC5zdGVwcy5saXN0KHtcbiAgICAgIHJ1bklkLFxuICAgICAgcGFnaW5hdGlvbixcbiAgICAgIHJlc29sdmVEYXRhLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHN0ZXBDaHVua3MuZGF0YS5tYXAoKHMpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKHMsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgY3Vyc29yOiBzdGVwQ2h1bmtzLmN1cnNvcixcbiAgICAgIGhhc01vcmU6IHN0ZXBDaHVua3MuaGFzTW9yZSxcbiAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhzdGVwQ2h1bmtzKSxcbiAgICB9O1xuICB9O1xuXG4gIC8vIEZvciBKU09OIG91dHB1dCwganVzdCBmZXRjaCBvbmNlIGFuZCByZXR1cm5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgZmV0Y2hTdGVwc1BhZ2Uob3B0cy5jdXJzb3IpO1xuICAgICAgc2hvd0pzb24ocGFnZS5kYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaFN0ZXBzUGFnZShjdXJzb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzcGxheVBhZ2U6IGFzeW5jIChzdGVwcykgPT4ge1xuICAgICAgbG9nZ2VyLmxvZyhzaG93VGFibGUoc3RlcHMsIHByb3BzLCBvcHRzKSk7XG4gICAgICBzaG93SW5zcGVjdEluZm9Cb3goJ3N0ZXAnKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93U3RlcCA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBzdGVwSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBzaG93aW5nIGluZGl2aWR1YWwgcmVzb3VyY2VzJyk7XG4gIH1cbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCBpbiBnZXQgY2FsbHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJ1bklkID0gb3B0cy5ydW5JZCA/PyAoYXdhaXQgZ2V0UmVjZW50UnVuKHdvcmxkLCBvcHRzKSk/LnJ1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgJ3J1bi1pZCBpcyByZXF1aXJlZCBmb3Igc2hvd2luZyBhIHN0ZXAuIFVzYWdlOiBgd29ya2Zsb3cgaW5zcGVjdCBzdGVwIDxTVEVQX0lEPiAtLXJ1bklkPTxSVU5fSUQ+YCdcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3RlcCA9IGF3YWl0IHdvcmxkLnN0ZXBzLmdldChydW5JZCwgc3RlcElkLCB7XG4gICAgICByZXNvbHZlRGF0YTogJ2FsbCcsXG4gICAgfSk7XG4gICAgY29uc3Qgc3RlcFdpdGhIeWRyYXRlZElPID0gYXdhaXQgaHlkcmF0ZVJlc291cmNlSU8oc3RlcCwgcmVzb2x2ZUtleSk7XG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgc2hvd0pzb24oc3RlcFdpdGhIeWRyYXRlZElPKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBoYXNFeHBpcmVkRmllbGRzKFxuICAgICAgICAgIHN0ZXBXaXRoSHlkcmF0ZWRJTyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBcIlRoaXMgc3RlcCdzIGRhdGEgKGlucHV0L291dHB1dC9lcnJvcikgaGFzIGV4cGlyZWQgYW5kIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5sb2coc3RlcFdpdGhIeWRyYXRlZElPKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvd1N0cmVhbSA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBzdHJlYW1JZDogc3RyaW5nLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHNob3dpbmcgYSBzdHJlYW0sIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAoIW9wdHMucnVuSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tcnVuIGlzIHJlcXVpcmVkIHdoZW4gc2hvd2luZyBhIHN0cmVhbScpO1xuICB9XG4gIGNvbnN0IHJhd1N0cmVhbSA9IGF3YWl0IHdvcmxkLnN0cmVhbXMuZ2V0KG9wdHMucnVuSWQsIHN0cmVhbUlkKTtcblxuICAvLyBPbmx5IHJlc29sdmUgdGhlIGVuY3J5cHRpb24ga2V5IHdoZW4gLS1kZWNyeXB0IGlzIHBhc3NlZCBhbmQgLS1ydW4gaXMgcHJvdmlkZWQuXG4gIC8vIFdlIGZldGNoIHRoZSBmdWxsIFdvcmtmbG93UnVuIG9iamVjdCBzbyB0aGF0IGdldEVuY3J5cHRpb25LZXlGb3JSdW4gaGFzXG4gIC8vIGFjY2VzcyB0byB0aGUgZGVwbG95bWVudElkIChuZWVkZWQgZm9yIEFQSS1iYXNlZCBrZXkgcmVzb2x1dGlvbikuXG4gIGxldCBlbmNyeXB0aW9uS2V5OiBFbmNyeXB0aW9uS2V5UGFyYW07XG4gIGlmIChvcHRzLmRlY3J5cHQgJiYgb3B0cy5ydW5JZCkge1xuICAgIGVuY3J5cHRpb25LZXkgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQob3B0cy5ydW5JZCEpO1xuICAgICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bik7XG4gICAgICByZXR1cm4gcmF3S2V5ID8gYXdhaXQgaW1wb3J0S2V5KHJhd0tleSkgOiB1bmRlZmluZWQ7XG4gICAgfSkoKTtcbiAgfSBlbHNlIGlmIChvcHRzLmRlY3J5cHQgJiYgIW9wdHMucnVuSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdDYW5ub3QgZGVjcnlwdCBzdHJlYW0gY29udGVudCB3aXRob3V0IGEgcnVuIElELiBVc2UgLS1ydW49PHJ1bi1pZD4gd2l0aCAtLWRlY3J5cHQuJ1xuICAgICk7XG4gIH1cblxuICAvLyBEZXNlcmlhbGl6ZSB0aGUgc3RyZWFtIHRvIGdldCBKYXZhU2NyaXB0IG9iamVjdHNcbiAgY29uc3QgcmV2aXZlcnMgPSBnZXRFeHRlcm5hbFJldml2ZXJzKFxuICAgIGdsb2JhbFRoaXMsXG4gICAgW10sXG4gICAgb3B0cy5ydW5JZCA/PyAnJyxcbiAgICBlbmNyeXB0aW9uS2V5XG4gICk7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IGdldERlc2VyaWFsaXplU3RyZWFtKHJldml2ZXJzLCBlbmNyeXB0aW9uS2V5KTtcbiAgY29uc3Qgc3RyZWFtID0gcmF3U3RyZWFtLnBpcGVUaHJvdWdoKHRyYW5zZm9ybSk7XG5cbiAgbG9nZ2VyLmluZm8oJ1N0cmVhbWluZyB0byBzdGRvdXQsIHByZXNzIENUUkwrQyB0byBhYm9ydC4nKTtcbiAgbG9nZ2VyLmluZm8oXG4gICAgJ1VzZSAtLWpzb24gdG8gb3V0cHV0IHRoZSBzdHJlYW0gYXMgbmV3bGluZS1kZWxpbWl0ZWQgSlNPTiB3aXRob3V0IGluZm8gbG9ncy5cXG4nXG4gICk7XG4gIGF3YWl0IHN0cmVhbVRvQ29uc29sZShzdHJlYW0sIHN0cmVhbUlkLCBvcHRzKTtcbn07XG5cbi8qKlxuICogTGlzdGluZyBzdHJlYW1zIG9ubHkgbGlzdHMgYXZhaWxhYmxlIHN0cmVhbSBJRHMgYmFzZWQgb24gcnVuL3N0ZXAgcGFzc2VkLFxuICogYW5kIGRvZXNuJ3QgcmVhZCBhbnkgZGF0YSBmcm9tIHRoZSBzdHJlYW1zLlxuICovXG5leHBvcnQgY29uc3QgbGlzdFN0cmVhbXNCeVJ1bklkID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIGxvZ2dlci53YXJuKCdgd2l0aERhdGFgIGZsYWcgaXMgaWdub3JlZCB3aGVuIGxpc3Rpbmcgc3RyZWFtcycpO1xuICB9XG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0cmVhbXMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzdHJlYW1zLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBsZXQgcnVuSWQgPSBvcHRzLnJ1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnTm8gcnVuLWlkIHByb3ZpZGVkLiBMaXN0aW5nIHN0cmVhbXMgZm9yIGxhdGVzdCBydW4gaW5zdGVhZC4nLFxuICAgICAgJ1VzZSAtLXJ1bj08cnVuLWlkPiB0byBmaWx0ZXIgc3RyZWFtcyBieSBydW4uJ1xuICAgICk7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgZ2V0UmVjZW50UnVuKHdvcmxkLCBvcHRzKTtcbiAgICBpZiAoIXJ1bikge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIHJ1bnMgZm91bmQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJ1bklkID0gcnVuLnJ1bklkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdHJlYW1JZHMgPSBhd2FpdCB3b3JsZC5zdHJlYW1zLmxpc3QocnVuSWQpO1xuICAgIGNvbnN0IG1hdGNoaW5nU3RyZWFtcyA9IHN0cmVhbUlkcy5tYXAoKHN0cmVhbUlkKSA9PiAoe1xuICAgICAgcnVuSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICB9KSk7XG5cbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihtYXRjaGluZ1N0cmVhbXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dnZXIubG9nKHNob3dUYWJsZShtYXRjaGluZ1N0cmVhbXMsIFsncnVuSWQnLCAnc3RyZWFtSWQnXSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RFdmVudHMgPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGV2ZW50cywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcnVuSWQgPSBvcHRzLnJ1bklkID8/IChhd2FpdCBnZXRSZWNlbnRSdW4od29ybGQsIG9wdHMpKT8ucnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ05vIHJ1biBmb3VuZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIHdhcm5XaXRoRGF0YURlcHJlY2F0ZWRGb3JMaXN0KCdldmVudCcpO1xuICB9XG5cbiAgY29uc3QgdXNlQW5hbHl0aWNzID0gIW9wdHMud2l0aERhdGEgJiYgQm9vbGVhbih3b3JsZC5hbmFseXRpY3MpO1xuICBjb25zdCBjb3JyZWxhdGlvbklkRmlsdGVyID0gb3B0cy5ob29rSWQgfHwgb3B0cy5zdGVwSWQ7XG5cbiAgLy8gRGV0ZXJtaW5lIHdoaWNoIHByb3BzIHRvIHNob3cgYmFzZWQgb24gd2l0aERhdGEgZmxhZ1xuICBjb25zdCBwcm9wcyA9IG9wdHMud2l0aERhdGFcbiAgICA/IEVWRU5UX0xJU1RFRF9QUk9QU1xuICAgIDogRVZFTlRfTElTVEVEX1BST1BTLmZpbHRlcigocHJvcCkgPT4gIUVWRU5UX0lPX1BST1BTLmluY2x1ZGVzKHByb3ApKTtcblxuICBjb25zdCBmZXRjaEV2ZW50c1BhZ2UgPSBhc3luYyAoXG4gICAgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQYWdlRGF0YTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+ID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIGV2ZW50cyBmb3IgcnVuICR7cnVuSWR9YCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIH07XG4gICAgaWYgKHVzZUFuYWx5dGljcyAmJiB3b3JsZC5hbmFseXRpY3MpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IHdvcmxkLmFuYWx5dGljcy5ldmVudHMubGlzdCh7XG4gICAgICAgIHJ1bklkLFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBjb3JyZWxhdGlvbklkRmlsdGVyLFxuICAgICAgICBwYWdpbmF0aW9uLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYWdlID0ge1xuICAgICAgICBkYXRhOiBldmVudHMuZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICAgIGN1cnNvcjogZXZlbnRzLmN1cnNvcixcbiAgICAgICAgaGFzTW9yZTogZXZlbnRzLmhhc01vcmUsXG4gICAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhldmVudHMpLFxuICAgICAgfTtcbiAgICAgIGlmIChjdXJzb3IgfHwgcGFnZS5kYXRhLmxlbmd0aCA+IDAgfHwgcGFnZS5oYXNNb3JlKSB7XG4gICAgICAgIHJldHVybiBwYWdlO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTm8gYW5hbHl0aWNzIGV2ZW50cyBmb3VuZCBmb3IgcnVuICR7cnVuSWR9OyBmYWxsaW5nIGJhY2sgdG8gc3RvcmFnZWBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcmxkLmV2ZW50cy5saXN0KHtcbiAgICAgIHJ1bklkLFxuICAgICAgcGFnaW5hdGlvbixcbiAgICAgIHJlc29sdmVEYXRhOiBvcHRzLndpdGhEYXRhID8gJ2FsbCcgOiAnbm9uZScsXG4gICAgfSk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSBjb3JyZWxhdGlvbklkRmlsdGVyXG4gICAgICA/IHJlc3VsdC5kYXRhLmZpbHRlcigoZSkgPT4gZS5jb3JyZWxhdGlvbklkID09PSBjb3JyZWxhdGlvbklkRmlsdGVyKVxuICAgICAgOiByZXN1bHQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaWx0ZXJlZC5tYXAoKGUpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKGUsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgY3Vyc29yOiByZXN1bHQuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogcmVzdWx0Lmhhc01vcmUsXG4gICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8ocmVzdWx0KSxcbiAgICB9O1xuICB9O1xuXG4gIC8vIEZvciBKU09OIG91dHB1dCwganVzdCBmZXRjaCBvbmNlIGFuZCByZXR1cm5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgZmV0Y2hFdmVudHNQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICAgIHNob3dKc29uKHBhZ2UuZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBzZXR1cExpc3RQYWdpbmF0aW9uPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7XG4gICAgaW5pdGlhbEN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgaW50ZXJhY3RpdmU6IG9wdHMuaW50ZXJhY3RpdmUsXG4gICAgZmV0Y2hQYWdlOiBhc3luYyAoY3Vyc29yKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZmV0Y2hFdmVudHNQYWdlKGN1cnNvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKGV2ZW50cykgPT4ge1xuICAgICAgbG9nZ2VyLmxvZyhzaG93VGFibGUoZXZlbnRzLCBwcm9wcywgb3B0cykpO1xuICAgICAgc2hvd0luc3BlY3RJbmZvQm94KCdldmVudCcpO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RIb29rcyA9IGFzeW5jICh3b3JsZDogV29ybGQsIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcblxuICBpZiAob3B0cy53b3JrZmxvd05hbWUpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgd29ya2Zsb3ctbmFtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBob29rcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGhvb2tzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5JZCA9IG9wdHMucnVuSWQ7XG4gIGNvbnN0IHJlc29sdmVEYXRhID0gb3B0cy53aXRoRGF0YSA/ICdhbGwnIDogJ25vbmUnO1xuICAvLyBIb29rcyBhbHdheXMgcmVhZCBmcm9tIHRoZSBydW50aW1lIHN0b3JhZ2UgQVBJLiBVbmxpa2UgcnVucy9zdGVwcy9ldmVudHMsXG4gIC8vIHRoZSBhbmFseXRpY3MgcmVhZCBwYXRoIG9taXRzIGBvd25lcklkYCAoYW5kIHRoZSBzZWNyZXQgaG9vayB0b2tlbiB1c2VkIGJ5XG4gIC8vIHJlc3VtZS9jb3B5LXRva2VuIHN1cmZhY2VzKSwgc28gaG9vayBsaXN0aW5nIHN0YXlzIG9uIHRoZSBjYW5vbmljYWwgQVBJcy5cbiAgY29uc3QgZmV0Y2hIb29rc1BhZ2UgPSBhc3luYyAoXG4gICAgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQYWdlRGF0YTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+ID0+IHtcbiAgICBpZiAoIXJ1bklkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZldGNoaW5nIGFsbCBob29rcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIGhvb2tzIGZvciBydW4gJHtydW5JZH1gKTtcbiAgICB9XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIH07XG4gICAgY29uc3QgaG9va3MgPSBhd2FpdCB3b3JsZC5ob29rcy5saXN0KHsgcnVuSWQsIHBhZ2luYXRpb24sIHJlc29sdmVEYXRhIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGhvb2tzLmRhdGEubWFwKChoKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhoLCByZXNvbHZlS2V5KSlcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgIGN1cnNvcjogaG9va3MuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogaG9va3MuaGFzTW9yZSxcbiAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhob29rcyksXG4gICAgfTtcbiAgfTtcblxuICAvLyBGb3IgSlNPTiBvdXRwdXQsIGp1c3QgZmV0Y2ggb25jZSBhbmQgcmV0dXJuXG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGZldGNoSG9va3NQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICAgIHNob3dKc29uUGFnZShwYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldHVwIHBhZ2luYXRpb24gd2l0aCBuZXcgbWVjaGFuaXNtXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaEhvb2tzUGFnZShjdXJzb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzcGxheVBhZ2U6IGFzeW5jIChob29rcykgPT4ge1xuICAgICAgbG9nZ2VyLmxvZyhzaG93VGFibGUoaG9va3MsIEhPT0tfTElTVEVEX1BST1BTLCBvcHRzKSk7XG4gICAgICBzaG93SW5zcGVjdEluZm9Cb3goJ2hvb2snKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93SG9vayA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBob29rSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBzaG93aW5nIGluZGl2aWR1YWwgcmVzb3VyY2VzJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBob29rID0gYXdhaXQgd29ybGQuaG9va3MuZ2V0KGhvb2tJZCwge1xuICAgICAgcmVzb2x2ZURhdGE6ICdhbGwnLFxuICAgIH0pO1xuICAgIGNvbnN0IGh5ZHJhdGVkSG9vayA9IGF3YWl0IGh5ZHJhdGVSZXNvdXJjZUlPKGhvb2ssIHJlc29sdmVLZXkpO1xuICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgIHNob3dKc29uKGh5ZHJhdGVkSG9vayk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgaGFzRXhwaXJlZEZpZWxkcyhoeWRyYXRlZEhvb2sgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBcIlRoaXMgaG9vaydzIGRhdGEgKG1ldGFkYXRhKSBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmxvZyhoeWRyYXRlZEhvb2spO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbi8qKlxuICogTGlzdCB3YWl0cy9zbGVlcHMgdmlhIHRoZSBhbmFseXRpY3MgcmVhZCBwYXRoLiBUaGUgYW5hbHl0aWNzIHdhaXQgc2hhcGUgaXNcbiAqIGtleWVkIGJ5IGB3YWl0SWRgL2BzdGF0dXNgIHJhdGhlciB0aGFuIHRoZSBgY29ycmVsYXRpb25JZGAvYGV2ZW50SWRgIGNvbHVtbnNcbiAqIHJlY29uc3RydWN0ZWQgZnJvbSB0aGUgZXZlbnQgc3RyZWFtIGluIHRoZSBmYWxsYmFjayBwYXRoLlxuICovXG5jb25zdCBsaXN0U2xlZXBzVmlhQW5hbHl0aWNzID0gYXN5bmMgKFxuICBhbmFseXRpY3M6IE5vbk51bGxhYmxlPFdvcmxkWydhbmFseXRpY3MnXT4sXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgZmV0Y2hTbGVlcHNQYWdlID0gYXN5bmMgKFxuICAgIGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGFnZURhdGE8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiA9PiB7XG4gICAgY29uc3Qgd2FpdHMgPSBhd2FpdCBhbmFseXRpY3Mud2FpdHMubGlzdCh7XG4gICAgICBydW5JZDogb3B0cy5ydW5JZCBhcyBzdHJpbmcsXG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogd2FpdHMuZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICBjdXJzb3I6IHdhaXRzLmN1cnNvcixcbiAgICAgIGhhc01vcmU6IHdhaXRzLmhhc01vcmUsXG4gICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8od2FpdHMpLFxuICAgIH07XG4gIH07XG5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaFNsZWVwc1BhZ2Uob3B0cy5jdXJzb3IpO1xuICAgIHNob3dKc29uKHBhZ2UuZGF0YSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgc2V0dXBMaXN0UGFnaW5hdGlvbjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICAgIGluaXRpYWxDdXJzb3I6IG9wdHMuY3Vyc29yLFxuICAgIGludGVyYWN0aXZlOiBvcHRzLmludGVyYWN0aXZlLFxuICAgIGZldGNoUGFnZTogZmV0Y2hTbGVlcHNQYWdlLFxuICAgIGRpc3BsYXlQYWdlOiBhc3luYyAod2FpdHMpID0+IHtcbiAgICAgIGxvZ2dlci5sb2coXG4gICAgICAgIHNob3dUYWJsZShcbiAgICAgICAgICB3YWl0cyxcbiAgICAgICAgICBbJ3dhaXRJZCcsICdzdGF0dXMnLCAnY3JlYXRlZEF0JywgJ3Jlc3VtZUF0JywgJ2NvbXBsZXRlZEF0J10sXG4gICAgICAgICAgeyAuLi5vcHRzLCBkaXNhYmxlUmVsYXRpdmVEYXRlczogdHJ1ZSB9XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdFNsZWVwcyA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgaWYgKCFvcHRzLnJ1bklkKSB7XG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgJ3J1bi1pZCBpcyByZXF1aXJlZCBmb3IgbGlzdGluZyBzbGVlcHMuIFVzYWdlOiBgd29ya2Zsb3cgaW5zcGVjdCBzbGVlcHMgLS1ydW5JZD08aWQ+YCdcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNsZWVwcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNsZWVwcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ2B3aXRoRGF0YWAgZmxhZyBpcyBpZ25vcmVkIHdoZW4gbGlzdGluZyBzbGVlcHMnKTtcbiAgfVxuXG4gIC8vIFByZWZlciB0aGUgYW5hbHl0aWNzIHJlYWQgcGF0aCBmb3Igd2FpdC9zbGVlcCBsaXN0aW5nIHdoZW4gYXZhaWxhYmxlLlxuICBpZiAod29ybGQuYW5hbHl0aWNzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxpc3RTbGVlcHNWaWFBbmFseXRpY3Mod29ybGQuYW5hbHl0aWNzLCBvcHRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gRmV0Y2ggYWxsIGV2ZW50cyBmb3IgdGhlIHJ1biB3aXRoIHJlc29sdmVEYXRhPSdhbGwnIHRvIGdldCB3YWl0IGV2ZW50RGF0YVxuICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IHdvcmxkLmV2ZW50cy5saXN0KHtcbiAgICAgIHJ1bklkOiBvcHRzLnJ1bklkLFxuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICAgIGxpbWl0OiAxMDAwLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmVEYXRhOiAnYWxsJyxcbiAgICB9KTtcblxuICAgIC8vIFNob3cgaW5mbyBtZXNzYWdlIGlmIHRoZXJlIG1pZ2h0IGJlIG1vcmUgc2xlZXBzXG4gICAgaWYgKGV2ZW50cy5oYXNNb3JlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgJ1dhcm5pbmc6IFRoaXMgcnVuIGhhcyBtb3JlIHRoYW4gMTAwMCBldmVudHMuIFNvbWUgc2xlZXBzIG1pZ2h0IG5vdCBiZSBzaG93bi4gUGxlYXNlIHVzZSB0aGUgd2ViIFVJIHRvIGVuc3VyZSBnZXR0aW5nIGEgY29tcGxldGUgbGlzdC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEdyb3VwIHdhaXQgZXZlbnRzIGJ5IGNvcnJlbGF0aW9uSWRcbiAgICBjb25zdCB3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudFtdPigpO1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzLmRhdGEpIHtcbiAgICAgIGlmIChpc1dhaXRFdmVudFR5cGUoZXZlbnQuZXZlbnRUeXBlKSAmJiBldmVudC5jb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gd2FpdEV2ZW50c0J5Q29ycmVsYXRpb24uZ2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQpID8/IFtdO1xuICAgICAgICBleGlzdGluZy5wdXNoKGV2ZW50KTtcbiAgICAgICAgd2FpdEV2ZW50c0J5Q29ycmVsYXRpb24uc2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQsIGV4aXN0aW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod2FpdEV2ZW50c0J5Q29ycmVsYXRpb24uc2l6ZSA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIHNsZWVwcyBmb3VuZCBmb3IgdGhpcyBydW4uJyk7XG4gICAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICAgIHNob3dKc29uKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5sb2coXG4gICAgICAgICAgc2hvd1RhYmxlKFtdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIFdBSVRfTElTVEVEX1BST1BTLCB7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgZGlzYWJsZVJlbGF0aXZlRGF0ZXM6IHRydWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBzbGVlcHMgZnJvbSBncm91cGVkIHdhaXQgZXZlbnRzXG4gICAgY29uc3Qgc2xlZXBzOiBTbGVlcFtdID0gW107XG4gICAgZm9yIChjb25zdCBbY29ycmVsYXRpb25JZCwgY29ycmVsYXRpb25FdmVudHNdIG9mIHdhaXRFdmVudHNCeUNvcnJlbGF0aW9uKSB7XG4gICAgICAvLyBTdGl0Y2ggdXAgd2FpdF9jcmVhdGVkIGFuZCB3YWl0X2NvbXBsZXRlZCBldmVudHNcbiAgICAgIGNvbnN0IHdhaXRDcmVhdGVkID0gY29ycmVsYXRpb25FdmVudHMuZmluZChcbiAgICAgICAgKGU6IEV2ZW50KSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCdcbiAgICAgICk7XG4gICAgICBjb25zdCB3YWl0Q29tcGxldGVkID0gY29ycmVsYXRpb25FdmVudHMuZmluZChcbiAgICAgICAgKGU6IEV2ZW50KSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICAgICAgKTtcblxuICAgICAgaWYgKHdhaXRDcmVhdGVkKSB7XG4gICAgICAgIGNvbnN0IHNsZWVwOiBTbGVlcCA9IHtcbiAgICAgICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgICAgIHJ1bklkOiB3YWl0Q3JlYXRlZC5ydW5JZCxcbiAgICAgICAgICBldmVudElkOiB3YWl0Q3JlYXRlZC5ldmVudElkLFxuICAgICAgICAgIGNyZWF0ZWRBdDogd2FpdENyZWF0ZWQuY3JlYXRlZEF0LFxuICAgICAgICAgIHJlc3VtZUF0OlxuICAgICAgICAgICAgd2FpdENyZWF0ZWQuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICAgICAgICAgICA/IHdhaXRDcmVhdGVkLmV2ZW50RGF0YS5yZXN1bWVBdFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjb21wbGV0ZWRBdDogd2FpdENvbXBsZXRlZD8uY3JlYXRlZEF0LFxuICAgICAgICB9O1xuICAgICAgICBzbGVlcHMucHVzaChzbGVlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU29ydCBzbGVlcHMgYnkgY3JlYXRlZEF0XG4gICAgc2xlZXBzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVBID0gYS5jcmVhdGVkQXQuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgdGltZUIgPSBiLmNyZWF0ZWRBdC5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gb3B0cy5zb3J0ID09PSAnYXNjJyA/IHRpbWVBIC0gdGltZUIgOiB0aW1lQiAtIHRpbWVBO1xuICAgIH0pO1xuXG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgc2hvd0pzb24oc2xlZXBzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKFxuICAgICAgc2hvd1RhYmxlKFxuICAgICAgICBzbGVlcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgICBXQUlUX0xJU1RFRF9QUk9QUyxcbiAgICAgICAgeyAuLi5vcHRzLCBkaXNhYmxlUmVsYXRpdmVEYXRlczogdHJ1ZSB9XG4gICAgICApXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG4iXX0=
|
|
1191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L291dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBRXBCLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUdMLGVBQWUsR0FJaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsbUNBQW1DLEdBQ3BDLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJEOzs7Ozs7R0FNRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQVksRUFBRSxPQUFnQjtJQUNwRCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQTJDLENBQUM7SUFDakUsT0FBTyxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQ3ZCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxH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QUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsQ0FDUixTQUFTLENBQ1AsTUFBOEMsRUFDOUMsaUJBQWlCLEVBQ2pCLEVBQUUsR0FBRyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQ3hDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUNELE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGRlcml2ZVJ1blBheWxvYWRLZXlzLFxuICB0eXBlIEVuY3J5cHRpb25LZXlQYXJhbSxcbiAgZ2V0RGVzZXJpYWxpemVTdHJlYW0sXG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgVkVSQ0VMXzQwM19FUlJPUl9NRVNTQUdFIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB7XG4gIHR5cGUgRXZlbnQsXG4gIHR5cGUgSG9vayxcbiAgaXNXYWl0RXZlbnRUeXBlLFxuICB0eXBlIFN0ZXAsXG4gIHR5cGUgV29ya2Zsb3dSdW4sXG4gIHR5cGUgV29ybGQsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5pbXBvcnQgeyBmb3JtYXREaXN0YW5jZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCBUYWJsZSBmcm9tICdlYXN5LXRhYmxlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2NvbmZpZy9sb2cuanMnO1xuaW1wb3J0IHR5cGUgeyBJbnNwZWN0Q0xJT3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBnZXRPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkTWVzc2FnZSxcbiAgaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3IsXG59IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgRW5jcnlwdGlvbktleVJlc29sdmVyLFxuICBoeWRyYXRlUmVzb3VyY2VJTyxcbiAgaXNFbmNyeXB0ZWRSZWYsXG4gIGlzRXhwaXJlZFJlZixcbn0gZnJvbSAnLi9oeWRyYXRpb24uanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRpbWVXaW5kb3cgfSBmcm9tICcuL3RpbWUtd2luZG93LmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRW5jcnlwdGlvbktleVJlc29sdmVyIGZyb20gYSBXb3JsZCBpbnN0YW5jZS5cbiAqIFJldHVybnMgbnVsbCBpZiBkZWNyeXB0IGlzIGZhbHNlIOKAlCBlbmNyeXB0ZWQgZGF0YSB3aWxsIHNob3cgYXMgYSBwbGFjZWhvbGRlci5cbiAqXG4gKiBUaGUgcmVzb2x2ZXIgZmV0Y2hlcyB0aGUgZnVsbCBXb3JrZmxvd1J1biAoY2FjaGVkIHBlciBydW5JZCkgc28gdGhhdCB0aGVcbiAqIFdvcmxkIGNhbiBpbnNwZWN0IGRlcGxveW1lbnQtc3BlY2lmaWMgZmllbGRzIGZvciBrZXkgcmVzb2x1dGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZXIod29ybGQ6IFdvcmxkLCBkZWNyeXB0OiBib29sZWFuKTogRW5jcnlwdGlvbktleVJlc29sdmVyIHtcbiAgaWYgKCFkZWNyeXB0KSByZXR1cm4gbnVsbDtcbiAgaWYgKCF3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPj4oKTtcbiAgcmV0dXJuIChydW5JZDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IGNhY2hlZCA9IGNhY2hlLmdldChydW5JZCk7XG4gICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgIGNhY2hlZCA9IHdvcmxkLnJ1bnNcbiAgICAgICAgLmdldChydW5JZClcbiAgICAgICAgLnRoZW4oKHJ1bikgPT4gd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1biEocnVuKSk7XG4gICAgICBjYWNoZS5zZXQocnVuSWQsIGNhY2hlZCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQ7XG4gIH07XG59XG5cbmltcG9ydCB7XG4gIHR5cGUgQW5hbHl0aWNzUGFnZUluZm8sXG4gIHR5cGUgUGFnZURhdGEsXG4gIHNldHVwTGlzdFBhZ2luYXRpb24sXG59IGZyb20gJy4vcGFnaW5hdGlvbi5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Ub0NvbnNvbGUgfSBmcm9tICcuL3N0cmVhbS5qcyc7XG5pbXBvcnQge1xuICBmb3JtYXRJU09EYXRlLFxuICBmb3JtYXRTdGF0dXMgYXMgZm9ybWF0U3RhdHVzQWJicmV2LFxuICBnZXREaXNwbGF5U2V0dGluZ3MsXG4gIGdldFRlcm1pbmFsV2lkdGgsXG4gIGlzQ0ksXG59IGZyb20gJy4vdGVybWluYWwtdXRpbHMuanMnO1xuXG5jb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDIwO1xubGV0IFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSCA9IDE1OyAvLyBXaWxsIGJlIGFkanVzdGVkIGJhc2VkIG9uIHRlcm1pbmFsIHdpZHRoXG5cbmNvbnN0IFdPUktGTE9XX1JVTl9JT19QUk9QUzogKGtleW9mIFdvcmtmbG93UnVuKVtdID0gWydpbnB1dCcsICdvdXRwdXQnXTtcblxuY29uc3QgU1RFUF9JT19QUk9QUzogKGtleW9mIFN0ZXApW10gPSBbJ2lucHV0JywgJ291dHB1dCddO1xuXG5jb25zdCBXT1JLRkxPV19SVU5fTElTVEVEX1BST1BTOiAoa2V5b2YgV29ya2Zsb3dSdW4pW10gPSBbXG4gICdydW5JZCcsXG4gICd3b3JrZmxvd05hbWUnLFxuICAnc3RhdHVzJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdjb21wbGV0ZWRBdCcsXG4gIC4uLldPUktGTE9XX1JVTl9JT19QUk9QUyxcbl07XG5cbmNvbnN0IFNURVBfTElTVEVEX1BST1BTOiAoa2V5b2YgU3RlcClbXSA9IFtcbiAgJ3J1bklkJyxcbiAgJ3N0ZXBJZCcsXG4gICdzdGVwTmFtZScsXG4gICdzdGF0dXMnLFxuICAnc3RhcnRlZEF0JyxcbiAgJ2NvbXBsZXRlZEF0JyxcbiAgLi4uU1RFUF9JT19QUk9QUyxcbl07XG5cbmNvbnN0IEVWRU5UX0lPX1BST1BTOiAoa2V5b2YgRXZlbnQgfCAnZXZlbnREYXRhJylbXSA9IFsnZXZlbnREYXRhJ107XG5cbmNvbnN0IEVWRU5UX0xJU1RFRF9QUk9QUzogKGtleW9mIEV2ZW50IHwgJ2V2ZW50RGF0YScpW10gPSBbXG4gICdldmVudElkJyxcbiAgJ2V2ZW50VHlwZScsXG4gICdjb3JyZWxhdGlvbklkJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gIC4uLkVWRU5UX0lPX1BST1BTLFxuXTtcblxuLy8gY29uc3QgSE9PS19EQVRBX1BST1BTOiAoa2V5b2YgSG9vayB8ICdoYXNSZXNwb25zZScpW10gPSBbJ2hhc1Jlc3BvbnNlJ107XG5cbmNvbnN0IEhPT0tfTElTVEVEX1BST1BTOiAoa2V5b2YgSG9vayB8ICdoYXNSZXNwb25zZScpW10gPSBbXG4gICdydW5JZCcsXG4gICdob29rSWQnLFxuICAnb3duZXJJZCcsXG4gICdjcmVhdGVkQXQnLFxuICAvLyAuLi5IT09LX0RBVEFfUFJPUFMsXG5dO1xuXG5pbnRlcmZhY2UgU2xlZXAge1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGV2ZW50SWQ6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICByZXN1bWVBdDogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgY29tcGxldGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFdBSVRfTElTVEVEX1BST1BTOiAoa2V5b2YgU2xlZXApW10gPSBbXG4gICdjb3JyZWxhdGlvbklkJyxcbiAgJ2V2ZW50SWQnLFxuICAnY3JlYXRlZEF0JyxcbiAgJ3Jlc3VtZUF0JyxcbiAgJ2NvbXBsZXRlZEF0Jyxcbl07XG5cbmNvbnN0IFNUQVRVU19DT0xPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc+ID0ge1xuICBydW5uaW5nOiBjaGFsay5ibHVlLFxuICBjb21wbGV0ZWQ6IGNoYWxrLmdyZWVuLFxuICBmYWlsZWQ6IGNoYWxrLnJlZCxcbiAgY2FuY2VsbGVkOiBjaGFsay5zdHJpa2V0aHJvdWdoLnllbGxvdyxcbiAgcGVuZGluZzogY2hhbGsuYmx1ZSxcbiAgd2FpdGluZzogY2hhbGsuYmx1ZSxcbn07XG5cbmNvbnN0IGlzU3RyZWFtSWQgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5zdGFydHNXaXRoKCdzdHJtXycpO1xufTtcblxuY29uc3Qgc2hvd1N0YXR1c0xlZ2VuZCA9ICgpID0+IHtcbiAgbG9nZ2VyLmxvZygnXFxuU3RhdHVzIExlZ2VuZDonKTtcbiAgY29uc3Qgc3RhdHVzZXMgPSBbXG4gICAgJ3J1bm5pbmcnLFxuICAgICdjb21wbGV0ZWQnLFxuICAgICdmYWlsZWQnLFxuICAgICdjYW5jZWxsZWQnLFxuICAgICdwZW5kaW5nJyxcbiAgICAnd2FpdGluZycsXG4gIF07XG5cbiAgY29uc3QgbGVnZW5kSXRlbXMgPSBzdGF0dXNlcy5tYXAoKHN0YXR1cykgPT4ge1xuICAgIGNvbnN0IGNvbG9yRnVuYyA9IFNUQVRVU19DT0xPUlNbc3RhdHVzXTtcbiAgICBjb25zdCBhYmJyZXYgPSBmb3JtYXRTdGF0dXNBYmJyZXYoc3RhdHVzLCB0cnVlKTtcbiAgICByZXR1cm4gYCR7Y29sb3JGdW5jKGFiYnJldil9ID0gJHtzdGF0dXN9YDtcbiAgfSk7XG5cbiAgbG9nZ2VyLmxvZyhgICAke2xlZ2VuZEl0ZW1zLmpvaW4oJyAgJyl9YCk7XG4gIGxvZ2dlci5sb2coJycpO1xufTtcblxuY29uc3QgaXNTbGVlcFN0ZXAgPSAoc3RlcE5hbWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gc3RlcE5hbWUuaW5jbHVkZXMoJy1zbGVlcCcpO1xufTtcblxuY29uc3QgY2hlY2tBbmRIYW5kbGVWZXJjZWxBY2Nlc3NFcnJvciA9IChcbiAgZXJyb3I6IHVua25vd24sXG4gIGJhY2tlbmQ/OiBzdHJpbmdcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoYmFja2VuZCA9PT0gJ3ZlcmNlbCcgJiYgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGVyciA9IGVycm9yIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChlcnIuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihWRVJDRUxfNDAzX0VSUk9SX01FU1NBR0UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGV4dHJhY3RFcnJvck1lc3NhZ2UgPSAoXG4gIGVycjogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChlcnIubWVzc2FnZSAmJiB0eXBlb2YgZXJyLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVyci5tZXNzYWdlO1xuICB9XG5cbiAgaWYgKGVyci5ib2R5ICYmIHR5cGVvZiBlcnIuYm9keSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBib2R5ID0gZXJyLmJvZHkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGJvZHkubWVzc2FnZSAmJiB0eXBlb2YgYm9keS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGJvZHkubWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKGJvZHkuZXJyb3IgJiYgdHlwZW9mIGJvZHkuZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYm9keS5lcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZ2V0UGFnZUluZm8gPSAocmVzdWx0OiB1bmtub3duKTogQW5hbHl0aWNzUGFnZUluZm8gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoXG4gICAgdHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcgfHxcbiAgICByZXN1bHQgPT09IG51bGwgfHxcbiAgICAhKCdwYWdlSW5mbycgaW4gcmVzdWx0KVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiAocmVzdWx0IGFzIHsgcGFnZUluZm8/OiBBbmFseXRpY3NQYWdlSW5mbyB9KS5wYWdlSW5mbztcbn07XG5cbmNvbnN0IGhhbmRsZUFwaUVycm9yID0gKGVycm9yOiB1bmtub3duLCBiYWNrZW5kPzogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIC8vIEZpcnN0IGNoZWNrIGZvciBWZXJjZWwgYWNjZXNzIGVycm9yc1xuICBpZiAoY2hlY2tBbmRIYW5kbGVWZXJjZWxBY2Nlc3NFcnJvcihlcnJvciwgYmFja2VuZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc09ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRFcnJvcihlcnJvcikpIHtcbiAgICBsb2dnZXIuZXJyb3IoZ2V0T2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZE1lc3NhZ2UoKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBIYW5kbGUgb3RoZXIgSFRUUCBlcnJvcnNcbiAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBlcnIgPSBlcnJvciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIEhhbmRsZSA0MDAgQmFkIFJlcXVlc3RcbiAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0JhZCBSZXF1ZXN0OiBUaGUgcmVxdWVzdCB3YXMgaW52YWxpZC4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYERldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBvdGhlciBIVFRQIGVycm9ycyAoNDA0LCA1MDAsIGV0Yy4pXG4gICAgaWYgKHR5cGVvZiBlcnIuc3RhdHVzID09PSAnbnVtYmVyJyAmJiBlcnIuc3RhdHVzID49IDQwMCkge1xuICAgICAgbG9nZ2VyLmVycm9yKGBIVFRQIEVycm9yICR7ZXJyLnN0YXR1c306ICR7Z2V0U3RhdHVzVGV4dChlcnIuc3RhdHVzKX1gKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYERldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGdldFN0YXR1c1RleHQgPSAoc3RhdHVzOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzdGF0dXNUZXh0czogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcbiAgICA0MDA6ICdCYWQgUmVxdWVzdCcsXG4gICAgNDAxOiAnVW5hdXRob3JpemVkJyxcbiAgICA0MDI6ICdQYXltZW50IFJlcXVpcmVkJyxcbiAgICA0MDM6ICdGb3JiaWRkZW4nLFxuICAgIDQwNDogJ05vdCBGb3VuZCcsXG4gICAgNDI5OiAnVG9vIE1hbnkgUmVxdWVzdHMnLFxuICAgIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG4gICAgNTAyOiAnQmFkIEdhdGV3YXknLFxuICAgIDUwMzogJ1NlcnZpY2UgVW5hdmFpbGFibGUnLFxuICB9O1xuICByZXR1cm4gc3RhdHVzVGV4dHNbc3RhdHVzXSB8fCAnVW5rbm93biBFcnJvcic7XG59O1xuXG5jb25zdCB0cnVuY2F0ZU5hbWVJZk5lZWRlZCA9IChuYW1lOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIG1heExlbmd0aCA8IG5hbWUubGVuZ3RoID8gYCR7bmFtZS5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKX0uLi5gIDogbmFtZTtcbn07XG5cbmNvbnN0IGZvcm1hdE5hbWVGaWVsZCA9IChcbiAgbmFtZU5vblVuaXF1ZTogc3RyaW5nLFxuICB0cnVuY2F0ZUxlbmd0aDogbnVtYmVyLFxuICBpc1NsZWVwOiBib29sZWFuXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0cnVuY2F0ZWROYW1lID0gdHJ1bmNhdGVOYW1lSWZOZWVkZWQobmFtZU5vblVuaXF1ZSwgdHJ1bmNhdGVMZW5ndGgpO1xuICBpZiAoaXNTbGVlcCkge1xuICAgIHJldHVybiBjaGFsay55ZWxsb3dCcmlnaHQodHJ1bmNhdGVkTmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNoYWxrLmJsdWUuYmx1ZUJyaWdodCh0cnVuY2F0ZWROYW1lKTtcbn07XG5cbmNvbnN0IGZvcm1hdElkRmllbGQgPSAoXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4gIHNob3VsZFRydW5jYXRlSWRzOiBib29sZWFuXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB2YWx1ZVN0ciA9IFN0cmluZyh2YWx1ZSk7XG4gIGNvbnN0IGlkU3RyID0gc2hvdWxkVHJ1bmNhdGVJZHMgPyB0cnVuY2F0ZUlkVG9MYXN0Q2hhcnModmFsdWVTdHIpIDogdmFsdWVTdHI7XG4gIGlmIChwcm9wID09PSAnc3RyZWFtSWQnKSB7XG4gICAgcmV0dXJuIGNoYWxrLmdyZWVuKGlkU3RyKTtcbiAgfVxuICByZXR1cm4gaWRTdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VGFibGVWYWx1ZSA9IChcbiAgcHJvcDogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSxcbiAgZGlzcGxheVNldHRpbmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGlzcGxheVNldHRpbmdzPixcbiAgaXRlbT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pID0+IHtcbiAgY29uc3QgbmFtZXNUcnVuY2F0ZSA9IGRpc3BsYXlTZXR0aW5ncz8ubmFtZXNUcnVuY2F0ZUxlbmd0aCA/PyA0MDtcbiAgY29uc3Qgc2hvdWxkVHJ1bmNhdGVJZHMgPSBkaXNwbGF5U2V0dGluZ3M/LnRydW5jYXRlSWRzVG9MYXN0Q2hhcnMgPz8gZmFsc2U7XG5cbiAgLy8gSGFuZGxlIElEcyB3aXRoIHBvdGVudGlhbCB0cnVuY2F0aW9uXG4gIGlmIChcbiAgICBbXG4gICAgICAnc3RyZWFtSWQnLFxuICAgICAgJ3J1bklkJyxcbiAgICAgICdzdGVwSWQnLFxuICAgICAgJ2hvb2tJZCcsXG4gICAgICAnZXZlbnRJZCcsXG4gICAgICAnY29ycmVsYXRpb25JZCcsXG4gICAgICAnb3duZXJJZCcsXG4gICAgXS5pbmNsdWRlcyhwcm9wKVxuICApIHtcbiAgICByZXR1cm4gZm9ybWF0SWRGaWVsZChwcm9wLCB2YWx1ZSwgc2hvdWxkVHJ1bmNhdGVJZHMpO1xuICB9XG5cbiAgLy8gSGFuZGxlIG5hbWVzIHdpdGggdHJ1bmNhdGlvblxuICBpZiAocHJvcCA9PT0gJ3N0ZXBOYW1lJykge1xuICAgIGNvbnN0IG5hbWVOb25VbmlxdWUgPSBwYXJzZVN0ZXBOYW1lKFN0cmluZyh2YWx1ZSkpPy5zaG9ydE5hbWUgfHwgJz8nO1xuICAgIHJldHVybiBmb3JtYXROYW1lRmllbGQoXG4gICAgICBuYW1lTm9uVW5pcXVlLFxuICAgICAgbmFtZXNUcnVuY2F0ZSxcbiAgICAgIGlzU2xlZXBTdGVwKFN0cmluZyh2YWx1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnd29ya2Zsb3dOYW1lJykge1xuICAgIGNvbnN0IG5hbWVOb25VbmlxdWUgPSBwYXJzZVdvcmtmbG93TmFtZShTdHJpbmcodmFsdWUpKT8uc2hvcnROYW1lIHx8ICc/JztcbiAgICBjb25zdCB0cnVuY2F0ZWROYW1lID0gdHJ1bmNhdGVOYW1lSWZOZWVkZWQobmFtZU5vblVuaXF1ZSwgbmFtZXNUcnVuY2F0ZSk7XG4gICAgcmV0dXJuIGNoYWxrLmJsdWUuYmx1ZUJyaWdodCh0cnVuY2F0ZWROYW1lKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnb3V0cHV0JyB8fCBwcm9wID09PSAnaW5wdXQnIHx8IHByb3AgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtICYmXG4gICAgICAnZXhwaXJlZEF0JyBpbiBpdGVtICYmXG4gICAgICBpdGVtLmV4cGlyZWRBdCAhPSBudWxsICYmXG4gICAgICBuZXcgRGF0ZShpdGVtLmV4cGlyZWRBdCBhcyBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKSA8IG5ldyBEYXRlKClcbiAgICApIHtcbiAgICAgIHJldHVybiBFWFBJUkVEX0RBVEFfTUVTU0FHRTtcbiAgICB9XG4gICAgcmV0dXJuIGlubGluZUZvcm1hdElPKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnc3RhdHVzJykge1xuICAgIGNvbnN0IHN0YXR1cyA9IHZhbHVlIGFzIFdvcmtmbG93UnVuWydzdGF0dXMnXSB8IFN0ZXBbJ3N0YXR1cyddO1xuICAgIGNvbnN0IGNvbG9yRnVuYyA9XG4gICAgICBTVEFUVVNfQ09MT1JTW3N0YXR1c10gPz8gKChmb3JtYXR0ZWQ6IHN0cmluZykgPT4gZm9ybWF0dGVkKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRTdGF0dXMgPSBkaXNwbGF5U2V0dGluZ3M/LmFiYnJldmlhdGVTdGF0dXNcbiAgICAgID8gZm9ybWF0U3RhdHVzQWJicmV2KHN0YXR1cywgdHJ1ZSlcbiAgICAgIDogc3RhdHVzO1xuICAgIHJldHVybiBjb2xvckZ1bmMoZm9ybWF0dGVkU3RhdHVzKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnZXZlbnREYXRhJykge1xuICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgaWYgKHByb3AgPT09ICdoYXNSZXNwb25zZScpIHtcbiAgICByZXR1cm4gdmFsdWUgPyBjaGFsay5ncmVlbigndHJ1ZScpIDogY2hhbGsuZ3JheSgnZmFsc2UnKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0VGFibGVUaW1lc3RhbXAodmFsdWUsIG9wdHMsIGRpc3BsYXlTZXR0aW5ncyk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBnZXRWaXNpYmxlUHJvcHMgPSAoXG4gIHByb3BzOiBzdHJpbmdbXSxcbiAgZGlzcGxheVNldHRpbmdzOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREaXNwbGF5U2V0dGluZ3M+XG4pOiBzdHJpbmdbXSA9PiB7XG4gIGlmIChkaXNwbGF5U2V0dGluZ3MuaGlkZUNvbXBsZXRlZEF0KSB7XG4gICAgcmV0dXJuIHByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcCAhPT0gJ2NvbXBsZXRlZEF0Jyk7XG4gIH1cbiAgcmV0dXJuIHByb3BzO1xufTtcblxuY29uc3Qgc2hvd1RhYmxlID0gKFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICBwcm9wczogc3RyaW5nW10sXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICAvLyBHZXQgZGlzcGxheSBzZXR0aW5ncyBiYXNlZCBvbiB0ZXJtaW5hbCB3aWR0aFxuICBjb25zdCB0ZXJtaW5hbFdpZHRoID0gZ2V0VGVybWluYWxXaWR0aCgpO1xuICBjb25zdCBkaXNwbGF5U2V0dGluZ3MgPSBnZXREaXNwbGF5U2V0dGluZ3MoXG4gICAgdGVybWluYWxXaWR0aCxcbiAgICBvcHRzLndpdGhEYXRhIHx8IGZhbHNlLFxuICAgIHByb3BzLmluY2x1ZGVzKCdydW5OYW1lJylcbiAgKTtcblxuICAvLyBGaWx0ZXIgb3V0IGNvbXBsZXRlZEF0IGNvbHVtbiBpZiBuZWVkZWRcbiAgY29uc3QgdmlzaWJsZVByb3BzID0gZ2V0VmlzaWJsZVByb3BzKHByb3BzLCBkaXNwbGF5U2V0dGluZ3MpO1xuXG4gIC8vIFVwZGF0ZSB0cnVuY2F0ZSBsZW5ndGggZm9yIElPIGZpZWxkc1xuICBjb25zdCBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoID0gVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIO1xuICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBkaXNwbGF5U2V0dGluZ3MuZGF0YUZpZWxkV2lkdGg7XG5cbiAgLy8gU2hvdyBzdGF0dXMgbGVnZW5kIGlmIHVzaW5nIGFiYnJldmlhdGVkIHN0YXR1c1xuICBpZiAoXG4gICAgZGF0YS5sZW5ndGggPiAwICYmXG4gICAgZGlzcGxheVNldHRpbmdzLmFiYnJldmlhdGVTdGF0dXMgJiZcbiAgICB2aXNpYmxlUHJvcHMuaW5jbHVkZXMoJ3N0YXR1cycpXG4gICkge1xuICAgIHNob3dTdGF0dXNMZWdlbmQoKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBoZWFkZXIgbWFwcGluZyBmb3IgYWJicmV2aWF0ZWQgc3RhdHVzXG4gIGNvbnN0IGhlYWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoZGlzcGxheVNldHRpbmdzLmFiYnJldmlhdGVTdGF0dXMgJiYgdmlzaWJsZVByb3BzLmluY2x1ZGVzKCdzdGF0dXMnKSkge1xuICAgIGhlYWRlck1hcFsnc3RhdHVzJ10gPSAnUyc7XG4gIH1cblxuICAvLyBBZGQgYSBibGFuayBsaW5lIGJlZm9yZSBhbnkgdGFibGVcbiAgY29uc3QgdGFibGUgPSBuZXcgVGFibGUoKTtcbiAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIud2FybignTm8gZGF0YSBmb3VuZCBmb3IgdGhpcyBxdWVyeSBhbmQgcmVzb3VyY2UuXFxuJyk7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHZpc2libGVQcm9wcykge1xuICAgICAgY29uc3QgaGVhZGVyID0gaGVhZGVyTWFwW3Byb3BdIHx8IHByb3A7XG4gICAgICB0YWJsZS5jZWxsKGhlYWRlciwgJ04vQScpO1xuICAgIH1cbiAgICB0YWJsZS5uZXdSb3coKTtcbiAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRydW5jYXRlIGxlbmd0aFxuICAgIFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSCA9IG9yaWdpbmFsVHJ1bmNhdGVMZW5ndGg7XG4gICAgcmV0dXJuIHRhYmxlLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoIWRhdGEpIHtcbiAgICBsb2dnZXIud2FybignRXhwZWN0aW5nIGFuIGFycmF5IG9mIGRhdGEsIGJ1dCBnb3QgbnVsbC5cXG4nKTtcbiAgfVxuICBsb2dnZXIubG9nKCcnKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdmlzaWJsZVByb3BzKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBoZWFkZXJNYXBbcHJvcF0gfHwgcHJvcDtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtwcm9wXTtcbiAgICAgIHRhYmxlLmNlbGwoXG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgZm9ybWF0VGFibGVWYWx1ZShwcm9wLCB2YWx1ZSwgb3B0cywgZGlzcGxheVNldHRpbmdzLCBpdGVtKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGFibGUubmV3Um93KCk7XG4gIH1cblxuICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRydW5jYXRlIGxlbmd0aFxuICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoO1xuICByZXR1cm4gdGFibGUudG9TdHJpbmcoKTtcbn07XG5cbmNvbnN0IHNob3dKc29uID0gKGRhdGE6IHVua25vd24pID0+IHtcbiAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtqc29ufVxcbmApO1xufTtcblxuLyoqXG4gKiBEZWZlbnNpdmVseSBldmFsdWF0ZSBgV29ybGQuZGVzY3JpYmVSdW5gIGZvciBvbmUgcnVuIHJvdy5cbiAqXG4gKiBUaGUgaW50ZXJmYWNlIGNvbnRyYWN0IHNheXMgaW1wbGVtZW50YXRpb25zIGFyZSBwdXJlIGFuZCBtdXN0IG5vdFxuICogdGhyb3cg4oCUIGJ1dCBpdCBpcyBhbiBleHRlcm5hbCBleHRlbnNpb24gcG9pbnQsIHNvIHRoZSBDTEkgZG9lcyBub3RcbiAqIHRydXN0IHRoYXQ6IGEgdGhyb3dpbmcgaW1wbGVtZW50YXRpb24gY29udHJpYnV0ZXMgbm8gZmllbGRzIGluc3RlYWRcbiAqIG9mIGNyYXNoaW5nIHRoZSBjb21tYW5kLiBLZXlzIHRoYXQgYWxyZWFkeSBleGlzdCBvbiB0aGUgcnVuIHJvdyBhcmVcbiAqIGRyb3BwZWQgc28gYSB3b3JsZCBjYW4gbmV2ZXIgb3ZlcndyaXRlIGNhbm9uaWNhbCBmaWVsZHMgKGBzdGF0dXNgLFxuICogYHJ1bklkYCwgLi4uKSBpbiBpbnNwZWN0IG91dHB1dC5cbiAqL1xuY29uc3Qgc2FmZVdvcmxkRmllbGRzID0gYXN5bmMgKFxuICBkZXNjcmliZVJ1bjogTm9uTnVsbGFibGU8V29ybGRbJ2Rlc2NyaWJlUnVuJ10+LFxuICByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+PiA9PiB7XG4gIGxldCBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+IHwgbnVsbDtcbiAgdHJ5IHtcbiAgICAvLyBUaGUgaG9vayBtYXkgYmUgc3luYyBvciBhc3luYzsgYSByZWplY3Rpb24gaXMgdHJlYXRlZCB0aGUgc2FtZSBhc1xuICAgIC8vIGEgdGhyb3cg4oCUIG5vIGZpZWxkcy5cbiAgICBmaWVsZHMgPSBhd2FpdCBkZXNjcmliZVJ1bihyb3cpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgaWYgKCFmaWVsZHMpIHJldHVybiB7fTtcbiAgY29uc3Qgc2FmZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgIGlmICghKGtleSBpbiByb3cpKSB7XG4gICAgICBzYWZlW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuXG5jb25zdCBzaG93SnNvblBhZ2UgPSA8VD4ocGFnZTogUGFnZURhdGE8VD4pID0+IHtcbiAgc2hvd0pzb24oe1xuICAgIGRhdGE6IHBhZ2UuZGF0YSxcbiAgICBjdXJzb3I6IHBhZ2UuY3Vyc29yLFxuICAgIGhhc01vcmU6IHBhZ2UuaGFzTW9yZSxcbiAgICAuLi4ocGFnZS5wYWdlSW5mbyA/IHsgcGFnZUluZm86IHBhZ2UucGFnZUluZm8gfSA6IHt9KSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEluIHRhYmxlcywgd2Ugd2FudCB0byBzaG93IGEgc2hvcnRlciB0aW1lc3RhbXAsIFlZWVktTU0tREQgSEg6TU06U1NcbiAqL1xuY29uc3QgZm9ybWF0VGFibGVUaW1lc3RhbXAgPSAoXG4gIHZhbHVlOiBEYXRlLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9LFxuICBkaXNwbGF5U2V0dGluZ3M/OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREaXNwbGF5U2V0dGluZ3M+XG4pID0+IHtcbiAgLy8gRm9ybWF0IElTTyB0aW1lIHdpdGhvdXQgVCBhbmQgWlxuICBjb25zdCBpc29UaW1lID0gZm9ybWF0SVNPRGF0ZSh2YWx1ZSk7XG5cbiAgLy8gU2hvdyByZWxhdGl2ZSB0aW1lIG9ubHkgaWY6XG4gIC8vIC0gTm90IGluIENJIG1vZGVcbiAgLy8gLSBEaXNwbGF5IHNldHRpbmdzIGFsbG93IGl0IChiYXNlZCBvbiB0ZXJtaW5hbCB3aWR0aClcbiAgLy8gLSB3aXRoRGF0YSBpcyBkaXNhYmxlZCAobW9yZSBzcGFjZSBhdmFpbGFibGUpXG4gIC8vIC0gTm90IGluIEpTT04gbW9kZVxuICAvLyAtIGRpc2FibGVSZWxhdGl2ZURhdGVzIGlzIG5vdCBzZXRcbiAgY29uc3Qgc2hvdWxkU2hvd1JlbGF0aXZlID1cbiAgICAhaXNDSSgpICYmXG4gICAgZGlzcGxheVNldHRpbmdzPy5zaG93UmVsYXRpdmVEYXRlcyAhPT0gZmFsc2UgJiZcbiAgICAhb3B0cy53aXRoRGF0YSAmJlxuICAgICFvcHRzLmpzb24gJiZcbiAgICAhb3B0cy5kaXNhYmxlUmVsYXRpdmVEYXRlcztcblxuICBpZiAoc2hvdWxkU2hvd1JlbGF0aXZlKSB7XG4gICAgY29uc3QgcmVsYXRpdmUgPSBmb3JtYXREaXN0YW5jZSh2YWx1ZSwgbmV3IERhdGUoKSwgeyBhZGRTdWZmaXg6IHRydWUgfSk7XG4gICAgcmV0dXJuIGAke2lzb1RpbWV9ICgke3JlbGF0aXZlfSlgO1xuICB9XG5cbiAgcmV0dXJuIGlzb1RpbWU7XG59O1xuXG5jb25zdCB0cnVuY2F0ZVN0cmluZyA9IChcbiAgc3RyOiBzdHJpbmcsXG4gIG1heExlbmd0aDogbnVtYmVyID0gVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIXG4pID0+IHtcbiAgcmV0dXJuIHN0ciAmJiBzdHIubGVuZ3RoID4gbWF4TGVuZ3RoXG4gICAgPyBgJHtzdHIuc3Vic3RyaW5nKDAsIG1heExlbmd0aCl9Li4uYFxuICAgIDogc3RyO1xufTtcblxuY29uc3QgdHJ1bmNhdGVJZFRvTGFzdENoYXJzID0gKGlkOiBzdHJpbmcsIGNoYXJzOiBudW1iZXIgPSA0KTogc3RyaW5nID0+IHtcbiAgaWYgKCFpZCB8fCBpZC5sZW5ndGggPD0gY2hhcnMpIHJldHVybiBpZDtcbiAgcmV0dXJuIGAuLi4ke2lkLnN1YnN0cmluZyhpZC5sZW5ndGggLSBjaGFycyl9YDtcbn07XG5cbmNvbnN0IHNob3dJbnNwZWN0SW5mb0JveCA9IChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gIGxvZ2dlci5pbmZvKFxuICAgIGBUbyB2aWV3IGRldGFpbHMgZm9yIGEgJHtyZXNvdXJjZX0sIHVzZSBcXGB3b3JrZmxvdyBpbnNwZWN0ICR7cmVzb3VyY2V9XFxgIDxpZD5gXG4gICk7XG4gIGxvZ2dlci5pbmZvKFxuICAgIGBUbyB2aWV3IHRoZSBjb250ZW50IG9mIGFueSBzdHJlYW0sIHVzZSBcXGB3b3JrZmxvdyBpbnNwZWN0IHN0cmVhbSA8c3RyZWFtLWlkPlxcYGBcbiAgKTtcbn07XG5cbmNvbnN0IEVYUElSRURfREFUQV9NRVNTQUdFID0gY2hhbGsuZ3JheSgnPGRhdGEgZXhwaXJlZD4nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBydW4gaGFzIGV4cGlyZWQgZGF0YSBzdG9yYWdlIChydW4tbGV2ZWwgZXhwaXJlZEF0IGZpZWxkKS5cbiAqIE9ubHkgcmV0dXJucyB0cnVlIHdoZW4gYGV4cGlyZWRBdGAgaXMgaW4gdGhlIHBhc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNFeHBpcmVkRGF0YSA9IChydW46IFdvcmtmbG93UnVuKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgJ2V4cGlyZWRBdCcgaW4gcnVuICYmXG4gICAgcnVuLmV4cGlyZWRBdCAhPSBudWxsICYmXG4gICAgbmV3IERhdGUocnVuLmV4cGlyZWRBdCkgPCBuZXcgRGF0ZSgpXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbnkgZGF0YSBmaWVsZCBpbiBhIGh5ZHJhdGVkIHJlc291cmNlIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYW5cbiAqIGV4cGlyZWQgcGxhY2Vob2xkZXIuIFdvcmtzIGZvciBydW5zLCBzdGVwcywgaG9va3MsIGFuZCBldmVudHMg4oCUIHVubGlrZVxuICogYGhhc0V4cGlyZWREYXRhYCB3aGljaCBvbmx5IGNoZWNrcyB0aGUgcnVuLWxldmVsIGBleHBpcmVkQXRgIGZpZWxkLlxuICovXG5jb25zdCBoYXNFeHBpcmVkRmllbGRzID0gKHJlc291cmNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gWydpbnB1dCcsICdvdXRwdXQnLCAnZXJyb3InLCAnbWV0YWRhdGEnXS5zb21lKChrZXkpID0+XG4gICAgaXNFeHBpcmVkUmVmKHJlc291cmNlW2tleV0pXG4gICk7XG59O1xuXG4vKipcbiAqIFRha2VzIGh5ZHJhdGVkIHN0ZXAvd29ya2Zsb3cgaW5wdXQvb3V0cHV0IGFuZCBzZXJpYWxpemVzIGl0IGZvciBpbmxpbmUgZGlzcGxheS5cbiAqL1xuY29uc3QgaW5saW5lRm9ybWF0SU8gPSA8VD4oaW86IFQsIHRvcExldmVsOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgaW87XG4gIGxldCB2YWx1ZSA9ICcnO1xuICBpZiAoaW8gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhbHVlID0gJzxlbXB0eT4nO1xuICB9IGVsc2UgaWYgKGlvID09PSBudWxsKSB7XG4gICAgdmFsdWUgPSAnPG51bGw+JztcbiAgfSBlbHNlIGlmIChpc0VuY3J5cHRlZFJlZihpbykpIHtcbiAgICB2YWx1ZSA9IGNoYWxrLmRpbS55ZWxsb3coJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJyk7XG4gIH0gZWxzZSBpZiAoaXNFeHBpcmVkUmVmKGlvKSkge1xuICAgIHZhbHVlID0gY2hhbGsuZ3JheSgnPGRhdGEgZXhwaXJlZD4nKTtcbiAgfSBlbHNlIGlmIChpbyAmJiBBcnJheS5pc0FycmF5KGlvKSkge1xuICAgIGlmIChpby5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhbHVlID0gJzxlbXB0eT4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJpbmdpZmllZCA9IGlvXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGlubGluZUZvcm1hdElPKGl0ZW0sIGZhbHNlKSlcbiAgICAgICAgLmpvaW4oJywnKTtcbiAgICAgIGlmIChzdHJpbmdpZmllZC5sZW5ndGggPiBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggJiYgdG9wTGV2ZWwpIHtcbiAgICAgICAgdmFsdWUgPSBjaGFsay55ZWxsb3coYCR7aW8ubGVuZ3RofSBhcmdzYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHN0cmluZ2lmaWVkO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChpbyBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHZhbHVlID0gaW8udG9JU09TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0cnVuY2F0ZVN0cmluZyhKU09OLnN0cmluZ2lmeShpbykpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgaWYgKGlzU3RyZWFtSWQoaW8gYXMgc3RyaW5nKSkge1xuICAgICAgdmFsdWUgPSBpby50b1N0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgKGlvIGFzIHN0cmluZykuaW5jbHVkZXMoJ3N0cm1fJykpIHtcbiAgICAgIHZhbHVlID0gaW8gYXMgc3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRydW5jYXRlU3RyaW5nKFN0cmluZyhpbykpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGA8JHt0eXBlfT5gO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogTGlzdCB2aWV3cyBzdXJmYWNlIG1ldGFkYXRhIG9ubHkuIFdoZW4gdGhlIGFjdGl2ZSBiYWNrZW5kIGV4cG9zZXMgdGhlXG4gKiBvcHRpb25hbCBgd29ybGQuYW5hbHl0aWNzYCByZWFkIG5hbWVzcGFjZSB3ZSByZWFkIGxpc3QgcGFnZXMgZnJvbSBpdFxuICogKG1ldGFkYXRhLW9ubHkg4oCUIG5vIHBheWxvYWQgcmVzb2x1dGlvbik7IG90aGVyd2lzZSB3ZSBmYWxsIGJhY2sgdG8gdGhlXG4gKiBydW50aW1lIHN0b3JhZ2UgQVBJcyB3aXRoIGByZXNvbHZlRGF0YTogJ25vbmUnYC5cbiAqXG4gKiBgLS13aXRoRGF0YWAgZm9yY2VzIHRoZSBydW50aW1lIHBhdGggc28gcGF5bG9hZHMgY2FuIGJlIHJlc29sdmVkIGludG8gdGhlXG4gKiB0YWJsZS4gSXQgaXMgZGVwcmVjYXRlZCBmb3IgbGlzdCB2aWV3czogdmlldyBwYXlsb2FkcyBwZXItcmVzb3VyY2Ugd2l0aFxuICogYHdvcmtmbG93IGluc3BlY3QgPHJlc291cmNlPiA8aWQ+YC5cbiAqL1xuY29uc3Qgd2FybldpdGhEYXRhRGVwcmVjYXRlZEZvckxpc3QgPSAoc2luZ3VsYXI6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBsb2dnZXIud2FybihcbiAgICBgJy0td2l0aERhdGEnIGlzIGRlcHJlY2F0ZWQgZm9yIGxpc3Qgdmlld3MgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiBVc2UgJ3dvcmtmbG93IGluc3BlY3QgJHtzaW5ndWxhcn0gPGlkPicgdG8gdmlldyBwYXlsb2FkcyBmb3IgYSBzaW5nbGUgJHtzaW5ndWxhcn0uYFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RSdW5zID0gYXN5bmMgKHdvcmxkOiBXb3JsZCwgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLnN0ZXBJZCB8fCBvcHRzLnJ1bklkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgb3IgcnVuLWlkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGlzdCBjYWxscywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICB3YXJuV2l0aERhdGFEZXByZWNhdGVkRm9yTGlzdCgncnVuJyk7XG4gIH1cblxuICBjb25zdCB1c2VBbmFseXRpY3MgPSAhb3B0cy53aXRoRGF0YSAmJiBCb29sZWFuKHdvcmxkLmFuYWx5dGljcyk7XG4gIGNvbnN0IHJlc29sdmVEYXRhID0gb3B0cy53aXRoRGF0YSA/ICdhbGwnIDogJ25vbmUnO1xuICBjb25zdCBzdGF0dXMgPSBvcHRzLnN0YXR1cztcblxuICAvLyBSZXNvbHZlIC0tc2luY2UvLS11bnRpbCBpbnRvIGFuIGV4cGxpY2l0IGxpc3Rpbmcgd2luZG93LiBPbmx5IHRoZVxuICAvLyBhbmFseXRpY3MgcmVhZCBwYXRoIHN1cHBvcnRzIG9uZTsgdGhlIHJ1bnRpbWUgc3RvcmFnZSBBUElzIGhhdmUgbm8gdGltZVxuICAvLyBmaWx0ZXIuIFdpdGhvdXQgdGhlIGZsYWdzIHRoZSBiYWNrZW5kIGFwcGxpZXMgaXRzIGRlZmF1bHQgd2luZG93XG4gIC8vICh0cmFpbGluZyAyNGggb24gdGhlIFZlcmNlbCBiYWNrZW5kKS5cbiAgY29uc3QgdGltZVdpbmRvdyA9IHJlc29sdmVUaW1lV2luZG93KG9wdHMpO1xuICBpZiAodGltZVdpbmRvdyAmJiAhdXNlQW5hbHl0aWNzKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnLS1zaW5jZS8tLXVudGlsIHJlcXVpcmUgdGhlIGFuYWx5dGljcyByZWFkIHBhdGggYW5kIGFyZSBpZ25vcmVkIGJ5IHRoaXMgYmFja2VuZC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB0byBzaG93IGJhc2VkIG9uIHdpdGhEYXRhIGZsYWdcbiAgY29uc3QgYmFzZVByb3BzID0gb3B0cy53aXRoRGF0YVxuICAgID8gV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QU1xuICAgIDogV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QUy5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PiAhV09SS0ZMT1dfUlVOX0lPX1BST1BTLmluY2x1ZGVzKHByb3ApXG4gICAgICApO1xuXG4gIC8vIFdvcmxkLXNwZWNpZmljIGRpc3BsYXkgZmllbGRzIChXb3JsZC5kZXNjcmliZVJ1bik6IGVhY2gga2V5IHRoZVxuICAvLyB3b3JsZCByZXR1cm5zIGJlY29tZXMgYW4gZXh0cmEgY29sdW1uLCBpbnNlcnRlZCBiZWZvcmUgYHN0YXR1c2AuXG4gIC8vIERldGFjaGVkIGNhbGwgc2l0ZSwgc28gYmluZCBleHBsaWNpdGx5LiBgbnVsbGAgZmllbGQgdmFsdWVzIGFyZVxuICAvLyBwcmVzZXJ2ZWQgKHRoZXkgbWVhbiBcImFwcGxpY2FibGUgYnV0IHVuZGV0ZXJtaW5hYmxlXCIgcGVyIHRoZVxuICAvLyBpbnRlcmZhY2UgY29udHJhY3QpLCBkaXN0aW5ndWlzaGluZyB0aGVtIGluIEpTT04gb3V0cHV0IGZyb20gdGhlXG4gIC8vIGhvb2sgYmVpbmcgYWJzZW50IGVudGlyZWx5LlxuICBjb25zdCBkZXNjcmliZVJ1biA9IHdvcmxkLmRlc2NyaWJlUnVuPy5iaW5kKHdvcmxkKTtcbiAgY29uc3QgZGVzY3JpYmVkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgd2l0aFdvcmxkRmllbGRzID0gYXN5bmMgKFxuICAgIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiA9PiB7XG4gICAgaWYgKCFkZXNjcmliZVJ1bikgcmV0dXJuIHJvd3M7XG4gICAgLy8gUm93cyBldmFsdWF0ZWQgY29uY3VycmVudGx5IHNvIGFuIGFzeW5jIGltcGxlbWVudGF0aW9uIGNvc3RzIG9uZVxuICAgIC8vIGF3YWl0IHBlciBwYWdlLCBub3QgcGVyIHJvdy5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICByb3dzLm1hcChhc3luYyAocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IGF3YWl0IHNhZmVXb3JsZEZpZWxkcyhkZXNjcmliZVJ1biwgcm93KTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGRzKSkge1xuICAgICAgICAgIGlmICghZGVzY3JpYmVkS2V5cy5pbmNsdWRlcyhrZXkpKSBkZXNjcmliZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5yb3csIC4uLmZpZWxkcyB9O1xuICAgICAgfSlcbiAgICApO1xuICB9O1xuICBjb25zdCBwcm9wc0ZvciA9IChiYXNlTGlzdDogKGtleW9mIFdvcmtmbG93UnVuKVtdKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IGxpc3Q6IHN0cmluZ1tdID0gWy4uLmJhc2VMaXN0XTtcbiAgICBsaXN0LnNwbGljZShsaXN0LmluZGV4T2YoJ3N0YXR1cycpLCAwLCAuLi5kZXNjcmliZWRLZXlzKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfTtcblxuICBjb25zdCBmZXRjaFJ1bnNQYWdlID0gYXN5bmMgKFxuICAgIGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGFnZURhdGE8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIH07XG4gICAgaWYgKHVzZUFuYWx5dGljcyAmJiB3b3JsZC5hbmFseXRpY3MpIHtcbiAgICAgIGNvbnN0IHJ1bnMgPSBhd2FpdCB3b3JsZC5hbmFseXRpY3MucnVucy5saXN0KHtcbiAgICAgICAgd29ya2Zsb3dOYW1lOiBvcHRzLndvcmtmbG93TmFtZSxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICAuLi4odGltZVdpbmRvdyA/PyB7fSksXG4gICAgICAgIHBhZ2luYXRpb24sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGF3YWl0IHdpdGhXb3JsZEZpZWxkcyhcbiAgICAgICAgICBydW5zLmRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdXG4gICAgICAgICksXG4gICAgICAgIGN1cnNvcjogcnVucy5jdXJzb3IsXG4gICAgICAgIGhhc01vcmU6IHJ1bnMuaGFzTW9yZSxcbiAgICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHJ1bnMpLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcnVucyA9IGF3YWl0IHdvcmxkLnJ1bnMubGlzdCh7XG4gICAgICB3b3JrZmxvd05hbWU6IG9wdHMud29ya2Zsb3dOYW1lLFxuICAgICAgc3RhdHVzLFxuICAgICAgcGFnaW5hdGlvbixcbiAgICAgIHJlc29sdmVEYXRhLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJ1bnMuZGF0YS5tYXAoKHIpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKHIsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGF3YWl0IHdpdGhXb3JsZEZpZWxkcyhkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSksXG4gICAgICBjdXJzb3I6IHJ1bnMuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogcnVucy5oYXNNb3JlLFxuICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHJ1bnMpLFxuICAgIH07XG4gIH07XG5cbiAgLy8gRm9yIEpTT04gb3V0cHV0LCBqdXN0IGZldGNoIG9uY2UgYW5kIHJldHVyblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaFJ1bnNQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICAgIHNob3dKc29uUGFnZShwYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaFJ1bnNQYWdlKGN1cnNvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKHJ1bnMpID0+IHtcbiAgICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKHJ1bnMsIHByb3BzRm9yKGJhc2VQcm9wcyksIG9wdHMpKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWNlbnRSdW4gPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgbG9nZ2VyLndhcm4oYE5vIHJ1bklkIHByb3ZpZGVkLCBmZXRjaGluZyBkYXRhIGZvciBsYXRlc3QgcnVuIGluc3RlYWQuYCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcnVucyA9IGF3YWl0IHdvcmxkLnJ1bnMubGlzdCh7XG4gICAgICBwYWdpbmF0aW9uOiB7IGxpbWl0OiAxLCBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycgfSxcbiAgICAgIHJlc29sdmVEYXRhOiAnbm9uZScsIC8vIERvbid0IG5lZWQgZGF0YSBmb3IganVzdCBnZXR0aW5nIHRoZSBJRFxuICAgIH0pO1xuICAgIHJ1bnMuZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcnVucy5kYXRhLm1hcCgocikgPT4gaHlkcmF0ZVJlc291cmNlSU8ociwgcmVzb2x2ZUtleSkpXG4gICAgKTtcbiAgICByZXR1cm4gcnVucy5kYXRhWzBdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNob3dSdW4gPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBzaG93aW5nIGluZGl2aWR1YWwgcmVzb3VyY2VzJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ2FsbCcgfSk7XG4gICAgY29uc3QgaHlkcmF0ZWQgPSBhd2FpdCBoeWRyYXRlUmVzb3VyY2VJTyhydW4sIHJlc29sdmVLZXkpO1xuICAgIC8vIFdvcmxkLXNwZWNpZmljIGRpc3BsYXkgZmllbGRzIChXb3JsZC5kZXNjcmliZVJ1biksIGV2YWx1YXRlZFxuICAgIC8vIGRlZmVuc2l2ZWx5IOKAlCBzZWUgc2FmZVdvcmxkRmllbGRzLiBgbnVsbGAgZmllbGQgdmFsdWVzIGFyZSBrZXB0IHNvXG4gICAgLy8gc3RydWN0dXJlZCBvdXRwdXQgZGlzdGluZ3Vpc2hlcyBcInVuZGV0ZXJtaW5hYmxlXCIgZnJvbSBcImhvb2sgYWJzZW50XCIuXG4gICAgY29uc3Qgd29ybGRGaWVsZHMgPSB3b3JsZC5kZXNjcmliZVJ1blxuICAgICAgPyBhd2FpdCBzYWZlV29ybGRGaWVsZHMoXG4gICAgICAgICAgd29ybGQuZGVzY3JpYmVSdW4uYmluZCh3b3JsZCksXG4gICAgICAgICAgcnVuIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcnVuV2l0aEh5ZHJhdGVkSU8gPVxuICAgICAgd29ybGRGaWVsZHMgJiYgT2JqZWN0LmtleXMod29ybGRGaWVsZHMpLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IC4uLmh5ZHJhdGVkLCAuLi53b3JsZEZpZWxkcyB9XG4gICAgICAgIDogaHlkcmF0ZWQ7XG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgc2hvd0pzb24ocnVuV2l0aEh5ZHJhdGVkSU8pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzRXhwaXJlZERhdGEocnVuKSkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBcIlRoaXMgcnVuJ3MgZGF0YSAoaW5wdXQvb3V0cHV0L2Vycm9yKSBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmxvZyhydW5XaXRoSHlkcmF0ZWRJTyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RTdGVwcyA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHtcbiAgICBydW5JZDogdW5kZWZpbmVkLFxuICB9XG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcblxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGluIGxpc3QgY2FsbHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAob3B0cy53b3JrZmxvd05hbWUpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgd29ya2Zsb3ctbmFtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBzdGVwcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcnVuSWQgPSBvcHRzLnJ1bklkXG4gICAgPyBvcHRzLnJ1bklkXG4gICAgOiAoYXdhaXQgZ2V0UmVjZW50UnVuKHdvcmxkLCBvcHRzKSk/LnJ1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdObyBydW4gZm91bmQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICB3YXJuV2l0aERhdGFEZXByZWNhdGVkRm9yTGlzdCgnc3RlcCcpO1xuICB9XG5cbiAgY29uc3QgdXNlQW5hbHl0aWNzID0gIW9wdHMud2l0aERhdGEgJiYgQm9vbGVhbih3b3JsZC5hbmFseXRpY3MpO1xuICBjb25zdCByZXNvbHZlRGF0YSA9IG9wdHMud2l0aERhdGEgPyAnYWxsJyA6ICdub25lJztcblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgdG8gc2hvdyBiYXNlZCBvbiB3aXRoRGF0YSBmbGFnXG4gIGNvbnN0IHByb3BzID0gb3B0cy53aXRoRGF0YVxuICAgID8gU1RFUF9MSVNURURfUFJPUFNcbiAgICA6IFNURVBfTElTVEVEX1BST1BTLmZpbHRlcigocHJvcCkgPT4gIVNURVBfSU9fUFJPUFMuaW5jbHVkZXMocHJvcCkpO1xuXG4gIGNvbnN0IGZldGNoU3RlcHNQYWdlID0gYXN5bmMgKFxuICAgIGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGFnZURhdGE8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBzdGVwcyBmb3IgcnVuICR7cnVuSWR9YCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIH07XG4gICAgaWYgKHVzZUFuYWx5dGljcyAmJiB3b3JsZC5hbmFseXRpY3MpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gYXdhaXQgd29ybGQuYW5hbHl0aWNzLnN0ZXBzLmxpc3QoeyBydW5JZCwgcGFnaW5hdGlvbiB9KTtcbiAgICAgIGNvbnN0IHBhZ2UgPSB7XG4gICAgICAgIGRhdGE6IHN0ZXBzLmRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgICBjdXJzb3I6IHN0ZXBzLmN1cnNvcixcbiAgICAgICAgaGFzTW9yZTogc3RlcHMuaGFzTW9yZSxcbiAgICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHN0ZXBzKSxcbiAgICAgIH07XG4gICAgICBpZiAoY3Vyc29yIHx8IHBhZ2UuZGF0YS5sZW5ndGggPiAwIHx8IHBhZ2UuaGFzTW9yZSkge1xuICAgICAgICByZXR1cm4gcGFnZTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYE5vIGFuYWx5dGljcyBzdGVwcyBmb3VuZCBmb3IgcnVuICR7cnVuSWR9OyBmYWxsaW5nIGJhY2sgdG8gc3RvcmFnZWBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHN0ZXBDaHVua3MgPSBhd2FpdCB3b3JsZC5zdGVwcy5saXN0KHtcbiAgICAgIHJ1bklkLFxuICAgICAgcGFnaW5hdGlvbixcbiAgICAgIHJlc29sdmVEYXRhLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHN0ZXBDaHVua3MuZGF0YS5tYXAoKHMpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKHMsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgY3Vyc29yOiBzdGVwQ2h1bmtzLmN1cnNvcixcbiAgICAgIGhhc01vcmU6IHN0ZXBDaHVua3MuaGFzTW9yZSxcbiAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhzdGVwQ2h1bmtzKSxcbiAgICB9O1xuICB9O1xuXG4gIC8vIEZvciBKU09OIG91dHB1dCwganVzdCBmZXRjaCBvbmNlIGFuZCByZXR1cm5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgZmV0Y2hTdGVwc1BhZ2Uob3B0cy5jdXJzb3IpO1xuICAgICAgc2hvd0pzb24ocGFnZS5kYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaFN0ZXBzUGFnZShjdXJzb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzcGxheVBhZ2U6IGFzeW5jIChzdGVwcykgPT4ge1xuICAgICAgbG9nZ2VyLmxvZyhzaG93VGFibGUoc3RlcHMsIHByb3BzLCBvcHRzKSk7XG4gICAgICBzaG93SW5zcGVjdEluZm9Cb3goJ3N0ZXAnKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93U3RlcCA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBzdGVwSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBzaG93aW5nIGluZGl2aWR1YWwgcmVzb3VyY2VzJyk7XG4gIH1cbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCBpbiBnZXQgY2FsbHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJ1bklkID0gb3B0cy5ydW5JZCA/PyAoYXdhaXQgZ2V0UmVjZW50UnVuKHdvcmxkLCBvcHRzKSk/LnJ1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgJ3J1bi1pZCBpcyByZXF1aXJlZCBmb3Igc2hvd2luZyBhIHN0ZXAuIFVzYWdlOiBgd29ya2Zsb3cgaW5zcGVjdCBzdGVwIDxTVEVQX0lEPiAtLXJ1bklkPTxSVU5fSUQ+YCdcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3RlcCA9IGF3YWl0IHdvcmxkLnN0ZXBzLmdldChydW5JZCwgc3RlcElkLCB7XG4gICAgICByZXNvbHZlRGF0YTogJ2FsbCcsXG4gICAgfSk7XG4gICAgY29uc3Qgc3RlcFdpdGhIeWRyYXRlZElPID0gYXdhaXQgaHlkcmF0ZVJlc291cmNlSU8oc3RlcCwgcmVzb2x2ZUtleSk7XG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgc2hvd0pzb24oc3RlcFdpdGhIeWRyYXRlZElPKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBoYXNFeHBpcmVkRmllbGRzKFxuICAgICAgICAgIHN0ZXBXaXRoSHlkcmF0ZWRJTyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBcIlRoaXMgc3RlcCdzIGRhdGEgKGlucHV0L291dHB1dC9lcnJvcikgaGFzIGV4cGlyZWQgYW5kIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5sb2coc3RlcFdpdGhIeWRyYXRlZElPKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvd1N0cmVhbSA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBzdHJlYW1JZDogc3RyaW5nLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHNob3dpbmcgYSBzdHJlYW0sIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAoIW9wdHMucnVuSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tcnVuIGlzIHJlcXVpcmVkIHdoZW4gc2hvd2luZyBhIHN0cmVhbScpO1xuICB9XG4gIGNvbnN0IHJhd1N0cmVhbSA9IGF3YWl0IHdvcmxkLnN0cmVhbXMuZ2V0KG9wdHMucnVuSWQsIHN0cmVhbUlkKTtcblxuICAvLyBPbmx5IHJlc29sdmUgdGhlIGVuY3J5cHRpb24ga2V5IHdoZW4gLS1kZWNyeXB0IGlzIHBhc3NlZCBhbmQgLS1ydW4gaXMgcHJvdmlkZWQuXG4gIC8vIFdlIGZldGNoIHRoZSBmdWxsIFdvcmtmbG93UnVuIG9iamVjdCBzbyB0aGF0IGdldEVuY3J5cHRpb25LZXlGb3JSdW4gaGFzXG4gIC8vIGFjY2VzcyB0byB0aGUgZGVwbG95bWVudElkIChuZWVkZWQgZm9yIEFQSS1iYXNlZCBrZXkgcmVzb2x1dGlvbikuXG4gIGxldCBlbmNyeXB0aW9uS2V5OiBFbmNyeXB0aW9uS2V5UGFyYW07XG4gIGlmIChvcHRzLmRlY3J5cHQgJiYgb3B0cy5ydW5JZCkge1xuICAgIGVuY3J5cHRpb25LZXkgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQob3B0cy5ydW5JZCEpO1xuICAgICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bik7XG4gICAgICAvLyBGdWxsIGNhcGFiaWxpdHksIHNvIHNlYWxlZCAoJ2VuY3AnKSBzdHJlYW0gZnJhbWVzIHdyaXR0ZW4gYnkgb3RoZXJcbiAgICAgIC8vIHJ1bnMgYXJlIHJlYWRhYmxlIHRvbyDigJQgbm90IGp1c3QgdGhlIHJ1bidzIG93biBzeW1tZXRyaWMgZnJhbWVzLlxuICAgICAgcmV0dXJuIHJhd0tleSA/IGF3YWl0IGRlcml2ZVJ1blBheWxvYWRLZXlzKHJhd0tleSkgOiB1bmRlZmluZWQ7XG4gICAgfSkoKTtcbiAgfSBlbHNlIGlmIChvcHRzLmRlY3J5cHQgJiYgIW9wdHMucnVuSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdDYW5ub3QgZGVjcnlwdCBzdHJlYW0gY29udGVudCB3aXRob3V0IGEgcnVuIElELiBVc2UgLS1ydW49PHJ1bi1pZD4gd2l0aCAtLWRlY3J5cHQuJ1xuICAgICk7XG4gIH1cblxuICAvLyBEZXNlcmlhbGl6ZSB0aGUgc3RyZWFtIHRvIGdldCBKYXZhU2NyaXB0IG9iamVjdHNcbiAgY29uc3QgcmV2aXZlcnMgPSBnZXRFeHRlcm5hbFJldml2ZXJzKFxuICAgIGdsb2JhbFRoaXMsXG4gICAgW10sXG4gICAgb3B0cy5ydW5JZCA/PyAnJyxcbiAgICBlbmNyeXB0aW9uS2V5XG4gICk7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IGdldERlc2VyaWFsaXplU3RyZWFtKHJldml2ZXJzLCBlbmNyeXB0aW9uS2V5KTtcbiAgY29uc3Qgc3RyZWFtID0gcmF3U3RyZWFtLnBpcGVUaHJvdWdoKHRyYW5zZm9ybSk7XG5cbiAgbG9nZ2VyLmluZm8oJ1N0cmVhbWluZyB0byBzdGRvdXQsIHByZXNzIENUUkwrQyB0byBhYm9ydC4nKTtcbiAgbG9nZ2VyLmluZm8oXG4gICAgJ1VzZSAtLWpzb24gdG8gb3V0cHV0IHRoZSBzdHJlYW0gYXMgbmV3bGluZS1kZWxpbWl0ZWQgSlNPTiB3aXRob3V0IGluZm8gbG9ncy5cXG4nXG4gICk7XG4gIGF3YWl0IHN0cmVhbVRvQ29uc29sZShzdHJlYW0sIHN0cmVhbUlkLCBvcHRzKTtcbn07XG5cbi8qKlxuICogTGlzdGluZyBzdHJlYW1zIG9ubHkgbGlzdHMgYXZhaWxhYmxlIHN0cmVhbSBJRHMgYmFzZWQgb24gcnVuL3N0ZXAgcGFzc2VkLFxuICogYW5kIGRvZXNuJ3QgcmVhZCBhbnkgZGF0YSBmcm9tIHRoZSBzdHJlYW1zLlxuICovXG5leHBvcnQgY29uc3QgbGlzdFN0cmVhbXNCeVJ1bklkID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIGxvZ2dlci53YXJuKCdgd2l0aERhdGFgIGZsYWcgaXMgaWdub3JlZCB3aGVuIGxpc3Rpbmcgc3RyZWFtcycpO1xuICB9XG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0cmVhbXMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzdHJlYW1zLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBsZXQgcnVuSWQgPSBvcHRzLnJ1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnTm8gcnVuLWlkIHByb3ZpZGVkLiBMaXN0aW5nIHN0cmVhbXMgZm9yIGxhdGVzdCBydW4gaW5zdGVhZC4nLFxuICAgICAgJ1VzZSAtLXJ1bj08cnVuLWlkPiB0byBmaWx0ZXIgc3RyZWFtcyBieSBydW4uJ1xuICAgICk7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgZ2V0UmVjZW50UnVuKHdvcmxkLCBvcHRzKTtcbiAgICBpZiAoIXJ1bikge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIHJ1bnMgZm91bmQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJ1bklkID0gcnVuLnJ1bklkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdHJlYW1JZHMgPSBhd2FpdCB3b3JsZC5zdHJlYW1zLmxpc3QocnVuSWQpO1xuICAgIGNvbnN0IG1hdGNoaW5nU3RyZWFtcyA9IHN0cmVhbUlkcy5tYXAoKHN0cmVhbUlkKSA9PiAoe1xuICAgICAgcnVuSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICB9KSk7XG5cbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihtYXRjaGluZ1N0cmVhbXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dnZXIubG9nKHNob3dUYWJsZShtYXRjaGluZ1N0cmVhbXMsIFsncnVuSWQnLCAnc3RyZWFtSWQnXSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RFdmVudHMgPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGV2ZW50cywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcnVuSWQgPSBvcHRzLnJ1bklkID8/IChhd2FpdCBnZXRSZWNlbnRSdW4od29ybGQsIG9wdHMpKT8ucnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ05vIHJ1biBmb3VuZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIHdhcm5XaXRoRGF0YURlcHJlY2F0ZWRGb3JMaXN0KCdldmVudCcpO1xuICB9XG5cbiAgY29uc3QgdXNlQW5hbHl0aWNzID0gIW9wdHMud2l0aERhdGEgJiYgQm9vbGVhbih3b3JsZC5hbmFseXRpY3MpO1xuICBjb25zdCBjb3JyZWxhdGlvbklkRmlsdGVyID0gb3B0cy5ob29rSWQgfHwgb3B0cy5zdGVwSWQ7XG5cbiAgLy8gRGV0ZXJtaW5lIHdoaWNoIHByb3BzIHRvIHNob3cgYmFzZWQgb24gd2l0aERhdGEgZmxhZ1xuICBjb25zdCBwcm9wcyA9IG9wdHMud2l0aERhdGFcbiAgICA/IEVWRU5UX0xJU1RFRF9QUk9QU1xuICAgIDogRVZFTlRfTElTVEVEX1BST1BTLmZpbHRlcigocHJvcCkgPT4gIUVWRU5UX0lPX1BST1BTLmluY2x1ZGVzKHByb3ApKTtcblxuICBjb25zdCBmZXRjaEV2ZW50c1BhZ2UgPSBhc3luYyAoXG4gICAgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQYWdlRGF0YTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+ID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIGV2ZW50cyBmb3IgcnVuICR7cnVuSWR9YCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIH07XG4gICAgaWYgKHVzZUFuYWx5dGljcyAmJiB3b3JsZC5hbmFseXRpY3MpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IHdvcmxkLmFuYWx5dGljcy5ldmVudHMubGlzdCh7XG4gICAgICAgIHJ1bklkLFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBjb3JyZWxhdGlvbklkRmlsdGVyLFxuICAgICAgICBwYWdpbmF0aW9uLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYWdlID0ge1xuICAgICAgICBkYXRhOiBldmVudHMuZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICAgIGN1cnNvcjogZXZlbnRzLmN1cnNvcixcbiAgICAgICAgaGFzTW9yZTogZXZlbnRzLmhhc01vcmUsXG4gICAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhldmVudHMpLFxuICAgICAgfTtcbiAgICAgIGlmIChjdXJzb3IgfHwgcGFnZS5kYXRhLmxlbmd0aCA+IDAgfHwgcGFnZS5oYXNNb3JlKSB7XG4gICAgICAgIHJldHVybiBwYWdlO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTm8gYW5hbHl0aWNzIGV2ZW50cyBmb3VuZCBmb3IgcnVuICR7cnVuSWR9OyBmYWxsaW5nIGJhY2sgdG8gc3RvcmFnZWBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcmxkLmV2ZW50cy5saXN0KHtcbiAgICAgIHJ1bklkLFxuICAgICAgcGFnaW5hdGlvbixcbiAgICAgIHJlc29sdmVEYXRhOiBvcHRzLndpdGhEYXRhID8gJ2FsbCcgOiAnbm9uZScsXG4gICAgfSk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSBjb3JyZWxhdGlvbklkRmlsdGVyXG4gICAgICA/IHJlc3VsdC5kYXRhLmZpbHRlcigoZSkgPT4gZS5jb3JyZWxhdGlvbklkID09PSBjb3JyZWxhdGlvbklkRmlsdGVyKVxuICAgICAgOiByZXN1bHQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaWx0ZXJlZC5tYXAoKGUpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKGUsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgY3Vyc29yOiByZXN1bHQuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogcmVzdWx0Lmhhc01vcmUsXG4gICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8ocmVzdWx0KSxcbiAgICB9O1xuICB9O1xuXG4gIC8vIEZvciBKU09OIG91dHB1dCwganVzdCBmZXRjaCBvbmNlIGFuZCByZXR1cm5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgZmV0Y2hFdmVudHNQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICAgIHNob3dKc29uKHBhZ2UuZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBzZXR1cExpc3RQYWdpbmF0aW9uPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7XG4gICAgaW5pdGlhbEN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgaW50ZXJhY3RpdmU6IG9wdHMuaW50ZXJhY3RpdmUsXG4gICAgZmV0Y2hQYWdlOiBhc3luYyAoY3Vyc29yKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZmV0Y2hFdmVudHNQYWdlKGN1cnNvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKGV2ZW50cykgPT4ge1xuICAgICAgbG9nZ2VyLmxvZyhzaG93VGFibGUoZXZlbnRzLCBwcm9wcywgb3B0cykpO1xuICAgICAgc2hvd0luc3BlY3RJbmZvQm94KCdldmVudCcpO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RIb29rcyA9IGFzeW5jICh3b3JsZDogV29ybGQsIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcblxuICBpZiAob3B0cy53b3JrZmxvd05hbWUpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgd29ya2Zsb3ctbmFtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBob29rcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGhvb2tzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5JZCA9IG9wdHMucnVuSWQ7XG4gIGNvbnN0IHJlc29sdmVEYXRhID0gb3B0cy53aXRoRGF0YSA/ICdhbGwnIDogJ25vbmUnO1xuICAvLyBIb29rcyBhbHdheXMgcmVhZCBmcm9tIHRoZSBydW50aW1lIHN0b3JhZ2UgQVBJLiBVbmxpa2UgcnVucy9zdGVwcy9ldmVudHMsXG4gIC8vIHRoZSBhbmFseXRpY3MgcmVhZCBwYXRoIG9taXRzIGBvd25lcklkYCAoYW5kIHRoZSBzZWNyZXQgaG9vayB0b2tlbiB1c2VkIGJ5XG4gIC8vIHJlc3VtZS9jb3B5LXRva2VuIHN1cmZhY2VzKSwgc28gaG9vayBsaXN0aW5nIHN0YXlzIG9uIHRoZSBjYW5vbmljYWwgQVBJcy5cbiAgY29uc3QgZmV0Y2hIb29rc1BhZ2UgPSBhc3luYyAoXG4gICAgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQYWdlRGF0YTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+ID0+IHtcbiAgICBpZiAoIXJ1bklkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZldGNoaW5nIGFsbCBob29rcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIGhvb2tzIGZvciBydW4gJHtydW5JZH1gKTtcbiAgICB9XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgIH07XG4gICAgY29uc3QgaG9va3MgPSBhd2FpdCB3b3JsZC5ob29rcy5saXN0KHsgcnVuSWQsIHBhZ2luYXRpb24sIHJlc29sdmVEYXRhIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGhvb2tzLmRhdGEubWFwKChoKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhoLCByZXNvbHZlS2V5KSlcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgIGN1cnNvcjogaG9va3MuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogaG9va3MuaGFzTW9yZSxcbiAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhob29rcyksXG4gICAgfTtcbiAgfTtcblxuICAvLyBGb3IgSlNPTiBvdXRwdXQsIGp1c3QgZmV0Y2ggb25jZSBhbmQgcmV0dXJuXG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGZldGNoSG9va3NQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICAgIHNob3dKc29uUGFnZShwYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldHVwIHBhZ2luYXRpb24gd2l0aCBuZXcgbWVjaGFuaXNtXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaEhvb2tzUGFnZShjdXJzb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzcGxheVBhZ2U6IGFzeW5jIChob29rcykgPT4ge1xuICAgICAgbG9nZ2VyLmxvZyhzaG93VGFibGUoaG9va3MsIEhPT0tfTElTVEVEX1BST1BTLCBvcHRzKSk7XG4gICAgICBzaG93SW5zcGVjdEluZm9Cb3goJ2hvb2snKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93SG9vayA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBob29rSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBzaG93aW5nIGluZGl2aWR1YWwgcmVzb3VyY2VzJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBob29rID0gYXdhaXQgd29ybGQuaG9va3MuZ2V0KGhvb2tJZCwge1xuICAgICAgcmVzb2x2ZURhdGE6ICdhbGwnLFxuICAgIH0pO1xuICAgIGNvbnN0IGh5ZHJhdGVkSG9vayA9IGF3YWl0IGh5ZHJhdGVSZXNvdXJjZUlPKGhvb2ssIHJlc29sdmVLZXkpO1xuICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgIHNob3dKc29uKGh5ZHJhdGVkSG9vayk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgaGFzRXhwaXJlZEZpZWxkcyhoeWRyYXRlZEhvb2sgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBcIlRoaXMgaG9vaydzIGRhdGEgKG1ldGFkYXRhKSBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmxvZyhoeWRyYXRlZEhvb2spO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbi8qKlxuICogTGlzdCB3YWl0cy9zbGVlcHMgdmlhIHRoZSBhbmFseXRpY3MgcmVhZCBwYXRoLiBUaGUgYW5hbHl0aWNzIHdhaXQgc2hhcGUgaXNcbiAqIGtleWVkIGJ5IGB3YWl0SWRgL2BzdGF0dXNgIHJhdGhlciB0aGFuIHRoZSBgY29ycmVsYXRpb25JZGAvYGV2ZW50SWRgIGNvbHVtbnNcbiAqIHJlY29uc3RydWN0ZWQgZnJvbSB0aGUgZXZlbnQgc3RyZWFtIGluIHRoZSBmYWxsYmFjayBwYXRoLlxuICovXG5jb25zdCBsaXN0U2xlZXBzVmlhQW5hbHl0aWNzID0gYXN5bmMgKFxuICBhbmFseXRpY3M6IE5vbk51bGxhYmxlPFdvcmxkWydhbmFseXRpY3MnXT4sXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgZmV0Y2hTbGVlcHNQYWdlID0gYXN5bmMgKFxuICAgIGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGFnZURhdGE8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiA9PiB7XG4gICAgY29uc3Qgd2FpdHMgPSBhd2FpdCBhbmFseXRpY3Mud2FpdHMubGlzdCh7XG4gICAgICBydW5JZDogb3B0cy5ydW5JZCBhcyBzdHJpbmcsXG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogd2FpdHMuZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICBjdXJzb3I6IHdhaXRzLmN1cnNvcixcbiAgICAgIGhhc01vcmU6IHdhaXRzLmhhc01vcmUsXG4gICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8od2FpdHMpLFxuICAgIH07XG4gIH07XG5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaFNsZWVwc1BhZ2Uob3B0cy5jdXJzb3IpO1xuICAgIHNob3dKc29uKHBhZ2UuZGF0YSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgc2V0dXBMaXN0UGFnaW5hdGlvbjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICAgIGluaXRpYWxDdXJzb3I6IG9wdHMuY3Vyc29yLFxuICAgIGludGVyYWN0aXZlOiBvcHRzLmludGVyYWN0aXZlLFxuICAgIGZldGNoUGFnZTogZmV0Y2hTbGVlcHNQYWdlLFxuICAgIGRpc3BsYXlQYWdlOiBhc3luYyAod2FpdHMpID0+IHtcbiAgICAgIGxvZ2dlci5sb2coXG4gICAgICAgIHNob3dUYWJsZShcbiAgICAgICAgICB3YWl0cyxcbiAgICAgICAgICBbJ3dhaXRJZCcsICdzdGF0dXMnLCAnY3JlYXRlZEF0JywgJ3Jlc3VtZUF0JywgJ2NvbXBsZXRlZEF0J10sXG4gICAgICAgICAgeyAuLi5vcHRzLCBkaXNhYmxlUmVsYXRpdmVEYXRlczogdHJ1ZSB9XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdFNsZWVwcyA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgaWYgKCFvcHRzLnJ1bklkKSB7XG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgJ3J1bi1pZCBpcyByZXF1aXJlZCBmb3IgbGlzdGluZyBzbGVlcHMuIFVzYWdlOiBgd29ya2Zsb3cgaW5zcGVjdCBzbGVlcHMgLS1ydW5JZD08aWQ+YCdcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNsZWVwcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNsZWVwcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ2B3aXRoRGF0YWAgZmxhZyBpcyBpZ25vcmVkIHdoZW4gbGlzdGluZyBzbGVlcHMnKTtcbiAgfVxuXG4gIC8vIFByZWZlciB0aGUgYW5hbHl0aWNzIHJlYWQgcGF0aCBmb3Igd2FpdC9zbGVlcCBsaXN0aW5nIHdoZW4gYXZhaWxhYmxlLlxuICBpZiAod29ybGQuYW5hbHl0aWNzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxpc3RTbGVlcHNWaWFBbmFseXRpY3Mod29ybGQuYW5hbHl0aWNzLCBvcHRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gRmV0Y2ggYWxsIGV2ZW50cyBmb3IgdGhlIHJ1biB3aXRoIHJlc29sdmVEYXRhPSdhbGwnIHRvIGdldCB3YWl0IGV2ZW50RGF0YVxuICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IHdvcmxkLmV2ZW50cy5saXN0KHtcbiAgICAgIHJ1bklkOiBvcHRzLnJ1bklkLFxuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICAgIGxpbWl0OiAxMDAwLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmVEYXRhOiAnYWxsJyxcbiAgICB9KTtcblxuICAgIC8vIFNob3cgaW5mbyBtZXNzYWdlIGlmIHRoZXJlIG1pZ2h0IGJlIG1vcmUgc2xlZXBzXG4gICAgaWYgKGV2ZW50cy5oYXNNb3JlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgJ1dhcm5pbmc6IFRoaXMgcnVuIGhhcyBtb3JlIHRoYW4gMTAwMCBldmVudHMuIFNvbWUgc2xlZXBzIG1pZ2h0IG5vdCBiZSBzaG93bi4gUGxlYXNlIHVzZSB0aGUgd2ViIFVJIHRvIGVuc3VyZSBnZXR0aW5nIGEgY29tcGxldGUgbGlzdC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEdyb3VwIHdhaXQgZXZlbnRzIGJ5IGNvcnJlbGF0aW9uSWRcbiAgICBjb25zdCB3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudFtdPigpO1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzLmRhdGEpIHtcbiAgICAgIGlmIChpc1dhaXRFdmVudFR5cGUoZXZlbnQuZXZlbnRUeXBlKSAmJiBldmVudC5jb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gd2FpdEV2ZW50c0J5Q29ycmVsYXRpb24uZ2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQpID8/IFtdO1xuICAgICAgICBleGlzdGluZy5wdXNoKGV2ZW50KTtcbiAgICAgICAgd2FpdEV2ZW50c0J5Q29ycmVsYXRpb24uc2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQsIGV4aXN0aW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod2FpdEV2ZW50c0J5Q29ycmVsYXRpb24uc2l6ZSA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIHNsZWVwcyBmb3VuZCBmb3IgdGhpcyBydW4uJyk7XG4gICAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICAgIHNob3dKc29uKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5sb2coXG4gICAgICAgICAgc2hvd1RhYmxlKFtdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIFdBSVRfTElTVEVEX1BST1BTLCB7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgZGlzYWJsZVJlbGF0aXZlRGF0ZXM6IHRydWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBzbGVlcHMgZnJvbSBncm91cGVkIHdhaXQgZXZlbnRzXG4gICAgY29uc3Qgc2xlZXBzOiBTbGVlcFtdID0gW107XG4gICAgZm9yIChjb25zdCBbY29ycmVsYXRpb25JZCwgY29ycmVsYXRpb25FdmVudHNdIG9mIHdhaXRFdmVudHNCeUNvcnJlbGF0aW9uKSB7XG4gICAgICAvLyBTdGl0Y2ggdXAgd2FpdF9jcmVhdGVkIGFuZCB3YWl0X2NvbXBsZXRlZCBldmVudHNcbiAgICAgIGNvbnN0IHdhaXRDcmVhdGVkID0gY29ycmVsYXRpb25FdmVudHMuZmluZChcbiAgICAgICAgKGU6IEV2ZW50KSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCdcbiAgICAgICk7XG4gICAgICBjb25zdCB3YWl0Q29tcGxldGVkID0gY29ycmVsYXRpb25FdmVudHMuZmluZChcbiAgICAgICAgKGU6IEV2ZW50KSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICAgICAgKTtcblxuICAgICAgaWYgKHdhaXRDcmVhdGVkKSB7XG4gICAgICAgIGNvbnN0IHNsZWVwOiBTbGVlcCA9IHtcbiAgICAgICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgICAgIHJ1bklkOiB3YWl0Q3JlYXRlZC5ydW5JZCxcbiAgICAgICAgICBldmVudElkOiB3YWl0Q3JlYXRlZC5ldmVudElkLFxuICAgICAgICAgIGNyZWF0ZWRBdDogd2FpdENyZWF0ZWQuY3JlYXRlZEF0LFxuICAgICAgICAgIHJlc3VtZUF0OlxuICAgICAgICAgICAgd2FpdENyZWF0ZWQuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICAgICAgICAgICA/IHdhaXRDcmVhdGVkLmV2ZW50RGF0YS5yZXN1bWVBdFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjb21wbGV0ZWRBdDogd2FpdENvbXBsZXRlZD8uY3JlYXRlZEF0LFxuICAgICAgICB9O1xuICAgICAgICBzbGVlcHMucHVzaChzbGVlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU29ydCBzbGVlcHMgYnkgY3JlYXRlZEF0XG4gICAgc2xlZXBzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVBID0gYS5jcmVhdGVkQXQuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgdGltZUIgPSBiLmNyZWF0ZWRBdC5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gb3B0cy5zb3J0ID09PSAnYXNjJyA/IHRpbWVBIC0gdGltZUIgOiB0aW1lQiAtIHRpbWVBO1xuICAgIH0pO1xuXG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgc2hvd0pzb24oc2xlZXBzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKFxuICAgICAgc2hvd1RhYmxlKFxuICAgICAgICBzbGVlcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgICBXQUlUX0xJU1RFRF9QUk9QUyxcbiAgICAgICAgeyAuLi5vcHRzLCBkaXNhYmxlUmVsYXRpdmVEYXRlczogdHJ1ZSB9XG4gICAgICApXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG4iXX0=
|
package/dist/lib/inspect/run.js
CHANGED
|
@@ -72,7 +72,7 @@ export const startRun = async (world, workflowNameOrRunId, opts, args) => {
|
|
|
72
72
|
// (e.g. old deployment without health check support).
|
|
73
73
|
let specVersion = run.specVersion;
|
|
74
74
|
try {
|
|
75
|
-
const hc = await healthCheck(world,
|
|
75
|
+
const hc = await healthCheck(world, {
|
|
76
76
|
deploymentId,
|
|
77
77
|
timeout: 10_000,
|
|
78
78
|
});
|
|
@@ -94,4 +94,4 @@ export const startRun = async (world, workflowNameOrRunId, opts, args) => {
|
|
|
94
94
|
logger.log(newRun);
|
|
95
95
|
}
|
|
96
96
|
};
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU8vRCxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsS0FBWSxFQUFFLFdBQW1CLEVBQUUsRUFBRTtJQUNsRSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxXQUFXLFlBQVksQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQzNCLEtBQVksRUFDWixtQkFBMkIsRUFDM0IsSUFBbUIsRUFDbkIsSUFBYyxFQUNkLEVBQUU7SUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElB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RCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUU7UUFDbkQsWUFBWTtRQUNaLFdBQVc7S0FDWixDQUFDLENBQUM7SUFFSCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RhcnQgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9ydW50aW1lJztcbmltcG9ydCB7IGhlYWx0aENoZWNrIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZS9oZWxwZXJzJztcbmltcG9ydCB0eXBlIHsgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vY29uZmlnL2xvZy5qcyc7XG5pbXBvcnQgeyBwbGFuV2luZG93U3RhcnRGcm9tUmVzcG9uc2UgfSBmcm9tICcuL3RpbWUtd2luZG93LmpzJztcblxuaW50ZXJmYWNlIENMSUNyZWF0ZU9wdHMge1xuICBqc29uPzogYm9vbGVhbjtcbiAgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IGdldFdvcmtmbG93TmFtZSA9IGFzeW5jICh3b3JsZDogV29ybGQsIHJ1bk5hbWVPcklkOiBzdHJpbmcpID0+IHtcbiAgaWYgKHJ1bk5hbWVPcklkLnN0YXJ0c1dpdGgoJ3dydW5fJykpIHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5OYW1lT3JJZCk7XG4gICAgaWYgKCFydW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUnVuICR7cnVuTmFtZU9ySWR9IG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gcnVuLndvcmtmbG93TmFtZTtcbiAgfVxuICByZXR1cm4gcnVuTmFtZU9ySWQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc3RhcnRSdW4gPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgd29ya2Zsb3dOYW1lT3JSdW5JZDogc3RyaW5nLFxuICBvcHRzOiBDTElDcmVhdGVPcHRzLFxuICBhcmdzOiBzdHJpbmdbXVxuKSA9PiB7XG4gIGNvbnN0IGpzb25BcmdzID0gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShhcmcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIGFyZ3VtZW50IFwiJHthcmd9XCIgYXMgSlNPTjogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gT25seSBkZXBsb3ltZW50L3NwZWMgbWV0YWRhdGEgaXMgbmVlZGVkIHRvIHN0YXJ0IGEgbmV3IHJ1biwgc28gdGhpc1xuICAvLyBhY2NlcHRzIGVpdGhlciBhIGZ1bGwgcnVuIHJlY29yZCBvciBhbiBhbmFseXRpY3MgKG1ldGFkYXRhLW9ubHkpIHJvdy5cbiAgbGV0IHJ1bjpcbiAgICB8IHsgZGVwbG95bWVudElkOiBzdHJpbmc7IHNwZWNWZXJzaW9uPzogbnVtYmVyOyB3b3JrZmxvd05hbWU6IHN0cmluZyB9XG4gICAgfCB1bmRlZmluZWQ7XG4gIC8vIElmIHRoZSB3b3JrZmxvd05hbWVPclJ1bklkIGlzIGEgcnVuIElELCBnZXQgdGhlIHJ1blxuICBpZiAod29ya2Zsb3dOYW1lT3JSdW5JZC5zdGFydHNXaXRoKCd3cnVuXycpKSB7XG4gICAgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQod29ya2Zsb3dOYW1lT3JSdW5JZCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBmaXJzdCBydW4gZm9yIHRoYXQgbmFtZSwgaG9wZWZ1bGx5IHRoZSBuZXdlc3QgZGVwbG95bWVudCxcbiAgICAvLyBidXQgY2FuJ3QgZ3VhcmFudGVlIHRoYXQuIFRoaXMgaXMgbWV0YWRhdGEgb25seSwgc28gcHJlZmVyIHRoZVxuICAgIC8vIGFuYWx5dGljcyByZWFkIHBhdGggd2hlbiB0aGUgYmFja2VuZCBwcm92aWRlcyBvbmUuXG4gICAgY29uc3QgcnVuTGlzdCA9IHdvcmxkLmFuYWx5dGljc1xuICAgICAgPyBhd2FpdCB3b3JsZC5hbmFseXRpY3MucnVucy5saXN0KHtcbiAgICAgICAgICB3b3JrZmxvd05hbWU6IHdvcmtmbG93TmFtZU9yUnVuSWQsXG4gICAgICAgICAgcGFnaW5hdGlvbjogeyBzb3J0T3JkZXI6ICdkZXNjJywgbGltaXQ6IDEgfSxcbiAgICAgICAgfSlcbiAgICAgIDogYXdhaXQgd29ybGQucnVucy5saXN0KHtcbiAgICAgICAgICB3b3JrZmxvd05hbWU6IHdvcmtmbG93TmFtZU9yUnVuSWQsXG4gICAgICAgICAgcGFnaW5hdGlvbjogeyBzb3J0T3JkZXI6ICdkZXNjJywgbGltaXQ6IDEgfSxcbiAgICAgICAgICByZXNvbHZlRGF0YTogJ25vbmUnLFxuICAgICAgICB9KTtcbiAgICBydW4gPSBydW5MaXN0LmRhdGFbMF07XG5cbiAgICAvLyBUaGUgYW5hbHl0aWNzIGJhY2tlbmQgZGVmYXVsdHMgaXRzIGxpc3RpbmcgdG8gYSByZWNlbnQgd2luZG93XG4gICAgLy8gKHRyYWlsaW5nIDI0aCBvbiB0aGUgVmVyY2VsIGJhY2tlbmQpLiBXaGVuIHRoZSBuYW1lIHdhc24ndCBmb3VuZFxuICAgIC8vIHRoZXJlLCByZXRyeSBhY3Jvc3MgdGhlIHBsYW4ncyB3aG9sZSBvYnNlcnZhYmlsaXR5IHdpbmRvdyB1c2luZyB0aGVcbiAgICAvLyB3aW5kb3cgYm91bmRzIGZyb20gdGhlIHJlc3BvbnNlJ3MgcGFnZSBtZXRhZGF0YS5cbiAgICBpZiAoIXJ1biAmJiB3b3JsZC5hbmFseXRpY3MpIHtcbiAgICAgIGNvbnN0IHdpbmRvd1N0YXJ0ID0gcGxhbldpbmRvd1N0YXJ0RnJvbVJlc3BvbnNlKHJ1bkxpc3QpO1xuICAgICAgaWYgKHdpbmRvd1N0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHdpZGVuZWQgPSBhd2FpdCB3b3JsZC5hbmFseXRpY3MucnVucy5saXN0KHtcbiAgICAgICAgICB3b3JrZmxvd05hbWU6IHdvcmtmbG93TmFtZU9yUnVuSWQsXG4gICAgICAgICAgc3RhcnRUaW1lOiB3aW5kb3dTdGFydCxcbiAgICAgICAgICBlbmRUaW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgcGFnaW5hdGlvbjogeyBzb3J0T3JkZXI6ICdkZXNjJywgbGltaXQ6IDEgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1biA9IHdpZGVuZWQuZGF0YVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIXJ1bikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUnVuIFwiJHt3b3JrZmxvd05hbWVPclJ1bklkfVwiIG5vdCBmb3VuZGApO1xuICB9XG5cbiAgY29uc3QgZGVwbG95bWVudElkID0gcnVuLmRlcGxveW1lbnRJZDtcbiAgY29uc3Qgd29ya2Zsb3dJZCA9IGF3YWl0IGdldFdvcmtmbG93TmFtZSh3b3JsZCwgd29ya2Zsb3dOYW1lT3JSdW5JZCk7XG5cbiAgLy8gUHJvYmUgdGhlIGRlcGxveW1lbnQncyBzcGVjVmVyc2lvbiB2aWEgaGVhbHRoIGNoZWNrIHNvIHdlIHVzZSB0aGVcbiAgLy8gY29ycmVjdCBxdWV1ZSB0cmFuc3BvcnQgKEpTT04gZm9yIG9sZCBkZXBsb3ltZW50cywgQ0JPUiBmb3IgbmV3KS5cbiAgLy8gRmFsbHMgYmFjayB0byB0aGUgcnVuJ3Mgc3BlY1ZlcnNpb24gaWYgdGhlIGhlYWx0aCBjaGVjayBmYWlsc1xuICAvLyAoZS5nLiBvbGQgZGVwbG95bWVudCB3aXRob3V0IGhlYWx0aCBjaGVjayBzdXBwb3J0KS5cbiAgbGV0IHNwZWNWZXJzaW9uID0gcnVuLnNwZWNWZXJzaW9uO1xuICB0cnkge1xuICAgIGNvbnN0IGhjID0gYXdhaXQgaGVhbHRoQ2hlY2sod29ybGQsIHtcbiAgICAgIGRlcGxveW1lbnRJZCxcbiAgICAgIHRpbWVvdXQ6IDEwXzAwMCxcbiAgICB9KTtcbiAgICBpZiAoaGMuaGVhbHRoeSAmJiBoYy5zcGVjVmVyc2lvbiAhPSBudWxsKSB7XG4gICAgICBzcGVjVmVyc2lvbiA9IGhjLnNwZWNWZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSGVhbHRoIGNoZWNrIGZhaWxlZCDigJQgdXNlIHJ1bidzIHNwZWNWZXJzaW9uIGFzIGZhbGxiYWNrXG4gIH1cblxuICBjb25zdCBuZXdSdW4gPSBhd2FpdCBzdGFydCh7IHdvcmtmbG93SWQgfSwganNvbkFyZ3MsIHtcbiAgICBkZXBsb3ltZW50SWQsXG4gICAgc3BlY1ZlcnNpb24sXG4gIH0pO1xuXG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShuZXdSdW4sIG51bGwsIDIpKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIubG9nKG5ld1J1bik7XG4gIH1cbn07XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/cli",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.37",
|
|
4
4
|
"description": "Command-line interface for Workflow SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -56,15 +56,15 @@
|
|
|
56
56
|
"tinyglobby": "0.2.17",
|
|
57
57
|
"xdg-app-paths": "5.1.0",
|
|
58
58
|
"zod": "~4.3.6",
|
|
59
|
-
"@workflow/builders": "5.0.0-beta.
|
|
60
|
-
"@workflow/
|
|
61
|
-
"@workflow/errors": "5.0.0-beta.11",
|
|
59
|
+
"@workflow/builders": "5.0.0-beta.37",
|
|
60
|
+
"@workflow/errors": "5.0.0-beta.13",
|
|
62
61
|
"@workflow/swc-plugin": "5.0.0-beta.5",
|
|
63
|
-
"@workflow/
|
|
64
|
-
"@workflow/
|
|
65
|
-
"@workflow/
|
|
66
|
-
"@workflow/world
|
|
67
|
-
"@workflow/world-vercel": "5.0.0-beta.
|
|
62
|
+
"@workflow/core": "5.0.0-beta.37",
|
|
63
|
+
"@workflow/utils": "5.0.0-beta.7",
|
|
64
|
+
"@workflow/web": "5.0.0-beta.37",
|
|
65
|
+
"@workflow/world": "5.0.0-beta.23",
|
|
66
|
+
"@workflow/world-vercel": "5.0.0-beta.33",
|
|
67
|
+
"@workflow/world-local": "5.0.0-beta.31"
|
|
68
68
|
},
|
|
69
69
|
"scripts": {
|
|
70
70
|
"build": "tsc && chmod +x bin/run.js",
|