@cdktn/hcl2cdk 0.24.0-pre.34 → 0.24.0-pre.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/__tests__/expressions.test.js +19 -10
- package/build/__tests__/functions.test.js +18 -8
- package/build/__tests__/testHelpers.js +2 -3
- package/build/coerceType.js +21 -11
- package/build/dynamic-blocks.js +3 -3
- package/build/expressions.js +22 -13
- package/build/generation.js +34 -24
- package/build/index.js +25 -15
- package/build/iteration.js +6 -7
- package/build/jsii-rosetta-workarounds.js +5 -6
- package/build/partialCode.js +20 -11
- package/build/provider.js +3 -4
- package/build/references.js +5 -6
- package/build/schema.js +18 -8
- package/build/terraformSchema.js +4 -4
- package/build/utils.js +3 -3
- package/build/variables.js +21 -12
- package/package.json +7 -7
package/build/generation.js
CHANGED
|
@@ -15,18 +15,43 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
|
28
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
39
|
+
exports.providerConstructImports = exports.moduleImports = exports.providerImports = exports.constructsImport = exports.cdktfImport = exports.valueToTs = void 0;
|
|
40
|
+
exports.attributeNameToCdktfName = attributeNameToCdktfName;
|
|
41
|
+
exports.backendToExpression = backendToExpression;
|
|
42
|
+
exports.resource = resource;
|
|
43
|
+
exports.output = output;
|
|
44
|
+
exports.variableTypeToAst = variableTypeToAst;
|
|
45
|
+
exports.variable = variable;
|
|
46
|
+
exports.local = local;
|
|
47
|
+
exports.modules = modules;
|
|
48
|
+
exports.imports = imports;
|
|
49
|
+
exports.provider = provider;
|
|
50
|
+
exports.gen = gen;
|
|
51
|
+
exports.addImportForCodeContainer = addImportForCodeContainer;
|
|
52
|
+
exports.wrapCodeInConstructor = wrapCodeInConstructor;
|
|
53
|
+
exports.buildImports = buildImports;
|
|
54
|
+
exports.generateConfigType = generateConfigType;
|
|
30
55
|
// Copyright (c) HashiCorp, Inc
|
|
31
56
|
// SPDX-License-Identifier: MPL-2.0
|
|
32
57
|
const generator_1 = __importDefault(require("@babel/generator"));
|
|
@@ -67,7 +92,6 @@ function getReference(graph, id) {
|
|
|
67
92
|
function attributeNameToCdktfName(name) {
|
|
68
93
|
return (0, provider_generator_1.escapeAttributeName)((0, utils_1.camelCase)(name));
|
|
69
94
|
}
|
|
70
|
-
exports.attributeNameToCdktfName = attributeNameToCdktfName;
|
|
71
95
|
const valueToTs = async (scope, item, path, isModule = false) => {
|
|
72
96
|
switch (typeof item) {
|
|
73
97
|
case "string":
|
|
@@ -171,7 +195,6 @@ async function backendToExpression(scope, tf) {
|
|
|
171
195
|
]));
|
|
172
196
|
}))).reduce((carry, item) => [...carry, item], []);
|
|
173
197
|
}
|
|
174
|
-
exports.backendToExpression = backendToExpression;
|
|
175
198
|
function addOverrideExpression(variable, path, value, explanatoryComment) {
|
|
176
199
|
const ast = t.expressionStatement(t.callExpression(t.memberExpression(t.identifier(variable), t.identifier("addOverride")), [t.stringLiteral(path), value]));
|
|
177
200
|
if (explanatoryComment) {
|
|
@@ -347,7 +370,6 @@ async function resource(scope, type, key, id, item, graph) {
|
|
|
347
370
|
})));
|
|
348
371
|
return expressions;
|
|
349
372
|
}
|
|
350
|
-
exports.resource = resource;
|
|
351
373
|
async function asExpression(scope, type, name, config, isModuleImport, isProvider, reference, imported) {
|
|
352
374
|
const { providers, ...otherOptions } = config;
|
|
353
375
|
const constructId = (0, utils_1.uniqueId)(scope.constructs, name);
|
|
@@ -399,7 +421,6 @@ async function output(scope, key, _id, item, _graph) {
|
|
|
399
421
|
sensitive,
|
|
400
422
|
}, false, false, undefined, undefined);
|
|
401
423
|
}
|
|
402
|
-
exports.output = output;
|
|
403
424
|
async function variableTypeToAst(scope, type) {
|
|
404
425
|
const addVariableTypeToImports = () => scope.importables.push({
|
|
405
426
|
constructName: "VariableType",
|
|
@@ -446,7 +467,6 @@ async function variableTypeToAst(scope, type) {
|
|
|
446
467
|
}
|
|
447
468
|
return parsedTypeToAst(await (0, expressions_1.expressionAst)(type));
|
|
448
469
|
}
|
|
449
|
-
exports.variableTypeToAst = variableTypeToAst;
|
|
450
470
|
async function variable(scope, key, id, item, graph) {
|
|
451
471
|
const [{ type, ...props }] = item;
|
|
452
472
|
if (!getReference(graph, id)) {
|
|
@@ -454,7 +474,6 @@ async function variable(scope, key, id, item, graph) {
|
|
|
454
474
|
}
|
|
455
475
|
return asExpression(scope, id, key, { ...props, type: type ? await variableTypeToAst(scope, type) : undefined }, false, false, getReference(graph, id), undefined);
|
|
456
476
|
}
|
|
457
|
-
exports.variable = variable;
|
|
458
477
|
async function local(scope, key, id, item, graph) {
|
|
459
478
|
utils_1.logger.debug(`Initializing local resource ${key} with id ${id}`);
|
|
460
479
|
if (!getReference(graph, id)) {
|
|
@@ -467,13 +486,11 @@ async function local(scope, key, id, item, graph) {
|
|
|
467
486
|
]),
|
|
468
487
|
];
|
|
469
488
|
}
|
|
470
|
-
exports.local = local;
|
|
471
489
|
async function modules(scope, key, id, item, graph) {
|
|
472
490
|
const [{ source, version: _version, ...props }] = item;
|
|
473
491
|
const moduleConstraint = new provider_generator_1.TerraformModuleConstraint(source);
|
|
474
492
|
return asExpression(scope, moduleConstraint.className, key, props, true, false, getReference(graph, id), undefined);
|
|
475
493
|
}
|
|
476
|
-
exports.modules = modules;
|
|
477
494
|
async function imports(scope, _id, item, graph) {
|
|
478
495
|
// Move from ${aws_instance.example} to aws_instance.example
|
|
479
496
|
const target = item.to.startsWith("${") && item.to.endsWith("}")
|
|
@@ -509,13 +526,11 @@ async function imports(scope, _id, item, graph) {
|
|
|
509
526
|
])),
|
|
510
527
|
];
|
|
511
528
|
}
|
|
512
|
-
exports.imports = imports;
|
|
513
529
|
async function provider(scope, key, id, item, graph) {
|
|
514
530
|
const { version: _version, ...props } = item;
|
|
515
531
|
const importKey = key === "null" ? "NullProvider" : key;
|
|
516
532
|
return asExpression(scope, `${importKey}.${(0, utils_1.pascalCase)(key)}Provider`, key, props, false, true, getReference(graph, id), undefined);
|
|
517
533
|
}
|
|
518
|
-
exports.provider = provider;
|
|
519
534
|
exports.cdktfImport = (0, template_1.default)(`import * as cdktn from "cdktn"`)();
|
|
520
535
|
exports.constructsImport = (0, template_1.default)(`import * as constructs from "constructs"`)();
|
|
521
536
|
const providerImports = (providers) => providers.map((providerName) => {
|
|
@@ -544,7 +559,6 @@ async function gen(statements) {
|
|
|
544
559
|
utils_1.logger.debug(`Generated code:\n${code}`);
|
|
545
560
|
return code;
|
|
546
561
|
}
|
|
547
|
-
exports.gen = gen;
|
|
548
562
|
function addImportForCodeContainer(scope, codeContainer) {
|
|
549
563
|
switch (codeContainer) {
|
|
550
564
|
case "constructs.Construct":
|
|
@@ -569,7 +583,6 @@ function addImportForCodeContainer(scope, codeContainer) {
|
|
|
569
583
|
throw commons_1.Errors.Internal("Unsupported code container: " + codeContainer);
|
|
570
584
|
}
|
|
571
585
|
}
|
|
572
|
-
exports.addImportForCodeContainer = addImportForCodeContainer;
|
|
573
586
|
function wrapCodeInConstructor(codeContainer, code, className, configTypeName) {
|
|
574
587
|
let baseContainerClass;
|
|
575
588
|
switch (codeContainer) {
|
|
@@ -609,7 +622,6 @@ function wrapCodeInConstructor(codeContainer, code, className, configTypeName) {
|
|
|
609
622
|
className: t.identifier(className),
|
|
610
623
|
});
|
|
611
624
|
}
|
|
612
|
-
exports.wrapCodeInConstructor = wrapCodeInConstructor;
|
|
613
625
|
const providerConstructImports = (importable) => {
|
|
614
626
|
let provider = importable[0].provider;
|
|
615
627
|
let namespace = importable[0].namespace;
|
|
@@ -668,9 +680,7 @@ function buildImports(importables) {
|
|
|
668
680
|
});
|
|
669
681
|
return constructImports;
|
|
670
682
|
}
|
|
671
|
-
exports.buildImports = buildImports;
|
|
672
683
|
function generateConfigType(name, config) {
|
|
673
684
|
return t.tsInterfaceDeclaration(t.identifier(name), undefined, undefined, t.tsInterfaceBody(Object.entries(config).map(([key, _value]) => t.tsPropertySignature(t.identifier(key), t.tSTypeAnnotation(t.tsAnyKeyword())))));
|
|
674
685
|
}
|
|
675
|
-
exports.generateConfigType = generateConfigType;
|
|
676
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9nZW5lcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxpRUFBd0M7QUFDeEMsK0RBQXVDO0FBQ3ZDLGdEQUFrQztBQUVsQyx3REFBZ0M7QUFTaEMsbUNBQWtFO0FBVWxFLCtDQUE4RTtBQUU5RSw2Q0FBa0Q7QUFDbEQsa0VBR21DO0FBQ25DLHVEQUkyQjtBQUMzQiw0Q0FBMEU7QUFDMUUsOENBQWdFO0FBQ2hFLHFEQUE4RTtBQUM5RSwyQ0FJcUI7QUFDckIseUNBQTJDO0FBQzNDLCtDQUF3RDtBQUV4RCxTQUFTLFlBQVksQ0FBQyxLQUFvQixFQUFFLEVBQVU7SUFDcEQsY0FBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXpDLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixjQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixTQUFTLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsY0FBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkQsY0FBTSxDQUFDLEtBQUssQ0FDVix1QkFBdUIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUM3RCxDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUMsZ0JBQWdC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QUM7QUFDMUIsQ0FBQztBQXpERCxvQ0F5REM7QUFFRCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBWSxFQUNaLE1BQXFDO0lBRXJDLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixDQUM3QixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUNsQixTQUFTLEVBQ1QsU0FBUyxFQUNULENBQUMsQ0FBQyxlQUFlLENBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQzNDLENBQUMsQ0FBQyxtQkFBbUIsQ0FDbkIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDakIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUNyQyxDQUNGLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQWpCRCxnREFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IGdlbmVyYXRlIGZyb20gXCJAYmFiZWwvZ2VuZXJhdG9yXCI7XG5pbXBvcnQgdGVtcGxhdGUgZnJvbSBcIkBiYWJlbC90ZW1wbGF0ZVwiO1xuaW1wb3J0ICogYXMgdCBmcm9tIFwiQGJhYmVsL3R5cGVzXCI7XG5pbXBvcnQgeyBEaXJlY3RlZEdyYXBoIH0gZnJvbSBcImdyYXBob2xvZ3lcIjtcbmltcG9ydCBwcmV0dGllciBmcm9tIFwicHJldHRpZXJcIjtcblxuaW1wb3J0IHtcbiAgVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgUHJvZ3JhbVNjb3BlLFxuICBSZXNvdXJjZVNjb3BlLFxuICBJbXBvcnRhYmxlQ29uc3RydWN0LFxuICBBdHRyaWJ1dGVQYXRoLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgY2FtZWxDYXNlLCBsb2dnZXIsIHBhc2NhbENhc2UsIHVuaXF1ZUlkIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIFJlc291cmNlLFxuICBUZXJyYWZvcm1Db25maWcsXG4gIE1vZHVsZSxcbiAgUHJvdmlkZXIsXG4gIFZhcmlhYmxlLFxuICBPdXRwdXQsXG4gIEltcG9ydCxcbn0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMsIGV4cHJlc3Npb25Bc3QgfSBmcm9tIFwiLi9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgUmVmZXJlbmNlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGZpbmRVc2VkUmVmZXJlbmNlcyB9IGZyb20gXCIuL3JlZmVyZW5jZXNcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQsXG4gIGVzY2FwZUF0dHJpYnV0ZU5hbWUsXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5pbXBvcnQge1xuICBnZXRUeXBlQXRQYXRoLFxuICBpc01hcEF0dHJpYnV0ZSxcbiAgZ2V0RGVzaXJlZFR5cGUsXG59IGZyb20gXCIuL3RlcnJhZm9ybVNjaGVtYVwiO1xuaW1wb3J0IHsgRXJyb3JzLCBBdHRyaWJ1dGVUeXBlLCBCbG9ja1R5cGUsIFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgVEZFeHByZXNzaW9uU3ludGF4VHJlZSBhcyB0ZXggfSBmcm9tIFwiQGNka3RuL2hjbDJqc29uXCI7XG5pbXBvcnQgeyBleHRyYWN0RHluYW1pY0Jsb2NrcywgaXNOZXN0ZWREeW5hbWljQmxvY2sgfSBmcm9tIFwiLi9keW5hbWljLWJsb2Nrc1wiO1xuaW1wb3J0IHtcbiAgY29uc3RydWN0QXN0LFxuICByZWZlcmVuY2VUb1ZhcmlhYmxlTmFtZSxcbiAgdmFyaWFibGVOYW1lLFxufSBmcm9tIFwiLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IHNuYWtlQ2FzZSB9IGZyb20gXCJjZGt0bi9saWIvdXRpbFwiO1xuaW1wb3J0IHsgZmlsbFdpdGhDb25maWdBY2Nlc3NvcnMgfSBmcm9tIFwiLi9wYXJ0aWFsQ29kZVwiO1xuXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2UoZ3JhcGg6IERpcmVjdGVkR3JhcGgsIGlkOiBzdHJpbmcpIHtcbiAgbG9nZ2VyLmRlYnVnKGBGaW5kaW5nIHJlZmVyZW5jZSBmb3IgJHtpZH1gKTtcbiAgY29uc3QgbmVpZ2hib3JzID0gZ3JhcGgub3V0TmVpZ2hib3JzKGlkKTtcblxuICBpZiAobmVpZ2hib3JzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIG5laWdoYm9ycyAke25laWdoYm9yc30gZm9yICR7aWR9YCk7XG4gICAgY29uc3QgZWRnZSA9IGdyYXBoLmRpcmVjdGVkRWRnZShpZCwgbmVpZ2hib3JzWzBdKTtcblxuICAgIGlmIChlZGdlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvdW5kIGZpcnN0IGVkZ2UgJHtlZGdlfSBmb3IgJHtpZH1gKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJldHVybmluZyByZWZlcmVuY2UgJHtncmFwaC5nZXRFZGdlQXR0cmlidXRlKGVkZ2UsIFwicmVmXCIpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdyYXBoLmdldEVkZ2VBdHRyaWJ1dGUoZWRnZSwgXCJyZWZcIikgYXMgUmVmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvdW5kIG5vIGVkZ2UgZm9yICR7aWR9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRyaWJ1dGVOYW1lVG9DZGt0Zk5hbWUobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBlc2NhcGVBdHRyaWJ1dGVOYW1lKGNhbWVsQ2FzZShuYW1lKSk7XG59XG5cbmV4cG9ydCBjb25zdCB2YWx1ZVRvVHMgPSBhc3luYyAoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBpdGVtOiBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLFxuICBwYXRoOiBzdHJpbmcsXG4gIGlzTW9kdWxlID0gZmFsc2UsXG4pOiBQcm9taXNlPHQuRXhwcmVzc2lvbj4gPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBpdGVtKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaWYgKFxuICAgICAgICAoYXdhaXQgZmluZFVzZWRSZWZlcmVuY2VzKHNjb3BlLm5vZGVJZHMsIGl0ZW0pKS5zb21lKChyZWYpID0+XG4gICAgICAgICAgcGF0aC5zdGFydHNXaXRoKHJlZi5yZWZlcmVuY2VlLmlkKSxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0LnN0cmluZ0xpdGVyYWwoaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoc2NvcGUsIGBcIiR7aXRlbX1cImAsICgpID0+XG4gICAgICAgIGdldERlc2lyZWRUeXBlKHNjb3BlLCBwYXRoKSxcbiAgICAgICk7XG5cbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhzY29wZSwgYCR7aXRlbX1gLCAoKSA9PlxuICAgICAgICBnZXREZXNpcmVkVHlwZShzY29wZSwgcGF0aCksXG4gICAgICApO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoc2NvcGUsIGAke2l0ZW19YCwgKCkgPT5cbiAgICAgICAgZ2V0RGVzaXJlZFR5cGUoc2NvcGUsIHBhdGgpLFxuICAgICAgKTtcbiAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdC5udWxsTGl0ZXJhbCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgaXRlcmF0b3JzIGFuZCBkeW5hbWljIGJsb2NrcyB3ZSBwdXQgdGhlIGNvcnJlY3QgVFMgZXhwcmVzc2lvbiBpbiB0aGUgY29uZmlnIGFoZWFkIG9mIHRpbWVcbiAgICAgIGlmICh0LmlzTm9kZShpdGVtKSAmJiB0LmlzRXhwcmVzc2lvbihpdGVtKSkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXR0cmlidXRlVHlwZSA9IGdldFR5cGVBdFBhdGgoc2NvcGUucHJvdmlkZXJTY2hlbWEsIHBhdGgpO1xuXG4gICAgICBmdW5jdGlvbiBzaG91bGRSZW1vdmVBcnJheUJhc2VkT25UeXBlKFxuICAgICAgICBhdHRyaWJ1dGVUeXBlOiBTY2hlbWEgfCBBdHRyaWJ1dGVUeXBlIHwgQmxvY2tUeXBlIHwgbnVsbCxcbiAgICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZVR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoZSBkZWZhdWx0IGFzc3VtcHRpb24gaXMgd2UgbmVlZCB0aGUgYXJyYXlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcHMgYW5kIG9iamVjdCBkb24ndCBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXR0cmlidXRlVHlwZSkgJiZcbiAgICAgICAgICAoYXR0cmlidXRlVHlwZVswXSA9PT0gXCJtYXBcIiB8fCBhdHRyaWJ1dGVUeXBlWzBdID09PSBcIm9iamVjdFwiKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGl0J3MgYSBibG9jayB0eXBlIHdpdGggbWF4X2l0ZW1zID0gMSB3ZSBkb24ndCBuZWVkIHRvIHdyYXAgaXQgaW4gYW4gYXJyYXlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgXCJtYXhfaXRlbXNcIiBpbiBhdHRyaWJ1dGVUeXBlICYmXG4gICAgICAgICAgYXR0cmlidXRlVHlwZS5tYXhfaXRlbXMgPT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVud3JhcHBlZEl0ZW0gPVxuICAgICAgICBBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgIChzaG91bGRSZW1vdmVBcnJheUJhc2VkT25UeXBlKGF0dHJpYnV0ZVR5cGUpIHx8XG4gICAgICAgICAgcGF0aC5lbmRzV2l0aChcImxpZmVjeWNsZVwiKSB8fFxuICAgICAgICAgIHBhdGguZW5kc1dpdGgoXCJjb25uZWN0aW9uXCIpKVxuICAgICAgICAgID8gaXRlbVswXVxuICAgICAgICAgIDogaXRlbTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodW53cmFwcGVkSXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIHQuYXJyYXlFeHByZXNzaW9uKFxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdW53cmFwcGVkSXRlbS5tYXAoKGkpID0+IHZhbHVlVG9UcyhzY29wZSwgaSwgYCR7cGF0aH0uW11gKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHQub2JqZWN0RXhwcmVzc2lvbihcbiAgICAgICAgKFxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModW53cmFwcGVkSXRlbSkubWFwKGFzeW5jIChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJkeW5hbWljXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZvcl9lYWNoOiBfZm9yX2VhY2gsIC4uLm90aGVycyB9ID0gdmFsdWUgYXMgYW55O1xuICAgICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNSZWYgPSBPYmplY3Qua2V5cyhvdGhlcnMpWzBdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0Lm9iamVjdFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgdC5pZGVudGlmaWVyKFxuICAgICAgICAgICAgICAgICAgICBzY29wZS53aXRoaW5PdmVycmlkZUV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICA/IGR5bmFtaWNSZWZcbiAgICAgICAgICAgICAgICAgICAgICA6IGVzY2FwZUF0dHJpYnV0ZU5hbWUoY2FtZWxDYXNlKGR5bmFtaWNSZWYpKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB0LmFycmF5RXhwcmVzc2lvbigpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBpdGVtUGF0aCA9IGAke3BhdGh9LiR7a2V5fWA7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1BdHRyaWJ1dGVUeXBlID0gZ2V0VHlwZUF0UGF0aChcbiAgICAgICAgICAgICAgICBzY29wZS5wcm92aWRlclNjaGVtYSxcbiAgICAgICAgICAgICAgICBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCB0eXBlTWV0YWRhdGEgPSBnZXRUeXBlQXRQYXRoKFxuICAgICAgICAgICAgICAgIHNjb3BlLnByb3ZpZGVyU2NoZW1hLFxuICAgICAgICAgICAgICAgIGl0ZW1QYXRoLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlzU2luZ2xlSXRlbUJsb2NrID1cbiAgICAgICAgICAgICAgICB0eXBlTWV0YWRhdGEgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdHlwZU1ldGFkYXRhID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGVNZXRhZGF0YSwgXCJtYXhfaXRlbXNcIilcbiAgICAgICAgICAgICAgICAgID8gKHR5cGVNZXRhZGF0YSBhcyBhbnkpLm1heF9pdGVtcyA9PT0gMVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICAgICAgICBjb25zdCBzaG91bGRCZUFycmF5ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAhKHQuaXNOb2RlKHZhbHVlKSAmJiB0LmlzRXhwcmVzc2lvbih2YWx1ZSkpICYmXG4gICAgICAgICAgICAgICAgIWlzU2luZ2xlSXRlbUJsb2NrICYmXG4gICAgICAgICAgICAgICAgLy8gTWFwIHR5cGUgYXR0cmlidXRlcyBtdXN0IG5vdCBiZSB3cmFwcGVkIGluIGFycmF5c1xuICAgICAgICAgICAgICAgICFpc01hcEF0dHJpYnV0ZShpdGVtQXR0cmlidXRlVHlwZSkgJiZcbiAgICAgICAgICAgICAgICBrZXkgIT09IFwidGFnc1wiICYmXG4gICAgICAgICAgICAgICAga2V5ICE9PSBcImZvckVhY2hcIiAmJlxuICAgICAgICAgICAgICAgIGtleSAhPT0gXCJsaWZlY3ljbGVcIjtcblxuICAgICAgICAgICAgICBjb25zdCBrZWVwS2V5TmFtZTogYm9vbGVhbiA9XG4gICAgICAgICAgICAgICAgIWlzTW9kdWxlICYmXG4gICAgICAgICAgICAgICAga2V5ICE9PSBcImRlcGVuZHNfb25cIiAmJlxuICAgICAgICAgICAgICAgICFwYXRoLmluY2x1ZGVzKFwibGlmZWN5Y2xlXCIpICYmXG4gICAgICAgICAgICAgICAgKGtleSA9PT0gXCJmb3JfZWFjaFwiIHx8XG4gICAgICAgICAgICAgICAgICAhdHlwZU1ldGFkYXRhIHx8XG4gICAgICAgICAgICAgICAgICBpc01hcEF0dHJpYnV0ZShhdHRyaWJ1dGVUeXBlKSkgJiZcbiAgICAgICAgICAgICAgICAhKHBhdGguc3RhcnRzV2l0aChcInZhci5cIikgJiYgcGF0aC5pbmNsdWRlcyhcInZhbGlkYXRpb25cIikpO1xuXG4gICAgICAgICAgICAgIHJldHVybiB0Lm9iamVjdFByb3BlcnR5KFxuICAgICAgICAgICAgICAgIHQuc3RyaW5nTGl0ZXJhbChcbiAgICAgICAgICAgICAgICAgIGtlZXBLZXlOYW1lID8ga2V5IDogYXR0cmlidXRlTmFtZVRvQ2RrdGZOYW1lKGtleSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzaG91bGRCZUFycmF5XG4gICAgICAgICAgICAgICAgICA/IHQuYXJyYXlFeHByZXNzaW9uKFthd2FpdCB2YWx1ZVRvVHMoc2NvcGUsIHZhbHVlLCBpdGVtUGF0aCldKVxuICAgICAgICAgICAgICAgICAgOiBhd2FpdCB2YWx1ZVRvVHMoc2NvcGUsIHZhbHVlLCBpdGVtUGF0aCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXG4gICAgICAgICkuZmlsdGVyKChleHByKSA9PiBleHByICE9PSB1bmRlZmluZWQpIGFzIHQuT2JqZWN0UHJvcGVydHlbXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHR5cGUgXCIgKyBpdGVtKTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYWNrZW5kVG9FeHByZXNzaW9uKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICB0ZjogVGVycmFmb3JtQ29uZmlnW1wiYmFja2VuZFwiXSxcbik6IFByb21pc2U8dC5TdGF0ZW1lbnRbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXModGYgfHwge30pLm1hcChhc3luYyAoW3R5cGUsIFtjb25maWddXSkgPT4ge1xuICAgICAgICBjb25zdCBiYWNrZW5kSWRlbnRpZmllciA9IHBhc2NhbENhc2UoYCR7dHlwZX1CYWNrZW5kYCk7XG4gICAgICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgICAgIGNvbnN0cnVjdE5hbWU6IGJhY2tlbmRJZGVudGlmaWVyLFxuICAgICAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgICAgIHQubmV3RXhwcmVzc2lvbih0LmlkZW50aWZpZXIoYmFja2VuZElkZW50aWZpZXIpLCBbXG4gICAgICAgICAgICB0LnRoaXNFeHByZXNzaW9uKCksXG4gICAgICAgICAgICB0Lm9iamVjdEV4cHJlc3Npb24oXG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmZpZykubWFwKGFzeW5jIChbcHJvcGVydHksIHZhbHVlXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICB0LmlkZW50aWZpZXIoY2FtZWxDYXNlKHByb3BlcnR5KSksXG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdmFsdWVUb1RzKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGF0aC1mb3ItYmFja2VuZHMtY2FuLWJlLWlnbm9yZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkucmVkdWNlKFxuICAgICAgICAgICAgICAgIChjYXJyeSwgaXRlbSkgPT4gWy4uLmNhcnJ5LCBpdGVtXSxcbiAgICAgICAgICAgICAgICBbXSBhcyB0Lk9iamVjdFByb3BlcnR5W10sXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKVxuICApLnJlZHVjZSgoY2FycnksIGl0ZW0pID0+IFsuLi5jYXJyeSwgaXRlbV0sIFtdIGFzIHQuU3RhdGVtZW50W10pO1xufVxuXG5mdW5jdGlvbiBhZGRPdmVycmlkZUV4cHJlc3Npb24oXG4gIHZhcmlhYmxlOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWU6IHQuRXhwcmVzc2lvbixcbiAgZXhwbGFuYXRvcnlDb21tZW50Pzogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IGFzdCA9IHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKHQuaWRlbnRpZmllcih2YXJpYWJsZSksIHQuaWRlbnRpZmllcihcImFkZE92ZXJyaWRlXCIpKSxcbiAgICAgIFt0LnN0cmluZ0xpdGVyYWwocGF0aCksIHZhbHVlXSxcbiAgICApLFxuICApO1xuXG4gIGlmIChleHBsYW5hdG9yeUNvbW1lbnQpIHtcbiAgICB0LmFkZENvbW1lbnQoYXN0LCBcImxlYWRpbmdcIiwgZXhwbGFuYXRvcnlDb21tZW50KTtcbiAgfVxuXG4gIHJldHVybiBhc3Q7XG59XG5cbmZ1bmN0aW9uIGFkZE92ZXJyaWRlTG9naWNhbElkRXhwcmVzc2lvbih2YXJpYWJsZTogc3RyaW5nLCBsb2dpY2FsSWQ6IHN0cmluZykge1xuICBjb25zdCBhc3QgPSB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgICAgdC5pZGVudGlmaWVyKHZhcmlhYmxlKSxcbiAgICAgICAgdC5pZGVudGlmaWVyKFwib3ZlcnJpZGVMb2dpY2FsSWRcIiksXG4gICAgICApLFxuICAgICAgW3Quc3RyaW5nTGl0ZXJhbChsb2dpY2FsSWQpXSxcbiAgICApLFxuICApO1xuXG4gIHQuYWRkQ29tbWVudChcbiAgICBhc3QsXG4gICAgXCJsZWFkaW5nXCIsXG4gICAgXCJUaGlzIGFsbG93cyB0aGUgVGVycmFmb3JtIHJlc291cmNlIG5hbWUgdG8gbWF0Y2ggdGhlIG9yaWdpbmFsIG5hbWUuIFlvdSBjYW4gcmVtb3ZlIHRoZSBjYWxsIGlmIHlvdSBkb24ndCBuZWVkIHRoZW0gdG8gbWF0Y2guXCIsXG4gICk7XG5cbiAgcmV0dXJuIGFzdDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtb3RlU3RhdGVUeXBlKGl0ZW06IFJlc291cmNlKSB7XG4gIGNvbnN0IGJhY2tlbmRSZWNvcmQgPSBpdGVtLmZpbmQoKHZhbCkgPT4gdmFsLmJhY2tlbmQpO1xuICBpZiAoYmFja2VuZFJlY29yZCkge1xuICAgIGNvbnN0IGJhY2tlbmQgPSBiYWNrZW5kUmVjb3JkLmJhY2tlbmQ7XG4gICAgc3dpdGNoIChiYWNrZW5kKSB7XG4gICAgICBjYXNlIFwicmVtb3RlXCI6XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgY2FzZSBcImV0Y2R2M1wiOlxuICAgICAgICByZXR1cm4gXCJfZXRjZF92M1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGBfJHtiYWNrZW5kfWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlVHlwZShwcm92aWRlcjogc3RyaW5nLCBuYW1lOiBzdHJpbmdbXSwgaXRlbTogUmVzb3VyY2UpIHtcbiAgc3dpdGNoIChwcm92aWRlcikge1xuICAgIGNhc2UgXCJkYXRhLnRlcnJhZm9ybVwiOlxuICAgICAgcmV0dXJuIGBjZGt0bi5kYXRhX3RlcnJhZm9ybV8ke25hbWUuam9pbihcIl9cIil9JHtnZXRSZW1vdGVTdGF0ZVR5cGUoXG4gICAgICAgIGl0ZW0sXG4gICAgICApfWA7XG4gICAgY2FzZSBcIm51bGxcIjpcbiAgICAgIHJldHVybiBgTnVsbFByb3ZpZGVyLiR7bmFtZS5qb2luKFwiX1wiKX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYCR7cHJvdmlkZXJ9LiR7bmFtZS5qb2luKFwiX1wiKX1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcENvbmZpZ1BlclJlc291cmNlVHlwZShyZXNvdXJjZTogc3RyaW5nLCBpdGVtOiBSZXNvdXJjZVswXSkge1xuICAvLyBCYWNrZW5kcyBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IEFQSVxuICBpZiAocmVzb3VyY2Uuc3RhcnRzV2l0aChcImNka3RuLmRhdGFfdGVycmFmb3JtX1wiKSkge1xuICAgIHJldHVybiBpdGVtLmNvbmZpZztcbiAgfVxuICByZXR1cm4gaXRlbTtcbn1cblxuY29uc3QgbG9vcENvbW1lbnQgPSBgSW4gbW9zdCBjYXNlcyBsb29wcyBzaG91bGQgYmUgaGFuZGxlZCBpbiB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgY29udGV4dCBhbmRcbm5vdCBpbnNpZGUgb2YgdGhlIFRlcnJhZm9ybSBjb250ZXh0LiBJZiB5b3UgYXJlIGxvb3Bpbmcgb3ZlciBzb21ldGhpbmcgZXh0ZXJuYWwsIGUuZy4gYSB2YXJpYWJsZSBvciBhIGZpbGUgaW5wdXRcbnlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgYSBmb3IgbG9vcC4gSWYgeW91IGFyZSBsb29waW5nIG92ZXIgc29tZXRoaW5nIG9ubHkga25vd24gdG8gVGVycmFmb3JtLCBlLmcuIGEgcmVzdWx0IG9mIGEgZGF0YSBzb3VyY2VcbnlvdSBuZWVkIHRvIGtlZXAgdGhpcyBsaWtlIGl0IGlzLmA7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb3VyY2UoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIHR5cGU6IHN0cmluZyxcbiAga2V5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IFJlc291cmNlLFxuICBncmFwaDogRGlyZWN0ZWRHcmFwaCxcbik6IFByb21pc2U8dC5TdGF0ZW1lbnRbXT4ge1xuICBjb25zdCBbcHJvdmlkZXIsIC4uLm5hbWVdID0gdHlwZS5zcGxpdChcIl9cIik7XG4gIGNvbnN0IHJlc291cmNlID0gcmVzb3VyY2VUeXBlKHByb3ZpZGVyLCBuYW1lLCBpdGVtKTtcblxuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgcmVzb3VyY2UgdHlwZSAnJHt0eXBlfSdgKTtcbiAgfVxuICBsZXQgZXhwcmVzc2lvbnM6IHQuU3RhdGVtZW50W10gPSBbXTtcbiAgY29uc3QgdmFyTmFtZSA9IHZhcmlhYmxlTmFtZShzY29wZSwgcmVzb3VyY2UsIGtleSk7XG4gIGNvbnN0IHsgZm9yX2VhY2gsIGNvdW50LCBwcm92aXNpb25lciwgLi4uY29uZmlnIH0gPSBpdGVtWzBdO1xuICBjb25zdCBtYXBwZWRDb25maWcgPSBtYXBDb25maWdQZXJSZXNvdXJjZVR5cGUocmVzb3VyY2UsIGNvbmZpZyk7XG5cbiAgbGV0IGZvckVhY2hJdGVyYXRvck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKGZvcl9lYWNoKSB7XG4gICAgZm9yRWFjaEl0ZXJhdG9yTmFtZSA9IHZhcmlhYmxlTmFtZShcbiAgICAgIHNjb3BlLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBgJHtrZXl9X2Zvcl9lYWNoX2l0ZXJhdG9yYCxcbiAgICApO1xuICAgIGNvbnN0IHJlZmVyZW5jZUFzdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgYFwiJHtmb3JfZWFjaH1cImAsXG4gICAgICAoKSA9PiBbXCJsaXN0XCIsIFwiZHluYW1pY1wiXSxcbiAgICApO1xuXG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1JdGVyYXRvclwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXRlcmF0b3IgPSB0LnZhcmlhYmxlRGVjbGFyYXRpb24oXCJjb25zdFwiLCBbXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRvcihcbiAgICAgICAgdC5pZGVudGlmaWVyKGZvckVhY2hJdGVyYXRvck5hbWUpLFxuICAgICAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcIlRlcnJhZm9ybUl0ZXJhdG9yXCIpLFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKFwiZnJvbUxpc3RcIiksXG4gICAgICAgICAgKSxcblxuICAgICAgICAgIFtyZWZlcmVuY2VBc3RdLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICBdKTtcbiAgICB0LmFkZENvbW1lbnQoaXRlcmF0b3IsIFwibGVhZGluZ1wiLCBsb29wQ29tbWVudCk7XG4gICAgZXhwcmVzc2lvbnMucHVzaChpdGVyYXRvcik7XG5cbiAgICBtYXBwZWRDb25maWcuZm9yRWFjaCA9IHQuaWRlbnRpZmllcihmb3JFYWNoSXRlcmF0b3JOYW1lKTtcbiAgfVxuXG4gIGxldCBjb3VudEl0ZXJhdG9yTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoY291bnQpIHtcbiAgICBjb3VudEl0ZXJhdG9yTmFtZSA9IHZhcmlhYmxlTmFtZShzY29wZSwgcmVzb3VyY2UsIGAke2tleX1fY291bnRgKTtcbiAgICBjb25zdCByZWZlcmVuY2VBc3QgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGBcIiR7Y291bnR9XCJgLFxuICAgICAgKCkgPT4gXCJudW1iZXJcIixcbiAgICApO1xuXG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1Db3VudFwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXRlcmF0b3IgPSB0LnZhcmlhYmxlRGVjbGFyYXRpb24oXCJjb25zdFwiLCBbXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRvcihcbiAgICAgICAgdC5pZGVudGlmaWVyKGNvdW50SXRlcmF0b3JOYW1lKSxcbiAgICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgICAgICB0LmlkZW50aWZpZXIoXCJUZXJyYWZvcm1Db3VudFwiKSxcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcIm9mXCIpLFxuICAgICAgICAgICksXG4gICAgICAgICAgW3JlZmVyZW5jZUFzdF0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgIF0pO1xuICAgIHQuYWRkQ29tbWVudChpdGVyYXRvciwgXCJsZWFkaW5nXCIsIGxvb3BDb21tZW50KTtcbiAgICBtYXBwZWRDb25maWcuY291bnQgPSB0LmlkZW50aWZpZXIoY291bnRJdGVyYXRvck5hbWUpO1xuICAgIGV4cHJlc3Npb25zLnB1c2goaXRlcmF0b3IpO1xuICB9XG5cbiAgY29uc3QgZHluQmxvY2tzID0gZXh0cmFjdER5bmFtaWNCbG9ja3MobWFwcGVkQ29uZmlnKTtcbiAgY29uc3QgbmVzdGVkRHluYW1pY0Jsb2NrcyA9IGR5bkJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PlxuICAgIGlzTmVzdGVkRHluYW1pY0Jsb2NrKGR5bkJsb2NrcywgYmxvY2spLFxuICApO1xuICBjb25zdCBkeW5hbWljQmxvY2tzVXNpbmdPdmVycmlkZXMgPSBkeW5CbG9ja3MuZmlsdGVyKFxuICAgIChibG9jaykgPT5cbiAgICAgIC8vIG5lc3RlZCBibG9ja3MgbmVlZCBvdmVycmlkZXNcbiAgICAgIG5lc3RlZER5bmFtaWNCbG9ja3MuaW5jbHVkZXMoYmxvY2spIHx8XG4gICAgICAvLyBibG9ja3MgdGhhdCBjb250YWluIG5lc3RlZCBibG9ja3MgbmVlZCB0aGVtIGFzIHdlbGxcbiAgICAgIG5lc3RlZER5bmFtaWNCbG9ja3Muc29tZSgobmVzdGVkQmxvY2spID0+XG4gICAgICAgIG5lc3RlZEJsb2NrLnBhdGguc3RhcnRzV2l0aChibG9jay5wYXRoKSxcbiAgICAgICksXG4gICk7XG4gIC8vIGFsbCBvdGhlcnMgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIENES1ROIHJ1bnRpbWVcbiAgY29uc3QgZHluYW1pY0Jsb2Nrc1VzaW5nUnVudGltZSA9IGR5bkJsb2Nrcy5maWx0ZXIoXG4gICAgKGJsb2NrKSA9PiAhZHluYW1pY0Jsb2Nrc1VzaW5nT3ZlcnJpZGVzLmluY2x1ZGVzKGJsb2NrKSxcbiAgKTtcblxuICBmb3IgKGNvbnN0IFtpLCBibG9ja10gb2YgZHluYW1pY0Jsb2Nrc1VzaW5nUnVudGltZS5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkeW5hbWljQmxvY2tJdGVyYXRvck5hbWUgPSB2YXJpYWJsZU5hbWUoXG4gICAgICBzY29wZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAgYCR7a2V5fV9keW5hbWljX2l0ZXJhdG9yXyR7aX1gLFxuICAgICk7XG5cbiAgICBjb25zdCByZWZlcmVuY2VBc3QgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGBcIiR7YmxvY2suZm9yX2VhY2h9XCJgLFxuICAgICAgKCkgPT4gW1wibGlzdFwiLCBcImR5bmFtaWNcIl0sXG4gICAgKTtcblxuICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVGVycmFmb3JtSXRlcmF0b3JcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gdC52YXJpYWJsZURlY2xhcmF0aW9uKFwiY29uc3RcIiwgW1xuICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoXG4gICAgICAgIHQuaWRlbnRpZmllcihkeW5hbWljQmxvY2tJdGVyYXRvck5hbWUpLFxuICAgICAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcIlRlcnJhZm9ybUl0ZXJhdG9yXCIpLFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKFwiZnJvbUxpc3RcIiksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBbcmVmZXJlbmNlQXN0XSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgXSk7XG4gICAgdC5hZGRDb21tZW50KGl0ZXJhdG9yLCBcImxlYWRpbmdcIiwgbG9vcENvbW1lbnQpO1xuICAgIGV4cHJlc3Npb25zLnB1c2goaXRlcmF0b3IpO1xuICAgIGNvbnN0IGR5bmFtaWNDYWxsRXhwcmVzc2lvbiA9IHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgIHQuaWRlbnRpZmllcihkeW5hbWljQmxvY2tJdGVyYXRvck5hbWUpLFxuICAgICAgICB0LmlkZW50aWZpZXIoXCJkeW5hbWljXCIpLFxuICAgICAgKSxcbiAgICAgIFtcbiAgICAgICAgYXdhaXQgdmFsdWVUb1RzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnNjb3BlLFxuICAgICAgICAgICAgc2NvcGVkVmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgIFtibG9jay5zY29wZWRWYXJdOiBkeW5hbWljQmxvY2tJdGVyYXRvck5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsbFdpdGhDb25maWdBY2Nlc3NvcnMoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYmxvY2suY29udGVudCkgPyBibG9jay5jb250ZW50WzBdIDogYmxvY2suY29udGVudCxcbiAgICAgICAgICAgIGJsb2NrLnBhdGgucmVwbGFjZShibG9jay5zY29wZWRWYXIsIFwiXCIpLFxuICAgICAgICAgICksXG4gICAgICAgICAgYmxvY2sucGF0aC5yZXBsYWNlKGJsb2NrLnNjb3BlZFZhciwgXCJcIiksXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICk7XG5cbiAgICBjb25zdCBwYXJ0cyA9IGJsb2NrLnBhdGhcbiAgICAgIC5yZXBsYWNlKGBkeW5hbWljLiR7YmxvY2suc2NvcGVkVmFyfWAsIFwiXCIpXG4gICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAuZmlsdGVyKChwKSA9PiBwLmxlbmd0aCA+IDApO1xuXG4gICAgY29uc3QgcGFyZW50ID0gcGFydHMucmVkdWNlKChhY2MsIHBhcnQpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFjYykgJiYgIU51bWJlci5pc05hTihwYXJzZUludChwYXJ0LCAxMCkpKSB7XG4gICAgICAgIHJldHVybiBhY2NbcGFyc2VJbnQocGFydCwgMTApXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2NbcGFydF07XG4gICAgICB9XG4gICAgfSwgbWFwcGVkQ29uZmlnKTtcbiAgICBwYXJlbnRbYmxvY2suc2NvcGVkVmFyXSA9IGR5bmFtaWNDYWxsRXhwcmVzc2lvbjtcbiAgICBkZWxldGUgcGFyZW50LmR5bmFtaWM7XG4gIH1cblxuICBjb25zdCBvdmVycmlkZVJlZmVyZW5jZSA9IGR5bmFtaWNCbG9ja3NVc2luZ092ZXJyaWRlcy5sZW5ndGhcbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgIGVuZDogMCxcbiAgICAgICAgcmVmZXJlbmNlZToge1xuICAgICAgICAgIGlkOiBgJHt0eXBlfS4ke2tleX1gLFxuICAgICAgICAgIGZ1bGw6IGAke3R5cGV9LiR7a2V5fWAsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHByb3Zpc2lvbmVyKSB7XG4gICAgbWFwcGVkQ29uZmlnLnByb3Zpc2lvbmVycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMocHJvdmlzaW9uZXIpLmZsYXRNYXAoKFt0eXBlLCBwXTogW3N0cmluZywgYW55XSkgPT5cbiAgICAgICAgcC5tYXAoKHBwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PlxuICAgICAgICAgIHZhbHVlVG9UcyhcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgeyB0eXBlLCAuLi5wcCB9LFxuICAgICAgICAgICAgXCJwYXRoLWZvci1wcm92aXNpb25lcnMtY2FuLWJlLWlnbm9yZWRcIixcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW1wb3J0R3JhcGhJZCA9IGBpbXBvcnQuJHtyZXNvdXJjZS5yZXBsYWNlKFwiLlwiLCBcIl9cIil9LiR7a2V5fWA7XG4gIGNvbnN0IGltcG9ydERlZmluaXRpb246IEltcG9ydCB8IHVuZGVmaW5lZCA9IGdyYXBoLmhhc05vZGUoaW1wb3J0R3JhcGhJZClcbiAgICA/IGdyYXBoLmdldE5vZGVBdHRyaWJ1dGUoaW1wb3J0R3JhcGhJZCwgXCJ2YWx1ZVwiKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMuY29uY2F0KFxuICAgIGF3YWl0IGFzRXhwcmVzc2lvbihcbiAgICAgIHsgLi4uc2NvcGUsIGZvckVhY2hJdGVyYXRvck5hbWUsIGNvdW50SXRlcmF0b3JOYW1lIH0sXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtleSxcbiAgICAgIG1hcHBlZENvbmZpZyxcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICBnZXRSZWZlcmVuY2UoZ3JhcGgsIGlkKSB8fCBvdmVycmlkZVJlZmVyZW5jZSxcbiAgICAgIGltcG9ydERlZmluaXRpb24sXG4gICAgKSxcbiAgKTtcblxuICAvLyBDaGVjayBmb3IgZHluYW1pYyBibG9ja3NcbiAgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucy5jb25jYXQoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBkeW5hbWljQmxvY2tzVXNpbmdPdmVycmlkZXMubWFwKGFzeW5jICh7IHBhdGgsIGZvcl9lYWNoLCBjb250ZW50IH0pID0+IHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBsZXQgdGhlIGV4cHJlc3Npb24gY29udmVyc2lvbiBrbm93IGFsbCBhdmFpbGFibGVcbiAgICAgICAgLy8gZHluYW1pYyBibG9jayBuYW1lcywgc28gd2UgZG9uJ3QgcmVwbGFjZSB0aGVtLiBUaGUgXCJkeW5hbWljLWJsb2NrXCJcbiAgICAgICAgLy8gc2NvcGVkIHZhcmlhYmxlIGluZGljYXRlcyB0byB0aGUgZXhwcmVzc2lvbiBjb252ZXJzaW9uIHRvIHVzZSB0aGVcbiAgICAgICAgLy8ga2V5IG5hbWUgaW5zdGVhZCBvZiBhbiBpdGVyYXRvclxuICAgICAgICBjb25zdCBzY29wZWRWYXJpYWJsZXNJblBhdGggPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgcGF0aFxuICAgICAgICAgICAgLnN1YnN0cmluZygxKSAvLyBUaGUgcGF0aCBzdGFydHMgd2l0aCBhIGRvdCB0aGF0IHJlc3VsdHMgaW4gYW4gZW1wdHkgc3BsaXRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgIChwKSA9PiAhW1wiZHluYW1pY1wiLCBcImNvbnRlbnRcIl0uaW5jbHVkZXMocCkgJiYgaXNOYU4ocGFyc2VJbnQocCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcCgocCkgPT4gW3AsIFwiZHluYW1pYy1ibG9ja1wiXSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGFkZE92ZXJyaWRlRXhwcmVzc2lvbihcbiAgICAgICAgICB2YXJOYW1lLFxuICAgICAgICAgIHBhdGguc3Vic3RyaW5nKDEpLCAvLyBUaGUgcGF0aCBzdGFydHMgd2l0aCBhIGRvdCB0aGF0IHdlIGRvbid0IHdhbnRcbiAgICAgICAgICBhd2FpdCB2YWx1ZVRvVHMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnNjb3BlLFxuICAgICAgICAgICAgICB3aXRoaW5PdmVycmlkZUV4cHJlc3Npb246IHRydWUsXG4gICAgICAgICAgICAgIHNjb3BlZFZhcmlhYmxlczogc2NvcGVkVmFyaWFibGVzSW5QYXRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZm9yX2VhY2gsXG4gICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJwYXRoLWZvci1keW5hbWljLWJsb2Nrcy1jYW4tYmUtaWdub3JlZFwiLFxuICAgICAgICAgICksXG4gICAgICAgICAgbG9vcENvbW1lbnQsXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApLFxuICApO1xuXG4gIHJldHVybiBleHByZXNzaW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXNFeHByZXNzaW9uKFxuICBzY29wZTogUmVzb3VyY2VTY29wZSxcbiAgdHlwZTogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGNvbmZpZzogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgaXNNb2R1bGVJbXBvcnQ6IGJvb2xlYW4sXG4gIGlzUHJvdmlkZXI6IGJvb2xlYW4sXG4gIHJlZmVyZW5jZT86IFJlZmVyZW5jZSxcbiAgaW1wb3J0ZWQ/OiBJbXBvcnQsXG4pIHtcbiAgY29uc3QgeyBwcm92aWRlcnMsIC4uLm90aGVyT3B0aW9ucyB9ID0gY29uZmlnIGFzIGFueTtcblxuICBjb25zdCBjb25zdHJ1Y3RJZCA9IHVuaXF1ZUlkKHNjb3BlLmNvbnN0cnVjdHMsIG5hbWUpO1xuICBjb25zdCBvdmVycmlkZUlkID0gIWlzUHJvdmlkZXIgJiYgY29uc3RydWN0SWQgIT09IG5hbWU7XG5cbiAgY29uc3QgY29tcGxldGVPYmplY3QgPSBmaWxsV2l0aENvbmZpZ0FjY2Vzc29ycyhzY29wZSwgb3RoZXJPcHRpb25zLCB0eXBlKTtcblxuICBjb25zdCBleHByZXNzaW9uID0gdC5uZXdFeHByZXNzaW9uKFxuICAgIGNvbnN0cnVjdEFzdChzY29wZSwgdHlwZSwgaXNNb2R1bGVJbXBvcnQpLFxuICAgIFtcbiAgICAgIHQudGhpc0V4cHJlc3Npb24oKSxcbiAgICAgIHQuc3RyaW5nTGl0ZXJhbChjb25zdHJ1Y3RJZCksXG5cbiAgICAgIGF3YWl0IHZhbHVlVG9UcyhcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5jb21wbGV0ZU9iamVjdCxcbiAgICAgICAgICBwcm92aWRlcnM6XG4gICAgICAgICAgICBwcm92aWRlcnMgJiYgT2JqZWN0LmtleXMocHJvdmlkZXJzKS5sZW5ndGhcbiAgICAgICAgICAgICAgPyBPYmplY3QuZW50cmllcyhwcm92aWRlcnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgbW9kdWxlQWxpYXM6IGtleSxcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIGAke3R5cGV9YCxcbiAgICAgICAgaXNNb2R1bGVJbXBvcnQsXG4gICAgICApLFxuICAgIF0sXG4gICk7XG5cbiAgY29uc3Qgc3RhdGVtZW50cyA9IFtdO1xuICBjb25zdCB2YXJOYW1lID0gcmVmZXJlbmNlXG4gICAgPyByZWZlcmVuY2VUb1ZhcmlhYmxlTmFtZShzY29wZSwgcmVmZXJlbmNlKVxuICAgIDogdmFyaWFibGVOYW1lKHNjb3BlLCB0eXBlLCBuYW1lKTtcblxuICBpZiAocmVmZXJlbmNlIHx8IG92ZXJyaWRlSWQgfHwgaW1wb3J0ZWQpIHtcbiAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRpb24oXCJjb25zdFwiLCBbXG4gICAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKHQuaWRlbnRpZmllcih2YXJOYW1lKSwgZXhwcmVzc2lvbiksXG4gICAgICBdKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlbWVudHMucHVzaCh0LmV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbikpO1xuICB9XG5cbiAgaWYgKG92ZXJyaWRlSWQpIHtcbiAgICBzdGF0ZW1lbnRzLnB1c2goYWRkT3ZlcnJpZGVMb2dpY2FsSWRFeHByZXNzaW9uKHZhck5hbWUsIG5hbWUpKTtcbiAgfVxuXG4gIGlmIChpbXBvcnRlZCkge1xuICAgIC8vIEFkZHMgbXlWYXIuaW1wb3J0RnJvbShcIm15LWFyblwiKVxuICAgIGNvbnN0IGltcG9ydEV4cHJlc3Npb24gPSB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKHZhck5hbWUpLCB0LmlkZW50aWZpZXIoXCJpbXBvcnRGcm9tXCIpKSxcbiAgICAgICAgW3Quc3RyaW5nTGl0ZXJhbChpbXBvcnRlZC5pZCldLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgaWYgKGltcG9ydGVkLnByb3ZpZGVyKSB7XG4gICAgICB0LmFkZENvbW1lbnQoXG4gICAgICAgIGltcG9ydEV4cHJlc3Npb24sXG4gICAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgICBgVGhpcyBpbXBvcnQgd2FzIGNvbmZpZ3VyZWQgd2l0aCBhIHByb3ZpZGVyLiBDREtUTiBkb2VzIHN1cHBvcnQgdGhpcywgYnV0IHRoZSBjZGt0biBjb252ZXJ0IGNvbW1hbmQgZG9lcyBub3QgeWV0LiBQbGVhc2UgYWRkIHRoZSBwcm92aWRlciByZWZlcmVuY2UgbWFudWFsbHkuIFNlZSBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvcmVzb3VyY2VzI2ltcG9ydGluZy1yZXNvdXJjZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhdGVtZW50cy5wdXNoKGltcG9ydEV4cHJlc3Npb24pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvdXRwdXQoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGtleTogc3RyaW5nLFxuICBfaWQ6IHN0cmluZyxcbiAgaXRlbTogT3V0cHV0LFxuICBfZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgY29uc3QgW3sgdmFsdWUsIGRlc2NyaXB0aW9uLCBzZW5zaXRpdmUgfV0gPSBpdGVtO1xuXG4gIHJldHVybiBhc0V4cHJlc3Npb24oXG4gICAgc2NvcGUsXG4gICAgXCJjZGt0bi5UZXJyYWZvcm1PdXRwdXRcIixcbiAgICBrZXksXG4gICAge1xuICAgICAgdmFsdWUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHNlbnNpdGl2ZSxcbiAgICB9LFxuICAgIGZhbHNlLFxuICAgIGZhbHNlLFxuICAgIHVuZGVmaW5lZCxcbiAgICB1bmRlZmluZWQsXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2YXJpYWJsZVR5cGVUb0FzdChcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgdHlwZTogc3RyaW5nLFxuKTogUHJvbWlzZTx0LkV4cHJlc3Npb24+IHtcbiAgY29uc3QgYWRkVmFyaWFibGVUeXBlVG9JbXBvcnRzID0gKCkgPT5cbiAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVmFyaWFibGVUeXBlXCIsXG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIHBhcnNlZFR5cGVUb0FzdCh0eXBlOiB0ZXguRXhwcmVzc2lvblR5cGUpOiB0LkV4cHJlc3Npb24ge1xuICAgIGlmICh0ZXguaXNTY29wZVRyYXZlcnNhbEV4cHJlc3Npb24odHlwZSkpIHtcbiAgICAgIGFkZFZhcmlhYmxlVHlwZVRvSW1wb3J0cygpO1xuICAgICAgc3dpdGNoICh0eXBlLm1ldGEudmFsdWUpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIHJldHVybiB0LmlkZW50aWZpZXIoXCJWYXJpYWJsZVR5cGUuU1RSSU5HXCIpO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgcmV0dXJuIHQuaWRlbnRpZmllcihcIlZhcmlhYmxlVHlwZS5OVU1CRVJcIik7XG4gICAgICAgIGNhc2UgXCJib29sXCI6XG4gICAgICAgICAgcmV0dXJuIHQuaWRlbnRpZmllcihcIlZhcmlhYmxlVHlwZS5CT09MXCIpO1xuICAgICAgICBjYXNlIFwiYW55XCI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHQuaWRlbnRpZmllcihcIlZhcmlhYmxlVHlwZS5BTllcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleC5pc0Z1bmN0aW9uQ2FsbEV4cHJlc3Npb24odHlwZSkpIHtcbiAgICAgIGFkZFZhcmlhYmxlVHlwZVRvSW1wb3J0cygpO1xuICAgICAgc3dpdGNoICh0eXBlLm1ldGEubmFtZSkge1xuICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICBjYXNlIFwic2V0XCI6XG4gICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgY2FzZSBcInR1cGxlXCI6XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihgVmFyaWFibGVUeXBlLiR7dHlwZS5tZXRhLm5hbWV9YCksXG4gICAgICAgICAgICB0eXBlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHBhcnNlZFR5cGVUb0FzdChjaGlsZCkpLFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleC5pc09iamVjdEV4cHJlc3Npb24odHlwZSkpIHtcbiAgICAgIHJldHVybiB0Lm9iamVjdEV4cHJlc3Npb24oXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHR5cGUubWV0YS5pdGVtcykubWFwKChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICAgIHQuc3RyaW5nTGl0ZXJhbChrZXkpLFxuICAgICAgICAgICAgLy8gVGhpcyBkb2VzIG5vdCBkZWFsIHdpdGggY29tcGxleCB0eXBlcyBuZXN0ZWQgd2l0aGluIG9iamVjdHNcbiAgICAgICAgICAgIC8vIElmIHN1Y2ggYSB0eXBlIGlzIGZvdW5kIGl0IHdpbGwgcmVzdWx0IGluIGFuIEFueSB0eXBlXG4gICAgICAgICAgICAvLyBlLmcuIHsgZm9vOiBsaXN0KHN0cmluZykgfSB3aWxsIHJlc3VsdCBpbiB7IGZvbzogYW55IH1cbiAgICAgICAgICAgIHBhcnNlZFR5cGVUb0FzdCh7XG4gICAgICAgICAgICAgIHR5cGU6IFwic2NvcGVUcmF2ZXJzYWxcIixcbiAgICAgICAgICAgICAgbWV0YTogeyB2YWx1ZSB9LFxuICAgICAgICAgICAgfSBhcyBhbnkpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGFkZFZhcmlhYmxlVHlwZVRvSW1wb3J0cygpO1xuICAgIHJldHVybiB0LmlkZW50aWZpZXIoXCJWYXJpYWJsZVR5cGUuQU5ZXCIpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZFR5cGVUb0FzdChhd2FpdCBleHByZXNzaW9uQXN0KHR5cGUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhcmlhYmxlKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBrZXk6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgaXRlbTogVmFyaWFibGUsXG4gIGdyYXBoOiBEaXJlY3RlZEdyYXBoLFxuKSB7XG4gIGNvbnN0IFt7IHR5cGUsIC4uLnByb3BzIH1dID0gaXRlbTtcblxuICBpZiAoIWdldFJlZmVyZW5jZShncmFwaCwgaWQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIGFzRXhwcmVzc2lvbihcbiAgICBzY29wZSxcbiAgICBpZCxcbiAgICBrZXksXG4gICAgeyAuLi5wcm9wcywgdHlwZTogdHlwZSA/IGF3YWl0IHZhcmlhYmxlVHlwZVRvQXN0KHNjb3BlLCB0eXBlKSA6IHVuZGVmaW5lZCB9LFxuICAgIGZhbHNlLFxuICAgIGZhbHNlLFxuICAgIGdldFJlZmVyZW5jZShncmFwaCwgaWQpLFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvY2FsKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBrZXk6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgaXRlbTogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pOiBQcm9taXNlPHQuVmFyaWFibGVEZWNsYXJhdGlvbltdPiB7XG4gIGxvZ2dlci5kZWJ1ZyhgSW5pdGlhbGl6aW5nIGxvY2FsIHJlc291cmNlICR7a2V5fSB3aXRoIGlkICR7aWR9YCk7XG4gIGlmICghZ2V0UmVmZXJlbmNlKGdyYXBoLCBpZCkpIHtcbiAgICBsb2dnZXIuZGVidWcoYE5vIHJlZmVyZW5jZSBmb3VuZCBmb3IgJHtrZXl9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbXG4gICAgdC52YXJpYWJsZURlY2xhcmF0aW9uKFwiY29uc3RcIiwgW1xuICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoXG4gICAgICAgIHQuaWRlbnRpZmllcih2YXJpYWJsZU5hbWUoc2NvcGUsIFwibG9jYWxcIiwga2V5KSksXG4gICAgICAgIGF3YWl0IHZhbHVlVG9UcyhzY29wZSwgaXRlbSwgXCJwYXRoLWZvci1sb2NhbC1ibG9ja3MtY2FuLWJlLWlnbm9yZWRcIiksXG4gICAgICApLFxuICAgIF0pLFxuICBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbW9kdWxlcyhcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAga2V5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IE1vZHVsZSxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgY29uc3QgW3sgc291cmNlLCB2ZXJzaW9uOiBfdmVyc2lvbiwgLi4ucHJvcHMgfV0gPSBpdGVtO1xuXG4gIGNvbnN0IG1vZHVsZUNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChzb3VyY2UpO1xuXG4gIHJldHVybiBhc0V4cHJlc3Npb24oXG4gICAgc2NvcGUsXG4gICAgbW9kdWxlQ29uc3RyYWludC5jbGFzc05hbWUsXG4gICAga2V5LFxuICAgIHByb3BzLFxuICAgIHRydWUsXG4gICAgZmFsc2UsXG4gICAgZ2V0UmVmZXJlbmNlKGdyYXBoLCBpZCksXG4gICAgdW5kZWZpbmVkLFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0cyhcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgX2lkOiBzdHJpbmcsXG4gIGl0ZW06IEltcG9ydCxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgLy8gTW92ZSBmcm9tICR7YXdzX2luc3RhbmNlLmV4YW1wbGV9IHRvIGF3c19pbnN0YW5jZS5leGFtcGxlXG4gIGNvbnN0IHRhcmdldCA9XG4gICAgaXRlbS50by5zdGFydHNXaXRoKFwiJHtcIikgJiYgaXRlbS50by5lbmRzV2l0aChcIn1cIilcbiAgICAgID8gaXRlbS50by5zdWJzdHJpbmcoMiwgaXRlbS50by5sZW5ndGggLSAxKVxuICAgICAgOiBpdGVtLnRvO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBpbXBvcnQgZ29lcyBpbnRvIGEgbW9kdWxlXG4gIGlmICh0YXJnZXQuc3RhcnRzV2l0aChcIm1vZHVsZS5cIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdC5hZGRDb21tZW50KFxuICAgICAgICB0LmVtcHR5U3RhdGVtZW50KCksXG4gICAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgICBgQ0RLVE4gZG9lcyBub3Qgc3VwcG9ydCBpbXBvcnRzIGludG8gbW9kdWxlcyB5ZXQsIHBsZWFzZSByZW1vdmUgdGhlIGltcG9ydCBibG9jayBpbXBvcnRpbmcgJHtpdGVtLmlkfSBpbnRvICR7dGFyZ2V0fSBmcm9tIHlvdXIgY29uZmlndXJhdGlvbmAsXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICAvLyBXZSBub3cga25vdyB0aGF0IHRoZSBpbXBvcnQgZ29lcyBpbnRvIGEgcmVzb3VyY2UsIGUuZy4gYXdzX2luc3RhbmNlLmV4YW1wbGVcbiAgY29uc3QgW3Jlc291cmNlVHlwZUlkZW50aWZpZXIsIHJlc291cmNlTmFtZV0gPSB0YXJnZXQuc3BsaXQoXCIuXCIpO1xuICBpZiAocmVzb3VyY2VOYW1lLmluY2x1ZGVzKFwiW1wiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB0LmFkZENvbW1lbnQoXG4gICAgICAgIHQuZW1wdHlTdGF0ZW1lbnQoKSxcbiAgICAgICAgXCJsZWFkaW5nXCIsXG4gICAgICAgIGBDREtUTiBkb2VzIG5vdCBzdXBwb3J0IGltcG9ydHMgaW50byByZXNvdXJjZXMgd2l0aCBjb3VudCBvciBmb3JfZWFjaCB5ZXQsIHBsZWFzZSByZW1vdmUgdGhlIGltcG9ydCBibG9jayBpbXBvcnRpbmcgJHtpdGVtLmlkfSBpbnRvICR7dGFyZ2V0fSBmcm9tIHlvdXIgY29uZmlndXJhdGlvbmAsXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZXhpc3RpbmcgcmVzb3VyY2UgY29uZmlnIHdpdGggdGhlIGdpdmVuIG5hbWVcbiAgaWYgKGdyYXBoLmhhc05vZGUodGFyZ2V0KSkge1xuICAgIC8vIFdlIHdpbGwgaGFuZGxlIHRoaXMgY2FzZSBpbiB0aGUgcmVzb3VyY2UgZnVuY3Rpb25cbiAgICAvLyBzbyB3ZSBjYW4gc2tpcCBvdmVyIGl0XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgW3Byb3ZpZGVyLCAuLi5yZXNvdXJjZVR5cGVOYW1lUGFydHNdID1cbiAgICByZXNvdXJjZVR5cGVJZGVudGlmaWVyLnNwbGl0KFwiX1wiKTtcblxuICBjb25zdCBjb25zdHJ1Y3RJZCA9IHVuaXF1ZUlkKHNjb3BlLmNvbnN0cnVjdHMsIGNhbWVsQ2FzZShyZXNvdXJjZU5hbWUpKTtcbiAgY29uc3QgY29uc3RydWN0Q2xhc3MgPSBjb25zdHJ1Y3RBc3QoXG4gICAgc2NvcGUsXG4gICAgYCR7cHJvdmlkZXJ9LiR7cmVzb3VyY2VUeXBlTmFtZVBhcnRzLmpvaW4oXCJfXCIpfWAsXG4gICAgZmFsc2UsXG4gICk7XG4gIHJldHVybiBbXG4gICAgdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgICAgIGNvbnN0cnVjdENsYXNzLFxuICAgICAgICAgIHQuaWRlbnRpZmllcihcImdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0XCIpLFxuICAgICAgICApLFxuICAgICAgICBbXG4gICAgICAgICAgdC50aGlzRXhwcmVzc2lvbigpLFxuICAgICAgICAgIHQuc3RyaW5nTGl0ZXJhbChjb25zdHJ1Y3RJZCksXG4gICAgICAgICAgdC5zdHJpbmdMaXRlcmFsKGl0ZW0uaWQpLFxuICAgICAgICBdLFxuICAgICAgKSxcbiAgICApLFxuICBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmlkZXIoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGtleTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpdGVtOiBQcm92aWRlclswXSxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgY29uc3QgeyB2ZXJzaW9uOiBfdmVyc2lvbiwgLi4ucHJvcHMgfSA9IGl0ZW07XG5cbiAgY29uc3QgaW1wb3J0S2V5ID0ga2V5ID09PSBcIm51bGxcIiA/IFwiTnVsbFByb3ZpZGVyXCIgOiBrZXk7XG5cbiAgcmV0dXJuIGFzRXhwcmVzc2lvbihcbiAgICBzY29wZSxcbiAgICBgJHtpbXBvcnRLZXl9LiR7cGFzY2FsQ2FzZShrZXkpfVByb3ZpZGVyYCxcbiAgICBrZXksXG4gICAgcHJvcHMsXG4gICAgZmFsc2UsXG4gICAgdHJ1ZSxcbiAgICBnZXRSZWZlcmVuY2UoZ3JhcGgsIGlkKSxcbiAgICB1bmRlZmluZWQsXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBjZGt0ZkltcG9ydCA9IHRlbXBsYXRlKFxuICBgaW1wb3J0ICogYXMgY2RrdG4gZnJvbSBcImNka3RuXCJgLFxuKSgpIGFzIHQuU3RhdGVtZW50O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0c0ltcG9ydCA9IHRlbXBsYXRlKFxuICBgaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiYCxcbikoKSBhcyB0LlN0YXRlbWVudDtcblxuZXhwb3J0IGNvbnN0IHByb3ZpZGVySW1wb3J0cyA9IChwcm92aWRlcnM6IHN0cmluZ1tdKSA9PlxuICBwcm92aWRlcnMubWFwKChwcm92aWRlck5hbWUpID0+IHtcbiAgICBjb25zdCBwYXJ0cyA9IHByb3ZpZGVyTmFtZS5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgbmFtZSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1sxXSA6IHBhcnRzWzBdO1xuICAgIGNvbnN0IGltcG9ydE5hbWUgPSBuYW1lID09PSBcIm51bGxcIiA/IFwiTnVsbFByb3ZpZGVyXCIgOiBuYW1lO1xuICAgIHJldHVybiB0ZW1wbGF0ZShcbiAgICAgIGBpbXBvcnQgKiBhcyAke2ltcG9ydE5hbWV9IGZyb20gXCIuLy5nZW4vcHJvdmlkZXJzLyR7bmFtZS5yZXBsYWNlKFxuICAgICAgICBcIi4vXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICApfVwiYCxcbiAgICApKCkgYXMgdC5TdGF0ZW1lbnQ7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgbW9kdWxlSW1wb3J0cyA9IChtb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGU+IHwgdW5kZWZpbmVkKSA9PiB7XG4gIGNvbnN0IHVuaXF1ZU1vZHVsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgT2JqZWN0LnZhbHVlcyhtb2R1bGVzIHx8IHt9KS5tYXAoKFttb2R1bGVdKSA9PlxuICAgIHVuaXF1ZU1vZHVsZXMuYWRkKG1vZHVsZS5zb3VyY2UpLFxuICApO1xuXG4gIGNvbnN0IGltcG9ydHM6IHQuU3RhdGVtZW50W10gPSBbXTtcbiAgdW5pcXVlTW9kdWxlcy5mb3JFYWNoKChtKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlQ29uc3RyYWludCA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KG0pO1xuICAgIGltcG9ydHMucHVzaChcbiAgICAgIHRlbXBsYXRlLmFzdChcbiAgICAgICAgYGltcG9ydCAqIGFzICR7bW9kdWxlQ29uc3RyYWludC5jbGFzc05hbWV9IGZyb20gXCIuLy5nZW4vbW9kdWxlcy8ke21vZHVsZUNvbnN0cmFpbnQuZmlsZU5hbWV9XCJgLFxuICAgICAgKSBhcyB0LlN0YXRlbWVudCxcbiAgICApO1xuICB9KTtcbiAgcmV0dXJuIGltcG9ydHM7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuKHN0YXRlbWVudHM6IHQuU3RhdGVtZW50W10pIHtcbiAgbG9nZ2VyLmRlYnVnKGBHZW5lcmF0aW5nIGNvZGUgZm9yICR7SlNPTi5zdHJpbmdpZnkoc3RhdGVtZW50cywgbnVsbCwgMil9YCk7XG4gIGNvbnN0IGNvZGUgPSBwcmV0dGllci5mb3JtYXQoZ2VuZXJhdGUodC5wcm9ncmFtKHN0YXRlbWVudHMpIGFzIGFueSkuY29kZSwge1xuICAgIHBhcnNlcjogXCJiYWJlbFwiLFxuICB9KTtcblxuICBsb2dnZXIuZGVidWcoYEdlbmVyYXRlZCBjb2RlOlxcbiR7Y29kZX1gKTtcblxuICByZXR1cm4gY29kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEltcG9ydEZvckNvZGVDb250YWluZXIoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGNvZGVDb250YWluZXI6IHN0cmluZyxcbikge1xuICBzd2l0Y2ggKGNvZGVDb250YWluZXIpIHtcbiAgICBjYXNlIFwiY29uc3RydWN0cy5Db25zdHJ1Y3RcIjpcbiAgICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgICBwcm92aWRlcjogXCJjb25zdHJ1Y3RzXCIsXG4gICAgICAgIGNvbnN0cnVjdE5hbWU6IFwiQ29uc3RydWN0XCIsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImNka3RuLlRlcnJhZm9ybVN0YWNrXCI6XG4gICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1TdGFja1wiLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJjZGt0Zi5UZXJyYWZvcm1TdGFja1wiOlxuICAgICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICAgIHByb3ZpZGVyOiBcImNka3RmXCIsXG4gICAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVGVycmFmb3JtU3RhY2tcIixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcIlVuc3VwcG9ydGVkIGNvZGUgY29udGFpbmVyOiBcIiArIGNvZGVDb250YWluZXIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwQ29kZUluQ29uc3RydWN0b3IoXG4gIGNvZGVDb250YWluZXI6IHN0cmluZyxcbiAgY29kZTogdC5TdGF0ZW1lbnRbXSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gIGNvbmZpZ1R5cGVOYW1lPzogc3RyaW5nLFxuKTogdC5TdGF0ZW1lbnQge1xuICBsZXQgYmFzZUNvbnRhaW5lckNsYXNzOiB0LklkZW50aWZpZXI7XG4gIHN3aXRjaCAoY29kZUNvbnRhaW5lcikge1xuICAgIGNhc2UgXCJjb25zdHJ1Y3RzLkNvbnN0cnVjdFwiOlxuICAgICAgYmFzZUNvbnRhaW5lckNsYXNzID0gdC5pZGVudGlmaWVyKFwiQ29uc3RydWN0XCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiY2RrdG4uVGVycmFmb3JtU3RhY2tcIjpcbiAgICAgIGJhc2VDb250YWluZXJDbGFzcyA9IHQuaWRlbnRpZmllcihcIlRlcnJhZm9ybVN0YWNrXCIpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcIlVuc3VwcG9ydGVkIGNvZGUgY29udGFpbmVyOiBcIiArIGNvZGVDb250YWluZXIpO1xuICB9XG4gIGlmIChjb25maWdUeXBlTmFtZSkge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5zdGF0ZW1lbnQoXG4gICAgICBgXG4gIGNsYXNzICUlY2xhc3NOYW1lJSUgZXh0ZW5kcyAlJWJhc2UlJSB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBjb25maWc6ICR7Y29uZmlnVHlwZU5hbWV9KSB7XG4gICAgICBzdXBlcihzY29wZSwgbmFtZSk7XG4gICAgICAlJWNvZGUlJVxuICAgIH1cbiAgfVxuYCxcbiAgICAgIHsgc3ludGFjdGljUGxhY2Vob2xkZXJzOiB0cnVlLCBwbHVnaW5zOiBbXCJ0eXBlc2NyaXB0XCJdIH0sXG4gICAgKSh7XG4gICAgICBjb2RlLFxuICAgICAgYmFzZTogYmFzZUNvbnRhaW5lckNsYXNzLFxuICAgICAgY2xhc3NOYW1lOiB0LmlkZW50aWZpZXIoY2xhc3NOYW1lKSxcbiAgICB9KSBhcyB0LlN0YXRlbWVudDtcbiAgfVxuICByZXR1cm4gdGVtcGxhdGUuc3RhdGVtZW50KFxuICAgIGBcbiAgY2xhc3MgJSVjbGFzc05hbWUlJSBleHRlbmRzICUlYmFzZSUlIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKHNjb3BlLCBuYW1lKTtcbiAgICAgICUlY29kZSUlXG4gICAgfVxuICB9XG5gLFxuICAgIHsgc3ludGFjdGljUGxhY2Vob2xkZXJzOiB0cnVlLCBwbHVnaW5zOiBbXCJ0eXBlc2NyaXB0XCJdIH0sXG4gICkoe1xuICAgIGNvZGUsXG4gICAgYmFzZTogYmFzZUNvbnRhaW5lckNsYXNzLFxuICAgIGNsYXNzTmFtZTogdC5pZGVudGlmaWVyKGNsYXNzTmFtZSksXG4gIH0pIGFzIHQuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgcHJvdmlkZXJDb25zdHJ1Y3RJbXBvcnRzID0gKGltcG9ydGFibGU6IEltcG9ydGFibGVDb25zdHJ1Y3RbXSkgPT4ge1xuICBsZXQgcHJvdmlkZXIgPSBpbXBvcnRhYmxlWzBdLnByb3ZpZGVyO1xuICBsZXQgbmFtZXNwYWNlID0gaW1wb3J0YWJsZVswXS5uYW1lc3BhY2U7XG4gIGNvbnN0IG5hbWVzID0gaW1wb3J0YWJsZS5tYXAoKGkpID0+IGkuY29uc3RydWN0TmFtZSk7XG5cbiAgaWYgKHByb3ZpZGVyID09PSBcImNka3RuXCIgfHwgcHJvdmlkZXIgPT09IFwiY29uc3RydWN0c1wiKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlKFxuICAgICAgYGltcG9ydCB7ICR7bmFtZXMuam9pbihcIiwgXCIpfSB9IGZyb20gXCIke3Byb3ZpZGVyfVwiYCxcbiAgICApKCkgYXMgdC5TdGF0ZW1lbnQ7XG4gIH1cblxuICBpZiAobmFtZXNwYWNlKSB7XG4gICAgbmFtZXNwYWNlID0gc25ha2VDYXNlKG5hbWVzcGFjZSkucmVwbGFjZSgvXy9nLCBcIi1cIik7XG4gIH1cblxuICAvLyBTcGVjaWFsIGNhc2VzIHRvIHVuZG8gcHJvdmlkZXIgbmFtZXMgdGhhdCB3ZSBvdmVycmlkZVxuICBpZiAocHJvdmlkZXIgPT09IFwiTnVsbFByb3ZpZGVyXCIpIHtcbiAgICBwcm92aWRlciA9IFwibnVsbFwiO1xuICB9XG5cbiAgcmV0dXJuIHRlbXBsYXRlKFxuICAgIGBpbXBvcnQgeyAke25hbWVzLmpvaW4oXG4gICAgICBcIiwgXCIsXG4gICAgKX0gfSBmcm9tIFwiLi8uZ2VuL3Byb3ZpZGVycy8ke3Byb3ZpZGVyfS8ke25hbWVzcGFjZX1cImAsXG4gICkoKSBhcyB0LlN0YXRlbWVudDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEltcG9ydHMoaW1wb3J0YWJsZXM6IEltcG9ydGFibGVDb25zdHJ1Y3RbXSkge1xuICBjb25zdCBncm91cGVkSW1wb3J0YWJsZXMgPSBpbXBvcnRhYmxlcy5yZWR1Y2UoXG4gICAgKGFjYywgaW1wb3J0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgbnMgPSBpbXBvcnRhYmxlLm5hbWVzcGFjZSB8fCBcIlwiO1xuICAgICAgLy8gRG9pbmcgc29tZSBoYWNreSBvcmRlcmluZyBvZiB0aGUgaW1wb3J0cyB0byBtYWtlIHRoZW0gbG9vayBhIGJpdCBuaWNlclxuICAgICAgY29uc3QgcHJlZml4ID1cbiAgICAgICAgaW1wb3J0YWJsZS5wcm92aWRlciA9PT0gXCJjb25zdHJ1Y3RzXCJcbiAgICAgICAgICA/IFwiMVwiXG4gICAgICAgICAgOiBpbXBvcnRhYmxlLnByb3ZpZGVyID09PSBcImNka3RuXCJcbiAgICAgICAgICAgID8gXCIyXCJcbiAgICAgICAgICAgIDogaW1wb3J0YWJsZS5wcm92aWRlciA9PT0gXCJjZGt0ZlwiXG4gICAgICAgICAgICAgID8gXCIzXCJcbiAgICAgICAgICAgICAgOiBcIjRcIjtcbiAgICAgIGNvbnN0IGdyb3VwTmFtZSA9IGAke3ByZWZpeH0uJHtpbXBvcnRhYmxlLnByb3ZpZGVyfS4ke25zfWA7XG4gICAgICBjb25zdCBmdWxsTmFtZSA9IGAke2ltcG9ydGFibGUucHJvdmlkZXJ9LiR7bnN9LiR7aW1wb3J0YWJsZS5jb25zdHJ1Y3ROYW1lfWA7XG5cbiAgICAgIGlmIChhY2NbZ3JvdXBOYW1lXSkge1xuICAgICAgICBjb25zdCBleGlzdHNBbHJlYWR5ID0gYWNjW2dyb3VwTmFtZV0uc29tZShcbiAgICAgICAgICAoaW1wb3J0YWJsZSkgPT5cbiAgICAgICAgICAgIGAke2ltcG9ydGFibGUucHJvdmlkZXJ9LiR7bnN9LiR7aW1wb3J0YWJsZS5jb25zdHJ1Y3ROYW1lfWAgPT09XG4gICAgICAgICAgICBmdWxsTmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGV4aXN0c0FscmVhZHkpIHtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGFjY1tncm91cE5hbWVdLnB1c2goaW1wb3J0YWJsZSk7XG4gICAgICAgIGFjY1tncm91cE5hbWVdLnNvcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY1tncm91cE5hbWVdID0gW2ltcG9ydGFibGVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAge30gYXMgUmVjb3JkPHN0cmluZywgSW1wb3J0YWJsZUNvbnN0cnVjdFtdPixcbiAgKTtcblxuICBsZXQgY29tbWVudEFkZGVkID0gZmFsc2U7XG4gIGNvbnN0IGNvbnN0cnVjdEltcG9ydHMgPSBPYmplY3Qua2V5cyhncm91cGVkSW1wb3J0YWJsZXMpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW1wb3J0U3RhdGVtZW50ID0gcHJvdmlkZXJDb25zdHJ1Y3RJbXBvcnRzKFxuICAgICAgICBncm91cGVkSW1wb3J0YWJsZXNbZ3JvdXBOYW1lXSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChncm91cE5hbWUuc3RhcnRzV2l0aChcIjQuXCIpICYmICFjb21tZW50QWRkZWQpIHtcbiAgICAgICAgY29tbWVudEFkZGVkID0gdHJ1ZTtcbiAgICAgICAgdC5hZGRDb21tZW50KFxuICAgICAgICAgIGltcG9ydFN0YXRlbWVudCxcbiAgICAgICAgICBcImxlYWRpbmdcIixcbiAgICAgICAgICBgXFxuKiBQcm92aWRlciBiaW5kaW5ncyBhcmUgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgXFxgY2RrdG4gZ2V0XFxgLlxuKiBTZWUgaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3Byb3ZpZGVycyNpbXBvcnQtcHJvdmlkZXJzIGZvciBtb3JlIGRldGFpbHMuXFxuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbXBvcnRTdGF0ZW1lbnQ7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdEltcG9ydHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbmZpZ1R5cGUoXG4gIG5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBBdHRyaWJ1dGVQYXRoPixcbik6IHQuU3RhdGVtZW50IHtcbiAgcmV0dXJuIHQudHNJbnRlcmZhY2VEZWNsYXJhdGlvbihcbiAgICB0LmlkZW50aWZpZXIobmFtZSksXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0LnRzSW50ZXJmYWNlQm9keShcbiAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmZpZykubWFwKChba2V5LCBfdmFsdWVdKSA9PlxuICAgICAgICB0LnRzUHJvcGVydHlTaWduYXR1cmUoXG4gICAgICAgICAgdC5pZGVudGlmaWVyKGtleSksXG4gICAgICAgICAgdC50U1R5cGVBbm5vdGF0aW9uKHQudHNBbnlLZXl3b3JkKCkpLCAvLyBUT0RPOiBUcnkgdG8gbWFrZSB0aGlzIGJldHRlciB0aGFuIGFueVxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApLFxuICApO1xufVxuIl19
|
|
686
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9nZW5lcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVFQSw0REFFQztBQWlLRCxrREF1Q0M7QUFvRkQsNEJBb1FDO0FBcUZELHdCQXVCQztBQUVELDhDQStEQztBQUVELDRCQXVCQztBQUVELHNCQW9CQztBQUVELDBCQXFCQztBQUVELDBCQWtFQztBQUVELDRCQXFCQztBQXlDRCxrQkFTQztBQUVELDhEQTRCQztBQUVELHNEQWtEQztBQTZCRCxvQ0F5REM7QUFFRCxnREFpQkM7QUFwcUNELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsaUVBQXdDO0FBQ3hDLCtEQUF1QztBQUN2QyxnREFBa0M7QUFFbEMsd0RBQWdDO0FBU2hDLG1DQUFrRTtBQVVsRSwrQ0FBOEU7QUFFOUUsNkNBQWtEO0FBQ2xELGtFQUdtQztBQUNuQyx1REFJMkI7QUFDM0IsNENBQTBFO0FBQzFFLDhDQUFnRTtBQUNoRSxxREFBOEU7QUFDOUUsMkNBSXFCO0FBQ3JCLHlDQUEyQztBQUMzQywrQ0FBd0Q7QUFFeEQsU0FBUyxZQUFZLENBQUMsS0FBb0IsRUFBRSxFQUFVO0lBQ3BELGNBQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV6QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekIsY0FBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsU0FBUyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEQsSUFB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QyxDQUFDLENBQUM7SUFFTCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBWSxFQUNaLE1BQXFDO0lBRXJDLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixDQUM3QixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUNsQixTQUFTLEVBQ1QsU0FBUyxFQUNULENBQUMsQ0FBQyxlQUFlLENBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQzNDLENBQUMsQ0FBQyxtQkFBbUIsQ0FDbkIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDakIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUNyQyxDQUNGLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgZ2VuZXJhdGUgZnJvbSBcIkBiYWJlbC9nZW5lcmF0b3JcIjtcbmltcG9ydCB0ZW1wbGF0ZSBmcm9tIFwiQGJhYmVsL3RlbXBsYXRlXCI7XG5pbXBvcnQgKiBhcyB0IGZyb20gXCJAYmFiZWwvdHlwZXNcIjtcbmltcG9ydCB7IERpcmVjdGVkR3JhcGggfSBmcm9tIFwiZ3JhcGhvbG9neVwiO1xuaW1wb3J0IHByZXR0aWVyIGZyb20gXCJwcmV0dGllclwiO1xuXG5pbXBvcnQge1xuICBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLFxuICBQcm9ncmFtU2NvcGUsXG4gIFJlc291cmNlU2NvcGUsXG4gIEltcG9ydGFibGVDb25zdHJ1Y3QsXG4gIEF0dHJpYnV0ZVBhdGgsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGxvZ2dlciwgcGFzY2FsQ2FzZSwgdW5pcXVlSWQgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgUmVzb3VyY2UsXG4gIFRlcnJhZm9ybUNvbmZpZyxcbiAgTW9kdWxlLFxuICBQcm92aWRlcixcbiAgVmFyaWFibGUsXG4gIE91dHB1dCxcbiAgSW1wb3J0LFxufSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcywgZXhwcmVzc2lvbkFzdCB9IGZyb20gXCIuL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBSZWZlcmVuY2UgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZmluZFVzZWRSZWZlcmVuY2VzIH0gZnJvbSBcIi4vcmVmZXJlbmNlc1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCxcbiAgZXNjYXBlQXR0cmlidXRlTmFtZSxcbn0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1nZW5lcmF0b3JcIjtcbmltcG9ydCB7XG4gIGdldFR5cGVBdFBhdGgsXG4gIGlzTWFwQXR0cmlidXRlLFxuICBnZXREZXNpcmVkVHlwZSxcbn0gZnJvbSBcIi4vdGVycmFmb3JtU2NoZW1hXCI7XG5pbXBvcnQgeyBFcnJvcnMsIEF0dHJpYnV0ZVR5cGUsIEJsb2NrVHlwZSwgU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBURkV4cHJlc3Npb25TeW50YXhUcmVlIGFzIHRleCB9IGZyb20gXCJAY2RrdG4vaGNsMmpzb25cIjtcbmltcG9ydCB7IGV4dHJhY3REeW5hbWljQmxvY2tzLCBpc05lc3RlZER5bmFtaWNCbG9jayB9IGZyb20gXCIuL2R5bmFtaWMtYmxvY2tzXCI7XG5pbXBvcnQge1xuICBjb25zdHJ1Y3RBc3QsXG4gIHJlZmVyZW5jZVRvVmFyaWFibGVOYW1lLFxuICB2YXJpYWJsZU5hbWUsXG59IGZyb20gXCIuL3ZhcmlhYmxlc1wiO1xuaW1wb3J0IHsgc25ha2VDYXNlIH0gZnJvbSBcImNka3RuL2xpYi91dGlsXCI7XG5pbXBvcnQgeyBmaWxsV2l0aENvbmZpZ0FjY2Vzc29ycyB9IGZyb20gXCIuL3BhcnRpYWxDb2RlXCI7XG5cbmZ1bmN0aW9uIGdldFJlZmVyZW5jZShncmFwaDogRGlyZWN0ZWRHcmFwaCwgaWQ6IHN0cmluZykge1xuICBsb2dnZXIuZGVidWcoYEZpbmRpbmcgcmVmZXJlbmNlIGZvciAke2lkfWApO1xuICBjb25zdCBuZWlnaGJvcnMgPSBncmFwaC5vdXROZWlnaGJvcnMoaWQpO1xuXG4gIGlmIChuZWlnaGJvcnMubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgbmVpZ2hib3JzICR7bmVpZ2hib3JzfSBmb3IgJHtpZH1gKTtcbiAgICBjb25zdCBlZGdlID0gZ3JhcGguZGlyZWN0ZWRFZGdlKGlkLCBuZWlnaGJvcnNbMF0pO1xuXG4gICAgaWYgKGVkZ2UpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgZmlyc3QgZWRnZSAke2VkZ2V9IGZvciAke2lkfWApO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUmV0dXJuaW5nIHJlZmVyZW5jZSAke2dyYXBoLmdldEVkZ2VBdHRyaWJ1dGUoZWRnZSwgXCJyZWZcIil9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZ3JhcGguZ2V0RWRnZUF0dHJpYnV0ZShlZGdlLCBcInJlZlwiKSBhcyBSZWZlcmVuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgbm8gZWRnZSBmb3IgJHtpZH1gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF0dHJpYnV0ZU5hbWVUb0Nka3RmTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGVzY2FwZUF0dHJpYnV0ZU5hbWUoY2FtZWxDYXNlKG5hbWUpKTtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbHVlVG9UcyA9IGFzeW5jIChcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIGl0ZW06IFRlcnJhZm9ybVJlc291cmNlQmxvY2ssXG4gIHBhdGg6IHN0cmluZyxcbiAgaXNNb2R1bGUgPSBmYWxzZSxcbik6IFByb21pc2U8dC5FeHByZXNzaW9uPiA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIGl0ZW0pIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICBpZiAoXG4gICAgICAgIChhd2FpdCBmaW5kVXNlZFJlZmVyZW5jZXMoc2NvcGUubm9kZUlkcywgaXRlbSkpLnNvbWUoKHJlZikgPT5cbiAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgocmVmLnJlZmVyZW5jZWUuaWQpLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHQuc3RyaW5nTGl0ZXJhbChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhzY29wZSwgYFwiJHtpdGVtfVwiYCwgKCkgPT5cbiAgICAgICAgZ2V0RGVzaXJlZFR5cGUoc2NvcGUsIHBhdGgpLFxuICAgICAgKTtcblxuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKHNjb3BlLCBgJHtpdGVtfWAsICgpID0+XG4gICAgICAgIGdldERlc2lyZWRUeXBlKHNjb3BlLCBwYXRoKSxcbiAgICAgICk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhzY29wZSwgYCR7aXRlbX1gLCAoKSA9PlxuICAgICAgICBnZXREZXNpcmVkVHlwZShzY29wZSwgcGF0aCksXG4gICAgICApO1xuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0Lm51bGxMaXRlcmFsKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBpdGVyYXRvcnMgYW5kIGR5bmFtaWMgYmxvY2tzIHdlIHB1dCB0aGUgY29ycmVjdCBUUyBleHByZXNzaW9uIGluIHRoZSBjb25maWcgYWhlYWQgb2YgdGltZVxuICAgICAgaWYgKHQuaXNOb2RlKGl0ZW0pICYmIHQuaXNFeHByZXNzaW9uKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gZ2V0VHlwZUF0UGF0aChzY29wZS5wcm92aWRlclNjaGVtYSwgcGF0aCk7XG5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZFJlbW92ZUFycmF5QmFzZWRPblR5cGUoXG4gICAgICAgIGF0dHJpYnV0ZVR5cGU6IFNjaGVtYSB8IEF0dHJpYnV0ZVR5cGUgfCBCbG9ja1R5cGUgfCBudWxsLFxuICAgICAgKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghYXR0cmlidXRlVHlwZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhlIGRlZmF1bHQgYXNzdW1wdGlvbiBpcyB3ZSBuZWVkIHRoZSBhcnJheVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWFwcyBhbmQgb2JqZWN0IGRvbid0IG5lZWQgdG8gYmUgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgICAgICBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVUeXBlKSAmJlxuICAgICAgICAgIChhdHRyaWJ1dGVUeXBlWzBdID09PSBcIm1hcFwiIHx8IGF0dHJpYnV0ZVR5cGVbMF0gPT09IFwib2JqZWN0XCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgaXQncyBhIGJsb2NrIHR5cGUgd2l0aCBtYXhfaXRlbXMgPSAxIHdlIGRvbid0IG5lZWQgdG8gd3JhcCBpdCBpbiBhbiBhcnJheVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGF0dHJpYnV0ZVR5cGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICBcIm1heF9pdGVtc1wiIGluIGF0dHJpYnV0ZVR5cGUgJiZcbiAgICAgICAgICBhdHRyaWJ1dGVUeXBlLm1heF9pdGVtcyA9PT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW53cmFwcGVkSXRlbSA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbSkgJiZcbiAgICAgICAgKHNob3VsZFJlbW92ZUFycmF5QmFzZWRPblR5cGUoYXR0cmlidXRlVHlwZSkgfHxcbiAgICAgICAgICBwYXRoLmVuZHNXaXRoKFwibGlmZWN5Y2xlXCIpIHx8XG4gICAgICAgICAgcGF0aC5lbmRzV2l0aChcImNvbm5lY3Rpb25cIikpXG4gICAgICAgICAgPyBpdGVtWzBdXG4gICAgICAgICAgOiBpdGVtO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1bndyYXBwZWRJdGVtKSkge1xuICAgICAgICByZXR1cm4gdC5hcnJheUV4cHJlc3Npb24oXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICB1bndyYXBwZWRJdGVtLm1hcCgoaSkgPT4gdmFsdWVUb1RzKHNjb3BlLCBpLCBgJHtwYXRofS5bXWApKSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdC5vYmplY3RFeHByZXNzaW9uKFxuICAgICAgICAoXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh1bndyYXBwZWRJdGVtKS5tYXAoYXN5bmMgKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcImR5bmFtaWNcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZm9yX2VhY2g6IF9mb3JfZWFjaCwgLi4ub3RoZXJzIH0gPSB2YWx1ZSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgY29uc3QgZHluYW1pY1JlZiA9IE9iamVjdC5rZXlzKG90aGVycylbMF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHQub2JqZWN0UHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICB0LmlkZW50aWZpZXIoXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLndpdGhpbk92ZXJyaWRlRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICAgID8gZHluYW1pY1JlZlxuICAgICAgICAgICAgICAgICAgICAgIDogZXNjYXBlQXR0cmlidXRlTmFtZShjYW1lbENhc2UoZHluYW1pY1JlZikpLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHQuYXJyYXlFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1QYXRoID0gYCR7cGF0aH0uJHtrZXl9YDtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbUF0dHJpYnV0ZVR5cGUgPSBnZXRUeXBlQXRQYXRoKFxuICAgICAgICAgICAgICAgIHNjb3BlLnByb3ZpZGVyU2NoZW1hLFxuICAgICAgICAgICAgICAgIGl0ZW1QYXRoLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHR5cGVNZXRhZGF0YSA9IGdldFR5cGVBdFBhdGgoXG4gICAgICAgICAgICAgICAgc2NvcGUucHJvdmlkZXJTY2hlbWEsXG4gICAgICAgICAgICAgICAgaXRlbVBhdGgsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgY29uc3QgaXNTaW5nbGVJdGVtQmxvY2sgPVxuICAgICAgICAgICAgICAgIHR5cGVNZXRhZGF0YSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0eXBlTWV0YWRhdGEgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodHlwZU1ldGFkYXRhLCBcIm1heF9pdGVtc1wiKVxuICAgICAgICAgICAgICAgICAgPyAodHlwZU1ldGFkYXRhIGFzIGFueSkubWF4X2l0ZW1zID09PSAxXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHNob3VsZEJlQXJyYXkgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICEodC5pc05vZGUodmFsdWUpICYmIHQuaXNFeHByZXNzaW9uKHZhbHVlKSkgJiZcbiAgICAgICAgICAgICAgICAhaXNTaW5nbGVJdGVtQmxvY2sgJiZcbiAgICAgICAgICAgICAgICAvLyBNYXAgdHlwZSBhdHRyaWJ1dGVzIG11c3Qgbm90IGJlIHdyYXBwZWQgaW4gYXJyYXlzXG4gICAgICAgICAgICAgICAgIWlzTWFwQXR0cmlidXRlKGl0ZW1BdHRyaWJ1dGVUeXBlKSAmJlxuICAgICAgICAgICAgICAgIGtleSAhPT0gXCJ0YWdzXCIgJiZcbiAgICAgICAgICAgICAgICBrZXkgIT09IFwiZm9yRWFjaFwiICYmXG4gICAgICAgICAgICAgICAga2V5ICE9PSBcImxpZmVjeWNsZVwiO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGtlZXBLZXlOYW1lOiBib29sZWFuID1cbiAgICAgICAgICAgICAgICAhaXNNb2R1bGUgJiZcbiAgICAgICAgICAgICAgICBrZXkgIT09IFwiZGVwZW5kc19vblwiICYmXG4gICAgICAgICAgICAgICAgIXBhdGguaW5jbHVkZXMoXCJsaWZlY3ljbGVcIikgJiZcbiAgICAgICAgICAgICAgICAoa2V5ID09PSBcImZvcl9lYWNoXCIgfHxcbiAgICAgICAgICAgICAgICAgICF0eXBlTWV0YWRhdGEgfHxcbiAgICAgICAgICAgICAgICAgIGlzTWFwQXR0cmlidXRlKGF0dHJpYnV0ZVR5cGUpKSAmJlxuICAgICAgICAgICAgICAgICEocGF0aC5zdGFydHNXaXRoKFwidmFyLlwiKSAmJiBwYXRoLmluY2x1ZGVzKFwidmFsaWRhdGlvblwiKSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHQub2JqZWN0UHJvcGVydHkoXG4gICAgICAgICAgICAgICAgdC5zdHJpbmdMaXRlcmFsKFxuICAgICAgICAgICAgICAgICAga2VlcEtleU5hbWUgPyBrZXkgOiBhdHRyaWJ1dGVOYW1lVG9DZGt0Zk5hbWUoa2V5KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHNob3VsZEJlQXJyYXlcbiAgICAgICAgICAgICAgICAgID8gdC5hcnJheUV4cHJlc3Npb24oW2F3YWl0IHZhbHVlVG9UcyhzY29wZSwgdmFsdWUsIGl0ZW1QYXRoKV0pXG4gICAgICAgICAgICAgICAgICA6IGF3YWl0IHZhbHVlVG9UcyhzY29wZSwgdmFsdWUsIGl0ZW1QYXRoKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgKS5maWx0ZXIoKGV4cHIpID0+IGV4cHIgIT09IHVuZGVmaW5lZCkgYXMgdC5PYmplY3RQcm9wZXJ0eVtdLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdHlwZSBcIiArIGl0ZW0pO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJhY2tlbmRUb0V4cHJlc3Npb24oXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIHRmOiBUZXJyYWZvcm1Db25maWdbXCJiYWNrZW5kXCJdLFxuKTogUHJvbWlzZTx0LlN0YXRlbWVudFtdPiB7XG4gIHJldHVybiAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyh0ZiB8fCB7fSkubWFwKGFzeW5jIChbdHlwZSwgW2NvbmZpZ11dKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmRJZGVudGlmaWVyID0gcGFzY2FsQ2FzZShgJHt0eXBlfUJhY2tlbmRgKTtcbiAgICAgICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICAgICAgY29uc3RydWN0TmFtZTogYmFja2VuZElkZW50aWZpZXIsXG4gICAgICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgICAgICAgdC5uZXdFeHByZXNzaW9uKHQuaWRlbnRpZmllcihiYWNrZW5kSWRlbnRpZmllciksIFtcbiAgICAgICAgICAgIHQudGhpc0V4cHJlc3Npb24oKSxcbiAgICAgICAgICAgIHQub2JqZWN0RXhwcmVzc2lvbihcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY29uZmlnKS5tYXAoYXN5bmMgKFtwcm9wZXJ0eSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgICAgICAgICB0Lm9iamVjdFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAgIHQuaWRlbnRpZmllcihjYW1lbENhc2UocHJvcGVydHkpKSxcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB2YWx1ZVRvVHMoXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXRoLWZvci1iYWNrZW5kcy1jYW4tYmUtaWdub3JlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGNhcnJ5LCBpdGVtKSA9PiBbLi4uY2FycnksIGl0ZW1dLFxuICAgICAgICAgICAgICAgIFtdIGFzIHQuT2JqZWN0UHJvcGVydHlbXSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApXG4gICkucmVkdWNlKChjYXJyeSwgaXRlbSkgPT4gWy4uLmNhcnJ5LCBpdGVtXSwgW10gYXMgdC5TdGF0ZW1lbnRbXSk7XG59XG5cbmZ1bmN0aW9uIGFkZE92ZXJyaWRlRXhwcmVzc2lvbihcbiAgdmFyaWFibGU6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICB2YWx1ZTogdC5FeHByZXNzaW9uLFxuICBleHBsYW5hdG9yeUNvbW1lbnQ/OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgYXN0ID0gdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKHZhcmlhYmxlKSwgdC5pZGVudGlmaWVyKFwiYWRkT3ZlcnJpZGVcIikpLFxuICAgICAgW3Quc3RyaW5nTGl0ZXJhbChwYXRoKSwgdmFsdWVdLFxuICAgICksXG4gICk7XG5cbiAgaWYgKGV4cGxhbmF0b3J5Q29tbWVudCkge1xuICAgIHQuYWRkQ29tbWVudChhc3QsIFwibGVhZGluZ1wiLCBleHBsYW5hdG9yeUNvbW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGFzdDtcbn1cblxuZnVuY3Rpb24gYWRkT3ZlcnJpZGVMb2dpY2FsSWRFeHByZXNzaW9uKHZhcmlhYmxlOiBzdHJpbmcsIGxvZ2ljYWxJZDogc3RyaW5nKSB7XG4gIGNvbnN0IGFzdCA9IHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgICB0LmlkZW50aWZpZXIodmFyaWFibGUpLFxuICAgICAgICB0LmlkZW50aWZpZXIoXCJvdmVycmlkZUxvZ2ljYWxJZFwiKSxcbiAgICAgICksXG4gICAgICBbdC5zdHJpbmdMaXRlcmFsKGxvZ2ljYWxJZCldLFxuICAgICksXG4gICk7XG5cbiAgdC5hZGRDb21tZW50KFxuICAgIGFzdCxcbiAgICBcImxlYWRpbmdcIixcbiAgICBcIlRoaXMgYWxsb3dzIHRoZSBUZXJyYWZvcm0gcmVzb3VyY2UgbmFtZSB0byBtYXRjaCB0aGUgb3JpZ2luYWwgbmFtZS4gWW91IGNhbiByZW1vdmUgdGhlIGNhbGwgaWYgeW91IGRvbid0IG5lZWQgdGhlbSB0byBtYXRjaC5cIixcbiAgKTtcblxuICByZXR1cm4gYXN0O1xufVxuXG5mdW5jdGlvbiBnZXRSZW1vdGVTdGF0ZVR5cGUoaXRlbTogUmVzb3VyY2UpIHtcbiAgY29uc3QgYmFja2VuZFJlY29yZCA9IGl0ZW0uZmluZCgodmFsKSA9PiB2YWwuYmFja2VuZCk7XG4gIGlmIChiYWNrZW5kUmVjb3JkKSB7XG4gICAgY29uc3QgYmFja2VuZCA9IGJhY2tlbmRSZWNvcmQuYmFja2VuZDtcbiAgICBzd2l0Y2ggKGJhY2tlbmQpIHtcbiAgICAgIGNhc2UgXCJyZW1vdGVcIjpcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICBjYXNlIFwiZXRjZHYzXCI6XG4gICAgICAgIHJldHVybiBcIl9ldGNkX3YzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYF8ke2JhY2tlbmR9YDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb3VyY2VUeXBlKHByb3ZpZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZ1tdLCBpdGVtOiBSZXNvdXJjZSkge1xuICBzd2l0Y2ggKHByb3ZpZGVyKSB7XG4gICAgY2FzZSBcImRhdGEudGVycmFmb3JtXCI6XG4gICAgICByZXR1cm4gYGNka3RuLmRhdGFfdGVycmFmb3JtXyR7bmFtZS5qb2luKFwiX1wiKX0ke2dldFJlbW90ZVN0YXRlVHlwZShcbiAgICAgICAgaXRlbSxcbiAgICAgICl9YDtcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgcmV0dXJuIGBOdWxsUHJvdmlkZXIuJHtuYW1lLmpvaW4oXCJfXCIpfWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBgJHtwcm92aWRlcn0uJHtuYW1lLmpvaW4oXCJfXCIpfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwQ29uZmlnUGVyUmVzb3VyY2VUeXBlKHJlc291cmNlOiBzdHJpbmcsIGl0ZW06IFJlc291cmNlWzBdKSB7XG4gIC8vIEJhY2tlbmRzIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgQVBJXG4gIGlmIChyZXNvdXJjZS5zdGFydHNXaXRoKFwiY2RrdG4uZGF0YV90ZXJyYWZvcm1fXCIpKSB7XG4gICAgcmV0dXJuIGl0ZW0uY29uZmlnO1xuICB9XG4gIHJldHVybiBpdGVtO1xufVxuXG5jb25zdCBsb29wQ29tbWVudCA9IGBJbiBtb3N0IGNhc2VzIGxvb3BzIHNob3VsZCBiZSBoYW5kbGVkIGluIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBjb250ZXh0IGFuZFxubm90IGluc2lkZSBvZiB0aGUgVGVycmFmb3JtIGNvbnRleHQuIElmIHlvdSBhcmUgbG9vcGluZyBvdmVyIHNvbWV0aGluZyBleHRlcm5hbCwgZS5nLiBhIHZhcmlhYmxlIG9yIGEgZmlsZSBpbnB1dFxueW91IHNob3VsZCBjb25zaWRlciB1c2luZyBhIGZvciBsb29wLiBJZiB5b3UgYXJlIGxvb3Bpbmcgb3ZlciBzb21ldGhpbmcgb25seSBrbm93biB0byBUZXJyYWZvcm0sIGUuZy4gYSByZXN1bHQgb2YgYSBkYXRhIHNvdXJjZVxueW91IG5lZWQgdG8ga2VlcCB0aGlzIGxpa2UgaXQgaXMuYDtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvdXJjZShcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgdHlwZTogc3RyaW5nLFxuICBrZXk6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgaXRlbTogUmVzb3VyY2UsXG4gIGdyYXBoOiBEaXJlY3RlZEdyYXBoLFxuKTogUHJvbWlzZTx0LlN0YXRlbWVudFtdPiB7XG4gIGNvbnN0IFtwcm92aWRlciwgLi4ubmFtZV0gPSB0eXBlLnNwbGl0KFwiX1wiKTtcbiAgY29uc3QgcmVzb3VyY2UgPSByZXNvdXJjZVR5cGUocHJvdmlkZXIsIG5hbWUsIGl0ZW0pO1xuXG4gIGlmICghcHJvdmlkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSByZXNvdXJjZSB0eXBlICcke3R5cGV9J2ApO1xuICB9XG4gIGxldCBleHByZXNzaW9uczogdC5TdGF0ZW1lbnRbXSA9IFtdO1xuICBjb25zdCB2YXJOYW1lID0gdmFyaWFibGVOYW1lKHNjb3BlLCByZXNvdXJjZSwga2V5KTtcbiAgY29uc3QgeyBmb3JfZWFjaCwgY291bnQsIHByb3Zpc2lvbmVyLCAuLi5jb25maWcgfSA9IGl0ZW1bMF07XG4gIGNvbnN0IG1hcHBlZENvbmZpZyA9IG1hcENvbmZpZ1BlclJlc291cmNlVHlwZShyZXNvdXJjZSwgY29uZmlnKTtcblxuICBsZXQgZm9yRWFjaEl0ZXJhdG9yTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoZm9yX2VhY2gpIHtcbiAgICBmb3JFYWNoSXRlcmF0b3JOYW1lID0gdmFyaWFibGVOYW1lKFxuICAgICAgc2NvcGUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGAke2tleX1fZm9yX2VhY2hfaXRlcmF0b3JgLFxuICAgICk7XG4gICAgY29uc3QgcmVmZXJlbmNlQXN0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBgXCIke2Zvcl9lYWNofVwiYCxcbiAgICAgICgpID0+IFtcImxpc3RcIiwgXCJkeW5hbWljXCJdLFxuICAgICk7XG5cbiAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRlcnJhZm9ybUl0ZXJhdG9yXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHQudmFyaWFibGVEZWNsYXJhdGlvbihcImNvbnN0XCIsIFtcbiAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKFxuICAgICAgICB0LmlkZW50aWZpZXIoZm9yRWFjaEl0ZXJhdG9yTmFtZSksXG4gICAgICAgIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKFwiVGVycmFmb3JtSXRlcmF0b3JcIiksXG4gICAgICAgICAgICB0LmlkZW50aWZpZXIoXCJmcm9tTGlzdFwiKSxcbiAgICAgICAgICApLFxuXG4gICAgICAgICAgW3JlZmVyZW5jZUFzdF0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgIF0pO1xuICAgIHQuYWRkQ29tbWVudChpdGVyYXRvciwgXCJsZWFkaW5nXCIsIGxvb3BDb21tZW50KTtcbiAgICBleHByZXNzaW9ucy5wdXNoKGl0ZXJhdG9yKTtcblxuICAgIG1hcHBlZENvbmZpZy5mb3JFYWNoID0gdC5pZGVudGlmaWVyKGZvckVhY2hJdGVyYXRvck5hbWUpO1xuICB9XG5cbiAgbGV0IGNvdW50SXRlcmF0b3JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChjb3VudCkge1xuICAgIGNvdW50SXRlcmF0b3JOYW1lID0gdmFyaWFibGVOYW1lKHNjb3BlLCByZXNvdXJjZSwgYCR7a2V5fV9jb3VudGApO1xuICAgIGNvbnN0IHJlZmVyZW5jZUFzdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgYFwiJHtjb3VudH1cImAsXG4gICAgICAoKSA9PiBcIm51bWJlclwiLFxuICAgICk7XG5cbiAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRlcnJhZm9ybUNvdW50XCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHQudmFyaWFibGVEZWNsYXJhdGlvbihcImNvbnN0XCIsIFtcbiAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKFxuICAgICAgICB0LmlkZW50aWZpZXIoY291bnRJdGVyYXRvck5hbWUpLFxuICAgICAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcIlRlcnJhZm9ybUNvdW50XCIpLFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKFwib2ZcIiksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBbcmVmZXJlbmNlQXN0XSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgXSk7XG4gICAgdC5hZGRDb21tZW50KGl0ZXJhdG9yLCBcImxlYWRpbmdcIiwgbG9vcENvbW1lbnQpO1xuICAgIG1hcHBlZENvbmZpZy5jb3VudCA9IHQuaWRlbnRpZmllcihjb3VudEl0ZXJhdG9yTmFtZSk7XG4gICAgZXhwcmVzc2lvbnMucHVzaChpdGVyYXRvcik7XG4gIH1cblxuICBjb25zdCBkeW5CbG9ja3MgPSBleHRyYWN0RHluYW1pY0Jsb2NrcyhtYXBwZWRDb25maWcpO1xuICBjb25zdCBuZXN0ZWREeW5hbWljQmxvY2tzID0gZHluQmxvY2tzLmZpbHRlcigoYmxvY2spID0+XG4gICAgaXNOZXN0ZWREeW5hbWljQmxvY2soZHluQmxvY2tzLCBibG9jayksXG4gICk7XG4gIGNvbnN0IGR5bmFtaWNCbG9ja3NVc2luZ092ZXJyaWRlcyA9IGR5bkJsb2Nrcy5maWx0ZXIoXG4gICAgKGJsb2NrKSA9PlxuICAgICAgLy8gbmVzdGVkIGJsb2NrcyBuZWVkIG92ZXJyaWRlc1xuICAgICAgbmVzdGVkRHluYW1pY0Jsb2Nrcy5pbmNsdWRlcyhibG9jaykgfHxcbiAgICAgIC8vIGJsb2NrcyB0aGF0IGNvbnRhaW4gbmVzdGVkIGJsb2NrcyBuZWVkIHRoZW0gYXMgd2VsbFxuICAgICAgbmVzdGVkRHluYW1pY0Jsb2Nrcy5zb21lKChuZXN0ZWRCbG9jaykgPT5cbiAgICAgICAgbmVzdGVkQmxvY2sucGF0aC5zdGFydHNXaXRoKGJsb2NrLnBhdGgpLFxuICAgICAgKSxcbiAgKTtcbiAgLy8gYWxsIG90aGVycyBjYW4gYmUgaGFuZGxlZCBieSB0aGUgQ0RLVE4gcnVudGltZVxuICBjb25zdCBkeW5hbWljQmxvY2tzVXNpbmdSdW50aW1lID0gZHluQmxvY2tzLmZpbHRlcihcbiAgICAoYmxvY2spID0+ICFkeW5hbWljQmxvY2tzVXNpbmdPdmVycmlkZXMuaW5jbHVkZXMoYmxvY2spLFxuICApO1xuXG4gIGZvciAoY29uc3QgW2ksIGJsb2NrXSBvZiBkeW5hbWljQmxvY2tzVXNpbmdSdW50aW1lLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGR5bmFtaWNCbG9ja0l0ZXJhdG9yTmFtZSA9IHZhcmlhYmxlTmFtZShcbiAgICAgIHNjb3BlLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBgJHtrZXl9X2R5bmFtaWNfaXRlcmF0b3JfJHtpfWAsXG4gICAgKTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZUFzdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgYFwiJHtibG9jay5mb3JfZWFjaH1cImAsXG4gICAgICAoKSA9PiBbXCJsaXN0XCIsIFwiZHluYW1pY1wiXSxcbiAgICApO1xuXG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1JdGVyYXRvclwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXRlcmF0b3IgPSB0LnZhcmlhYmxlRGVjbGFyYXRpb24oXCJjb25zdFwiLCBbXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRvcihcbiAgICAgICAgdC5pZGVudGlmaWVyKGR5bmFtaWNCbG9ja0l0ZXJhdG9yTmFtZSksXG4gICAgICAgIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKFwiVGVycmFmb3JtSXRlcmF0b3JcIiksXG4gICAgICAgICAgICB0LmlkZW50aWZpZXIoXCJmcm9tTGlzdFwiKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIFtyZWZlcmVuY2VBc3RdLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICBdKTtcbiAgICB0LmFkZENvbW1lbnQoaXRlcmF0b3IsIFwibGVhZGluZ1wiLCBsb29wQ29tbWVudCk7XG4gICAgZXhwcmVzc2lvbnMucHVzaChpdGVyYXRvcik7XG4gICAgY29uc3QgZHluYW1pY0NhbGxFeHByZXNzaW9uID0gdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgICAgdC5pZGVudGlmaWVyKGR5bmFtaWNCbG9ja0l0ZXJhdG9yTmFtZSksXG4gICAgICAgIHQuaWRlbnRpZmllcihcImR5bmFtaWNcIiksXG4gICAgICApLFxuICAgICAgW1xuICAgICAgICBhd2FpdCB2YWx1ZVRvVHMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uc2NvcGUsXG4gICAgICAgICAgICBzY29wZWRWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgW2Jsb2NrLnNjb3BlZFZhcl06IGR5bmFtaWNCbG9ja0l0ZXJhdG9yTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWxsV2l0aENvbmZpZ0FjY2Vzc29ycyhcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShibG9jay5jb250ZW50KSA/IGJsb2NrLmNvbnRlbnRbMF0gOiBibG9jay5jb250ZW50LFxuICAgICAgICAgICAgYmxvY2sucGF0aC5yZXBsYWNlKGJsb2NrLnNjb3BlZFZhciwgXCJcIiksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBibG9jay5wYXRoLnJlcGxhY2UoYmxvY2suc2NvcGVkVmFyLCBcIlwiKSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgKTtcblxuICAgIGNvbnN0IHBhcnRzID0gYmxvY2sucGF0aFxuICAgICAgLnJlcGxhY2UoYGR5bmFtaWMuJHtibG9jay5zY29wZWRWYXJ9YCwgXCJcIilcbiAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgIC5maWx0ZXIoKHApID0+IHAubGVuZ3RoID4gMCk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBwYXJ0cy5yZWR1Y2UoKGFjYywgcGFydCkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWNjKSAmJiAhTnVtYmVyLmlzTmFOKHBhcnNlSW50KHBhcnQsIDEwKSkpIHtcbiAgICAgICAgcmV0dXJuIGFjY1twYXJzZUludChwYXJ0LCAxMCldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjY1twYXJ0XTtcbiAgICAgIH1cbiAgICB9LCBtYXBwZWRDb25maWcpO1xuICAgIHBhcmVudFtibG9jay5zY29wZWRWYXJdID0gZHluYW1pY0NhbGxFeHByZXNzaW9uO1xuICAgIGRlbGV0ZSBwYXJlbnQuZHluYW1pYztcbiAgfVxuXG4gIGNvbnN0IG92ZXJyaWRlUmVmZXJlbmNlID0gZHluYW1pY0Jsb2Nrc1VzaW5nT3ZlcnJpZGVzLmxlbmd0aFxuICAgID8ge1xuICAgICAgICBzdGFydDogMCxcbiAgICAgICAgZW5kOiAwLFxuICAgICAgICByZWZlcmVuY2VlOiB7XG4gICAgICAgICAgaWQ6IGAke3R5cGV9LiR7a2V5fWAsXG4gICAgICAgICAgZnVsbDogYCR7dHlwZX0uJHtrZXl9YCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuICBpZiAocHJvdmlzaW9uZXIpIHtcbiAgICBtYXBwZWRDb25maWcucHJvdmlzaW9uZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhwcm92aXNpb25lcikuZmxhdE1hcCgoW3R5cGUsIHBdOiBbc3RyaW5nLCBhbnldKSA9PlxuICAgICAgICBwLm1hcCgocHA6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+XG4gICAgICAgICAgdmFsdWVUb1RzKFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICB7IHR5cGUsIC4uLnBwIH0sXG4gICAgICAgICAgICBcInBhdGgtZm9yLXByb3Zpc2lvbmVycy1jYW4tYmUtaWdub3JlZFwiLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbXBvcnRHcmFwaElkID0gYGltcG9ydC4ke3Jlc291cmNlLnJlcGxhY2UoXCIuXCIsIFwiX1wiKX0uJHtrZXl9YDtcbiAgY29uc3QgaW1wb3J0RGVmaW5pdGlvbjogSW1wb3J0IHwgdW5kZWZpbmVkID0gZ3JhcGguaGFzTm9kZShpbXBvcnRHcmFwaElkKVxuICAgID8gZ3JhcGguZ2V0Tm9kZUF0dHJpYnV0ZShpbXBvcnRHcmFwaElkLCBcInZhbHVlXCIpXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucy5jb25jYXQoXG4gICAgYXdhaXQgYXNFeHByZXNzaW9uKFxuICAgICAgeyAuLi5zY29wZSwgZm9yRWFjaEl0ZXJhdG9yTmFtZSwgY291bnRJdGVyYXRvck5hbWUgfSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2V5LFxuICAgICAgbWFwcGVkQ29uZmlnLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICAgIGdldFJlZmVyZW5jZShncmFwaCwgaWQpIHx8IG92ZXJyaWRlUmVmZXJlbmNlLFxuICAgICAgaW1wb3J0RGVmaW5pdGlvbixcbiAgICApLFxuICApO1xuXG4gIC8vIENoZWNrIGZvciBkeW5hbWljIGJsb2Nrc1xuICBleHByZXNzaW9ucyA9IGV4cHJlc3Npb25zLmNvbmNhdChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGR5bmFtaWNCbG9ja3NVc2luZ092ZXJyaWRlcy5tYXAoYXN5bmMgKHsgcGF0aCwgZm9yX2VhY2gsIGNvbnRlbnQgfSkgPT4ge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGxldCB0aGUgZXhwcmVzc2lvbiBjb252ZXJzaW9uIGtub3cgYWxsIGF2YWlsYWJsZVxuICAgICAgICAvLyBkeW5hbWljIGJsb2NrIG5hbWVzLCBzbyB3ZSBkb24ndCByZXBsYWNlIHRoZW0uIFRoZSBcImR5bmFtaWMtYmxvY2tcIlxuICAgICAgICAvLyBzY29wZWQgdmFyaWFibGUgaW5kaWNhdGVzIHRvIHRoZSBleHByZXNzaW9uIGNvbnZlcnNpb24gdG8gdXNlIHRoZVxuICAgICAgICAvLyBrZXkgbmFtZSBpbnN0ZWFkIG9mIGFuIGl0ZXJhdG9yXG4gICAgICAgIGNvbnN0IHNjb3BlZFZhcmlhYmxlc0luUGF0aCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICBwYXRoXG4gICAgICAgICAgICAuc3Vic3RyaW5nKDEpIC8vIFRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgZG90IHRoYXQgcmVzdWx0cyBpbiBhbiBlbXB0eSBzcGxpdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKHApID0+ICFbXCJkeW5hbWljXCIsIFwiY29udGVudFwiXS5pbmNsdWRlcyhwKSAmJiBpc05hTihwYXJzZUludChwKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubWFwKChwKSA9PiBbcCwgXCJkeW5hbWljLWJsb2NrXCJdKSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gYWRkT3ZlcnJpZGVFeHByZXNzaW9uKFxuICAgICAgICAgIHZhck5hbWUsXG4gICAgICAgICAgcGF0aC5zdWJzdHJpbmcoMSksIC8vIFRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgZG90IHRoYXQgd2UgZG9uJ3Qgd2FudFxuICAgICAgICAgIGF3YWl0IHZhbHVlVG9UcyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uc2NvcGUsXG4gICAgICAgICAgICAgIHdpdGhpbk92ZXJyaWRlRXhwcmVzc2lvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgc2NvcGVkVmFyaWFibGVzOiBzY29wZWRWYXJpYWJsZXNJblBhdGgsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmb3JfZWFjaCxcbiAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInBhdGgtZm9yLWR5bmFtaWMtYmxvY2tzLWNhbi1iZS1pZ25vcmVkXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsb29wQ29tbWVudCxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhc0V4cHJlc3Npb24oXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICB0eXBlOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLFxuICBpc01vZHVsZUltcG9ydDogYm9vbGVhbixcbiAgaXNQcm92aWRlcjogYm9vbGVhbixcbiAgcmVmZXJlbmNlPzogUmVmZXJlbmNlLFxuICBpbXBvcnRlZD86IEltcG9ydCxcbikge1xuICBjb25zdCB7IHByb3ZpZGVycywgLi4ub3RoZXJPcHRpb25zIH0gPSBjb25maWcgYXMgYW55O1xuXG4gIGNvbnN0IGNvbnN0cnVjdElkID0gdW5pcXVlSWQoc2NvcGUuY29uc3RydWN0cywgbmFtZSk7XG4gIGNvbnN0IG92ZXJyaWRlSWQgPSAhaXNQcm92aWRlciAmJiBjb25zdHJ1Y3RJZCAhPT0gbmFtZTtcblxuICBjb25zdCBjb21wbGV0ZU9iamVjdCA9IGZpbGxXaXRoQ29uZmlnQWNjZXNzb3JzKHNjb3BlLCBvdGhlck9wdGlvbnMsIHR5cGUpO1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSB0Lm5ld0V4cHJlc3Npb24oXG4gICAgY29uc3RydWN0QXN0KHNjb3BlLCB0eXBlLCBpc01vZHVsZUltcG9ydCksXG4gICAgW1xuICAgICAgdC50aGlzRXhwcmVzc2lvbigpLFxuICAgICAgdC5zdHJpbmdMaXRlcmFsKGNvbnN0cnVjdElkKSxcblxuICAgICAgYXdhaXQgdmFsdWVUb1RzKFxuICAgICAgICBzY29wZSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmNvbXBsZXRlT2JqZWN0LFxuICAgICAgICAgIHByb3ZpZGVyczpcbiAgICAgICAgICAgIHByb3ZpZGVycyAmJiBPYmplY3Qua2V5cyhwcm92aWRlcnMpLmxlbmd0aFxuICAgICAgICAgICAgICA/IE9iamVjdC5lbnRyaWVzKHByb3ZpZGVycykubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgICAgICBtb2R1bGVBbGlhczoga2V5LFxuICAgICAgICAgICAgICAgICAgcHJvdmlkZXI6IHZhbHVlLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgYCR7dHlwZX1gLFxuICAgICAgICBpc01vZHVsZUltcG9ydCxcbiAgICAgICksXG4gICAgXSxcbiAgKTtcblxuICBjb25zdCBzdGF0ZW1lbnRzID0gW107XG4gIGNvbnN0IHZhck5hbWUgPSByZWZlcmVuY2VcbiAgICA/IHJlZmVyZW5jZVRvVmFyaWFibGVOYW1lKHNjb3BlLCByZWZlcmVuY2UpXG4gICAgOiB2YXJpYWJsZU5hbWUoc2NvcGUsIHR5cGUsIG5hbWUpO1xuXG4gIGlmIChyZWZlcmVuY2UgfHwgb3ZlcnJpZGVJZCB8fCBpbXBvcnRlZCkge1xuICAgIHN0YXRlbWVudHMucHVzaChcbiAgICAgIHQudmFyaWFibGVEZWNsYXJhdGlvbihcImNvbnN0XCIsIFtcbiAgICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IodC5pZGVudGlmaWVyKHZhck5hbWUpLCBleHByZXNzaW9uKSxcbiAgICAgIF0pLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGVtZW50cy5wdXNoKHQuZXhwcmVzc2lvblN0YXRlbWVudChleHByZXNzaW9uKSk7XG4gIH1cblxuICBpZiAob3ZlcnJpZGVJZCkge1xuICAgIHN0YXRlbWVudHMucHVzaChhZGRPdmVycmlkZUxvZ2ljYWxJZEV4cHJlc3Npb24odmFyTmFtZSwgbmFtZSkpO1xuICB9XG5cbiAgaWYgKGltcG9ydGVkKSB7XG4gICAgLy8gQWRkcyBteVZhci5pbXBvcnRGcm9tKFwibXktYXJuXCIpXG4gICAgY29uc3QgaW1wb3J0RXhwcmVzc2lvbiA9IHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICAgIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIodmFyTmFtZSksIHQuaWRlbnRpZmllcihcImltcG9ydEZyb21cIikpLFxuICAgICAgICBbdC5zdHJpbmdMaXRlcmFsKGltcG9ydGVkLmlkKV0sXG4gICAgICApLFxuICAgICk7XG5cbiAgICBpZiAoaW1wb3J0ZWQucHJvdmlkZXIpIHtcbiAgICAgIHQuYWRkQ29tbWVudChcbiAgICAgICAgaW1wb3J0RXhwcmVzc2lvbixcbiAgICAgICAgXCJsZWFkaW5nXCIsXG4gICAgICAgIGBUaGlzIGltcG9ydCB3YXMgY29uZmlndXJlZCB3aXRoIGEgcHJvdmlkZXIuIENES1ROIGRvZXMgc3VwcG9ydCB0aGlzLCBidXQgdGhlIGNka3RuIGNvbnZlcnQgY29tbWFuZCBkb2VzIG5vdCB5ZXQuIFBsZWFzZSBhZGQgdGhlIHByb3ZpZGVyIHJlZmVyZW5jZSBtYW51YWxseS4gU2VlIGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9yZXNvdXJjZXMjaW1wb3J0aW5nLXJlc291cmNlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0ZW1lbnRzLnB1c2goaW1wb3J0RXhwcmVzc2lvbik7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG91dHB1dChcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAga2V5OiBzdHJpbmcsXG4gIF9pZDogc3RyaW5nLFxuICBpdGVtOiBPdXRwdXQsXG4gIF9ncmFwaDogRGlyZWN0ZWRHcmFwaCxcbikge1xuICBjb25zdCBbeyB2YWx1ZSwgZGVzY3JpcHRpb24sIHNlbnNpdGl2ZSB9XSA9IGl0ZW07XG5cbiAgcmV0dXJuIGFzRXhwcmVzc2lvbihcbiAgICBzY29wZSxcbiAgICBcImNka3RuLlRlcnJhZm9ybU91dHB1dFwiLFxuICAgIGtleSxcbiAgICB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc2Vuc2l0aXZlLFxuICAgIH0sXG4gICAgZmFsc2UsXG4gICAgZmFsc2UsXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhcmlhYmxlVHlwZVRvQXN0KFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICB0eXBlOiBzdHJpbmcsXG4pOiBQcm9taXNlPHQuRXhwcmVzc2lvbj4ge1xuICBjb25zdCBhZGRWYXJpYWJsZVR5cGVUb0ltcG9ydHMgPSAoKSA9PlxuICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgY29uc3RydWN0TmFtZTogXCJWYXJpYWJsZVR5cGVcIixcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgfSk7XG5cbiAgZnVuY3Rpb24gcGFyc2VkVHlwZVRvQXN0KHR5cGU6IHRleC5FeHByZXNzaW9uVHlwZSk6IHQuRXhwcmVzc2lvbiB7XG4gICAgaWYgKHRleC5pc1Njb3BlVHJhdmVyc2FsRXhwcmVzc2lvbih0eXBlKSkge1xuICAgICAgYWRkVmFyaWFibGVUeXBlVG9JbXBvcnRzKCk7XG4gICAgICBzd2l0Y2ggKHR5cGUubWV0YS52YWx1ZSkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgcmV0dXJuIHQuaWRlbnRpZmllcihcIlZhcmlhYmxlVHlwZS5TVFJJTkdcIik7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICByZXR1cm4gdC5pZGVudGlmaWVyKFwiVmFyaWFibGVUeXBlLk5VTUJFUlwiKTtcbiAgICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgICAgICByZXR1cm4gdC5pZGVudGlmaWVyKFwiVmFyaWFibGVUeXBlLkJPT0xcIik7XG4gICAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdC5pZGVudGlmaWVyKFwiVmFyaWFibGVUeXBlLkFOWVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4LmlzRnVuY3Rpb25DYWxsRXhwcmVzc2lvbih0eXBlKSkge1xuICAgICAgYWRkVmFyaWFibGVUeXBlVG9JbXBvcnRzKCk7XG4gICAgICBzd2l0Y2ggKHR5cGUubWV0YS5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICBjYXNlIFwidHVwbGVcIjpcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgIHJldHVybiB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKGBWYXJpYWJsZVR5cGUuJHt0eXBlLm1ldGEubmFtZX1gKSxcbiAgICAgICAgICAgIHR5cGUuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gcGFyc2VkVHlwZVRvQXN0KGNoaWxkKSksXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4LmlzT2JqZWN0RXhwcmVzc2lvbih0eXBlKSkge1xuICAgICAgcmV0dXJuIHQub2JqZWN0RXhwcmVzc2lvbihcbiAgICAgICAgT2JqZWN0LmVudHJpZXModHlwZS5tZXRhLml0ZW1zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgICB0Lm9iamVjdFByb3BlcnR5KFxuICAgICAgICAgICAgdC5zdHJpbmdMaXRlcmFsKGtleSksXG4gICAgICAgICAgICAvLyBUaGlzIGRvZXMgbm90IGRlYWwgd2l0aCBjb21wbGV4IHR5cGVzIG5lc3RlZCB3aXRoaW4gb2JqZWN0c1xuICAgICAgICAgICAgLy8gSWYgc3VjaCBhIHR5cGUgaXMgZm91bmQgaXQgd2lsbCByZXN1bHQgaW4gYW4gQW55IHR5cGVcbiAgICAgICAgICAgIC8vIGUuZy4geyBmb286IGxpc3Qoc3RyaW5nKSB9IHdpbGwgcmVzdWx0IGluIHsgZm9vOiBhbnkgfVxuICAgICAgICAgICAgcGFyc2VkVHlwZVRvQXN0KHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzY29wZVRyYXZlcnNhbFwiLFxuICAgICAgICAgICAgICBtZXRhOiB7IHZhbHVlIH0sXG4gICAgICAgICAgICB9IGFzIGFueSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYWRkVmFyaWFibGVUeXBlVG9JbXBvcnRzKCk7XG4gICAgcmV0dXJuIHQuaWRlbnRpZmllcihcIlZhcmlhYmxlVHlwZS5BTllcIik7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkVHlwZVRvQXN0KGF3YWl0IGV4cHJlc3Npb25Bc3QodHlwZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFyaWFibGUoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGtleTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpdGVtOiBWYXJpYWJsZSxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgY29uc3QgW3sgdHlwZSwgLi4ucHJvcHMgfV0gPSBpdGVtO1xuXG4gIGlmICghZ2V0UmVmZXJlbmNlKGdyYXBoLCBpZCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gYXNFeHByZXNzaW9uKFxuICAgIHNjb3BlLFxuICAgIGlkLFxuICAgIGtleSxcbiAgICB7IC4uLnByb3BzLCB0eXBlOiB0eXBlID8gYXdhaXQgdmFyaWFibGVUeXBlVG9Bc3Qoc2NvcGUsIHR5cGUpIDogdW5kZWZpbmVkIH0sXG4gICAgZmFsc2UsXG4gICAgZmFsc2UsXG4gICAgZ2V0UmVmZXJlbmNlKGdyYXBoLCBpZCksXG4gICAgdW5kZWZpbmVkLFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9jYWwoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGtleTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpdGVtOiBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLFxuICBncmFwaDogRGlyZWN0ZWRHcmFwaCxcbik6IFByb21pc2U8dC5WYXJpYWJsZURlY2xhcmF0aW9uW10+IHtcbiAgbG9nZ2VyLmRlYnVnKGBJbml0aWFsaXppbmcgbG9jYWwgcmVzb3VyY2UgJHtrZXl9IHdpdGggaWQgJHtpZH1gKTtcbiAgaWYgKCFnZXRSZWZlcmVuY2UoZ3JhcGgsIGlkKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gcmVmZXJlbmNlIGZvdW5kIGZvciAke2tleX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB0LnZhcmlhYmxlRGVjbGFyYXRpb24oXCJjb25zdFwiLCBbXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRvcihcbiAgICAgICAgdC5pZGVudGlmaWVyKHZhcmlhYmxlTmFtZShzY29wZSwgXCJsb2NhbFwiLCBrZXkpKSxcbiAgICAgICAgYXdhaXQgdmFsdWVUb1RzKHNjb3BlLCBpdGVtLCBcInBhdGgtZm9yLWxvY2FsLWJsb2Nrcy1jYW4tYmUtaWdub3JlZFwiKSxcbiAgICAgICksXG4gICAgXSksXG4gIF07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtb2R1bGVzKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBrZXk6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgaXRlbTogTW9kdWxlLFxuICBncmFwaDogRGlyZWN0ZWRHcmFwaCxcbikge1xuICBjb25zdCBbeyBzb3VyY2UsIHZlcnNpb246IF92ZXJzaW9uLCAuLi5wcm9wcyB9XSA9IGl0ZW07XG5cbiAgY29uc3QgbW9kdWxlQ29uc3RyYWludCA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHNvdXJjZSk7XG5cbiAgcmV0dXJuIGFzRXhwcmVzc2lvbihcbiAgICBzY29wZSxcbiAgICBtb2R1bGVDb25zdHJhaW50LmNsYXNzTmFtZSxcbiAgICBrZXksXG4gICAgcHJvcHMsXG4gICAgdHJ1ZSxcbiAgICBmYWxzZSxcbiAgICBnZXRSZWZlcmVuY2UoZ3JhcGgsIGlkKSxcbiAgICB1bmRlZmluZWQsXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbXBvcnRzKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBfaWQ6IHN0cmluZyxcbiAgaXRlbTogSW1wb3J0LFxuICBncmFwaDogRGlyZWN0ZWRHcmFwaCxcbikge1xuICAvLyBNb3ZlIGZyb20gJHthd3NfaW5zdGFuY2UuZXhhbXBsZX0gdG8gYXdzX2luc3RhbmNlLmV4YW1wbGVcbiAgY29uc3QgdGFyZ2V0ID1cbiAgICBpdGVtLnRvLnN0YXJ0c1dpdGgoXCIke1wiKSAmJiBpdGVtLnRvLmVuZHNXaXRoKFwifVwiKVxuICAgICAgPyBpdGVtLnRvLnN1YnN0cmluZygyLCBpdGVtLnRvLmxlbmd0aCAtIDEpXG4gICAgICA6IGl0ZW0udG87XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGltcG9ydCBnb2VzIGludG8gYSBtb2R1bGVcbiAgaWYgKHRhcmdldC5zdGFydHNXaXRoKFwibW9kdWxlLlwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB0LmFkZENvbW1lbnQoXG4gICAgICAgIHQuZW1wdHlTdGF0ZW1lbnQoKSxcbiAgICAgICAgXCJsZWFkaW5nXCIsXG4gICAgICAgIGBDREtUTiBkb2VzIG5vdCBzdXBwb3J0IGltcG9ydHMgaW50byBtb2R1bGVzIHlldCwgcGxlYXNlIHJlbW92ZSB0aGUgaW1wb3J0IGJsb2NrIGltcG9ydGluZyAke2l0ZW0uaWR9IGludG8gJHt0YXJnZXR9IGZyb20geW91ciBjb25maWd1cmF0aW9uYCxcbiAgICAgICksXG4gICAgXTtcbiAgfVxuXG4gIC8vIFdlIG5vdyBrbm93IHRoYXQgdGhlIGltcG9ydCBnb2VzIGludG8gYSByZXNvdXJjZSwgZS5nLiBhd3NfaW5zdGFuY2UuZXhhbXBsZVxuICBjb25zdCBbcmVzb3VyY2VUeXBlSWRlbnRpZmllciwgcmVzb3VyY2VOYW1lXSA9IHRhcmdldC5zcGxpdChcIi5cIik7XG4gIGlmIChyZXNvdXJjZU5hbWUuaW5jbHVkZXMoXCJbXCIpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHQuYWRkQ29tbWVudChcbiAgICAgICAgdC5lbXB0eVN0YXRlbWVudCgpLFxuICAgICAgICBcImxlYWRpbmdcIixcbiAgICAgICAgYENES1ROIGRvZXMgbm90IHN1cHBvcnQgaW1wb3J0cyBpbnRvIHJlc291cmNlcyB3aXRoIGNvdW50IG9yIGZvcl9lYWNoIHlldCwgcGxlYXNlIHJlbW92ZSB0aGUgaW1wb3J0IGJsb2NrIGltcG9ydGluZyAke2l0ZW0uaWR9IGludG8gJHt0YXJnZXR9IGZyb20geW91ciBjb25maWd1cmF0aW9uYCxcbiAgICAgICksXG4gICAgXTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBleGlzdGluZyByZXNvdXJjZSBjb25maWcgd2l0aCB0aGUgZ2l2ZW4gbmFtZVxuICBpZiAoZ3JhcGguaGFzTm9kZSh0YXJnZXQpKSB7XG4gICAgLy8gV2Ugd2lsbCBoYW5kbGUgdGhpcyBjYXNlIGluIHRoZSByZXNvdXJjZSBmdW5jdGlvblxuICAgIC8vIHNvIHdlIGNhbiBza2lwIG92ZXIgaXRcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBbcHJvdmlkZXIsIC4uLnJlc291cmNlVHlwZU5hbWVQYXJ0c10gPVxuICAgIHJlc291cmNlVHlwZUlkZW50aWZpZXIuc3BsaXQoXCJfXCIpO1xuXG4gIGNvbnN0IGNvbnN0cnVjdElkID0gdW5pcXVlSWQoc2NvcGUuY29uc3RydWN0cywgY2FtZWxDYXNlKHJlc291cmNlTmFtZSkpO1xuICBjb25zdCBjb25zdHJ1Y3RDbGFzcyA9IGNvbnN0cnVjdEFzdChcbiAgICBzY29wZSxcbiAgICBgJHtwcm92aWRlcn0uJHtyZXNvdXJjZVR5cGVOYW1lUGFydHMuam9pbihcIl9cIil9YCxcbiAgICBmYWxzZSxcbiAgKTtcbiAgcmV0dXJuIFtcbiAgICB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgICAgY29uc3RydWN0Q2xhc3MsXG4gICAgICAgICAgdC5pZGVudGlmaWVyKFwiZ2VuZXJhdGVDb25maWdGb3JJbXBvcnRcIiksXG4gICAgICAgICksXG4gICAgICAgIFtcbiAgICAgICAgICB0LnRoaXNFeHByZXNzaW9uKCksXG4gICAgICAgICAgdC5zdHJpbmdMaXRlcmFsKGNvbnN0cnVjdElkKSxcbiAgICAgICAgICB0LnN0cmluZ0xpdGVyYWwoaXRlbS5pZCksXG4gICAgICAgIF0sXG4gICAgICApLFxuICAgICksXG4gIF07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92aWRlcihcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAga2V5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IFByb3ZpZGVyWzBdLFxuICBncmFwaDogRGlyZWN0ZWRHcmFwaCxcbikge1xuICBjb25zdCB7IHZlcnNpb246IF92ZXJzaW9uLCAuLi5wcm9wcyB9ID0gaXRlbTtcblxuICBjb25zdCBpbXBvcnRLZXkgPSBrZXkgPT09IFwibnVsbFwiID8gXCJOdWxsUHJvdmlkZXJcIiA6IGtleTtcblxuICByZXR1cm4gYXNFeHByZXNzaW9uKFxuICAgIHNjb3BlLFxuICAgIGAke2ltcG9ydEtleX0uJHtwYXNjYWxDYXNlKGtleSl9UHJvdmlkZXJgLFxuICAgIGtleSxcbiAgICBwcm9wcyxcbiAgICBmYWxzZSxcbiAgICB0cnVlLFxuICAgIGdldFJlZmVyZW5jZShncmFwaCwgaWQpLFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNka3RmSW1wb3J0ID0gdGVtcGxhdGUoXG4gIGBpbXBvcnQgKiBhcyBjZGt0biBmcm9tIFwiY2RrdG5cImAsXG4pKCkgYXMgdC5TdGF0ZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RzSW1wb3J0ID0gdGVtcGxhdGUoXG4gIGBpbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCJgLFxuKSgpIGFzIHQuU3RhdGVtZW50O1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZXJJbXBvcnRzID0gKHByb3ZpZGVyczogc3RyaW5nW10pID0+XG4gIHByb3ZpZGVycy5tYXAoKHByb3ZpZGVyTmFtZSkgPT4ge1xuICAgIGNvbnN0IHBhcnRzID0gcHJvdmlkZXJOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCBuYW1lID0gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdIDogcGFydHNbMF07XG4gICAgY29uc3QgaW1wb3J0TmFtZSA9IG5hbWUgPT09IFwibnVsbFwiID8gXCJOdWxsUHJvdmlkZXJcIiA6IG5hbWU7XG4gICAgcmV0dXJuIHRlbXBsYXRlKFxuICAgICAgYGltcG9ydCAqIGFzICR7aW1wb3J0TmFtZX0gZnJvbSBcIi4vLmdlbi9wcm92aWRlcnMvJHtuYW1lLnJlcGxhY2UoXG4gICAgICAgIFwiLi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICl9XCJgLFxuICAgICkoKSBhcyB0LlN0YXRlbWVudDtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBtb2R1bGVJbXBvcnRzID0gKG1vZHVsZXM6IFJlY29yZDxzdHJpbmcsIE1vZHVsZT4gfCB1bmRlZmluZWQpID0+IHtcbiAgY29uc3QgdW5pcXVlTW9kdWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBPYmplY3QudmFsdWVzKG1vZHVsZXMgfHwge30pLm1hcCgoW21vZHVsZV0pID0+XG4gICAgdW5pcXVlTW9kdWxlcy5hZGQobW9kdWxlLnNvdXJjZSksXG4gICk7XG5cbiAgY29uc3QgaW1wb3J0czogdC5TdGF0ZW1lbnRbXSA9IFtdO1xuICB1bmlxdWVNb2R1bGVzLmZvckVhY2goKG0pID0+IHtcbiAgICBjb25zdCBtb2R1bGVDb25zdHJhaW50ID0gbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQobSk7XG4gICAgaW1wb3J0cy5wdXNoKFxuICAgICAgdGVtcGxhdGUuYXN0KFxuICAgICAgICBgaW1wb3J0ICogYXMgJHttb2R1bGVDb25zdHJhaW50LmNsYXNzTmFtZX0gZnJvbSBcIi4vLmdlbi9tb2R1bGVzLyR7bW9kdWxlQ29uc3RyYWludC5maWxlTmFtZX1cImAsXG4gICAgICApIGFzIHQuU3RhdGVtZW50LFxuICAgICk7XG4gIH0pO1xuICByZXR1cm4gaW1wb3J0cztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW4oc3RhdGVtZW50czogdC5TdGF0ZW1lbnRbXSkge1xuICBsb2dnZXIuZGVidWcoYEdlbmVyYXRpbmcgY29kZSBmb3IgJHtKU09OLnN0cmluZ2lmeShzdGF0ZW1lbnRzLCBudWxsLCAyKX1gKTtcbiAgY29uc3QgY29kZSA9IHByZXR0aWVyLmZvcm1hdChnZW5lcmF0ZSh0LnByb2dyYW0oc3RhdGVtZW50cykgYXMgYW55KS5jb2RlLCB7XG4gICAgcGFyc2VyOiBcImJhYmVsXCIsXG4gIH0pO1xuXG4gIGxvZ2dlci5kZWJ1ZyhgR2VuZXJhdGVkIGNvZGU6XFxuJHtjb2RlfWApO1xuXG4gIHJldHVybiBjb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkSW1wb3J0Rm9yQ29kZUNvbnRhaW5lcihcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgY29kZUNvbnRhaW5lcjogc3RyaW5nLFxuKSB7XG4gIHN3aXRjaCAoY29kZUNvbnRhaW5lcikge1xuICAgIGNhc2UgXCJjb25zdHJ1Y3RzLkNvbnN0cnVjdFwiOlxuICAgICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICAgIHByb3ZpZGVyOiBcImNvbnN0cnVjdHNcIixcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJDb25zdHJ1Y3RcIixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiY2RrdG4uVGVycmFmb3JtU3RhY2tcIjpcbiAgICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRlcnJhZm9ybVN0YWNrXCIsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImNka3RmLlRlcnJhZm9ybVN0YWNrXCI6XG4gICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgcHJvdmlkZXI6IFwiY2RrdGZcIixcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1TdGFja1wiLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFwiVW5zdXBwb3J0ZWQgY29kZSBjb250YWluZXI6IFwiICsgY29kZUNvbnRhaW5lcik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBDb2RlSW5Db25zdHJ1Y3RvcihcbiAgY29kZUNvbnRhaW5lcjogc3RyaW5nLFxuICBjb2RlOiB0LlN0YXRlbWVudFtdLFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgY29uZmlnVHlwZU5hbWU/OiBzdHJpbmcsXG4pOiB0LlN0YXRlbWVudCB7XG4gIGxldCBiYXNlQ29udGFpbmVyQ2xhc3M6IHQuSWRlbnRpZmllcjtcbiAgc3dpdGNoIChjb2RlQ29udGFpbmVyKSB7XG4gICAgY2FzZSBcImNvbnN0cnVjdHMuQ29uc3RydWN0XCI6XG4gICAgICBiYXNlQ29udGFpbmVyQ2xhc3MgPSB0LmlkZW50aWZpZXIoXCJDb25zdHJ1Y3RcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJjZGt0bi5UZXJyYWZvcm1TdGFja1wiOlxuICAgICAgYmFzZUNvbnRhaW5lckNsYXNzID0gdC5pZGVudGlmaWVyKFwiVGVycmFmb3JtU3RhY2tcIik7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFwiVW5zdXBwb3J0ZWQgY29kZSBjb250YWluZXI6IFwiICsgY29kZUNvbnRhaW5lcik7XG4gIH1cbiAgaWYgKGNvbmZpZ1R5cGVOYW1lKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLnN0YXRlbWVudChcbiAgICAgIGBcbiAgY2xhc3MgJSVjbGFzc05hbWUlJSBleHRlbmRzICUlYmFzZSUlIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIGNvbmZpZzogJHtjb25maWdUeXBlTmFtZX0pIHtcbiAgICAgIHN1cGVyKHNjb3BlLCBuYW1lKTtcbiAgICAgICUlY29kZSUlXG4gICAgfVxuICB9XG5gLFxuICAgICAgeyBzeW50YWN0aWNQbGFjZWhvbGRlcnM6IHRydWUsIHBsdWdpbnM6IFtcInR5cGVzY3JpcHRcIl0gfSxcbiAgICApKHtcbiAgICAgIGNvZGUsXG4gICAgICBiYXNlOiBiYXNlQ29udGFpbmVyQ2xhc3MsXG4gICAgICBjbGFzc05hbWU6IHQuaWRlbnRpZmllcihjbGFzc05hbWUpLFxuICAgIH0pIGFzIHQuU3RhdGVtZW50O1xuICB9XG4gIHJldHVybiB0ZW1wbGF0ZS5zdGF0ZW1lbnQoXG4gICAgYFxuICBjbGFzcyAlJWNsYXNzTmFtZSUlIGV4dGVuZHMgJSViYXNlJSUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgc3VwZXIoc2NvcGUsIG5hbWUpO1xuICAgICAgJSVjb2RlJSVcbiAgICB9XG4gIH1cbmAsXG4gICAgeyBzeW50YWN0aWNQbGFjZWhvbGRlcnM6IHRydWUsIHBsdWdpbnM6IFtcInR5cGVzY3JpcHRcIl0gfSxcbiAgKSh7XG4gICAgY29kZSxcbiAgICBiYXNlOiBiYXNlQ29udGFpbmVyQ2xhc3MsXG4gICAgY2xhc3NOYW1lOiB0LmlkZW50aWZpZXIoY2xhc3NOYW1lKSxcbiAgfSkgYXMgdC5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlckNvbnN0cnVjdEltcG9ydHMgPSAoaW1wb3J0YWJsZTogSW1wb3J0YWJsZUNvbnN0cnVjdFtdKSA9PiB7XG4gIGxldCBwcm92aWRlciA9IGltcG9ydGFibGVbMF0ucHJvdmlkZXI7XG4gIGxldCBuYW1lc3BhY2UgPSBpbXBvcnRhYmxlWzBdLm5hbWVzcGFjZTtcbiAgY29uc3QgbmFtZXMgPSBpbXBvcnRhYmxlLm1hcCgoaSkgPT4gaS5jb25zdHJ1Y3ROYW1lKTtcblxuICBpZiAocHJvdmlkZXIgPT09IFwiY2RrdG5cIiB8fCBwcm92aWRlciA9PT0gXCJjb25zdHJ1Y3RzXCIpIHtcbiAgICByZXR1cm4gdGVtcGxhdGUoXG4gICAgICBgaW1wb3J0IHsgJHtuYW1lcy5qb2luKFwiLCBcIil9IH0gZnJvbSBcIiR7cHJvdmlkZXJ9XCJgLFxuICAgICkoKSBhcyB0LlN0YXRlbWVudDtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2UpIHtcbiAgICBuYW1lc3BhY2UgPSBzbmFrZUNhc2UobmFtZXNwYWNlKS5yZXBsYWNlKC9fL2csIFwiLVwiKTtcbiAgfVxuXG4gIC8vIFNwZWNpYWwgY2FzZXMgdG8gdW5kbyBwcm92aWRlciBuYW1lcyB0aGF0IHdlIG92ZXJyaWRlXG4gIGlmIChwcm92aWRlciA9PT0gXCJOdWxsUHJvdmlkZXJcIikge1xuICAgIHByb3ZpZGVyID0gXCJudWxsXCI7XG4gIH1cblxuICByZXR1cm4gdGVtcGxhdGUoXG4gICAgYGltcG9ydCB7ICR7bmFtZXMuam9pbihcbiAgICAgIFwiLCBcIixcbiAgICApfSB9IGZyb20gXCIuLy5nZW4vcHJvdmlkZXJzLyR7cHJvdmlkZXJ9LyR7bmFtZXNwYWNlfVwiYCxcbiAgKSgpIGFzIHQuU3RhdGVtZW50O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW1wb3J0cyhpbXBvcnRhYmxlczogSW1wb3J0YWJsZUNvbnN0cnVjdFtdKSB7XG4gIGNvbnN0IGdyb3VwZWRJbXBvcnRhYmxlcyA9IGltcG9ydGFibGVzLnJlZHVjZShcbiAgICAoYWNjLCBpbXBvcnRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBucyA9IGltcG9ydGFibGUubmFtZXNwYWNlIHx8IFwiXCI7XG4gICAgICAvLyBEb2luZyBzb21lIGhhY2t5IG9yZGVyaW5nIG9mIHRoZSBpbXBvcnRzIHRvIG1ha2UgdGhlbSBsb29rIGEgYml0IG5pY2VyXG4gICAgICBjb25zdCBwcmVmaXggPVxuICAgICAgICBpbXBvcnRhYmxlLnByb3ZpZGVyID09PSBcImNvbnN0cnVjdHNcIlxuICAgICAgICAgID8gXCIxXCJcbiAgICAgICAgICA6IGltcG9ydGFibGUucHJvdmlkZXIgPT09IFwiY2RrdG5cIlxuICAgICAgICAgICAgPyBcIjJcIlxuICAgICAgICAgICAgOiBpbXBvcnRhYmxlLnByb3ZpZGVyID09PSBcImNka3RmXCJcbiAgICAgICAgICAgICAgPyBcIjNcIlxuICAgICAgICAgICAgICA6IFwiNFwiO1xuICAgICAgY29uc3QgZ3JvdXBOYW1lID0gYCR7cHJlZml4fS4ke2ltcG9ydGFibGUucHJvdmlkZXJ9LiR7bnN9YDtcbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7aW1wb3J0YWJsZS5wcm92aWRlcn0uJHtuc30uJHtpbXBvcnRhYmxlLmNvbnN0cnVjdE5hbWV9YDtcblxuICAgICAgaWYgKGFjY1tncm91cE5hbWVdKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0c0FscmVhZHkgPSBhY2NbZ3JvdXBOYW1lXS5zb21lKFxuICAgICAgICAgIChpbXBvcnRhYmxlKSA9PlxuICAgICAgICAgICAgYCR7aW1wb3J0YWJsZS5wcm92aWRlcn0uJHtuc30uJHtpbXBvcnRhYmxlLmNvbnN0cnVjdE5hbWV9YCA9PT1cbiAgICAgICAgICAgIGZ1bGxOYW1lLFxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhpc3RzQWxyZWFkeSkge1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgYWNjW2dyb3VwTmFtZV0ucHVzaChpbXBvcnRhYmxlKTtcbiAgICAgICAgYWNjW2dyb3VwTmFtZV0uc29ydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjW2dyb3VwTmFtZV0gPSBbaW1wb3J0YWJsZV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBJbXBvcnRhYmxlQ29uc3RydWN0W10+LFxuICApO1xuXG4gIGxldCBjb21tZW50QWRkZWQgPSBmYWxzZTtcbiAgY29uc3QgY29uc3RydWN0SW1wb3J0cyA9IE9iamVjdC5rZXlzKGdyb3VwZWRJbXBvcnRhYmxlcylcbiAgICAuc29ydCgpXG4gICAgLm1hcCgoZ3JvdXBOYW1lKSA9PiB7XG4gICAgICBjb25zdCBpbXBvcnRTdGF0ZW1lbnQgPSBwcm92aWRlckNvbnN0cnVjdEltcG9ydHMoXG4gICAgICAgIGdyb3VwZWRJbXBvcnRhYmxlc1tncm91cE5hbWVdLFxuICAgICAgKTtcblxuICAgICAgaWYgKGdyb3VwTmFtZS5zdGFydHNXaXRoKFwiNC5cIikgJiYgIWNvbW1lbnRBZGRlZCkge1xuICAgICAgICBjb21tZW50QWRkZWQgPSB0cnVlO1xuICAgICAgICB0LmFkZENvbW1lbnQoXG4gICAgICAgICAgaW1wb3J0U3RhdGVtZW50LFxuICAgICAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgICAgIGBcXG4qIFByb3ZpZGVyIGJpbmRpbmdzIGFyZSBnZW5lcmF0ZWQgYnkgcnVubmluZyBcXGBjZGt0biBnZXRcXGAuXG4qIFNlZSBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvcHJvdmlkZXJzI2ltcG9ydC1wcm92aWRlcnMgZm9yIG1vcmUgZGV0YWlscy5cXG5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGltcG9ydFN0YXRlbWVudDtcbiAgICB9KTtcblxuICByZXR1cm4gY29uc3RydWN0SW1wb3J0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ29uZmlnVHlwZShcbiAgbmFtZTogc3RyaW5nLFxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZVBhdGg+LFxuKTogdC5TdGF0ZW1lbnQge1xuICByZXR1cm4gdC50c0ludGVyZmFjZURlY2xhcmF0aW9uKFxuICAgIHQuaWRlbnRpZmllcihuYW1lKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIHQudHNJbnRlcmZhY2VCb2R5KFxuICAgICAgT2JqZWN0LmVudHJpZXMoY29uZmlnKS5tYXAoKFtrZXksIF92YWx1ZV0pID0+XG4gICAgICAgIHQudHNQcm9wZXJ0eVNpZ25hdHVyZShcbiAgICAgICAgICB0LmlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICB0LnRTVHlwZUFubm90YXRpb24odC50c0FueUtleXdvcmQoKSksIC8vIFRPRE86IFRyeSB0byBtYWtlIHRoaXMgYmV0dGVyIHRoYW4gYW55XG4gICAgICAgICksXG4gICAgICApLFxuICAgICksXG4gICk7XG59XG4iXX0=
|