semantifold 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/build/src/backends/c.d.ts +2 -1
- package/build/src/backends/c.d.ts.map +1 -1
- package/build/src/backends/c.js +26 -5
- package/build/src/backends/cpp.js +3 -1
- package/build/src/backends/effects.js +3 -2
- package/build/src/backends/java.js +33 -14
- package/build/src/backends/javascript.js +83 -18
- package/build/src/backends/ordered-expressions.d.ts +19 -7
- package/build/src/backends/ordered-expressions.d.ts.map +1 -1
- package/build/src/backends/ordered-expressions.js +46 -11
- package/build/src/backends/php.js +33 -14
- package/build/src/backends/ruby.js +37 -12
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +92 -37
- package/build/src/backends/typescript.js +83 -18
- package/build/src/frontends/c.d.ts +34 -1
- package/build/src/frontends/c.d.ts.map +1 -1
- package/build/src/frontends/c.js +128 -21
- package/build/src/frontends/java.d.ts +8 -0
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +77 -33
- package/build/src/frontends/javascript-typescript.d.ts +2 -0
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +118 -37
- package/build/src/frontends/php.d.ts +8 -0
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +68 -29
- package/build/src/frontends/ruby.d.ts +3 -0
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +103 -30
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +16 -1
- package/build/src/semantic/effects.d.ts.map +1 -1
- package/build/src/semantic/effects.js +18 -6
- package/build/src/semantic/lifetime.js +28 -4
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +26 -7
- package/build/src/semantic/types.d.ts +76 -16
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +23 -7
- package/build/src/semantic/validate.d.ts.map +1 -1
- package/build/src/semantic/validate.js +106 -35
- package/docs/adr/20261026-typed-error-handling-extension.md +55 -0
- package/docs/adr-numeric-tower.md +156 -0
- package/docs/architecture.md +1 -1
- package/docs/c.md +1 -1
- package/docs/language-support.md +10 -9
- package/docs/testing.md +8 -5
- package/package.json +1 -1
- package/src/backends/c.js +23 -4
- package/src/backends/cpp.js +1 -0
- package/src/backends/effects.js +2 -1
- package/src/backends/java.js +33 -14
- package/src/backends/javascript.js +83 -18
- package/src/backends/ordered-expressions.js +46 -10
- package/src/backends/php.js +33 -14
- package/src/backends/ruby.js +36 -12
- package/src/backends/shared.js +89 -42
- package/src/backends/typescript.js +83 -18
- package/src/frontends/c.js +135 -19
- package/src/frontends/java.js +82 -33
- package/src/frontends/javascript-typescript.js +130 -38
- package/src/frontends/php.js +68 -27
- package/src/frontends/ruby.js +107 -28
- package/src/language-registry.js +15 -0
- package/src/semantic/effects.js +17 -5
- package/src/semantic/lifetime.js +29 -3
- package/src/semantic/provenance.js +27 -12
- package/src/semantic/types.js +24 -6
- package/src/semantic/validate.js +105 -36
|
@@ -5,7 +5,7 @@ import { missingType, parseFailure, SemantifoldDiagnostic, unsupportedSyntax } f
|
|
|
5
5
|
import { blockReferencesProtectedEntry } from "../semantic/effects.js";
|
|
6
6
|
import { locationFromOffsets, moduleLocation } from "../semantic/location.js";
|
|
7
7
|
import { withAdaptedOperation } from "../semantic/operators.js";
|
|
8
|
-
import { withParserRanges } from "../semantic/provenance.js";
|
|
8
|
+
import { setParserRanges, withParserRanges } from "../semantic/provenance.js";
|
|
9
9
|
import { hasOnlyUnicodeScalars, scalarType } from "../semantic/scalars.js";
|
|
10
10
|
import { isTask034ResourceProbe } from "../semantic/capabilities.js";
|
|
11
11
|
import { hasExactEffectSupport } from "../backends/effects.js";
|
|
@@ -14,7 +14,7 @@ import { documentedValueType, instantiatedRecordFieldType, iterationBindingType,
|
|
|
14
14
|
/** @typedef {NonNullable<import("@babel/parser").ParseResult<import("@babel/types").File>["tokens"]>[number]} BabelToken */
|
|
15
15
|
/** @typedef {{byStart: Map<number, BabelToken>, tokens: BabelToken[]}} BabelTokenIndex */
|
|
16
16
|
/** @typedef {{name: string, nameLocation: import("../semantic/types.js").SourceLocation, parameters: import("../semantic/types.js").Parameter[], returnType: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: import("../semantic/types.js").TypeParameter[], location: import("../semantic/types.js").SourceLocation}} JavaScriptFunctionSignature */
|
|
17
|
-
/** @typedef {{bindings: Map<string, import("../semantic/types.js").SemanticBindingType>, classes: Map<string, import("../semantic/types.js").ClassDeclaration>, currentClass?: import("../semantic/types.js").ClassDeclaration, errors: Map<string, import("../semantic/types.js").ErrorDeclaration>, errorNames: Map<string, import("../semantic/types.js").ErrorDeclaration>, functions: Map<string, JavaScriptFunctionSignature>, lexicalValueNames?: Set<string>, orderedMapDeclarations?: Set<object>, recordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>, records: Map<string, import("../semantic/types.js").RecordDeclaration>, returnType?: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: Map<string, import("../semantic/types.js").TypeParameter>, valueRecordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration>}} JavaScriptConversionContext */
|
|
17
|
+
/** @typedef {{bindings: Map<string, import("../semantic/types.js").SemanticBindingType>, catchBindingNames?: Set<string>, catchBindingNodes?: Map<string, import("../semantic/types.js").CatchBinding>, classes: Map<string, import("../semantic/types.js").ClassDeclaration>, currentClass?: import("../semantic/types.js").ClassDeclaration, errors: Map<string, import("../semantic/types.js").ErrorDeclaration>, errorNames: Map<string, import("../semantic/types.js").ErrorDeclaration>, functions: Map<string, JavaScriptFunctionSignature>, lexicalValueNames?: Set<string>, orderedMapDeclarations?: Set<object>, recordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>, records: Map<string, import("../semantic/types.js").RecordDeclaration>, returnType?: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: Map<string, import("../semantic/types.js").TypeParameter>, valueRecordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration>}} JavaScriptConversionContext */
|
|
18
18
|
/** @type {WeakMap<object, BabelTokenIndex>} */
|
|
19
19
|
const nodeTokens = new WeakMap();
|
|
20
20
|
const referenceMethodHooks = new Set([
|
|
@@ -831,11 +831,22 @@ function convertStatement(node, language, filename, source, canonicalZeroRequire
|
|
|
831
831
|
* @param {string} filename - Source filename.
|
|
832
832
|
* @param {string} source - Complete source.
|
|
833
833
|
* @param {JavaScriptConversionContext} context - Typed lexical context.
|
|
834
|
-
* @returns {import("../semantic/types.js").RaiseStatement} Semantic raise.
|
|
834
|
+
* @returns {import("../semantic/types.js").RaiseStatement | import("../semantic/types.js").RethrowStatement} Semantic raise or rethrow.
|
|
835
835
|
*/
|
|
836
836
|
function convertTypedThrow(node, language, filename, source, context) {
|
|
837
837
|
const location = nodeLocation(node, filename, source);
|
|
838
838
|
const argument = node.argument;
|
|
839
|
+
if (argument?.type == "Identifier" && context.catchBindingNames?.has(argument.name) && context.bindings.get(argument.name)?.kind == "ErrorType") {
|
|
840
|
+
const bindingNode = context.catchBindingNodes?.get(argument.name);
|
|
841
|
+
if (!bindingNode)
|
|
842
|
+
return unsupportedSyntax(language, "throw of a catch binding without an exact handler binding", location);
|
|
843
|
+
return withParserRanges({
|
|
844
|
+
binding: argument.name,
|
|
845
|
+
bindingNode,
|
|
846
|
+
kind: /** @type {const} */ ("RethrowStatement"),
|
|
847
|
+
location
|
|
848
|
+
}, { keyword: tokenLocation(node, "throw", node.start ?? 0, argument.start ?? node.end ?? source.length, filename, source) });
|
|
849
|
+
}
|
|
839
850
|
if (!argument || argument.type != "NewExpression" || argument.callee.type != "Identifier" ||
|
|
840
851
|
context.bindings.has(argument.callee.name) || !context.errorNames.has(argument.callee.name) || argument.arguments.length != 1 ||
|
|
841
852
|
argument.arguments[0].type == "SpreadElement" || argument.arguments[0].type == "ArgumentPlaceholder" ||
|
|
@@ -867,49 +878,119 @@ function convertTypedThrow(node, language, filename, source, context) {
|
|
|
867
878
|
*/
|
|
868
879
|
function convertTypedTry(node, language, filename, source, canonicalZeroRequired, context) {
|
|
869
880
|
const location = nodeLocation(node, filename, source);
|
|
870
|
-
if (
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
}, { type: caughtTypeLocation });
|
|
881
|
+
if (!node.handler) {
|
|
882
|
+
if (!node.finalizer)
|
|
883
|
+
return unsupportedSyntax(language, "try without an explicit guarded catch", location);
|
|
884
|
+
const bodyContext = { ...context, bindings: new Map(context.bindings) };
|
|
885
|
+
const semantic = /** @type {import("../semantic/types.js").TryStatement} */ (withParserRanges({
|
|
886
|
+
body: convertBlock(node.block, language, filename, source, canonicalZeroRequired, bodyContext),
|
|
887
|
+
handlers: [],
|
|
888
|
+
kind: /** @type {const} */ ("TryStatement"),
|
|
889
|
+
location
|
|
890
|
+
}, {
|
|
891
|
+
try: tokenLocation(node, "try", node.start ?? 0, node.block.start ?? node.end ?? source.length, filename, source)
|
|
892
|
+
}));
|
|
893
|
+
semantic.finallyBody = convertBlock(node.finalizer.body, language, filename, source, canonicalZeroRequired, { ...context, bindings: new Map(context.bindings) }, nodeLocation(node.finalizer, filename, source));
|
|
894
|
+
setParserRanges(semantic, { finally: nodeLocation(node.finalizer, filename, source),
|
|
895
|
+
try: tokenLocation(node, "try", node.start ?? 0, node.block.start ?? node.end ?? source.length, filename, source) });
|
|
896
|
+
return semantic;
|
|
897
|
+
}
|
|
898
|
+
/** @type {import("../semantic/types.js").CatchHandler[]} */
|
|
899
|
+
const handlers = [];
|
|
900
|
+
const seenHandlerNames = new Set(context.catchBindingNames ?? []);
|
|
891
901
|
const bodyContext = { ...context, bindings: new Map(context.bindings) };
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
902
|
+
// JavaScript has no sibling catch clauses, so the exact native profile for ordered
|
|
903
|
+
// multi-catch is a guarded dispatch chain: each unmatched guard rethrows into the next
|
|
904
|
+
// clause. The chain flattens back to one ordered handler list here.
|
|
905
|
+
/** @type {import("@babel/types").CatchClause | undefined} */
|
|
906
|
+
let clause = node.handler;
|
|
907
|
+
while (clause) {
|
|
908
|
+
const binding = clause.param;
|
|
909
|
+
if (binding?.type != "Identifier" || clause.body.directives.length > 0) {
|
|
910
|
+
return unsupportedSyntax(language, "catch without one explicit binding", nodeLocation(clause, filename, source));
|
|
911
|
+
}
|
|
912
|
+
if (seenHandlerNames.has(binding.name)) {
|
|
913
|
+
return unsupportedSyntax(language, `catch binding '${binding.name}' shadows an outer handler binding`, identifierLocation(binding, filename, source));
|
|
914
|
+
}
|
|
915
|
+
seenHandlerNames.add(binding.name);
|
|
916
|
+
/** @type {import("@babel/types").Statement | undefined} */
|
|
917
|
+
const guard = clause.body.body[0];
|
|
918
|
+
if (!guard || guard.type != "IfStatement" || guard.test.type != "UnaryExpression" ||
|
|
919
|
+
guard.test.operator != "!" || guard.test.argument.type != "BinaryExpression" || guard.test.argument.operator != "instanceof" ||
|
|
920
|
+
guard.test.argument.left.type != "Identifier" || guard.test.argument.left.name != binding.name ||
|
|
921
|
+
guard.test.argument.right.type != "Identifier" || guard.test.argument.right.name == binding.name ||
|
|
922
|
+
context.bindings.has(guard.test.argument.right.name) || !context.errorNames.has(guard.test.argument.right.name) ||
|
|
923
|
+
guard.consequent.type != "BlockStatement" || guard.consequent.body.length != 1 || guard.consequent.directives.length > 0 ||
|
|
924
|
+
(guard.alternate && (guard.alternate.type != "BlockStatement" || guard.alternate.directives.length > 0))) {
|
|
925
|
+
return unsupportedSyntax(language, "catch without exact instanceof guard", nodeLocation(guard ?? clause, filename, source));
|
|
926
|
+
}
|
|
927
|
+
/** @type {import("@babel/types").Statement | undefined} */
|
|
928
|
+
const dispatch = guard.consequent.body[0];
|
|
929
|
+
/** @type {import("@babel/types").CatchClause | undefined} */
|
|
930
|
+
let nextClause = undefined;
|
|
931
|
+
/** @type {import("@babel/types").Statement[]} */
|
|
932
|
+
let handlerBodyStatements = clause.body.body.slice(1);
|
|
933
|
+
let handlerBodyLocation = nodeLocation(clause.body, filename, source);
|
|
934
|
+
if (dispatch.type == "TryStatement") {
|
|
935
|
+
if (dispatch.finalizer || !dispatch.handler || dispatch.block.body.length != 1 || dispatch.block.body[0].type != "ThrowStatement" ||
|
|
936
|
+
dispatch.block.body[0].argument?.type != "Identifier" || dispatch.block.body[0].argument.name != binding.name ||
|
|
937
|
+
!guard.alternate || clause.body.body.length != 1) {
|
|
938
|
+
return unsupportedSyntax(language, "catch guard dispatch without exact rethrow of its own binding", nodeLocation(dispatch, filename, source));
|
|
939
|
+
}
|
|
940
|
+
nextClause = dispatch.handler;
|
|
941
|
+
handlerBodyStatements = /** @type {import("@babel/types").BlockStatement} */ (guard.alternate).body;
|
|
942
|
+
handlerBodyLocation = nodeLocation(guard.alternate, filename, source);
|
|
943
|
+
}
|
|
944
|
+
else if (dispatch.type != "ThrowStatement" || dispatch.argument?.type != "Identifier" || dispatch.argument.name != binding.name) {
|
|
945
|
+
return unsupportedSyntax(language, "catch guard without exact unmatched rethrow", nodeLocation(dispatch, filename, source));
|
|
946
|
+
}
|
|
947
|
+
else if (guard.alternate) {
|
|
948
|
+
if (clause.body.body.length != 1) {
|
|
949
|
+
return unsupportedSyntax(language, "catch guard dispatch without exact rethrow of its own binding", nodeLocation(guard.alternate, filename, source));
|
|
950
|
+
}
|
|
951
|
+
handlerBodyStatements = /** @type {import("@babel/types").BlockStatement} */ (guard.alternate).body;
|
|
952
|
+
handlerBodyLocation = nodeLocation(guard.alternate, filename, source);
|
|
953
|
+
}
|
|
954
|
+
const declaration = /** @type {import("../semantic/types.js").ErrorDeclaration} */ (context.errorNames.get(guard.test.argument.right.name));
|
|
955
|
+
const caughtTypeLocation = identifierLocation(guard.test.argument.right, filename, source);
|
|
956
|
+
const catchType = withParserRanges({
|
|
957
|
+
declarationId: /** @type {string} */ (declaration.id),
|
|
958
|
+
kind: /** @type {const} */ ("ErrorType")
|
|
959
|
+
}, { type: caughtTypeLocation });
|
|
960
|
+
const catchContext = { ...context, bindings: new Map(context.bindings), catchBindingNames: new Set(seenHandlerNames),
|
|
961
|
+
catchBindingNodes: new Map(context.catchBindingNodes) };
|
|
962
|
+
catchContext.bindings.set(binding.name, catchType);
|
|
963
|
+
const catchBindingNode = withParserRanges({
|
|
898
964
|
kind: /** @type {const} */ ("CatchBinding"),
|
|
899
965
|
location: identifierLocation(binding, filename, source),
|
|
900
966
|
mutable: /** @type {const} */ (false),
|
|
901
967
|
name: binding.name,
|
|
902
968
|
type: catchType
|
|
903
|
-
}, { name: identifierLocation(binding, filename, source) })
|
|
904
|
-
|
|
905
|
-
|
|
969
|
+
}, { name: identifierLocation(binding, filename, source) });
|
|
970
|
+
catchContext.catchBindingNodes.set(binding.name, catchBindingNode);
|
|
971
|
+
handlers.push(withParserRanges({
|
|
972
|
+
catchBinding: catchBindingNode,
|
|
973
|
+
catchBody: convertBlock(handlerBodyStatements, language, filename, source, canonicalZeroRequired, catchContext, handlerBodyLocation),
|
|
974
|
+
catchType,
|
|
975
|
+
kind: /** @type {const} */ ("CatchHandler"),
|
|
976
|
+
location: nodeLocation(clause, filename, source)
|
|
977
|
+
}, { catch: tokenLocation(clause, "catch", clause.start ?? 0, binding.start ?? clause.end ?? source.length, filename, source) }));
|
|
978
|
+
clause = nextClause;
|
|
979
|
+
}
|
|
980
|
+
const semantic = /** @type {import("../semantic/types.js").TryStatement} */ (withParserRanges({
|
|
981
|
+
body: convertBlock(node.block, language, filename, source, canonicalZeroRequired, bodyContext),
|
|
982
|
+
handlers,
|
|
906
983
|
kind: /** @type {const} */ ("TryStatement"),
|
|
907
984
|
location
|
|
908
985
|
}, {
|
|
909
|
-
catch: tokenLocation(node.handler, "catch", node.handler.start ?? 0, binding.start ?? node.handler.end ?? source.length, filename, source),
|
|
910
|
-
guard: nodeLocation(guard, filename, source),
|
|
911
986
|
try: tokenLocation(node, "try", node.start ?? 0, node.block.start ?? node.end ?? source.length, filename, source)
|
|
912
|
-
});
|
|
987
|
+
}));
|
|
988
|
+
if (node.finalizer) {
|
|
989
|
+
semantic.finallyBody = convertBlock(node.finalizer.body, language, filename, source, canonicalZeroRequired, { ...context, bindings: new Map(context.bindings) }, nodeLocation(node.finalizer, filename, source));
|
|
990
|
+
setParserRanges(semantic, { finally: nodeLocation(node.finalizer, filename, source),
|
|
991
|
+
try: tokenLocation(node, "try", node.start ?? 0, node.block.start ?? node.end ?? source.length, filename, source) });
|
|
992
|
+
}
|
|
993
|
+
return semantic;
|
|
913
994
|
}
|
|
914
995
|
/**
|
|
915
996
|
* Converts the exact block-bodied `for (const value of list)` profile.
|
|
@@ -2403,4 +2484,4 @@ function rememberTokens(value, tokens, visited = new WeakSet()) {
|
|
|
2403
2484
|
rememberTokens(child, tokens, visited);
|
|
2404
2485
|
}
|
|
2405
2486
|
}
|
|
2406
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC10eXBlc2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxLQUFLLElBQUksVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ2pELE9BQU8sRUFBQyxLQUFLLElBQUksWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFFLFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQ3hFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM3RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0NBQWdDLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFB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TSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDakcsT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDdEYsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7UUFDMUUsT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsMkNBQTJDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDMUssQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUV0SCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksYUFBYSxJQUFJLFdBQVcsQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxTQUFTO1FBQy9ILFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxhQUFhLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxN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LENBQUE7QUFDM0YsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFO0lBQzVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFNO0lBRTlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLO2dCQUFFLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVE7b0JBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdEcsQ0FBQzthQUFNLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVE7WUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUN0RixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlIGFzIHBhcnNlQmFiZWx9IGZyb20gXCJAYmFiZWwvcGFyc2VyXCJcbmltcG9ydCB7cGFyc2UgYXMgcGFyc2VDb21tZW50fSBmcm9tIFwiY29tbWVudC1wYXJzZXJcIlxuaW1wb3J0IHttaXNzaW5nVHlwZSwgcGFyc2VGYWlsdXJlLCBTZW1hbnRpZm9sZERpYWdub3N0aWMsIHVuc3VwcG9ydGVkU3ludGF4fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2Jsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5fSBmcm9tIFwiLi4vc2VtYW50aWMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge2xvY2F0aW9uRnJvbU9mZnNldHMsIG1vZHVsZUxvY2F0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHt3aXRoQWRhcHRlZE9wZXJhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiXG5pbXBvcnQge3dpdGhQYXJzZXJSYW5nZXN9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzLCBzY2FsYXJUeXBlfSBmcm9tIFwiLi4vc2VtYW50aWMvc2NhbGFycy5qc1wiXG5pbXBvcnQge2lzVGFzazAzNFJlc291cmNlUHJvYmV9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHtoYXNFeGFjdEVmZmVjdFN1cHBvcnR9IGZyb20gXCIuLi9iYWNrZW5kcy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7cmVxdWlyZVNvdXJjZVJldHVyblR5cGUsIHJlcXVpcmVTb3VyY2VTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7ZG9jdW1lbnRlZFZhbHVlVHlwZSwgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlLCBpdGVyYXRpb25CaW5kaW5nVHlwZSwgaXRlcmF0aW9uT3BlcmFuZFR5cGUsIGtub3duQ2FsbFJldHVyblR5cGUsIGxpc3RUeXBlLCBtYXBUeXBlLCBvcHRpb25hbFR5cGUsIG9yZGVyZWRNYXBUeXBlRnJvbU1hcCwgb3duZWRSZWZlcmVuY2VUeXBlLCBvd25lZFJlc291cmNlVHlwZSwgcHJlc2VydmVzR2VuZXJpY09wdGlvbmFsRXZpZGVuY2UsIHJlY29yZFR5cGUsIHJlZmVyZW5jZVR5cGUsIHR5cGVWYXJpYWJsZX0gZnJvbSBcIi4vdHlwZXMuanNcIlxuXG4vKiogQHR5cGVkZWYge05vbk51bGxhYmxlPGltcG9ydChcIkBiYWJlbC9wYXJzZXJcIikuUGFyc2VSZXN1bHQ8aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZpbGU+W1widG9rZW5zXCJdPltudW1iZXJdfSBCYWJlbFRva2VuICovXG4vKiogQHR5cGVkZWYge3tieVN0YXJ0OiBNYXA8bnVtYmVyLCBCYWJlbFRva2VuPiwgdG9rZW5zOiBCYWJlbFRva2VuW119fSBCYWJlbFRva2VuSW5kZXggKi9cbi8qKiBAdHlwZWRlZiB7e25hbWU6IHN0cmluZywgbmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGFyYW1ldGVyczogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW10sIHJldHVyblR5cGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufX0gSmF2YVNjcmlwdEZ1bmN0aW9uU2lnbmF0dXJlICovXG4vKiogQHR5cGVkZWYge3tiaW5kaW5nczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5kaW5nVHlwZT4sIGNsYXNzZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCBjdXJyZW50Q2xhc3M/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uLCBlcnJvcnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBlcnJvck5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+LCBsZXhpY2FsVmFsdWVOYW1lcz86IFNldDxzdHJpbmc+LCBvcmRlcmVkTWFwRGVjbGFyYXRpb25zPzogU2V0PG9iamVjdD4sIHJlY29yZE5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj4sIHZhbHVlUmVjb3JkTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59fSBKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHQgKi9cblxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgQmFiZWxUb2tlbkluZGV4Pn0gKi9cbmNvbnN0IG5vZGVUb2tlbnMgPSBuZXcgV2Vha01hcCgpXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1xuICBcIl9fZGVmaW5lR2V0dGVyX19cIiwgXCJfX2RlZmluZVNldHRlcl9fXCIsIFwiX19sb29rdXBHZXR0ZXJfX1wiLCBcIl9fbG9va3VwU2V0dGVyX19cIiwgXCJfX3Byb3RvX19cIiwgXCJjb25zdHJ1Y3RvclwiLFxuICBcImhhc093blByb3BlcnR5XCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJ0b1N0cmluZ1wiLCBcInZhbHVlT2ZcIlxuXSlcbmNvbnN0IGJhYmVsQmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXSxcbiAgW1wiPT09XCIsIFwiRXF1YWxcIl0sXG4gIFtcIiE9PVwiLCBcIk5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sXG4gIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLFxuICBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sXG4gIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdXG5dKVxuXG4vKipcbiAqIFJldHVybnMgYSBzb3VyY2UgbG9jYXRpb24gZm9yIGEgQmFiZWwgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9IG5vZGUgLSBCYWJlbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gTm9ybWFsaXplZCBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKHR5cGVvZiBub2RlLnN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIG5vZGUuZW5kICE9IFwibnVtYmVyXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgc291cmNlIG9mZnNldHMgZm9yICR7bm9kZS50eXBlfS5gKVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgbm9kZS5zdGFydCwgbm9kZS5lbmQpXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaWRlbnRpZmllciBzcGVsbGluZyByYXRoZXIgdGhhbiBhIHRyYWlsaW5nIFR5cGVTY3JpcHQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXJ9IG5vZGUgLSBQYXJzZXIgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IElkZW50aWZpZXIgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZS5zdGFydCAhPSBcIm51bWJlclwiKSB0aHJvdyBuZXcgRXJyb3IoXCJCYWJlbCBvbWl0dGVkIGFuIGlkZW50aWZpZXIgc3RhcnQgb2Zmc2V0LlwiKVxuICBjb25zdCB0b2tlbiA9IG5vZGVUb2tlbnMuZ2V0KG5vZGUpPy5ieVN0YXJ0LmdldChub2RlLnN0YXJ0KVxuXG4gIGlmICghdG9rZW4gfHwgdG9rZW4udHlwZS5sYWJlbCAhPSBcIm5hbWVcIikgdGhyb3cgbmV3IEVycm9yKGBCYWJlbCBvbWl0dGVkIHRoZSBpZGVudGlmaWVyIHRva2VuIGZvciAnJHtub2RlLm5hbWV9Jy5gKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpXG59XG5cbi8qKlxuICogTG9jYXRlcyBvbmUgQmFiZWwgdG9rZW4gd2l0aGluIHBhcnNlci1ub2RlIGJvdW5kYXJpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSBvd25lciAtIFRva2VuLW93bmluZyBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIEV4YWN0IHRva2VuIHNwZWxsaW5nLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0T2Zmc2V0IC0gSW5jbHVzaXZlIGJvdW5kYXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZE9mZnNldCAtIEV4Y2x1c2l2ZSBib3VuZGFyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IHRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbkxvY2F0aW9uKG93bmVyLCB2YWx1ZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCB0b2tlbnMgPSBub2RlVG9rZW5zLmdldChvd25lcik/LnRva2VucyA/PyBbXVxuICBsZXQgbG93ID0gMFxuICBsZXQgaGlnaCA9IHRva2Vucy5sZW5ndGhcblxuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMilcblxuICAgIGlmICh0b2tlbnNbbWlkZGxlXS5zdGFydCA8IHN0YXJ0T2Zmc2V0KSBsb3cgPSBtaWRkbGUgKyAxXG4gICAgZWxzZSBoaWdoID0gbWlkZGxlXG4gIH1cbiAgbGV0IHRva2VuXG5cbiAgZm9yIChsZXQgaW5kZXggPSBsb3c7IGluZGV4IDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaW5kZXhdLnN0YXJ0IDwgZW5kT2Zmc2V0OyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gdG9rZW5zW2luZGV4XVxuXG4gICAgaWYgKGNhbmRpZGF0ZS5lbmQgPD0gZW5kT2Zmc2V0ICYmIChjYW5kaWRhdGUudmFsdWUgPT0gdmFsdWUgfHwgY2FuZGlkYXRlLnR5cGUubGFiZWwgPT0gdmFsdWUpKSB7XG4gICAgICB0b2tlbiA9IGNhbmRpZGF0ZVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgdG9rZW4gJyR7dmFsdWV9JyBiZXR3ZWVuICR7c3RhcnRPZmZzZXR9IGFuZCAke2VuZE9mZnNldH0uYClcblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCB0b2tlbi5zdGFydCwgdG9rZW4uZW5kKVxufVxuXG4vKipcbiAqIExvY2F0ZXMgYSBjb21tZW50LXBhcnNlciB0b2tlbiBpbnNpZGUgYSBCYWJlbC1vd25lZCBkb2MgY29tbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9ja30gY29tbWVudCAtIEJhYmVsIGRvYyBjb21tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJjb21tZW50LXBhcnNlclwiKS5TcGVjfSB0YWcgLSBQYXJzZWQgZG9jIHRhZy5cbiAqIEBwYXJhbSB7XCJuYW1lXCIgfCBcInR5cGVcIn0gZmllbGQgLSBUb2tlbiBmaWVsZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IHRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBmaWVsZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsaW5lID0gdGFnLnNvdXJjZVswXVxuXG4gIGlmICh0eXBlb2YgY29tbWVudC5zdGFydCAhPSBcIm51bWJlclwiIHx8ICFsaW5lKSB0aHJvdyBuZXcgRXJyb3IoYENvbW1lbnQgcGFyc2VyIG9taXR0ZWQgdGhlIEAke3RhZy50YWd9IHNvdXJjZSB0b2tlbi5gKVxuXG4gIGxldCBsaW5lU3RhcnQgPSBjb21tZW50LnN0YXJ0XG5cbiAgZm9yIChsZXQgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lLm51bWJlcjsgbGluZU51bWJlcisrKSB7XG4gICAgd2hpbGUgKGxpbmVTdGFydCA8IHNvdXJjZS5sZW5ndGggJiYgc291cmNlW2xpbmVTdGFydF0gIT0gXCJcXHJcIiAmJiBzb3VyY2VbbGluZVN0YXJ0XSAhPSBcIlxcblwiKSBsaW5lU3RhcnQrK1xuICAgIGlmIChzb3VyY2VbbGluZVN0YXJ0XSA9PSBcIlxcclwiICYmIHNvdXJjZVtsaW5lU3RhcnQgKyAxXSA9PSBcIlxcblwiKSBsaW5lU3RhcnQgKz0gMlxuICAgIGVsc2UgbGluZVN0YXJ0KytcbiAgfVxuXG4gIGNvbnN0IG9yZGVyZWRGaWVsZHMgPSBbXCJzdGFydFwiLCBcImRlbGltaXRlclwiLCBcInBvc3REZWxpbWl0ZXJcIiwgXCJ0YWdcIiwgXCJwb3N0VGFnXCIsIFwidHlwZVwiLCBcInBvc3RUeXBlXCIsIFwibmFtZVwiXVxuICBjb25zdCBmaWVsZEluZGV4ID0gb3JkZXJlZEZpZWxkcy5pbmRleE9mKGZpZWxkKVxuICBsZXQgc3RhcnQgPSBsaW5lU3RhcnQgKyBvcmRlcmVkRmllbGRzLnNsaWNlKDAsIGZpZWxkSW5kZXgpLnJlZHVjZSgobGVuZ3RoLCBrZXkpID0+XG4gICAgbGVuZ3RoICsgbGluZS50b2tlbnNbLyoqIEB0eXBlIHtrZXlvZiB0eXBlb2YgbGluZS50b2tlbnN9ICovIChrZXkpXS5sZW5ndGgsIDApXG4gIGNvbnN0IHRva2VuID0gbGluZS50b2tlbnNbZmllbGRdXG4gIGxldCBsZW5ndGggPSB0b2tlbi5sZW5ndGhcblxuICBpZiAoZmllbGQgPT0gXCJ0eXBlXCIgJiYgdGFnLnR5cGUpIHtcbiAgICBjb25zdCBuZXN0ZWRPZmZzZXQgPSB0b2tlbi5pbmRleE9mKHRhZy50eXBlKVxuXG4gICAgaWYgKG5lc3RlZE9mZnNldCA8IDApIHRocm93IG5ldyBFcnJvcihgQ29tbWVudCBwYXJzZXIgb21pdHRlZCB0aGUgQCR7dGFnLnRhZ30gdHlwZSBzcGVsbGluZy5gKVxuICAgIHN0YXJ0ICs9IG5lc3RlZE9mZnNldFxuICAgIGxlbmd0aCA9IHRhZy50eXBlLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBgTWFwYCByZXNvbHZlcyB0byB0aGUgbmF0aXZlIGludHJpbnNpYyBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG5hdGl2ZSBNYXAgY29uc3RydWN0aW9uIGlzIHVuc2hhZG93ZWQuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSB7XG4gIHJldHVybiAhY29udGV4dC5iaW5kaW5ncy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQubGV4aWNhbFZhbHVlTmFtZXM/LmhhcyhcIk1hcFwiKSAmJlxuICAgICFjb250ZXh0LmZ1bmN0aW9ucy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoXCJNYXBcIilcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBCYWJlbCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIEJhYmVsIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IFtjb250ZXh0XSAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBFeHBsaWNpdCBjb250ZXh0dWFsIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogbmV3IE1hcCgpLCBlcnJvcnM6IG5ldyBNYXAoKSwgZXJyb3JOYW1lczogbmV3IE1hcCgpLCBmdW5jdGlvbnM6IG5ldyBNYXAoKSwgcmVjb3JkTmFtZXM6IG5ldyBNYXAoKSwgcmVjb3JkczogbmV3IE1hcCgpLCB2YWx1ZVJlY29yZE5hbWVzOiBuZXcgTWFwKCl9LCBleHBlY3RlZFR5cGUsIHByZXNlcnZlT3B0aW9uYWwgPSBmYWxzZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5uYW1lID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5kZWZpbmVkIGFic2VuY2UgdmFsdWVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiTnVsbExpdGVyYWxcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsTm9uZVwiKSwgbG9jYXRpb259LCB7YWJzZW5jZTogbG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAoa25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB1bmRlZmluZWQsIHRydWUpXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsU29tZVwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUudmFsdWVUeXBlKVxuICAgIH0sIHtzb21lOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTnVsbExpdGVyYWxcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm51bGwgb3V0c2lkZSBhbiBleHBsaWNpdCBvcHRpb25hbCBjb250ZXh0XCIsIGxvY2F0aW9uKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJUU05vbk51bGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gY29udmVydEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgIGlmIChsYW5ndWFnZSAhPSBcInR5cGVzY3JpcHRcIiB8fCBleHByZXNzaW9uLmtpbmQgIT0gXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub24tbnVsbCBhc3NlcnRpb24gb3RoZXIgdGhhbiBNYXAuZ2V0IHJlc3VsdFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZXhwcmVzc2lvbi5sb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgcmV0dXJuIGV4cHJlc3Npb25cbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBuYW1lOiBub2RlLm5hbWV9LCB7XG4gICAgICBuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgaWYgKCFwcmVzZXJ2ZU9wdGlvbmFsICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUubmFtZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsVW53cmFwXCIpLCBsb2NhdGlvbiwgb3BlcmFuZDogaWRlbnRpZmllcn0sIHt1bndyYXA6IGxvY2F0aW9ufSlcbiAgICB9XG5cbiAgICByZXR1cm4gaWRlbnRpZmllclxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmVjZWl2ZXIgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sXG4gICAgICB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOdW1lcmljTGl0ZXJhbFwiKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihub2RlLnZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9IFwiYm9vbGVhblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBib29sZWFuIGxpdGVyYWwgdmFsdWVcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQm9vbGVhbkxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogbm9kZS52YWx1ZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhub2RlLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJBcnJheUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IGV4cGVjdGVkVHlwZS5lbGVtZW50VHlwZSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGVsZW1lbnRzID0gbm9kZS5lbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzcGFyc2UgYXJyYXkgaG9sZVwiLCBhcnJheUhvbGVMb2NhdGlvbihub2RlLCBpbmRleCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYXJyYXkgc3ByZWFkXCIsIG5vZGVMb2NhdGlvbihlbGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGVsZW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBlbGVtZW50VHlwZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2VsZW1lbnRzLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSwgbG9jYXRpb259LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUuY2FsbGVlLm5hbWUgPT0gXCJNYXBcIikge1xuICAgIGlmICghbmF0aXZlTWFwQXZhaWxhYmxlKGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic2hhZG93ZWQgTWFwIGNvbnN0cnVjdG9yXCIsIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJNYXAgdXNlZCBhcyBhIHN0cnVjdHVyYWwgcmVjb3JkIHN1YnN0aXR1dGVcIiwgbG9jYXRpb24pXG4gICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cyB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJnZW5lcmljIG9yIGludmFsaWQgTWFwIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKCFpbml0aWFsaXplcikgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZW50cmllczogW10sXG4gICAgICBraW5kOiBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICAgID8gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICAgICAgOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICAgIGlmIChpbml0aWFsaXplci50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGluaXRpYWxpemVyLnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgaW5pdGlhbGl6ZXIudHlwZSwgbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGluaXRpYWxpemVyLnR5cGUgIT0gXCJBcnJheUV4cHJlc3Npb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCBpbml0aWFsaXplciBvdGhlciB0aGFuIGFuIGVudHJ5IGFycmF5XCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICA/IGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUgOiB1bmRlZmluZWRcbiAgICBjb25zdCBlbnRyaWVzID0gaW5pdGlhbGl6ZXIuZWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic3BhcnNlIG1hcCBpbml0aWFsaXplclwiLCBhcnJheUhvbGVMb2NhdGlvbihpbml0aWFsaXplciwgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPSBcIkFycmF5RXhwcmVzc2lvblwiIHx8IGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCBlbnRyeSBvdGhlciB0aGFuIGEga2V5L3ZhbHVlIHBhaXJcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gZWxlbWVudC5lbGVtZW50c1xuXG4gICAgICBpZiAoIWtleSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBtYXAga2V5XCIsIGFycmF5SG9sZUxvY2F0aW9uKGVsZW1lbnQsIDAsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBtYXAgdmFsdWVcIiwgYXJyYXlIb2xlTG9jYXRpb24oZWxlbWVudCwgMSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoa2V5LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgdmFsdWUudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikge1xuICAgICAgICBjb25zdCBzcHJlYWQgPSBrZXkudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiA/IGtleSA6IHZhbHVlXG5cbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBlbnRyeSBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKHNwcmVhZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAoa2V5LnR5cGUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBrZXkgb3RoZXIgdGhhbiBhIHN0cmluZyBsaXRlcmFsXCIsIG5vZGVMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5RXhwcmVzc2lvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihrZXksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtleToga2V5RXhwcmVzc2lvbixcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbih2YWx1ZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBrZXlFeHByZXNzaW9uLmxvY2F0aW9uLFxuICAgICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihlbGVtZW50LCBcIixcIiwga2V5LmVuZCA/PyBlbGVtZW50LnN0YXJ0ID8/IDAsIHZhbHVlLnN0YXJ0ID8/IGVsZW1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzLFxuICAgICAga2luZDogZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgICA/IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpXG4gICAgICAgIDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBjb250ZXh0LnZhbHVlUmVjb3JkTmFtZXMuaGFzKG5vZGUuY2FsbGVlLm5hbWUpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5nZXQobm9kZS5jYWxsZWUubmFtZSkpXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMgfHwgbm9kZS50eXBlUGFyYW1ldGVycykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImdlbmVyaWMgcmVmZXJlbmNlIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuICAgICAgY29uc3QgY2xhc3NMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVmZXJlbmNlOiBkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgPT0gXCJvd25lZFJlc291cmNlXCJcbiAgICAgICAgICA/IG93bmVkUmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgY2xhc3NMb2NhdGlvbilcbiAgICAgICAgICA6IHJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGNsYXNzTG9jYXRpb24pfSwge2NsYXNzOiBjbGFzc0xvY2F0aW9ufSlcbiAgICB9XG4gICAgY29uc3Qgc291cmNlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzPy5wYXJhbXMgPz8gbm9kZS50eXBlUGFyYW1ldGVycz8ucGFyYW1zXG4gICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PiBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICBhcmd1bWVudCxcbiAgICAgIGBSZWNvcmQgJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGFwcGxpY2F0aW9uYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnNcbiAgICApKSA/PyAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmIGV4cGVjdGVkVHlwZS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uLmlkID8gZXhwZWN0ZWRUeXBlLmFyZ3VtZW50cyA6IHVuZGVmaW5lZClcbiAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHR5cGVBcmd1bWVudHMsIGluZGV4KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiBhcmd1bWVudHNfLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNvcmQ6IHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSksIHR5cGVBcmd1bWVudHMpXG4gICAgfSwge3JlY29yZDogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLm9wdGlvbmFsICYmIG5vZGUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiKSB7XG4gICAgaWYgKCFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5JZGVudGlmaWVyIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHByb3BlcnR5XG5cbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSBwcm9wZXJ0eSA9IG5vZGUucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHByb3BlcnR5ID0gbm9kZS5wcm9wZXJ0eVxuICAgICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkIGFjY2Vzc1wiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGZpZWxkID0gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gcHJvcGVydHkubmFtZSlcblxuICAgICAgaWYgKCFmaWVsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgdW5rbm93biBwcml2YXRlIGZpZWxkICcke3Byb3BlcnR5Lm5hbWV9J2AsIGlkZW50aWZpZXJMb2NhdGlvbihwcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRSZWFkXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24ocHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicHJpdmF0ZSByZWZlcmVuY2UtY2xhc3MgZmllbGQgYWNjZXNzXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIW5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGUucHJvcGVydHkubmFtZSA9PSBcIm1lc3NhZ2VcIiAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm9iamVjdC5uYW1lKT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgICBjb25zdCByZWNlaXZlckxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUub2JqZWN0LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yTWVzc2FnZVJlYWRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiByZWNlaXZlckxvY2F0aW9uLCBuYW1lOiBub2RlLm9iamVjdC5uYW1lfSwge1xuICAgICAgICAgIG5hbWU6IHJlY2VpdmVyTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH0sIHttZW1iZXI6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICBpZiAoa25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImNvbXB1dGVkIHJlY29yZCBtZW1iZXIgYWNjZXNzXCIsIG5vZGVMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUucHJvcGVydHkudHlwZSwgbG9jYXRpb24pXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgaW5kZXg6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucHJvcGVydHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICAgIH0sIHtcbiAgICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCJbXCIsIG5vZGUub2JqZWN0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucHJvcGVydHkuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgW1wibGVuZ3RoXCIsIFwic2l6ZVwiXS5pbmNsdWRlcyhub2RlLnByb3BlcnR5Lm5hbWUpKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBmaWVsZDogbm9kZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgY29sbGVjdGlvbktpbmQ6IC8qKiBAdHlwZSB7XCJsaXN0XCIgfCBcIm1hcFwifSAqLyAobm9kZS5wcm9wZXJ0eS5uYW1lID09IFwibGVuZ3RoXCIgPyBcImxpc3RcIiA6IFwibWFwXCIpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7b3BlcmF0b3I6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZmllbGQ6IG5vZGUucHJvcGVydHkubmFtZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJUZW1wbGF0ZUxpdGVyYWxcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltdfSAqL1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IFtdXG5cbiAgICAgIG5vZGUucXVhc2lzLmZvckVhY2goKHF1YXNpLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHF1YXNpLnZhbHVlLmNvb2tlZCAhPSBcInN0cmluZ1wiIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMocXVhc2kudmFsdWUuY29va2VkKSkge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKHF1YXNpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWFzaUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHF1YXNpLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICAgIGlmIChxdWFzaS52YWx1ZS5jb29rZWQubGVuZ3RoID4gMCkgb3JkZXJlZC5wdXNoKHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlN0cmluZ0xpdGVyYWxcIiksIGxvY2F0aW9uOiBxdWFzaUxvY2F0aW9uLCB2YWx1ZTogcXVhc2kudmFsdWUuY29va2VkfSwge2xpdGVyYWw6IHF1YXNpTG9jYXRpb259KSlcbiAgICAgICAgaWYgKGluZGV4IDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBvcmRlcmVkLnB1c2goY29udmVydEV4cHJlc3Npb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gKi8gKG5vZGUuZXhwcmVzc2lvbnNbaW5kZXhdKSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNjYWxhclR5cGUoXCJzdHJpbmdcIikpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKG9yZGVyZWQubGVuZ3RoID09IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnRlcnBvbGF0ZWQgc3RyaW5nXCIsIGxvY2F0aW9uKVxuXG4gICAgICBsZXQgbG93ZXJlZCA9IG9yZGVyZWRbMF1cblxuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG9yZGVyZWQuc2xpY2UoMSkpIHtcbiAgICAgICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih7XG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmluYXJ5RXhwcmVzc2lvblwiKSxcbiAgICAgICAgICBsZWZ0OiBsb3dlcmVkLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJpZ2h0OiBwYXJ0XG4gICAgICAgIH0sIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChcIlN0cmluZ0NvbmNhdFwiKSlcblxuICAgICAgICBsb3dlcmVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG93ZXJlZFxuICAgIH1cblxuICAgIGNvbnN0IHF1YXNpID0gbm9kZS5xdWFzaXNbMF1cblxuICAgIGlmICh0eXBlb2YgcXVhc2kudmFsdWUuY29va2VkICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhxdWFzaS52YWx1ZS5jb29rZWQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IHF1YXNpLnZhbHVlLmNvb2tlZH0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhbHRlcm5hdGU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYWx0ZXJuYXRlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudGVzdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uc2VxdWVudDogY29udmVydEV4cHJlc3Npb24obm9kZS5jb25zZXF1ZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtcbiAgICAgIGFsdGVybmF0ZTogbm9kZUxvY2F0aW9uKG5vZGUuYWx0ZXJuYXRlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbG9uOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwiOlwiLCBub2RlLmNvbnNlcXVlbnQuZW5kID8/IG5vZGUudGVzdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLmFsdGVybmF0ZS5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbmRpdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUudGVzdCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25zZXF1ZW50OiBub2RlTG9jYXRpb24obm9kZS5jb25zZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwiP1wiLCBub2RlLnRlc3QuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5jb25zZXF1ZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIFtcIiFcIiwgXCItXCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kXG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIG5vZGUub3BlcmF0b3IgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTG9naWNhbEV4cHJlc3Npb25cIiAmJiBbXCImJlwiLCBcInx8XCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obm9kZS5sZWZ0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJpZ2h0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBub2RlLm9wZXJhdG9yLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pLCBub2RlLm9wZXJhdG9yID09IFwiJiZcIiA/IFwiQW5kXCIgOiBcIk9yXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBub2RlLm9wZXJhdG9yID09IFwiIT09XCIgJiYgbm9kZS5sZWZ0LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBub2RlLnJpZ2h0LnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovIChcbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUubGVmdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICApXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxJc1ByZXNlbnRcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBiYWJlbEJpbmFyeU9wZXJhdGlvbnMuaGFzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgaWYgKG5vZGUubGVmdC50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUubGVmdC50eXBlLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGxlZnQgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmxlZnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHJpZ2h0ID0gY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0LFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodFxuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIG5vZGUub3BlcmF0b3IsIG5vZGUubGVmdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLnJpZ2h0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChiYWJlbEJpbmFyeU9wZXJhdGlvbnMuZ2V0KG5vZGUub3BlcmF0b3IpKSlcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQmluYXJ5RXhwcmVzc2lvblwiICYmIFtcIj09XCIsIFwiIT1cIl0uaW5jbHVkZXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBjb2VyY2l2ZSBlcXVhbGl0eSAke25vZGUub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgaWYgKG5vZGUub3B0aW9uYWwgfHwgbm9kZS5jYWxsZWUub3B0aW9uYWwgfHwgbm9kZS50eXBlQXJndW1lbnRzIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJvcHRpb25hbCBvciBnZW5lcmljIGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChub2RlLmNhbGxlZS5uYW1lKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG5vZGUuY2FsbGVlLm5hbWUsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgIGNhbGxlZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiAhbm9kZS5vcHRpb25hbCAmJiAhbm9kZS50eXBlQXJndW1lbnRzICYmICFub2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgbm9kZS5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jYWxsZWUuY29tcHV0ZWQgJiYgIW5vZGUuY2FsbGVlLm9wdGlvbmFsICYmXG4gICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIgfHwgcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZClcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lXG4gICAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbj8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1ldGhvZE5hbWUpXG4gICAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYXJndW1lbnQudHlwZSwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIG1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sXG4gICAgICAgIG1ldGhvZDogbWV0aG9kPy5pZCA/PyBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24obm9kZS5jYWxsZWUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCl9LFxuICAgICAge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgIW5vZGUub3B0aW9uYWwgJiYgIW5vZGUudHlwZUFyZ3VtZW50cyAmJiAhbm9kZS50eXBlUGFyYW1ldGVycyAmJlxuICAgIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmICFub2RlLmNhbGxlZS5vcHRpb25hbCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwLmdldCBhcmd1bWVudCBjb3VudFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBrZXkgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKGtleS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGtleS50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGtleS50eXBlLCBub2RlTG9jYXRpb24oa2V5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmNhbGxlZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24oa2V5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwicHJvdmVuXCIpXG4gICAgfSwge29wZXJhdG9yOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmx5IGV4cHJlc3Npb24gcmVzdWx0IHR5cGVzIGFscmVhZHkgZXN0YWJsaXNoZWQgYnkgZXhwbGljaXQgbW9kdWxlXG4gKiBzaWduYXR1cmVzIGFuZCBjb2xsZWN0aW9uIGJpbmRpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBLbm93biByZXN1bHQgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZS50eXBlID09IFwiVFNOb25OdWxsRXhwcmVzc2lvblwiKSByZXR1cm4ga25vd25FeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24sIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZS50eXBlID09IFwiSWRlbnRpZmllclwiKSByZXR1cm4gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUuY2FsbGVlLm5hbWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIG5vZGUuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCJcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpKVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmdldChub2RlLmNhbGxlZS5uYW1lKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uPy5pZCkge1xuICAgICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsXG4gICAgICAgIGtpbmQ6IGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIiA/IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIgOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgIGNvbnN0IHNvdXJjZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cz8ucGFyYW1zID8/IG5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtc1xuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PlxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG5cbiAgICAgIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiVGhpc0V4cHJlc3Npb25cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcz8uaWQpIHtcbiAgICByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IGNvbnRleHQuY3VycmVudENsYXNzLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNhbGxlZS5jb21wdXRlZCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBtZXRob2ROYW1lKT8ucmV0dXJuVHlwZVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnByb3BlcnR5LmlkLm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBuYW1lKT8udHlwZVxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG5cbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbmFtZSk/LnR5cGVcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBub2RlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlciA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBtZW1iZXJOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG4gICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbWVtYmVyTmFtZSkgPz8gLTFcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbiA/IGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgcmVjZWl2ZXIuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIG5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHJldHVybiBjb2xsZWN0aW9uVHlwZS52YWx1ZVR5cGVcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgdmFsdWUgdHlwZSBwcm9kdWNlZCBieSB0aGUgZnJvbnRlbmQncyBpbXBsaWNpdCBvcHRpb25hbC1iaW5kaW5nIHVud3JhcC5cbiAqIFNlbWFudGljIHZhbGlkYXRpb24gc2VwYXJhdGVseSBwcm92ZXMgdGhhdCB0aGUgdW53cmFwIG9jY3VycyBvbmx5IG9uIGEgcHJlc2VudCBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBDb252ZXJ0ZWQgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiBub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgdHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gdHlwZS52YWx1ZVR5cGUgOiB0eXBlXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHN0YWJsZSBwYXJzZXItYm91bmRlZCBsb2NhdGlvbiBmb3Igb25lIGFic2VudCBhcnJheSBlbGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQXJyYXlFeHByZXNzaW9ufSBub2RlIC0gQXJyYXkgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE1pc3NpbmcgZWxlbWVudCBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEhvbGUgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGFycmF5SG9sZUxvY2F0aW9uKG5vZGUsIGluZGV4LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gbm9kZS5lbGVtZW50cy5zbGljZSgwLCBpbmRleCkuZmluZExhc3QoKGVsZW1lbnQpID0+IGVsZW1lbnQgIT0gbnVsbClcbiAgY29uc3QgbmV4dCA9IG5vZGUuZWxlbWVudHMuc2xpY2UoaW5kZXggKyAxKS5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50ICE9IG51bGwpXG4gIGNvbnN0IHN0YXJ0ID0gcHJldmlvdXM/LmVuZCA/PyAobm9kZS5zdGFydCA/PyAwKSArIDFcbiAgY29uc3QgZW5kID0gbmV4dD8uc3RhcnQgPz8gTWF0aC5tYXgoc3RhcnQgKyAxLCAobm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCkgLSAxKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHN0YXJ0LCBNYXRoLm1heChzdGFydCArIDEsIE1hdGgubWluKGVuZCwgc291cmNlLmxlbmd0aCkpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIHJldHVybiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgLi4uKG5vZGUuYXJndW1lbnQgPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oXG4gICAgICBub2RlLmFyZ3VtZW50LFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIgPyB1bmRlZmluZWQgOiBjb250ZXh0LnJldHVyblR5cGVcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgc3VwcG9ydGVkIGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50fSBTZW1hbnRpYyBsb2NhbCBvciBwcml2YXRlLWZpZWxkIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsU3RhdGVtZW50KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIGlmICghW1wibGV0XCIsIFwiY29uc3RcIl0uaW5jbHVkZXMobm9kZS5raW5kKSB8fCBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT0gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgJHtub2RlLmtpbmR9IGRlY2xhcmF0aW9uYCwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IG5vZGUuZGVjbGFyYXRpb25zWzBdXG4gICAgY29uc3QgZGVjbGFyYXRvckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGRlY2xhcmF0b3IuaWQudHlwZSwgZGVjbGFyYXRvckxvY2F0aW9uKVxuICAgIGlmICghZGVjbGFyYXRvci5pbml0KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5pbml0aWFsaXplZCBkZWNsYXJhdGlvblwiLCBkZWNsYXJhdG9yTG9jYXRpb24pXG5cbiAgICBsZXQgdHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgTG9jYWwgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBkZWNsYXJhdG9yTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgICA6IGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgZGVjbGFyYXRvci5pZC5uYW1lLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuXG4gICAgaWYgKG5vZGUua2luZCA9PSBcImNvbnN0XCIgJiYgdHlwZS5raW5kID09IFwiTWFwVHlwZVwiICYmIGNvbnRleHQub3JkZXJlZE1hcERlY2xhcmF0aW9ucz8uaGFzKGRlY2xhcmF0b3IpICYmXG4gICAgICBkZWNsYXJhdG9yLmluaXQudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBkZWNsYXJhdG9yLmluaXQuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIGRlY2xhcmF0b3IuaW5pdC5jYWxsZWUubmFtZSA9PSBcIk1hcFwiICYmIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSkge1xuICAgICAgdHlwZSA9IG9yZGVyZWRNYXBUeXBlRnJvbU1hcCh0eXBlLCBkZWNsYXJhdG9yTG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyOiBjb252ZXJ0RXhwcmVzc2lvbihkZWNsYXJhdG9yLmluaXQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB0eXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG5vZGUua2luZCA9PSBcImxldFwiLFxuICAgICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGRlY2xhcmF0b3IsIFwiPVwiLCBkZWNsYXJhdG9yLmlkLmVuZCA/PyBkZWNsYXJhdG9yLnN0YXJ0ID8/IDAsIGRlY2xhcmF0b3IuaW5pdC5zdGFydCA/PyBkZWNsYXJhdG9yLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChkZWNsYXJhdG9yLmlkLm5hbWUsIHR5cGUpXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBub2RlLmV4cHJlc3Npb25cbiAgICBjb25zdCB0YXJnZXRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoYXNzaWdubWVudC5vcGVyYXRvciAhPSBcIj1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgYXNzaWdubWVudCAke2Fzc2lnbm1lbnQub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFhc3NpZ25tZW50LmxlZnQuY29tcHV0ZWQgJiZcbiAgICAgIGFzc2lnbm1lbnQubGVmdC5vYmplY3QudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcHJvcGVydHlcblxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIGFzc2lnbm1lbnQubGVmdC5wcm9wZXJ0eS50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHlcbiAgICAgIGlmICghcHJvcGVydHkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZCBhc3NpZ25tZW50XCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuXG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7cHJvcGVydHkubmFtZX0nYCwgaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5sZWZ0Lm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oYXNzaWdubWVudCwgXCI9XCIsXG4gICAgICAgIGFzc2lnbm1lbnQubGVmdC5lbmQgPz8gYXNzaWdubWVudC5zdGFydCA/PyAwLCBhc3NpZ25tZW50LnJpZ2h0LnN0YXJ0ID8/IGFzc2lnbm1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFzc2lnbm1lbnQubGVmdC50eXBlLCB0YXJnZXRMb2NhdGlvbilcblxuICAgIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogdGFyZ2V0TG9jYXRpb24sIG5hbWU6IGFzc2lnbm1lbnQubGVmdC5uYW1lfSwge1xuICAgICAgbmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGFzc2lnbm1lbnQubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldChhc3NpZ25tZW50LmxlZnQubmFtZSlcbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0YXJnZXRcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihhc3NpZ25tZW50LCBcIj1cIiwgYXNzaWdubWVudC5sZWZ0LmVuZCA/PyBhc3NpZ25tZW50LnN0YXJ0ID8/IDAsIGFzc2lnbm1lbnQucmlnaHQuc3RhcnQgPz8gYXNzaWdubWVudC5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gaW1tZWRpYXRlbHkgYXNzb2NpYXRlZCBKYXZhU2NyaXB0IGxvY2FsIGBAdHlwZWAgdGFnLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVmFyaWFibGVEZWNsYXJhdGlvbn0gbm9kZSAtIExvY2FsIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NhbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSBub2RlLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQudHlwZSAhPSBcIkNvbW1lbnRCbG9ja1wiIHx8ICFjb21tZW50LnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBnYXAgPSBzb3VyY2Uuc2xpY2UoY29tbWVudC5lbmQgPz8gMCwgbm9kZS5zdGFydCA/PyAwKVxuXG4gIGlmICghL15cXHMqJC91LnRlc3QoZ2FwKSB8fCAoZ2FwLm1hdGNoKC9cXG4vZ3UpPy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXVxuICBjb25zdCB0YWdzID0gYmxvY2s/LnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0eXBlXCIpID8/IFtdXG5cbiAgY29uc3QgdGFnID0gdGFncy5sZW5ndGggPT0gMSA/IHRhZ3NbMF0gOiB1bmRlZmluZWRcblxuICByZXR1cm4gY29udmVydFR5cGUoXG4gICAgdGFnPy50eXBlLFxuICAgIFwiamF2YXNjcmlwdFwiLFxuICAgIGBMb2NhbCAnJHtuYW1lfSdgLFxuICAgIGxvY2F0aW9uLFxuICAgIHNvdXJjZSxcbiAgICB0YWcgPyBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcInR5cGVcIiwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbixcbiAgICByZWNvcmROYW1lcyxcbiAgICB0eXBlUGFyYW1ldGVyc1xuICApXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBpZiAobm9kZS50eXBlID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRJZihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVGhyb3dTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRUeXBlZFRocm93KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0V2hpbGUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIkZvck9mU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBub2RlLnR5cGUgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKG5vZGUubGFiZWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGxhYmVsZWQgJHtub2RlLnR5cGUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwifWAsXG4gICAgICBub2RlTG9jYXRpb24obm9kZS5sYWJlbCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3Qga2V5d29yZCA9IG5vZGUudHlwZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCJcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24obm9kZSwga2V5d29yZCwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IG5vZGUudHlwZSwgbG9jYXRpb259LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb24udHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgKG5vZGUuZXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgbm9kZS5leHByZXNzaW9uLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmV4cHJlc3Npb24uY2FsbGVlLmNvbXB1dGVkICYmXG4gICAgICBub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgICAgW1wiUmVmZXJlbmNlVHlwZVwiLCBcIk93bmVkUmVmZXJlbmNlVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoXG4gICAgICAgIGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kKSkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHByZXNzaW9uOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICApLFxuICAgICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHRocm93IG5ldyBEZWNsYXJlZEVycm9yKG1lc3NhZ2UpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRocm93U3RhdGVtZW50fSBub2RlIC0gQmFiZWwgdGhyb3cgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVkVGhyb3cobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50XG5cbiAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC50eXBlICE9IFwiTmV3RXhwcmVzc2lvblwiIHx8IGFyZ3VtZW50LmNhbGxlZS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgY29udGV4dC5iaW5kaW5ncy5oYXMoYXJndW1lbnQuY2FsbGVlLm5hbWUpIHx8ICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGFyZ3VtZW50LmNhbGxlZS5uYW1lKSB8fCBhcmd1bWVudC5hcmd1bWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICBhcmd1bWVudC5hcmd1bWVudHNbMF0udHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC5hcmd1bWVudHNbMF0udHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIiB8fFxuICAgIGFyZ3VtZW50LnR5cGVBcmd1bWVudHMgfHwgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidGhyb3cgb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBjb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGFyZ3VtZW50LmNhbGxlZS5uYW1lKSlcbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGFyZ3VtZW50LmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckNvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQuYXJndW1lbnRzWzBdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0aHJvd1wiLCBub2RlLnN0YXJ0ID8/IDAsIGFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgY2F0Y2ggd2l0aCB0aGUgY2Fub25pY2FsIGBpbnN0YW5jZW9mYCBndWFyZCBhbmQgZXhhY3QgcmV0aHJvdy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRyeVN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHRyeSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHNjYWxhciBvdXRwdXQgY2Fub25pY2FsaXplcyB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSBTZW1hbnRpYyBleGFjdCBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmZpbmFsaXplciB8fCAhbm9kZS5oYW5kbGVyIHx8IG5vZGUuaGFuZGxlci5wYXJhbT8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlLmhhbmRsZXIuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHJ5IHdpdGhvdXQgb25lIGV4cGxpY2l0IGd1YXJkZWQgY2F0Y2hcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgYmluZGluZyA9IG5vZGUuaGFuZGxlci5wYXJhbVxuICBjb25zdCBndWFyZCA9IG5vZGUuaGFuZGxlci5ib2R5LmJvZHlbMF1cblxuICBpZiAoIWd1YXJkIHx8IGd1YXJkLnR5cGUgIT0gXCJJZlN0YXRlbWVudFwiIHx8IGd1YXJkLmFsdGVybmF0ZSB8fCBndWFyZC50ZXN0LnR5cGUgIT0gXCJVbmFyeUV4cHJlc3Npb25cIiB8fFxuICAgIGd1YXJkLnRlc3Qub3BlcmF0b3IgIT0gXCIhXCIgfHwgZ3VhcmQudGVzdC5hcmd1bWVudC50eXBlICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQub3BlcmF0b3IgIT0gXCJpbnN0YW5jZW9mXCIgfHxcbiAgICBndWFyZC50ZXN0LmFyZ3VtZW50LmxlZnQudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBndWFyZC50ZXN0LmFyZ3VtZW50LmxlZnQubmFtZSAhPSBiaW5kaW5nLm5hbWUgfHxcbiAgICBndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC5uYW1lID09IGJpbmRpbmcubmFtZSB8fFxuICAgIGNvbnRleHQuYmluZGluZ3MuaGFzKGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSkgfHwgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC5uYW1lKSB8fFxuICAgIGd1YXJkLmNvbnNlcXVlbnQudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIgfHwgZ3VhcmQuY29uc2VxdWVudC5ib2R5Lmxlbmd0aCAhPSAxIHx8IGd1YXJkLmNvbnNlcXVlbnQuZGlyZWN0aXZlcy5sZW5ndGggPiAwIHx8XG4gICAgZ3VhcmQuY29uc2VxdWVudC5ib2R5WzBdLnR5cGUgIT0gXCJUaHJvd1N0YXRlbWVudFwiIHx8IGd1YXJkLmNvbnNlcXVlbnQuYm9keVswXS5hcmd1bWVudD8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgIGd1YXJkLmNvbnNlcXVlbnQuYm9keVswXS5hcmd1bWVudC5uYW1lICE9IGJpbmRpbmcubmFtZSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCB3aXRob3V0IGV4YWN0IGluc3RhbmNlb2YgZ3VhcmQgYW5kIHVubWF0Y2hlZCByZXRocm93XCIsIG5vZGVMb2NhdGlvbihndWFyZCA/PyBub2RlLmhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoY29udGV4dC5lcnJvck5hbWVzLmdldChndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0Lm5hbWUpKVxuICBjb25zdCBjYXVnaHRUeXBlTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24oZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpXG4gIH0sIHt0eXBlOiBjYXVnaHRUeXBlTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgY2F0Y2hDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gIGNhdGNoQ29udGV4dC5iaW5kaW5ncy5zZXQoYmluZGluZy5uYW1lLCBjYXRjaFR5cGUpXG4gIGNvbnN0IGNhdGNoU3RhdGVtZW50cyA9IG5vZGUuaGFuZGxlci5ib2R5LmJvZHkuc2xpY2UoMSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYmxvY2ssIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBjYXRjaEJpbmRpbmc6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihiaW5kaW5nLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGJpbmRpbmcsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgY2F0Y2hCb2R5OiBjb252ZXJ0QmxvY2soY2F0Y2hTdGF0ZW1lbnRzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjYXRjaENvbnRleHQsXG4gICAgICBub2RlTG9jYXRpb24obm9kZS5oYW5kbGVyLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICBjYXRjaFR5cGUsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtcbiAgICBjYXRjaDogdG9rZW5Mb2NhdGlvbihub2RlLmhhbmRsZXIsIFwiY2F0Y2hcIiwgbm9kZS5oYW5kbGVyLnN0YXJ0ID8/IDAsIGJpbmRpbmcuc3RhcnQgPz8gbm9kZS5oYW5kbGVyLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBndWFyZDogbm9kZUxvY2F0aW9uKGd1YXJkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0pXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGV4YWN0IGJsb2NrLWJvZGllZCBgZm9yIChjb25zdCB2YWx1ZSBvZiBsaXN0KWAgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZvck9mU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgZm9yLW9mIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgc2NhbGFyIG91dHB1dCBjYW5vbmljYWxpemVzIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuYXdhaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhc3luYyBmb3Itb2ZcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLmxlZnQudHlwZSAhPSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImZvci1vZiBhc3NpZ25tZW50IGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChub2RlLmxlZnQua2luZCAhPSBcImNvbnN0XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGAke25vZGUubGVmdC5raW5kfSBpdGVyYXRpb24gYmluZGluZ2AsIHRva2VuTG9jYXRpb24oXG4gICAgICBub2RlLmxlZnQsXG4gICAgICBub2RlLmxlZnQua2luZCxcbiAgICAgIG5vZGUubGVmdC5zdGFydCA/PyBub2RlLnN0YXJ0ID8/IDAsXG4gICAgICBub2RlLmxlZnQuZW5kID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZVxuICAgICkpXG4gIH1cbiAgaWYgKG5vZGUubGVmdC5kZWNsYXJhdGlvbnMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtdWx0aXBsZSBpdGVyYXRpb24gYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdXG5cbiAgaWYgKGRlY2xhcmF0b3IuaWQudHlwZSA9PSBcIkFycmF5UGF0dGVyblwiKSB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZGVjbGFyYXRvci5pZC5lbGVtZW50c1xuXG4gICAgaWYgKGRlY2xhcmF0b3IuaWQuZWxlbWVudHMubGVuZ3RoICE9IDIgfHwgIWtleSB8fCAhdmFsdWUgfHwga2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgdmFsdWUudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgZGVjbGFyYXRvci5pZC50eXBlQW5ub3RhdGlvbiB8fCBrZXkudHlwZUFubm90YXRpb24gfHwgdmFsdWUudHlwZUFubm90YXRpb24gfHwga2V5Lm9wdGlvbmFsIHx8IHZhbHVlLm9wdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiBiaW5kaW5nIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0b3IuaW5pdCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImluaXRpYWxpemVkIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAobm9kZS5ib2R5LnR5cGUgIT0gXCJCbG9ja1N0YXRlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZm9yLW9mIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5yaWdodCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5vcmRlcmVkIG1hcCBpdGVyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoIWNvbGxlY3Rpb25UeXBlIHx8IGNvbGxlY3Rpb25UeXBlLmtpbmQgIT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIFwiT3JkZXJlZCBtYXAgaXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBrZXlMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgdmFsdWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbih2YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBrZXlUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUua2V5VHlwZSwga2V5TG9jYXRpb24pXG4gICAgY29uc3QgdmFsdWVUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUudmFsdWVUeXBlLCB2YWx1ZUxvY2F0aW9uKVxuICAgIGNvbnN0IGtleUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IGtleUxvY2F0aW9uLCBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZToga2V5Lm5hbWUsIHR5cGU6IGtleVR5cGVcbiAgICB9LCB7bmFtZToga2V5TG9jYXRpb259KVxuICAgIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLCBsb2NhdGlvbjogdmFsdWVMb2NhdGlvbiwgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsIHR5cGU6IHZhbHVlVHlwZVxuICAgIH0sIHtuYW1lOiB2YWx1ZUxvY2F0aW9ufSlcbiAgICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXkubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWUubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICAgIGtleUJpbmRpbmcsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIHZhbHVlQmluZGluZ1xuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwib2ZcIiwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCxcbiAgICAgICAgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG4gIGlmIChkZWNsYXJhdG9yLmlkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgZGVjbGFyYXRvci5pZC50eXBlLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvci5pZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChkZWNsYXJhdG9yLmluaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbml0aWFsaXplZCBpdGVyYXRpb24gYmluZGluZ1wiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChub2RlLmJvZHkudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJmb3Itb2Ygd2l0aG91dCBibG9jayBib2R5XCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5yaWdodCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiB3aXRob3V0IGtleS92YWx1ZSBwYWlyIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmICghY29sbGVjdGlvblR5cGUgfHwgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIkxpc3RUeXBlXCIpIHtcbiAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIFwiSXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbmZlcnJlZFR5cGUgPSBjb2xsZWN0aW9uVHlwZS5lbGVtZW50VHlwZVxuICBjb25zdCBiaW5kaW5nVHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIGRlY2xhcmF0b3IuaWQudHlwZUFubm90YXRpb25cbiAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgSXRlcmF0aW9uIGJpbmRpbmcgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBiaW5kaW5nTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgIDogaXRlcmF0aW9uQmluZGluZ1R5cGUoaW5mZXJyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pXG4gIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbjogYmluZGluZ0xvY2F0aW9uLFxuICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgIHR5cGU6IGJpbmRpbmdUeXBlXG4gIH0sIHtuYW1lOiBiaW5kaW5nTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQoZGVjbGFyYXRvci5pZC5uYW1lLCBiaW5kaW5nVHlwZSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge1xuICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwib2ZcIiwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgQmFiZWwgYmxvY2sgb3Igbm9ybWFsaXplZCBzaW5nbGUtc3RhdGVtZW50IGJvZHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5CbG9ja1N0YXRlbWVudCB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gaW5wdXQgLSBQYXJzZXIgYmxvY2sgb3Igc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgZ2VuZXJhdGVkIHNjYWxhciBvdXRwdXQgbWF5IGNvbnRhaW4gc2lnbmVkIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW2xvY2F0aW9uXSAtIExvY2F0aW9uIGZvciBhIHN0YXRlbWVudC1hcnJheSBibG9jay5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgYmxvY2suXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCbG9jayhpbnB1dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCwgbG9jYXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBpbnB1dC5ib2R5XG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBBcnJheS5pc0FycmF5KGlucHV0KSA/IFtdIDogaW5wdXQuZGlyZWN0aXZlc1xuICBjb25zdCBibG9ja0xvY2F0aW9uID0gbG9jYXRpb24gPz8gbm9kZUxvY2F0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkJsb2NrU3RhdGVtZW50fSAqLyAoaW5wdXQpLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsZXhpY2FsVmFsdWVOYW1lcyA9IG5ldyBTZXQoY29udGV4dC5sZXhpY2FsVmFsdWVOYW1lcylcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKHN0YXRlbWVudC50eXBlICE9IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSBjb250aW51ZVxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRvciBvZiBzdGF0ZW1lbnQuZGVjbGFyYXRpb25zKSB7XG4gICAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlID09IFwiSWRlbnRpZmllclwiKSBsZXhpY2FsVmFsdWVOYW1lcy5hZGQoZGVjbGFyYXRvci5pZC5uYW1lKVxuICAgIH1cbiAgfVxuICBjb25zdCBibG9ja0NvbnRleHQgPSB7Li4uY29udGV4dCwgbGV4aWNhbFZhbHVlTmFtZXN9XG5cbiAgaWYgKGRpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJkaXJlY3RpdmVcIiwgbm9kZUxvY2F0aW9uKGRpcmVjdGl2ZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IGJsb2NrTG9jYXRpb24sXG4gICAgc3RhdGVtZW50czogc3RhdGVtZW50cy5tYXAoKHN0YXRlbWVudCkgPT4gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJsb2NrQ29udGV4dCkpXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBKYXZhU2NyaXB0IEpTRG9jIHR5cGVzIGZyb20gYSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IG5vZGUgLSBCYWJlbCBmdW5jdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3duZXJJZF0gLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkgZm9yIHR5cGUtcGFyYW1ldGVyIElEcy5cbiAqIEByZXR1cm5zIHt7cGFyYW1ldGVyczogTWFwPHN0cmluZywge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30gfCB1bmRlZmluZWQsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfX0gUGFyc2VkIHR5cGVzLlxuICovXG5mdW5jdGlvbiBqc2RvY1R5cGVzKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpIHtcbiAgY29uc3QgY29tbWVudCA9IG5vZGUubGVhZGluZ0NvbW1lbnRzPy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiYgY2FuZGlkYXRlLnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKVxuXG4gIGlmICghY29tbWVudCkgbWlzc2luZ1R5cGUoXCJqYXZhc2NyaXB0XCIsIGBGdW5jdGlvbiAnJHtub2RlLmlkPy5uYW1lID8/IFwiYW5vbnltb3VzXCJ9J2AsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBjb25zdCBjb21tZW50QmxvY2sgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9ICovIChjb21tZW50KVxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnRCbG9jay52YWx1ZX0qL2ApWzBdXG4gIGNvbnN0IHBhcmFtZXRlclRhZ3MgPSBibG9jay50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwicGFyYW1cIilcbiAgY29uc3QgcmV0dXJuVGFncyA9IGJsb2NrLnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJyZXR1cm5zXCIgfHwgdGFnLnRhZyA9PSBcInJldHVyblwiKVxuICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IGpzZG9jVHlwZVBhcmFtZXRlcnMoY29tbWVudEJsb2NrLCBibG9jay50YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChuZXcgU2V0KHBhcmFtZXRlclRhZ3MubWFwKCh0YWcpID0+IHRhZy5uYW1lKSkuc2l6ZSAhPSBwYXJhbWV0ZXJUYWdzLmxlbmd0aCkge1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHBhcmFtZXRlclRhZ3MuZmluZCgodGFnLCBpbmRleCkgPT4gcGFyYW1ldGVyVGFncy5maW5kSW5kZXgoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gdGFnLm5hbWUpICE9IGluZGV4KVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImR1cGxpY2F0ZSBAcGFyYW0gYW5ub3RhdGlvblwiLCBkdXBsaWNhdGVcbiAgICAgID8gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnRCbG9jaywgZHVwbGljYXRlLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChyZXR1cm5UYWdzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiZHVwbGljYXRlIEByZXR1cm4gYW5ub3RhdGlvblwiLFxuICAgICAgY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnRCbG9jaywgcmV0dXJuVGFnc1sxXSwgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgTWFwKHBhcmFtZXRlclRhZ3MubWFwKCh0YWcpID0+IFt0YWcubmFtZSwge1xuICAgIGxvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCB0YWcsIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzb3VyY2VUeXBlOiB0YWcudHlwZVxuICB9XSkpXG4gIGNvbnN0IHJldHVyblRhZyA9IHJldHVyblRhZ3NbMF1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogcmV0dXJuVGFnID8ge2xvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCByZXR1cm5UYWcsIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlVHlwZTogcmV0dXJuVGFnLnR5cGV9IDogdW5kZWZpbmVkLFxuICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGV4YWN0IHVuYm91bmRlZCBpbnZhcmlhbnQgYEB0ZW1wbGF0ZSBOYW1lYCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9IGNvbW1lbnQgLSBQYXJzZXItb3duZWQgSlNEb2MgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcImNvbW1lbnQtcGFyc2VyXCIpLlNwZWNbXX0gdGFncyAtIFBhcnNlZCB0YWdzLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IG93bmVySWQgLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gT3JkZXJlZCBwYXJhbWV0ZXJzIHdoZW4gcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24ganNkb2NUeXBlUGFyYW1ldGVycyhjb21tZW50LCB0YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IG1hbGZvcm1lZCA9IHRhZ3MuZmluZCgodGFnKSA9PiB0YWcudGFnLnN0YXJ0c1dpdGgoXCJ0ZW1wbGF0ZVwiKSAmJiB0YWcudGFnICE9IFwidGVtcGxhdGVcIilcblxuICBpZiAobWFsZm9ybWVkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwidW5zdXBwb3J0ZWQgdHlwZSBwYXJhbWV0ZXIgdmFyaWFuY2VcIiwgY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIG1hbGZvcm1lZCwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCB0ZW1wbGF0ZVRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidGVtcGxhdGVcIilcblxuICBpZiAodGVtcGxhdGVUYWdzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghb3duZXJJZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInR5cGUgcGFyYW1ldGVyIG91dHNpZGUgYSBkZWNsYXJhdGlvblwiLFxuICAgIG5vZGVMb2NhdGlvbigvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY29tbWVudCkpLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gdGVtcGxhdGVUYWdzLm1hcCgodGFnLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIHRhZywgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoIS9eW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJC91LnRlc3QodGFnLm5hbWUpIHx8IHRhZy50eXBlIHx8IHRhZy5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgb3IgbWFsZm9ybWVkIHR5cGUgcGFyYW1ldGVyXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7b3duZXJJZH06dHlwZToke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksIGxvY2F0aW9uLCBuYW1lOiB0YWcubmFtZX0sIHtuYW1lOiBsb2NhdGlvbn0pXG4gIH0pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gb3B0aW9uYWwgY2xhc3MtbGV2ZWwgSlNEb2MgdGVtcGxhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFJlY29yZCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdIHwgdW5kZWZpbmVkfSBPcmRlcmVkIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGNsYXNzSnNkb2NUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2sgfCB1bmRlZmluZWR9ICovIChcbiAgICBub2RlLmxlYWRpbmdDb21tZW50cz8uZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUudHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIGNhbmRpZGF0ZS52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKSkpXG5cbiAgaWYgKCFjb21tZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGJsb2NrID0gcGFyc2VDb21tZW50KGAvKiR7Y29tbWVudC52YWx1ZX0qL2ApWzBdXG5cbiAgcmV0dXJuIGpzZG9jVHlwZVBhcmFtZXRlcnMoY29tbWVudCwgYmxvY2sudGFncywgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSlcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IEpTRG9jIHNjYWxhciB0eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBTb3VyY2UtbGFuZ3VhZ2UgdHlwZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgdHlwZSB0b2tlbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uLCBzb3VyY2UsIHR5cGVMb2NhdGlvbiA9IGxvY2F0aW9uLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKGxhbmd1YWdlICE9IFwiamF2YXNjcmlwdFwiKSByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUobGFuZ3VhZ2UsIHNvdXJjZVR5cGUsIHN1YmplY3QsIGxvY2F0aW9uLCB0eXBlTG9jYXRpb24pXG5cbiAgcmV0dXJuIGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlLCBsb2NhdGlvbjogdHlwZUxvY2F0aW9uLCBvd25lckxvY2F0aW9uOiBsb2NhdGlvbiwgcmVjb3JkczogcmVjb3JkTmFtZXMsIHNvdXJjZSwgc291cmNlVHlwZSwgc3ViamVjdCwgdHlwZVBhcmFtZXRlcnN9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBKYXZhU2NyaXB0IGZ1bmN0aW9uIHJldHVybiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBKU0RvYyB0eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBmdW5jdGlvbiByZXR1cm4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEZ1bmN0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgYW5ub3RhdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5UeXBlKHNvdXJjZVR5cGUsIGxhbmd1YWdlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24gPSBsb2NhdGlvbiwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChzb3VyY2VUeXBlID09IFwidm9pZFwiKSByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUobGFuZ3VhZ2UsIHNvdXJjZVR5cGUsIHN1YmplY3QsIGxvY2F0aW9uLCB0eXBlTG9jYXRpb24pXG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlKHNvdXJjZVR5cGUsIGxhbmd1YWdlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycylcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCBzY2FsYXIga2V5d29yZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlQW5ub3RhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob29wIHwgbnVsbCB8IHVuZGVmaW5lZH0gYW5ub3RhdGlvbiAtIFR5cGUgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBPd25pbmcgZGVjbGFyYXRpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZVNjcmlwdFR5cGUoYW5ub3RhdGlvbiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmICghYW5ub3RhdGlvbikgcmV0dXJuIG1pc3NpbmdUeXBlKFwidHlwZXNjcmlwdFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBpZiAoYW5ub3RhdGlvbi50eXBlICE9IFwiVFNUeXBlQW5ub3RhdGlvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIHNjYWxhciB0eXBlXCIsIG5vZGVMb2NhdGlvbihhbm5vdGF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoYW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBib3VuZGVkIHJlY3Vyc2l2ZSBUeXBlU2NyaXB0IHZhbHVlLXR5cGUgdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZX0gdHlwZU5vZGUgLSBQYXJzZXItb3duZWQgdHlwZSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE93bmluZyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHZhbHVlIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZSh0eXBlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IHNvdXJjZVR5cGUgPSB0eXBlTm9kZS50eXBlID09IFwiVFNOdW1iZXJLZXl3b3JkXCIgPyBcIm51bWJlclwiIDpcbiAgICB0eXBlTm9kZS50eXBlID09IFwiVFNCb29sZWFuS2V5d29yZFwiID8gXCJib29sZWFuXCIgOiB0eXBlTm9kZS50eXBlID09IFwiVFNTdHJpbmdLZXl3b3JkXCIgPyBcInN0cmluZ1wiIDogdW5kZWZpbmVkXG5cbiAgaWYgKHNvdXJjZVR5cGUpIHtcbiAgICByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUoXCJ0eXBlc2NyaXB0XCIsIHNvdXJjZVR5cGUsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmICF0eXBlTm9kZS50eXBlUGFyYW1ldGVycyAmJlxuICAgIHR5cGVQYXJhbWV0ZXJzLmhhcyh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcn0gKi8gKHR5cGVQYXJhbWV0ZXJzLmdldCh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSlcblxuICAgIHJldHVybiB0eXBlVmFyaWFibGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXJhbWV0ZXIuaWQpLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmICh0eXBlTm9kZS50eXBlID09IFwiVFNUeXBlUmVmZXJlbmNlXCIgJiYgdHlwZU5vZGUudHlwZU5hbWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIHJlY29yZE5hbWVzLmhhcyh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9ufSAqLyAocmVjb3JkTmFtZXMuZ2V0KHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlTm9kZS50eXBlUGFyYW1ldGVycykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImdlbmVyaWMgb3duZWQgcmVzb3VyY2UgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgcmV0dXJuIG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24odHlwZU5vZGUudHlwZU5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUudHlwZU5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICByZXR1cm4gZGVjbGFyYXRpb24ub3duZXJzaGlwPy5raW5kID09IFwib3duZWRSZXNvdXJjZVwiXG4gICAgICAgID8gb3duZWRSZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBsb2NhdGlvbilcbiAgICAgICAgOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgYXJndW1lbnRzXyA9IHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+XG4gICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUocGFyYW1ldGVyLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKVxuXG4gICAgcmV0dXJuIHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIG5vZGVMb2NhdGlvbih0eXBlTm9kZS50eXBlTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18pXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1VuaW9uVHlwZVwiKSB7XG4gICAgaWYgKHR5cGVOb2RlLnR5cGVzLmxlbmd0aCAhPSAyIHx8IHR5cGVOb2RlLnR5cGVzWzFdLnR5cGUgIT0gXCJUU051bGxLZXl3b3JkXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCIsXG4gICAgICAgIHR5cGVOb2RlLnR5cGVzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJUU051bGxLZXl3b3JkXCIpXG4gICAgICAgICAgPyBcImFyYml0cmFyeSB1bmlvbiB0eXBlXCJcbiAgICAgICAgICA6IFwidW5zdXBwb3J0ZWQgY29sbGVjdGlvbiBvciBzY2FsYXIgdHlwZVwiLFxuICAgICAgICBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICApXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlTm9kZSA9IHR5cGVOb2RlLnR5cGVzWzBdXG5cbiAgICByZXR1cm4gb3B0aW9uYWxUeXBlKFxuICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHZhbHVlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBub2RlTG9jYXRpb24odmFsdWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIClcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVHlwZU9wZXJhdG9yXCIgJiYgdHlwZU5vZGUub3BlcmF0b3IgPT0gXCJyZWFkb25seVwiICYmIHR5cGVOb2RlLnR5cGVBbm5vdGF0aW9uLnR5cGUgPT0gXCJUU0FycmF5VHlwZVwiKSB7XG4gICAgY29uc3QgZWxlbWVudE5vZGUgPSB0eXBlTm9kZS50eXBlQW5ub3RhdGlvbi5lbGVtZW50VHlwZVxuXG4gICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKGVsZW1lbnROb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5vZGVMb2NhdGlvbihlbGVtZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICApXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgW1wiUmVhZG9ubHlBcnJheVwiLCBcIlJlYWRvbmx5TWFwXCJdLmluY2x1ZGVzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXMgPz8gW11cblxuICAgIGlmICh0eXBlTm9kZS50eXBlTmFtZS5uYW1lID09IFwiUmVhZG9ubHlBcnJheVwiICYmIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBsaXN0VHlwZShcbiAgICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlcnNbMF0sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAodHlwZU5vZGUudHlwZU5hbWUubmFtZSA9PSBcIlJlYWRvbmx5TWFwXCIgJiYgcGFyYW1ldGVycy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShwYXJhbWV0ZXJzWzBdLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlcnNbMV0sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNbMV0sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gb3Igc2NhbGFyIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCBmdW5jdGlvbiByZXR1cm4gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlR5cGVBbm5vdGF0aW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9vcCB8IG51bGwgfCB1bmRlZmluZWR9IGFubm90YXRpb24gLSBSZXR1cm4gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIEZ1bmN0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0UmV0dXJuVHlwZShhbm5vdGF0aW9uLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKCFhbm5vdGF0aW9uKSByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJ0eXBlc2NyaXB0XCIsIHVuZGVmaW5lZCwgc3ViamVjdCwgb3duZXJMb2NhdGlvbilcbiAgaWYgKGFubm90YXRpb24udHlwZSAhPSBcIlRTVHlwZUFubm90YXRpb25cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJ1bnN1cHBvcnRlZCByZXR1cm4gdHlwZVwiLCBub2RlTG9jYXRpb24oYW5ub3RhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZU5vZGUgPSBhbm5vdGF0aW9uLnR5cGVBbm5vdGF0aW9uXG5cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1ZvaWRLZXl3b3JkXCIpIHtcbiAgICByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJ0eXBlc2NyaXB0XCIsIFwidm9pZFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZSh0eXBlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBuYXRpdmUgdW5ib3VuZGVkIGludmFyaWFudCBUeXBlU2NyaXB0IHBhcmFtZXRlciBsaXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBkZWNsYXJhdGlvbiAtIFBhcnNlci1vd25lZCBsaXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgb3duaW5nIGRlY2xhcmF0aW9uIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10gfCB1bmRlZmluZWR9IFNlbWFudGljIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIHR5cGVTY3JpcHRUeXBlUGFyYW1ldGVycyhkZWNsYXJhdGlvbiwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWRlY2xhcmF0aW9uKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uLnBhcmFtcy5tYXAoKHBhcmFtZXRlciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLmNvbnN0cmFpbnQgfHwgcGFyYW1ldGVyLmRlZmF1bHQgfHwgUmVmbGVjdC5nZXQocGFyYW1ldGVyLCBcImluXCIpIHx8IFJlZmxlY3QuZ2V0KHBhcmFtZXRlciwgXCJvdXRcIikgfHxcbiAgICAgIFJlZmxlY3QuZ2V0KHBhcmFtZXRlciwgXCJjb25zdFwiKSB8fCB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgIT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgdmFyaWFudCwgb3IgY29uc3QgdHlwZSBwYXJhbWV0ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSwgbG9jYXRpb24sIG5hbWU6IHBhcmFtZXRlci5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFueSBib2R5IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmV9IFNlbWFudGljIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgb3duZXJJZCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFub255bW91cyBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuYXN5bmMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhc3luYyBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuZ2VuZXJhdG9yKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZ2VuZXJhdG9yIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBjb25zdCBuYXRpdmVUeXBlUGFyYW1ldGVycyA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyB0eXBlU2NyaXB0VHlwZVBhcmFtZXRlcnMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSAqLyAobm9kZS50eXBlUGFyYW1ldGVycyksIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgOiBub2RlLnR5cGVQYXJhbWV0ZXJzID8gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibmF0aXZlIGdlbmVyaWMgZnVuY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUudHlwZVBhcmFtZXRlcnMsIGZpbGVuYW1lLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuICBjb25zdCBkb2N1bWVudGVkVHlwZXMgPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IGpzZG9jVHlwZXMobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZCkgOiB1bmRlZmluZWRcbiAgY29uc3QgdHlwZVBhcmFtZXRlcnNfID0gbmF0aXZlVHlwZVBhcmFtZXRlcnMgPz8gZG9jdW1lbnRlZFR5cGVzPy50eXBlUGFyYW1ldGVyc1xuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKCh0eXBlUGFyYW1ldGVyc18gPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgcGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIGlmIChwYXJhbWV0ZXIub3B0aW9uYWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJvcHRpb25hbCBwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyTG9jYXRpb24pXG5cbiAgICBjb25zdCBkb2N1bWVudGVkVHlwZSA9IGRvY3VtZW50ZWRUeXBlcz8ucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG4gICAgY29uc3QgdHlwZSA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlKGRvY3VtZW50ZWRUeXBlPy5zb3VyY2VUeXBlLCBsYW5ndWFnZSwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGU/LmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgICAgOiBjb252ZXJ0VHlwZVNjcmlwdFR5cGUocGFyYW1ldGVyLnR5cGVBbm5vdGF0aW9uLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbixcbiAgICAgIG5hbWU6IHBhcmFtZXRlci5uYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGV4dHJhRG9jdW1lbnRlZFBhcmFtZXRlciA9IGRvY3VtZW50ZWRUeXBlcyAmJiBbLi4uZG9jdW1lbnRlZFR5cGVzLnBhcmFtZXRlcnMua2V5cygpXVxuICAgIC5maW5kKChuYW1lKSA9PiAhbm9kZS5wYXJhbXMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBwYXJhbWV0ZXIubmFtZSA9PSBuYW1lKSlcblxuICBpZiAoZXh0cmFEb2N1bWVudGVkUGFyYW1ldGVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBhbm5vdGF0aW9uIGZvciB1bmtub3duIHBhcmFtZXRlciAnJHtleHRyYURvY3VtZW50ZWRQYXJhbWV0ZXJ9J2AsIGxvY2F0aW9uKVxuICBjb25zdCByZXR1cm5Bbm5vdGF0aW9uID0gbm9kZS5yZXR1cm5UeXBlXG4gIGNvbnN0IHJldHVyblR5cGUgPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIlxuICAgID8gY29udmVydFJldHVyblR5cGUoZG9jdW1lbnRlZFR5cGVzPy5yZXR1cm5UeXBlPy5zb3VyY2VUeXBlLCBsYW5ndWFnZSwgYEZ1bmN0aW9uICcke25vZGUuaWQubmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBzb3VyY2UsIGRvY3VtZW50ZWRUeXBlcz8ucmV0dXJuVHlwZT8ubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgOiBjb252ZXJ0VHlwZVNjcmlwdFJldHVyblR5cGUocmV0dXJuQW5ub3RhdGlvbiwgYEZ1bmN0aW9uICcke25vZGUuaWQubmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uLFxuICAgIG5hbWU6IG5vZGUuaWQubmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGUsXG4gICAgLi4uKHR5cGVQYXJhbWV0ZXJzXyA/IHt0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnNffSA6IHt9KVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdXBwb3J0ZWQgZnVuY3Rpb24gYm9keSB1c2luZyBhbGwgYWxyZWFkeS1wcm92ZWQgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IG5vZGUgLSBCYWJlbCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdEZ1bmN0aW9uU2lnbmF0dXJlfSBzaWduYXR1cmUgLSBDb252ZXJ0ZWQgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gdmFsdWVSZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGF2YWlsYWJsZSBpbiB2YWx1ZSBwb3NpdGlvbnMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgdmFsdWVSZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkKSB7XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoc2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgY2xhc3NlcyxcbiAgICBlcnJvck5hbWVzLFxuICAgIGVycm9ycyxcbiAgICBmdW5jdGlvbnMsXG4gICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0Zvcihub2RlLmJvZHkpLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgdHlwZVBhcmFtZXRlcnM6IG5ldyBNYXAoKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpLFxuICAgIHZhbHVlUmVjb3JkTmFtZXNcbiAgfVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHBhcnNlci1vd25lZCBwYWlyIGxvb3BzIHRvIGV4YWN0IGRlY2xhcmF0aW9ucyBpbnNpZGUgb25lIGxleGljYWwgb3duZXIuXG4gKiBBbWJpZ3VvdXMgc2FtZS1uYW1lIGRlY2xhcmF0aW9ucyBwcm9kdWNlIG5vIGV2aWRlbmNlIGFuZCBmYWlsIGR1cmluZyBsb29wIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gRnVuY3Rpb24gYm9keSBvciBlbnRyeS1wb2ludCBzdWJ0cmVlLlxuICogQHJldHVybnMge1NldDxvYmplY3Q+fSBFeGFjdCBwYWlyLWl0ZXJhdGVkIHBhcnNlciBkZWNsYXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3IodmFsdWUpIHtcbiAgLyoqIEB0eXBlIHt7ZGVjbGFyYXRpb246IG9iamVjdCwgbmFtZTogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcn1bXX0gKi9cbiAgY29uc3QgZGVjbGFyYXRpb25zID0gW11cbiAgLyoqIEB0eXBlIHt7bmFtZTogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcn1bXX0gKi9cbiAgY29uc3QgcmVjZWl2ZXJzID0gW11cbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KClcbiAgLyoqXG4gICAqIFZpc2l0cyBvbmUgcGFyc2VyIGNhbmRpZGF0ZS5cbiAgICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBQYXJzZXIgY2FuZGlkYXRlLlxuICAgKi9cbiAgY29uc3QgdmlzaXQgPSAoY2FuZGlkYXRlKSA9PiB7XG4gICAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKGNhbmRpZGF0ZSkpIHJldHVyblxuICAgIHNlZW4uYWRkKGNhbmRpZGF0ZSlcbiAgICBjb25zdCB0eXBlID0gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInR5cGVcIilcblxuICAgIGlmICh0eXBlID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiIHx8IHR5cGUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHJldHVyblxuICAgIGlmICh0eXBlID09IFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpIHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwiaWRcIilcblxuICAgICAgaWYgKFJlZmxlY3QuZ2V0KGlkZW50aWZpZXIsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIikgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbjogY2FuZGlkYXRlLFxuICAgICAgICBuYW1lOiBSZWZsZWN0LmdldChpZGVudGlmaWVyLCBcIm5hbWVcIiksXG4gICAgICAgIG9mZnNldDogUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInN0YXJ0XCIpXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkZvck9mU3RhdGVtZW50XCIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwibGVmdFwiKVxuICAgICAgY29uc3QgcmlnaHQgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwicmlnaHRcIilcbiAgICAgIGNvbnN0IGxvb3BEZWNsYXJhdGlvbnMgPSBsZWZ0ICYmIHR5cGVvZiBsZWZ0ID09IFwib2JqZWN0XCIgPyBSZWZsZWN0LmdldChsZWZ0LCBcImRlY2xhcmF0aW9uc1wiKSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGF0dGVybiA9IEFycmF5LmlzQXJyYXkobG9vcERlY2xhcmF0aW9ucykgJiYgbG9vcERlY2xhcmF0aW9ucy5sZW5ndGggPT0gMSA/IFJlZmxlY3QuZ2V0KGxvb3BEZWNsYXJhdGlvbnNbMF0sIFwiaWRcIikgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gcGF0dGVybiAmJiB0eXBlb2YgcGF0dGVybiA9PSBcIm9iamVjdFwiID8gUmVmbGVjdC5nZXQocGF0dGVybiwgXCJlbGVtZW50c1wiKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoUmVmbGVjdC5nZXQobGVmdCwgXCJraW5kXCIpID09IFwiY29uc3RcIiAmJiBSZWZsZWN0LmdldChwYXR0ZXJuLCBcInR5cGVcIikgPT0gXCJBcnJheVBhdHRlcm5cIiAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGVsZW1lbnRzKSAmJiBlbGVtZW50cy5sZW5ndGggPT0gMiAmJiBlbGVtZW50cy5ldmVyeSgoZWxlbWVudCkgPT4gUmVmbGVjdC5nZXQoZWxlbWVudCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiKSAmJlxuICAgICAgICBSZWZsZWN0LmdldChyaWdodCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiKSByZWNlaXZlcnMucHVzaCh7XG4gICAgICAgIG5hbWU6IFJlZmxlY3QuZ2V0KHJpZ2h0LCBcIm5hbWVcIiksXG4gICAgICAgIG9mZnNldDogUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInN0YXJ0XCIpXG4gICAgICB9KVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhjYW5kaWRhdGUpKSB7XG4gICAgICBpZiAoW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZCkgdmlzaXQoaXRlbSlcbiAgICAgIH0gZWxzZSB2aXNpdChjaGlsZClcbiAgICB9XG4gIH1cblxuICB2aXNpdCh2YWx1ZSlcbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgU2V0KClcbiAgZm9yIChjb25zdCByZWNlaXZlciBvZiByZWNlaXZlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb25zLmZpbHRlcigoe25hbWUsIG9mZnNldH0pID0+IG5hbWUgPT0gcmVjZWl2ZXIubmFtZSAmJiBvZmZzZXQgPCByZWNlaXZlci5vZmZzZXQpXG5cbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT0gMSkgc2VsZWN0ZWQuYWRkKG1hdGNoZXNbMF0uZGVjbGFyYXRpb24pXG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgZW1wdHkgbmF0aXZlIEVycm9yIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBTZW1hbnRpYyBlcnJvciBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFTY3JpcHRFcnJvcihub2RlLCBkZWNsYXJhdGlvbiwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIW5vZGUuaWQgfHwgbm9kZS5zdXBlckNsYXNzPy50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IG5vZGUuc3VwZXJDbGFzcy5uYW1lICE9IFwiRXJyb3JcIiB8fFxuICAgIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCAhPSAwIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHwgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgUmVmbGVjdC5nZXQobm9kZSwgXCJhYnN0cmFjdFwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImRlY2xhcmVcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJpbXBsZW1lbnRzXCIpPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHR5cGVkIGVycm9yIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtcbiAgICBuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgdHlwZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuc3VwZXJDbGFzcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBQcmVkZWNsYXJlcyB0aGUgYm91bmRlZCBuYXRpdmUgcHJpdmF0ZS1maWVsZCByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZSBhbmQgYWxsIGNhbGxhYmxlIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gUGFyc2VyIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIGNsYXNzIGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gTm9taW5hbCB0eXBlcyBieSBuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gU2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIHByZWRlY2xhcmVSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCB8fCBub2RlLnN1cGVyQ2xhc3MgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fCBub2RlLnN1cGVyVHlwZVBhcmFtZXRlcnMgfHxcbiAgICBSZWZsZWN0LmdldChub2RlLCBcImFic3RyYWN0XCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiZGVjbGFyZVwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIik/Lmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZWZlcmVuY2UgY2xhc3MgaW5oZXJpdGFuY2UsIGdlbmVyaWNzLCBkZWNvcmF0aW9uLCBvciBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJjb25zdHJ1Y3RvclwiKSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzUHJvcGVydHlcIiB8fCBtZW1iZXIudHlwZSA9PSBcIkNsYXNzUHJpdmF0ZVByb3BlcnR5XCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJtZXRob2RcIikpXG5cbiAgaWYgKGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgbWV0aG9kTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggIT0gbm9kZS5ib2R5LmJvZHkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyByZXF1aXJlcyBwcml2YXRlIGZpZWxkcywgb25lIGNvbnN0cnVjdG9yLCBhbmQgb3JkaW5hcnkgbWV0aG9kc1wiLCBsb2NhdGlvbilcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBmaWVsZE5vZGVzLm1hcCgobWVtYmVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGxldCBuYW1lXG4gICAgbGV0IG5hbWVMb2NhdGlvblxuICAgIGxldCB0eXBlXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICAgIGlmIChtZW1iZXIudHlwZSAhPSBcIkNsYXNzUHJvcGVydHlcIiB8fCBtZW1iZXIua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbWVtYmVyLmNvbXB1dGVkIHx8IG1lbWJlci5zdGF0aWMgfHxcbiAgICAgICAgbWVtYmVyLmFjY2Vzc2liaWxpdHkgIT0gXCJwcml2YXRlXCIgfHwgbWVtYmVyLnJlYWRvbmx5IHx8IG1lbWJlci52YWx1ZSB8fCBtZW1iZXIub3B0aW9uYWwgfHwgbWVtYmVyLmRlY29yYXRvcnM/Lmxlbmd0aCB8fFxuICAgICAgICBSZWZsZWN0LmdldChtZW1iZXIsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobWVtYmVyLCBcImRlY2xhcmVcIikpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBuYW1lID0gbWVtYmVyLmtleS5uYW1lXG4gICAgICBuYW1lTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obWVtYmVyLmtleSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIHR5cGUgPSBjb252ZXJ0VHlwZVNjcmlwdFR5cGUobWVtYmVyLnR5cGVBbm5vdGF0aW9uLCBgUHJpdmF0ZSBmaWVsZCAnJHtuYW1lfSdgLCBmaWVsZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtZW1iZXIudHlwZSAhPSBcIkNsYXNzUHJpdmF0ZVByb3BlcnR5XCIgfHwgbWVtYmVyLmtleS50eXBlICE9IFwiUHJpdmF0ZU5hbWVcIiB8fCBtZW1iZXIuc3RhdGljIHx8IG1lbWJlci52YWx1ZSB8fFxuICAgICAgICBtZW1iZXIuZGVjb3JhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZFwiLCBmaWVsZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgbmFtZSA9IG1lbWJlci5rZXkuaWQubmFtZVxuICAgICAgbmFtZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG1lbWJlci5rZXkuaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICBjb25zdCBjb21tZW50ID0gbWVtYmVyLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gICAgICBjb25zdCBnYXAgPSBjb21tZW50ID8gc291cmNlLnNsaWNlKGNvbW1lbnQuZW5kID8/IDAsIG1lbWJlci5zdGFydCA/PyAwKSA6IFwiXCJcbiAgICAgIGNvbnN0IGJsb2NrID0gY29tbWVudD8udHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIGNvbW1lbnQudmFsdWUuc3RhcnRzV2l0aChcIipcIikgJiYgL15cXHMqJC91LnRlc3QoZ2FwKVxuICAgICAgICA/IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgdGFncyA9IGJsb2NrPy50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidHlwZVwiKSA/PyBbXVxuXG4gICAgICBpZiAoIWNvbW1lbnQgfHwgdGFncy5sZW5ndGggIT0gMSB8fCB0YWdzWzBdLm5hbWUgfHwgdGFnc1swXS5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIGBQcml2YXRlIGZpZWxkICcke25hbWV9J2AsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICB0eXBlID0gY29udmVydFR5cGUodGFnc1swXS50eXBlLCBsYW5ndWFnZSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBjb21tZW50VGFnTG9jYXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ29tbWVudEJsb2NrfSAqLyAoY29tbWVudCksIHRhZ3NbMF0sIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgbm9taW5hbE5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsIHR5cGV9LCB7bmFtZTogbmFtZUxvY2F0aW9ufSlcbiAgfSlcbiAgY29uc3Qgb3duZWRGaWVsZHMgPSBkZWNsYXJhdGlvbi5maWVsZHMuZmlsdGVyKCh7dHlwZX0pID0+IHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpXG5cbiAgaWYgKG93bmVkRmllbGRzLmxlbmd0aCA9PSAxKSB7XG4gICAgY29uc3Qgb3duZWRGaWVsZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkICYge3R5cGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk93bmVkUmVzb3VyY2VUeXBlfX0gKi8gKG93bmVkRmllbGRzWzBdKVxuXG4gICAgZGVjbGFyYXRpb24ub3duZXJzaGlwID0ge2ZpZWxkSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAob3duZWRGaWVsZC5pZCksIGtpbmQ6IFwib3duZWRSZXNvdXJjZVwiLCByZXNvdXJjZUlkOiBvd25lZEZpZWxkLnR5cGUucmVzb3VyY2VJZH1cbiAgfVxuXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSAqLyAoY29uc3RydWN0b3JOb2Rlc1swXSlcbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0Q2xhc3NDYWxsYWJsZVNpZ25hdHVyZShjb25zdHJ1Y3Rvck5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIHRydWUpXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSwgbG9jYXRpb246IGNvbnN0cnVjdG9yU2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGRlY2xhcmF0aW9uLm1ldGhvZHMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZE5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udmVydENsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kTm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGZhbHNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2JvZHk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9ICovICh7fSksIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06bWV0aG9kOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1ldGhvZERlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLCBuYW1lOiBzaWduYXR1cmUubmFtZSxcbiAgICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLCByZXR1cm5UeXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSAqLyAoc2lnbmF0dXJlLnJldHVyblR5cGUpfSxcbiAgICB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIH0pXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSByZWZlcmVuY2UgY2xhc3MgYm9keSBhZnRlciBldmVyeSBjbGFzcyBzaWduYXR1cmUgaXMgY29tcGxldGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gUGFyc2VyIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIENvbXBsZXRlIHByZWRlY2xhcmVkIGNsYXNzIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIE5vbWluYWwgdHlwZXMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gdmFsdWVOYW1lcyAtIE5vbWluYWwgY29uc3RydWN0b3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gQ2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YVNjcmlwdEZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gVG9wLWxldmVsIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBzY2FsYXIgb3V0cHV0IGNhbm9uaWNhbGl6ZXMgemVyby5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBDb21wbGV0ZWQgc2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZWZlcmVuY2VDbGFzc0JvZGllcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB2YWx1ZU5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsXG4gIGVycm9ycywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCkge1xuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZH0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJDbGFzc01ldGhvZFwiICYmIG1lbWJlci5raW5kID09IFwiY29uc3RydWN0b3JcIikpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJtZXRob2RcIikpXG4gIGNvbnN0IGJhc2VDb250ZXh0ID0ge2JpbmRpbmdzOiBuZXcgTWFwKCksIGNsYXNzZXMsIGN1cnJlbnRDbGFzczogZGVjbGFyYXRpb24sIGVycm9yTmFtZXMsIGVycm9ycywgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzOiBub21pbmFsTmFtZXMsIHJlY29yZHMsIHZhbHVlUmVjb3JkTmFtZXM6IHZhbHVlTmFtZXN9XG4gIGNvbnN0IGNvbnN0cnVjdG9yQ29udGV4dCA9IHsuLi5iYXNlQ29udGV4dCxcbiAgICBiaW5kaW5nczogbmV3IE1hcChkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIHJldHVyblR5cGU6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUmVmZXJlbmNlXCIpLCBuYW1lOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ2b2lkXCIpfX1cblxuICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5ID0gY29udmVydEJsb2NrKGNvbnN0cnVjdG9yTm9kZS5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgIGNvbnN0cnVjdG9yQ29udGV4dClcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZE5vZGVzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbaW5kZXhdXG4gICAgY29uc3QgY29udGV4dCA9IHsuLi5iYXNlQ29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAobWV0aG9kLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKG1ldGhvZE5vZGVzW2luZGV4XS5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uXG59XG5cbi8qKlxuICogUmVhZHMgb25lIGNvbnN0cnVjdG9yIG9yIG1ldGhvZCBzaWduYXR1cmUgd2l0aG91dCBhZG1pdHRpbmcgb3ZlcmxvYWRzIG9yIG1vZGlmaWVycy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSBub2RlIC0gUGFyc2VyIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBEZWNsYXJpbmcgY2xhc3MuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBOb21pbmFsIHR5cGVzLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBTaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRDbGFzc0NhbGxhYmxlU2lnbmF0dXJlKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb25zdHJ1Y3Rvcikge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmNvbXB1dGVkIHx8IG5vZGUuc3RhdGljIHx8IG5vZGUuYXN5bmMgfHwgbm9kZS5nZW5lcmF0b3IgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fFxuICAgIG5vZGUua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY29uc3RydWN0b3IgIT0gKG5vZGUua2luZCA9PSBcImNvbnN0cnVjdG9yXCIpIHx8XG4gICAgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgbm9kZS5hY2Nlc3NpYmlsaXR5ICE9IG51bGwpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBkb2N1bWVudGVkID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCJcbiAgICA/IGpzZG9jVHlwZXMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKG5vZGUpKSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IHVuZGVmaW5lZFxuICBpZiAoY29uc3RydWN0b3IgJiYgKG5vZGUucmV0dXJuVHlwZSB8fCBkb2N1bWVudGVkPy5yZXR1cm5UeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjb25zdHJ1Y3RvciByZXR1cm4gYW5ub3RhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgcGFyYW1ldGVyLm9wdGlvbmFsIHx8IHBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgbWV0aG9kIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkPy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcbiAgICBjb25zdCB0eXBlID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gY29udmVydFR5cGVTY3JpcHRUeXBlKHBhcmFtZXRlci50eXBlQW5ub3RhdGlvbiwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcbiAgICAgIDogY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBkb2N1bWVudGVkVHlwZT8ubG9jYXRpb24sIG5vbWluYWxOYW1lcylcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyLm5hbWUsIHR5cGV9LFxuICAgICAge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgaWYgKGRvY3VtZW50ZWQgJiYgZG9jdW1lbnRlZC5wYXJhbWV0ZXJzLnNpemUgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWV0aG9kIEpTRG9jIHBhcmFtZXRlciBtaXNtYXRjaFwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lID0gY29uc3RydWN0b3IgPyBcImNvbnN0cnVjdG9yXCIgOiBub2RlLmtleS5uYW1lXG4gIGNvbnN0IG5hbWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmtleSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIWNvbnN0cnVjdG9yICYmIHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbmFtZUxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgbmFtZSwgbmFtZUxvY2F0aW9uLCBwYXJhbWV0ZXJzLCAuLi4oY29uc3RydWN0b3IgPyB7fSA6IHtyZXR1cm5UeXBlOiBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgID8gY29udmVydFR5cGVTY3JpcHRSZXR1cm5UeXBlKG5vZGUucmV0dXJuVHlwZSwgYE1ldGhvZCAnJHtuYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcbiAgICA6IGNvbnZlcnRSZXR1cm5UeXBlKGRvY3VtZW50ZWQ/LnJldHVyblR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgc291cmNlLFxuICAgICAgZG9jdW1lbnRlZD8ucmV0dXJuVHlwZT8ubG9jYXRpb24sIG5vbWluYWxOYW1lcyl9KX1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCByZWFkb25seSBjb25zdHJ1Y3Rvci1wYXJhbWV0ZXIgcmVjb3JkIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIG5vbWluYWwgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIEFsbCBub21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZVNjcmlwdFJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW1wbGVtZW50c18gPSBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIilcbiAgY29uc3QgbWl4aW5zID0gUmVmbGVjdC5nZXQobm9kZSwgXCJtaXhpbnNcIilcblxuICBpZiAoIW5vZGUuaWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJhbm9ueW1vdXMgcmVjb3JkIGNsYXNzXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5zdXBlckNsYXNzIHx8IChBcnJheS5pc0FycmF5KGltcGxlbWVudHNfKSAmJiBpbXBsZW1lbnRzXy5sZW5ndGgpIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIFJlZmxlY3QuZ2V0KG5vZGUsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJkZWNsYXJlXCIpIHx8IChBcnJheS5pc0FycmF5KG1peGlucykgJiYgbWl4aW5zLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlLCBkZWNvcmF0aW9uLCBvciBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAobm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDEgfHwgbm9kZS5ib2R5LmJvZHlbMF0udHlwZSAhPSBcIkNsYXNzTWV0aG9kXCIpIHtcbiAgICBjb25zdCBleHRyYSA9IG5vZGUuYm9keS5ib2R5WzFdID8/IG5vZGUuYm9keS5ib2R5WzBdID8/IG5vZGUuYm9keVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgb25lIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihleHRyYSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3IgPSBub2RlLmJvZHkuYm9keVswXVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKGNvbnN0cnVjdG9yLmtpbmQgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmNvbXB1dGVkIHx8IGNvbnN0cnVjdG9yLnN0YXRpYyB8fCBjb25zdHJ1Y3Rvci5hc3luYyB8fCBjb25zdHJ1Y3Rvci5nZW5lcmF0b3IgfHxcbiAgICBjb25zdHJ1Y3Rvci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3Rvci5rZXkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgY29uc3RydWN0b3IucmV0dXJuVHlwZSB8fCBjb25zdHJ1Y3Rvci50eXBlUGFyYW1ldGVycyB8fCBSZWZsZWN0LmdldChjb25zdHJ1Y3RvciwgXCJhY2Nlc3NpYmlsaXR5XCIpIHx8XG4gICAgY29uc3RydWN0b3IuYm9keS5ib2R5Lmxlbmd0aCAhPSAwIHx8IGNvbnN0cnVjdG9yLmJvZHkuZGlyZWN0aXZlcy5sZW5ndGggIT0gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gY29uc3RydWN0b3IucGFyYW1zLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJUU1BhcmFtZXRlclByb3BlcnR5XCIgfHwgcGFyYW1ldGVyLnJlYWRvbmx5ICE9PSB0cnVlIHx8IHBhcmFtZXRlci5hY2Nlc3NpYmlsaXR5IHx8IHBhcmFtZXRlci5vdmVycmlkZSB8fFxuICAgICAgcGFyYW1ldGVyLnBhcmFtZXRlci50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHBhcmFtZXRlci5wYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLnBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSByZWFkb25seSBwYXJhbWV0ZXItcHJvcGVydHkgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyLnBhcmFtZXRlclxuICAgIGNvbnN0IGZpZWxkID0ge1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbixcbiAgICAgIG5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShpZGVudGlmaWVyLnR5cGVBbm5vdGF0aW9uLCBgUmVjb3JkIGZpZWxkICcke2lkZW50aWZpZXIubmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBKU0RvYyBjb25zdHJ1Y3Rvci9yZWFkb25seS1hc3NpZ25tZW50L2ZyZWV6ZSByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZCBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFTY3JpcHRSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGltcGxlbWVudHNfID0gUmVmbGVjdC5nZXQobm9kZSwgXCJpbXBsZW1lbnRzXCIpXG4gIGNvbnN0IG1peGlucyA9IFJlZmxlY3QuZ2V0KG5vZGUsIFwibWl4aW5zXCIpXG5cbiAgaWYgKCFub2RlLmlkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiYW5vbnltb3VzIHJlY29yZCBjbGFzc1wiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuc3VwZXJDbGFzcyB8fCBub2RlLmRlY29yYXRvcnM/Lmxlbmd0aCB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIChBcnJheS5pc0FycmF5KGltcGxlbWVudHNfKSAmJiBpbXBsZW1lbnRzXy5sZW5ndGgpIHx8IChBcnJheS5pc0FycmF5KG1peGlucykgJiYgbWl4aW5zLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlIG9yIGRlY29yYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKG5vZGUuYm9keS5ib2R5Lmxlbmd0aCAhPSAxIHx8IG5vZGUuYm9keS5ib2R5WzBdLnR5cGUgIT0gXCJDbGFzc01ldGhvZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgb25lIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHkuYm9keVsxXSA/PyBub2RlLmJvZHkuYm9keVswXSA/PyBub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbm9kZS5ib2R5LmJvZHlbMF1cbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuXG4gIGlmIChjb25zdHJ1Y3Rvci5raW5kICE9IFwiY29uc3RydWN0b3JcIiB8fCBjb25zdHJ1Y3Rvci5jb21wdXRlZCB8fCBjb25zdHJ1Y3Rvci5zdGF0aWMgfHwgY29uc3RydWN0b3IuYXN5bmMgfHwgY29uc3RydWN0b3IuZ2VuZXJhdG9yIHx8XG4gICAgY29uc3RydWN0b3Iua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY29uc3RydWN0b3Iua2V5Lm5hbWUgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmRlY29yYXRvcnM/Lmxlbmd0aCB8fFxuICAgIGNvbnN0cnVjdG9yLnJldHVyblR5cGUgfHwgY29uc3RydWN0b3IudHlwZVBhcmFtZXRlcnMgfHwgY29uc3RydWN0b3IuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IGNvbnN0cnVjdG9yLnBhcmFtc1xuXG4gIGlmIChwYXJhbWV0ZXJzLnNvbWUoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgcGFyYW1ldGVyLm9wdGlvbmFsIHx8IHBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpKSB7XG4gICAgY29uc3QgaW52YWxpZCA9IHBhcmFtZXRlcnMuZmluZCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBwYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aClcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlclwiLCBub2RlTG9jYXRpb24oaW52YWxpZCA/PyBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZG9jdW1lbnRlZCA9IGpzZG9jVHlwZXMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGNvbnN0cnVjdG9yKSksIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKGRvY3VtZW50ZWQucmV0dXJuVHlwZSB8fCBkb2N1bWVudGVkLnBhcmFtZXRlcnMuc2l6ZSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCB8fCBjb25zdHJ1Y3Rvci5ib2R5LmJvZHkubGVuZ3RoICE9IHBhcmFtZXRlcnMubGVuZ3RoICsgMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJpbmNvbXBsZXRlIHJlY29yZCBjb25zdHJ1Y3RvciBwcm9maWxlXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gcGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWRlbnRpZmllcn0gKi8gKHBhcmFtZXRlcilcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBjb25zdHJ1Y3Rvci5ib2R5LmJvZHlbaW5kZXhdXG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkLnBhcmFtZXRlcnMuZ2V0KGlkZW50aWZpZXIubmFtZSlcblxuICAgIGlmICghZG9jdW1lbnRlZFR5cGUgfHwgc3RhdGVtZW50LnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24udHlwZSAhPSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLm9wZXJhdG9yICE9IFwiPVwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0LmNvbXB1dGVkIHx8XG4gICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0Lm9iamVjdC50eXBlICE9IFwiVGhpc0V4cHJlc3Npb25cIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0LnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHkubmFtZSAhPSBpZGVudGlmaWVyLm5hbWUgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24ucmlnaHQudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ucmlnaHQubmFtZSAhPSBpZGVudGlmaWVyLm5hbWUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgbm90IGluaXRpYWxpemVkIGV4YWN0bHkgb25jZVwiLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgcmVhZG9ubHlDb21tZW50ID0gc3RhdGVtZW50LmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gICAgY29uc3QgZ2FwID0gcmVhZG9ubHlDb21tZW50ID8gc291cmNlLnNsaWNlKHJlYWRvbmx5Q29tbWVudC5lbmQgPz8gMCwgc3RhdGVtZW50LnN0YXJ0ID8/IDApIDogXCJcIlxuICAgIGNvbnN0IHRhZ3MgPSByZWFkb25seUNvbW1lbnQ/LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJiByZWFkb25seUNvbW1lbnQudmFsdWUuc3RhcnRzV2l0aChcIipcIilcbiAgICAgID8gcGFyc2VDb21tZW50KGAvKiR7cmVhZG9ubHlDb21tZW50LnZhbHVlfSovYClbMF0/LnRhZ3MgPz8gW11cbiAgICAgIDogW11cblxuICAgIGlmICghcmVhZG9ubHlDb21tZW50IHx8ICEvXlxccyokL3UudGVzdChnYXApIHx8IHRhZ3MubGVuZ3RoICE9IDEgfHwgdGFnc1swXS50YWcgIT0gXCJyZWFkb25seVwiIHx8XG4gICAgICB0YWdzWzBdLm5hbWUgfHwgdGFnc1swXS50eXBlIHx8IHRhZ3NbMF0uZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgd2l0aG91dCBleGFjdCBAcmVhZG9ubHkgYW5ub3RhdGlvblwiLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgZmllbGQgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRGaWVsZFwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRvY3VtZW50ZWRUeXBlLnNvdXJjZVR5cGUsIFwiamF2YXNjcmlwdFwiLCBgUmVjb3JkIGZpZWxkICcke2lkZW50aWZpZXIubmFtZX0nYCxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UsIGRvY3VtZW50ZWRUeXBlLmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGZpZWxkLCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgY29uc3QgZnJlZXplID0gY29uc3RydWN0b3IuYm9keS5ib2R5LmF0KC0xKVxuXG4gIGlmICghZnJlZXplIHx8IGZyZWV6ZS50eXBlICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGZyZWV6ZS5leHByZXNzaW9uLnR5cGUgIT0gXCJDYWxsRXhwcmVzc2lvblwiIHx8IGZyZWV6ZS5leHByZXNzaW9uLm9wdGlvbmFsIHx8XG4gICAgZnJlZXplLmV4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCAhPSAxIHx8IGZyZWV6ZS5leHByZXNzaW9uLmFyZ3VtZW50c1swXS50eXBlICE9IFwiVGhpc0V4cHJlc3Npb25cIiB8fFxuICAgICFpc0phdmFTY3JpcHRSZWNvcmRGcmVlemUoZnJlZXplLmV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBjb25zdHJ1Y3RvciB3aXRob3V0IGZpbmFsIE9iamVjdC5mcmVlemUodGhpcylcIiwgbm9kZUxvY2F0aW9uKGZyZWV6ZSA/PyBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVjb2duaXplcyB0aGUgY2Fub25pY2FsIHNvdXJjZSBmcmVlemUgb3IgdGhlIGdlbmVyYXRlZCBpZGVudGlmaWVyLWZyZWUgaW50cmluc2ljIG93bmVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2FsbEV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBGaW5hbCBjb25zdHJ1Y3RvciBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGNhbGwgb3ducyB0aGUgbmF0aXZlIHJlY29yZC1mcmVlemUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBpc0phdmFTY3JpcHRSZWNvcmRGcmVlemUoZXhwcmVzc2lvbikge1xuICBjb25zdCBjYWxsZWUgPSBleHByZXNzaW9uLmNhbGxlZVxuXG4gIGlmIChjYWxsZWUudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBjYWxsZWUuY29tcHV0ZWQgfHwgY2FsbGVlLm9wdGlvbmFsIHx8XG4gICAgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT0gXCJmcmVlemVcIikgcmV0dXJuIGZhbHNlXG4gIGlmIChjYWxsZWUub2JqZWN0LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiBjYWxsZWUub2JqZWN0Lm5hbWUgPT0gXCJPYmplY3RcIlxuICBpZiAoY2FsbGVlLm9iamVjdC50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5vYmplY3QuY29tcHV0ZWQgfHwgY2FsbGVlLm9iamVjdC5vcHRpb25hbCB8fFxuICAgIGNhbGxlZS5vYmplY3QucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjYWxsZWUub2JqZWN0LnByb3BlcnR5Lm5hbWUgIT0gXCJjb25zdHJ1Y3RvclwiKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gY2FsbGVlLm9iamVjdC5vYmplY3QudHlwZSA9PSBcIk9iamVjdEV4cHJlc3Npb25cIiAmJiBjYWxsZWUub2JqZWN0Lm9iamVjdC5wcm9wZXJ0aWVzLmxlbmd0aCA9PSAwICYmXG4gICAgY2FsbGVlLm9iamVjdC5vYmplY3QuZXh0cmE/LnBhcmVudGhlc2l6ZWQgPT09IHRydWVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZXhpc3RpbmcgZXhhY3QgaWYvZWxzZSB0ZXJtaW5hbCBzaGFwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklmU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgaWYgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9IFNlbWFudGljIGJyYW5jaC5cbiAqL1xuZnVuY3Rpb24gY29udmVydElmKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uID0gY29udmVydEV4cHJlc3Npb24obm9kZS50ZXN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGNvbnNlcXVlbnQgPSBub2RlLmNvbnNlcXVlbnQudHlwZSA9PSBcIkJsb2NrU3RhdGVtZW50XCJcbiAgICA/IGNvbnZlcnRCbG9jayhub2RlLmNvbnNlcXVlbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnNlcXVlbnRDb250ZXh0KVxuICAgIDogY29udmVydEJsb2NrKFtub2RlLmNvbnNlcXVlbnRdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb25zZXF1ZW50Q29udGV4dCwgbm9kZUxvY2F0aW9uKG5vZGUuY29uc2VxdWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlXG4gICAgPyBub2RlLmFsdGVybmF0ZS50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIlxuICAgICAgPyBjb252ZXJ0QmxvY2sobm9kZS5hbHRlcm5hdGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGFsdGVybmF0ZUNvbnRleHQpXG4gICAgICA6IGNvbnZlcnRCbG9jayhbbm9kZS5hbHRlcm5hdGVdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBhbHRlcm5hdGVDb250ZXh0LCBub2RlTG9jYXRpb24obm9kZS5hbHRlcm5hdGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oYWx0ZXJuYXRlID8ge2FsdGVybmF0ZX0gOiB7fSksXG4gICAgY29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQsXG4gICAga2luZDogXCJJZlN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYmxvY2stYm9kaWVkIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLldoaWxlU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgd2hpbGUgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRXaGlsZShub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuYm9keS50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ3aGlsZSB3aXRob3V0IGJsb2NrIGJvZHlcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudGVzdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiV2hpbGVTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ3aGlsZVwiLCBub2RlLnN0YXJ0ID8/IDAsIG5vZGUudGVzdC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIEJhYmVsIHBhcnNlZCBhbiBvcGVyYXRpb24gdGhhdCBtYWtlcyBnZW5lcmF0ZWQgSmF2YVNjcmlwdC1mYW1pbHkgc2NhbGFyIG91dHB1dCByZXF1aXJlIHplcm8gY2Fub25pY2FsaXphdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBCYWJlbCBwYXJzZXIgc3VidHJlZS5cbiAqIEBwYXJhbSB7V2Vha1NldDxvYmplY3Q+fSBbdmlzaXRlZF0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHN1YnRyZWUgY29udGFpbnMgaW50ZWdlciBuZWdhdGlvbiBvciBtdWx0aXBsaWNhdGlvbiBzeW50YXguXG4gKi9cbmZ1bmN0aW9uIHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8odmFsdWUsIHZpc2l0ZWQgPSBuZXcgV2Vha1NldCgpKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICBpZiAodmlzaXRlZC5oYXModmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICB2aXNpdGVkLmFkZCh2YWx1ZSlcbiAgaWYgKFJlZmxlY3QuZ2V0KHZhbHVlLCBcInR5cGVcIikgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJvcGVyYXRvclwiKSA9PSBcIi1cIikgcmV0dXJuIHRydWVcbiAgaWYgKFJlZmxlY3QuZ2V0KHZhbHVlLCBcInR5cGVcIikgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIgJiYgUmVmbGVjdC5nZXQodmFsdWUsIFwib3BlcmF0b3JcIikgPT0gXCIqXCIpIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5zb21lKChba2V5LCBjaGlsZF0pID0+XG4gICAgIVtcImV4dHJhXCIsIFwiaW5uZXJDb21tZW50c1wiLCBcImxlYWRpbmdDb21tZW50c1wiLCBcImxvY1wiLCBcInRyYWlsaW5nQ29tbWVudHNcIl0uaW5jbHVkZXMoa2V5KSAmJlxuICAgIChBcnJheS5pc0FycmF5KGNoaWxkKVxuICAgICAgPyBjaGlsZC5zb21lKChpdGVtKSA9PiBwYXJzZXJUcmVlUmVxdWlyZXNDYW5vbmljYWxaZXJvKGl0ZW0sIHZpc2l0ZWQpKVxuICAgICAgOiBwYXJzZXJUcmVlUmVxdWlyZXNDYW5vbmljYWxaZXJvKGNoaWxkLCB2aXNpdGVkKSkpXG59XG5cbi8qKlxuICogUmVjb2duaXplcyB0aGUgcGFyc2VyLW93bmVkIHJlY2VpdmVyIHBhcmVudGhlc2VzIGVtaXR0ZWQgb25seSBmb3IgY2Fub25pY2FsIGludGVnZXIgb3V0cHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdXBlcn0gcmVjZWl2ZXIgLSBRdWFsaWZpZWQtY2FsbCByZWNlaXZlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNhbGxFeHByZXNzaW9ufSBjYWxsIC0gT3V0ZXIgYHRvU3RyaW5nYCBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHJlY2VpdmVyIGhhcyB0aGUgZ2VuZXJhdGVkIHdyYXBwZXIgc2hhcGUuXG4gKi9cbmZ1bmN0aW9uIGhhc0Nhbm9uaWNhbFplcm9SZWNlaXZlcldyYXBwZXIocmVjZWl2ZXIsIGNhbGwpIHtcbiAgY29uc3QgZXh0cmEgPSBSZWZsZWN0LmdldChyZWNlaXZlciwgXCJleHRyYVwiKVxuICBjb25zdCBleHByZXNzaW9uUGFyZW50aGVzZXMgPSBbXCJCaW5hcnlFeHByZXNzaW9uXCIsIFwiTG9naWNhbEV4cHJlc3Npb25cIiwgXCJVbmFyeUV4cHJlc3Npb25cIl0uaW5jbHVkZXMocmVjZWl2ZXIudHlwZSkgPyAxIDogMFxuICBjb25zdCB3cmFwcGVyUGFyZW50aGVzZXMgPSBleHByZXNzaW9uUGFyZW50aGVzZXMgKyAxXG4gIGNvbnN0IHByb3BlcnR5ID0gY2FsbC5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiA/IGNhbGwuY2FsbGVlLnByb3BlcnR5IDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIEJvb2xlYW4oZXh0cmEpICYmIHR5cGVvZiBleHRyYSA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KGV4dHJhLCBcInBhcmVudGhlc2l6ZWRcIikgPT09IHRydWUgJiZcbiAgICBSZWZsZWN0LmdldChleHRyYSwgXCJwYXJlblN0YXJ0XCIpID09PSBjYWxsLnN0YXJ0ICYmIHR5cGVvZiBjYWxsLnN0YXJ0ID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGNhbGwuZW5kID09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2YgcmVjZWl2ZXIuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcmVjZWl2ZXIuZW5kID09IFwibnVtYmVyXCIgJiYgcHJvcGVydHk/LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICB0eXBlb2YgcHJvcGVydHkuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcHJvcGVydHkuZW5kID09IFwibnVtYmVyXCIgJiYgY2FsbC5jYWxsZWUuc3RhcnQgPT09IGNhbGwuc3RhcnQgJiZcbiAgICByZWNlaXZlci5zdGFydCA9PSBjYWxsLnN0YXJ0ICsgd3JhcHBlclBhcmVudGhlc2VzICYmIHByb3BlcnR5LnN0YXJ0ID09IHJlY2VpdmVyLmVuZCArIHdyYXBwZXJQYXJlbnRoZXNlcyArIDEgJiZcbiAgICBwcm9wZXJ0eS5lbmQgPT0gcHJvcGVydHkuc3RhcnQgKyBcInRvU3RyaW5nXCIubGVuZ3RoICYmIGNhbGwuZW5kID09IHByb3BlcnR5LmVuZCArIDJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbnNvbGUubG9nIGVudHJ5LXBvaW50IGNhbGwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHRoaXMgcGFyc2VkIG1vZHVsZSBjb250YWlucyBhIHNpZ24tcHJvZHVjaW5nIGludGVnZXIgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gUHJpbnQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJpbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgbm9kZS5leHByZXNzaW9uLnR5cGUgIT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FsbCA9IG5vZGUuZXhwcmVzc2lvblxuICBjb25zdCBjYWxsZWUgPSBjYWxsLmNhbGxlZVxuXG4gIGlmIChjYWxsZWUudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBjYWxsZWUuY29tcHV0ZWQgfHwgY2FsbGVlLm9iamVjdC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgY2FsbGVlLm9iamVjdC5uYW1lICE9IFwiY29uc29sZVwiIHx8IGNhbGxlZS5wcm9wZXJ0eS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNhbGxlZS5wcm9wZXJ0eS5uYW1lICE9IFwibG9nXCIgfHxcbiAgICBjYWxsLmFyZ3VtZW50cy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJlbnRyeS1wb2ludCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgbGV0IGFyZ3VtZW50ID0gY2FsbC5hcmd1bWVudHNbMF1cblxuICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIGFyZ3VtZW50LmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFhcmd1bWVudC5jYWxsZWUuY29tcHV0ZWQgJiZcbiAgICAhYXJndW1lbnQuY2FsbGVlLm9wdGlvbmFsICYmIGFyZ3VtZW50LmNhbGxlZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIgJiYgYXJndW1lbnQuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBhcmd1bWVudC5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcInRvU3RyaW5nXCIgJiYgIWFyZ3VtZW50Lm9wdGlvbmFsICYmICFhcmd1bWVudC50eXBlQXJndW1lbnRzICYmXG4gICAgIWFyZ3VtZW50LnR5cGVQYXJhbWV0ZXJzICYmIGFyZ3VtZW50LmFyZ3VtZW50cy5sZW5ndGggPT0gMCkge1xuICAgIGlmICghY2Fub25pY2FsWmVyb1JlcXVpcmVkIHx8ICFoYXNDYW5vbmljYWxaZXJvUmVjZWl2ZXJXcmFwcGVyKGFyZ3VtZW50LmNhbGxlZS5vYmplY3QsIGFyZ3VtZW50KSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImVudHJ5LXBvaW50IHF1YWxpZmllZCBjYWxsXCIsIG5vZGVMb2NhdGlvbihhcmd1bWVudC5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBhcmd1bWVudCA9IGFyZ3VtZW50LmNhbGxlZS5vYmplY3RcbiAgfVxuXG4gIHJldHVybiB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgSmF2YVNjcmlwdCBvciBUeXBlU2NyaXB0IGludG8gdGhlIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGlucHV0Lmxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBbaW5wdXQuY2FwYWJpbGl0aWVzXSAtIENvbXBpbGVyLWF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHt7aXNFbnRyeTogYm9vbGVhbiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCBlcnJvcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgdmFsdWVSZWNvcmRzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fX0gW2lucHV0LnByb2dyYW1dIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0KHtjYXBhYmlsaXRpZXMgPSBbXSwgZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IGZpbGUgPSBwYXJzZUJhYmVsU291cmNlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgc291cmNlVHlwZTogcHJvZ3JhbSA/IFwibW9kdWxlXCIgOiBcInNjcmlwdFwifSlcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnMgPz8gW11cbiAgY29uc3QgdG9rZW5JbmRleCA9IHtieVN0YXJ0OiBuZXcgTWFwKHRva2Vucy5tYXAoKHRva2VuKSA9PiBbdG9rZW4uc3RhcnQsIHRva2VuXSkpLCB0b2tlbnN9XG4gIGNvbnN0IGNhbm9uaWNhbFplcm9SZXF1aXJlZCA9IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oZmlsZS5wcm9ncmFtKVxuXG4gIHJlbWVtYmVyVG9rZW5zKGZpbGUsIHRva2VuSW5kZXgpXG4gIGNvbnN0IG51bGxDaGVja09wdE91dCA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyBmaWxlLmNvbW1lbnRzPy5maW5kKChjb21tZW50KSA9PiBjb21tZW50LnZhbHVlLnRyaW0oKSA9PSBcIkB0cy1ub2NoZWNrXCIpXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAobnVsbENoZWNrT3B0T3V0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImRpc2FibGVkIFR5cGVTY3JpcHQgY2hlY2tpbmcgZGlyZWN0aXZlXCIsIGxvY2F0aW9uRnJvbU9mZnNldHMoXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIG51bGxDaGVja09wdE91dC5zdGFydCA/PyAwLFxuICAgICAgbnVsbENoZWNrT3B0T3V0LmVuZCA/PyBzb3VyY2UubGVuZ3RoXG4gICAgKSlcbiAgfVxuICBpZiAoZmlsZS5wcm9ncmFtLmRpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0b3AtbGV2ZWwgZGlyZWN0aXZlXCIsIG5vZGVMb2NhdGlvbihmaWxlLnByb2dyYW0uZGlyZWN0aXZlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50W119ICovXG4gIGxldCBzZW1hbnRpY05vZGVzID0gW11cblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgZmlsZS5wcm9ncmFtLmJvZHkpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKCFwcm9ncmFtKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW1wb3J0IGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICghcHJvZ3JhbSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImV4cG9ydCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAobm9kZS5zb3VyY2UgfHwgbm9kZS5kZWNsYXJhdGlvbiAmJiAhW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIl0uaW5jbHVkZXMobm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmUtZXhwb3J0IG9yIHVuc3VwcG9ydGVkIGV4cG9ydGVkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSB7XG4gICAgICAgIGlmICghbm9kZS5kZWNsYXJhdGlvbi5sZWFkaW5nQ29tbWVudHMgJiYgbm9kZS5sZWFkaW5nQ29tbWVudHMpIG5vZGUuZGVjbGFyYXRpb24ubGVhZGluZ0NvbW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHNcbiAgICAgICAgc2VtYW50aWNOb2Rlcy5wdXNoKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKG5vZGUuZGVjbGFyYXRpb24pKVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiIHx8IG5vZGUudHlwZSA9PSBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlbWFudGljTm9kZXMucHVzaChub2RlKVxuICB9XG4gIHNlbWFudGljTm9kZXMgPSB0YXNrMDM0SmF2YVNjcmlwdE5vZGVzKHNlbWFudGljTm9kZXMsIGNhcGFiaWxpdGllcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTm9kZXMgPSBzZW1hbnRpY05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS50eXBlID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCBlcnJvck5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc3VwZXJDbGFzcz8udHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLnN1cGVyQ2xhc3MubmFtZSA9PSBcIkVycm9yXCIpXG4gIGNvbnN0IHJlZmVyZW5jZUNsYXNzTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiZcbiAgICBub2RlLmJvZHkuYm9keS5zb21lKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcm9wZXJ0eVwiIHx8IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcml2YXRlUHJvcGVydHlcIikpXG4gIGNvbnN0IHJlY29yZE5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKG5vZGUpICYmICFyZWZlcmVuY2VDbGFzc05vZGVzLmluY2x1ZGVzKG5vZGUpKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gKHtcbiAgICBpZDogYGVycm9yOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckRlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiXG4gIH0pKVxuICBjb25zdCByZWNvcmREZWNsYXJhdGlvbnMgPSByZWNvcmROb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBgcmVjb3JkOiR7aW5kZXh9YFxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gdHlwZVNjcmlwdFR5cGVQYXJhbWV0ZXJzKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gKi8gKG5vZGUudHlwZVBhcmFtZXRlcnMpLCBpZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogY2xhc3NKc2RvY1R5cGVQYXJhbWV0ZXJzKG5vZGUsIGlkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBpZCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IG5vZGUuaWQ/Lm5hbWUgPz8gXCJcIixcbiAgICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGNvbnN0cnVjdG9yOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNvbnN0cnVjdG9yRGVjbGFyYXRpb259ICovICh7fSksXG4gICAgZmllbGRzOiBbXSwgaWQ6IGBjbGFzczoke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNsYXNzRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSwgbWV0aG9kczogW10sIG5hbWU6IG5vZGUuaWQ/Lm5hbWUgPz8gXCJcIlxuICB9KSlcbiAgY29uc3QgcmVjb3JkTmFtZXMgPSAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSAqLyAoXG4gICAgbmV3IE1hcChwcm9ncmFtPy5yZWNvcmRzID8/IFtdKSlcbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgY29uc3QgdmFsdWVSZWNvcmROYW1lcyA9IC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbT8udmFsdWVSZWNvcmRzID8/IHByb2dyYW0/LnJlY29yZHMgPz8gW10pKVxuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChwcm9ncmFtPy5lcnJvcnMgPz8gW10pXG4gIGZvciAoY29uc3QgZmFpbHVyZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe2ZhaWx1cmVzfSkgPT4gZmFpbHVyZXMpKSB7XG4gICAgZXJyb3JOYW1lcy5zZXQoZmFpbHVyZS5uYW1lLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChmYWlsdXJlKSkpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBlcnJvckRlY2xhcmF0aW9ucykgZXJyb3JOYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gY29udmVydEphdmFTY3JpcHRFcnJvcihub2RlLCBlcnJvckRlY2xhcmF0aW9uc1tpbmRleF0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWNvcmREZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWNvcmREZWNsYXJhdGlvbnMpIHZhbHVlUmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGNsYXNzRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHZhbHVlUmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBjb25zdCB2YWx1ZVJlY29yZHNCeUlkID0gbmV3IE1hcChyZWNvcmREZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBjbGFzc2VzQnlJZCA9IG5ldyBNYXAoY2xhc3NEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBjbGFzc2VzID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBwcmVkZWNsYXJlUmVmZXJlbmNlQ2xhc3MoXG4gICAgbm9kZSwgY2xhc3NEZWNsYXJhdGlvbnNbaW5kZXhdLCByZWNvcmROYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2VcbiAgKSlcbiAgY29uc3QgZnVuY3Rpb25Ob2RlcyA9IHNlbWFudGljTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnR5cGUgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBmdW5jdGlvbk5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgYGZ1bmN0aW9uOiR7aW5kZXh9YCkpXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoWy4uLnByb2dyYW0/LmZ1bmN0aW9ucyA/PyBbXV0ubWFwKChbbG9jYWxOYW1lLCBkZWNsYXJhdGlvbl0pID0+IFtsb2NhbE5hbWUsIHtcbiAgICBsb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgbmFtZTogbG9jYWxOYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgcGFyYW1ldGVyczogZGVjbGFyYXRpb24ucGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLFxuICAgIC4uLihkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1dKSlcbiAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtvcGVyYXRpb25zfSkgPT4gb3BlcmF0aW9ucykpIHtcbiAgICBpZiAoIWZ1bmN0aW9uU2lnbmF0dXJlcy5oYXMob3BlcmF0aW9uLm5hbWUpKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KG9wZXJhdGlvbi5uYW1lLCB7XG4gICAgICBsb2NhdGlvbjogbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBvcGVyYXRpb24ubmFtZSxcbiAgICAgIG5hbWVMb2NhdGlvbjogbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBwYXJhbWV0ZXJzOiBvcGVyYXRpb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gKHsuLi5wYXJhbWV0ZXIsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSwgbG9jYXRpb246IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpfSkpLFxuICAgICAgcmV0dXJuVHlwZTogb3BlcmF0aW9uLnJldHVyblR5cGVcbiAgICB9KVxuICB9XG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyBjb252ZXJ0VHlwZVNjcmlwdFJlY29yZChub2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLCByZWNvcmROYW1lcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IGNvbnZlcnRKYXZhU2NyaXB0UmVjb3JkKG5vZGUsIHJlY29yZERlY2xhcmF0aW9uc1tpbmRleF0sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJlZmVyZW5jZUNsYXNzTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29udmVydFJlZmVyZW5jZUNsYXNzQm9kaWVzKHJlZmVyZW5jZUNsYXNzTm9kZXNbaW5kZXhdLCBjbGFzc2VzW2luZGV4XSwgcmVjb3JkTmFtZXMsIHZhbHVlUmVjb3JkTmFtZXMsXG4gICAgICB2YWx1ZVJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZnVuY3Rpb25TaWduYXR1cmVzLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgIGNhbm9uaWNhbFplcm9SZXF1aXJlZClcbiAgfVxuICBjb25zdCBmdW5jdGlvbnMgPSBmdW5jdGlvbk5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZXNbaW5kZXhdLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQpKVxuICBjb25zdCBlbnRyeU5vZGVzID0gc2VtYW50aWNOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUudHlwZSAhPSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiAmJiBub2RlLnR5cGUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS5pc0VudHJ5ICYmIGVudHJ5Tm9kZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0b3AtbGV2ZWwgc2lkZSBlZmZlY3Qgb3V0c2lkZSB0aGUgc2VsZWN0ZWQgZW50cnkgbW9kdWxlXCIsIG5vZGVMb2NhdGlvbihlbnRyeU5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBlbnRyeUxvY2F0aW9uID0gZW50cnlOb2Rlcy5sZW5ndGggPT0gMCA/IGxvY2F0aW9uIDogbG9jYXRpb25Gcm9tT2Zmc2V0cyhcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2UsXG4gICAgZW50cnlOb2Rlc1swXS5zdGFydCA/PyAwLFxuICAgIGVudHJ5Tm9kZXMuYXQoLTEpPy5lbmQgPz8gc291cmNlLmxlbmd0aFxuICApXG4gIGNvbnN0IGVudHJ5QmxvY2sgPSBjb252ZXJ0QmxvY2soXG4gICAgZW50cnlOb2RlcyxcbiAgICBsYW5ndWFnZSxcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2UsXG4gICAgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgIHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzOiBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzOiBlcnJvcnNCeUlkLCBmdW5jdGlvbnM6IGZ1bmN0aW9uU2lnbmF0dXJlcyxcbiAgICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3IoZW50cnlOb2RlcyksIHJlY29yZE5hbWVzLCByZWNvcmRzOiB2YWx1ZVJlY29yZHNCeUlkLCB2YWx1ZVJlY29yZE5hbWVzfSxcbiAgICBlbnRyeUxvY2F0aW9uXG4gIClcblxuICBpZiAoIXByb2dyYW0gJiYgZnVuY3Rpb25zLmxlbmd0aCA9PSAwICYmIGNhcGFiaWxpdGllcy5sZW5ndGggPT0gMCAmJiAhYmxvY2tSZWZlcmVuY2VzUHJvdGVjdGVkRW50cnkoZW50cnlCbG9jaykpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibW9kdWxlIHdpdGhvdXQgYSBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICByZXR1cm4ge1xuICAgIGVudHJ5UG9pbnQ6IHtcbiAgICAgIGJvZHk6IGVudHJ5QmxvY2ssXG4gICAgICBraW5kOiBcIkVudHJ5UG9pbnRcIixcbiAgICAgIGxvY2F0aW9uOiBlbnRyeUxvY2F0aW9uXG4gICAgfSxcbiAgICBmdW5jdGlvbnMsXG4gICAga2luZDogXCJNb2R1bGVcIixcbiAgICBsb2NhdGlvbixcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4oY2xhc3Nlcy5sZW5ndGggPiAwID8ge2NsYXNzZXN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgZXhhY3QgcHJvdGVjdGVkIE5vZGUgcHJvYmUgc3VwcG9ydCBiZWZvcmUgcG9ydGFibGUgY29udmVyc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudFtdfSBub2RlcyAtIFBhcnNlZCB0b3AtbGV2ZWwgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IGNhcGFiaWxpdGllcyAtIEF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudFtdfSBQb3J0YWJsZSBzdGF0ZW1lbnRzLlxuICovXG5mdW5jdGlvbiB0YXNrMDM0SmF2YVNjcmlwdE5vZGVzKG5vZGVzLCBjYXBhYmlsaXRpZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpKSByZXR1cm4gbm9kZXNcbiAgY29uc3QgZmlyc3QgPSBub2Rlc1swXVxuICBjb25zdCBtYXJrZXIgPSBmaXJzdD8ubGVhZGluZ0NvbW1lbnRzPy5zb21lKChjb21tZW50KSA9PiBjb21tZW50LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJlxuICAgIGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwic2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0XCIpXG5cbiAgaWYgKCFtYXJrZXIpIHJldHVybiBub2Rlc1xuICBpZiAoIWhhc0V4YWN0RWZmZWN0U3VwcG9ydChzb3VyY2UsIGxhbmd1YWdlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKGZpcnN0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRGc1wiXSwgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiXSxcbiAgICBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiXSwgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIl0sXG4gICAgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlQ2xvc2VGYWlsdXJlXCJdLCBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiXSxcbiAgICBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVSZXNvdXJjZVwiXSwgW1wiVmFyaWFibGVEZWNsYXJhdGlvblwiLCBcIl9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2VcIl0sXG4gICAgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlRWZmZWN0XCJdLCBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVBY3F1aXJlXCJdLFxuICAgIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZVJlYWRcIl0sIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVUcmFjZVwiXVxuICBdXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgZGVjbGFyYXRpb24gbmFtZSB1c2VkIHRvIHZlcmlmeSBvbmUgcHJvdGVjdGVkIHN1cHBvcnQgc3RhdGVtZW50LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnQgfCB1bmRlZmluZWR9IG5vZGUgLSBDYW5kaWRhdGUgc3RhdGVtZW50LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBEZWNsYXJlZCBuYW1lLlxuICAgKi9cbiAgY29uc3Qgbm9kZU5hbWUgPSAobm9kZSkgPT4ge1xuICAgIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgJiYgbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID09IDEgJiYgbm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgcmV0dXJuIG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLm5hbWVcbiAgICB9XG4gICAgY29uc3QgaWQgPSBSZWZsZWN0LmdldChub2RlLCBcImlkXCIpXG4gICAgcmV0dXJuIGlkICYmIHR5cGVvZiBpZCA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmdldChpZCwgXCJuYW1lXCIpID09IFwic3RyaW5nXCIgPyBSZWZsZWN0LmdldChpZCwgXCJuYW1lXCIpIDogdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChbdHlwZSwgbmFtZV0sIGluZGV4KSA9PiBub2Rlc1tpbmRleF0/LnR5cGUgPT0gdHlwZSAmJiBub2RlTmFtZShub2Rlc1tpbmRleF0pID09IG5hbWUpXG4gIGNvbnN0IG5leHQgPSBub2Rlc1tleHBlY3RlZC5sZW5ndGhdXG4gIGNvbnN0IGVuZGVkID0gbmV4dD8ubGVhZGluZ0NvbW1lbnRzPy5zb21lKChjb21tZW50KSA9PiBjb21tZW50LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJlxuICAgIGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwic2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LWVuZFwiKVxuXG4gIGlmICghbWF0Y2hlcyB8fCBuZXh0ICYmICFlbmRlZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKGZpcnN0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbm9kZXMuc2xpY2UoZXhwZWN0ZWQubGVuZ3RoKVxufVxuXG4vKipcbiAqIEludm9rZXMgQmFiZWwgYW5kIG5vcm1hbGl6ZXMgc3ludGF4IGZhaWx1cmVzLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBpbnB1dC5sYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtcIm1vZHVsZVwiIHwgXCJzY3JpcHRcIn0gaW5wdXQuc291cmNlVHlwZSAtIEV4cGxpY2l0IHBhcnNlciBnb2FsLlxuICogQHJldHVybnMge2ltcG9ydChcIkBiYWJlbC9wYXJzZXJcIikuUGFyc2VSZXN1bHQ8aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZpbGU+fSBCYWJlbCBmaWxlLlxuICovXG5mdW5jdGlvbiBwYXJzZUJhYmVsU291cmNlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgc291cmNlVHlwZX0pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VCYWJlbChzb3VyY2UsIHtcbiAgICAgIGFsbG93QXdhaXRPdXRzaWRlRnVuY3Rpb246IHRydWUsXG4gICAgICBwbHVnaW5zOiBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFtcImRlY29yYXRvcnMtbGVnYWN5XCIsIFwidHlwZXNjcmlwdFwiXSA6IFtcImRlY29yYXRvcnMtbGVnYWN5XCJdLFxuICAgICAgc291cmNlRmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgc291cmNlVHlwZSxcbiAgICAgIHRva2VuczogdHJ1ZVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHBhcnNlRmFpbHVyZShsYW5ndWFnZSwgZXJyb3IsIGJhYmVsUGFyc2VyRmFpbHVyZUxvY2F0aW9uKGVycm9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIG9ubHkgcGFyc2VyLW93bmVkIEVTTSBpbXBvcnQvZXhwb3J0IGRlY2xhcmF0aW9ucyBmb3IgcHJvZ3JhbSBhc3NlbWJseS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gaW5wdXQubGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2RlY2xhcmF0aW9uTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBpbXBvcnRlZE5hbWU6IHN0cmluZywgaW1wb3J0ZWROYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYWxOYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCBzdGRsaWJDYW5kaWRhdGU/OiB0cnVlLCB0eXBlT25seTogYm9vbGVhbn1bXSwgZXhwb3J0czoge2RlY2xhcmF0aW9uTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgZXhwb3J0ZWROYW1lOiBzdHJpbmcsIGV4cG9ydGVkTmFtZUxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhbE5hbWVMb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHR5cGVPbmx5OiBib29sZWFufVtdfX0gUGFyc2VyLW93bmVkIEVTTSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdEphdmFTY3JpcHRUeXBlU2NyaXB0TW9kdWxlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZX0pIHtcbiAgY29uc3QgZmlsZSA9IHBhcnNlQmFiZWxTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlLCBzb3VyY2VUeXBlOiBcIm1vZHVsZVwifSlcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnMgPz8gW11cblxuICByZW1lbWJlclRva2VucyhmaWxlLCB7YnlTdGFydDogbmV3IE1hcCh0b2tlbnMubWFwKCh0b2tlbikgPT4gW3Rva2VuLnN0YXJ0LCB0b2tlbl0pKSwgdG9rZW5zfSlcbiAgY29uc3QgY29tbW9uSnMgPSBmaW5kQ29tbW9uSnNOb2RlKGZpbGUucHJvZ3JhbSlcblxuICBpZiAoY29tbW9uSnMpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIkNvbW1vbkpTIHJlcXVpcmUvbW9kdWxlIGV4cG9ydHNcIiwgbm9kZUxvY2F0aW9uKGNvbW1vbkpzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgaW1wb3J0cyA9IFtdXG4gIGNvbnN0IGV4cG9ydHMgPSBbXVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBmaWxlLnByb2dyYW0uYm9keSkge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZSA9IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCIuL1wiKSB8fCBub2RlLnNvdXJjZS52YWx1ZS5zdGFydHNXaXRoKFwiLi4vXCIpXG4gICAgICBjb25zdCBzdGRsaWJDYW5kaWRhdGUgPSBub2RlLnNvdXJjZS52YWx1ZS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQ6XCIpIHx8IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCJub2RlOlwiKVxuXG4gICAgICBpZiAoIXJlbGF0aXZlICYmICFzdGRsaWJDYW5kaWRhdGUpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYmFyZSBwYWNrYWdlIGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc3BlY2lmaWVycy5sZW5ndGggPT0gMCkgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic2lkZS1lZmZlY3Qtb25seSBpbXBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKChub2RlLmF0dHJpYnV0ZXM/Lmxlbmd0aCA/PyAwKSA+IDAgfHwgKG5vZGUuYXNzZXJ0aW9ucz8ubGVuZ3RoID8/IDApID4gMCB8fCBSZWZsZWN0LmdldChub2RlLCBcInBoYXNlXCIpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImltcG9ydCBhdHRyaWJ1dGVzIG9yIHBoYXNlXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIG5vZGUuc3BlY2lmaWVycykge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLnR5cGUgIT0gXCJJbXBvcnRTcGVjaWZpZXJcIiB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudHlwZSAhPSBcIklkZW50aWZpZXJcIikge1xuICAgICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBzcGVjaWZpZXIudHlwZSwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cbiAgICAgICAgaW1wb3J0cy5wdXNoKHtcbiAgICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgaW1wb3J0ZWROYW1lOiBzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSxcbiAgICAgICAgICBpbXBvcnRlZE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5pbXBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIubG9jYWwubmFtZSxcbiAgICAgICAgICBsb2NhbE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5sb2NhbCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzcGVjaWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHBhdGhMb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBzcGVjaWZpZXI6IG5vZGUuc291cmNlLnZhbHVlLFxuICAgICAgICAgIC4uLighcmVsYXRpdmUgPyB7c3RkbGliQ2FuZGlkYXRlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAodHJ1ZSl9IDoge30pLFxuICAgICAgICAgIHR5cGVPbmx5OiBub2RlLmltcG9ydEtpbmQgPT0gXCJ0eXBlXCIgfHwgc3BlY2lmaWVyLmltcG9ydEtpbmQgPT0gXCJ0eXBlXCJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cIiB8fCBub2RlLnR5cGUgPT0gXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgIT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIpIGNvbnRpbnVlXG4gICAgaWYgKG5vZGUuc291cmNlKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZS1leHBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChub2RlLmV4cG9ydEtpbmQgPT0gXCJ0eXBlXCIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInR5cGUtb25seSBleHBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSB7XG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi50eXBlICE9IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSAhPSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ1bnN1cHBvcnRlZCBleHBvcnRlZCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5kZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBpZGVudGlmaWVyID0gbm9kZS5kZWNsYXJhdGlvbi5pZFxuXG4gICAgICBpZiAoIWlkZW50aWZpZXIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFub255bW91cyBleHBvcnRlZCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5kZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBleHBvcnRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGV4cG9ydGVkTmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgICBleHBvcnRlZE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhbE5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgICAgbG9jYWxOYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSlcbiAgICAgIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBub2RlLnNwZWNpZmllcnMpIHtcbiAgICAgIGlmIChzcGVjaWZpZXIudHlwZSAhPSBcIkV4cG9ydFNwZWNpZmllclwiIHx8IHNwZWNpZmllci5sb2NhbC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHNwZWNpZmllci5leHBvcnRlZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBzcGVjaWZpZXIudHlwZSwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAoc3BlY2lmaWVyLmV4cG9ydEtpbmQgPT0gXCJ0eXBlXCIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInR5cGUtb25seSBleHBvcnRcIiwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBleHBvcnRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGV4cG9ydGVkTmFtZTogc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUsXG4gICAgICAgIGV4cG9ydGVkTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oc3BlY2lmaWVyLmV4cG9ydGVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIubG9jYWwubmFtZSxcbiAgICAgICAgbG9jYWxOYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihzcGVjaWZpZXIubG9jYWwsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGR5bmFtaWMgPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoZmlsZS5wcm9ncmFtLCBcImR5bmFtaWNcIiwgbmV3IFNldCgpKVxuXG4gIGlmIChkeW5hbWljKSBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9EWU5BTUlDX1JFRkVSRU5DRVwiLFxuICAgIFwiRHluYW1pYyBpbXBvcnQgY2Fubm90IHByb3ZlIGEgc3RhbmRhcmQtbGlicmFyeSBmYWNhZGUgaWRlbnRpdHkuXCIsIG5vZGVMb2NhdGlvbihkeW5hbWljLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc3RkbGliQmluZGluZ3MgPSBuZXcgU2V0KGltcG9ydHMuZmlsdGVyKCh7c3RkbGliQ2FuZGlkYXRlfSkgPT4gc3RkbGliQ2FuZGlkYXRlKS5tYXAoKHtsb2NhbE5hbWV9KSA9PiBsb2NhbE5hbWUpKVxuXG4gIGlmIChzdGRsaWJCaW5kaW5ncy5zaXplID4gMCkge1xuICAgIGNvbnN0IG11dGF0aW9uID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGZpbGUucHJvZ3JhbSwgXCJtdXRhdGlvblwiLCBzdGRsaWJCaW5kaW5ncylcblxuICAgIGlmIChtdXRhdGlvbikgZmFjYWRlRnJvbnRlbmRGYWlsdXJlKGxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfU0hBRE9XRURcIixcbiAgICAgIFwiQSBwYXJzZXItcHJvdmVkIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIGJpbmRpbmcgY2Fubm90IGJlIHJlYXNzaWduZWQgb3Igc2hhZG93ZWQuXCIsIG5vZGVMb2NhdGlvbihtdXRhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgcmVmbGVjdGlvbiA9IGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZShmaWxlLnByb2dyYW0sIFwicmVmbGVjdGlvblwiLCBzdGRsaWJCaW5kaW5ncylcblxuICAgIGlmIChyZWZsZWN0aW9uKSBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9SRUZMRUNUSU9OX1VOU1VQUE9SVEVEXCIsXG4gICAgICBcIlJlZmxlY3RpdmUgbG9va3VwIGNhbm5vdCBwcmVzZXJ2ZSBhIHByb3ZlZCBzdGFuZGFyZC1saWJyYXJ5IGZhY2FkZSBzeW1ib2wgaWRlbnRpdHkuXCIsIG5vZGVMb2NhdGlvbihyZWZsZWN0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7ZXhwb3J0cywgaW1wb3J0c31cbn1cblxuLyoqXG4gKiBGaW5kcyBwYXJzZXItb3duZWQgZHluYW1pYywgbXV0YXRpbmcsIG9yIHJlZmxlY3RpdmUgY29uc3RydWN0cyByZWxldmFudCB0byBmYWNhZGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQmFiZWwgc3VidHJlZS5cbiAqIEBwYXJhbSB7XCJkeW5hbWljXCIgfCBcIm11dGF0aW9uXCIgfCBcInJlZmxlY3Rpb25cIn0gbW9kZSAtIFJlamVjdGVkIGNvbnN0cnVjdCBjbGFzcy5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IGJpbmRpbmdzIC0gUGFyc2VyLXByb3ZlZCBuYXRpdmUgZmFjYWRlIGJpbmRpbmdzLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIGd1YXJkLlxuICogQHJldHVybnMge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlIHwgdW5kZWZpbmVkfSBGaXJzdCByZWplY3RlZCBwYXJzZXIgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKHZhbHVlLCBtb2RlLCBiaW5kaW5ncywgc2VlbiA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWRcbiAgc2Vlbi5hZGQodmFsdWUpXG4gIGNvbnN0IG5vZGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG5cbiAgaWYgKG1vZGUgPT0gXCJkeW5hbWljXCIgJiYgbm9kZS50eXBlID09IFwiSW1wb3J0RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgc291cmNlTm9kZSA9IG5vZGUuc291cmNlXG5cbiAgICBpZiAoaXNGYWNhZGVNb2R1bGVTdHJpbmdOb2RlKHNvdXJjZU5vZGUpKSByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwiZHluYW1pY1wiICYmIG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUgJiYgdHlwZW9mIG5vZGUuY2FsbGVlID09IFwib2JqZWN0XCIgJiZcbiAgICBSZWZsZWN0LmdldChub2RlLmNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSW1wb3J0XCIpIHtcbiAgICBjb25zdCBhcmd1bWVudHNfID0gQXJyYXkuaXNBcnJheShub2RlLmFyZ3VtZW50cykgPyBub2RlLmFyZ3VtZW50cyA6IFtdXG5cbiAgICBpZiAoaXNGYWNhZGVNb2R1bGVTdHJpbmdOb2RlKGFyZ3VtZW50c19bMF0pKSByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwicmVmbGVjdGlvblwiICYmIG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUgJiYgdHlwZW9mIG5vZGUuY2FsbGVlID09IFwib2JqZWN0XCIgJiZcbiAgICBSZWZsZWN0LmdldChub2RlLmNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmIFJlZmxlY3QuZ2V0KG5vZGUuY2FsbGVlLCBcIm5hbWVcIikgPT0gXCJldmFsXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwibXV0YXRpb25cIiAmJiAobm9kZS50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiB8fCBub2RlLnR5cGUgPT0gXCJVcGRhdGVFeHByZXNzaW9uXCIpKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gbm9kZS50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiA/IG5vZGUubGVmdCA6IG5vZGUuYXJndW1lbnRcblxuICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICBiaW5kaW5ncy5oYXMoU3RyaW5nKFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJuYW1lXCIpKSkpIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICBpZiAoW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGl0ZW0sIG1vZGUsIGJpbmRpbmdzLCBzZWVuKVxuXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGNoaWxkLCBtb2RlLCBiaW5kaW5ncywgc2VlbilcblxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENoZWNrcyBhIEJhYmVsIHN0cmluZyBsaXRlcmFsIGZvciBvbmUgY2F0YWxvZy1zdHlsZSBzdGRsaWIgbW9kdWxlIGlkZW50aXR5LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIGltcG9ydCBhcmd1bWVudC9zb3VyY2Ugbm9kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBleGFjdCBsaXRlcmFsIGlzIGEgZmFjYWRlIG1vZHVsZSBjYW5kaWRhdGUuXG4gKi9cbmZ1bmN0aW9uIGlzRmFjYWRlTW9kdWxlU3RyaW5nTm9kZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcbiAgY29uc3Qgbm9kZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3QgbGl0ZXJhbCA9IG5vZGUudmFsdWVcblxuICByZXR1cm4gbm9kZS50eXBlID09IFwiU3RyaW5nTGl0ZXJhbFwiICYmIHR5cGVvZiBsaXRlcmFsID09IFwic3RyaW5nXCIgJiZcbiAgICAobGl0ZXJhbC5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQ6XCIpIHx8IGxpdGVyYWwuc3RhcnRzV2l0aChcIm5vZGU6XCIpKVxufVxuXG4vKipcbiAqIFRocm93cyBvbmUgc3RhYmxlIGxvY2F0ZWQgZmFjYWRlIGZyb250ZW5kIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgLSBTdGFibGUgZGlhZ25vc3RpYyBjb2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBEaWFnbm9zdGljIGRldGFpbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIGNvZGUsIG1lc3NhZ2UsIGxvY2F0aW9uKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbWVzc2FnZX0pXG59XG5cbi8qKlxuICogRmluZHMgQ29tbW9uSlMgY29uc3RydWN0cyB0aHJvdWdoIEJhYmVsIG5vZGVzIHJhdGhlciB0aGFuIHNvdXJjZS10ZXh0IG1hdGNoaW5nLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIHN1YnRyZWUuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gQ3ljbGUgZ3VhcmQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGUgfCB1bmRlZmluZWR9IFVuc3VwcG9ydGVkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRDb21tb25Kc05vZGUodmFsdWUsIHNlZW4gPSBuZXcgV2Vha1NldCgpKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXModmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkXG4gIHNlZW4uYWRkKHZhbHVlKVxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWVcblxuICAgIGlmIChjYWxsZWUgJiYgdHlwZW9mIGNhbGxlZSA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KGNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmIFJlZmxlY3QuZ2V0KGNhbGxlZSwgXCJuYW1lXCIpID09IFwicmVxdWlyZVwiKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb2JqZWN0ID0gbm9kZS5vYmplY3RcblxuICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KG9iamVjdCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICBbXCJleHBvcnRzXCIsIFwibW9kdWxlXCJdLmluY2x1ZGVzKFN0cmluZyhSZWZsZWN0LmdldChvYmplY3QsIFwibmFtZVwiKSkpKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlKSkge1xuICAgIGlmIChbXCJleHRyYVwiLCBcImlubmVyQ29tbWVudHNcIiwgXCJsZWFkaW5nQ29tbWVudHNcIiwgXCJsb2NcIiwgXCJ0cmFpbGluZ0NvbW1lbnRzXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kQ29tbW9uSnNOb2RlKGl0ZW0sIHNlZW4pXG5cbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm91bmQgPSBmaW5kQ29tbW9uSnNOb2RlKGNoaWxkLCBzZWVuKVxuXG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIEJhYmVsJ3MgemVyby1iYXNlZCBVVEYtMTYgZmFpbHVyZSBvZmZzZXQgd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gTmF0aXZlIEJhYmVsIHBhcnNlciBlcnJvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFJlcXVlc3RlZCBzb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBGYWlsdXJlIHJhbmdlLlxuICovXG5mdW5jdGlvbiBiYWJlbFBhcnNlckZhaWx1cmVMb2NhdGlvbihlcnJvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPSBcIm9iamVjdFwiKSByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGlyZWN0ID0gUmVmbGVjdC5nZXQoZXJyb3IsIFwicG9zXCIpXG4gIGNvbnN0IHBhcnNlckxvY2F0aW9uID0gUmVmbGVjdC5nZXQoZXJyb3IsIFwibG9jXCIpXG4gIGNvbnN0IGxvY2F0ZWQgPSBwYXJzZXJMb2NhdGlvbiAmJiB0eXBlb2YgcGFyc2VyTG9jYXRpb24gPT0gXCJvYmplY3RcIiA/IFJlZmxlY3QuZ2V0KHBhcnNlckxvY2F0aW9uLCBcImluZGV4XCIpIDogdW5kZWZpbmVkXG4gIGNvbnN0IG9mZnNldCA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKGRpcmVjdCkgPyBkaXJlY3QgOiBsb2NhdGVkXG5cbiAgaWYgKHR5cGVvZiBvZmZzZXQgIT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIob2Zmc2V0KSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+IHNvdXJjZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIG9mZnNldCwgTWF0aC5taW4ob2Zmc2V0ICsgMSwgc291cmNlLmxlbmd0aCkpXG59XG5cbi8qKlxuICogQXNzb2NpYXRlcyBCYWJlbCBub2RlcyB3aXRoIHRoZWlyIHBhcnNlciB0b2tlbiBzdHJlYW0gd2l0aG91dCBsZWFraW5nIGl0IGludG8gc2VtYW50aWMgdmFsdWVzLlxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlIC0gQ3VycmVudCBwYXJzZXIgdmFsdWUuXG4gKiBAcGFyYW0ge0JhYmVsVG9rZW5JbmRleH0gdG9rZW5zIC0gSW5kZXhlZCBwYXJzZXIgdG9rZW5zLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFt2aXNpdGVkXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVtZW1iZXJUb2tlbnModmFsdWUsIHRva2VucywgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlKSkgcmV0dXJuXG5cbiAgdmlzaXRlZC5hZGQodmFsdWUpXG4gIG5vZGVUb2tlbnMuc2V0KHZhbHVlLCB0b2tlbnMpXG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbSA9PSBcIm9iamVjdFwiKSByZW1lbWJlclRva2VucyhpdGVtLCB0b2tlbnMsIHZpc2l0ZWQpXG4gICAgfSBlbHNlIGlmIChjaGlsZCAmJiB0eXBlb2YgY2hpbGQgPT0gXCJvYmplY3RcIikgcmVtZW1iZXJUb2tlbnMoY2hpbGQsIHRva2VucywgdmlzaXRlZClcbiAgfVxufVxuIl19
|
|
2487
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC10eXBlc2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxLQUFLLElBQUksVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ2pELE9BQU8sRUFBQyxLQUFLLElBQUksWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzNFLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFB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Q0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUMzRixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7SUFDNUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU07SUFFOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsQixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUs7Z0JBQUUsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksUUFBUTtvQkFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN0RyxDQUFDO2FBQU0sSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtZQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3RGLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7cGFyc2UgYXMgcGFyc2VCYWJlbH0gZnJvbSBcIkBiYWJlbC9wYXJzZXJcIlxuaW1wb3J0IHtwYXJzZSBhcyBwYXJzZUNvbW1lbnR9IGZyb20gXCJjb21tZW50LXBhcnNlclwiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBwYXJzZUZhaWx1cmUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7YmxvY2tSZWZlcmVuY2VzUHJvdGVjdGVkRW50cnl9IGZyb20gXCIuLi9zZW1hbnRpYy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7c2V0UGFyc2VyUmFuZ2VzLCB3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFycywgc2NhbGFyVHlwZX0gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcbmltcG9ydCB7aGFzRXhhY3RFZmZlY3RTdXBwb3J0fSBmcm9tIFwiLi4vYmFja2VuZHMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge3JlcXVpcmVTb3VyY2VSZXR1cm5UeXBlLCByZXF1aXJlU291cmNlU2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge2RvY3VtZW50ZWRWYWx1ZVR5cGUsIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUsIGl0ZXJhdGlvbk9wZXJhbmRUeXBlLCBrbm93bkNhbGxSZXR1cm5UeXBlLCBsaXN0VHlwZSwgbWFwVHlwZSwgb3B0aW9uYWxUeXBlLCBvcmRlcmVkTWFwVHlwZUZyb21NYXAsIG93bmVkUmVmZXJlbmNlVHlwZSwgb3duZWRSZXNvdXJjZVR5cGUsIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlLCByZWNvcmRUeXBlLCByZWZlcmVuY2VUeXBlLCB0eXBlVmFyaWFibGV9IGZyb20gXCIuL3R5cGVzLmpzXCJcblxuLyoqIEB0eXBlZGVmIHtOb25OdWxsYWJsZTxpbXBvcnQoXCJAYmFiZWwvcGFyc2VyXCIpLlBhcnNlUmVzdWx0PGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GaWxlPltcInRva2Vuc1wiXT5bbnVtYmVyXX0gQmFiZWxUb2tlbiAqL1xuLyoqIEB0eXBlZGVmIHt7YnlTdGFydDogTWFwPG51bWJlciwgQmFiZWxUb2tlbj4sIHRva2VuczogQmFiZWxUb2tlbltdfX0gQmFiZWxUb2tlbkluZGV4ICovXG4vKiogQHR5cGVkZWYge3tuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnM/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10sIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn19IEphdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZSAqL1xuLyoqIEB0eXBlZGVmIHt7YmluZGluZ3M6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+LCBjYXRjaEJpbmRpbmdOYW1lcz86IFNldDxzdHJpbmc+LCBjYXRjaEJpbmRpbmdOb2Rlcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoQmluZGluZz4sIGNsYXNzZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCBjdXJyZW50Q2xhc3M/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uLCBlcnJvcnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBlcnJvck5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+LCBsZXhpY2FsVmFsdWVOYW1lcz86IFNldDxzdHJpbmc+LCBvcmRlcmVkTWFwRGVjbGFyYXRpb25zPzogU2V0PG9iamVjdD4sIHJlY29yZE5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj4sIHZhbHVlUmVjb3JkTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59fSBKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHQgKi9cblxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgQmFiZWxUb2tlbkluZGV4Pn0gKi9cbmNvbnN0IG5vZGVUb2tlbnMgPSBuZXcgV2Vha01hcCgpXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1xuICBcIl9fZGVmaW5lR2V0dGVyX19cIiwgXCJfX2RlZmluZVNldHRlcl9fXCIsIFwiX19sb29rdXBHZXR0ZXJfX1wiLCBcIl9fbG9va3VwU2V0dGVyX19cIiwgXCJfX3Byb3RvX19cIiwgXCJjb25zdHJ1Y3RvclwiLFxuICBcImhhc093blByb3BlcnR5XCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJ0b1N0cmluZ1wiLCBcInZhbHVlT2ZcIlxuXSlcbmNvbnN0IGJhYmVsQmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXSxcbiAgW1wiPT09XCIsIFwiRXF1YWxcIl0sXG4gIFtcIiE9PVwiLCBcIk5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sXG4gIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLFxuICBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sXG4gIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdXG5dKVxuXG4vKipcbiAqIFJldHVybnMgYSBzb3VyY2UgbG9jYXRpb24gZm9yIGEgQmFiZWwgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9IG5vZGUgLSBCYWJlbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gTm9ybWFsaXplZCBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKHR5cGVvZiBub2RlLnN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIG5vZGUuZW5kICE9IFwibnVtYmVyXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgc291cmNlIG9mZnNldHMgZm9yICR7bm9kZS50eXBlfS5gKVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgbm9kZS5zdGFydCwgbm9kZS5lbmQpXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaWRlbnRpZmllciBzcGVsbGluZyByYXRoZXIgdGhhbiBhIHRyYWlsaW5nIFR5cGVTY3JpcHQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXJ9IG5vZGUgLSBQYXJzZXIgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IElkZW50aWZpZXIgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZS5zdGFydCAhPSBcIm51bWJlclwiKSB0aHJvdyBuZXcgRXJyb3IoXCJCYWJlbCBvbWl0dGVkIGFuIGlkZW50aWZpZXIgc3RhcnQgb2Zmc2V0LlwiKVxuICBjb25zdCB0b2tlbiA9IG5vZGVUb2tlbnMuZ2V0KG5vZGUpPy5ieVN0YXJ0LmdldChub2RlLnN0YXJ0KVxuXG4gIGlmICghdG9rZW4gfHwgdG9rZW4udHlwZS5sYWJlbCAhPSBcIm5hbWVcIikgdGhyb3cgbmV3IEVycm9yKGBCYWJlbCBvbWl0dGVkIHRoZSBpZGVudGlmaWVyIHRva2VuIGZvciAnJHtub2RlLm5hbWV9Jy5gKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpXG59XG5cbi8qKlxuICogTG9jYXRlcyBvbmUgQmFiZWwgdG9rZW4gd2l0aGluIHBhcnNlci1ub2RlIGJvdW5kYXJpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSBvd25lciAtIFRva2VuLW93bmluZyBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIEV4YWN0IHRva2VuIHNwZWxsaW5nLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0T2Zmc2V0IC0gSW5jbHVzaXZlIGJvdW5kYXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZE9mZnNldCAtIEV4Y2x1c2l2ZSBib3VuZGFyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IHRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbkxvY2F0aW9uKG93bmVyLCB2YWx1ZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCB0b2tlbnMgPSBub2RlVG9rZW5zLmdldChvd25lcik/LnRva2VucyA/PyBbXVxuICBsZXQgbG93ID0gMFxuICBsZXQgaGlnaCA9IHRva2Vucy5sZW5ndGhcblxuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMilcblxuICAgIGlmICh0b2tlbnNbbWlkZGxlXS5zdGFydCA8IHN0YXJ0T2Zmc2V0KSBsb3cgPSBtaWRkbGUgKyAxXG4gICAgZWxzZSBoaWdoID0gbWlkZGxlXG4gIH1cbiAgbGV0IHRva2VuXG5cbiAgZm9yIChsZXQgaW5kZXggPSBsb3c7IGluZGV4IDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaW5kZXhdLnN0YXJ0IDwgZW5kT2Zmc2V0OyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gdG9rZW5zW2luZGV4XVxuXG4gICAgaWYgKGNhbmRpZGF0ZS5lbmQgPD0gZW5kT2Zmc2V0ICYmIChjYW5kaWRhdGUudmFsdWUgPT0gdmFsdWUgfHwgY2FuZGlkYXRlLnR5cGUubGFiZWwgPT0gdmFsdWUpKSB7XG4gICAgICB0b2tlbiA9IGNhbmRpZGF0ZVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgdG9rZW4gJyR7dmFsdWV9JyBiZXR3ZWVuICR7c3RhcnRPZmZzZXR9IGFuZCAke2VuZE9mZnNldH0uYClcblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCB0b2tlbi5zdGFydCwgdG9rZW4uZW5kKVxufVxuXG4vKipcbiAqIExvY2F0ZXMgYSBjb21tZW50LXBhcnNlciB0b2tlbiBpbnNpZGUgYSBCYWJlbC1vd25lZCBkb2MgY29tbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9ja30gY29tbWVudCAtIEJhYmVsIGRvYyBjb21tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJjb21tZW50LXBhcnNlclwiKS5TcGVjfSB0YWcgLSBQYXJzZWQgZG9jIHRhZy5cbiAqIEBwYXJhbSB7XCJuYW1lXCIgfCBcInR5cGVcIn0gZmllbGQgLSBUb2tlbiBmaWVsZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IHRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBmaWVsZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsaW5lID0gdGFnLnNvdXJjZVswXVxuXG4gIGlmICh0eXBlb2YgY29tbWVudC5zdGFydCAhPSBcIm51bWJlclwiIHx8ICFsaW5lKSB0aHJvdyBuZXcgRXJyb3IoYENvbW1lbnQgcGFyc2VyIG9taXR0ZWQgdGhlIEAke3RhZy50YWd9IHNvdXJjZSB0b2tlbi5gKVxuXG4gIGxldCBsaW5lU3RhcnQgPSBjb21tZW50LnN0YXJ0XG5cbiAgZm9yIChsZXQgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lLm51bWJlcjsgbGluZU51bWJlcisrKSB7XG4gICAgd2hpbGUgKGxpbmVTdGFydCA8IHNvdXJjZS5sZW5ndGggJiYgc291cmNlW2xpbmVTdGFydF0gIT0gXCJcXHJcIiAmJiBzb3VyY2VbbGluZVN0YXJ0XSAhPSBcIlxcblwiKSBsaW5lU3RhcnQrK1xuICAgIGlmIChzb3VyY2VbbGluZVN0YXJ0XSA9PSBcIlxcclwiICYmIHNvdXJjZVtsaW5lU3RhcnQgKyAxXSA9PSBcIlxcblwiKSBsaW5lU3RhcnQgKz0gMlxuICAgIGVsc2UgbGluZVN0YXJ0KytcbiAgfVxuXG4gIGNvbnN0IG9yZGVyZWRGaWVsZHMgPSBbXCJzdGFydFwiLCBcImRlbGltaXRlclwiLCBcInBvc3REZWxpbWl0ZXJcIiwgXCJ0YWdcIiwgXCJwb3N0VGFnXCIsIFwidHlwZVwiLCBcInBvc3RUeXBlXCIsIFwibmFtZVwiXVxuICBjb25zdCBmaWVsZEluZGV4ID0gb3JkZXJlZEZpZWxkcy5pbmRleE9mKGZpZWxkKVxuICBsZXQgc3RhcnQgPSBsaW5lU3RhcnQgKyBvcmRlcmVkRmllbGRzLnNsaWNlKDAsIGZpZWxkSW5kZXgpLnJlZHVjZSgobGVuZ3RoLCBrZXkpID0+XG4gICAgbGVuZ3RoICsgbGluZS50b2tlbnNbLyoqIEB0eXBlIHtrZXlvZiB0eXBlb2YgbGluZS50b2tlbnN9ICovIChrZXkpXS5sZW5ndGgsIDApXG4gIGNvbnN0IHRva2VuID0gbGluZS50b2tlbnNbZmllbGRdXG4gIGxldCBsZW5ndGggPSB0b2tlbi5sZW5ndGhcblxuICBpZiAoZmllbGQgPT0gXCJ0eXBlXCIgJiYgdGFnLnR5cGUpIHtcbiAgICBjb25zdCBuZXN0ZWRPZmZzZXQgPSB0b2tlbi5pbmRleE9mKHRhZy50eXBlKVxuXG4gICAgaWYgKG5lc3RlZE9mZnNldCA8IDApIHRocm93IG5ldyBFcnJvcihgQ29tbWVudCBwYXJzZXIgb21pdHRlZCB0aGUgQCR7dGFnLnRhZ30gdHlwZSBzcGVsbGluZy5gKVxuICAgIHN0YXJ0ICs9IG5lc3RlZE9mZnNldFxuICAgIGxlbmd0aCA9IHRhZy50eXBlLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBgTWFwYCByZXNvbHZlcyB0byB0aGUgbmF0aXZlIGludHJpbnNpYyBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG5hdGl2ZSBNYXAgY29uc3RydWN0aW9uIGlzIHVuc2hhZG93ZWQuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSB7XG4gIHJldHVybiAhY29udGV4dC5iaW5kaW5ncy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQubGV4aWNhbFZhbHVlTmFtZXM/LmhhcyhcIk1hcFwiKSAmJlxuICAgICFjb250ZXh0LmZ1bmN0aW9ucy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoXCJNYXBcIilcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBCYWJlbCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIEJhYmVsIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IFtjb250ZXh0XSAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBFeHBsaWNpdCBjb250ZXh0dWFsIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogbmV3IE1hcCgpLCBlcnJvcnM6IG5ldyBNYXAoKSwgZXJyb3JOYW1lczogbmV3IE1hcCgpLCBmdW5jdGlvbnM6IG5ldyBNYXAoKSwgcmVjb3JkTmFtZXM6IG5ldyBNYXAoKSwgcmVjb3JkczogbmV3IE1hcCgpLCB2YWx1ZVJlY29yZE5hbWVzOiBuZXcgTWFwKCl9LCBleHBlY3RlZFR5cGUsIHByZXNlcnZlT3B0aW9uYWwgPSBmYWxzZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5uYW1lID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5kZWZpbmVkIGFic2VuY2UgdmFsdWVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiTnVsbExpdGVyYWxcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsTm9uZVwiKSwgbG9jYXRpb259LCB7YWJzZW5jZTogbG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAoa25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB1bmRlZmluZWQsIHRydWUpXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsU29tZVwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUudmFsdWVUeXBlKVxuICAgIH0sIHtzb21lOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTnVsbExpdGVyYWxcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm51bGwgb3V0c2lkZSBhbiBleHBsaWNpdCBvcHRpb25hbCBjb250ZXh0XCIsIGxvY2F0aW9uKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJUU05vbk51bGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gY29udmVydEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgIGlmIChsYW5ndWFnZSAhPSBcInR5cGVzY3JpcHRcIiB8fCBleHByZXNzaW9uLmtpbmQgIT0gXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub24tbnVsbCBhc3NlcnRpb24gb3RoZXIgdGhhbiBNYXAuZ2V0IHJlc3VsdFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZXhwcmVzc2lvbi5sb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgcmV0dXJuIGV4cHJlc3Npb25cbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBuYW1lOiBub2RlLm5hbWV9LCB7XG4gICAgICBuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgaWYgKCFwcmVzZXJ2ZU9wdGlvbmFsICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUubmFtZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsVW53cmFwXCIpLCBsb2NhdGlvbiwgb3BlcmFuZDogaWRlbnRpZmllcn0sIHt1bndyYXA6IGxvY2F0aW9ufSlcbiAgICB9XG5cbiAgICByZXR1cm4gaWRlbnRpZmllclxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmVjZWl2ZXIgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sXG4gICAgICB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOdW1lcmljTGl0ZXJhbFwiKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihub2RlLnZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9IFwiYm9vbGVhblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBib29sZWFuIGxpdGVyYWwgdmFsdWVcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQm9vbGVhbkxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogbm9kZS52YWx1ZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhub2RlLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJBcnJheUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IGV4cGVjdGVkVHlwZS5lbGVtZW50VHlwZSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGVsZW1lbnRzID0gbm9kZS5lbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzcGFyc2UgYXJyYXkgaG9sZVwiLCBhcnJheUhvbGVMb2NhdGlvbihub2RlLCBpbmRleCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYXJyYXkgc3ByZWFkXCIsIG5vZGVMb2NhdGlvbihlbGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGVsZW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBlbGVtZW50VHlwZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2VsZW1lbnRzLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSwgbG9jYXRpb259LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUuY2FsbGVlLm5hbWUgPT0gXCJNYXBcIikge1xuICAgIGlmICghbmF0aXZlTWFwQXZhaWxhYmxlKGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic2hhZG93ZWQgTWFwIGNvbnN0cnVjdG9yXCIsIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJNYXAgdXNlZCBhcyBhIHN0cnVjdHVyYWwgcmVjb3JkIHN1YnN0aXR1dGVcIiwgbG9jYXRpb24pXG4gICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cyB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJnZW5lcmljIG9yIGludmFsaWQgTWFwIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKCFpbml0aWFsaXplcikgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZW50cmllczogW10sXG4gICAgICBraW5kOiBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICAgID8gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICAgICAgOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICAgIGlmIChpbml0aWFsaXplci50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGluaXRpYWxpemVyLnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgaW5pdGlhbGl6ZXIudHlwZSwgbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGluaXRpYWxpemVyLnR5cGUgIT0gXCJBcnJheUV4cHJlc3Npb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCBpbml0aWFsaXplciBvdGhlciB0aGFuIGFuIGVudHJ5IGFycmF5XCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICA/IGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUgOiB1bmRlZmluZWRcbiAgICBjb25zdCBlbnRyaWVzID0gaW5pdGlhbGl6ZXIuZWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic3BhcnNlIG1hcCBpbml0aWFsaXplclwiLCBhcnJheUhvbGVMb2NhdGlvbihpbml0aWFsaXplciwgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPSBcIkFycmF5RXhwcmVzc2lvblwiIHx8IGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCBlbnRyeSBvdGhlciB0aGFuIGEga2V5L3ZhbHVlIHBhaXJcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gZWxlbWVudC5lbGVtZW50c1xuXG4gICAgICBpZiAoIWtleSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBtYXAga2V5XCIsIGFycmF5SG9sZUxvY2F0aW9uKGVsZW1lbnQsIDAsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBtYXAgdmFsdWVcIiwgYXJyYXlIb2xlTG9jYXRpb24oZWxlbWVudCwgMSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoa2V5LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgdmFsdWUudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikge1xuICAgICAgICBjb25zdCBzcHJlYWQgPSBrZXkudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiA/IGtleSA6IHZhbHVlXG5cbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBlbnRyeSBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKHNwcmVhZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAoa2V5LnR5cGUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBrZXkgb3RoZXIgdGhhbiBhIHN0cmluZyBsaXRlcmFsXCIsIG5vZGVMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5RXhwcmVzc2lvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihrZXksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtleToga2V5RXhwcmVzc2lvbixcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbih2YWx1ZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBrZXlFeHByZXNzaW9uLmxvY2F0aW9uLFxuICAgICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihlbGVtZW50LCBcIixcIiwga2V5LmVuZCA/PyBlbGVtZW50LnN0YXJ0ID8/IDAsIHZhbHVlLnN0YXJ0ID8/IGVsZW1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzLFxuICAgICAga2luZDogZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgICA/IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpXG4gICAgICAgIDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBjb250ZXh0LnZhbHVlUmVjb3JkTmFtZXMuaGFzKG5vZGUuY2FsbGVlLm5hbWUpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5nZXQobm9kZS5jYWxsZWUubmFtZSkpXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMgfHwgbm9kZS50eXBlUGFyYW1ldGVycykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImdlbmVyaWMgcmVmZXJlbmNlIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuICAgICAgY29uc3QgY2xhc3NMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVmZXJlbmNlOiBkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgPT0gXCJvd25lZFJlc291cmNlXCJcbiAgICAgICAgICA/IG93bmVkUmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgY2xhc3NMb2NhdGlvbilcbiAgICAgICAgICA6IHJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGNsYXNzTG9jYXRpb24pfSwge2NsYXNzOiBjbGFzc0xvY2F0aW9ufSlcbiAgICB9XG4gICAgY29uc3Qgc291cmNlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzPy5wYXJhbXMgPz8gbm9kZS50eXBlUGFyYW1ldGVycz8ucGFyYW1zXG4gICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PiBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICBhcmd1bWVudCxcbiAgICAgIGBSZWNvcmQgJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGFwcGxpY2F0aW9uYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnNcbiAgICApKSA/PyAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmIGV4cGVjdGVkVHlwZS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uLmlkID8gZXhwZWN0ZWRUeXBlLmFyZ3VtZW50cyA6IHVuZGVmaW5lZClcbiAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHR5cGVBcmd1bWVudHMsIGluZGV4KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiBhcmd1bWVudHNfLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNvcmQ6IHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSksIHR5cGVBcmd1bWVudHMpXG4gICAgfSwge3JlY29yZDogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLm9wdGlvbmFsICYmIG5vZGUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiKSB7XG4gICAgaWYgKCFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5JZGVudGlmaWVyIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHByb3BlcnR5XG5cbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSBwcm9wZXJ0eSA9IG5vZGUucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHByb3BlcnR5ID0gbm9kZS5wcm9wZXJ0eVxuICAgICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkIGFjY2Vzc1wiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGZpZWxkID0gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gcHJvcGVydHkubmFtZSlcblxuICAgICAgaWYgKCFmaWVsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgdW5rbm93biBwcml2YXRlIGZpZWxkICcke3Byb3BlcnR5Lm5hbWV9J2AsIGlkZW50aWZpZXJMb2NhdGlvbihwcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRSZWFkXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24ocHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicHJpdmF0ZSByZWZlcmVuY2UtY2xhc3MgZmllbGQgYWNjZXNzXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIW5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGUucHJvcGVydHkubmFtZSA9PSBcIm1lc3NhZ2VcIiAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm9iamVjdC5uYW1lKT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgICBjb25zdCByZWNlaXZlckxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUub2JqZWN0LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yTWVzc2FnZVJlYWRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiByZWNlaXZlckxvY2F0aW9uLCBuYW1lOiBub2RlLm9iamVjdC5uYW1lfSwge1xuICAgICAgICAgIG5hbWU6IHJlY2VpdmVyTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH0sIHttZW1iZXI6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICBpZiAoa25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImNvbXB1dGVkIHJlY29yZCBtZW1iZXIgYWNjZXNzXCIsIG5vZGVMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUucHJvcGVydHkudHlwZSwgbG9jYXRpb24pXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgaW5kZXg6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucHJvcGVydHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICAgIH0sIHtcbiAgICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCJbXCIsIG5vZGUub2JqZWN0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucHJvcGVydHkuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgW1wibGVuZ3RoXCIsIFwic2l6ZVwiXS5pbmNsdWRlcyhub2RlLnByb3BlcnR5Lm5hbWUpKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBmaWVsZDogbm9kZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgY29sbGVjdGlvbktpbmQ6IC8qKiBAdHlwZSB7XCJsaXN0XCIgfCBcIm1hcFwifSAqLyAobm9kZS5wcm9wZXJ0eS5uYW1lID09IFwibGVuZ3RoXCIgPyBcImxpc3RcIiA6IFwibWFwXCIpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7b3BlcmF0b3I6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZmllbGQ6IG5vZGUucHJvcGVydHkubmFtZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJUZW1wbGF0ZUxpdGVyYWxcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltdfSAqL1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IFtdXG5cbiAgICAgIG5vZGUucXVhc2lzLmZvckVhY2goKHF1YXNpLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHF1YXNpLnZhbHVlLmNvb2tlZCAhPSBcInN0cmluZ1wiIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMocXVhc2kudmFsdWUuY29va2VkKSkge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKHF1YXNpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWFzaUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHF1YXNpLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICAgIGlmIChxdWFzaS52YWx1ZS5jb29rZWQubGVuZ3RoID4gMCkgb3JkZXJlZC5wdXNoKHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlN0cmluZ0xpdGVyYWxcIiksIGxvY2F0aW9uOiBxdWFzaUxvY2F0aW9uLCB2YWx1ZTogcXVhc2kudmFsdWUuY29va2VkfSwge2xpdGVyYWw6IHF1YXNpTG9jYXRpb259KSlcbiAgICAgICAgaWYgKGluZGV4IDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBvcmRlcmVkLnB1c2goY29udmVydEV4cHJlc3Npb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gKi8gKG5vZGUuZXhwcmVzc2lvbnNbaW5kZXhdKSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNjYWxhclR5cGUoXCJzdHJpbmdcIikpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKG9yZGVyZWQubGVuZ3RoID09IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnRlcnBvbGF0ZWQgc3RyaW5nXCIsIGxvY2F0aW9uKVxuXG4gICAgICBsZXQgbG93ZXJlZCA9IG9yZGVyZWRbMF1cblxuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG9yZGVyZWQuc2xpY2UoMSkpIHtcbiAgICAgICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih7XG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmluYXJ5RXhwcmVzc2lvblwiKSxcbiAgICAgICAgICBsZWZ0OiBsb3dlcmVkLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJpZ2h0OiBwYXJ0XG4gICAgICAgIH0sIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChcIlN0cmluZ0NvbmNhdFwiKSlcblxuICAgICAgICBsb3dlcmVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG93ZXJlZFxuICAgIH1cblxuICAgIGNvbnN0IHF1YXNpID0gbm9kZS5xdWFzaXNbMF1cblxuICAgIGlmICh0eXBlb2YgcXVhc2kudmFsdWUuY29va2VkICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhxdWFzaS52YWx1ZS5jb29rZWQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IHF1YXNpLnZhbHVlLmNvb2tlZH0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhbHRlcm5hdGU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYWx0ZXJuYXRlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudGVzdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uc2VxdWVudDogY29udmVydEV4cHJlc3Npb24obm9kZS5jb25zZXF1ZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtcbiAgICAgIGFsdGVybmF0ZTogbm9kZUxvY2F0aW9uKG5vZGUuYWx0ZXJuYXRlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbG9uOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwiOlwiLCBub2RlLmNvbnNlcXVlbnQuZW5kID8/IG5vZGUudGVzdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLmFsdGVybmF0ZS5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbmRpdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUudGVzdCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25zZXF1ZW50OiBub2RlTG9jYXRpb24obm9kZS5jb25zZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwiP1wiLCBub2RlLnRlc3QuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5jb25zZXF1ZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIFtcIiFcIiwgXCItXCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kXG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIG5vZGUub3BlcmF0b3IgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTG9naWNhbEV4cHJlc3Npb25cIiAmJiBbXCImJlwiLCBcInx8XCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obm9kZS5sZWZ0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJpZ2h0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBub2RlLm9wZXJhdG9yLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pLCBub2RlLm9wZXJhdG9yID09IFwiJiZcIiA/IFwiQW5kXCIgOiBcIk9yXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBub2RlLm9wZXJhdG9yID09IFwiIT09XCIgJiYgbm9kZS5sZWZ0LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBub2RlLnJpZ2h0LnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovIChcbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUubGVmdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICApXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxJc1ByZXNlbnRcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBiYWJlbEJpbmFyeU9wZXJhdGlvbnMuaGFzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgaWYgKG5vZGUubGVmdC50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUubGVmdC50eXBlLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGxlZnQgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmxlZnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHJpZ2h0ID0gY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0LFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodFxuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIG5vZGUub3BlcmF0b3IsIG5vZGUubGVmdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLnJpZ2h0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChiYWJlbEJpbmFyeU9wZXJhdGlvbnMuZ2V0KG5vZGUub3BlcmF0b3IpKSlcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQmluYXJ5RXhwcmVzc2lvblwiICYmIFtcIj09XCIsIFwiIT1cIl0uaW5jbHVkZXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBjb2VyY2l2ZSBlcXVhbGl0eSAke25vZGUub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgaWYgKG5vZGUub3B0aW9uYWwgfHwgbm9kZS5jYWxsZWUub3B0aW9uYWwgfHwgbm9kZS50eXBlQXJndW1lbnRzIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJvcHRpb25hbCBvciBnZW5lcmljIGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChub2RlLmNhbGxlZS5uYW1lKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG5vZGUuY2FsbGVlLm5hbWUsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgIGNhbGxlZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiAhbm9kZS5vcHRpb25hbCAmJiAhbm9kZS50eXBlQXJndW1lbnRzICYmICFub2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgbm9kZS5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jYWxsZWUuY29tcHV0ZWQgJiYgIW5vZGUuY2FsbGVlLm9wdGlvbmFsICYmXG4gICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIgfHwgcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZClcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lXG4gICAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbj8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1ldGhvZE5hbWUpXG4gICAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYXJndW1lbnQudHlwZSwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIG1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sXG4gICAgICAgIG1ldGhvZDogbWV0aG9kPy5pZCA/PyBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24obm9kZS5jYWxsZWUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCl9LFxuICAgICAge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgIW5vZGUub3B0aW9uYWwgJiYgIW5vZGUudHlwZUFyZ3VtZW50cyAmJiAhbm9kZS50eXBlUGFyYW1ldGVycyAmJlxuICAgIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmICFub2RlLmNhbGxlZS5vcHRpb25hbCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwLmdldCBhcmd1bWVudCBjb3VudFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBrZXkgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKGtleS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGtleS50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGtleS50eXBlLCBub2RlTG9jYXRpb24oa2V5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmNhbGxlZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24oa2V5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwicHJvdmVuXCIpXG4gICAgfSwge29wZXJhdG9yOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmx5IGV4cHJlc3Npb24gcmVzdWx0IHR5cGVzIGFscmVhZHkgZXN0YWJsaXNoZWQgYnkgZXhwbGljaXQgbW9kdWxlXG4gKiBzaWduYXR1cmVzIGFuZCBjb2xsZWN0aW9uIGJpbmRpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBLbm93biByZXN1bHQgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZS50eXBlID09IFwiVFNOb25OdWxsRXhwcmVzc2lvblwiKSByZXR1cm4ga25vd25FeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24sIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZS50eXBlID09IFwiSWRlbnRpZmllclwiKSByZXR1cm4gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUuY2FsbGVlLm5hbWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIG5vZGUuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCJcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpKVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmdldChub2RlLmNhbGxlZS5uYW1lKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uPy5pZCkge1xuICAgICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsXG4gICAgICAgIGtpbmQ6IGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIiA/IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIgOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgIGNvbnN0IHNvdXJjZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cz8ucGFyYW1zID8/IG5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtc1xuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PlxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG5cbiAgICAgIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiVGhpc0V4cHJlc3Npb25cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcz8uaWQpIHtcbiAgICByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IGNvbnRleHQuY3VycmVudENsYXNzLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNhbGxlZS5jb21wdXRlZCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBtZXRob2ROYW1lKT8ucmV0dXJuVHlwZVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnByb3BlcnR5LmlkLm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBuYW1lKT8udHlwZVxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG5cbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbmFtZSk/LnR5cGVcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBub2RlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlciA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBtZW1iZXJOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG4gICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbWVtYmVyTmFtZSkgPz8gLTFcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbiA/IGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgcmVjZWl2ZXIuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIG5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHJldHVybiBjb2xsZWN0aW9uVHlwZS52YWx1ZVR5cGVcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgdmFsdWUgdHlwZSBwcm9kdWNlZCBieSB0aGUgZnJvbnRlbmQncyBpbXBsaWNpdCBvcHRpb25hbC1iaW5kaW5nIHVud3JhcC5cbiAqIFNlbWFudGljIHZhbGlkYXRpb24gc2VwYXJhdGVseSBwcm92ZXMgdGhhdCB0aGUgdW53cmFwIG9jY3VycyBvbmx5IG9uIGEgcHJlc2VudCBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBDb252ZXJ0ZWQgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiBub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgdHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gdHlwZS52YWx1ZVR5cGUgOiB0eXBlXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHN0YWJsZSBwYXJzZXItYm91bmRlZCBsb2NhdGlvbiBmb3Igb25lIGFic2VudCBhcnJheSBlbGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQXJyYXlFeHByZXNzaW9ufSBub2RlIC0gQXJyYXkgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE1pc3NpbmcgZWxlbWVudCBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEhvbGUgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGFycmF5SG9sZUxvY2F0aW9uKG5vZGUsIGluZGV4LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gbm9kZS5lbGVtZW50cy5zbGljZSgwLCBpbmRleCkuZmluZExhc3QoKGVsZW1lbnQpID0+IGVsZW1lbnQgIT0gbnVsbClcbiAgY29uc3QgbmV4dCA9IG5vZGUuZWxlbWVudHMuc2xpY2UoaW5kZXggKyAxKS5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50ICE9IG51bGwpXG4gIGNvbnN0IHN0YXJ0ID0gcHJldmlvdXM/LmVuZCA/PyAobm9kZS5zdGFydCA/PyAwKSArIDFcbiAgY29uc3QgZW5kID0gbmV4dD8uc3RhcnQgPz8gTWF0aC5tYXgoc3RhcnQgKyAxLCAobm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCkgLSAxKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHN0YXJ0LCBNYXRoLm1heChzdGFydCArIDEsIE1hdGgubWluKGVuZCwgc291cmNlLmxlbmd0aCkpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIHJldHVybiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgLi4uKG5vZGUuYXJndW1lbnQgPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oXG4gICAgICBub2RlLmFyZ3VtZW50LFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIgPyB1bmRlZmluZWQgOiBjb250ZXh0LnJldHVyblR5cGVcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgc3VwcG9ydGVkIGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50fSBTZW1hbnRpYyBsb2NhbCBvciBwcml2YXRlLWZpZWxkIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsU3RhdGVtZW50KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIGlmICghW1wibGV0XCIsIFwiY29uc3RcIl0uaW5jbHVkZXMobm9kZS5raW5kKSB8fCBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT0gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgJHtub2RlLmtpbmR9IGRlY2xhcmF0aW9uYCwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IG5vZGUuZGVjbGFyYXRpb25zWzBdXG4gICAgY29uc3QgZGVjbGFyYXRvckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGRlY2xhcmF0b3IuaWQudHlwZSwgZGVjbGFyYXRvckxvY2F0aW9uKVxuICAgIGlmICghZGVjbGFyYXRvci5pbml0KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5pbml0aWFsaXplZCBkZWNsYXJhdGlvblwiLCBkZWNsYXJhdG9yTG9jYXRpb24pXG5cbiAgICBsZXQgdHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgTG9jYWwgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBkZWNsYXJhdG9yTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgICA6IGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgZGVjbGFyYXRvci5pZC5uYW1lLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuXG4gICAgaWYgKG5vZGUua2luZCA9PSBcImNvbnN0XCIgJiYgdHlwZS5raW5kID09IFwiTWFwVHlwZVwiICYmIGNvbnRleHQub3JkZXJlZE1hcERlY2xhcmF0aW9ucz8uaGFzKGRlY2xhcmF0b3IpICYmXG4gICAgICBkZWNsYXJhdG9yLmluaXQudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBkZWNsYXJhdG9yLmluaXQuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIGRlY2xhcmF0b3IuaW5pdC5jYWxsZWUubmFtZSA9PSBcIk1hcFwiICYmIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSkge1xuICAgICAgdHlwZSA9IG9yZGVyZWRNYXBUeXBlRnJvbU1hcCh0eXBlLCBkZWNsYXJhdG9yTG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyOiBjb252ZXJ0RXhwcmVzc2lvbihkZWNsYXJhdG9yLmluaXQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB0eXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG5vZGUua2luZCA9PSBcImxldFwiLFxuICAgICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGRlY2xhcmF0b3IsIFwiPVwiLCBkZWNsYXJhdG9yLmlkLmVuZCA/PyBkZWNsYXJhdG9yLnN0YXJ0ID8/IDAsIGRlY2xhcmF0b3IuaW5pdC5zdGFydCA/PyBkZWNsYXJhdG9yLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChkZWNsYXJhdG9yLmlkLm5hbWUsIHR5cGUpXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBub2RlLmV4cHJlc3Npb25cbiAgICBjb25zdCB0YXJnZXRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoYXNzaWdubWVudC5vcGVyYXRvciAhPSBcIj1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgYXNzaWdubWVudCAke2Fzc2lnbm1lbnQub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFhc3NpZ25tZW50LmxlZnQuY29tcHV0ZWQgJiZcbiAgICAgIGFzc2lnbm1lbnQubGVmdC5vYmplY3QudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcHJvcGVydHlcblxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIGFzc2lnbm1lbnQubGVmdC5wcm9wZXJ0eS50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHlcbiAgICAgIGlmICghcHJvcGVydHkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZCBhc3NpZ25tZW50XCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuXG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7cHJvcGVydHkubmFtZX0nYCwgaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5sZWZ0Lm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oYXNzaWdubWVudCwgXCI9XCIsXG4gICAgICAgIGFzc2lnbm1lbnQubGVmdC5lbmQgPz8gYXNzaWdubWVudC5zdGFydCA/PyAwLCBhc3NpZ25tZW50LnJpZ2h0LnN0YXJ0ID8/IGFzc2lnbm1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFzc2lnbm1lbnQubGVmdC50eXBlLCB0YXJnZXRMb2NhdGlvbilcblxuICAgIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogdGFyZ2V0TG9jYXRpb24sIG5hbWU6IGFzc2lnbm1lbnQubGVmdC5uYW1lfSwge1xuICAgICAgbmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGFzc2lnbm1lbnQubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldChhc3NpZ25tZW50LmxlZnQubmFtZSlcbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0YXJnZXRcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihhc3NpZ25tZW50LCBcIj1cIiwgYXNzaWdubWVudC5sZWZ0LmVuZCA/PyBhc3NpZ25tZW50LnN0YXJ0ID8/IDAsIGFzc2lnbm1lbnQucmlnaHQuc3RhcnQgPz8gYXNzaWdubWVudC5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gaW1tZWRpYXRlbHkgYXNzb2NpYXRlZCBKYXZhU2NyaXB0IGxvY2FsIGBAdHlwZWAgdGFnLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVmFyaWFibGVEZWNsYXJhdGlvbn0gbm9kZSAtIExvY2FsIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NhbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSBub2RlLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQudHlwZSAhPSBcIkNvbW1lbnRCbG9ja1wiIHx8ICFjb21tZW50LnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBnYXAgPSBzb3VyY2Uuc2xpY2UoY29tbWVudC5lbmQgPz8gMCwgbm9kZS5zdGFydCA/PyAwKVxuXG4gIGlmICghL15cXHMqJC91LnRlc3QoZ2FwKSB8fCAoZ2FwLm1hdGNoKC9cXG4vZ3UpPy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXVxuICBjb25zdCB0YWdzID0gYmxvY2s/LnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0eXBlXCIpID8/IFtdXG5cbiAgY29uc3QgdGFnID0gdGFncy5sZW5ndGggPT0gMSA/IHRhZ3NbMF0gOiB1bmRlZmluZWRcblxuICByZXR1cm4gY29udmVydFR5cGUoXG4gICAgdGFnPy50eXBlLFxuICAgIFwiamF2YXNjcmlwdFwiLFxuICAgIGBMb2NhbCAnJHtuYW1lfSdgLFxuICAgIGxvY2F0aW9uLFxuICAgIHNvdXJjZSxcbiAgICB0YWcgPyBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcInR5cGVcIiwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbixcbiAgICByZWNvcmROYW1lcyxcbiAgICB0eXBlUGFyYW1ldGVyc1xuICApXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBpZiAobm9kZS50eXBlID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRJZihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVGhyb3dTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRUeXBlZFRocm93KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0V2hpbGUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIkZvck9mU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBub2RlLnR5cGUgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKG5vZGUubGFiZWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGxhYmVsZWQgJHtub2RlLnR5cGUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwifWAsXG4gICAgICBub2RlTG9jYXRpb24obm9kZS5sYWJlbCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3Qga2V5d29yZCA9IG5vZGUudHlwZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCJcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24obm9kZSwga2V5d29yZCwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IG5vZGUudHlwZSwgbG9jYXRpb259LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb24udHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgKG5vZGUuZXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgbm9kZS5leHByZXNzaW9uLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmV4cHJlc3Npb24uY2FsbGVlLmNvbXB1dGVkICYmXG4gICAgICBub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgICAgW1wiUmVmZXJlbmNlVHlwZVwiLCBcIk93bmVkUmVmZXJlbmNlVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoXG4gICAgICAgIGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kKSkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHByZXNzaW9uOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICApLFxuICAgICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHRocm93IG5ldyBEZWNsYXJlZEVycm9yKG1lc3NhZ2UpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRocm93U3RhdGVtZW50fSBub2RlIC0gQmFiZWwgdGhyb3cgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmV0aHJvd1N0YXRlbWVudH0gU2VtYW50aWMgcmFpc2Ugb3IgcmV0aHJvdy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVkVGhyb3cobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50XG5cbiAgaWYgKGFyZ3VtZW50Py50eXBlID09IFwiSWRlbnRpZmllclwiICYmIGNvbnRleHQuY2F0Y2hCaW5kaW5nTmFtZXM/Lmhhcyhhcmd1bWVudC5uYW1lKSAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChhcmd1bWVudC5uYW1lKT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgY29uc3QgYmluZGluZ05vZGUgPSBjb250ZXh0LmNhdGNoQmluZGluZ05vZGVzPy5nZXQoYXJndW1lbnQubmFtZSlcblxuICAgIGlmICghYmluZGluZ05vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0aHJvdyBvZiBhIGNhdGNoIGJpbmRpbmcgd2l0aG91dCBhbiBleGFjdCBoYW5kbGVyIGJpbmRpbmdcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYmluZGluZzogYXJndW1lbnQubmFtZSxcbiAgICAgIGJpbmRpbmdOb2RlLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmV0aHJvd1N0YXRlbWVudFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0aHJvd1wiLCBub2RlLnN0YXJ0ID8/IDAsIGFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAoIWFyZ3VtZW50IHx8IGFyZ3VtZW50LnR5cGUgIT0gXCJOZXdFeHByZXNzaW9uXCIgfHwgYXJndW1lbnQuY2FsbGVlLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICBjb250ZXh0LmJpbmRpbmdzLmhhcyhhcmd1bWVudC5jYWxsZWUubmFtZSkgfHwgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoYXJndW1lbnQuY2FsbGVlLm5hbWUpIHx8IGFyZ3VtZW50LmFyZ3VtZW50cy5sZW5ndGggIT0gMSB8fFxuICAgIGFyZ3VtZW50LmFyZ3VtZW50c1swXS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LmFyZ3VtZW50c1swXS50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiIHx8XG4gICAgYXJndW1lbnQudHlwZUFyZ3VtZW50cyB8fCBhcmd1bWVudC50eXBlUGFyYW1ldGVycykge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0aHJvdyBvdGhlciB0aGFuIGV4YWN0IGRlY2xhcmVkIGVycm9yIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQuZXJyb3JOYW1lcy5nZXQoYXJndW1lbnQuY2FsbGVlLm5hbWUpKVxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24oYXJndW1lbnQuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudC5hcmd1bWVudHNbMF0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSYWlzZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogdG9rZW5Mb2NhdGlvbihub2RlLCBcInRocm93XCIsIG5vZGUuc3RhcnQgPz8gMCwgYXJndW1lbnQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjYXRjaCB3aXRoIHRoZSBjYW5vbmljYWwgYGluc3RhbmNlb2ZgIGd1YXJkIGFuZCBleGFjdCByZXRocm93LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVHJ5U3RhdGVtZW50fSBub2RlIC0gQmFiZWwgdHJ5IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgc2NhbGFyIG91dHB1dCBjYW5vbmljYWxpemVzIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9IFNlbWFudGljIGV4YWN0IGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlZFRyeShub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFub2RlLmhhbmRsZXIpIHtcbiAgICBpZiAoIW5vZGUuZmluYWxpemVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHJ5IHdpdGhvdXQgYW4gZXhwbGljaXQgZ3VhcmRlZCBjYXRjaFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgICBjb25zdCBzZW1hbnRpYyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBib2R5OiBjb252ZXJ0QmxvY2sobm9kZS5ibG9jaywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgICAgaGFuZGxlcnM6IFtdLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7XG4gICAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpXG5cbiAgICBzZW1hbnRpYy5maW5hbGx5Qm9keSA9IGNvbnZlcnRCbG9jayhub2RlLmZpbmFsaXplci5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgICAgey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfSwgbm9kZUxvY2F0aW9uKG5vZGUuZmluYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBzZXRQYXJzZXJSYW5nZXMoc2VtYW50aWMsIHtmaW5hbGx5OiBub2RlTG9jYXRpb24obm9kZS5maW5hbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdHJ5OiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwidHJ5XCIsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5ibG9jay5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXRjaEhhbmRsZXJbXX0gKi9cbiAgY29uc3QgaGFuZGxlcnMgPSBbXVxuICBjb25zdCBzZWVuSGFuZGxlck5hbWVzID0gbmV3IFNldChjb250ZXh0LmNhdGNoQmluZGluZ05hbWVzID8/IFtdKVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICAvLyBKYXZhU2NyaXB0IGhhcyBubyBzaWJsaW5nIGNhdGNoIGNsYXVzZXMsIHNvIHRoZSBleGFjdCBuYXRpdmUgcHJvZmlsZSBmb3Igb3JkZXJlZFxuICAvLyBtdWx0aS1jYXRjaCBpcyBhIGd1YXJkZWQgZGlzcGF0Y2ggY2hhaW46IGVhY2ggdW5tYXRjaGVkIGd1YXJkIHJldGhyb3dzIGludG8gdGhlIG5leHRcbiAgLy8gY2xhdXNlLiBUaGUgY2hhaW4gZmxhdHRlbnMgYmFjayB0byBvbmUgb3JkZXJlZCBoYW5kbGVyIGxpc3QgaGVyZS5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2F0Y2hDbGF1c2UgfCB1bmRlZmluZWR9ICovXG4gIGxldCBjbGF1c2UgPSBub2RlLmhhbmRsZXJcblxuICB3aGlsZSAoY2xhdXNlKSB7XG4gICAgY29uc3QgYmluZGluZyA9IGNsYXVzZS5wYXJhbVxuXG4gICAgaWYgKGJpbmRpbmc/LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY2xhdXNlLmJvZHkuZGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY2F0Y2ggd2l0aG91dCBvbmUgZXhwbGljaXQgYmluZGluZ1wiLCBub2RlTG9jYXRpb24oY2xhdXNlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKHNlZW5IYW5kbGVyTmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGNhdGNoIGJpbmRpbmcgJyR7YmluZGluZy5uYW1lfScgc2hhZG93cyBhbiBvdXRlciBoYW5kbGVyIGJpbmRpbmdgLFxuICAgICAgICBpZGVudGlmaWVyTG9jYXRpb24oYmluZGluZywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlZW5IYW5kbGVyTmFtZXMuYWRkKGJpbmRpbmcubmFtZSlcblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudCB8IHVuZGVmaW5lZH0gKi9cbiAgICBjb25zdCBndWFyZCA9IGNsYXVzZS5ib2R5LmJvZHlbMF1cblxuICAgIGlmICghZ3VhcmQgfHwgZ3VhcmQudHlwZSAhPSBcIklmU3RhdGVtZW50XCIgfHwgZ3VhcmQudGVzdC50eXBlICE9IFwiVW5hcnlFeHByZXNzaW9uXCIgfHxcbiAgICAgIGd1YXJkLnRlc3Qub3BlcmF0b3IgIT0gXCIhXCIgfHwgZ3VhcmQudGVzdC5hcmd1bWVudC50eXBlICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQub3BlcmF0b3IgIT0gXCJpbnN0YW5jZW9mXCIgfHxcbiAgICAgIGd1YXJkLnRlc3QuYXJndW1lbnQubGVmdC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQubGVmdC5uYW1lICE9IGJpbmRpbmcubmFtZSB8fFxuICAgICAgZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSA9PSBiaW5kaW5nLm5hbWUgfHxcbiAgICAgIGNvbnRleHQuYmluZGluZ3MuaGFzKGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSkgfHwgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC5uYW1lKSB8fFxuICAgICAgZ3VhcmQuY29uc2VxdWVudC50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIiB8fCBndWFyZC5jb25zZXF1ZW50LmJvZHkubGVuZ3RoICE9IDEgfHwgZ3VhcmQuY29uc2VxdWVudC5kaXJlY3RpdmVzLmxlbmd0aCA+IDAgfHxcbiAgICAgIChndWFyZC5hbHRlcm5hdGUgJiYgKGd1YXJkLmFsdGVybmF0ZS50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIiB8fCBndWFyZC5hbHRlcm5hdGUuZGlyZWN0aXZlcy5sZW5ndGggPiAwKSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCB3aXRob3V0IGV4YWN0IGluc3RhbmNlb2YgZ3VhcmRcIiwgbm9kZUxvY2F0aW9uKGd1YXJkID8/IGNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50IHwgdW5kZWZpbmVkfSAqL1xuICAgIGNvbnN0IGRpc3BhdGNoID0gZ3VhcmQuY29uc2VxdWVudC5ib2R5WzBdXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2F0Y2hDbGF1c2UgfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IG5leHRDbGF1c2UgPSB1bmRlZmluZWRcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gKi9cbiAgICBsZXQgaGFuZGxlckJvZHlTdGF0ZW1lbnRzID0gY2xhdXNlLmJvZHkuYm9keS5zbGljZSgxKVxuICAgIGxldCBoYW5kbGVyQm9keUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGNsYXVzZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKGRpc3BhdGNoLnR5cGUgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgaWYgKGRpc3BhdGNoLmZpbmFsaXplciB8fCAhZGlzcGF0Y2guaGFuZGxlciB8fCBkaXNwYXRjaC5ibG9jay5ib2R5Lmxlbmd0aCAhPSAxIHx8IGRpc3BhdGNoLmJsb2NrLmJvZHlbMF0udHlwZSAhPSBcIlRocm93U3RhdGVtZW50XCIgfHxcbiAgICAgICAgZGlzcGF0Y2guYmxvY2suYm9keVswXS5hcmd1bWVudD8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBkaXNwYXRjaC5ibG9jay5ib2R5WzBdLmFyZ3VtZW50Lm5hbWUgIT0gYmluZGluZy5uYW1lIHx8XG4gICAgICAgICFndWFyZC5hbHRlcm5hdGUgfHwgY2xhdXNlLmJvZHkuYm9keS5sZW5ndGggIT0gMSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY2F0Y2ggZ3VhcmQgZGlzcGF0Y2ggd2l0aG91dCBleGFjdCByZXRocm93IG9mIGl0cyBvd24gYmluZGluZ1wiLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbihkaXNwYXRjaCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBuZXh0Q2xhdXNlID0gZGlzcGF0Y2guaGFuZGxlclxuICAgICAgaGFuZGxlckJvZHlTdGF0ZW1lbnRzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQmxvY2tTdGF0ZW1lbnR9ICovIChndWFyZC5hbHRlcm5hdGUpLmJvZHlcbiAgICAgIGhhbmRsZXJCb2R5TG9jYXRpb24gPSBub2RlTG9jYXRpb24oZ3VhcmQuYWx0ZXJuYXRlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0gZWxzZSBpZiAoZGlzcGF0Y2gudHlwZSAhPSBcIlRocm93U3RhdGVtZW50XCIgfHwgZGlzcGF0Y2guYXJndW1lbnQ/LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgZGlzcGF0Y2guYXJndW1lbnQubmFtZSAhPSBiaW5kaW5nLm5hbWUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCBndWFyZCB3aXRob3V0IGV4YWN0IHVubWF0Y2hlZCByZXRocm93XCIsIG5vZGVMb2NhdGlvbihkaXNwYXRjaCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfSBlbHNlIGlmIChndWFyZC5hbHRlcm5hdGUpIHtcbiAgICAgIGlmIChjbGF1c2UuYm9keS5ib2R5Lmxlbmd0aCAhPSAxKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCBndWFyZCBkaXNwYXRjaCB3aXRob3V0IGV4YWN0IHJldGhyb3cgb2YgaXRzIG93biBiaW5kaW5nXCIsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKGd1YXJkLmFsdGVybmF0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBoYW5kbGVyQm9keVN0YXRlbWVudHMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5CbG9ja1N0YXRlbWVudH0gKi8gKGd1YXJkLmFsdGVybmF0ZSkuYm9keVxuICAgICAgaGFuZGxlckJvZHlMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihndWFyZC5hbHRlcm5hdGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSkpXG4gICAgY29uc3QgY2F1Z2h0VHlwZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKVxuICAgIH0sIHt0eXBlOiBjYXVnaHRUeXBlTG9jYXRpb259KVxuICAgIGNvbnN0IGNhdGNoQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKSwgY2F0Y2hCaW5kaW5nTmFtZXM6IG5ldyBTZXQoc2VlbkhhbmRsZXJOYW1lcyksXG4gICAgICBjYXRjaEJpbmRpbmdOb2RlczogbmV3IE1hcChjb250ZXh0LmNhdGNoQmluZGluZ05vZGVzKX1cblxuICAgIGNhdGNoQ29udGV4dC5iaW5kaW5ncy5zZXQoYmluZGluZy5uYW1lLCBjYXRjaFR5cGUpXG4gICAgY29uc3QgY2F0Y2hCaW5kaW5nTm9kZSA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihiaW5kaW5nLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGJpbmRpbmcsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICAgIGNhdGNoQ29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcy5zZXQoYmluZGluZy5uYW1lLCBjYXRjaEJpbmRpbmdOb2RlKVxuICAgIGhhbmRsZXJzLnB1c2god2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjYXRjaEJpbmRpbmc6IGNhdGNoQmluZGluZ05vZGUsXG4gICAgICBjYXRjaEJvZHk6IGNvbnZlcnRCbG9jayhoYW5kbGVyQm9keVN0YXRlbWVudHMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNhdGNoQ29udGV4dCxcbiAgICAgICAgaGFuZGxlckJvZHlMb2NhdGlvbiksXG4gICAgICBjYXRjaFR5cGUsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYXRjaEhhbmRsZXJcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7Y2F0Y2g6IHRva2VuTG9jYXRpb24oY2xhdXNlLCBcImNhdGNoXCIsIGNsYXVzZS5zdGFydCA/PyAwLCBiaW5kaW5nLnN0YXJ0ID8/IGNsYXVzZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KSlcbiAgICBjbGF1c2UgPSBuZXh0Q2xhdXNlXG4gIH1cbiAgY29uc3Qgc2VtYW50aWMgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gKi8gKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJsb2NrLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBib2R5Q29udGV4dCksXG4gICAgaGFuZGxlcnMsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtcbiAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0pKVxuXG4gIGlmIChub2RlLmZpbmFsaXplcikge1xuICAgIHNlbWFudGljLmZpbmFsbHlCb2R5ID0gY29udmVydEJsb2NrKG5vZGUuZmluYWxpemVyLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsXG4gICAgICB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9LCBub2RlTG9jYXRpb24obm9kZS5maW5hbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHNldFBhcnNlclJhbmdlcyhzZW1hbnRpYywge2ZpbmFsbHk6IG5vZGVMb2NhdGlvbihub2RlLmZpbmFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICByZXR1cm4gc2VtYW50aWNcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZXhhY3QgYmxvY2stYm9kaWVkIGBmb3IgKGNvbnN0IHZhbHVlIG9mIGxpc3QpYCBwcm9maWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRm9yT2ZTdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBmb3Itb2Ygc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBzY2FsYXIgb3V0cHV0IGNhbm9uaWNhbGl6ZXMgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hNYXBTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGb3JFYWNoKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5hd2FpdCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFzeW5jIGZvci1vZlwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUubGVmdC50eXBlICE9IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZm9yLW9mIGFzc2lnbm1lbnQgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5sZWZ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKG5vZGUubGVmdC5raW5kICE9IFwiY29uc3RcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYCR7bm9kZS5sZWZ0LmtpbmR9IGl0ZXJhdGlvbiBiaW5kaW5nYCwgdG9rZW5Mb2NhdGlvbihcbiAgICAgIG5vZGUubGVmdCxcbiAgICAgIG5vZGUubGVmdC5raW5kLFxuICAgICAgbm9kZS5sZWZ0LnN0YXJ0ID8/IG5vZGUuc3RhcnQgPz8gMCxcbiAgICAgIG5vZGUubGVmdC5lbmQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlXG4gICAgKSlcbiAgfVxuICBpZiAobm9kZS5sZWZ0LmRlY2xhcmF0aW9ucy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm11bHRpcGxlIGl0ZXJhdGlvbiBiaW5kaW5nc1wiLCBub2RlTG9jYXRpb24obm9kZS5sZWZ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZGVjbGFyYXRvciA9IG5vZGUubGVmdC5kZWNsYXJhdGlvbnNbMF1cblxuICBpZiAoZGVjbGFyYXRvci5pZC50eXBlID09IFwiQXJyYXlQYXR0ZXJuXCIpIHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBkZWNsYXJhdG9yLmlkLmVsZW1lbnRzXG5cbiAgICBpZiAoZGVjbGFyYXRvci5pZC5lbGVtZW50cy5sZW5ndGggIT0gMiB8fCAha2V5IHx8ICF2YWx1ZSB8fCBrZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCB2YWx1ZS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgICBkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uIHx8IGtleS50eXBlQW5ub3RhdGlvbiB8fCB2YWx1ZS50eXBlQW5ub3RhdGlvbiB8fCBrZXkub3B0aW9uYWwgfHwgdmFsdWUub3B0aW9uYWwpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYXAgaXRlcmF0aW9uIGJpbmRpbmcgc2hhcGVcIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IuaWQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoZGVjbGFyYXRvci5pbml0KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW5pdGlhbGl6ZWQgaXRlcmF0aW9uIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChub2RlLmJvZHkudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJmb3Itb2Ygd2l0aG91dCBibG9jayBib2R5XCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShub2RlLnJpZ2h0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ1bm9yZGVyZWQgbWFwIGl0ZXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmICghY29sbGVjdGlvblR5cGUgfHwgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIHJldHVybiBtaXNzaW5nVHlwZShsYW5ndWFnZSwgXCJPcmRlcmVkIG1hcCBpdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGtleUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGtleSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCB2YWx1ZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKHZhbHVlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGtleVR5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShjb2xsZWN0aW9uVHlwZS5rZXlUeXBlLCBrZXlMb2NhdGlvbilcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShjb2xsZWN0aW9uVHlwZS52YWx1ZVR5cGUsIHZhbHVlTG9jYXRpb24pXG4gICAgY29uc3Qga2V5QmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLCBsb2NhdGlvbjoga2V5TG9jYXRpb24sIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBrZXkubmFtZSwgdHlwZToga2V5VHlwZVxuICAgIH0sIHtuYW1lOiBrZXlMb2NhdGlvbn0pXG4gICAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJWYWx1ZUJpbmRpbmdcIiksIGxvY2F0aW9uOiB2YWx1ZUxvY2F0aW9uLCBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZTogdmFsdWUubmFtZSwgdHlwZTogdmFsdWVUeXBlXG4gICAgfSwge25hbWU6IHZhbHVlTG9jYXRpb259KVxuICAgIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gICAgYm9keUNvbnRleHQuYmluZGluZ3Muc2V0KGtleS5uYW1lLCBrZXlUeXBlKVxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZS5uYW1lLCB2YWx1ZVR5cGUpXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgICAga2V5QmluZGluZyxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG1hcDogY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgdmFsdWVCaW5kaW5nXG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCJvZlwiLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLFxuICAgICAgICBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cbiAgaWYgKGRlY2xhcmF0b3IuaWQudHlwZSAhPSBcIklkZW50aWZpZXJcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBkZWNsYXJhdG9yLmlkLnR5cGUsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKGRlY2xhcmF0b3IuaW5pdCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImluaXRpYWxpemVkIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKG5vZGUuYm9keS50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImZvci1vZiB3aXRob3V0IGJsb2NrIGJvZHlcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShub2RlLnJpZ2h0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYXAgaXRlcmF0aW9uIHdpdGhvdXQga2V5L3ZhbHVlIHBhaXIgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIikge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShsYW5ndWFnZSwgXCJJdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGRlY2xhcmF0b3IuaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGluZmVycmVkVHlwZSA9IGNvbGxlY3Rpb25UeXBlLmVsZW1lbnRUeXBlXG4gIGNvbnN0IGJpbmRpbmdUeXBlID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgZGVjbGFyYXRvci5pZC50eXBlQW5ub3RhdGlvblxuICAgID8gY29udmVydFR5cGVTY3JpcHRUeXBlKGRlY2xhcmF0b3IuaWQudHlwZUFubm90YXRpb24sIGBJdGVyYXRpb24gYmluZGluZyAnJHtkZWNsYXJhdG9yLmlkLm5hbWV9J2AsIGJpbmRpbmdMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgOiBpdGVyYXRpb25CaW5kaW5nVHlwZShpbmZlcnJlZFR5cGUsIGJpbmRpbmdMb2NhdGlvbilcbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBkZWNsYXJhdG9yLmlkLm5hbWUsXG4gICAgdHlwZTogYmluZGluZ1R5cGVcbiAgfSwge25hbWU6IGJpbmRpbmdMb2NhdGlvbn0pXG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChkZWNsYXJhdG9yLmlkLm5hbWUsIGJpbmRpbmdUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkZvckVhY2hTdGF0ZW1lbnRcIiksXG4gICAgbGlzdDogY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGxvY2F0aW9uLFxuICAgIHZhbHVlQmluZGluZ1xuICB9LCB7XG4gICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCJvZlwiLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBCYWJlbCBibG9jayBvciBub3JtYWxpemVkIHNpbmdsZS1zdGF0ZW1lbnQgYm9keS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkJsb2NrU3RhdGVtZW50IHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudFtdfSBpbnB1dCAtIFBhcnNlciBibG9jayBvciBzdGF0ZW1lbnRzLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBbbG9jYXRpb25dIC0gTG9jYXRpb24gZm9yIGEgc3RhdGVtZW50LWFycmF5IGJsb2NrLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKGlucHV0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0LCBsb2NhdGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gQXJyYXkuaXNBcnJheShpbnB1dCkgPyBpbnB1dCA6IGlucHV0LmJvZHlcbiAgY29uc3QgZGlyZWN0aXZlcyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gW10gOiBpbnB1dC5kaXJlY3RpdmVzXG4gIGNvbnN0IGJsb2NrTG9jYXRpb24gPSBsb2NhdGlvbiA/PyBub2RlTG9jYXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQmxvY2tTdGF0ZW1lbnR9ICovIChpbnB1dCksIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGxleGljYWxWYWx1ZU5hbWVzID0gbmV3IFNldChjb250ZXh0LmxleGljYWxWYWx1ZU5hbWVzKVxuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoc3RhdGVtZW50LnR5cGUgIT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpIGNvbnRpbnVlXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdG9yIG9mIHN0YXRlbWVudC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgIGlmIChkZWNsYXJhdG9yLmlkLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIGxleGljYWxWYWx1ZU5hbWVzLmFkZChkZWNsYXJhdG9yLmlkLm5hbWUpXG4gICAgfVxuICB9XG4gIGNvbnN0IGJsb2NrQ29udGV4dCA9IHsuLi5jb250ZXh0LCBsZXhpY2FsVmFsdWVOYW1lc31cblxuICBpZiAoZGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImRpcmVjdGl2ZVwiLCBub2RlTG9jYXRpb24oZGlyZWN0aXZlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtpbmQ6IFwiQmxvY2tcIixcbiAgICBsb2NhdGlvbjogYmxvY2tMb2NhdGlvbixcbiAgICBzdGF0ZW1lbnRzOiBzdGF0ZW1lbnRzLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYmxvY2tDb250ZXh0KSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIEphdmFTY3JpcHQgSlNEb2MgdHlwZXMgZnJvbSBhIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBkZWNsYXJhdGlvbiBpZGVudGl0eSBmb3IgdHlwZS1wYXJhbWV0ZXIgSURzLlxuICogQHJldHVybnMge3twYXJhbWV0ZXJzOiBNYXA8c3RyaW5nLCB7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9PiwgcmV0dXJuVHlwZToge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfSB8IHVuZGVmaW5lZCwgdHlwZVBhcmFtZXRlcnM/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW119fSBQYXJzZWQgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIGpzZG9jVHlwZXMobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZCkge1xuICBjb25zdCBjb21tZW50ID0gbm9kZS5sZWFkaW5nQ29tbWVudHM/LmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJiBjYW5kaWRhdGUudmFsdWUuc3RhcnRzV2l0aChcIipcIikpXG5cbiAgaWYgKCFjb21tZW50KSBtaXNzaW5nVHlwZShcImphdmFzY3JpcHRcIiwgYEZ1bmN0aW9uICcke25vZGUuaWQ/Lm5hbWUgPz8gXCJhbm9ueW1vdXNcIn0nYCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIGNvbnN0IGNvbW1lbnRCbG9jayA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9ja30gKi8gKGNvbW1lbnQpXG4gIGNvbnN0IGJsb2NrID0gcGFyc2VDb21tZW50KGAvKiR7Y29tbWVudEJsb2NrLnZhbHVlfSovYClbMF1cbiAgY29uc3QgcGFyYW1ldGVyVGFncyA9IGJsb2NrLnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJwYXJhbVwiKVxuICBjb25zdCByZXR1cm5UYWdzID0gYmxvY2sudGFncy5maWx0ZXIoKHRhZykgPT4gdGFnLnRhZyA9PSBcInJldHVybnNcIiB8fCB0YWcudGFnID09IFwicmV0dXJuXCIpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0ganNkb2NUeXBlUGFyYW1ldGVycyhjb21tZW50QmxvY2ssIGJsb2NrLnRhZ3MsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5ldyBTZXQocGFyYW1ldGVyVGFncy5tYXAoKHRhZykgPT4gdGFnLm5hbWUpKS5zaXplICE9IHBhcmFtZXRlclRhZ3MubGVuZ3RoKSB7XG4gICAgY29uc3QgZHVwbGljYXRlID0gcGFyYW1ldGVyVGFncy5maW5kKCh0YWcsIGluZGV4KSA9PiBwYXJhbWV0ZXJUYWdzLmZpbmRJbmRleCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSB0YWcubmFtZSkgIT0gaW5kZXgpXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiZHVwbGljYXRlIEBwYXJhbSBhbm5vdGF0aW9uXCIsIGR1cGxpY2F0ZVxuICAgICAgPyBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCBkdXBsaWNhdGUsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKHJldHVyblRhZ3MubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJkdXBsaWNhdGUgQHJldHVybiBhbm5vdGF0aW9uXCIsXG4gICAgICBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCByZXR1cm5UYWdzWzFdLCBcInR5cGVcIiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBNYXAocGFyYW1ldGVyVGFncy5tYXAoKHRhZykgPT4gW3RhZy5uYW1lLCB7XG4gICAgbG9jYXRpb246IGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50QmxvY2ssIHRhZywgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHNvdXJjZVR5cGU6IHRhZy50eXBlXG4gIH1dKSlcbiAgY29uc3QgcmV0dXJuVGFnID0gcmV0dXJuVGFnc1swXVxuXG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiByZXR1cm5UYWcgPyB7bG9jYXRpb246IGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50QmxvY2ssIHJldHVyblRhZywgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2VUeXBlOiByZXR1cm5UYWcudHlwZX0gOiB1bmRlZmluZWQsXG4gICAgLi4uKHR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgZXhhY3QgdW5ib3VuZGVkIGludmFyaWFudCBgQHRlbXBsYXRlIE5hbWVgIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9ja30gY29tbWVudCAtIFBhcnNlci1vd25lZCBKU0RvYyBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiY29tbWVudC1wYXJzZXJcIikuU3BlY1tdfSB0YWdzIC0gUGFyc2VkIHRhZ3MuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gb3duZXJJZCAtIFN0YWJsZSBkZWNsYXJhdGlvbiBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdIHwgdW5kZWZpbmVkfSBPcmRlcmVkIHBhcmFtZXRlcnMgd2hlbiBwcmVzZW50LlxuICovXG5mdW5jdGlvbiBqc2RvY1R5cGVQYXJhbWV0ZXJzKGNvbW1lbnQsIHRhZ3MsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbWFsZm9ybWVkID0gdGFncy5maW5kKCh0YWcpID0+IHRhZy50YWcuc3RhcnRzV2l0aChcInRlbXBsYXRlXCIpICYmIHRhZy50YWcgIT0gXCJ0ZW1wbGF0ZVwiKVxuXG4gIGlmIChtYWxmb3JtZWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJ1bnN1cHBvcnRlZCB0eXBlIHBhcmFtZXRlciB2YXJpYW5jZVwiLCBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgbWFsZm9ybWVkLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHRlbXBsYXRlVGFncyA9IHRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0ZW1wbGF0ZVwiKVxuXG4gIGlmICh0ZW1wbGF0ZVRhZ3MubGVuZ3RoID09IDApIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKCFvd25lcklkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwidHlwZSBwYXJhbWV0ZXIgb3V0c2lkZSBhIGRlY2xhcmF0aW9uXCIsXG4gICAgbm9kZUxvY2F0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChjb21tZW50KSksIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIHJldHVybiB0ZW1wbGF0ZVRhZ3MubWFwKCh0YWcsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmICghL15bQS1aYS16XyRdW0EtWmEtejAtOV8kXSokL3UudGVzdCh0YWcubmFtZSkgfHwgdGFnLnR5cGUgfHwgdGFnLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiYm91bmRlZCwgZGVmYXVsdGVkLCBvciBtYWxmb3JtZWQgdHlwZSBwYXJhbWV0ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSwgbG9jYXRpb24sIG5hbWU6IHRhZy5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfSlcbn1cblxuLyoqXG4gKiBSZWFkcyBhbiBvcHRpb25hbCBjbGFzcy1sZXZlbCBKU0RvYyB0ZW1wbGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvd25lcklkIC0gUmVjb3JkIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10gfCB1bmRlZmluZWR9IE9yZGVyZWQgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY2xhc3NKc2RvY1R5cGVQYXJhbWV0ZXJzKG5vZGUsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgY29tbWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9jayB8IHVuZGVmaW5lZH0gKi8gKFxuICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzPy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiYgY2FuZGlkYXRlLnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKSlcblxuICBpZiAoIWNvbW1lbnQpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgYmxvY2sgPSBwYXJzZUNvbW1lbnQoYC8qJHtjb21tZW50LnZhbHVlfSovYClbMF1cblxuICByZXR1cm4ganNkb2NUeXBlUGFyYW1ldGVycyhjb21tZW50LCBibG9jay50YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgc3VwcG9ydGVkIEphdmFTY3JpcHQgSlNEb2Mgc2NhbGFyIHR5cGUgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gc291cmNlVHlwZSAtIFNvdXJjZS1sYW5ndWFnZSB0eXBlLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgcGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW3R5cGVMb2NhdGlvbl0gLSBFeGFjdCB0eXBlIHRva2VuIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBsYW5ndWFnZSwgc3ViamVjdCwgbG9jYXRpb24sIHNvdXJjZSwgdHlwZUxvY2F0aW9uID0gbG9jYXRpb24sIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIpIHJldHVybiByZXF1aXJlU291cmNlU2NhbGFyVHlwZShsYW5ndWFnZSwgc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIHR5cGVMb2NhdGlvbilcblxuICByZXR1cm4gZG9jdW1lbnRlZFZhbHVlVHlwZSh7bGFuZ3VhZ2UsIGxvY2F0aW9uOiB0eXBlTG9jYXRpb24sIG93bmVyTG9jYXRpb246IGxvY2F0aW9uLCByZWNvcmRzOiByZWNvcmROYW1lcywgc291cmNlLCBzb3VyY2VUeXBlLCBzdWJqZWN0LCB0eXBlUGFyYW1ldGVyc30pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IEphdmFTY3JpcHQgZnVuY3Rpb24gcmV0dXJuIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gc291cmNlVHlwZSAtIEpTRG9jIHR5cGUgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIGZ1bmN0aW9uIHJldHVybi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gRnVuY3Rpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgcGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW3R5cGVMb2NhdGlvbl0gLSBFeGFjdCBhbm5vdGF0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVyblR5cGUoc291cmNlVHlwZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uLCBzb3VyY2UsIHR5cGVMb2NhdGlvbiA9IGxvY2F0aW9uLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKHNvdXJjZVR5cGUgPT0gXCJ2b2lkXCIpIHJldHVybiByZXF1aXJlU291cmNlUmV0dXJuVHlwZShsYW5ndWFnZSwgc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIHR5cGVMb2NhdGlvbilcblxuICByZXR1cm4gY29udmVydFR5cGUoc291cmNlVHlwZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uLCBzb3VyY2UsIHR5cGVMb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBUeXBlU2NyaXB0IHNjYWxhciBrZXl3b3JkIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UeXBlQW5ub3RhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGVBbm5vdGF0aW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vb3AgfCBudWxsIHwgdW5kZWZpbmVkfSBhbm5vdGF0aW9uIC0gVHlwZSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE93bmluZyBkZWNsYXJhdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0VHlwZShhbm5vdGF0aW9uLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKCFhbm5vdGF0aW9uKSByZXR1cm4gbWlzc2luZ1R5cGUoXCJ0eXBlc2NyaXB0XCIsIHN1YmplY3QsIG93bmVyTG9jYXRpb24pXG4gIGlmIChhbm5vdGF0aW9uLnR5cGUgIT0gXCJUU1R5cGVBbm5vdGF0aW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbm9kZUxvY2F0aW9uKGFubm90YXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShhbm5vdGF0aW9uLnR5cGVBbm5vdGF0aW9uLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGJvdW5kZWQgcmVjdXJzaXZlIFR5cGVTY3JpcHQgdmFsdWUtdHlwZSB0cmVlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlfSB0eXBlTm9kZSAtIFBhcnNlci1vd25lZCB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIHN1YmplY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBvd25lckxvY2F0aW9uIC0gT3duaW5nIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHR5cGVOb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgY29uc3Qgc291cmNlVHlwZSA9IHR5cGVOb2RlLnR5cGUgPT0gXCJUU051bWJlcktleXdvcmRcIiA/IFwibnVtYmVyXCIgOlxuICAgIHR5cGVOb2RlLnR5cGUgPT0gXCJUU0Jvb2xlYW5LZXl3b3JkXCIgPyBcImJvb2xlYW5cIiA6IHR5cGVOb2RlLnR5cGUgPT0gXCJUU1N0cmluZ0tleXdvcmRcIiA/IFwic3RyaW5nXCIgOiB1bmRlZmluZWRcblxuICBpZiAoc291cmNlVHlwZSkge1xuICAgIHJldHVybiByZXF1aXJlU291cmNlU2NhbGFyVHlwZShcInR5cGVzY3JpcHRcIiwgc291cmNlVHlwZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVHlwZVJlZmVyZW5jZVwiICYmIHR5cGVOb2RlLnR5cGVOYW1lLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgIXR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgdHlwZVBhcmFtZXRlcnMuaGFzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyfSAqLyAodHlwZVBhcmFtZXRlcnMuZ2V0KHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKVxuXG4gICAgcmV0dXJuIHR5cGVWYXJpYWJsZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhcmFtZXRlci5pZCksIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgcmVjb3JkTmFtZXMuaGFzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb259ICovIChyZWNvcmROYW1lcy5nZXQodHlwZU5vZGUudHlwZU5hbWUubmFtZSkpXG5cbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwiZ2VuZXJpYyBvd25lZCByZXNvdXJjZSB0eXBlXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICByZXR1cm4gb3duZWRSZXNvdXJjZVR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbih0eXBlTm9kZS50eXBlTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICBpZiAodHlwZU5vZGUudHlwZVBhcmFtZXRlcnMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJnZW5lcmljIHJlZmVyZW5jZSBjbGFzcyB0eXBlXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbih0eXBlTm9kZS50eXBlTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgPT0gXCJvd25lZFJlc291cmNlXCJcbiAgICAgICAgPyBvd25lZFJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGxvY2F0aW9uKVxuICAgICAgICA6IHJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBhcmd1bWVudHNfID0gdHlwZU5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtcy5tYXAoKHBhcmFtZXRlcikgPT5cbiAgICAgIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShwYXJhbWV0ZXIsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycykpXG5cbiAgICByZXR1cm4gcmVjb3JkVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLnR5cGVOYW1lLCBmaWxlbmFtZSwgc291cmNlKSwgYXJndW1lbnRzXylcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVW5pb25UeXBlXCIpIHtcbiAgICBpZiAodHlwZU5vZGUudHlwZXMubGVuZ3RoICE9IDIgfHwgdHlwZU5vZGUudHlwZXNbMV0udHlwZSAhPSBcIlRTTnVsbEtleXdvcmRcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFxuICAgICAgICBcInR5cGVzY3JpcHRcIixcbiAgICAgICAgdHlwZU5vZGUudHlwZXMuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIlRTTnVsbEtleXdvcmRcIilcbiAgICAgICAgICA/IFwiYXJiaXRyYXJ5IHVuaW9uIHR5cGVcIlxuICAgICAgICAgIDogXCJ1bnN1cHBvcnRlZCBjb2xsZWN0aW9uIG9yIHNjYWxhciB0eXBlXCIsXG4gICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgdmFsdWVOb2RlID0gdHlwZU5vZGUudHlwZXNbMF1cblxuICAgIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUodmFsdWVOb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5vZGVMb2NhdGlvbih2YWx1ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKVxuICB9XG4gIGlmICh0eXBlTm9kZS50eXBlID09IFwiVFNUeXBlT3BlcmF0b3JcIiAmJiB0eXBlTm9kZS5vcGVyYXRvciA9PSBcInJlYWRvbmx5XCIgJiYgdHlwZU5vZGUudHlwZUFubm90YXRpb24udHlwZSA9PSBcIlRTQXJyYXlUeXBlXCIpIHtcbiAgICBjb25zdCBlbGVtZW50Tm9kZSA9IHR5cGVOb2RlLnR5cGVBbm5vdGF0aW9uLmVsZW1lbnRUeXBlXG5cbiAgICByZXR1cm4gbGlzdFR5cGUoXG4gICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoZWxlbWVudE5vZGUsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbm9kZUxvY2F0aW9uKGVsZW1lbnROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIClcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVHlwZVJlZmVyZW5jZVwiICYmIHR5cGVOb2RlLnR5cGVOYW1lLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBbXCJSZWFkb25seUFycmF5XCIsIFwiUmVhZG9ubHlNYXBcIl0uaW5jbHVkZXModHlwZU5vZGUudHlwZU5hbWUubmFtZSkpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdHlwZU5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtcyA/PyBbXVxuXG4gICAgaWYgKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUgPT0gXCJSZWFkb25seUFycmF5XCIgJiYgcGFyYW1ldGVycy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUocGFyYW1ldGVyc1swXSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICApXG4gICAgfVxuICAgIGlmICh0eXBlTm9kZS50eXBlTmFtZS5uYW1lID09IFwiUmVhZG9ubHlNYXBcIiAmJiBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAyKSB7XG4gICAgICBjb25zdCBrZXlUeXBlID0gY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlcnNbMF0sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycylcblxuICAgICAgaWYgKGtleVR5cGUua2luZCAhPSBcIlR5cGVSZWZlcmVuY2VcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwibWFwIGtleSB0eXBlIG90aGVyIHRoYW4gc3RyaW5nXCIsIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXBUeXBlKFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUocGFyYW1ldGVyc1sxXSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24ocGFyYW1ldGVyc1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwidW5zdXBwb3J0ZWQgY29sbGVjdGlvbiBvciBzY2FsYXIgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBUeXBlU2NyaXB0IGZ1bmN0aW9uIHJldHVybiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlQW5ub3RhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob29wIHwgbnVsbCB8IHVuZGVmaW5lZH0gYW5ub3RhdGlvbiAtIFJldHVybiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBmdW5jdGlvbiByZXR1cm4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBvd25lckxvY2F0aW9uIC0gRnVuY3Rpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVTY3JpcHRSZXR1cm5UeXBlKGFubm90YXRpb24sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoIWFubm90YXRpb24pIHJldHVybiByZXF1aXJlU291cmNlUmV0dXJuVHlwZShcInR5cGVzY3JpcHRcIiwgdW5kZWZpbmVkLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBpZiAoYW5ub3RhdGlvbi50eXBlICE9IFwiVFNUeXBlQW5ub3RhdGlvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIHJldHVybiB0eXBlXCIsIG5vZGVMb2NhdGlvbihhbm5vdGF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCB0eXBlTm9kZSA9IGFubm90YXRpb24udHlwZUFubm90YXRpb25cblxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVm9pZEtleXdvcmRcIikge1xuICAgIHJldHVybiByZXF1aXJlU291cmNlUmV0dXJuVHlwZShcInR5cGVzY3JpcHRcIiwgXCJ2b2lkXCIsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4gY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHR5cGVOb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIG5hdGl2ZSB1bmJvdW5kZWQgaW52YXJpYW50IFR5cGVTY3JpcHQgcGFyYW1ldGVyIGxpc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IGRlY2xhcmF0aW9uIC0gUGFyc2VyLW93bmVkIGxpc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBvd25pbmcgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gdHlwZVNjcmlwdFR5cGVQYXJhbWV0ZXJzKGRlY2xhcmF0aW9uLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghZGVjbGFyYXRpb24pIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gZGVjbGFyYXRpb24ucGFyYW1zLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIuY29uc3RyYWludCB8fCBwYXJhbWV0ZXIuZGVmYXVsdCB8fCBSZWZsZWN0LmdldChwYXJhbWV0ZXIsIFwiaW5cIikgfHwgUmVmbGVjdC5nZXQocGFyYW1ldGVyLCBcIm91dFwiKSB8fFxuICAgICAgUmVmbGVjdC5nZXQocGFyYW1ldGVyLCBcImNvbnN0XCIpIHx8IHR5cGVvZiBwYXJhbWV0ZXIubmFtZSAhPSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwiYm91bmRlZCwgZGVmYXVsdGVkLCB2YXJpYW50LCBvciBjb25zdCB0eXBlIHBhcmFtZXRlclwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7aWQ6IGAke293bmVySWR9OnR5cGU6JHtpbmRleH1gLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUGFyYW1ldGVyXCIpLCBsb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyLm5hbWV9LCB7bmFtZTogbG9jYXRpb259KVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIGZ1bmN0aW9uIHNpZ25hdHVyZSBiZWZvcmUgYW55IGJvZHkgZXhwcmVzc2lvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBub2RlIC0gQmFiZWwgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvd25lcklkIC0gU3RhYmxlIGZ1bmN0aW9uIGlkZW50aXR5LlxuICogQHJldHVybnMge0phdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBvd25lcklkKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFub2RlLmlkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYW5vbnltb3VzIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5hc3luYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFzeW5jIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5nZW5lcmF0b3IpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJnZW5lcmF0b3IgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIGNvbnN0IG5hdGl2ZVR5cGVQYXJhbWV0ZXJzID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IHR5cGVTY3JpcHRUeXBlUGFyYW1ldGVycygvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9ICovIChub2RlLnR5cGVQYXJhbWV0ZXJzKSwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IG5vZGUudHlwZVBhcmFtZXRlcnMgPyB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJuYXRpdmUgZ2VuZXJpYyBmdW5jdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS50eXBlUGFyYW1ldGVycywgZmlsZW5hbWUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRvY3VtZW50ZWRUeXBlcyA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8ganNkb2NUeXBlcyhub2RlLCBmaWxlbmFtZSwgc291cmNlLCBvd25lcklkKSA6IHVuZGVmaW5lZFxuICBjb25zdCB0eXBlUGFyYW1ldGVyc18gPSBuYXRpdmVUeXBlUGFyYW1ldGVycyA/PyBkb2N1bWVudGVkVHlwZXM/LnR5cGVQYXJhbWV0ZXJzXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHR5cGVQYXJhbWV0ZXJzXyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLnBhcmFtcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgaWYgKHBhcmFtZXRlci5vcHRpb25hbCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm9wdGlvbmFsIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcblxuICAgIGNvbnN0IGRvY3VtZW50ZWRUeXBlID0gZG9jdW1lbnRlZFR5cGVzPy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcbiAgICBjb25zdCB0eXBlID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCJcbiAgICAgID8gY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLCBkb2N1bWVudGVkVHlwZT8ubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgICA6IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShwYXJhbWV0ZXIudHlwZUFubm90YXRpb24sIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLFxuICAgICAgbG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLFxuICAgICAgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlXG4gICAgfSwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgY29uc3QgZXh0cmFEb2N1bWVudGVkUGFyYW1ldGVyID0gZG9jdW1lbnRlZFR5cGVzICYmIFsuLi5kb2N1bWVudGVkVHlwZXMucGFyYW1ldGVycy5rZXlzKCldXG4gICAgLmZpbmQoKG5hbWUpID0+ICFub2RlLnBhcmFtcy5zb21lKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci50eXBlID09IFwiSWRlbnRpZmllclwiICYmIHBhcmFtZXRlci5uYW1lID09IG5hbWUpKVxuXG4gIGlmIChleHRyYURvY3VtZW50ZWRQYXJhbWV0ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGFubm90YXRpb24gZm9yIHVua25vd24gcGFyYW1ldGVyICcke2V4dHJhRG9jdW1lbnRlZFBhcmFtZXRlcn0nYCwgbG9jYXRpb24pXG4gIGNvbnN0IHJldHVybkFubm90YXRpb24gPSBub2RlLnJldHVyblR5cGVcbiAgY29uc3QgcmV0dXJuVHlwZSA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiXG4gICAgPyBjb252ZXJ0UmV0dXJuVHlwZShkb2N1bWVudGVkVHlwZXM/LnJldHVyblR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgRnVuY3Rpb24gJyR7bm9kZS5pZC5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGVzPy5yZXR1cm5UeXBlPy5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICA6IGNvbnZlcnRUeXBlU2NyaXB0UmV0dXJuVHlwZShyZXR1cm5Bbm5vdGF0aW9uLCBgRnVuY3Rpb24gJyR7bm9kZS5pZC5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgbmFtZTogbm9kZS5pZC5uYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuaWQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZSxcbiAgICAuLi4odHlwZVBhcmFtZXRlcnNfID8ge3R5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVyc199IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBmdW5jdGlvbiBib2R5IHVzaW5nIGFsbCBhbHJlYWR5LXByb3ZlZCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmV9IHNpZ25hdHVyZSAtIENvbnZlcnRlZCBzaWduYXR1cmUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIE1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSB2YWx1ZVJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYXZhaWxhYmxlIGluIHZhbHVlIHBvc2l0aW9ucy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBSZWZlcmVuY2UgY2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvciBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvciBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIGdlbmVyYXRlZCBzY2FsYXIgb3V0cHV0IG1heSBjb250YWluIHNpZ25lZCB6ZXJvLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IFNlbWFudGljIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb24obm9kZSwgc2lnbmF0dXJlLCBmdW5jdGlvbnMsIHJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBlcnJvck5hbWVzLCBlcnJvcnMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQpIHtcbiAgY29uc3QgY29udGV4dCA9IHtcbiAgICBiaW5kaW5nczogbmV3IE1hcChzaWduYXR1cmUucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICBjbGFzc2VzLFxuICAgIGVycm9yTmFtZXMsXG4gICAgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucyxcbiAgICBvcmRlcmVkTWFwRGVjbGFyYXRpb25zOiBvcmRlcmVkTWFwRGVjbGFyYXRpb25zRm9yKG5vZGUuYm9keSksXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkcyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICB0eXBlUGFyYW1ldGVyczogbmV3IE1hcCgoc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSksXG4gICAgdmFsdWVSZWNvcmROYW1lc1xuICB9XG4gIGNvbnN0IGJvZHkgPSBjb252ZXJ0QmxvY2sobm9kZS5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5LFxuICAgIGtpbmQ6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sXG4gICAgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgLi4uKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcGFyc2VyLW93bmVkIHBhaXIgbG9vcHMgdG8gZXhhY3QgZGVjbGFyYXRpb25zIGluc2lkZSBvbmUgbGV4aWNhbCBvd25lci5cbiAqIEFtYmlndW91cyBzYW1lLW5hbWUgZGVjbGFyYXRpb25zIHByb2R1Y2Ugbm8gZXZpZGVuY2UgYW5kIGZhaWwgZHVyaW5nIGxvb3AgY29udmVyc2lvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBGdW5jdGlvbiBib2R5IG9yIGVudHJ5LXBvaW50IHN1YnRyZWUuXG4gKiBAcmV0dXJucyB7U2V0PG9iamVjdD59IEV4YWN0IHBhaXItaXRlcmF0ZWQgcGFyc2VyIGRlY2xhcmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gb3JkZXJlZE1hcERlY2xhcmF0aW9uc0Zvcih2YWx1ZSkge1xuICAvKiogQHR5cGUge3tkZWNsYXJhdGlvbjogb2JqZWN0LCBuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge3tuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWNlaXZlcnMgPSBbXVxuICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKVxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgY2FuZGlkYXRlLlxuICAgKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIFBhcnNlciBjYW5kaWRhdGUuXG4gICAqL1xuICBjb25zdCB2aXNpdCA9IChjYW5kaWRhdGUpID0+IHtcbiAgICBpZiAoIWNhbmRpZGF0ZSB8fCB0eXBlb2YgY2FuZGlkYXRlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXMoY2FuZGlkYXRlKSkgcmV0dXJuXG4gICAgc2Vlbi5hZGQoY2FuZGlkYXRlKVxuICAgIGNvbnN0IHR5cGUgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwidHlwZVwiKVxuXG4gICAgaWYgKHR5cGUgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgfHwgdHlwZSA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikgcmV0dXJuXG4gICAgaWYgKHR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0b3JcIikge1xuICAgICAgY29uc3QgaWRlbnRpZmllciA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJpZFwiKVxuXG4gICAgICBpZiAoUmVmbGVjdC5nZXQoaWRlbnRpZmllciwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiKSBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uOiBjYW5kaWRhdGUsXG4gICAgICAgIG5hbWU6IFJlZmxlY3QuZ2V0KGlkZW50aWZpZXIsIFwibmFtZVwiKSxcbiAgICAgICAgb2Zmc2V0OiBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwic3RhcnRcIilcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiRm9yT2ZTdGF0ZW1lbnRcIikge1xuICAgICAgY29uc3QgbGVmdCA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJsZWZ0XCIpXG4gICAgICBjb25zdCByaWdodCA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJyaWdodFwiKVxuICAgICAgY29uc3QgbG9vcERlY2xhcmF0aW9ucyA9IGxlZnQgJiYgdHlwZW9mIGxlZnQgPT0gXCJvYmplY3RcIiA/IFJlZmxlY3QuZ2V0KGxlZnQsIFwiZGVjbGFyYXRpb25zXCIpIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCBwYXR0ZXJuID0gQXJyYXkuaXNBcnJheShsb29wRGVjbGFyYXRpb25zKSAmJiBsb29wRGVjbGFyYXRpb25zLmxlbmd0aCA9PSAxID8gUmVmbGVjdC5nZXQobG9vcERlY2xhcmF0aW9uc1swXSwgXCJpZFwiKSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgZWxlbWVudHMgPSBwYXR0ZXJuICYmIHR5cGVvZiBwYXR0ZXJuID09IFwib2JqZWN0XCIgPyBSZWZsZWN0LmdldChwYXR0ZXJuLCBcImVsZW1lbnRzXCIpIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmIChSZWZsZWN0LmdldChsZWZ0LCBcImtpbmRcIikgPT0gXCJjb25zdFwiICYmIFJlZmxlY3QuZ2V0KHBhdHRlcm4sIFwidHlwZVwiKSA9PSBcIkFycmF5UGF0dGVyblwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoZWxlbWVudHMpICYmIGVsZW1lbnRzLmxlbmd0aCA9PSAyICYmIGVsZW1lbnRzLmV2ZXJ5KChlbGVtZW50KSA9PiBSZWZsZWN0LmdldChlbGVtZW50LCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIpICYmXG4gICAgICAgIFJlZmxlY3QuZ2V0KHJpZ2h0LCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIpIHJlY2VpdmVycy5wdXNoKHtcbiAgICAgICAgbmFtZTogUmVmbGVjdC5nZXQocmlnaHQsIFwibmFtZVwiKSxcbiAgICAgICAgb2Zmc2V0OiBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwic3RhcnRcIilcbiAgICAgIH0pXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKGNhbmRpZGF0ZSkpIHtcbiAgICAgIGlmIChbXCJleHRyYVwiLCBcImlubmVyQ29tbWVudHNcIiwgXCJsZWFkaW5nQ29tbWVudHNcIiwgXCJsb2NcIiwgXCJ0cmFpbGluZ0NvbW1lbnRzXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSB2aXNpdChpdGVtKVxuICAgICAgfSBlbHNlIHZpc2l0KGNoaWxkKVxuICAgIH1cbiAgfVxuXG4gIHZpc2l0KHZhbHVlKVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoKVxuICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIHJlY2VpdmVycykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuZmlsdGVyKCh7bmFtZSwgb2Zmc2V0fSkgPT4gbmFtZSA9PSByZWNlaXZlci5uYW1lICYmIG9mZnNldCA8IHJlY2VpdmVyLm9mZnNldClcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PSAxKSBzZWxlY3RlZC5hZGQobWF0Y2hlc1swXS5kZWNsYXJhdGlvbilcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBlbXB0eSBuYXRpdmUgRXJyb3Igc3ViY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQmFiZWwgY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgc2VtYW50aWMgZXJyb3IuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259IFNlbWFudGljIGVycm9yIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVNjcmlwdEVycm9yKG5vZGUsIGRlY2xhcmF0aW9uLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCB8fCBub2RlLnN1cGVyQ2xhc3M/LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZS5zdXBlckNsYXNzLm5hbWUgIT0gXCJFcnJvclwiIHx8XG4gICAgbm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDAgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fCBub2RlLnN1cGVyVHlwZVBhcmFtZXRlcnMgfHxcbiAgICBSZWZsZWN0LmdldChub2RlLCBcImFic3RyYWN0XCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiZGVjbGFyZVwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIik/Lmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgdHlwZWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge1xuICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0eXBlOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5zdXBlckNsYXNzLCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIFByZWRlY2xhcmVzIHRoZSBib3VuZGVkIG5hdGl2ZSBwcml2YXRlLWZpZWxkIHJlZmVyZW5jZS1jbGFzcyBwcm9maWxlIGFuZCBhbGwgY2FsbGFibGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBQYXJzZXIgY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgY2xhc3MgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBOb21pbmFsIHR5cGVzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBTZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gcHJlZGVjbGFyZVJlZmVyZW5jZUNsYXNzKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFub2RlLmlkIHx8IG5vZGUuc3VwZXJDbGFzcyB8fCBub2RlLmRlY29yYXRvcnM/Lmxlbmd0aCB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIFJlZmxlY3QuZ2V0KG5vZGUsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJkZWNsYXJlXCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiaW1wbGVtZW50c1wiKT8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyBpbmhlcml0YW5jZSwgZ2VuZXJpY3MsIGRlY29yYXRpb24sIG9yIG1vZGlmaWVyXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZFtdfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NNZXRob2RcIiAmJiBtZW1iZXIua2luZCA9PSBcImNvbnN0cnVjdG9yXCIpKVxuICBjb25zdCBmaWVsZE5vZGVzID0gbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcm9wZXJ0eVwiIHx8IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcml2YXRlUHJvcGVydHlcIilcbiAgY29uc3QgbWV0aG9kTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZFtdfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NNZXRob2RcIiAmJiBtZW1iZXIua2luZCA9PSBcIm1ldGhvZFwiKSlcblxuICBpZiAoY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggIT0gMSB8fCBmaWVsZE5vZGVzLmxlbmd0aCA9PSAwIHx8XG4gICAgZmllbGROb2Rlcy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggKyBjb25zdHJ1Y3Rvck5vZGVzLmxlbmd0aCAhPSBub2RlLmJvZHkuYm9keS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmVmZXJlbmNlIGNsYXNzIHJlcXVpcmVzIHByaXZhdGUgZmllbGRzLCBvbmUgY29uc3RydWN0b3IsIGFuZCBvcmRpbmFyeSBtZXRob2RzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkTm9kZXMubWFwKChtZW1iZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgbGV0IG5hbWVcbiAgICBsZXQgbmFtZUxvY2F0aW9uXG4gICAgbGV0IHR5cGVcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikge1xuICAgICAgaWYgKG1lbWJlci50eXBlICE9IFwiQ2xhc3NQcm9wZXJ0eVwiIHx8IG1lbWJlci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBtZW1iZXIuY29tcHV0ZWQgfHwgbWVtYmVyLnN0YXRpYyB8fFxuICAgICAgICBtZW1iZXIuYWNjZXNzaWJpbGl0eSAhPSBcInByaXZhdGVcIiB8fCBtZW1iZXIucmVhZG9ubHkgfHwgbWVtYmVyLnZhbHVlIHx8IG1lbWJlci5vcHRpb25hbCB8fCBtZW1iZXIuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgICAgIFJlZmxlY3QuZ2V0KG1lbWJlciwgXCJhYnN0cmFjdFwiKSB8fCBSZWZsZWN0LmdldChtZW1iZXIsIFwiZGVjbGFyZVwiKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIG5hbWUgPSBtZW1iZXIua2V5Lm5hbWVcbiAgICAgIG5hbWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihtZW1iZXIua2V5LCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgdHlwZSA9IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShtZW1iZXIudHlwZUFubm90YXRpb24sIGBQcml2YXRlIGZpZWxkICcke25hbWV9J2AsIGZpZWxkTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1lbWJlci50eXBlICE9IFwiQ2xhc3NQcml2YXRlUHJvcGVydHlcIiB8fCBtZW1iZXIua2V5LnR5cGUgIT0gXCJQcml2YXRlTmFtZVwiIHx8IG1lbWJlci5zdGF0aWMgfHwgbWVtYmVyLnZhbHVlIHx8XG4gICAgICAgIG1lbWJlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBuYW1lID0gbWVtYmVyLmtleS5pZC5uYW1lXG4gICAgICBuYW1lTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obWVtYmVyLmtleS5pZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIGNvbnN0IGNvbW1lbnQgPSBtZW1iZXIubGVhZGluZ0NvbW1lbnRzPy5hdCgtMSlcbiAgICAgIGNvbnN0IGdhcCA9IGNvbW1lbnQgPyBzb3VyY2Uuc2xpY2UoY29tbWVudC5lbmQgPz8gMCwgbWVtYmVyLnN0YXJ0ID8/IDApIDogXCJcIlxuICAgICAgY29uc3QgYmxvY2sgPSBjb21tZW50Py50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiYgY29tbWVudC52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKSAmJiAvXlxccyokL3UudGVzdChnYXApXG4gICAgICAgID8gcGFyc2VDb21tZW50KGAvKiR7Y29tbWVudC52YWx1ZX0qL2ApWzBdIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCB0YWdzID0gYmxvY2s/LnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0eXBlXCIpID8/IFtdXG5cbiAgICAgIGlmICghY29tbWVudCB8fCB0YWdzLmxlbmd0aCAhPSAxIHx8IHRhZ3NbMF0ubmFtZSB8fCB0YWdzWzBdLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBtaXNzaW5nVHlwZShsYW5ndWFnZSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHR5cGUgPSBjb252ZXJ0VHlwZSh0YWdzWzBdLnR5cGUsIGxhbmd1YWdlLCBgUHJpdmF0ZSBmaWVsZCAnJHtuYW1lfSdgLCBmaWVsZExvY2F0aW9uLCBzb3VyY2UsXG4gICAgICAgIGNvbW1lbnRUYWdMb2NhdGlvbigvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9ICovIChjb21tZW50KSwgdGFnc1swXSwgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBub21pbmFsTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6JHtpbmRleH1gLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbiwgbmFtZSwgdHlwZX0sIHtuYW1lOiBuYW1lTG9jYXRpb259KVxuICB9KVxuICBjb25zdCBvd25lZEZpZWxkcyA9IGRlY2xhcmF0aW9uLmZpZWxkcy5maWx0ZXIoKHt0eXBlfSkgPT4gdHlwZS5raW5kID09IFwiT3duZWRSZXNvdXJjZVR5cGVcIilcblxuICBpZiAob3duZWRGaWVsZHMubGVuZ3RoID09IDEpIHtcbiAgICBjb25zdCBvd25lZEZpZWxkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Qcml2YXRlRmllbGQgJiB7dHlwZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuT3duZWRSZXNvdXJjZVR5cGV9fSAqLyAob3duZWRGaWVsZHNbMF0pXG5cbiAgICBkZWNsYXJhdGlvbi5vd25lcnNoaXAgPSB7ZmllbGRJZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChvd25lZEZpZWxkLmlkKSwga2luZDogXCJvd25lZFJlc291cmNlXCIsIHJlc291cmNlSWQ6IG93bmVkRmllbGQudHlwZS5yZXNvdXJjZUlkfVxuICB9XG5cbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2R9ICovIChjb25zdHJ1Y3Rvck5vZGVzWzBdKVxuICBjb25zdCBjb25zdHJ1Y3RvclNpZ25hdHVyZSA9IGNvbnZlcnRDbGFzc0NhbGxhYmxlU2lnbmF0dXJlKGNvbnN0cnVjdG9yTm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgbGFuZ3VhZ2UsXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSlcbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IgPSB3aXRoUGFyc2VyUmFuZ2VzKHtib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLFxuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06Y29uc3RydWN0b3JgLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sXG4gICAgcGFyYW1ldGVyczogY29uc3RydWN0b3JTaWduYXR1cmUucGFyYW1ldGVyc30sIHtjb25zdHJ1Y3RvcjogY29uc3RydWN0b3JTaWduYXR1cmUubmFtZUxvY2F0aW9ufSlcbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZE5vZGVzLm1hcCgobWV0aG9kTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb252ZXJ0Q2xhc3NDYWxsYWJsZVNpZ25hdHVyZShtZXRob2ROb2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgZmFsc2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSwgaWQ6IGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHtpbmRleH1gLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSl9LFxuICAgIHtuYW1lOiBzaWduYXR1cmUubmFtZUxvY2F0aW9ufSlcbiAgfSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHJlZmVyZW5jZSBjbGFzcyBib2R5IGFmdGVyIGV2ZXJ5IGNsYXNzIHNpZ25hdHVyZSBpcyBjb21wbGV0ZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBQYXJzZXIgY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gQ29tcGxldGUgcHJlZGVjbGFyZWQgY2xhc3Mgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gTm9taW5hbCB0eXBlcyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSB2YWx1ZU5hbWVzIC0gTm9taW5hbCBjb25zdHJ1Y3RvcnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBDbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBUb3AtbGV2ZWwgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvcnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9ycyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHNjYWxhciBvdXRwdXQgY2Fub25pY2FsaXplcyB6ZXJvLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IENvbXBsZXRlZCBzZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJlZmVyZW5jZUNsYXNzQm9kaWVzKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIHZhbHVlTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXJyb3JOYW1lcyxcbiAgZXJyb3JzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkKSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmluZCgobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJjb25zdHJ1Y3RvclwiKSlcbiAgY29uc3QgbWV0aG9kTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZFtdfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NNZXRob2RcIiAmJiBtZW1iZXIua2luZCA9PSBcIm1ldGhvZFwiKSlcbiAgY29uc3QgYmFzZUNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlcywgY3VycmVudENsYXNzOiBkZWNsYXJhdGlvbiwgZXJyb3JOYW1lcywgZXJyb3JzLCBmdW5jdGlvbnMsXG4gICAgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3JkcywgdmFsdWVSZWNvcmROYW1lczogdmFsdWVOYW1lc31cbiAgY29uc3QgY29uc3RydWN0b3JDb250ZXh0ID0gey4uLmJhc2VDb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgcmV0dXJuVHlwZToge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVSZWZlcmVuY2VcIiksIG5hbWU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInZvaWRcIil9fVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHkgPSBjb252ZXJ0QmxvY2soY29uc3RydWN0b3JOb2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsXG4gICAgY29uc3RydWN0b3JDb250ZXh0KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cbiAgICBjb25zdCBjb250ZXh0ID0gey4uLmJhc2VDb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChtZXRob2QucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICAgIHJldHVyblR5cGU6IG1ldGhvZC5yZXR1cm5UeXBlfVxuXG4gICAgbWV0aG9kLmJvZHkgPSBjb252ZXJ0QmxvY2sobWV0aG9kTm9kZXNbaW5kZXhdLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZGVjbGFyYXRpb25cbn1cblxuLyoqXG4gKiBSZWFkcyBvbmUgY29uc3RydWN0b3Igb3IgbWV0aG9kIHNpZ25hdHVyZSB3aXRob3V0IGFkbWl0dGluZyBvdmVybG9hZHMgb3IgbW9kaWZpZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2R9IG5vZGUgLSBQYXJzZXIgbWV0aG9kLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIERlY2xhcmluZyBjbGFzcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIE5vbWluYWwgdHlwZXMuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY29uc3RydWN0b3IgLSBXaGV0aGVyIHRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yLlxuICogQHJldHVybnMge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hbWU6IHN0cmluZywgbmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGFyYW1ldGVyczogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW10sIHJldHVyblR5cGU/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX19IFNpZ25hdHVyZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydENsYXNzQ2FsbGFibGVTaWduYXR1cmUobm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnN0cnVjdG9yKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuY29tcHV0ZWQgfHwgbm9kZS5zdGF0aWMgfHwgbm9kZS5hc3luYyB8fCBub2RlLmdlbmVyYXRvciB8fCBub2RlLmRlY29yYXRvcnM/Lmxlbmd0aCB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgbm9kZS5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3RvciAhPSAobm9kZS5raW5kID09IFwiY29uc3RydWN0b3JcIikgfHxcbiAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBub2RlLmFjY2Vzc2liaWxpdHkgIT0gbnVsbCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcmVmZXJlbmNlIGNsYXNzIGNhbGxhYmxlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGRvY3VtZW50ZWQgPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIlxuICAgID8ganNkb2NUeXBlcygvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAobm9kZSkpLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogdW5kZWZpbmVkXG4gIGlmIChjb25zdHJ1Y3RvciAmJiAobm9kZS5yZXR1cm5UeXBlIHx8IGRvY3VtZW50ZWQ/LnJldHVyblR5cGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImNvbnN0cnVjdG9yIHJldHVybiBhbm5vdGF0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLnBhcmFtcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBwYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBtZXRob2QgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBkb2N1bWVudGVkVHlwZSA9IGRvY3VtZW50ZWQ/LnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlci5uYW1lKVxuICAgIGNvbnN0IHR5cGUgPSBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgICAgPyBjb252ZXJ0VHlwZVNjcmlwdFR5cGUocGFyYW1ldGVyLnR5cGVBbm5vdGF0aW9uLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKVxuICAgICAgOiBjb252ZXJ0VHlwZShkb2N1bWVudGVkVHlwZT8uc291cmNlVHlwZSwgbGFuZ3VhZ2UsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBzb3VyY2UsXG4gICAgICAgIGRvY3VtZW50ZWRUeXBlPy5sb2NhdGlvbiwgbm9taW5hbE5hbWVzKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSwgbG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLCBuYW1lOiBwYXJhbWV0ZXIubmFtZSwgdHlwZX0sXG4gICAgICB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBpZiAoZG9jdW1lbnRlZCAmJiBkb2N1bWVudGVkLnBhcmFtZXRlcnMuc2l6ZSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtZXRob2QgSlNEb2MgcGFyYW1ldGVyIG1pc21hdGNoXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWUgPSBjb25zdHJ1Y3RvciA/IFwiY29uc3RydWN0b3JcIiA6IG5vZGUua2V5Lm5hbWVcbiAgY29uc3QgbmFtZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUua2V5LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghY29uc3RydWN0b3IgJiYgcmVmZXJlbmNlTWV0aG9kSG9va3MuaGFzKG5hbWUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgcmVzZXJ2ZWQgcmVmZXJlbmNlIG1ldGhvZCAnJHtuYW1lfSdgLCBuYW1lTG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4ge2xvY2F0aW9uLCBuYW1lLCBuYW1lTG9jYXRpb24sIHBhcmFtZXRlcnMsIC4uLihjb25zdHJ1Y3RvciA/IHt9IDoge3JldHVyblR5cGU6IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyBjb252ZXJ0VHlwZVNjcmlwdFJldHVyblR5cGUobm9kZS5yZXR1cm5UeXBlLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKVxuICAgIDogY29udmVydFJldHVyblR5cGUoZG9jdW1lbnRlZD8ucmV0dXJuVHlwZT8uc291cmNlVHlwZSwgbGFuZ3VhZ2UsIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBzb3VyY2UsXG4gICAgICBkb2N1bWVudGVkPy5yZXR1cm5UeXBlPy5sb2NhdGlvbiwgbm9taW5hbE5hbWVzKX0pfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBUeXBlU2NyaXB0IHJlYWRvbmx5IGNvbnN0cnVjdG9yLXBhcmFtZXRlciByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gQWxsIG5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBTZW1hbnRpYyByZWNvcmQgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0UmVjb3JkKG5vZGUsIGRlY2xhcmF0aW9uLCByZWNvcmROYW1lcywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbXBsZW1lbnRzXyA9IFJlZmxlY3QuZ2V0KG5vZGUsIFwiaW1wbGVtZW50c1wiKVxuICBjb25zdCBtaXhpbnMgPSBSZWZsZWN0LmdldChub2RlLCBcIm1peGluc1wiKVxuXG4gIGlmICghbm9kZS5pZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImFub255bW91cyByZWNvcmQgY2xhc3NcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLnN1cGVyQ2xhc3MgfHwgKEFycmF5LmlzQXJyYXkoaW1wbGVtZW50c18pICYmIGltcGxlbWVudHNfLmxlbmd0aCkgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgUmVmbGVjdC5nZXQobm9kZSwgXCJhYnN0cmFjdFwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImRlY2xhcmVcIikgfHwgKEFycmF5LmlzQXJyYXkobWl4aW5zKSAmJiBtaXhpbnMubGVuZ3RoKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJyZWNvcmQgaW5oZXJpdGFuY2UsIGRlY29yYXRpb24sIG9yIG1vZGlmaWVyXCIsIGxvY2F0aW9uKVxuICB9XG4gIGlmIChub2RlLmJvZHkuYm9keS5sZW5ndGggIT0gMSB8fCBub2RlLmJvZHkuYm9keVswXS50eXBlICE9IFwiQ2xhc3NNZXRob2RcIikge1xuICAgIGNvbnN0IGV4dHJhID0gbm9kZS5ib2R5LmJvZHlbMV0gPz8gbm9kZS5ib2R5LmJvZHlbMF0gPz8gbm9kZS5ib2R5XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwicmVjb3JkIGNsYXNzIGJvZHkgb3V0c2lkZSBvbmUgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGV4dHJhLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5vZGUuYm9keS5ib2R5WzBdXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcblxuICBpZiAoY29uc3RydWN0b3Iua2luZCAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuY29tcHV0ZWQgfHwgY29uc3RydWN0b3Iuc3RhdGljIHx8IGNvbnN0cnVjdG9yLmFzeW5jIHx8IGNvbnN0cnVjdG9yLmdlbmVyYXRvciB8fFxuICAgIGNvbnN0cnVjdG9yLmtleS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNvbnN0cnVjdG9yLmtleS5uYW1lICE9IFwiY29uc3RydWN0b3JcIiB8fCBjb25zdHJ1Y3Rvci5kZWNvcmF0b3JzPy5sZW5ndGggfHxcbiAgICBjb25zdHJ1Y3Rvci5yZXR1cm5UeXBlIHx8IGNvbnN0cnVjdG9yLnR5cGVQYXJhbWV0ZXJzIHx8IFJlZmxlY3QuZ2V0KGNvbnN0cnVjdG9yLCBcImFjY2Vzc2liaWxpdHlcIikgfHxcbiAgICBjb25zdHJ1Y3Rvci5ib2R5LmJvZHkubGVuZ3RoICE9IDAgfHwgY29uc3RydWN0b3IuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCAhPSAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBjb25zdHJ1Y3Rvci5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIudHlwZSAhPSBcIlRTUGFyYW1ldGVyUHJvcGVydHlcIiB8fCBwYXJhbWV0ZXIucmVhZG9ubHkgIT09IHRydWUgfHwgcGFyYW1ldGVyLmFjY2Vzc2liaWxpdHkgfHwgcGFyYW1ldGVyLm92ZXJyaWRlIHx8XG4gICAgICBwYXJhbWV0ZXIucGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgcGFyYW1ldGVyLnBhcmFtZXRlci5vcHRpb25hbCB8fCBwYXJhbWV0ZXIucGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInJlY29yZCBmaWVsZCBvdXRzaWRlIHJlYWRvbmx5IHBhcmFtZXRlci1wcm9wZXJ0eSBwcm9maWxlXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXIucGFyYW1ldGVyXG4gICAgY29uc3QgZmllbGQgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRGaWVsZFwiKSxcbiAgICAgIGxvY2F0aW9uOiBmaWVsZExvY2F0aW9uLFxuICAgICAgbmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGVTY3JpcHRUeXBlKGlkZW50aWZpZXIudHlwZUFubm90YXRpb24sIGBSZWNvcmQgZmllbGQgJyR7aWRlbnRpZmllci5uYW1lfSdgLCBmaWVsZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgICByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGZpZWxkLCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IEpTRG9jIGNvbnN0cnVjdG9yL3JlYWRvbmx5LWFzc2lnbm1lbnQvZnJlZXplIHJlY29yZCBwcm9maWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gbm9kZSAtIENsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBub21pbmFsIGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVNjcmlwdFJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW1wbGVtZW50c18gPSBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIilcbiAgY29uc3QgbWl4aW5zID0gUmVmbGVjdC5nZXQobm9kZSwgXCJtaXhpbnNcIilcblxuICBpZiAoIW5vZGUuaWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJhbm9ueW1vdXMgcmVjb3JkIGNsYXNzXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5zdXBlckNsYXNzIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHwgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgKEFycmF5LmlzQXJyYXkoaW1wbGVtZW50c18pICYmIGltcGxlbWVudHNfLmxlbmd0aCkgfHwgKEFycmF5LmlzQXJyYXkobWl4aW5zKSAmJiBtaXhpbnMubGVuZ3RoKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgaW5oZXJpdGFuY2Ugb3IgZGVjb3JhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAobm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDEgfHwgbm9kZS5ib2R5LmJvZHlbMF0udHlwZSAhPSBcIkNsYXNzTWV0aG9kXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGNsYXNzIGJvZHkgb3V0c2lkZSBvbmUgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keS5ib2R5WzFdID8/IG5vZGUuYm9keS5ib2R5WzBdID8/IG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3IgPSBub2RlLmJvZHkuYm9keVswXVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKGNvbnN0cnVjdG9yLmtpbmQgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmNvbXB1dGVkIHx8IGNvbnN0cnVjdG9yLnN0YXRpYyB8fCBjb25zdHJ1Y3Rvci5hc3luYyB8fCBjb25zdHJ1Y3Rvci5nZW5lcmF0b3IgfHxcbiAgICBjb25zdHJ1Y3Rvci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3Rvci5rZXkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgY29uc3RydWN0b3IucmV0dXJuVHlwZSB8fCBjb25zdHJ1Y3Rvci50eXBlUGFyYW1ldGVycyB8fCBjb25zdHJ1Y3Rvci5ib2R5LmRpcmVjdGl2ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gY29uc3RydWN0b3IucGFyYW1zXG5cbiAgaWYgKHBhcmFtZXRlcnMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBwYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aCkpIHtcbiAgICBjb25zdCBpbnZhbGlkID0gcGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHBhcmFtZXRlci5vcHRpb25hbCB8fCBwYXJhbWV0ZXIuZGVjb3JhdG9ycz8ubGVuZ3RoKVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3IgcGFyYW1ldGVyXCIsIG5vZGVMb2NhdGlvbihpbnZhbGlkID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBkb2N1bWVudGVkID0ganNkb2NUeXBlcygvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY29uc3RydWN0b3IpKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZG9jdW1lbnRlZC5yZXR1cm5UeXBlIHx8IGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplICE9IHBhcmFtZXRlcnMubGVuZ3RoIHx8IGNvbnN0cnVjdG9yLmJvZHkuYm9keS5sZW5ndGggIT0gcGFyYW1ldGVycy5sZW5ndGggKyAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImluY29tcGxldGUgcmVjb3JkIGNvbnN0cnVjdG9yIHByb2ZpbGVcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5JZGVudGlmaWVyfSAqLyAocGFyYW1ldGVyKVxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnN0cnVjdG9yLmJvZHkuYm9keVtpbmRleF1cbiAgICBjb25zdCBkb2N1bWVudGVkVHlwZSA9IGRvY3VtZW50ZWQucGFyYW1ldGVycy5nZXQoaWRlbnRpZmllci5uYW1lKVxuXG4gICAgaWYgKCFkb2N1bWVudGVkVHlwZSB8fCBzdGF0ZW1lbnQudHlwZSAhPSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ub3BlcmF0b3IgIT0gXCI9XCIgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQuY29tcHV0ZWQgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQub2JqZWN0LnR5cGUgIT0gXCJUaGlzRXhwcmVzc2lvblwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC5wcm9wZXJ0eS5uYW1lICE9IGlkZW50aWZpZXIubmFtZSB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5yaWdodC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5yaWdodC5uYW1lICE9IGlkZW50aWZpZXIubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCByZWFkb25seUNvbW1lbnQgPSBzdGF0ZW1lbnQubGVhZGluZ0NvbW1lbnRzPy5hdCgtMSlcbiAgICBjb25zdCBnYXAgPSByZWFkb25seUNvbW1lbnQgPyBzb3VyY2Uuc2xpY2UocmVhZG9ubHlDb21tZW50LmVuZCA/PyAwLCBzdGF0ZW1lbnQuc3RhcnQgPz8gMCkgOiBcIlwiXG4gICAgY29uc3QgdGFncyA9IHJlYWRvbmx5Q29tbWVudD8udHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIHJlYWRvbmx5Q29tbWVudC52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKVxuICAgICAgPyBwYXJzZUNvbW1lbnQoYC8qJHtyZWFkb25seUNvbW1lbnQudmFsdWV9Ki9gKVswXT8udGFncyA/PyBbXVxuICAgICAgOiBbXVxuXG4gICAgaWYgKCFyZWFkb25seUNvbW1lbnQgfHwgIS9eXFxzKiQvdS50ZXN0KGdhcCkgfHwgdGFncy5sZW5ndGggIT0gMSB8fCB0YWdzWzBdLnRhZyAhPSBcInJlYWRvbmx5XCIgfHxcbiAgICAgIHRhZ3NbMF0ubmFtZSB8fCB0YWdzWzBdLnR5cGUgfHwgdGFnc1swXS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBmaWVsZCB3aXRob3V0IGV4YWN0IEByZWFkb25seSBhbm5vdGF0aW9uXCIsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGUuc291cmNlVHlwZSwgXCJqYXZhc2NyaXB0XCIsIGBSZWNvcmQgZmllbGQgJyR7aWRlbnRpZmllci5uYW1lfSdgLFxuICAgICAgICBub2RlTG9jYXRpb24oaWRlbnRpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGUubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZmllbGQsIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBjb25zdCBmcmVlemUgPSBjb25zdHJ1Y3Rvci5ib2R5LmJvZHkuYXQoLTEpXG5cbiAgaWYgKCFmcmVlemUgfHwgZnJlZXplLnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgZnJlZXplLmV4cHJlc3Npb24udHlwZSAhPSBcIkNhbGxFeHByZXNzaW9uXCIgfHwgZnJlZXplLmV4cHJlc3Npb24ub3B0aW9uYWwgfHxcbiAgICBmcmVlemUuZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoICE9IDEgfHwgZnJlZXplLmV4cHJlc3Npb24uYXJndW1lbnRzWzBdLnR5cGUgIT0gXCJUaGlzRXhwcmVzc2lvblwiIHx8XG4gICAgIWlzSmF2YVNjcmlwdFJlY29yZEZyZWV6ZShmcmVlemUuZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGNvbnN0cnVjdG9yIHdpdGhvdXQgZmluYWwgT2JqZWN0LmZyZWV6ZSh0aGlzKVwiLCBub2RlTG9jYXRpb24oZnJlZXplID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuaWQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIHRoZSBjYW5vbmljYWwgc291cmNlIGZyZWV6ZSBvciB0aGUgZ2VuZXJhdGVkIGlkZW50aWZpZXItZnJlZSBpbnRyaW5zaWMgb3duZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DYWxsRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEZpbmFsIGNvbnN0cnVjdG9yIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgY2FsbCBvd25zIHRoZSBuYXRpdmUgcmVjb3JkLWZyZWV6ZSBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGlzSmF2YVNjcmlwdFJlY29yZEZyZWV6ZShleHByZXNzaW9uKSB7XG4gIGNvbnN0IGNhbGxlZSA9IGV4cHJlc3Npb24uY2FsbGVlXG5cbiAgaWYgKGNhbGxlZS50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5jb21wdXRlZCB8fCBjYWxsZWUub3B0aW9uYWwgfHxcbiAgICBjYWxsZWUucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjYWxsZWUucHJvcGVydHkubmFtZSAhPSBcImZyZWV6ZVwiKSByZXR1cm4gZmFsc2VcbiAgaWYgKGNhbGxlZS5vYmplY3QudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGNhbGxlZS5vYmplY3QubmFtZSA9PSBcIk9iamVjdFwiXG4gIGlmIChjYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgfHwgY2FsbGVlLm9iamVjdC5jb21wdXRlZCB8fCBjYWxsZWUub2JqZWN0Lm9wdGlvbmFsIHx8XG4gICAgY2FsbGVlLm9iamVjdC5wcm9wZXJ0eS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNhbGxlZS5vYmplY3QucHJvcGVydHkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBjYWxsZWUub2JqZWN0Lm9iamVjdC50eXBlID09IFwiT2JqZWN0RXhwcmVzc2lvblwiICYmIGNhbGxlZS5vYmplY3Qub2JqZWN0LnByb3BlcnRpZXMubGVuZ3RoID09IDAgJiZcbiAgICBjYWxsZWUub2JqZWN0Lm9iamVjdC5leHRyYT8ucGFyZW50aGVzaXplZCA9PT0gdHJ1ZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBpZi9lbHNlIHRlcm1pbmFsIHNoYXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWZTdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIGdlbmVyYXRlZCBzY2FsYXIgb3V0cHV0IG1heSBjb250YWluIHNpZ25lZCB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnRlc3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBjb25zdCBjb25zZXF1ZW50Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgYWx0ZXJuYXRlQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgY29uc2VxdWVudCA9IG5vZGUuY29uc2VxdWVudC50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIlxuICAgID8gY29udmVydEJsb2NrKG5vZGUuY29uc2VxdWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29uc2VxdWVudENvbnRleHQpXG4gICAgOiBjb252ZXJ0QmxvY2soW25vZGUuY29uc2VxdWVudF0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnNlcXVlbnRDb250ZXh0LCBub2RlTG9jYXRpb24obm9kZS5jb25zZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGVcbiAgICA/IG5vZGUuYWx0ZXJuYXRlLnR5cGUgPT0gXCJCbG9ja1N0YXRlbWVudFwiXG4gICAgICA/IGNvbnZlcnRCbG9jayhub2RlLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYWx0ZXJuYXRlQ29udGV4dClcbiAgICAgIDogY29udmVydEJsb2NrKFtub2RlLmFsdGVybmF0ZV0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGFsdGVybmF0ZUNvbnRleHQsIG5vZGVMb2NhdGlvbihub2RlLmFsdGVybmF0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiB1bmRlZmluZWRcblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb24sXG4gICAgY29uc2VxdWVudCxcbiAgICBraW5kOiBcIklmU3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBibG9jay1ib2RpZWQgcHJlLWNvbmRpdGlvbiBsb29wLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuV2hpbGVTdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCB3aGlsZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIGdlbmVyYXRlZCBzY2FsYXIgb3V0cHV0IG1heSBjb250YWluIHNpZ25lZCB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5XaGlsZVN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFdoaWxlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5ib2R5LnR5cGUgIT0gXCJCbG9ja1N0YXRlbWVudFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIndoaWxlIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS50ZXN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJXaGlsZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogdG9rZW5Mb2NhdGlvbihub2RlLCBcIndoaWxlXCIsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS50ZXN0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgQmFiZWwgcGFyc2VkIGFuIG9wZXJhdGlvbiB0aGF0IG1ha2VzIGdlbmVyYXRlZCBKYXZhU2NyaXB0LWZhbWlseSBzY2FsYXIgb3V0cHV0IHJlcXVpcmUgemVybyBjYW5vbmljYWxpemF0aW9uLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIHBhcnNlciBzdWJ0cmVlLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFt2aXNpdGVkXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc3VidHJlZSBjb250YWlucyBpbnRlZ2VyIG5lZ2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uIHN5bnRheC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VyVHJlZVJlcXVpcmVzQ2Fub25pY2FsWmVybyh2YWx1ZSwgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG4gIGlmICh2aXNpdGVkLmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZVxuXG4gIHZpc2l0ZWQuYWRkKHZhbHVlKVxuICBpZiAoUmVmbGVjdC5nZXQodmFsdWUsIFwidHlwZVwiKSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIFJlZmxlY3QuZ2V0KHZhbHVlLCBcIm9wZXJhdG9yXCIpID09IFwiLVwiKSByZXR1cm4gdHJ1ZVxuICBpZiAoUmVmbGVjdC5nZXQodmFsdWUsIFwidHlwZVwiKSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJvcGVyYXRvclwiKSA9PSBcIipcIikgcmV0dXJuIHRydWVcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpLnNvbWUoKFtrZXksIGNoaWxkXSkgPT5cbiAgICAhW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpICYmXG4gICAgKEFycmF5LmlzQXJyYXkoY2hpbGQpXG4gICAgICA/IGNoaWxkLnNvbWUoKGl0ZW0pID0+IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oaXRlbSwgdmlzaXRlZCkpXG4gICAgICA6IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oY2hpbGQsIHZpc2l0ZWQpKSlcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIHRoZSBwYXJzZXItb3duZWQgcmVjZWl2ZXIgcGFyZW50aGVzZXMgZW1pdHRlZCBvbmx5IGZvciBjYW5vbmljYWwgaW50ZWdlciBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5FeHByZXNzaW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN1cGVyfSByZWNlaXZlciAtIFF1YWxpZmllZC1jYWxsIHJlY2VpdmVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2FsbEV4cHJlc3Npb259IGNhbGwgLSBPdXRlciBgdG9TdHJpbmdgIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcmVjZWl2ZXIgaGFzIHRoZSBnZW5lcmF0ZWQgd3JhcHBlciBzaGFwZS5cbiAqL1xuZnVuY3Rpb24gaGFzQ2Fub25pY2FsWmVyb1JlY2VpdmVyV3JhcHBlcihyZWNlaXZlciwgY2FsbCkge1xuICBjb25zdCBleHRyYSA9IFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCBcImV4dHJhXCIpXG4gIGNvbnN0IGV4cHJlc3Npb25QYXJlbnRoZXNlcyA9IFtcIkJpbmFyeUV4cHJlc3Npb25cIiwgXCJMb2dpY2FsRXhwcmVzc2lvblwiLCBcIlVuYXJ5RXhwcmVzc2lvblwiXS5pbmNsdWRlcyhyZWNlaXZlci50eXBlKSA/IDEgOiAwXG4gIGNvbnN0IHdyYXBwZXJQYXJlbnRoZXNlcyA9IGV4cHJlc3Npb25QYXJlbnRoZXNlcyArIDFcbiAgY29uc3QgcHJvcGVydHkgPSBjYWxsLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiID8gY2FsbC5jYWxsZWUucHJvcGVydHkgOiB1bmRlZmluZWRcblxuICByZXR1cm4gQm9vbGVhbihleHRyYSkgJiYgdHlwZW9mIGV4dHJhID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQoZXh0cmEsIFwicGFyZW50aGVzaXplZFwiKSA9PT0gdHJ1ZSAmJlxuICAgIFJlZmxlY3QuZ2V0KGV4dHJhLCBcInBhcmVuU3RhcnRcIikgPT09IGNhbGwuc3RhcnQgJiYgdHlwZW9mIGNhbGwuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgY2FsbC5lbmQgPT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiByZWNlaXZlci5zdGFydCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiByZWNlaXZlci5lbmQgPT0gXCJudW1iZXJcIiAmJiBwcm9wZXJ0eT8udHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIHR5cGVvZiBwcm9wZXJ0eS5zdGFydCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBwcm9wZXJ0eS5lbmQgPT0gXCJudW1iZXJcIiAmJiBjYWxsLmNhbGxlZS5zdGFydCA9PT0gY2FsbC5zdGFydCAmJlxuICAgIHJlY2VpdmVyLnN0YXJ0ID09IGNhbGwuc3RhcnQgKyB3cmFwcGVyUGFyZW50aGVzZXMgJiYgcHJvcGVydHkuc3RhcnQgPT0gcmVjZWl2ZXIuZW5kICsgd3JhcHBlclBhcmVudGhlc2VzICsgMSAmJlxuICAgIHByb3BlcnR5LmVuZCA9PSBwcm9wZXJ0eS5zdGFydCArIFwidG9TdHJpbmdcIi5sZW5ndGggJiYgY2FsbC5lbmQgPT0gcHJvcGVydHkuZW5kICsgMlxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29uc29sZS5sb2cgZW50cnktcG9pbnQgY2FsbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgdGhpcyBwYXJzZWQgbW9kdWxlIGNvbnRhaW5zIGEgc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaW50U3RhdGVtZW50fSBQcmludCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBub2RlLmV4cHJlc3Npb24udHlwZSAhPSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYWxsID0gbm9kZS5leHByZXNzaW9uXG4gIGNvbnN0IGNhbGxlZSA9IGNhbGwuY2FsbGVlXG5cbiAgaWYgKGNhbGxlZS50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5jb21wdXRlZCB8fCBjYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICBjYWxsZWUub2JqZWN0Lm5hbWUgIT0gXCJjb25zb2xlXCIgfHwgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT0gXCJsb2dcIiB8fFxuICAgIGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImVudHJ5LXBvaW50IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICBsZXQgYXJndW1lbnQgPSBjYWxsLmFyZ3VtZW50c1swXVxuXG4gIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgYXJndW1lbnQuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIWFyZ3VtZW50LmNhbGxlZS5jb21wdXRlZCAmJlxuICAgICFhcmd1bWVudC5jYWxsZWUub3B0aW9uYWwgJiYgYXJndW1lbnQuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBhcmd1bWVudC5jYWxsZWUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIGFyZ3VtZW50LmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09IFwidG9TdHJpbmdcIiAmJiAhYXJndW1lbnQub3B0aW9uYWwgJiYgIWFyZ3VtZW50LnR5cGVBcmd1bWVudHMgJiZcbiAgICAhYXJndW1lbnQudHlwZVBhcmFtZXRlcnMgJiYgYXJndW1lbnQuYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgaWYgKCFjYW5vbmljYWxaZXJvUmVxdWlyZWQgfHwgIWhhc0Nhbm9uaWNhbFplcm9SZWNlaXZlcldyYXBwZXIoYXJndW1lbnQuY2FsbGVlLm9iamVjdCwgYXJndW1lbnQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZW50cnktcG9pbnQgcXVhbGlmaWVkIGNhbGxcIiwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LmNhbGxlZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGFyZ3VtZW50ID0gYXJndW1lbnQuY2FsbGVlLm9iamVjdFxuICB9XG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLCBraW5kOiBcIlByaW50U3RhdGVtZW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIFBhcnNlcyBKYXZhU2NyaXB0IG9yIFR5cGVTY3JpcHQgaW50byB0aGUgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gaW5wdXQubGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IFtpbnB1dC5jYXBhYmlsaXRpZXNdIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3tpc0VudHJ5OiBib29sZWFuLCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24+LCByZWNvcmRzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIGVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCB2YWx1ZVJlY29yZHM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHQoe2NhcGFiaWxpdGllcyA9IFtdLCBmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgcHJvZ3JhbX0pIHtcbiAgY29uc3QgZmlsZSA9IHBhcnNlQmFiZWxTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlLCBzb3VyY2VUeXBlOiBwcm9ncmFtID8gXCJtb2R1bGVcIiA6IFwic2NyaXB0XCJ9KVxuICBjb25zdCB0b2tlbnMgPSBmaWxlLnRva2VucyA/PyBbXVxuICBjb25zdCB0b2tlbkluZGV4ID0ge2J5U3RhcnQ6IG5ldyBNYXAodG9rZW5zLm1hcCgodG9rZW4pID0+IFt0b2tlbi5zdGFydCwgdG9rZW5dKSksIHRva2Vuc31cbiAgY29uc3QgY2Fub25pY2FsWmVyb1JlcXVpcmVkID0gcGFyc2VyVHJlZVJlcXVpcmVzQ2Fub25pY2FsWmVybyhmaWxlLnByb2dyYW0pXG5cbiAgcmVtZW1iZXJUb2tlbnMoZmlsZSwgdG9rZW5JbmRleClcbiAgY29uc3QgbnVsbENoZWNrT3B0T3V0ID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IGZpbGUuY29tbWVudHM/LmZpbmQoKGNvbW1lbnQpID0+IGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwiQHRzLW5vY2hlY2tcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmIChudWxsQ2hlY2tPcHRPdXQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZGlzYWJsZWQgVHlwZVNjcmlwdCBjaGVja2luZyBkaXJlY3RpdmVcIiwgbG9jYXRpb25Gcm9tT2Zmc2V0cyhcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlLFxuICAgICAgbnVsbENoZWNrT3B0T3V0LnN0YXJ0ID8/IDAsXG4gICAgICBudWxsQ2hlY2tPcHRPdXQuZW5kID8/IHNvdXJjZS5sZW5ndGhcbiAgICApKVxuICB9XG4gIGlmIChmaWxlLnByb2dyYW0uZGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInRvcC1sZXZlbCBkaXJlY3RpdmVcIiwgbm9kZUxvY2F0aW9uKGZpbGUucHJvZ3JhbS5kaXJlY3RpdmVzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gKi9cbiAgbGV0IHNlbWFudGljTm9kZXMgPSBbXVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBmaWxlLnByb2dyYW0uYm9keSkge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSB7XG4gICAgICBpZiAoIXByb2dyYW0pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbXBvcnQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKCFwcm9ncmFtKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZXhwb3J0IGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGlmIChub2RlLnNvdXJjZSB8fCBub2RlLmRlY2xhcmF0aW9uICYmICFbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhub2RlLmRlY2xhcmF0aW9uLnR5cGUpKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZS1leHBvcnQgb3IgdW5zdXBwb3J0ZWQgZXhwb3J0ZWQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24pIHtcbiAgICAgICAgaWYgKCFub2RlLmRlY2xhcmF0aW9uLmxlYWRpbmdDb21tZW50cyAmJiBub2RlLmxlYWRpbmdDb21tZW50cykgbm9kZS5kZWNsYXJhdGlvbi5sZWFkaW5nQ29tbWVudHMgPSBub2RlLmxlYWRpbmdDb21tZW50c1xuICAgICAgICBzZW1hbnRpY05vZGVzLnB1c2goLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAobm9kZS5kZWNsYXJhdGlvbikpXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgc2VtYW50aWNOb2Rlcy5wdXNoKG5vZGUpXG4gIH1cbiAgc2VtYW50aWNOb2RlcyA9IHRhc2swMzRKYXZhU2NyaXB0Tm9kZXMoc2VtYW50aWNOb2RlcywgY2FwYWJpbGl0aWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2xhc3NOb2RlcyA9IHNlbWFudGljTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnR5cGUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5zdXBlckNsYXNzPy50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUuc3VwZXJDbGFzcy5uYW1lID09IFwiRXJyb3JcIilcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhub2RlKSAmJlxuICAgIG5vZGUuYm9keS5ib2R5LnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJDbGFzc1Byb3BlcnR5XCIgfHwgbWVtYmVyLnR5cGUgPT0gXCJDbGFzc1ByaXZhdGVQcm9wZXJ0eVwiKSlcbiAgY29uc3QgcmVjb3JkTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMobm9kZSkpXG4gIGNvbnN0IGVycm9yRGVjbGFyYXRpb25zID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlLmlkPy5uYW1lID8/IFwiXCJcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgICAgPyB0eXBlU2NyaXB0VHlwZVBhcmFtZXRlcnMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSAqLyAobm9kZS50eXBlUGFyYW1ldGVycyksIGlkLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBjbGFzc0pzZG9jVHlwZVBhcmFtZXRlcnMobm9kZSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiLFxuICAgICAgLi4uKHR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICAgIH1cbiAgfSlcbiAgY29uc3QgY2xhc3NEZWNsYXJhdGlvbnMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+ICh7XG4gICAgY29uc3RydWN0b3I6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ29uc3RydWN0b3JEZWNsYXJhdGlvbn0gKi8gKHt9KSxcbiAgICBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2xhc3NEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBtZXRob2RzOiBbXSwgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiXG4gIH0pKVxuICBjb25zdCByZWNvcmROYW1lcyA9IC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59ICovIChcbiAgICBuZXcgTWFwKHByb2dyYW0/LnJlY29yZHMgPz8gW10pKVxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSkgcmVjb3JkTmFtZXMuc2V0KHJlc291cmNlLm5hbWUsIHJlc291cmNlKVxuICBjb25zdCB2YWx1ZVJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSAqLyAoXG4gICAgbmV3IE1hcChwcm9ncmFtPy52YWx1ZVJlY29yZHMgPz8gcHJvZ3JhbT8ucmVjb3JkcyA/PyBbXSkpXG4gIGNvbnN0IGVycm9yTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0/LmVycm9ycyA/PyBbXSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0SmF2YVNjcmlwdEVycm9yKG5vZGUsIGVycm9yRGVjbGFyYXRpb25zW2luZGV4XSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgdmFsdWVSZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBjbGFzc0RlY2xhcmF0aW9ucykgdmFsdWVSZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGNvbnN0IHZhbHVlUmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChjbGFzc0RlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHByZWRlY2xhcmVSZWZlcmVuY2VDbGFzcyhcbiAgICBub2RlLCBjbGFzc0RlY2xhcmF0aW9uc1tpbmRleF0sIHJlY29yZE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZVxuICApKVxuICBjb25zdCBmdW5jdGlvbk5vZGVzID0gc2VtYW50aWNOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUudHlwZSA9PSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIilcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBgZnVuY3Rpb246JHtpbmRleH1gKSlcbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChbLi4ucHJvZ3JhbT8uZnVuY3Rpb25zID8/IFtdXS5tYXAoKFtsb2NhbE5hbWUsIGRlY2xhcmF0aW9uXSkgPT4gW2xvY2FsTmFtZSwge1xuICAgIGxvY2F0aW9uOiBkZWNsYXJhdGlvbi5sb2NhdGlvbixcbiAgICBuYW1lOiBsb2NhbE5hbWUsXG4gICAgbmFtZUxvY2F0aW9uOiBkZWNsYXJhdGlvbi5sb2NhdGlvbixcbiAgICBwYXJhbWV0ZXJzOiBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IGRlY2xhcmF0aW9uLnJldHVyblR5cGUsXG4gICAgLi4uKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzOiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfV0pKVxuICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe29wZXJhdGlvbnN9KSA9PiBvcGVyYXRpb25zKSkge1xuICAgIGlmICghZnVuY3Rpb25TaWduYXR1cmVzLmhhcyhvcGVyYXRpb24ubmFtZSkpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQob3BlcmF0aW9uLm5hbWUsIHtcbiAgICAgIGxvY2F0aW9uOiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IG9wZXJhdGlvbi5uYW1lLFxuICAgICAgbmFtZUxvY2F0aW9uOiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIHBhcmFtZXRlcnM6IG9wZXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiAoey4uLnBhcmFtZXRlciwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLCBsb2NhdGlvbjogbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSl9KSksXG4gICAgICByZXR1cm5UeXBlOiBvcGVyYXRpb24ucmV0dXJuVHlwZVxuICAgIH0pXG4gIH1cbiAgZm9yIChjb25zdCBzaWduYXR1cmUgb2Ygc2lnbmF0dXJlcykgZnVuY3Rpb25TaWduYXR1cmVzLnNldChzaWduYXR1cmUubmFtZSwgc2lnbmF0dXJlKVxuICBjb25zdCByZWNvcmRzID0gcmVjb3JkTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IGNvbnZlcnRUeXBlU2NyaXB0UmVjb3JkKG5vZGUsIHJlY29yZERlY2xhcmF0aW9uc1tpbmRleF0sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogY29udmVydEphdmFTY3JpcHRSZWNvcmQobm9kZSwgcmVjb3JkRGVjbGFyYXRpb25zW2luZGV4XSwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVmZXJlbmNlQ2xhc3NOb2Rlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb252ZXJ0UmVmZXJlbmNlQ2xhc3NCb2RpZXMocmVmZXJlbmNlQ2xhc3NOb2Rlc1tpbmRleF0sIGNsYXNzZXNbaW5kZXhdLCByZWNvcmROYW1lcywgdmFsdWVSZWNvcmROYW1lcyxcbiAgICAgIHZhbHVlUmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLCBmdW5jdGlvblNpZ25hdHVyZXMsIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgY2Fub25pY2FsWmVyb1JlcXVpcmVkKVxuICB9XG4gIGNvbnN0IGZ1bmN0aW9ucyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obm9kZSwgc2lnbmF0dXJlc1tpbmRleF0sIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHZhbHVlUmVjb3JkTmFtZXMsIHZhbHVlUmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCkpXG4gIGNvbnN0IGVudHJ5Tm9kZXMgPSBzZW1hbnRpY05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS50eXBlICE9IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiICYmIG5vZGUudHlwZSAhPSBcIkNsYXNzRGVjbGFyYXRpb25cIilcbiAgY29uc3QgbG9jYXRpb24gPSBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChwcm9ncmFtICYmICFwcm9ncmFtLmlzRW50cnkgJiYgZW50cnlOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInRvcC1sZXZlbCBzaWRlIGVmZmVjdCBvdXRzaWRlIHRoZSBzZWxlY3RlZCBlbnRyeSBtb2R1bGVcIiwgbm9kZUxvY2F0aW9uKGVudHJ5Tm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGVudHJ5TG9jYXRpb24gPSBlbnRyeU5vZGVzLmxlbmd0aCA9PSAwID8gbG9jYXRpb24gOiBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBlbnRyeU5vZGVzWzBdLnN0YXJ0ID8/IDAsXG4gICAgZW50cnlOb2Rlcy5hdCgtMSk/LmVuZCA/PyBzb3VyY2UubGVuZ3RoXG4gIClcbiAgY29uc3QgZW50cnlCbG9jayA9IGNvbnZlcnRCbG9jayhcbiAgICBlbnRyeU5vZGVzLFxuICAgIGxhbmd1YWdlLFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBjYW5vbmljYWxaZXJvUmVxdWlyZWQsXG4gICAge2JpbmRpbmdzOiBuZXcgTWFwKCksIGNsYXNzZXM6IGNsYXNzZXNCeUlkLCBlcnJvck5hbWVzLCBlcnJvcnM6IGVycm9yc0J5SWQsIGZ1bmN0aW9uczogZnVuY3Rpb25TaWduYXR1cmVzLFxuICAgICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0ZvcihlbnRyeU5vZGVzKSwgcmVjb3JkTmFtZXMsIHJlY29yZHM6IHZhbHVlUmVjb3Jkc0J5SWQsIHZhbHVlUmVjb3JkTmFtZXN9LFxuICAgIGVudHJ5TG9jYXRpb25cbiAgKVxuXG4gIGlmICghcHJvZ3JhbSAmJiBmdW5jdGlvbnMubGVuZ3RoID09IDAgJiYgY2FwYWJpbGl0aWVzLmxlbmd0aCA9PSAwICYmICFibG9ja1JlZmVyZW5jZXNQcm90ZWN0ZWRFbnRyeShlbnRyeUJsb2NrKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtb2R1bGUgd2l0aG91dCBhIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIHJldHVybiB7XG4gICAgZW50cnlQb2ludDoge1xuICAgICAgYm9keTogZW50cnlCbG9jayxcbiAgICAgIGtpbmQ6IFwiRW50cnlQb2ludFwiLFxuICAgICAgbG9jYXRpb246IGVudHJ5TG9jYXRpb25cbiAgICB9LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uLFxuICAgIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihjbGFzc2VzLmxlbmd0aCA+IDAgPyB7Y2xhc3Nlc30gOiB7fSksXG4gICAgLi4uKHJlY29yZHMubGVuZ3RoID4gMCA/IHtyZWNvcmRzfSA6IHt9KVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBleGFjdCBwcm90ZWN0ZWQgTm9kZSBwcm9iZSBzdXBwb3J0IGJlZm9yZSBwb3J0YWJsZSBjb252ZXJzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50W119IG5vZGVzIC0gUGFyc2VkIHRvcC1sZXZlbCBzdGF0ZW1lbnRzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50W119IFBvcnRhYmxlIHN0YXRlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRKYXZhU2NyaXB0Tm9kZXMobm9kZXMsIGNhcGFiaWxpdGllcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykpIHJldHVybiBub2Rlc1xuICBjb25zdCBmaXJzdCA9IG5vZGVzWzBdXG4gIGNvbnN0IG1hcmtlciA9IGZpcnN0Py5sZWFkaW5nQ29tbWVudHM/LnNvbWUoKGNvbW1lbnQpID0+IGNvbW1lbnQudHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmXG4gICAgY29tbWVudC52YWx1ZS50cmltKCkgPT0gXCJzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIilcblxuICBpZiAoIW1hcmtlcikgcmV0dXJuIG5vZGVzXG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgbGFuZ3VhZ2UpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24oZmlyc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGV4cGVjdGVkID0gW1xuICAgIFtcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwgXCJfX3NlbWFudGlmb2xkVGFzazAzNEZzXCJdLCBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCJdLFxuICAgIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCJdLCBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVSZWFkRmFpbHVyZVwiXSxcbiAgICBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIl0sIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCJdLFxuICAgIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZVJlc291cmNlXCJdLCBbXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiXSxcbiAgICBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVFZmZlY3RcIl0sIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZUFjcXVpcmVcIl0sXG4gICAgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlUmVhZFwiXSwgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlQ2xvc2VcIl0sIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZVRyYWNlXCJdXG4gIF1cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBkZWNsYXJhdGlvbiBuYW1lIHVzZWQgdG8gdmVyaWZ5IG9uZSBwcm90ZWN0ZWQgc3VwcG9ydCBzdGF0ZW1lbnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudCB8IHVuZGVmaW5lZH0gbm9kZSAtIENhbmRpZGF0ZSBzdGF0ZW1lbnQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IERlY2xhcmVkIG5hbWUuXG4gICAqL1xuICBjb25zdCBub2RlTmFtZSA9IChub2RlKSA9PiB7XG4gICAgaWYgKCFub2RlKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiAmJiBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggPT0gMSAmJiBub2RlLmRlY2xhcmF0aW9uc1swXS5pZC50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICByZXR1cm4gbm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQubmFtZVxuICAgIH1cbiAgICBjb25zdCBpZCA9IFJlZmxlY3QuZ2V0KG5vZGUsIFwiaWRcIilcbiAgICByZXR1cm4gaWQgJiYgdHlwZW9mIGlkID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZ2V0KGlkLCBcIm5hbWVcIikgPT0gXCJzdHJpbmdcIiA/IFJlZmxlY3QuZ2V0KGlkLCBcIm5hbWVcIikgOiB1bmRlZmluZWRcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gZXhwZWN0ZWQuZXZlcnkoKFt0eXBlLCBuYW1lXSwgaW5kZXgpID0+IG5vZGVzW2luZGV4XT8udHlwZSA9PSB0eXBlICYmIG5vZGVOYW1lKG5vZGVzW2luZGV4XSkgPT0gbmFtZSlcbiAgY29uc3QgbmV4dCA9IG5vZGVzW2V4cGVjdGVkLmxlbmd0aF1cbiAgY29uc3QgZW5kZWQgPSBuZXh0Py5sZWFkaW5nQ29tbWVudHM/LnNvbWUoKGNvbW1lbnQpID0+IGNvbW1lbnQudHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmXG4gICAgY29tbWVudC52YWx1ZS50cmltKCkgPT0gXCJzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtZW5kXCIpXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5leHQgJiYgIWVuZGVkKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24oZmlyc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBub2Rlcy5zbGljZShleHBlY3RlZC5sZW5ndGgpXG59XG5cbi8qKlxuICogSW52b2tlcyBCYWJlbCBhbmQgbm9ybWFsaXplcyBzeW50YXggZmFpbHVyZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGlucHV0Lmxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge1wibW9kdWxlXCIgfCBcInNjcmlwdFwifSBpbnB1dC5zb3VyY2VUeXBlIC0gRXhwbGljaXQgcGFyc2VyIGdvYWwuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3BhcnNlclwiKS5QYXJzZVJlc3VsdDxpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRmlsZT59IEJhYmVsIGZpbGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQmFiZWxTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlLCBzb3VyY2VUeXBlfSkge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZUJhYmVsKHNvdXJjZSwge1xuICAgICAgYWxsb3dBd2FpdE91dHNpZGVGdW5jdGlvbjogdHJ1ZSxcbiAgICAgIHBsdWdpbnM6IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gW1wiZGVjb3JhdG9ycy1sZWdhY3lcIiwgXCJ0eXBlc2NyaXB0XCJdIDogW1wiZGVjb3JhdG9ycy1sZWdhY3lcIl0sXG4gICAgICBzb3VyY2VGaWxlbmFtZTogZmlsZW5hbWUsXG4gICAgICBzb3VyY2VUeXBlLFxuICAgICAgdG9rZW5zOiB0cnVlXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcGFyc2VGYWlsdXJlKGxhbmd1YWdlLCBlcnJvciwgYmFiZWxQYXJzZXJGYWlsdXJlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgb25seSBwYXJzZXItb3duZWQgRVNNIGltcG9ydC9leHBvcnQgZGVjbGFyYXRpb25zIGZvciBwcm9ncmFtIGFzc2VtYmx5LlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBpbnB1dC5sYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge3tpbXBvcnRzOiB7ZGVjbGFyYXRpb25Mb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGltcG9ydGVkTmFtZTogc3RyaW5nLCBpbXBvcnRlZE5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhbE5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGF0aExvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc3BlY2lmaWVyOiBzdHJpbmcsIHN0ZGxpYkNhbmRpZGF0ZT86IHRydWUsIHR5cGVPbmx5OiBib29sZWFufVtdLCBleHBvcnRzOiB7ZGVjbGFyYXRpb25Mb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBleHBvcnRlZE5hbWU6IHN0cmluZywgZXhwb3J0ZWROYW1lTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2FsTmFtZUxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGJvb2xlYW59W119fSBQYXJzZXItb3duZWQgRVNNIG1vZHVsZSBoZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0SmF2YVNjcmlwdFR5cGVTY3JpcHRNb2R1bGUoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlfSkge1xuICBjb25zdCBmaWxlID0gcGFyc2VCYWJlbFNvdXJjZSh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2UsIHNvdXJjZVR5cGU6IFwibW9kdWxlXCJ9KVxuICBjb25zdCB0b2tlbnMgPSBmaWxlLnRva2VucyA/PyBbXVxuXG4gIHJlbWVtYmVyVG9rZW5zKGZpbGUsIHtieVN0YXJ0OiBuZXcgTWFwKHRva2Vucy5tYXAoKHRva2VuKSA9PiBbdG9rZW4uc3RhcnQsIHRva2VuXSkpLCB0b2tlbnN9KVxuICBjb25zdCBjb21tb25KcyA9IGZpbmRDb21tb25Kc05vZGUoZmlsZS5wcm9ncmFtKVxuXG4gIGlmIChjb21tb25KcykgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiQ29tbW9uSlMgcmVxdWlyZS9tb2R1bGUgZXhwb3J0c1wiLCBub2RlTG9jYXRpb24oY29tbW9uSnMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBpbXBvcnRzID0gW11cbiAgY29uc3QgZXhwb3J0cyA9IFtdXG5cbiAgZm9yIChjb25zdCBub2RlIG9mIGZpbGUucHJvZ3JhbS5ib2R5KSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkltcG9ydERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHJlbGF0aXZlID0gbm9kZS5zb3VyY2UudmFsdWUuc3RhcnRzV2l0aChcIi4vXCIpIHx8IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCIuLi9cIilcbiAgICAgIGNvbnN0IHN0ZGxpYkNhbmRpZGF0ZSA9IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCJzZW1hbnRpZm9sZDpcIikgfHwgbm9kZS5zb3VyY2UudmFsdWUuc3RhcnRzV2l0aChcIm5vZGU6XCIpXG5cbiAgICAgIGlmICghcmVsYXRpdmUgJiYgIXN0ZGxpYkNhbmRpZGF0ZSkge1xuICAgICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJiYXJlIHBhY2thZ2UgaW1wb3J0XCIsIG5vZGVMb2NhdGlvbihub2RlLnNvdXJjZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5zcGVjaWZpZXJzLmxlbmd0aCA9PSAwKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzaWRlLWVmZmVjdC1vbmx5IGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoKG5vZGUuYXR0cmlidXRlcz8ubGVuZ3RoID8/IDApID4gMCB8fCAobm9kZS5hc3NlcnRpb25zPy5sZW5ndGggPz8gMCkgPiAwIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwicGhhc2VcIikpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW1wb3J0IGF0dHJpYnV0ZXMgb3IgcGhhc2VcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2Ygbm9kZS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSAhPSBcIkltcG9ydFNwZWNpZmllclwiIHx8IHNwZWNpZmllci5pbXBvcnRlZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIHNwZWNpZmllci50eXBlLCBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnB1c2goe1xuICAgICAgICAgIGRlY2xhcmF0aW9uTG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBpbXBvcnRlZE5hbWU6IHNwZWNpZmllci5pbXBvcnRlZC5uYW1lLFxuICAgICAgICAgIGltcG9ydGVkTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oc3BlY2lmaWVyLmltcG9ydGVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBsb2NhbE5hbWU6IHNwZWNpZmllci5sb2NhbC5uYW1lLFxuICAgICAgICAgIGxvY2FsTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oc3BlY2lmaWVyLmxvY2FsLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHNwZWNpZmllcjogbm9kZS5zb3VyY2UudmFsdWUsXG4gICAgICAgICAgLi4uKCFyZWxhdGl2ZSA/IHtzdGRsaWJDYW5kaWRhdGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovICh0cnVlKX0gOiB7fSksXG4gICAgICAgICAgdHlwZU9ubHk6IG5vZGUuaW1wb3J0S2luZCA9PSBcInR5cGVcIiB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PSBcInR5cGVcIlxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiIHx8IG5vZGUudHlwZSA9PSBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSAhPSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIikgY29udGludWVcbiAgICBpZiAobm9kZS5zb3VyY2UpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInJlLWV4cG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKG5vZGUuZXhwb3J0S2luZCA9PSBcInR5cGVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHlwZS1vbmx5IGV4cG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKG5vZGUuZGVjbGFyYXRpb24pIHtcbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uLnR5cGUgIT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgJiYgbm9kZS5kZWNsYXJhdGlvbi50eXBlICE9IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInVuc3VwcG9ydGVkIGV4cG9ydGVkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLmRlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBub2RlLmRlY2xhcmF0aW9uLmlkXG5cbiAgICAgIGlmICghaWRlbnRpZmllcikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYW5vbnltb3VzIGV4cG9ydGVkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLmRlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGV4cG9ydHMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uTG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgZXhwb3J0ZWROYW1lOiBpZGVudGlmaWVyLm5hbWUsXG4gICAgICAgIGV4cG9ydGVkTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oaWRlbnRpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGxvY2FsTmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgICBsb2NhbE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgICAgfSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIG5vZGUuc3BlY2lmaWVycykge1xuICAgICAgaWYgKHNwZWNpZmllci50eXBlICE9IFwiRXhwb3J0U3BlY2lmaWVyXCIgfHwgc3BlY2lmaWVyLmxvY2FsLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIHNwZWNpZmllci50eXBlLCBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0S2luZCA9PSBcInR5cGVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHlwZS1vbmx5IGV4cG9ydFwiLCBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGV4cG9ydHMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uTG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgZXhwb3J0ZWROYW1lOiBzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSxcbiAgICAgICAgZXhwb3J0ZWROYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihzcGVjaWZpZXIuZXhwb3J0ZWQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhbE5hbWU6IHNwZWNpZmllci5sb2NhbC5uYW1lLFxuICAgICAgICBsb2NhbE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5sb2NhbCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHluYW1pYyA9IGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZShmaWxlLnByb2dyYW0sIFwiZHluYW1pY1wiLCBuZXcgU2V0KCkpXG5cbiAgaWYgKGR5bmFtaWMpIGZhY2FkZUZyb250ZW5kRmFpbHVyZShsYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX0RZTkFNSUNfUkVGRVJFTkNFXCIsXG4gICAgXCJEeW5hbWljIGltcG9ydCBjYW5ub3QgcHJvdmUgYSBzdGFuZGFyZC1saWJyYXJ5IGZhY2FkZSBpZGVudGl0eS5cIiwgbm9kZUxvY2F0aW9uKGR5bmFtaWMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBzdGRsaWJCaW5kaW5ncyA9IG5ldyBTZXQoaW1wb3J0cy5maWx0ZXIoKHtzdGRsaWJDYW5kaWRhdGV9KSA9PiBzdGRsaWJDYW5kaWRhdGUpLm1hcCgoe2xvY2FsTmFtZX0pID0+IGxvY2FsTmFtZSkpXG5cbiAgaWYgKHN0ZGxpYkJpbmRpbmdzLnNpemUgPiAwKSB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoZmlsZS5wcm9ncmFtLCBcIm11dGF0aW9uXCIsIHN0ZGxpYkJpbmRpbmdzKVxuXG4gICAgaWYgKG11dGF0aW9uKSBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9TSEFET1dFRFwiLFxuICAgICAgXCJBIHBhcnNlci1wcm92ZWQgc3RhbmRhcmQtbGlicmFyeSBmYWNhZGUgYmluZGluZyBjYW5ub3QgYmUgcmVhc3NpZ25lZCBvciBzaGFkb3dlZC5cIiwgbm9kZUxvY2F0aW9uKG11dGF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCByZWZsZWN0aW9uID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGZpbGUucHJvZ3JhbSwgXCJyZWZsZWN0aW9uXCIsIHN0ZGxpYkJpbmRpbmdzKVxuXG4gICAgaWYgKHJlZmxlY3Rpb24pIGZhY2FkZUZyb250ZW5kRmFpbHVyZShsYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX1JFRkxFQ1RJT05fVU5TVVBQT1JURURcIixcbiAgICAgIFwiUmVmbGVjdGl2ZSBsb29rdXAgY2Fubm90IHByZXNlcnZlIGEgcHJvdmVkIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIHN5bWJvbCBpZGVudGl0eS5cIiwgbm9kZUxvY2F0aW9uKHJlZmxlY3Rpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtleHBvcnRzLCBpbXBvcnRzfVxufVxuXG4vKipcbiAqIEZpbmRzIHBhcnNlci1vd25lZCBkeW5hbWljLCBtdXRhdGluZywgb3IgcmVmbGVjdGl2ZSBjb25zdHJ1Y3RzIHJlbGV2YW50IHRvIGZhY2FkZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBCYWJlbCBzdWJ0cmVlLlxuICogQHBhcmFtIHtcImR5bmFtaWNcIiB8IFwibXV0YXRpb25cIiB8IFwicmVmbGVjdGlvblwifSBtb2RlIC0gUmVqZWN0ZWQgY29uc3RydWN0IGNsYXNzLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gYmluZGluZ3MgLSBQYXJzZXItcHJvdmVkIG5hdGl2ZSBmYWNhZGUgYmluZGluZ3MuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gQ3ljbGUgZ3VhcmQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGUgfCB1bmRlZmluZWR9IEZpcnN0IHJlamVjdGVkIHBhcnNlciBub2RlLlxuICovXG5mdW5jdGlvbiBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUodmFsdWUsIG1vZGUsIGJpbmRpbmdzLCBzZWVuID0gbmV3IFdlYWtTZXQoKSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBzZWVuLmFkZCh2YWx1ZSlcbiAgY29uc3Qgbm9kZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcblxuICBpZiAobW9kZSA9PSBcImR5bmFtaWNcIiAmJiBub2RlLnR5cGUgPT0gXCJJbXBvcnRFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBzb3VyY2VOb2RlID0gbm9kZS5zb3VyY2VcblxuICAgIGlmIChpc0ZhY2FkZU1vZHVsZVN0cmluZ05vZGUoc291cmNlTm9kZSkpIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgaWYgKG1vZGUgPT0gXCJkeW5hbWljXCIgJiYgbm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZSAmJiB0eXBlb2Ygbm9kZS5jYWxsZWUgPT0gXCJvYmplY3RcIiAmJlxuICAgIFJlZmxlY3QuZ2V0KG5vZGUuY2FsbGVlLCBcInR5cGVcIikgPT0gXCJJbXBvcnRcIikge1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBBcnJheS5pc0FycmF5KG5vZGUuYXJndW1lbnRzKSA/IG5vZGUuYXJndW1lbnRzIDogW11cblxuICAgIGlmIChpc0ZhY2FkZU1vZHVsZVN0cmluZ05vZGUoYXJndW1lbnRzX1swXSkpIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgaWYgKG1vZGUgPT0gXCJyZWZsZWN0aW9uXCIgJiYgbm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZSAmJiB0eXBlb2Ygbm9kZS5jYWxsZWUgPT0gXCJvYmplY3RcIiAmJlxuICAgIFJlZmxlY3QuZ2V0KG5vZGUuY2FsbGVlLCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIgJiYgUmVmbGVjdC5nZXQobm9kZS5jYWxsZWUsIFwibmFtZVwiKSA9PSBcImV2YWxcIikge1xuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgaWYgKG1vZGUgPT0gXCJtdXRhdGlvblwiICYmIChub2RlLnR5cGUgPT0gXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiIHx8IG5vZGUudHlwZSA9PSBcIlVwZGF0ZUV4cHJlc3Npb25cIikpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBub2RlLnR5cGUgPT0gXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiID8gbm9kZS5sZWZ0IDogbm9kZS5hcmd1bWVudFxuXG4gICAgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQodGFyZ2V0LCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIGJpbmRpbmdzLmhhcyhTdHJpbmcoUmVmbGVjdC5nZXQodGFyZ2V0LCBcIm5hbWVcIikpKSkgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICh2YWx1ZSlcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlKSkge1xuICAgIGlmIChbXCJleHRyYVwiLCBcImlubmVyQ29tbWVudHNcIiwgXCJsZWFkaW5nQ29tbWVudHNcIiwgXCJsb2NcIiwgXCJ0cmFpbGluZ0NvbW1lbnRzXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoaXRlbSwgbW9kZSwgYmluZGluZ3MsIHNlZW4pXG5cbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm91bmQgPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoY2hpbGQsIG1vZGUsIGJpbmRpbmdzLCBzZWVuKVxuXG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ2hlY2tzIGEgQmFiZWwgc3RyaW5nIGxpdGVyYWwgZm9yIG9uZSBjYXRhbG9nLXN0eWxlIHN0ZGxpYiBtb2R1bGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQmFiZWwgaW1wb3J0IGFyZ3VtZW50L3NvdXJjZSBub2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGV4YWN0IGxpdGVyYWwgaXMgYSBmYWNhZGUgbW9kdWxlIGNhbmRpZGF0ZS5cbiAqL1xuZnVuY3Rpb24gaXNGYWNhZGVNb2R1bGVTdHJpbmdOb2RlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBsaXRlcmFsID0gbm9kZS52YWx1ZVxuXG4gIHJldHVybiBub2RlLnR5cGUgPT0gXCJTdHJpbmdMaXRlcmFsXCIgJiYgdHlwZW9mIGxpdGVyYWwgPT0gXCJzdHJpbmdcIiAmJlxuICAgIChsaXRlcmFsLnN0YXJ0c1dpdGgoXCJzZW1hbnRpZm9sZDpcIikgfHwgbGl0ZXJhbC5zdGFydHNXaXRoKFwibm9kZTpcIikpXG59XG5cbi8qKlxuICogVGhyb3dzIG9uZSBzdGFibGUgbG9jYXRlZCBmYWNhZGUgZnJvbnRlbmQgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSAtIFN0YWJsZSBkaWFnbm9zdGljIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIERpYWdub3N0aWMgZGV0YWlsLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBQYXJzZXItb3duZWQgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIGZhY2FkZUZyb250ZW5kRmFpbHVyZShsYW5ndWFnZSwgY29kZSwgbWVzc2FnZSwgbG9jYXRpb24pIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBtZXNzYWdlfSlcbn1cblxuLyoqXG4gKiBGaW5kcyBDb21tb25KUyBjb25zdHJ1Y3RzIHRocm91Z2ggQmFiZWwgbm9kZXMgcmF0aGVyIHRoYW4gc291cmNlLXRleHQgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQmFiZWwgc3VidHJlZS5cbiAqIEBwYXJhbSB7V2Vha1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBDeWNsZSBndWFyZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZSB8IHVuZGVmaW5lZH0gVW5zdXBwb3J0ZWQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZmluZENvbW1vbkpzTm9kZSh2YWx1ZSwgc2VlbiA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWRcbiAgc2Vlbi5hZGQodmFsdWUpXG4gIGNvbnN0IG5vZGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjYWxsZWUgPSBub2RlLmNhbGxlZVxuXG4gICAgaWYgKGNhbGxlZSAmJiB0eXBlb2YgY2FsbGVlID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQoY2FsbGVlLCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIgJiYgUmVmbGVjdC5nZXQoY2FsbGVlLCBcIm5hbWVcIikgPT0gXCJyZXF1aXJlXCIpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gICAgfVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBvYmplY3QgPSBub2RlLm9iamVjdFxuXG4gICAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQob2JqZWN0LCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIFtcImV4cG9ydHNcIiwgXCJtb2R1bGVcIl0uaW5jbHVkZXMoU3RyaW5nKFJlZmxlY3QuZ2V0KG9iamVjdCwgXCJuYW1lXCIpKSkpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgaWYgKFtcImV4dHJhXCIsIFwiaW5uZXJDb21tZW50c1wiLCBcImxlYWRpbmdDb21tZW50c1wiLCBcImxvY1wiLCBcInRyYWlsaW5nQ29tbWVudHNcIl0uaW5jbHVkZXMoa2V5KSkgY29udGludWVcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRDb21tb25Kc05vZGUoaXRlbSwgc2VlbilcblxuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRDb21tb25Kc05vZGUoY2hpbGQsIHNlZW4pXG5cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgQmFiZWwncyB6ZXJvLWJhc2VkIFVURi0xNiBmYWlsdXJlIG9mZnNldCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBOYXRpdmUgQmFiZWwgcGFyc2VyIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gUmVxdWVzdGVkIHNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEZhaWx1cmUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIGJhYmVsUGFyc2VyRmFpbHVyZUxvY2F0aW9uKGVycm9yLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9IFwib2JqZWN0XCIpIHJldHVybiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkaXJlY3QgPSBSZWZsZWN0LmdldChlcnJvciwgXCJwb3NcIilcbiAgY29uc3QgcGFyc2VyTG9jYXRpb24gPSBSZWZsZWN0LmdldChlcnJvciwgXCJsb2NcIilcbiAgY29uc3QgbG9jYXRlZCA9IHBhcnNlckxvY2F0aW9uICYmIHR5cGVvZiBwYXJzZXJMb2NhdGlvbiA9PSBcIm9iamVjdFwiID8gUmVmbGVjdC5nZXQocGFyc2VyTG9jYXRpb24sIFwiaW5kZXhcIikgOiB1bmRlZmluZWRcbiAgY29uc3Qgb2Zmc2V0ID0gTnVtYmVyLmlzU2FmZUludGVnZXIoZGlyZWN0KSA/IGRpcmVjdCA6IGxvY2F0ZWRcblxuICBpZiAodHlwZW9mIG9mZnNldCAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihvZmZzZXQpIHx8IG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gc291cmNlLmxlbmd0aCkge1xuICAgIHJldHVybiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgb2Zmc2V0LCBNYXRoLm1pbihvZmZzZXQgKyAxLCBzb3VyY2UubGVuZ3RoKSlcbn1cblxuLyoqXG4gKiBBc3NvY2lhdGVzIEJhYmVsIG5vZGVzIHdpdGggdGhlaXIgcGFyc2VyIHRva2VuIHN0cmVhbSB3aXRob3V0IGxlYWtpbmcgaXQgaW50byBzZW1hbnRpYyB2YWx1ZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWUgLSBDdXJyZW50IHBhcnNlciB2YWx1ZS5cbiAqIEBwYXJhbSB7QmFiZWxUb2tlbkluZGV4fSB0b2tlbnMgLSBJbmRleGVkIHBhcnNlciB0b2tlbnMuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gW3Zpc2l0ZWRdIC0gQ3ljbGUgcHJvdGVjdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZW1lbWJlclRva2Vucyh2YWx1ZSwgdG9rZW5zLCB2aXNpdGVkID0gbmV3IFdlYWtTZXQoKSkge1xuICBpZiAodmlzaXRlZC5oYXModmFsdWUpKSByZXR1cm5cblxuICB2aXNpdGVkLmFkZCh2YWx1ZSlcbiAgbm9kZVRva2Vucy5zZXQodmFsdWUsIHRva2VucylcblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09IFwib2JqZWN0XCIpIHJlbWVtYmVyVG9rZW5zKGl0ZW0sIHRva2VucywgdmlzaXRlZClcbiAgICB9IGVsc2UgaWYgKGNoaWxkICYmIHR5cGVvZiBjaGlsZCA9PSBcIm9iamVjdFwiKSByZW1lbWJlclRva2VucyhjaGlsZCwgdG9rZW5zLCB2aXNpdGVkKVxuICB9XG59XG4iXX0=
|