jiuyiUniapp/jiuyi/node_modules/unplugin-vue2-script-setup/dist/nuxt.mjs

923 lines
131 KiB
JavaScript

import defu from 'defu';
import { createUnplugin } from 'unplugin';
import { createFilter } from '@rollup/pluginutils';
import MagicString from 'magic-string';
import { shouldTransform as shouldTransform$1, transformAST, transform as transform$1 } from '@vue/reactivity-transform';
import { partition, notNullish, uniq } from '@antfu/utils';
import { baseParse } from '@vue/compiler-core';
import { parserOptions } from '@vue/compiler-dom';
import { capitalize, camelize } from '@vue/shared';
import * as babel from '@babel/core';
import { parse, parseExpression } from '@babel/parser';
import g from '@babel/generator';
import * as babel_traverse from '@babel/traverse';
var _a, _b, _c;
const t = (babel.default || babel).types;
const generate = g.default || g;
const traverse = (_c = (_b = (_a = babel_traverse == null ? void 0 : babel_traverse.default) == null ? void 0 : _a.default) != null ? _b : babel_traverse == null ? void 0 : babel_traverse.default) != null ? _c : babel_traverse;
function getIdentifierDeclarations(nodes) {
let result;
let programScopeUid;
traverse(t.file(t.program(nodes)), {
Program(path) {
result = new Set(Object.keys(path.scope.bindings));
programScopeUid = path.scope.uid;
},
// FIXME: babel bug, temporary add TSEnumDeclaration and TSModuleDeclaration logic
TSEnumDeclaration(path) {
if (path.scope.uid === programScopeUid)
result.add(path.node.id.name);
},
TSModuleDeclaration(path) {
if (path.scope.uid === programScopeUid) {
const id = path.node.id;
if (id.type === "Identifier")
result.add(id.name);
}
}
});
return Array.from(result);
}
function getFileGlobals(result) {
let globals;
let programScopeUid;
traverse(result, {
Program(path) {
globals = new Set(Object.keys(path.scope.globals));
programScopeUid = path.scope.uid;
},
// FIXME: babel bug, temporary add TSEnumDeclaration and TSModuleDeclaration logic
TSEnumDeclaration(path) {
if (path.scope.uid === programScopeUid)
globals.delete(path.node.id.name);
},
TSModuleDeclaration(path) {
if (path.scope.uid === programScopeUid) {
const id = path.node.id;
if (id.type === "Identifier")
globals.delete(id.name);
}
}
});
return Array.from(globals);
}
const pascalize = (str) => capitalize(camelize(str));
function exhaustiveCheckReturnUndefined(_param) {
return void 0;
}
var NodeTypes;
((NodeTypes2) => {
NodeTypes2.ROOT = 0;
NodeTypes2.ELEMENT = 1;
NodeTypes2.TEXT = 2;
NodeTypes2.COMMENT = 3;
NodeTypes2.SIMPLE_EXPRESSION = 4;
NodeTypes2.INTERPOLATION = 5;
NodeTypes2.ATTRIBUTE = 6;
NodeTypes2.DIRECTIVE = 7;
NodeTypes2.COMPOUND_EXPRESSION = 8;
NodeTypes2.IF = 9;
NodeTypes2.IF_BRANCH = 10;
NodeTypes2.FOR = 11;
NodeTypes2.TEXT_CALL = 12;
NodeTypes2.VNODE_CALL = 13;
NodeTypes2.JS_CALL_EXPRESSION = 14;
NodeTypes2.JS_OBJECT_EXPRESSION = 15;
NodeTypes2.JS_PROPERTY = 16;
NodeTypes2.JS_ARRAY_EXPRESSION = 17;
NodeTypes2.JS_FUNCTION_EXPRESSION = 18;
NodeTypes2.JS_CONDITIONAL_EXPRESSION = 19;
NodeTypes2.JS_CACHE_EXPRESSION = 20;
NodeTypes2.JS_BLOCK_STATEMENT = 21;
NodeTypes2.JS_TEMPLATE_LITERAL = 22;
NodeTypes2.JS_IF_STATEMENT = 23;
NodeTypes2.JS_ASSIGNMENT_EXPRESSION = 24;
NodeTypes2.JS_SEQUENCE_EXPRESSION = 25;
NodeTypes2.JS_RETURN_STATEMENT = 26;
})(NodeTypes || (NodeTypes = {}));
var ElementTypes;
((ElementTypes2) => {
ElementTypes2.ELEMENT = 0;
ElementTypes2.COMPONENT = 1;
ElementTypes2.SLOT = 2;
ElementTypes2.TEMPLATE = 3;
})(ElementTypes || (ElementTypes = {}));
const BUILD_IN_DIRECTIVES = /* @__PURE__ */ new Set([
"if",
"else",
"else-if",
"for",
"once",
"model",
"on",
"bind",
"slot",
"slot-scope",
"key",
"ref",
"text",
"html",
"show",
"pre",
"cloak"
// 'el',
// 'ref',
]);
function getComponents(node) {
var _a;
const current = node.type === NodeTypes.ELEMENT && node.tagType === ElementTypes.COMPONENT ? [node.tag] : node.type === NodeTypes.ELEMENT && node.tagType === ElementTypes.ELEMENT ? [node.tag] : [];
const children = node.type === NodeTypes.IF ? node.branches : node.type === NodeTypes.ELEMENT || node.type === NodeTypes.IF_BRANCH || node.type === NodeTypes.FOR ? node.children : node.type === NodeTypes.TEXT || node.type === NodeTypes.COMMENT || node.type === NodeTypes.COMPOUND_EXPRESSION || node.type === NodeTypes.TEXT_CALL || node.type === NodeTypes.INTERPOLATION ? [] : (_a = exhaustiveCheckReturnUndefined()) != null ? _a : [];
return [...current, ...children.flatMap(getComponents)];
}
function getDirectiveNames(node) {
if (node.type === NodeTypes.ELEMENT) {
const directives = node.props.flatMap(
(x) => x.type === NodeTypes.DIRECTIVE ? [x.name] : []
);
return [...directives, ...node.children.flatMap(getDirectiveNames)];
} else if (node.type === NodeTypes.IF) {
return node.branches.flatMap(getDirectiveNames);
} else if (node.type === NodeTypes.IF_BRANCH || node.type === NodeTypes.FOR) {
return node.children.flatMap(getDirectiveNames);
} else if (node.type === NodeTypes.INTERPOLATION || node.type === NodeTypes.COMPOUND_EXPRESSION || node.type === NodeTypes.TEXT || node.type === NodeTypes.COMMENT || node.type === NodeTypes.TEXT_CALL) {
return [];
} else {
return [];
}
}
function getFreeVariablesForText(input) {
const inputWithPrefix = input.trimStart()[0] === "{" ? `(${input})` : input;
return getFileGlobals(parse(inputWithPrefix));
}
function getFreeVariablesForPropsNode(node) {
if (node.type === NodeTypes.DIRECTIVE) {
const arg = node.arg === void 0 ? [] : getFreeVariablesForNode(node.arg);
const exp = node.exp === void 0 ? [] : getFreeVariablesForNode(node.exp);
return [...arg, ...exp];
}
return [];
}
function getFreeVariablesForNode(node) {
var _a, _b, _c;
if (node.type === NodeTypes.SIMPLE_EXPRESSION) {
return node.isStatic ? [] : getFreeVariablesForText(node.content);
} else if (node.type === NodeTypes.COMPOUND_EXPRESSION) {
return node.children.flatMap(
(x) => typeof x !== "object" ? [] : getFreeVariablesForNode(x)
);
} else if (node.type === NodeTypes.INTERPOLATION) {
return getFreeVariablesForNode(node.content);
} else if (node.type === NodeTypes.ELEMENT) {
const children = node.children.flatMap(getFreeVariablesForNode);
const directiveProps = node.props.flatMap(
(x) => x.type === NodeTypes.DIRECTIVE ? [x] : []
);
const attributeProps = node.props.flatMap(
(x) => x.type === NodeTypes.ATTRIBUTE ? [x] : []
);
const refNode = attributeProps.find(
(node2) => node2.name === "ref" && node2.value !== void 0
);
const refIdentifier = (_a = refNode == null ? void 0 : refNode.value) == null ? void 0 : _a.content;
const vSlotNode = directiveProps.find((node2) => node2.name === "slot");
const vSlotArgIdentifiers = (vSlotNode == null ? void 0 : vSlotNode.arg) === void 0 ? [] : getFreeVariablesForNode(vSlotNode.arg);
const vSlotExpVariableShadowingIdentifiers = [];
const vForNode = directiveProps.find((node2) => node2.name === "for");
const vForIdentifiers = ((_b = vForNode == null ? void 0 : vForNode.exp) == null ? void 0 : _b.type) === NodeTypes.SIMPLE_EXPRESSION ? getFreeVariablesForText(
vForNode.exp.content.replace(/^.*\s(?:in|of)\s/, "")
) : [];
const vForExpVariableShadowingIdentifiers = [];
const props = directiveProps.filter(({ name }) => name !== "slot" && name !== "for").flatMap(getFreeVariablesForPropsNode);
const shadowingIdentifiers = /* @__PURE__ */ new Set([
...vSlotExpVariableShadowingIdentifiers,
...vForExpVariableShadowingIdentifiers
]);
return [
...vSlotArgIdentifiers,
refIdentifier,
...vForIdentifiers,
...[...children, ...props].filter((x) => !shadowingIdentifiers.has(x))
].filter(notNullish);
} else if (node.type === NodeTypes.FOR) {
return [node.source, ...node.children].flatMap(getFreeVariablesForNode);
} else if (node.type === NodeTypes.IF) {
return ((_c = node.branches) != null ? _c : []).flatMap(getFreeVariablesForNode);
} else if (node.type === NodeTypes.IF_BRANCH) {
return [node.condition, ...node.children].filter(notNullish).flatMap(getFreeVariablesForNode);
} else if (node.type === NodeTypes.TEXT || node.type === NodeTypes.COMMENT || node.type === NodeTypes.TEXT_CALL) {
return [];
} else {
return [];
}
}
function findReferencesForSFC(templateNode) {
var _a, _b, _c;
const components = (_a = templateNode == null ? void 0 : templateNode.children.flatMap(getComponents)) != null ? _a : [];
const directives = (_b = templateNode == null ? void 0 : templateNode.children.flatMap(getDirectiveNames)) != null ? _b : [];
const identifiers = (_c = templateNode == null ? void 0 : templateNode.children.flatMap(getFreeVariablesForNode)) != null ? _c : [];
return {
components,
directives,
identifiers
};
}
function getBabelParserOptions(lang) {
lang = lang || "js";
const pluginsDict = {
js: [],
ts: ["typescript"],
jsx: ["jsx"],
tsx: ["jsx", "typescript"]
};
const plugins = pluginsDict[lang];
if (plugins === void 0)
throw new SyntaxError(`Unsupported script language: ${lang}`);
return {
sourceType: "module",
plugins
};
}
async function parseSFC(code, id, options) {
var _a, _b, _c;
const elementChildren = baseParse(code, parserOptions).children.flatMap(
(x) => x.type === NodeTypes.ELEMENT && x.tagType === ElementTypes.ELEMENT ? [x] : []
);
const templateNode = elementChildren.find((x) => x.tag === "template");
const [scriptSetupChildNodes, scriptChildNodes] = partition(
elementChildren.filter((x) => x.tag === "script"),
(x) => x.props.some((p) => p.type === NodeTypes.ATTRIBUTE && p.name === "setup")
);
const getScriptTagMeta = (n, astTransforms = (x) => x) => {
var _a2, _b2, _c2, _d, _e, _f;
if (n === void 0) {
const content2 = "";
const ast2 = parse(content2, {
sourceType: "module",
plugins: []
}).program;
return {
start: 0,
end: 0,
contentStart: 0,
contentEnd: 0,
content: content2,
attrs: {},
found: false,
ast: ast2
};
}
const attrs = Object.fromEntries(
n.props.flatMap(
(x) => {
var _a3;
return !(x.type === NodeTypes.ATTRIBUTE && typeof ((_a3 = x.value) == null ? void 0 : _a3.content) === "string") ? [] : [[x.name, x.value.content]];
}
)
);
const content = (_b2 = (_a2 = n.children[0]) == null ? void 0 : _a2.loc.source) != null ? _b2 : "";
const contentStart = (_d = (_c2 = n.children[0]) == null ? void 0 : _c2.loc.start.offset) != null ? _d : 0;
const contentEnd = (_f = (_e = n.children[0]) == null ? void 0 : _e.loc.end.offset) != null ? _f : 0;
const ast = astTransforms(
parse(content, getBabelParserOptions(attrs.lang)).program
);
return {
start: n.loc.start.offset,
end: n.loc.end.offset,
contentStart,
contentEnd,
content,
attrs,
found: true,
ast
};
};
const scriptSetup = getScriptTagMeta(
scriptSetupChildNodes[0],
(_a = options == null ? void 0 : options.astTransforms) == null ? void 0 : _a.scriptSetup
);
const script = getScriptTagMeta(
scriptChildNodes[0],
(_b = options == null ? void 0 : options.astTransforms) == null ? void 0 : _b.script
);
if (script.found && scriptSetup.found && scriptSetup.attrs.lang !== script.attrs.lang) {
throw new SyntaxError(
"<script setup> language must be the same as <script>"
);
}
const codeOfTemplate = templateNode == null ? void 0 : templateNode.props.some(
(p) => {
var _a2;
return p.type === NodeTypes.ATTRIBUTE && p.name === "lang" && ((_a2 = p.value) == null ? void 0 : _a2.type) === NodeTypes.TEXT && p.value.content === "pug";
}
) ? baseParse(
(await import('pug')).compile(
templateNode.children.map((x) => x.loc.source).join(""),
{
filename: id
}
)(),
parserOptions
) : templateNode;
const result = codeOfTemplate ? findReferencesForSFC(codeOfTemplate) : void 0;
return {
id,
template: {
components: new Set(result == null ? void 0 : result.components.map(pascalize)),
directives: new Set(
result == null ? void 0 : result.directives.filter((x) => !BUILD_IN_DIRECTIVES.has(x)).map(camelize)
),
identifiers: new Set(result == null ? void 0 : result.identifiers)
},
scriptSetup,
script,
parserOptions: getBabelParserOptions(
(_c = script.attrs.lang) != null ? _c : scriptSetup.attrs.lang
),
extraDeclarations: []
};
}
const DEFINE_PROPS = "defineProps";
const DEFINE_EMITS = "defineEmits";
const DEFINE_EXPOSE = "defineExpose";
const WITH_DEFAULTS = "withDefaults";
function applyMacros(nodes) {
let hasDefinePropsCall = false;
let hasDefineEmitCall = false;
let propsRuntimeDecl;
let propsRuntimeDefaults;
let propsTypeDecl;
let propsTypeDeclRaw;
let emitsRuntimeDecl;
let emitsTypeDecl;
let emitsTypeDeclRaw;
let exposeDecl;
const typeDeclaredProps = {};
const declaredTypes = {};
function error(msg, _node) {
throw new Error(msg);
}
function processDefineProps(node) {
if (!isCallOf(node, DEFINE_PROPS))
return false;
if (hasDefinePropsCall)
error(`duplicate ${DEFINE_PROPS}() call`);
hasDefinePropsCall = true;
propsRuntimeDecl = node.arguments[0];
if (node.typeParameters) {
if (propsRuntimeDecl) {
error(
`${DEFINE_PROPS}() cannot accept both type and non-type arguments at the same time. Use one or the other.`);
}
propsTypeDeclRaw = node.typeParameters.params[0];
propsTypeDecl = resolveQualifiedType(
propsTypeDeclRaw,
(node2) => node2.type === "TSTypeLiteral"
);
if (!propsTypeDecl) {
error(
`type argument passed to ${DEFINE_PROPS}() must be a literal type, or a reference to an interface or literal type.`);
}
}
return true;
}
function processWithDefaults(node) {
if (!isCallOf(node, WITH_DEFAULTS))
return false;
if (processDefineProps(node.arguments[0])) {
if (propsRuntimeDecl) {
error(
`${WITH_DEFAULTS} can only be used with type-based ${DEFINE_PROPS} declaration.`);
}
propsRuntimeDefaults = node.arguments[1];
} else {
error(
`${WITH_DEFAULTS}' first argument must be a ${DEFINE_PROPS} call.`,
node.arguments[0] || node
);
}
return true;
}
function processDefineEmits(node) {
if (!isCallOf(node, DEFINE_EMITS))
return false;
if (hasDefineEmitCall)
error(`duplicate ${DEFINE_EMITS}() call`);
hasDefineEmitCall = true;
emitsRuntimeDecl = node.arguments[0];
if (node.typeParameters) {
if (emitsRuntimeDecl) {
error(
`${DEFINE_EMITS}() cannot accept both type and non-type arguments at the same time. Use one or the other.`);
}
emitsTypeDeclRaw = node.typeParameters.params[0];
emitsTypeDecl = resolveQualifiedType(
emitsTypeDeclRaw,
(node2) => node2.type === "TSFunctionType" || node2.type === "TSTypeLiteral"
);
if (!emitsTypeDecl) {
error(
`type argument passed to ${DEFINE_EMITS}() must be a function type, a literal type with call signatures, or a reference to the above types.`);
}
}
return true;
}
function resolveQualifiedType(node, qualifier) {
if (qualifier(node))
return node;
if (node.type === "TSTypeReference" && node.typeName.type === "Identifier") {
const refName = node.typeName.name;
const isQualifiedType = (node2) => {
if (node2.type === "TSInterfaceDeclaration" && node2.id.name === refName)
return node2.body;
else if (node2.type === "TSTypeAliasDeclaration" && node2.id.name === refName && qualifier(node2.typeAnnotation))
return node2.typeAnnotation;
else if (node2.type === "ExportNamedDeclaration" && node2.declaration)
return isQualifiedType(node2.declaration);
};
for (const node2 of nodes) {
const qualified = isQualifiedType(node2);
if (qualified)
return qualified;
}
}
}
function processDefineExpose(node) {
if (!isCallOf(node, DEFINE_EXPOSE))
return false;
if (exposeDecl)
error(`duplicate ${DEFINE_EXPOSE}() call`);
if (node.arguments.length !== 1)
error(`${DEFINE_EXPOSE}() requires one argument`);
exposeDecl = node.arguments[0];
return true;
}
function genRuntimeProps(props) {
const keys = Object.keys(props);
if (!keys.length)
return void 0;
const hasStaticDefaults = propsRuntimeDefaults && propsRuntimeDefaults.type === "ObjectExpression" && propsRuntimeDefaults.properties.every(
(node) => node.type === "ObjectProperty" && !node.computed
);
return t.objectExpression(
Object.entries(props).map(([key, value]) => {
const prop = hasStaticDefaults ? propsRuntimeDefaults.properties.find((node) => node.key.name === key) : void 0;
if (prop)
value.required = false;
const entries = Object.entries(value).map(
([key2, value2]) => key2 === "type" ? t.objectProperty(t.identifier(key2), typeof value2 === "string" ? t.identifier(value2) : t.arrayExpression(value2.map((i) => t.identifier(i)))) : t.objectProperty(t.identifier(key2), parseExpression(JSON.stringify(value2)))
);
if (prop)
entries.push(t.objectProperty(t.identifier("default"), prop.value));
return t.objectProperty(
t.identifier(key),
t.objectExpression(entries)
);
})
);
}
function getProps() {
if (propsRuntimeDecl)
return propsRuntimeDecl;
if (propsTypeDecl) {
extractRuntimeProps(propsTypeDecl, typeDeclaredProps, declaredTypes);
return genRuntimeProps(typeDeclaredProps);
}
}
function throwIfAwait(node) {
if (node.type === "AwaitExpression")
error("top-level await is not supported in Vue 2");
}
nodes = nodes.map((raw) => {
let node = raw;
if (raw.type === "ExpressionStatement")
node = raw.expression;
if (node.type === "VariableDeclaration" && !node.declare) {
const total = node.declarations.length;
for (let i = 0; i < total; i++) {
const decl = node.declarations[i];
if (decl.init) {
if (processDefineEmits(decl.init))
decl.init = t.memberExpression(t.identifier("__ctx"), t.identifier("emit"));
else if (processDefineProps(decl.init) || processWithDefaults(decl.init))
decl.init = t.identifier("__props");
else
throwIfAwait(decl.init);
}
}
}
if (processWithDefaults(node) || processDefineEmits(node) || processDefineProps(node) || processDefineExpose(node))
return null;
throwIfAwait(node);
return raw;
}).filter(Boolean);
return {
nodes,
props: getProps(),
expose: exposeDecl
};
}
function isCallOf(node, test) {
return !!(node && node.type === "CallExpression" && node.callee.type === "Identifier" && (typeof test === "string" ? node.callee.name === test : test(node.callee.name)));
}
function extractRuntimeProps(node, props, declaredTypes) {
const members = node.type === "TSTypeLiteral" ? node.members : node.body;
for (const m of members) {
if ((m.type === "TSPropertySignature" || m.type === "TSMethodSignature") && m.key.type === "Identifier") {
let type;
if (m.type === "TSMethodSignature") {
type = ["Function"];
} else if (m.typeAnnotation) {
type = inferRuntimeType(
m.typeAnnotation.typeAnnotation,
declaredTypes
);
}
props[m.key.name] = {
key: m.key.name,
required: !m.optional,
type: (type == null ? void 0 : type.length) === 1 ? type[0] : type || "null"
};
}
}
}
function inferRuntimeType(node, declaredTypes) {
switch (node.type) {
case "TSStringKeyword":
return ["String"];
case "TSNumberKeyword":
return ["Number"];
case "TSBooleanKeyword":
return ["Boolean"];
case "TSObjectKeyword":
return ["Object"];
case "TSTypeLiteral":
return ["Object"];
case "TSFunctionType":
return ["Function"];
case "TSArrayType":
case "TSTupleType":
return ["Array"];
case "TSLiteralType":
switch (node.literal.type) {
case "StringLiteral":
return ["String"];
case "BooleanLiteral":
return ["Boolean"];
case "NumericLiteral":
case "BigIntLiteral":
return ["Number"];
default:
return ["null"];
}
case "TSTypeReference":
if (node.typeName.type === "Identifier") {
if (declaredTypes[node.typeName.name])
return declaredTypes[node.typeName.name];
switch (node.typeName.name) {
case "Array":
case "Function":
case "Object":
case "Set":
case "Map":
case "WeakSet":
case "WeakMap":
return [node.typeName.name];
case "Record":
case "Partial":
case "Readonly":
case "Pick":
case "Omit":
case "Exclude":
case "Extract":
case "Required":
case "InstanceType":
return ["Object"];
}
}
return ["null"];
case "TSParenthesizedType":
return inferRuntimeType(node.typeAnnotation, declaredTypes);
case "TSUnionType":
return [
...new Set(
[].concat(
...node.types.map((t2) => inferRuntimeType(t2, declaredTypes))
)
)
];
case "TSIntersectionType":
return ["Object"];
default:
return ["null"];
}
}
function isAsyncImport(node) {
if (t.isVariableDeclaration(node)) {
const declaration = node.declarations[0];
return declaration !== void 0 && t.isCallExpression(declaration.init) && t.isIdentifier(declaration.init.callee) && declaration.init.callee.name === "defineAsyncComponent";
}
return false;
}
function transformScriptSetup(sfc, options) {
var _a, _b;
const { scriptSetup, script, template } = sfc;
const { nodes: body, props, expose } = applyMacros(scriptSetup.ast.body);
const [hoisted, setupBody] = partition(
body,
(n) => isAsyncImport(n) || t.isImportDeclaration(n) || t.isExportNamedDeclaration(n) || n.type.startsWith("TS")
);
const declarationArray = uniq([
...getIdentifierDeclarations(hoisted),
...getIdentifierDeclarations(setupBody),
...getIdentifierDeclarations(script.ast.body)
]).filter(notNullish);
const returns = declarationArray.filter((i) => template.identifiers.has(i)).map((i) => {
const id = t.identifier(i);
return t.objectProperty(id, id, false, true);
});
const components = Array.from(template.components).map(
(component) => {
var _a2;
return (_a2 = declarationArray.find((declare) => declare === component)) != null ? _a2 : declarationArray.find((declare) => pascalize(declare) === component);
}
).filter(notNullish);
const directiveDeclaration = Array.from(template.directives).map((directive) => {
const identifier = declarationArray.find(
(declaration) => declaration === `v${capitalize(directive)}`
);
if (identifier === void 0)
return void 0;
return { identifier, directive };
}).filter(notNullish);
const __sfc = t.identifier("__sfc_main");
let hasBody = false;
const bodyNodes = script.ast.body.map((node) => {
if (node.type === "ExportDefaultDeclaration") {
hasBody = true;
return t.variableDeclaration("const", [
t.variableDeclarator(__sfc, node.declaration)
]);
}
return node;
});
let ast = t.program([
...sfc.extraDeclarations,
...hoisted,
...bodyNodes
]);
if (!hasBody) {
ast.body.push(
t.variableDeclaration("const", [
t.variableDeclarator(__sfc, t.objectExpression([]))
])
);
}
if (props) {
hasBody = true;
ast.body.push(
t.expressionStatement(
t.assignmentExpression(
"=",
t.memberExpression(__sfc, t.identifier("props")),
props
)
)
);
}
if (body.length) {
hasBody = true;
const returnExpr = expose ? t.callExpression(
t.memberExpression(t.identifier("Object"), t.identifier("assign")),
[t.objectExpression(returns), expose]
) : t.objectExpression(returns);
const returnStatement = t.returnStatement(returnExpr);
ast.body.push(
t.expressionStatement(
t.assignmentExpression(
"=",
t.memberExpression(__sfc, t.identifier("setup")),
t.arrowFunctionExpression(
[t.identifier("__props"), t.identifier("__ctx")],
t.blockStatement([...setupBody, returnStatement])
)
)
)
);
}
if (components.length) {
hasBody = true;
const componentsObject = t.objectExpression(
components.map((i) => {
const id = t.identifier(i);
return t.objectProperty(id, id, false, true);
})
);
ast.body.push(
t.expressionStatement(
t.assignmentExpression(
"=",
t.memberExpression(__sfc, t.identifier("components")),
t.callExpression(
t.memberExpression(t.identifier("Object"), t.identifier("assign")),
[
componentsObject,
t.memberExpression(__sfc, t.identifier("components"))
]
)
)
)
);
}
if (directiveDeclaration.length) {
hasBody = true;
const directivesObject = t.objectExpression(
directiveDeclaration.map(
({ directive, identifier }) => t.objectProperty(
t.identifier(directive),
t.identifier(identifier),
false,
false
)
)
);
ast.body.push(
t.expressionStatement(
t.assignmentExpression(
"=",
t.memberExpression(__sfc, t.identifier("directives")),
t.callExpression(
t.memberExpression(t.identifier("Object"), t.identifier("assign")),
[
directivesObject,
t.memberExpression(__sfc, t.identifier("directives"))
]
)
)
)
);
}
if (!hasBody && !(options == null ? void 0 : options.astTransforms)) {
return {
ast: null,
code: ""
};
}
ast.body.push(t.exportDefaultDeclaration(__sfc));
ast = ((_b = (_a = options == null ? void 0 : options.astTransforms) == null ? void 0 : _a.post) == null ? void 0 : _b.call(_a, ast, sfc)) || ast;
return {
ast,
code: generate(ast).code
};
}
function transformSfcRefSugar(sfc, options) {
const importedHelpers = /* @__PURE__ */ new Set();
for (const script of [sfc.script, sfc.scriptSetup]) {
if (shouldTransform$1(script.content)) {
const s = new MagicString(script.content);
const { importedHelpers: imports } = transformAST(script.ast, s);
Array.from(imports).forEach((helper) => importedHelpers.add(helper));
script.content = s.toString();
script.ast = parse(script.content, sfc.parserOptions).program;
}
}
if (importedHelpers.size) {
sfc.extraDeclarations = [
t.importDeclaration(
Array.from(importedHelpers).map((i) => t.importSpecifier(t.identifier(`_${i}`), t.identifier(i))),
t.stringLiteral(options.importHelpersFrom)
)
];
}
}
function resolveOptions(options = {}) {
return Object.assign(
{},
{
sourceMap: true,
reactivityTransform: false,
importHelpersFrom: "@vue/composition-api",
astTransforms: {}
},
options
);
}
var __defProp = Object.defineProperty;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
const scriptSetupRE = /<script\s(.*\s)?setup(\s.*)?>/;
function shouldTransform(code, id, options) {
if (code.includes("export default __sfc_main"))
return false;
return (options == null ? void 0 : options.reactivityTransform) && shouldTransform$1(code) || scriptSetupRE.test(code);
}
async function transform(input, id, options) {
if (!shouldTransform(input, id, options))
return null;
const resolved = resolveOptions(options);
if (id.endsWith(".vue") || id.includes(".vue?vue"))
return await transformVue(input, id, resolved);
else
return transformNonVue(input, id, resolved);
}
function transformNonVue(input, id, options) {
if (options.reactivityTransform && shouldTransform$1(input)) {
return transform$1(input, {
filename: id,
sourceMap: options.sourceMap,
importHelpersFrom: options.importHelpersFrom
});
}
return null;
}
async function transformVue(input, id, options) {
const s = new MagicString(input);
const sfc = await parseSFC(input, id);
if (options.reactivityTransform)
transformSfcRefSugar(sfc, options);
const { code } = transformScriptSetup(sfc, options);
const attributes = __spreadValues(__spreadValues({}, sfc.script.attrs), sfc.scriptSetup.attrs);
delete attributes.setup;
const attr = Object.entries(attributes).map(([key, value]) => value ? `${key}="${value}"` : key).join(" ");
if (code) {
const block = `<script ${attr}>
${code}
<\/script>`;
s.remove(sfc.script.start, sfc.script.end);
if (sfc.scriptSetup.start !== sfc.scriptSetup.end) {
s.overwrite(
sfc.scriptSetup.start,
sfc.scriptSetup.end,
block
);
} else {
s.prependLeft(0, `${block}
`);
}
}
return {
code: s.toString(),
map: options.sourceMap ? s.generateMap({
source: id,
includeContent: true
}) : null
};
}
const unplugin = createUnplugin((options = {}) => {
const filter = createFilter(
options.include || (options.reactivityTransform ? [/\.vue$/, /\.vue\?vue/, /\.[jt]sx?$/] : [/\.vue$/, /\.vue\?vue/]),
options.exclude || [/node_modules/, /\.git/, /\.nuxt/]
);
return {
name: "unplugin-vue2-script-setup",
enforce: "pre",
transformInclude(id) {
return filter(id);
},
async transform(code, id) {
try {
return await transform(code, id, options);
} catch (e) {
this.error(e);
}
}
};
});
function scriptSetupModule(inlineOptions = {}) {
const options = defu(inlineOptions, this.nuxt.options.scriptSetup);
this.extendBuild((config) => {
config.plugins = config.plugins || [];
config.plugins.unshift(unplugin.webpack(options));
});
this.nuxt.hook("vite:extend", async (vite) => {
vite.config.plugins = vite.config.plugins || [];
vite.config.plugins.push(unplugin.vite(options));
});
}
export { scriptSetupModule as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnV4dC5tanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL2JhYmVsLnRzIiwiLi4vc3JjL2NvcmUvaWRlbnRpZmllcnMudHMiLCIuLi9zcmMvY29yZS91dGlscy50cyIsIi4uL3NyYy9jb3JlL3BhcnNlU0ZDLnRzIiwiLi4vc3JjL2NvcmUvbWFjcm9zLnRzIiwiLi4vc3JjL2NvcmUvdHJhbnNmb3JtU2NyaXB0U2V0dXAudHMiLCIuLi9zcmMvY29yZS90cmFuc2Zvcm1TZmNSZWZTdWdhci50cyIsIi4uL3NyYy9jb3JlL29wdGlvbnMudHMiLCIuLi9zcmMvY29yZS90cmFuc2Zvcm0udHMiLCIuLi9zcmMvaW5kZXgudHMiLCIuLi9zcmMvbnV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYWJlbCBmcm9tICdAYmFiZWwvY29yZSdcbmltcG9ydCB7IHBhcnNlLCBwYXJzZUV4cHJlc3Npb24gfSBmcm9tICdAYmFiZWwvcGFyc2VyJ1xuaW1wb3J0IGcgZnJvbSAnQGJhYmVsL2dlbmVyYXRvcidcbmltcG9ydCAqIGFzIGJhYmVsX3RyYXZlcnNlIGZyb20gJ0BiYWJlbC90cmF2ZXJzZSdcblxuZXhwb3J0IGNvbnN0IHQ6IHR5cGVvZiBiYWJlbFsndHlwZXMnXSA9ICgoYmFiZWwgYXMgYW55KS5kZWZhdWx0IHx8IGJhYmVsKS50eXBlc1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlOiB0eXBlb2YgZyA9ICgoZyBhcyBhbnkpLmRlZmF1bHQgfHwgZylcbmV4cG9ydCBjb25zdCB0cmF2ZXJzZSA9ICgoYmFiZWxfdHJhdmVyc2UgYXMgYW55KT8uZGVmYXVsdD8uZGVmYXVsdCBhcyBudWxsKSA/PyBiYWJlbF90cmF2ZXJzZT8uZGVmYXVsdCA/PyBiYWJlbF90cmF2ZXJzZVxuZXhwb3J0IHsgcGFyc2VFeHByZXNzaW9uLCBwYXJzZSB9XG4iLCJpbXBvcnQgdHlwZSB7XG4gIEV4cHJlc3Npb24sXG4gIEZpbGUsXG4gIFByaXZhdGVOYW1lLFxuICBTcHJlYWRFbGVtZW50LFxuICBTdGF0ZW1lbnQsXG4gIFRTVHlwZSxcbn0gZnJvbSAnQGJhYmVsL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXJzZVJlc3VsdCB9IGZyb20gJ0BiYWJlbC9wYXJzZXInXG5pbXBvcnQgeyB0LCB0cmF2ZXJzZSB9IGZyb20gJy4vYmFiZWwnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWVyRGVjbGFyYXRpb25zKG5vZGVzOiBTdGF0ZW1lbnRbXSkge1xuICBsZXQgcmVzdWx0ITogU2V0PHN0cmluZz5cbiAgbGV0IHByb2dyYW1TY29wZVVpZDogbnVtYmVyXG4gIHRyYXZlcnNlKHQuZmlsZSh0LnByb2dyYW0obm9kZXMpKSwge1xuICAgIFByb2dyYW0ocGF0aCkge1xuICAgICAgcmVzdWx0ID0gbmV3IFNldChPYmplY3Qua2V5cyhwYXRoLnNjb3BlLmJpbmRpbmdzKSlcbiAgICAgIHByb2dyYW1TY29wZVVpZCA9IChwYXRoLnNjb3BlIGFzIGFueSkudWlkXG4gICAgfSxcbiAgICAvLyBGSVhNRTogYmFiZWwgYnVnLCB0ZW1wb3JhcnkgYWRkIFRTRW51bURlY2xhcmF0aW9uIGFuZCBUU01vZHVsZURlY2xhcmF0aW9uIGxvZ2ljXG4gICAgVFNFbnVtRGVjbGFyYXRpb24ocGF0aCkge1xuICAgICAgaWYgKChwYXRoLnNjb3BlIGFzIGFueSkudWlkID09PSBwcm9ncmFtU2NvcGVVaWQpXG4gICAgICAgIHJlc3VsdC5hZGQocGF0aC5ub2RlLmlkLm5hbWUpXG4gICAgfSxcbiAgICBUU01vZHVsZURlY2xhcmF0aW9uKHBhdGgpIHtcbiAgICAgIGlmICgocGF0aC5zY29wZSBhcyBhbnkpLnVpZCA9PT0gcHJvZ3JhbVNjb3BlVWlkKSB7XG4gICAgICAgIGNvbnN0IGlkID0gcGF0aC5ub2RlLmlkXG4gICAgICAgIGlmIChpZC50eXBlID09PSAnSWRlbnRpZmllcicpXG4gICAgICAgICAgcmVzdWx0LmFkZChpZC5uYW1lKVxuICAgICAgfVxuICAgIH0sXG4gIH0pXG4gIHJldHVybiBBcnJheS5mcm9tKHJlc3VsdClcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGdldEZpbGVHbG9iYWxzYCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGU/OiBFeHByZXNzaW9uIHwgVFNUeXBlIHwgU3ByZWFkRWxlbWVudCB8IFByaXZhdGVOYW1lIHwgU3RhdGVtZW50IHwgbnVsbCwgaWRlbnRpZmllcnMgPSBuZXcgU2V0PHN0cmluZz4oKSkge1xuICBpZiAoIW5vZGUpXG4gICAgcmV0dXJuIGlkZW50aWZpZXJzXG5cbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIG5vZGUuYm9keS5mb3JFYWNoKGNoaWxkID0+IGdldElkZW50aWZpZXJVc2FnZXMoY2hpbGQsIGlkZW50aWZpZXJzKSlcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50Jykge1xuICAgIGdldElkZW50aWZpZXJVc2FnZXMobm9kZS5leHByZXNzaW9uLCBpZGVudGlmaWVycylcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIGlkZW50aWZpZXJzLmFkZChub2RlLm5hbWUpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgfHwgbm9kZS50eXBlID09PSAnT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uJykge1xuICAgIGdldElkZW50aWZpZXJVc2FnZXMobm9kZS5vYmplY3QsIGlkZW50aWZpZXJzKVxuICAgIGlmIChub2RlLmNvbXB1dGVkKVxuICAgICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLnByb3BlcnR5LCBpZGVudGlmaWVycylcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgfHwgbm9kZS50eXBlID09PSAnT3B0aW9uYWxDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUuY2FsbGVlIGFzIEV4cHJlc3Npb24sIGlkZW50aWZpZXJzKVxuICAgIG5vZGUuYXJndW1lbnRzLmZvckVhY2goYXJnID0+IGdldElkZW50aWZpZXJVc2FnZXMoYXJnIGFzIEV4cHJlc3Npb24sIGlkZW50aWZpZXJzKSlcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdCaW5hcnlFeHByZXNzaW9uJyB8fCBub2RlLnR5cGUgPT09ICdMb2dpY2FsRXhwcmVzc2lvbicpIHtcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUubGVmdCwgaWRlbnRpZmllcnMpXG4gICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLnJpZ2h0LCBpZGVudGlmaWVycylcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdVbmFyeUV4cHJlc3Npb24nKSB7XG4gICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLmFyZ3VtZW50LCBpZGVudGlmaWVycylcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdGb3JPZlN0YXRlbWVudCcgfHwgbm9kZS50eXBlID09PSAnRm9ySW5TdGF0ZW1lbnQnKSB7XG4gICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLnJpZ2h0LCBpZGVudGlmaWVycylcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdDb25kaXRpb25hbEV4cHJlc3Npb24nKSB7XG4gICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLnRlc3QsIGlkZW50aWZpZXJzKVxuICAgIGdldElkZW50aWZpZXJVc2FnZXMobm9kZS5jb25zZXF1ZW50LCBpZGVudGlmaWVycylcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUuYWx0ZXJuYXRlLCBpZGVudGlmaWVycylcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgIG5vZGUucHJvcGVydGllcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICBpZiAocHJvcC50eXBlID09PSAnT2JqZWN0UHJvcGVydHknKSB7XG4gICAgICAgIGlmIChwcm9wLmNvbXB1dGVkKVxuICAgICAgICAgIGdldElkZW50aWZpZXJVc2FnZXMocHJvcC5rZXksIGlkZW50aWZpZXJzKVxuICAgICAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKHByb3AudmFsdWUgYXMgRXhwcmVzc2lvbiwgaWRlbnRpZmllcnMpXG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwcm9wLnR5cGUgPT09ICdTcHJlYWRFbGVtZW50Jykge1xuICAgICAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKHByb3AsIGlkZW50aWZpZXJzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSAnQXJyYXlFeHByZXNzaW9uJykge1xuICAgIG5vZGUuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IGdldElkZW50aWZpZXJVc2FnZXMoZWxlbWVudCwgaWRlbnRpZmllcnMpKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ1NwcmVhZEVsZW1lbnQnIHx8IG5vZGUudHlwZSA9PT0gJ1JldHVyblN0YXRlbWVudCcpIHtcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUuYXJndW1lbnQsIGlkZW50aWZpZXJzKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ05ld0V4cHJlc3Npb24nKSB7XG4gICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLmNhbGxlZSBhcyBFeHByZXNzaW9uLCBpZGVudGlmaWVycylcbiAgICBub2RlLmFyZ3VtZW50cy5mb3JFYWNoKGFyZyA9PiBnZXRJZGVudGlmaWVyVXNhZ2VzKGFyZyBhcyBFeHByZXNzaW9uLCBpZGVudGlmaWVycykpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicpIHtcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUuYm9keSwgaWRlbnRpZmllcnMpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSAnVGVtcGxhdGVMaXRlcmFsJykge1xuICAgIG5vZGUuZXhwcmVzc2lvbnMuZm9yRWFjaChleHByID0+IGdldElkZW50aWZpZXJVc2FnZXMoZXhwciwgaWRlbnRpZmllcnMpKVxuICB9XG4gIC8vIGVsc2Uge1xuICAvLyAgIGNvbnNvbGUubG9nKG5vZGUpXG4gIC8vIH1cbiAgcmV0dXJuIGlkZW50aWZpZXJzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlR2xvYmFscyhyZXN1bHQ6IFBhcnNlUmVzdWx0PEZpbGU+KSB7XG4gIGxldCBnbG9iYWxzITogU2V0PHN0cmluZz5cbiAgbGV0IHByb2dyYW1TY29wZVVpZDogbnVtYmVyXG4gIHRyYXZlcnNlKHJlc3VsdCwge1xuICAgIFByb2dyYW0ocGF0aCkge1xuICAgICAgZ2xvYmFscyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoKHBhdGguc2NvcGUgYXMgYW55KS5nbG9iYWxzKSlcbiAgICAgIHByb2dyYW1TY29wZVVpZCA9IChwYXRoLnNjb3BlIGFzIGFueSkudWlkXG4gICAgfSxcbiAgICAvLyBGSVhNRTogYmFiZWwgYnVnLCB0ZW1wb3JhcnkgYWRkIFRTRW51bURlY2xhcmF0aW9uIGFuZCBUU01vZHVsZURlY2xhcmF0aW9uIGxvZ2ljXG4gICAgVFNFbnVtRGVjbGFyYXRpb24ocGF0aCkge1xuICAgICAgaWYgKChwYXRoLnNjb3BlIGFzIGFueSkudWlkID09PSBwcm9ncmFtU2NvcGVVaWQpXG4gICAgICAgIGdsb2JhbHMuZGVsZXRlKHBhdGgubm9kZS5pZC5uYW1lKVxuICAgIH0sXG4gICAgVFNNb2R1bGVEZWNsYXJhdGlvbihwYXRoKSB7XG4gICAgICBpZiAoKHBhdGguc2NvcGUgYXMgYW55KS51aWQgPT09IHByb2dyYW1TY29wZVVpZCkge1xuICAgICAgICBjb25zdCBpZCA9IHBhdGgubm9kZS5pZFxuICAgICAgICBpZiAoaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInKVxuICAgICAgICAgIGdsb2JhbHMuZGVsZXRlKGlkLm5hbWUpXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbiAgcmV0dXJuIEFycmF5LmZyb20oZ2xvYmFscylcbn1cbiIsImltcG9ydCB7IGNhbWVsaXplLCBjYXBpdGFsaXplIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnXG5cbmV4cG9ydCBjb25zdCBwYXNjYWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IGNhcGl0YWxpemUoY2FtZWxpemUoc3RyKSlcblxuZXhwb3J0IGNvbnN0IGlzTm90TmlsID0gPFQ+KHZhbHVlOiBUKTogdmFsdWUgaXMgTm9uTnVsbGFibGU8VD4gPT4gdmFsdWUgIT0gbnVsbFxuXG5leHBvcnQgZnVuY3Rpb24gZXhoYXVzdGl2ZUNoZWNrUmV0dXJuVW5kZWZpbmVkKF9wYXJhbTogbmV2ZXIpIHtcbiAgcmV0dXJuIHVuZGVmaW5lZCBhcyBuZXZlclxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgb25lLXZhciAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZSAqL1xuaW1wb3J0IHsgbm90TnVsbGlzaCwgcGFydGl0aW9uIH0gZnJvbSAnQGFudGZ1L3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBQcm9ncmFtIH0gZnJvbSAnQGJhYmVsL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXJzZXJQbHVnaW4gfSBmcm9tICdAYmFiZWwvcGFyc2VyJ1xuaW1wb3J0IHR5cGUge1xuICBBdHRyaWJ1dGVOb2RlLFxuICBEaXJlY3RpdmVOb2RlLFxuICBFeHByZXNzaW9uTm9kZSxcbiAgUGxhaW5FbGVtZW50Tm9kZSxcbiAgUm9vdE5vZGUsXG4gIFRlbXBsYXRlQ2hpbGROb2RlLFxufSBmcm9tICdAdnVlL2NvbXBpbGVyLWNvcmUnXG5pbXBvcnQgeyBiYXNlUGFyc2UgfSBmcm9tICdAdnVlL2NvbXBpbGVyLWNvcmUnXG5pbXBvcnQgeyBwYXJzZXJPcHRpb25zIH0gZnJvbSAnQHZ1ZS9jb21waWxlci1kb20nXG5pbXBvcnQgeyBjYW1lbGl6ZSB9IGZyb20gJ0B2dWUvc2hhcmVkJ1xuaW1wb3J0IHR5cGUge1xuICBQYXJzZWRTRkMsXG4gIFNjcmlwdFNldHVwVHJhbnNmb3JtT3B0aW9ucyxcbiAgU2NyaXB0VGFnTWV0YSxcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRGaWxlR2xvYmFscyB9IGZyb20gJy4vaWRlbnRpZmllcnMnXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJy4vYmFiZWwnXG5pbXBvcnQgeyBleGhhdXN0aXZlQ2hlY2tSZXR1cm5VbmRlZmluZWQsIHBhc2NhbGl6ZSB9IGZyb20gJy4vdXRpbHMnXG5cbm5hbWVzcGFjZSBOb2RlVHlwZXMge1xuICBleHBvcnQgY29uc3QgUk9PVCA9IDAsXG4gICAgRUxFTUVOVCA9IDEsXG4gICAgVEVYVCA9IDIsXG4gICAgQ09NTUVOVCA9IDMsXG4gICAgU0lNUExFX0VYUFJFU1NJT04gPSA0LFxuICAgIElOVEVSUE9MQVRJT04gPSA1LFxuICAgIEFUVFJJQlVURSA9IDYsXG4gICAgRElSRUNUSVZFID0gNyxcbiAgICBDT01QT1VORF9FWFBSRVNTSU9OID0gOCxcbiAgICBJRiA9IDksXG4gICAgSUZfQlJBTkNIID0gMTAsXG4gICAgRk9SID0gMTEsXG4gICAgVEVYVF9DQUxMID0gMTIsXG4gICAgVk5PREVfQ0FMTCA9IDEzLFxuICAgIEpTX0NBTExfRVhQUkVTU0lPTiA9IDE0LFxuICAgIEpTX09CSkVDVF9FWFBSRVNTSU9OID0gMTUsXG4gICAgSlNfUFJPUEVSVFkgPSAxNixcbiAgICBKU19BUlJBWV9FWFBSRVNTSU9OID0gMTcsXG4gICAgSlNfRlVOQ1RJT05fRVhQUkVTU0lPTiA9IDE4LFxuICAgIEpTX0NPTkRJVElPTkFMX0VYUFJFU1NJT04gPSAxOSxcbiAgICBKU19DQUNIRV9FWFBSRVNTSU9OID0gMjAsXG4gICAgSlNfQkxPQ0tfU1RBVEVNRU5UID0gMjEsXG4gICAgSlNfVEVNUExBVEVfTElURVJBTCA9IDIyLFxuICAgIEpTX0lGX1NUQVRFTUVOVCA9IDIzLFxuICAgIEpTX0FTU0lHTk1FTlRfRVhQUkVTU0lPTiA9IDI0LFxuICAgIEpTX1NFUVVFTkNFX0VYUFJFU1NJT04gPSAyNSxcbiAgICBKU19SRVRVUk5fU1RBVEVNRU5UID0gMjZcbn1cblxubmFtZXNwYWNlIEVsZW1lbnRUeXBlcyB7XG4gIGV4cG9ydCBjb25zdCBFTEVNRU5UID0gMCxcbiAgICBDT01QT05FTlQgPSAxLFxuICAgIFNMT1QgPSAyLFxuICAgIFRFTVBMQVRFID0gM1xufVxuXG5jb25zdCBCVUlMRF9JTl9ESVJFQ1RJVkVTID0gbmV3IFNldChbXG4gICdpZicsXG4gICdlbHNlJyxcbiAgJ2Vsc2UtaWYnLFxuICAnZm9yJyxcbiAgJ29uY2UnLFxuICAnbW9kZWwnLFxuICAnb24nLFxuICAnYmluZCcsXG4gICdzbG90JyxcbiAgJ3Nsb3Qtc2NvcGUnLFxuICAna2V5JyxcbiAgJ3JlZicsXG4gICd0ZXh0JyxcbiAgJ2h0bWwnLFxuICAnc2hvdycsXG4gICdwcmUnLFxuICAnY2xvYWsnLFxuICAvLyAnZWwnLFxuICAvLyAncmVmJyxcbl0pXG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHMobm9kZTogVGVtcGxhdGVDaGlsZE5vZGUpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGN1cnJlbnRcbiAgICA9IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLkVMRU1FTlQgJiYgbm9kZS50YWdUeXBlID09PSBFbGVtZW50VHlwZXMuQ09NUE9ORU5UXG4gICAgICA/IFtub2RlLnRhZ11cbiAgICAgIDogbm9kZS50eXBlID09PSBOb2RlVHlwZXMuRUxFTUVOVCAmJiBub2RlLnRhZ1R5cGUgPT09IEVsZW1lbnRUeXBlcy5FTEVNRU5UXG4gICAgICAgID8gW25vZGUudGFnXVxuICAgICAgICA6IFtdXG5cbiAgY29uc3QgY2hpbGRyZW5cbiAgICA9IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLklGXG4gICAgICA/IG5vZGUuYnJhbmNoZXNcbiAgICAgIDogbm9kZS50eXBlID09PSBOb2RlVHlwZXMuRUxFTUVOVFxuICAgICAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5JRl9CUkFOQ0hcbiAgICAgICAgfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuRk9SXG4gICAgICAgID8gbm9kZS5jaGlsZHJlblxuICAgICAgICA6IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLlRFWFRcbiAgICAgICAgfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuQ09NTUVOVFxuICAgICAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OXG4gICAgICAgIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLlRFWFRfQ0FMTFxuICAgICAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5JTlRFUlBPTEFUSU9OXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogZXhoYXVzdGl2ZUNoZWNrUmV0dXJuVW5kZWZpbmVkKG5vZGUpID8/IFtdXG5cbiAgcmV0dXJuIFsuLi5jdXJyZW50LCAuLi5jaGlsZHJlbi5mbGF0TWFwKGdldENvbXBvbmVudHMpXVxufVxuXG5mdW5jdGlvbiBnZXREaXJlY3RpdmVOYW1lcyhub2RlOiBUZW1wbGF0ZUNoaWxkTm9kZSk6IHN0cmluZ1tdIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLkVMRU1FTlQpIHtcbiAgICBjb25zdCBkaXJlY3RpdmVzID0gbm9kZS5wcm9wcy5mbGF0TWFwKHggPT5cbiAgICAgIHgudHlwZSA9PT0gTm9kZVR5cGVzLkRJUkVDVElWRSA/IFt4Lm5hbWVdIDogW10sXG4gICAgKVxuICAgIHJldHVybiBbLi4uZGlyZWN0aXZlcywgLi4ubm9kZS5jaGlsZHJlbi5mbGF0TWFwKGdldERpcmVjdGl2ZU5hbWVzKV1cbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5JRikge1xuICAgIHJldHVybiBub2RlLmJyYW5jaGVzLmZsYXRNYXAoZ2V0RGlyZWN0aXZlTmFtZXMpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuSUZfQlJBTkNIIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLkZPUikge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuLmZsYXRNYXAoZ2V0RGlyZWN0aXZlTmFtZXMpXG4gIH1cbiAgZWxzZSBpZiAoXG4gICAgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuSU5URVJQT0xBVElPTlxuICAgIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT05cbiAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5URVhUXG4gICAgfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuQ09NTUVOVFxuICAgIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLlRFWFRfQ0FMTFxuICApIHtcbiAgICByZXR1cm4gW11cbiAgfVxuICBlbHNlIHtcbiAgICBleGhhdXN0aXZlQ2hlY2tSZXR1cm5VbmRlZmluZWQobm9kZSlcbiAgICByZXR1cm4gW11cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGcmVlVmFyaWFibGVzRm9yVGV4dChpbnB1dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBpbnB1dFdpdGhQcmVmaXggPSBpbnB1dC50cmltU3RhcnQoKVswXSA9PT0gJ3snID8gYCgke2lucHV0fSlgIDogaW5wdXRcbiAgcmV0dXJuIGdldEZpbGVHbG9iYWxzKHBhcnNlKGlucHV0V2l0aFByZWZpeCkpXG59XG5cbmZ1bmN0aW9uIGdldEZyZWVWYXJpYWJsZXNGb3JQcm9wc05vZGUoXG4gIG5vZGU6IEF0dHJpYnV0ZU5vZGUgfCBEaXJlY3RpdmVOb2RlLFxuKTogc3RyaW5nW10ge1xuICBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuRElSRUNUSVZFKSB7XG4gICAgY29uc3QgYXJnID0gbm9kZS5hcmcgPT09IHVuZGVmaW5lZCA/IFtdIDogZ2V0RnJlZVZhcmlhYmxlc0Zvck5vZGUobm9kZS5hcmcpXG4gICAgY29uc3QgZXhwID0gbm9kZS5leHAgPT09IHVuZGVmaW5lZCA/IFtdIDogZ2V0RnJlZVZhcmlhYmxlc0Zvck5vZGUobm9kZS5leHApXG4gICAgcmV0dXJuIFsuLi5hcmcsIC4uLmV4cF1cbiAgfVxuICByZXR1cm4gW11cbn1cblxuZnVuY3Rpb24gZ2V0RnJlZVZhcmlhYmxlc0Zvck5vZGUoXG4gIG5vZGU6IFRlbXBsYXRlQ2hpbGROb2RlIHwgRXhwcmVzc2lvbk5vZGUsXG4pOiBzdHJpbmdbXSB7XG4gIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTikge1xuICAgIHJldHVybiBub2RlLmlzU3RhdGljID8gW10gOiBnZXRGcmVlVmFyaWFibGVzRm9yVGV4dChub2RlLmNvbnRlbnQpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuQ09NUE9VTkRfRVhQUkVTU0lPTikge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuLmZsYXRNYXAoeCA9PlxuICAgICAgdHlwZW9mIHggIT09ICdvYmplY3QnID8gW10gOiBnZXRGcmVlVmFyaWFibGVzRm9yTm9kZSh4KSxcbiAgICApXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuSU5URVJQT0xBVElPTikge1xuICAgIHJldHVybiBnZXRGcmVlVmFyaWFibGVzRm9yTm9kZShub2RlLmNvbnRlbnQpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuRUxFTUVOVCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5mbGF0TWFwKGdldEZyZWVWYXJpYWJsZXNGb3JOb2RlKVxuXG4gICAgY29uc3QgZGlyZWN0aXZlUHJvcHMgPSBub2RlLnByb3BzLmZsYXRNYXAoeCA9PlxuICAgICAgeC50eXBlID09PSBOb2RlVHlwZXMuRElSRUNUSVZFID8gW3hdIDogW10sXG4gICAgKVxuICAgIGNvbnN0IGF0dHJpYnV0ZVByb3BzID0gbm9kZS5wcm9wcy5mbGF0TWFwKHggPT5cbiAgICAgIHgudHlwZSA9PT0gTm9kZVR5cGVzLkFUVFJJQlVURSA/IFt4XSA6IFtdLFxuICAgIClcblxuICAgIGNvbnN0IHJlZk5vZGUgPSBhdHRyaWJ1dGVQcm9wcy5maW5kKFxuICAgICAgbm9kZSA9PiBub2RlLm5hbWUgPT09ICdyZWYnICYmIG5vZGUudmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICApXG4gICAgY29uc3QgcmVmSWRlbnRpZmllciA9IHJlZk5vZGU/LnZhbHVlPy5jb250ZW50XG5cbiAgICBjb25zdCB2U2xvdE5vZGUgPSBkaXJlY3RpdmVQcm9wcy5maW5kKG5vZGUgPT4gbm9kZS5uYW1lID09PSAnc2xvdCcpXG4gICAgY29uc3QgdlNsb3RBcmdJZGVudGlmaWVyc1xuICAgICAgPSB2U2xvdE5vZGU/LmFyZyA9PT0gdW5kZWZpbmVkID8gW10gOiBnZXRGcmVlVmFyaWFibGVzRm9yTm9kZSh2U2xvdE5vZGUuYXJnKVxuICAgIC8vIFRPRE86IFZhcmlhYmxlIHNoYWRvd2luZ1xuICAgIGNvbnN0IHZTbG90RXhwVmFyaWFibGVTaGFkb3dpbmdJZGVudGlmaWVyczogc3RyaW5nW10gPSBbXVxuXG4gICAgY29uc3QgdkZvck5vZGUgPSBkaXJlY3RpdmVQcm9wcy5maW5kKG5vZGUgPT4gbm9kZS5uYW1lID09PSAnZm9yJylcbiAgICBjb25zdCB2Rm9ySWRlbnRpZmllcnNcbiAgICAgID0gdkZvck5vZGU/LmV4cD8udHlwZSA9PT0gTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OXG4gICAgICAgID8gZ2V0RnJlZVZhcmlhYmxlc0ZvclRleHQoXG4gICAgICAgICAgdkZvck5vZGUuZXhwLmNvbnRlbnQucmVwbGFjZSgvXi4qXFxzKD86aW58b2YpXFxzLywgJycpLFxuICAgICAgICApXG4gICAgICAgIDogW11cbiAgICAvLyBUT0RPOiBWYXJpYWJsZSBzaGFkb3dpbmdcbiAgICBjb25zdCB2Rm9yRXhwVmFyaWFibGVTaGFkb3dpbmdJZGVudGlmaWVyczogc3RyaW5nW10gPSBbXVxuXG4gICAgY29uc3QgcHJvcHMgPSBkaXJlY3RpdmVQcm9wc1xuICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IG5hbWUgIT09ICdzbG90JyAmJiBuYW1lICE9PSAnZm9yJylcbiAgICAgIC5mbGF0TWFwKGdldEZyZWVWYXJpYWJsZXNGb3JQcm9wc05vZGUpXG5cbiAgICBjb25zdCBzaGFkb3dpbmdJZGVudGlmaWVycyA9IG5ldyBTZXQoW1xuICAgICAgLi4udlNsb3RFeHBWYXJpYWJsZVNoYWRvd2luZ0lkZW50aWZpZXJzLFxuICAgICAgLi4udkZvckV4cFZhcmlhYmxlU2hhZG93aW5nSWRlbnRpZmllcnMsXG4gICAgXSlcbiAgICByZXR1cm4gW1xuICAgICAgLi4udlNsb3RBcmdJZGVudGlmaWVycyxcbiAgICAgIHJlZklkZW50aWZpZXIsXG4gICAgICAuLi52Rm9ySWRlbnRpZmllcnMsXG4gICAgICAuLi5bLi4uY2hpbGRyZW4sIC4uLnByb3BzXS5maWx0ZXIoeCA9PiAhc2hhZG93aW5nSWRlbnRpZmllcnMuaGFzKHgpKSxcbiAgICBdLmZpbHRlcihub3ROdWxsaXNoKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLkZPUikge1xuICAgIC8vIElmIHdlIHVzZSBgYmFzZUNvbXBpbGVyYCwgd2UgbmVlZCBhZGQgdmFyaWFibGUgc2hhZG93aW5nIGhlcmVcbiAgICAvLyBCdXQgd2UgdXNlIGBiYXNlUGFyc2VgIG5vdy4gU28gdGhpcyBicmFuY2ggd2lsbCBuZXZlciBiZSByZWFjaGVkLlxuICAgIC8vIGBOb2RlVHlwZXMuSUZgIGFuZCBgTm9kZVR5cGVzLklGX0JSQU5DSGAgd2lsbCBuZXZlciBiZSByZWFjaGVkLCBhbHNvLlxuXG4gICAgLy8gY29uc3QgeyBrZXlBbGlhcywgdmFsdWVBbGlhcyB9ID0gbm9kZVxuICAgIHJldHVybiBbbm9kZS5zb3VyY2UsIC4uLm5vZGUuY2hpbGRyZW5dLmZsYXRNYXAoZ2V0RnJlZVZhcmlhYmxlc0Zvck5vZGUpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuSUYpIHtcbiAgICByZXR1cm4gKG5vZGUuYnJhbmNoZXMgPz8gW10pLmZsYXRNYXAoZ2V0RnJlZVZhcmlhYmxlc0Zvck5vZGUpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuSUZfQlJBTkNIKSB7XG4gICAgcmV0dXJuIFtub2RlLmNvbmRpdGlvbiwgLi4ubm9kZS5jaGlsZHJlbl1cbiAgICAgIC5maWx0ZXIobm90TnVsbGlzaClcbiAgICAgIC5mbGF0TWFwKGdldEZyZWVWYXJpYWJsZXNGb3JOb2RlKVxuICB9XG4gIGVsc2UgaWYgKFxuICAgIG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLlRFWFRcbiAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5DT01NRU5UXG4gICAgfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuVEVYVF9DQUxMXG4gICkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIGVsc2Uge1xuICAgIGV4aGF1c3RpdmVDaGVja1JldHVyblVuZGVmaW5lZChub2RlKVxuICAgIHJldHVybiBbXVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUmVmZXJlbmNlc0ZvclNGQyhcbiAgdGVtcGxhdGVOb2RlOiBSb290Tm9kZSB8IFBsYWluRWxlbWVudE5vZGUgfCB1bmRlZmluZWQsXG4pIHtcbiAgY29uc3QgY29tcG9uZW50cyA9IHRlbXBsYXRlTm9kZT8uY2hpbGRyZW4uZmxhdE1hcChnZXRDb21wb25lbnRzKSA/PyBbXVxuICBjb25zdCBkaXJlY3RpdmVzID0gdGVtcGxhdGVOb2RlPy5jaGlsZHJlbi5mbGF0TWFwKGdldERpcmVjdGl2ZU5hbWVzKSA/PyBbXVxuICBjb25zdCBpZGVudGlmaWVyc1xuICAgID0gdGVtcGxhdGVOb2RlPy5jaGlsZHJlbi5mbGF0TWFwKGdldEZyZWVWYXJpYWJsZXNGb3JOb2RlKSA/PyBbXVxuXG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50cyxcbiAgICBkaXJlY3RpdmVzLFxuICAgIGlkZW50aWZpZXJzLFxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEJhYmVsUGFyc2VyT3B0aW9ucyhsYW5nOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gIGxhbmcgPSBsYW5nIHx8ICdqcydcbiAgY29uc3QgcGx1Z2luc0RpY3Q6IFJlY29yZDxzdHJpbmcsIEFycmF5PFBhcnNlclBsdWdpbj4+ID0ge1xuICAgIGpzOiBbXSxcbiAgICB0czogWyd0eXBlc2NyaXB0J10sXG4gICAganN4OiBbJ2pzeCddLFxuICAgIHRzeDogWydqc3gnLCAndHlwZXNjcmlwdCddLFxuICB9XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW5zRGljdFtsYW5nXVxuICBpZiAocGx1Z2lucyA9PT0gdW5kZWZpbmVkKVxuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgc2NyaXB0IGxhbmd1YWdlOiAke2xhbmd9YClcbiAgcmV0dXJuIHtcbiAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJyBhcyBjb25zdCxcbiAgICBwbHVnaW5zLFxuICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VTRkMoXG4gIGNvZGU6IHN0cmluZyxcbiAgaWQ/OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBTY3JpcHRTZXR1cFRyYW5zZm9ybU9wdGlvbnMsXG4pOiBQcm9taXNlPFBhcnNlZFNGQz4ge1xuICBjb25zdCBlbGVtZW50Q2hpbGRyZW4gPSBiYXNlUGFyc2UoY29kZSwgcGFyc2VyT3B0aW9ucykuY2hpbGRyZW4uZmxhdE1hcCh4ID0+XG4gICAgeC50eXBlID09PSBOb2RlVHlwZXMuRUxFTUVOVCAmJiB4LnRhZ1R5cGUgPT09IEVsZW1lbnRUeXBlcy5FTEVNRU5UXG4gICAgICA/IFt4XVxuICAgICAgOiBbXSxcbiAgKVxuICBjb25zdCB0ZW1wbGF0ZU5vZGUgPSBlbGVtZW50Q2hpbGRyZW4uZmluZCh4ID0+IHgudGFnID09PSAndGVtcGxhdGUnKVxuXG4gIGNvbnN0IFtzY3JpcHRTZXR1cENoaWxkTm9kZXMsIHNjcmlwdENoaWxkTm9kZXNdID0gcGFydGl0aW9uKFxuICAgIGVsZW1lbnRDaGlsZHJlbi5maWx0ZXIoeCA9PiB4LnRhZyA9PT0gJ3NjcmlwdCcpLFxuICAgIHggPT4geC5wcm9wcy5zb21lKHAgPT4gcC50eXBlID09PSBOb2RlVHlwZXMuQVRUUklCVVRFICYmIHAubmFtZSA9PT0gJ3NldHVwJyksXG4gIClcblxuICBjb25zdCBnZXRTY3JpcHRUYWdNZXRhID0gKFxuICAgIG46IFBsYWluRWxlbWVudE5vZGUgfCB1bmRlZmluZWQsXG4gICAgYXN0VHJhbnNmb3JtczogKGFzdDogUHJvZ3JhbSkgPT4gUHJvZ3JhbSA9IHggPT4geCxcbiAgKTogU2NyaXB0VGFnTWV0YSA9PiB7XG4gICAgaWYgKG4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29udGVudCA9ICcnXG4gICAgICBjb25zdCBhc3QgPSBwYXJzZShjb250ZW50LCB7XG4gICAgICAgIHNvdXJjZVR5cGU6ICdtb2R1bGUnLFxuICAgICAgICBwbHVnaW5zOiBbXSxcbiAgICAgIH0pLnByb2dyYW1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICBlbmQ6IDAsXG4gICAgICAgIGNvbnRlbnRTdGFydDogMCxcbiAgICAgICAgY29udGVudEVuZDogMCxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgYXR0cnM6IHt9LFxuICAgICAgICBmb3VuZDogZmFsc2UsXG4gICAgICAgIGFzdCxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXR0cnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBuLnByb3BzLmZsYXRNYXAoeCA9PlxuICAgICAgICAhKFxuICAgICAgICAgIHgudHlwZSA9PT0gTm9kZVR5cGVzLkFUVFJJQlVURSAmJiB0eXBlb2YgeC52YWx1ZT8uY29udGVudCA9PT0gJ3N0cmluZydcbiAgICAgICAgKVxuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IFtbeC5uYW1lLCB4LnZhbHVlLmNvbnRlbnRdXSxcbiAgICAgICksXG4gICAgKVxuICAgIGNvbnN0IGNvbnRlbnQgPSBuLmNoaWxkcmVuWzBdPy5sb2Muc291cmNlID8/ICcnXG4gICAgY29uc3QgY29udGVudFN0YXJ0ID0gbi5jaGlsZHJlblswXT8ubG9jLnN0YXJ0Lm9mZnNldCA/PyAwXG4gICAgY29uc3QgY29udGVudEVuZCA9IG4uY2hpbGRyZW5bMF0/LmxvYy5lbmQub2Zmc2V0ID8/IDBcbiAgICBjb25zdCBhc3QgPSBhc3RUcmFuc2Zvcm1zKFxuICAgICAgcGFyc2UoY29udGVudCwgZ2V0QmFiZWxQYXJzZXJPcHRpb25zKGF0dHJzLmxhbmcpKS5wcm9ncmFtLFxuICAgIClcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG4ubG9jLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZDogbi5sb2MuZW5kLm9mZnNldCxcbiAgICAgIGNvbnRlbnRTdGFydCxcbiAgICAgIGNvbnRlbnRFbmQsXG4gICAgICBjb250ZW50LFxuICAgICAgYXR0cnMsXG4gICAgICBmb3VuZDogdHJ1ZSxcbiAgICAgIGFzdCxcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2NyaXB0U2V0dXAgPSBnZXRTY3JpcHRUYWdNZXRhKFxuICAgIHNjcmlwdFNldHVwQ2hpbGROb2Rlc1swXSxcbiAgICBvcHRpb25zPy5hc3RUcmFuc2Zvcm1zPy5zY3JpcHRTZXR1cCxcbiAgKVxuICBjb25zdCBzY3JpcHQgPSBnZXRTY3JpcHRUYWdNZXRhKFxuICAgIHNjcmlwdENoaWxkTm9kZXNbMF0sXG4gICAgb3B0aW9ucz8uYXN0VHJhbnNmb3Jtcz8uc2NyaXB0LFxuICApXG5cbiAgaWYgKFxuICAgIHNjcmlwdC5mb3VuZFxuICAgICYmIHNjcmlwdFNldHVwLmZvdW5kXG4gICAgJiYgc2NyaXB0U2V0dXAuYXR0cnMubGFuZyAhPT0gc2NyaXB0LmF0dHJzLmxhbmdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgJzxzY3JpcHQgc2V0dXA+IGxhbmd1YWdlIG11c3QgYmUgdGhlIHNhbWUgYXMgPHNjcmlwdD4nLFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNvZGVPZlRlbXBsYXRlXG4gICAgPSB0ZW1wbGF0ZU5vZGUgPT0gbnVsbFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGVtcGxhdGVOb2RlLnByb3BzLnNvbWUoXG4gICAgICAgIHAgPT5cbiAgICAgICAgICBwLnR5cGUgPT09IE5vZGVUeXBlcy5BVFRSSUJVVEVcbiAgICAgICAgICAgICYmIHAubmFtZSA9PT0gJ2xhbmcnXG4gICAgICAgICAgICAmJiBwLnZhbHVlPy50eXBlID09PSBOb2RlVHlwZXMuVEVYVFxuICAgICAgICAgICAgJiYgcC52YWx1ZS5jb250ZW50ID09PSAncHVnJyxcbiAgICAgIClcbiAgICAgICAgPyBiYXNlUGFyc2UoXG4gICAgICAgICAgKGF3YWl0IGltcG9ydCgncHVnJykpLmNvbXBpbGUoXG4gICAgICAgICAgICB0ZW1wbGF0ZU5vZGUuY2hpbGRyZW4ubWFwKHggPT4geC5sb2Muc291cmNlKS5qb2luKCcnKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmlsZW5hbWU6IGlkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApKCksXG4gICAgICAgICAgcGFyc2VyT3B0aW9ucyxcbiAgICAgICAgKVxuICAgICAgICA6IHRlbXBsYXRlTm9kZVxuXG4gIGNvbnN0IHJlc3VsdCA9IGNvZGVPZlRlbXBsYXRlXG4gICAgPyBmaW5kUmVmZXJlbmNlc0ZvclNGQyhjb2RlT2ZUZW1wbGF0ZSlcbiAgICA6IHVuZGVmaW5lZFxuXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIGNvbXBvbmVudHM6IG5ldyBTZXQocmVzdWx0Py5jb21wb25lbnRzLm1hcChwYXNjYWxpemUpKSxcbiAgICAgIGRpcmVjdGl2ZXM6IG5ldyBTZXQoXG4gICAgICAgIHJlc3VsdD8uZGlyZWN0aXZlc1xuICAgICAgICAgIC5maWx0ZXIoeCA9PiAhQlVJTERfSU5fRElSRUNUSVZFUy5oYXMoeCkpXG4gICAgICAgICAgLm1hcChjYW1lbGl6ZSksXG4gICAgICApLFxuICAgICAgaWRlbnRpZmllcnM6IG5ldyBTZXQocmVzdWx0Py5pZGVudGlmaWVycyksXG4gICAgfSxcbiAgICBzY3JpcHRTZXR1cCxcbiAgICBzY3JpcHQsXG4gICAgcGFyc2VyT3B0aW9uczogZ2V0QmFiZWxQYXJzZXJPcHRpb25zKFxuICAgICAgc2NyaXB0LmF0dHJzLmxhbmcgPz8gc2NyaXB0U2V0dXAuYXR0cnMubGFuZyxcbiAgICApLFxuICAgIGV4dHJhRGVjbGFyYXRpb25zOiBbXSxcbiAgfVxufVxuIiwiLy8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLW5leHQvYmxvYi9tYWluL3BhY2thZ2VzL2NvbXBpbGVyLXNmYy9zcmMvY29tcGlsZVNjcmlwdC50c1xuXG5pbXBvcnQgdHlwZSB7XG4gIENhbGxFeHByZXNzaW9uLFxuICBOb2RlLFxuICBPYmplY3RFeHByZXNzaW9uLFxuICBPYmplY3RQcm9wZXJ0eSxcbiAgU3RhdGVtZW50LFxuICBUU0Z1bmN0aW9uVHlwZSxcbiAgVFNJbnRlcmZhY2VCb2R5LFxuICBUU1R5cGUsXG4gIFRTVHlwZUxpdGVyYWwsXG59IGZyb20gJ0BiYWJlbC90eXBlcydcbmltcG9ydCB7IHBhcnNlRXhwcmVzc2lvbiwgdCB9IGZyb20gJy4vYmFiZWwnXG5cbi8vIFNwZWNpYWwgY29tcGlsZXIgbWFjcm9zXG5jb25zdCBERUZJTkVfUFJPUFMgPSAnZGVmaW5lUHJvcHMnXG5jb25zdCBERUZJTkVfRU1JVFMgPSAnZGVmaW5lRW1pdHMnXG5jb25zdCBERUZJTkVfRVhQT1NFID0gJ2RlZmluZUV4cG9zZSdcbmNvbnN0IFdJVEhfREVGQVVMVFMgPSAnd2l0aERlZmF1bHRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BUeXBlRGF0YSB7XG4gIGtleTogc3RyaW5nXG4gIHR5cGU6IHN0cmluZ1tdIHwgc3RyaW5nXG4gIHJlcXVpcmVkOiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1hY3Jvcyhub2RlczogU3RhdGVtZW50W10pIHtcbiAgbGV0IGhhc0RlZmluZVByb3BzQ2FsbCA9IGZhbHNlXG4gIGxldCBoYXNEZWZpbmVFbWl0Q2FsbCA9IGZhbHNlXG4gIGxldCBwcm9wc1J1bnRpbWVEZWNsOiBOb2RlIHwgdW5kZWZpbmVkXG4gIGxldCBwcm9wc1J1bnRpbWVEZWZhdWx0czogTm9kZSB8IHVuZGVmaW5lZFxuICBsZXQgcHJvcHNUeXBlRGVjbDogVFNUeXBlTGl0ZXJhbCB8IFRTSW50ZXJmYWNlQm9keSB8IHVuZGVmaW5lZFxuICBsZXQgcHJvcHNUeXBlRGVjbFJhdzogTm9kZSB8IHVuZGVmaW5lZFxuICBsZXQgZW1pdHNSdW50aW1lRGVjbDogTm9kZSB8IHVuZGVmaW5lZFxuICBsZXQgZW1pdHNUeXBlRGVjbDpcbiAgfCBUU0Z1bmN0aW9uVHlwZVxuICB8IFRTVHlwZUxpdGVyYWxcbiAgfCBUU0ludGVyZmFjZUJvZHlcbiAgfCB1bmRlZmluZWRcbiAgbGV0IGVtaXRzVHlwZURlY2xSYXc6IE5vZGUgfCB1bmRlZmluZWRcbiAgbGV0IGV4cG9zZURlY2w6IENhbGxFeHByZXNzaW9uWydhcmd1bWVudHMnXVtudW1iZXJdIHwgdW5kZWZpbmVkXG5cbiAgLy8gcHJvcHMvZW1pdHMgZGVjbGFyZWQgdmlhIHR5cGVzXG4gIGNvbnN0IHR5cGVEZWNsYXJlZFByb3BzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wVHlwZURhdGE+ID0ge31cbiAgLy8gcmVjb3JkIGRlY2xhcmVkIHR5cGVzIGZvciBydW50aW1lIHByb3BzIHR5cGUgZ2VuZXJhdGlvblxuICBjb25zdCBkZWNsYXJlZFR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fVxuXG4gIGZ1bmN0aW9uIGVycm9yKFxuICAgIG1zZzogc3RyaW5nLFxuXG4gICAgX25vZGU6IE5vZGUsXG4gICk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0RlZmluZVByb3BzKG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzQ2FsbE9mKG5vZGUsIERFRklORV9QUk9QUykpXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIGlmIChoYXNEZWZpbmVQcm9wc0NhbGwpXG4gICAgICBlcnJvcihgZHVwbGljYXRlICR7REVGSU5FX1BST1BTfSgpIGNhbGxgLCBub2RlKVxuXG4gICAgaGFzRGVmaW5lUHJvcHNDYWxsID0gdHJ1ZVxuXG4gICAgcHJvcHNSdW50aW1lRGVjbCA9IG5vZGUuYXJndW1lbnRzWzBdXG5cbiAgICAvLyBjYWxsIGhhcyB0eXBlIHBhcmFtZXRlcnMgLSBpbmZlciBydW50aW1lIHR5cGVzIGZyb20gaXRcbiAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVycykge1xuICAgICAgaWYgKHByb3BzUnVudGltZURlY2wpIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgYCR7REVGSU5FX1BST1BTfSgpIGNhbm5vdCBhY2NlcHQgYm90aCB0eXBlIGFuZCBub24tdHlwZSBhcmd1bWVudHMgYFxuICAgICAgICAgICAgKyAnYXQgdGhlIHNhbWUgdGltZS4gVXNlIG9uZSBvciB0aGUgb3RoZXIuJyxcbiAgICAgICAgICBub2RlLFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHByb3BzVHlwZURlY2xSYXcgPSBub2RlLnR5cGVQYXJhbWV0ZXJzLnBhcmFtc1swXVxuICAgICAgcHJvcHNUeXBlRGVjbCA9IHJlc29sdmVRdWFsaWZpZWRUeXBlKFxuICAgICAgICBwcm9wc1R5cGVEZWNsUmF3LFxuICAgICAgICBub2RlID0+IG5vZGUudHlwZSA9PT0gJ1RTVHlwZUxpdGVyYWwnLFxuICAgICAgKSBhcyBUU1R5cGVMaXRlcmFsIHwgVFNJbnRlcmZhY2VCb2R5IHwgdW5kZWZpbmVkXG5cbiAgICAgIGlmICghcHJvcHNUeXBlRGVjbCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBgdHlwZSBhcmd1bWVudCBwYXNzZWQgdG8gJHtERUZJTkVfUFJPUFN9KCkgbXVzdCBiZSBhIGxpdGVyYWwgdHlwZSwgYFxuICAgICAgICAgICAgKyAnb3IgYSByZWZlcmVuY2UgdG8gYW4gaW50ZXJmYWNlIG9yIGxpdGVyYWwgdHlwZS4nLFxuICAgICAgICAgIHByb3BzVHlwZURlY2xSYXcsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc1dpdGhEZWZhdWx0cyhub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc0NhbGxPZihub2RlLCBXSVRIX0RFRkFVTFRTKSlcbiAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKHByb2Nlc3NEZWZpbmVQcm9wcyhub2RlLmFyZ3VtZW50c1swXSkpIHtcbiAgICAgIGlmIChwcm9wc1J1bnRpbWVEZWNsKSB7XG4gICAgICAgIGVycm9yKFxuICAgICAgICAgIGAke1dJVEhfREVGQVVMVFN9IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0eXBlLWJhc2VkIGBcbiAgICAgICAgICAgICsgYCR7REVGSU5FX1BST1BTfSBkZWNsYXJhdGlvbi5gLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHByb3BzUnVudGltZURlZmF1bHRzID0gbm9kZS5hcmd1bWVudHNbMV1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlcnJvcihcbiAgICAgICAgYCR7V0lUSF9ERUZBVUxUU30nIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSAke0RFRklORV9QUk9QU30gY2FsbC5gLFxuICAgICAgICBub2RlLmFyZ3VtZW50c1swXSB8fCBub2RlLFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0RlZmluZUVtaXRzKG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzQ2FsbE9mKG5vZGUsIERFRklORV9FTUlUUykpXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIGlmIChoYXNEZWZpbmVFbWl0Q2FsbClcbiAgICAgIGVycm9yKGBkdXBsaWNhdGUgJHtERUZJTkVfRU1JVFN9KCkgY2FsbGAsIG5vZGUpXG5cbiAgICBoYXNEZWZpbmVFbWl0Q2FsbCA9IHRydWVcbiAgICBlbWl0c1J1bnRpbWVEZWNsID0gbm9kZS5hcmd1bWVudHNbMF1cbiAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVycykge1xuICAgICAgaWYgKGVtaXRzUnVudGltZURlY2wpIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgYCR7REVGSU5FX0VNSVRTfSgpIGNhbm5vdCBhY2NlcHQgYm90aCB0eXBlIGFuZCBub24tdHlwZSBhcmd1bWVudHMgYFxuICAgICAgICAgICAgKyAnYXQgdGhlIHNhbWUgdGltZS4gVXNlIG9uZSBvciB0aGUgb3RoZXIuJyxcbiAgICAgICAgICBub2RlLFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGVtaXRzVHlwZURlY2xSYXcgPSBub2RlLnR5cGVQYXJhbWV0ZXJzLnBhcmFtc1swXVxuICAgICAgZW1pdHNUeXBlRGVjbCA9IHJlc29sdmVRdWFsaWZpZWRUeXBlKFxuICAgICAgICBlbWl0c1R5cGVEZWNsUmF3LFxuICAgICAgICBub2RlID0+IG5vZGUudHlwZSA9PT0gJ1RTRnVuY3Rpb25UeXBlJyB8fCBub2RlLnR5cGUgPT09ICdUU1R5cGVMaXRlcmFsJyxcbiAgICAgICkgYXMgVFNGdW5jdGlvblR5cGUgfCBUU1R5cGVMaXRlcmFsIHwgVFNJbnRlcmZhY2VCb2R5IHwgdW5kZWZpbmVkXG5cbiAgICAgIGlmICghZW1pdHNUeXBlRGVjbCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBgdHlwZSBhcmd1bWVudCBwYXNzZWQgdG8gJHtERUZJTkVfRU1JVFN9KCkgbXVzdCBiZSBhIGZ1bmN0aW9uIHR5cGUsIGBcbiAgICAgICAgICAgICsgJ2EgbGl0ZXJhbCB0eXBlIHdpdGggY2FsbCBzaWduYXR1cmVzLCBvciBhIHJlZmVyZW5jZSB0byB0aGUgYWJvdmUgdHlwZXMuJyxcbiAgICAgICAgICBlbWl0c1R5cGVEZWNsUmF3LFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlUXVhbGlmaWVkVHlwZShcbiAgICBub2RlOiBOb2RlLFxuICAgIHF1YWxpZmllcjogKG5vZGU6IE5vZGUpID0+IGJvb2xlYW4sXG4gICkge1xuICAgIGlmIChxdWFsaWZpZXIobm9kZSkpXG4gICAgICByZXR1cm4gbm9kZVxuXG4gICAgaWYgKFxuICAgICAgbm9kZS50eXBlID09PSAnVFNUeXBlUmVmZXJlbmNlJ1xuICAgICAgJiYgbm9kZS50eXBlTmFtZS50eXBlID09PSAnSWRlbnRpZmllcidcbiAgICApIHtcbiAgICAgIGNvbnN0IHJlZk5hbWUgPSBub2RlLnR5cGVOYW1lLm5hbWVcbiAgICAgIGNvbnN0IGlzUXVhbGlmaWVkVHlwZSA9IChub2RlOiBOb2RlKTogTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJ1xuICAgICAgICAgICYmIG5vZGUuaWQubmFtZSA9PT0gcmVmTmFtZVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIG5vZGUuYm9keVxuXG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIG5vZGUudHlwZSA9PT0gJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nXG4gICAgICAgICAgJiYgbm9kZS5pZC5uYW1lID09PSByZWZOYW1lXG4gICAgICAgICAgJiYgcXVhbGlmaWVyKG5vZGUudHlwZUFubm90YXRpb24pXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbm9kZS50eXBlQW5ub3RhdGlvblxuXG4gICAgICAgIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb24pXG4gICAgICAgICAgcmV0dXJuIGlzUXVhbGlmaWVkVHlwZShub2RlLmRlY2xhcmF0aW9uKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgY29uc3QgcXVhbGlmaWVkID0gaXNRdWFsaWZpZWRUeXBlKG5vZGUpXG4gICAgICAgIGlmIChxdWFsaWZpZWQpXG4gICAgICAgICAgcmV0dXJuIHF1YWxpZmllZFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NEZWZpbmVFeHBvc2Uobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNDYWxsT2Yobm9kZSwgREVGSU5FX0VYUE9TRSkpXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIGlmIChleHBvc2VEZWNsKVxuICAgICAgZXJyb3IoYGR1cGxpY2F0ZSAke0RFRklORV9FWFBPU0V9KCkgY2FsbGAsIG5vZGUpXG5cbiAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoICE9PSAxKVxuICAgICAgZXJyb3IoYCR7REVGSU5FX0VYUE9TRX0oKSByZXF1aXJlcyBvbmUgYXJndW1lbnRgLCBub2RlKVxuXG4gICAgZXhwb3NlRGVjbCA9IG5vZGUuYXJndW1lbnRzWzBdXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuUnVudGltZVByb3BzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wVHlwZURhdGE+KSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKVxuICAgIGlmICgha2V5cy5sZW5ndGgpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAvLyBjaGVjayBkZWZhdWx0cy4gSWYgdGhlIGRlZmF1bHQgb2JqZWN0IGlzIGFuIG9iamVjdCBsaXRlcmFsIHdpdGggb25seVxuICAgIC8vIHN0YXRpYyBwcm9wZXJ0aWVzLCB3ZSBjYW4gZGlyZWN0bHkgZ2VuZXJhdGUgbW9yZSBvcHRpbXppZWQgZGVmYXVsdFxuICAgIC8vIGRlY2FscmF0aW9ucy4gT3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSB0byBmYWxsYmFjayB0byBydW50aW1lIG1lcmdpbmcuXG4gICAgY29uc3QgaGFzU3RhdGljRGVmYXVsdHMgPSBwcm9wc1J1bnRpbWVEZWZhdWx0c1xuICAgICAgJiYgcHJvcHNSdW50aW1lRGVmYXVsdHMudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nXG4gICAgICAmJiBwcm9wc1J1bnRpbWVEZWZhdWx0cy5wcm9wZXJ0aWVzLmV2ZXJ5KFxuICAgICAgICBub2RlID0+IG5vZGUudHlwZSA9PT0gJ09iamVjdFByb3BlcnR5JyAmJiAhbm9kZS5jb21wdXRlZCxcbiAgICAgIClcblxuICAgIHJldHVybiB0Lm9iamVjdEV4cHJlc3Npb24oXG4gICAgICBPYmplY3QuZW50cmllcyhwcm9wcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgcHJvcCA9IGhhc1N0YXRpY0RlZmF1bHRzXG4gICAgICAgICAgPyAocHJvcHNSdW50aW1lRGVmYXVsdHMgYXMgT2JqZWN0RXhwcmVzc2lvbikucHJvcGVydGllcy5maW5kKChub2RlOiBhbnkpID0+IG5vZGUua2V5Lm5hbWUgPT09IGtleSkgYXMgT2JqZWN0UHJvcGVydHlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgIGlmIChwcm9wKVxuICAgICAgICAgIHZhbHVlLnJlcXVpcmVkID0gZmFsc2VcblxuICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBrZXkgPT09ICd0eXBlJ1xuICAgICAgICAgID8gdC5vYmplY3RQcm9wZXJ0eSh0LmlkZW50aWZpZXIoa2V5KSwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHQuaWRlbnRpZmllcih2YWx1ZSkgOiB0LmFycmF5RXhwcmVzc2lvbih2YWx1ZS5tYXAoKGk6IGFueSkgPT4gdC5pZGVudGlmaWVyKGkpKSkgYXMgYW55KVxuICAgICAgICAgIDogdC5vYmplY3RQcm9wZXJ0eSh0LmlkZW50aWZpZXIoa2V5KSwgcGFyc2VFeHByZXNzaW9uKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkgYXMgYW55KSxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChwcm9wKVxuICAgICAgICAgIGVudHJpZXMucHVzaCh0Lm9iamVjdFByb3BlcnR5KHQuaWRlbnRpZmllcignZGVmYXVsdCcpLCBwcm9wLnZhbHVlIGFzIGFueSkpXG5cbiAgICAgICAgcmV0dXJuIHQub2JqZWN0UHJvcGVydHkoXG4gICAgICAgICAgdC5pZGVudGlmaWVyKGtleSksXG4gICAgICAgICAgdC5vYmplY3RFeHByZXNzaW9uKGVudHJpZXMpLFxuICAgICAgICApXG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiBnZXRQcm9wcygpIHtcbiAgICBpZiAocHJvcHNSdW50aW1lRGVjbClcbiAgICAgIHJldHVybiBwcm9wc1J1bnRpbWVEZWNsXG5cbiAgICBpZiAocHJvcHNUeXBlRGVjbCkge1xuICAgICAgZXh0cmFjdFJ1bnRpbWVQcm9wcyhwcm9wc1R5cGVEZWNsLCB0eXBlRGVjbGFyZWRQcm9wcywgZGVjbGFyZWRUeXBlcylcbiAgICAgIHJldHVybiBnZW5SdW50aW1lUHJvcHModHlwZURlY2xhcmVkUHJvcHMpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGhyb3dJZkF3YWl0KG5vZGU6IE5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAnQXdhaXRFeHByZXNzaW9uJylcbiAgICAgIGVycm9yKCd0b3AtbGV2ZWwgYXdhaXQgaXMgbm90IHN1cHBvcnRlZCBpbiBWdWUgMicsIG5vZGUpXG4gIH1cblxuICBub2RlcyA9IG5vZGVzXG4gICAgLm1hcCgocmF3OiBOb2RlKSA9PiB7XG4gICAgICBsZXQgbm9kZSA9IHJhd1xuICAgICAgaWYgKHJhdy50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcpXG4gICAgICAgIG5vZGUgPSByYXcuZXhwcmVzc2lvblxuXG4gICAgICBpZiAobm9kZS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiYgIW5vZGUuZGVjbGFyZSkge1xuICAgICAgICBjb25zdCB0b3RhbCA9IG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkZWNsID0gbm9kZS5kZWNsYXJhdGlvbnNbaV1cbiAgICAgICAgICBpZiAoZGVjbC5pbml0KSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzc0RlZmluZUVtaXRzKGRlY2wuaW5pdCkpXG4gICAgICAgICAgICAgIGRlY2wuaW5pdCA9IHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoJ19fY3R4JyksIHQuaWRlbnRpZmllcignZW1pdCcpKSBhcyBhbnlcbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3NEZWZpbmVQcm9wcyhkZWNsLmluaXQpIHx8IHByb2Nlc3NXaXRoRGVmYXVsdHMoZGVjbC5pbml0KSlcbiAgICAgICAgICAgICAgZGVjbC5pbml0ID0gdC5pZGVudGlmaWVyKCdfX3Byb3BzJykgYXMgYW55XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRocm93SWZBd2FpdChkZWNsLmluaXQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzV2l0aERlZmF1bHRzKG5vZGUpIHx8IHByb2Nlc3NEZWZpbmVFbWl0cyhub2RlKSB8fCBwcm9jZXNzRGVmaW5lUHJvcHMobm9kZSkgfHwgcHJvY2Vzc0RlZmluZUV4cG9zZShub2RlKSlcbiAgICAgICAgcmV0dXJuIG51bGxcblxuICAgICAgdGhyb3dJZkF3YWl0KG5vZGUpXG5cbiAgICAgIHJldHVybiByYXdcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgU3RhdGVtZW50W11cblxuICByZXR1cm4ge1xuICAgIG5vZGVzLFxuICAgIHByb3BzOiBnZXRQcm9wcygpLFxuICAgIGV4cG9zZTogZXhwb3NlRGVjbCxcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NhbGxPZihcbiAgbm9kZTogTm9kZSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHRlc3Q6IHN0cmluZyB8ICgoaWQ6IHN0cmluZykgPT4gYm9vbGVhbiksXG4pOiBub2RlIGlzIENhbGxFeHByZXNzaW9uIHtcbiAgcmV0dXJuICEhKFxuICAgIG5vZGVcbiAgICAmJiBub2RlLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAmJiBub2RlLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcidcbiAgICAmJiAodHlwZW9mIHRlc3QgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vZGUuY2FsbGVlLm5hbWUgPT09IHRlc3RcbiAgICAgIDogdGVzdChub2RlLmNhbGxlZS5uYW1lKSlcbiAgKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0UnVudGltZVByb3BzKFxuICBub2RlOiBUU1R5cGVMaXRlcmFsIHwgVFNJbnRlcmZhY2VCb2R5LFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgUHJvcFR5cGVEYXRhPixcbiAgZGVjbGFyZWRUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+LFxuKSB7XG4gIGNvbnN0IG1lbWJlcnMgPSBub2RlLnR5cGUgPT09ICdUU1R5cGVMaXRlcmFsJyA/IG5vZGUubWVtYmVycyA6IG5vZGUuYm9keVxuICBmb3IgKGNvbnN0IG0gb2YgbWVtYmVycykge1xuICAgIGlmIChcbiAgICAgIChtLnR5cGUgPT09ICdUU1Byb3BlcnR5U2lnbmF0dXJlJyB8fCBtLnR5cGUgPT09ICdUU01ldGhvZFNpZ25hdHVyZScpXG4gICAgICAmJiBtLmtleS50eXBlID09PSAnSWRlbnRpZmllcidcbiAgICApIHtcbiAgICAgIGxldCB0eXBlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKG0udHlwZSA9PT0gJ1RTTWV0aG9kU2lnbmF0dXJlJykge1xuICAgICAgICB0eXBlID0gWydGdW5jdGlvbiddXG4gICAgICB9XG4gICAgICBlbHNlIGlmIChtLnR5cGVBbm5vdGF0aW9uKSB7XG4gICAgICAgIHR5cGUgPSBpbmZlclJ1bnRpbWVUeXBlKFxuICAgICAgICAgIG0udHlwZUFubm90YXRpb24udHlwZUFubm90YXRpb24sXG4gICAgICAgICAgZGVjbGFyZWRUeXBlcyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcHJvcHNbbS5rZXkubmFtZV0gPSB7XG4gICAgICAgIGtleTogbS5rZXkubmFtZSxcbiAgICAgICAgcmVxdWlyZWQ6ICFtLm9wdGlvbmFsLFxuICAgICAgICB0eXBlOiB0eXBlPy5sZW5ndGggPT09IDEgPyB0eXBlWzBdIDogdHlwZSB8fCAnbnVsbCcsXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluZmVyUnVudGltZVR5cGUoXG4gIG5vZGU6IFRTVHlwZSxcbiAgZGVjbGFyZWRUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+LFxuKTogc3RyaW5nW10ge1xuICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgIGNhc2UgJ1RTU3RyaW5nS2V5d29yZCc6XG4gICAgICByZXR1cm4gWydTdHJpbmcnXVxuICAgIGNhc2UgJ1RTTnVtYmVyS2V5d29yZCc6XG4gICAgICByZXR1cm4gWydOdW1iZXInXVxuICAgIGNhc2UgJ1RTQm9vbGVhbktleXdvcmQnOlxuICAgICAgcmV0dXJuIFsnQm9vbGVhbiddXG4gICAgY2FzZSAnVFNPYmplY3RLZXl3b3JkJzpcbiAgICAgIHJldHVybiBbJ09iamVjdCddXG4gICAgY2FzZSAnVFNUeXBlTGl0ZXJhbCc6XG4gICAgICAvLyBUT0RPIChuaWNlIHRvIGhhdmUpIGdlbmVyYXRlIHJ1bnRpbWUgcHJvcGVydHkgdmFsaWRhdGlvblxuICAgICAgcmV0dXJuIFsnT2JqZWN0J11cbiAgICBjYXNlICdUU0Z1bmN0aW9uVHlwZSc6XG4gICAgICByZXR1cm4gWydGdW5jdGlvbiddXG4gICAgY2FzZSAnVFNBcnJheVR5cGUnOlxuICAgIGNhc2UgJ1RTVHVwbGVUeXBlJzpcbiAgICAgIC8vIFRPRE8gKG5pY2UgdG8gaGF2ZSkgZ2VuZXJhdGUgcnVudGltZSBlbGVtZW50IHR5cGUvbGVuZ3RoIGNoZWNrc1xuICAgICAgcmV0dXJuIFsnQXJyYXknXVxuXG4gICAgY2FzZSAnVFNMaXRlcmFsVHlwZSc6XG4gICAgICBzd2l0Y2ggKG5vZGUubGl0ZXJhbC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZ0xpdGVyYWwnOlxuICAgICAgICAgIHJldHVybiBbJ1N0cmluZyddXG4gICAgICAgIGNhc2UgJ0Jvb2xlYW5MaXRlcmFsJzpcbiAgICAgICAgICByZXR1cm4gWydCb29sZWFuJ11cbiAgICAgICAgY2FzZSAnTnVtZXJpY0xpdGVyYWwnOlxuICAgICAgICBjYXNlICdCaWdJbnRMaXRlcmFsJzpcbiAgICAgICAgICByZXR1cm4gWydOdW1iZXInXVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBbJ251bGwnXVxuICAgICAgfVxuXG4gICAgY2FzZSAnVFNUeXBlUmVmZXJlbmNlJzpcbiAgICAgIGlmIChub2RlLnR5cGVOYW1lLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBpZiAoZGVjbGFyZWRUeXBlc1tub2RlLnR5cGVOYW1lLm5hbWVdKVxuICAgICAgICAgIHJldHVybiBkZWNsYXJlZFR5cGVzW25vZGUudHlwZU5hbWUubmFtZV1cblxuICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZU5hbWUubmFtZSkge1xuICAgICAgICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgICAgICBjYXNlICdGdW5jdGlvbic6XG4gICAgICAgICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgICAgICBjYXNlICdTZXQnOlxuICAgICAgICAgIGNhc2UgJ01hcCc6XG4gICAgICAgICAgY2FzZSAnV2Vha1NldCc6XG4gICAgICAgICAgY2FzZSAnV2Vha01hcCc6XG4gICAgICAgICAgICByZXR1cm4gW25vZGUudHlwZU5hbWUubmFtZV1cbiAgICAgICAgICBjYXNlICdSZWNvcmQnOlxuICAgICAgICAgIGNhc2UgJ1BhcnRpYWwnOlxuICAgICAgICAgIGNhc2UgJ1JlYWRvbmx5JzpcbiAgICAgICAgICBjYXNlICdQaWNrJzpcbiAgICAgICAgICBjYXNlICdPbWl0JzpcbiAgICAgICAgICBjYXNlICdFeGNsdWRlJzpcbiAgICAgICAgICBjYXNlICdFeHRyYWN0JzpcbiAgICAgICAgICBjYXNlICdSZXF1aXJlZCc6XG4gICAgICAgICAgY2FzZSAnSW5zdGFuY2VUeXBlJzpcbiAgICAgICAgICAgIHJldHVybiBbJ09iamVjdCddXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbJ251bGwnXVxuXG4gICAgY2FzZSAnVFNQYXJlbnRoZXNpemVkVHlwZSc6XG4gICAgICByZXR1cm4gaW5mZXJSdW50aW1lVHlwZShub2RlLnR5cGVBbm5vdGF0aW9uLCBkZWNsYXJlZFR5cGVzKVxuICAgIGNhc2UgJ1RTVW5pb25UeXBlJzpcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgW10uY29uY2F0KFxuICAgICAgICAgICAgLi4uKG5vZGUudHlwZXMubWFwKHQgPT4gaW5mZXJSdW50aW1lVHlwZSh0LCBkZWNsYXJlZFR5cGVzKSkgYXMgYW55KSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgXVxuICAgIGNhc2UgJ1RTSW50ZXJzZWN0aW9uVHlwZSc6XG4gICAgICByZXR1cm4gWydPYmplY3QnXVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbJ251bGwnXSAvLyBubyBydW50aW1lIGNoZWNrXG4gIH1cbn1cbiIsImltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAdnVlL3NoYXJlZCdcbmltcG9ydCB0eXBlIHsgTm9kZSwgT2JqZWN0RXhwcmVzc2lvbiwgU3RhdGVtZW50IH0gZnJvbSAnQGJhYmVsL3R5cGVzJ1xuaW1wb3J0IHsgbm90TnVsbGlzaCwgcGFydGl0aW9uLCB1bmlxIH0gZnJvbSAnQGFudGZ1L3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRTRkMsIFNjcmlwdFNldHVwVHJhbnNmb3JtT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgYXBwbHlNYWNyb3MgfSBmcm9tICcuL21hY3JvcydcbmltcG9ydCB7IGdldElkZW50aWZpZXJEZWNsYXJhdGlvbnMgfSBmcm9tICcuL2lkZW50aWZpZXJzJ1xuaW1wb3J0IHsgZ2VuZXJhdGUsIHQgfSBmcm9tICcuL2JhYmVsJ1xuaW1wb3J0IHsgcGFzY2FsaXplIH0gZnJvbSAnLi91dGlscydcblxuZnVuY3Rpb24gaXNBc3luY0ltcG9ydChub2RlOiBTdGF0ZW1lbnQpIHtcbiAgaWYgKHQuaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBub2RlLmRlY2xhcmF0aW9uc1swXVxuXG4gICAgcmV0dXJuIChcbiAgICAgIGRlY2xhcmF0aW9uICE9PSB1bmRlZmluZWRcbiAgICAgICYmIHQuaXNDYWxsRXhwcmVzc2lvbihkZWNsYXJhdGlvbi5pbml0KVxuICAgICAgJiYgdC5pc0lkZW50aWZpZXIoZGVjbGFyYXRpb24uaW5pdC5jYWxsZWUpXG4gICAgICAmJiBkZWNsYXJhdGlvbi5pbml0LmNhbGxlZS5uYW1lID09PSAnZGVmaW5lQXN5bmNDb21wb25lbnQnXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1TY3JpcHRTZXR1cChcbiAgc2ZjOiBQYXJzZWRTRkMsXG4gIG9wdGlvbnM/OiBTY3JpcHRTZXR1cFRyYW5zZm9ybU9wdGlvbnMsXG4pIHtcbiAgY29uc3QgeyBzY3JpcHRTZXR1cCwgc2NyaXB0LCB0ZW1wbGF0ZSB9ID0gc2ZjXG5cbiAgY29uc3QgeyBub2RlczogYm9keSwgcHJvcHMsIGV4cG9zZSB9ID0gYXBwbHlNYWNyb3Moc2NyaXB0U2V0dXAuYXN0LmJvZHkpXG5cbiAgY29uc3QgW2hvaXN0ZWQsIHNldHVwQm9keV0gPSBwYXJ0aXRpb24oXG4gICAgYm9keSxcbiAgICBuID0+XG4gICAgICBpc0FzeW5jSW1wb3J0KG4pXG4gICAgICB8fCB0LmlzSW1wb3J0RGVjbGFyYXRpb24obilcbiAgICAgIHx8IHQuaXNFeHBvcnROYW1lZERlY2xhcmF0aW9uKG4pXG4gICAgICB8fCBuLnR5cGUuc3RhcnRzV2l0aCgnVFMnKSxcbiAgKVxuXG4gIC8vIGdldCBhbGwgaWRlbnRpZmllcnMgaW4gYDxzY3JpcHQgc2V0dXA+YCBhbmQgYDxzY3JpcHQ+YFxuICBjb25zdCBkZWNsYXJhdGlvbkFycmF5ID0gdW5pcShbXG4gICAgLi4uZ2V0SWRlbnRpZmllckRlY2xhcmF0aW9ucyhob2lzdGVkKSxcbiAgICAuLi5nZXRJZGVudGlmaWVyRGVjbGFyYXRpb25zKHNldHVwQm9keSksXG4gICAgLi4uZ2V0SWRlbnRpZmllckRlY2xhcmF0aW9ucyhzY3JpcHQuYXN0LmJvZHkpLFxuICBdKS5maWx0ZXIobm90TnVsbGlzaClcblxuICAvLyBmaWx0ZXIgb3V0IGlkZW50aWZpZXJzIHRoYXQgYXJlIHVzZWQgaW4gYDx0ZW1wbGF0ZT5gXG4gIGNvbnN0IHJldHVybnM6IE9iamVjdEV4cHJlc3Npb25bJ3Byb3BlcnRpZXMnXSA9IGRlY2xhcmF0aW9uQXJyYXlcbiAgICAuZmlsdGVyKGkgPT4gdGVtcGxhdGUuaWRlbnRpZmllcnMuaGFzKGkpKVxuICAgIC5tYXAoKGkpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdC5pZGVudGlmaWVyKGkpXG4gICAgICByZXR1cm4gdC5vYmplY3RQcm9wZXJ0eShpZCwgaWQsIGZhbHNlLCB0cnVlKVxuICAgIH0pXG5cbiAgY29uc3QgY29tcG9uZW50cyA9IEFycmF5LmZyb20odGVtcGxhdGUuY29tcG9uZW50cylcbiAgICAubWFwKFxuICAgICAgY29tcG9uZW50ID0+XG4gICAgICAgIGRlY2xhcmF0aW9uQXJyYXkuZmluZChkZWNsYXJlID0+IGRlY2xhcmUgPT09IGNvbXBvbmVudClcbiAgICAgICAgPz8gZGVjbGFyYXRpb25BcnJheS5maW5kKGRlY2xhcmUgPT4gcGFzY2FsaXplKGRlY2xhcmUpID09PSBjb21wb25lbnQpLFxuICAgIClcbiAgICAuZmlsdGVyKG5vdE51bGxpc2gpXG5cbiAgY29uc3QgZGlyZWN0aXZlRGVjbGFyYXRpb24gPSBBcnJheS5mcm9tKHRlbXBsYXRlLmRpcmVjdGl2ZXMpXG4gICAgLm1hcCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICBjb25zdCBpZGVudGlmaWVyID0gZGVjbGFyYXRpb25BcnJheS5maW5kKFxuICAgICAgICBkZWNsYXJhdGlvbiA9PiBkZWNsYXJhdGlvbiA9PT0gYHYke2NhcGl0YWxpemUoZGlyZWN0aXZlKX1gLFxuICAgICAgKVxuICAgICAgaWYgKGlkZW50aWZpZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4geyBpZGVudGlmaWVyLCBkaXJlY3RpdmUgfVxuICAgIH0pXG4gICAgLmZpbHRlcihub3ROdWxsaXNoKVxuXG4gIC8vIGFwcGVuZCBgPHNjcmlwdCBzZXR1cD5gIGltcG9ydHMgdG8gYDxzY3JpcHQ+YFxuXG4gIGNvbnN0IF9fc2ZjID0gdC5pZGVudGlmaWVyKCdfX3NmY19tYWluJylcblxuICBsZXQgaGFzQm9keSA9IGZhbHNlXG5cbiAgY29uc3QgYm9keU5vZGVzID0gc2NyaXB0LmFzdC5ib2R5Lm1hcCgobm9kZTogTm9kZSkgPT4ge1xuICAgIC8vIHJlcGxhY2UgYGV4cG9ydCBkZWZhdWx0YCB3aXRoIGEgdGVtcHJvcmF5IHZhcmlhYmxlXG4gICAgLy8gYGNvbnN0IF9fc2ZjX21haW4gPSB7IC4uLiB9YFxuICAgIGlmIChub2RlLnR5cGUgPT09ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nKSB7XG4gICAgICBoYXNCb2R5ID0gdHJ1ZVxuICAgICAgcmV0dXJuIHQudmFyaWFibGVEZWNsYXJhdGlvbignY29uc3QnLCBbXG4gICAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKF9fc2ZjLCBub2RlLmRlY2xhcmF0aW9uIGFzIGFueSksXG4gICAgICBdKVxuICAgIH1cbiAgICByZXR1cm4gbm9kZVxuICB9KVxuXG4gIGxldCBhc3QgPSB0LnByb2dyYW0oW1xuICAgIC4uLnNmYy5leHRyYURlY2xhcmF0aW9ucyxcbiAgICAuLi5ob2lzdGVkLFxuICAgIC4uLmJvZHlOb2RlcyxcbiAgXSBhcyBTdGF0ZW1lbnRbXSlcblxuICAvLyBpbmplY3QgYGNvbnN0IF9fc2ZjX21haW4gPSB7fWAgaWYgYDxzY3JpcHQ+YCBoYXMgZGVmYXVsdCBleHBvcnRcbiAgaWYgKCFoYXNCb2R5KSB7XG4gICAgYXN0LmJvZHkucHVzaChcbiAgICAgIHQudmFyaWFibGVEZWNsYXJhdGlvbignY29uc3QnLCBbXG4gICAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKF9fc2ZjLCB0Lm9iamVjdEV4cHJlc3Npb24oW10pKSxcbiAgICAgIF0pLFxuICAgIClcbiAgfVxuXG4gIC8vIGluamVjdCBwcm9wcyBmdW5jdGlvblxuICAvLyBgX19zZmNfbWFpbi5wcm9wcyA9IHsgLi4uIH1gXG4gIGlmIChwcm9wcykge1xuICAgIGhhc0JvZHkgPSB0cnVlXG4gICAgYXN0LmJvZHkucHVzaChcbiAgICAgIHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICAgICAgdC5hc3NpZ25tZW50RXhwcmVzc2lvbihcbiAgICAgICAgICAnPScsXG4gICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKF9fc2ZjLCB0LmlkZW50aWZpZXIoJ3Byb3BzJykpLFxuICAgICAgICAgIHByb3BzIGFzIGFueSxcbiAgICAgICAgKSxcbiAgICAgICkgYXMgYW55LFxuICAgIClcbiAgfVxuXG4gIC8vIGluamVjdCBzZXR1cCBmdW5jdGlvblxuICAvLyBgX19zZmNfbWFpbi5zZXR1cCA9ICgpID0+IHt9YFxuICBpZiAoYm9keS5sZW5ndGgpIHtcbiAgICBoYXNCb2R5ID0gdHJ1ZVxuICAgIGNvbnN0IHJldHVybkV4cHIgPSBleHBvc2VcbiAgICAgID8gdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKHQuaWRlbnRpZmllcignT2JqZWN0JyksIHQuaWRlbnRpZmllcignYXNzaWduJykpLFxuICAgICAgICBbdC5vYmplY3RFeHByZXNzaW9uKHJldHVybnMpLCBleHBvc2VdLFxuICAgICAgKVxuICAgICAgOiB0Lm9iamVjdEV4cHJlc3Npb24ocmV0dXJucylcbiAgICBjb25zdCByZXR1cm5TdGF0ZW1lbnQgPSB0LnJldHVyblN0YXRlbWVudChyZXR1cm5FeHByKVxuXG4gICAgYXN0LmJvZHkucHVzaChcbiAgICAgIHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICAgICAgdC5hc3NpZ25tZW50RXhwcmVzc2lvbihcbiAgICAgICAgICAnPScsXG4gICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKF9fc2ZjLCB0LmlkZW50aWZpZXIoJ3NldHVwJykpLFxuICAgICAgICAgIHQuYXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oXG4gICAgICAgICAgICBbdC5pZGVudGlmaWVyKCdfX3Byb3BzJyksIHQuaWRlbnRpZmllcignX19jdHgnKV0sXG4gICAgICAgICAgICB0LmJsb2NrU3RhdGVtZW50KFsuLi5zZXR1cEJvZHksIHJldHVyblN0YXRlbWVudCBhcyBhbnldKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKSBhcyBhbnksXG4gICAgKVxuICB9XG5cbiAgLy8gaW5qZWN0IGNvbXBvbmVudHNcbiAgLy8gYF9fc2ZjX21haW4uY29tcG9uZW50cyA9IE9iamVjdC5hc3NpZ24oeyAuLi4gfSwgX19zZmNfbWFpbi5jb21wb25lbnRzKWBcbiAgaWYgKGNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgaGFzQm9keSA9IHRydWVcbiAgICBjb25zdCBjb21wb25lbnRzT2JqZWN0ID0gdC5vYmplY3RFeHByZXNzaW9uKFxuICAgICAgY29tcG9uZW50cy5tYXAoKGkpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB0LmlkZW50aWZpZXIoaSlcbiAgICAgICAgcmV0dXJuIHQub2JqZWN0UHJvcGVydHkoaWQsIGlkLCBmYWxzZSwgdHJ1ZSlcbiAgICAgIH0pLFxuICAgIClcblxuICAgIGFzdC5ib2R5LnB1c2goXG4gICAgICB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgICAgIHQuYXNzaWdubWVudEV4cHJlc3Npb24oXG4gICAgICAgICAgJz0nLFxuICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihfX3NmYywgdC5pZGVudGlmaWVyKCdjb21wb25lbnRzJykpLFxuICAgICAgICAgIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKCdPYmplY3QnKSwgdC5pZGVudGlmaWVyKCdhc3NpZ24nKSksXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIGNvbXBvbmVudHNPYmplY3QsXG4gICAgICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihfX3NmYywgdC5pZGVudGlmaWVyKCdjb21wb25lbnRzJykpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKSBhcyBhbnksXG4gICAgKVxuICB9XG5cbiAgLy8gaW5qZWN0IGRpcmVjdGl2ZXNcbiAgLy8gYF9fc2ZjX21haW4uZGlyZWN0aXZlcyA9IE9iamVjdC5hc3NpZ24oeyAuLi4gfSwgX19zZmNfbWFpbi5kaXJlY3RpdmVzKWBcbiAgaWYgKGRpcmVjdGl2ZURlY2xhcmF0aW9uLmxlbmd0aCkge1xuICAgIGhhc0JvZHkgPSB0cnVlXG4gICAgY29uc3QgZGlyZWN0aXZlc09iamVjdCA9IHQub2JqZWN0RXhwcmVzc2lvbihcbiAgICAgIGRpcmVjdGl2ZURlY2xhcmF0aW9uLm1hcCgoeyBkaXJlY3RpdmUsIGlkZW50aWZpZXIgfSkgPT5cbiAgICAgICAgdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICB0LmlkZW50aWZpZXIoZGlyZWN0aXZlKSxcbiAgICAgICAgICB0LmlkZW50aWZpZXIoaWRlbnRpZmllciksXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcblxuICAgIGFzdC5ib2R5LnB1c2goXG4gICAgICB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgICAgIHQuYXNzaWdubWVudEV4cHJlc3Npb24oXG4gICAgICAgICAgJz0nLFxuICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihfX3NmYywgdC5pZGVudGlmaWVyKCdkaXJlY3RpdmVzJykpLFxuICAgICAgICAgIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKCdPYmplY3QnKSwgdC5pZGVudGlmaWVyKCdhc3NpZ24nKSksXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXNPYmplY3QsXG4gICAgICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihfX3NmYywgdC5pZGVudGlmaWVyKCdkaXJlY3RpdmVzJykpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKSBhcyBhbnksXG4gICAgKVxuICB9XG5cbiAgaWYgKCFoYXNCb2R5ICYmICFvcHRpb25zPy5hc3RUcmFuc2Zvcm1zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFzdDogbnVsbCxcbiAgICAgIGNvZGU6ICcnLFxuICAgIH1cbiAgfVxuXG4gIC8vIHJlLWV4cG9ydFxuICAvLyBgZXhwb3J0IGRlZmF1bHQgX19zZmNfbWFpbmBcbiAgYXN0LmJvZHkucHVzaCh0LmV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihfX3NmYykgYXMgYW55KVxuXG4gIGFzdCA9IG9wdGlvbnM/LmFzdFRyYW5zZm9ybXM/LnBvc3Q/Lihhc3QsIHNmYykgfHwgYXN0XG5cbiAgcmV0dXJuIHtcbiAgICBhc3QsXG4gICAgY29kZTogZ2VuZXJhdGUoYXN0KS5jb2RlLFxuICB9XG59XG4iLCJpbXBvcnQgeyBzaG91bGRUcmFuc2Zvcm0sIHRyYW5zZm9ybUFTVCB9IGZyb20gJ0B2dWUvcmVhY3Rpdml0eS10cmFuc2Zvcm0nXG5pbXBvcnQgTWFnaWNTdHJpbmcgZnJvbSAnbWFnaWMtc3RyaW5nJ1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRTRkMsIFJlc29sdmVkT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgcGFyc2UsIHQgfSBmcm9tICcuL2JhYmVsJ1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtU2ZjUmVmU3VnYXIoc2ZjOiBQYXJzZWRTRkMsIG9wdGlvbnM6IFJlc29sdmVkT3B0aW9ucykge1xuICBjb25zdCBpbXBvcnRlZEhlbHBlcnMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG4gIGZvciAoY29uc3Qgc2NyaXB0IG9mIFtzZmMuc2NyaXB0LCBzZmMuc2NyaXB0U2V0dXBdKSB7XG4gICAgaWYgKHNob3VsZFRyYW5zZm9ybShzY3JpcHQuY29udGVudCkpIHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgTWFnaWNTdHJpbmcoc2NyaXB0LmNvbnRlbnQpXG4gICAgICBjb25zdCB7IGltcG9ydGVkSGVscGVyczogaW1wb3J0cyB9ID0gdHJhbnNmb3JtQVNUKHNjcmlwdC5hc3QsIHMpXG4gICAgICBBcnJheS5mcm9tKGltcG9ydHMpLmZvckVhY2goaGVscGVyID0+IGltcG9ydGVkSGVscGVycy5hZGQoaGVscGVyKSlcbiAgICAgIHNjcmlwdC5jb250ZW50ID0gcy50b1N0cmluZygpXG4gICAgICBzY3JpcHQuYXN0ID0gcGFyc2Uoc2NyaXB0LmNvbnRlbnQsIHNmYy5wYXJzZXJPcHRpb25zKS5wcm9ncmFtXG4gICAgfVxuICB9XG5cbiAgaWYgKGltcG9ydGVkSGVscGVycy5zaXplKSB7XG4gICAgc2ZjLmV4dHJhRGVjbGFyYXRpb25zID0gW1xuICAgICAgdC5pbXBvcnREZWNsYXJhdGlvbihcbiAgICAgICAgQXJyYXkuZnJvbShpbXBvcnRlZEhlbHBlcnMpLm1hcChpID0+IHQuaW1wb3J0U3BlY2lmaWVyKHQuaWRlbnRpZmllcihgXyR7aX1gKSwgdC5pZGVudGlmaWVyKGkpKSksXG4gICAgICAgIHQuc3RyaW5nTGl0ZXJhbChvcHRpb25zLmltcG9ydEhlbHBlcnNGcm9tKSxcbiAgICAgICksXG4gICAgXVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlc29sdmVkT3B0aW9ucywgU2NyaXB0U2V0dXBUcmFuc2Zvcm1PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlT3B0aW9ucyhvcHRpb25zOiBTY3JpcHRTZXR1cFRyYW5zZm9ybU9wdGlvbnMgPSB7fSk6IFJlc29sdmVkT3B0aW9ucyB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIHt9LFxuICAgIHtcbiAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgIHJlYWN0aXZpdHlUcmFuc2Zvcm06IGZhbHNlLFxuICAgICAgaW1wb3J0SGVscGVyc0Zyb206ICdAdnVlL2NvbXBvc2l0aW9uLWFwaScsXG4gICAgICBhc3RUcmFuc2Zvcm1zOiB7fSxcbiAgICB9LFxuICAgIG9wdGlvbnMsXG4gIClcbn1cbiIsImltcG9ydCBNYWdpY1N0cmluZyBmcm9tICdtYWdpYy1zdHJpbmcnXG5pbXBvcnQgeyBzaG91bGRUcmFuc2Zvcm0gYXMgc2hvdWxkVHJhbnNmb3JtUmVmU3VnYXIsIHRyYW5zZm9ybSBhcyB0cmFuc2Zvcm1SZWYgfSBmcm9tICdAdnVlL3JlYWN0aXZpdHktdHJhbnNmb3JtJ1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlZE9wdGlvbnMsIFNjcmlwdFNldHVwVHJhbnNmb3JtT3B0aW9ucywgVHJhbnNmb3JtUmVzdWx0IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBwYXJzZVNGQyB9IGZyb20gJy4vcGFyc2VTRkMnXG5pbXBvcnQgeyB0cmFuc2Zvcm1TY3JpcHRTZXR1cCB9IGZyb20gJy4vdHJhbnNmb3JtU2NyaXB0U2V0dXAnXG5pbXBvcnQgeyB0cmFuc2Zvcm1TZmNSZWZTdWdhciB9IGZyb20gJy4vdHJhbnNmb3JtU2ZjUmVmU3VnYXInXG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucydcblxuY29uc3Qgc2NyaXB0U2V0dXBSRSA9IC88c2NyaXB0XFxzKC4qXFxzKT9zZXR1cChcXHMuKik/Pi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFRyYW5zZm9ybShjb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBTY3JpcHRTZXR1cFRyYW5zZm9ybU9wdGlvbnMpOiBib29sZWFuIHtcbiAgLy8gYXZvaWQgdHJhbnNmb3JtaW5nIHR3aWNlXG4gIGlmIChjb2RlLmluY2x1ZGVzKCdleHBvcnQgZGVmYXVsdCBfX3NmY19tYWluJykpXG4gICAgcmV0dXJuIGZhbHNlXG4gIHJldHVybiAob3B0aW9ucz8ucmVhY3Rpdml0eVRyYW5zZm9ybSAmJiBzaG91bGRUcmFuc2Zvcm1SZWZTdWdhcihjb2RlKSkgfHwgc2NyaXB0U2V0dXBSRS50ZXN0KGNvZGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm0oaW5wdXQ6IHN0cmluZywgaWQ6IHN0cmluZywgb3B0aW9ucz86IFNjcmlwdFNldHVwVHJhbnNmb3JtT3B0aW9ucyk6IFByb21pc2U8VHJhbnNmb3JtUmVzdWx0PiB7XG4gIGlmICghc2hvdWxkVHJhbnNmb3JtKGlucHV0LCBpZCwgb3B0aW9ucykpXG4gICAgcmV0dXJuIG51bGxcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKVxuICBpZiAoaWQuZW5kc1dpdGgoJy52dWUnKSB8fCBpZC5pbmNsdWRlcygnLnZ1ZT92dWUnKSlcbiAgICByZXR1cm4gYXdhaXQgdHJhbnNmb3JtVnVlKGlucHV0LCBpZCwgcmVzb2x2ZWQpXG4gIGVsc2VcbiAgICByZXR1cm4gdHJhbnNmb3JtTm9uVnVlKGlucHV0LCBpZCwgcmVzb2x2ZWQpXG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vblZ1ZShpbnB1dDogc3RyaW5nLCBpZDogc3RyaW5nLCBvcHRpb25zOiBSZXNvbHZlZE9wdGlvbnMpOiBUcmFuc2Zvcm1SZXN1bHQge1xuICBpZiAob3B0aW9ucy5yZWFjdGl2aXR5VHJhbnNmb3JtICYmIHNob3VsZFRyYW5zZm9ybVJlZlN1Z2FyKGlucHV0KSkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1SZWYoaW5wdXQsIHtcbiAgICAgIGZpbGVuYW1lOiBpZCxcbiAgICAgIHNvdXJjZU1hcDogb3B0aW9ucy5zb3VyY2VNYXAsXG4gICAgICBpbXBvcnRIZWxwZXJzRnJvbTogb3B0aW9ucy5pbXBvcnRIZWxwZXJzRnJvbSxcbiAgICB9KSBhcyBhbnlcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1WdWUoaW5wdXQ6IHN0cmluZywgaWQ6IHN0cmluZywgb3B0aW9uczogUmVzb2x2ZWRPcHRpb25zKTogUHJvbWlzZTxUcmFuc2Zvcm1SZXN1bHQ+IHtcbiAgY29uc3QgcyA9IG5ldyBNYWdpY1N0cmluZyhpbnB1dClcblxuICBjb25zdCBzZmMgPSBhd2FpdCBwYXJzZVNGQyhpbnB1dCwgaWQpXG5cbiAgaWYgKG9wdGlvbnMucmVhY3Rpdml0eVRyYW5zZm9ybSlcbiAgICB0cmFuc2Zvcm1TZmNSZWZTdWdhcihzZmMsIG9wdGlvbnMpXG5cbiAgY29uc3QgeyBjb2RlIH0gPSB0cmFuc2Zvcm1TY3JpcHRTZXR1cChzZmMsIG9wdGlvbnMpXG5cbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAuLi5zZmMuc2NyaXB0LmF0dHJzLFxuICAgIC4uLnNmYy5zY3JpcHRTZXR1cC5hdHRycyxcbiAgfVxuICBkZWxldGUgYXR0cmlidXRlcy5zZXR1cFxuICBjb25zdCBhdHRyID0gT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcylcbiAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHZhbHVlID8gYCR7a2V5fT1cIiR7dmFsdWV9XCJgIDoga2V5KVxuICAgIC5qb2luKCcgJylcblxuICBpZiAoY29kZSkge1xuICAgIGNvbnN0IGJsb2NrID0gYDxzY3JpcHQgJHthdHRyfT5cXG4ke2NvZGV9XFxuPC9zY3JpcHQ+YFxuXG4gICAgcy5yZW1vdmUoc2ZjLnNjcmlwdC5zdGFydCwgc2ZjLnNjcmlwdC5lbmQpXG4gICAgaWYgKHNmYy5zY3JpcHRTZXR1cC5zdGFydCAhPT0gc2ZjLnNjcmlwdFNldHVwLmVuZCkge1xuICAgICAgcy5vdmVyd3JpdGUoXG4gICAgICAgIHNmYy5zY3JpcHRTZXR1cC5zdGFydCxcbiAgICAgICAgc2ZjLnNjcmlwdFNldHVwLmVuZCxcbiAgICAgICAgYmxvY2ssXG4gICAgICApXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5wcmVwZW5kTGVmdCgwLCBgJHtibG9ja31cXG5gKVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNvZGU6IHMudG9TdHJpbmcoKSxcbiAgICBtYXA6IG9wdGlvbnMuc291cmNlTWFwXG4gICAgICA/IHMuZ2VuZXJhdGVNYXAoe1xuICAgICAgICBzb3VyY2U6IGlkLFxuICAgICAgICBpbmNsdWRlQ29udGVudDogdHJ1ZSxcbiAgICAgIH0pIGFzIGFueVxuICAgICAgOiBudWxsLFxuICB9XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVVbnBsdWdpbiB9IGZyb20gJ3VucGx1Z2luJ1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVyIH0gZnJvbSAnQHJvbGx1cC9wbHVnaW51dGlscydcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICcuL2NvcmUnXG5cbmV4cG9ydCAqIGZyb20gJy4vY29yZSdcblxuZXhwb3J0IGNvbnN0IHVucGx1Z2luID0gY3JlYXRlVW5wbHVnaW48UGx1Z2luT3B0aW9ucz4oKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBjcmVhdGVGaWx0ZXIoXG4gICAgb3B0aW9ucy5pbmNsdWRlIHx8IChvcHRpb25zLnJlYWN0aXZpdHlUcmFuc2Zvcm0gPyBbL1xcLnZ1ZSQvLCAvXFwudnVlXFw/dnVlLywgL1xcLltqdF1zeD8kL10gOiBbL1xcLnZ1ZSQvLCAvXFwudnVlXFw/dnVlL10pLFxuICAgIG9wdGlvbnMuZXhjbHVkZSB8fCBbL25vZGVfbW9kdWxlcy8sIC9cXC5naXQvLCAvXFwubnV4dC9dLFxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAndW5wbHVnaW4tdnVlMi1zY3JpcHQtc2V0dXAnLFxuICAgIGVuZm9yY2U6ICdwcmUnLFxuICAgIHRyYW5zZm9ybUluY2x1ZGUoaWQpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIoaWQpXG4gICAgfSxcbiAgICBhc3luYyB0cmFuc2Zvcm0oY29kZSwgaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0cmFuc2Zvcm0oY29kZSwgaWQsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgICBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIHRoaXMuZXJyb3IoZSlcbiAgICAgIH1cbiAgICB9LFxuICB9XG59KVxuXG5leHBvcnQgZGVmYXVsdCB1bnBsdWdpblxuIiwiaW1wb3J0IGRlZnUgZnJvbSAnZGVmdSdcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgdW5wbHVnaW4gZnJvbSAnLidcblxuZnVuY3Rpb24gc2NyaXB0U2V0dXBNb2R1bGUodGhpczogYW55LCBpbmxpbmVPcHRpb25zOiBQbHVnaW5PcHRpb25zID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGRlZnUoaW5saW5lT3B0aW9ucywgdGhpcy5udXh0Lm9wdGlvbnMuc2NyaXB0U2V0dXApXG5cbiAgLy8gaW5zdGFsbCB3ZWJwYWNrIHBsdWdpblxuICB0aGlzLmV4dGVuZEJ1aWxkKChjb25maWc6IGFueSkgPT4ge1xuICAgIGNvbmZpZy5wbHVnaW5zID0gY29uZmlnLnBsdWdpbnMgfHwgW11cbiAgICBjb25maWcucGx1Z2lucy51bnNoaWZ0KHVucGx1Z2luLndlYnBhY2sob3B0aW9ucykpXG4gIH0pXG5cbiAgLy8gaW5zdGFsbCB2aXRlIHBsdWdpblxuICB0aGlzLm51eHQuaG9vaygndml0ZTpleHRlbmQnLCBhc3luYyAodml0ZTogYW55KSA9PiB7XG4gICAgdml0ZS5jb25maWcucGx1Z2lucyA9IHZpdGUuY29uZmlnLnBsdWdpbnMgfHwgW11cbiAgICB2aXRlLmNvbmZpZy5wbHVnaW5zLnB1c2godW5wbHVnaW4udml0ZShvcHRpb25zKSlcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2NyaXB0U2V0dXBNb2R1bGVcbiJdLCJuYW1lcyI6WyJOb2RlVHlwZXMiLCJFbGVtZW50VHlwZXMiLCJub2RlIiwiX2EiLCJfYiIsIl9jIiwiY29udGVudCIsImFzdCIsImtleSIsInZhbHVlIiwidCIsInNob3VsZFRyYW5zZm9ybSIsInNob3VsZFRyYW5zZm9ybVJlZlN1Z2FyIiwidHJhbnNmb3JtUmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLElBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQUE7QUFLYSxNQUFBLENBQUEsR0FBQSxDQUE2QixLQUFjLENBQUEsT0FBQSxJQUFXLEtBQU8sRUFBQSxLQUFBLENBQUE7QUFDN0QsTUFBQSxRQUFBLEdBQXVCLEVBQVUsT0FBVyxJQUFBLENBQUEsQ0FBQTtBQUM1QyxNQUFBLFFBQUEsR0FBQSxDQUFhLGtFQUF3QixPQUF4QixLQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLENBQWlDLFlBQWpDLElBQXFELEdBQUEsRUFBQSxHQUFBLGNBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxDQUFnQixZQUFyRSxJQUFnRixHQUFBLEVBQUEsR0FBQSxjQUFBOztBQ0luRyxTQUFTLDBCQUEwQixLQUFvQixFQUFBO0FBQzVELEVBQUksSUFBQSxNQUFBLENBQUE7QUFDSixFQUFJLElBQUEsZUFBQSxDQUFBO0FBQ0osRUFBQSxRQUFBLENBQVMsRUFBRSxJQUFLLENBQUEsQ0FBQSxDQUFFLE9BQVEsQ0FBQSxLQUFLLENBQUMsQ0FBRyxFQUFBO0FBQUEsSUFDakMsUUFBUSxJQUFNLEVBQUE7QUFDWixNQUFBLE1BQUEs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