521 lines
81 KiB
Plaintext
521 lines
81 KiB
Plaintext
import { inspect } from "/_nuxt/node_modules/graphql/jsutils/inspect.mjs?v=e4f18c29";
|
|
import { invariant } from "/_nuxt/node_modules/graphql/jsutils/invariant.mjs?v=e4f18c29";
|
|
import { keyMap } from "/_nuxt/node_modules/graphql/jsutils/keyMap.mjs?v=e4f18c29";
|
|
import { print } from "/_nuxt/node_modules/graphql/language/printer.mjs?v=e4f18c29";
|
|
import {
|
|
isEnumType,
|
|
isInputObjectType,
|
|
isInterfaceType,
|
|
isListType,
|
|
isNamedType,
|
|
isNonNullType,
|
|
isObjectType,
|
|
isRequiredArgument,
|
|
isRequiredInputField,
|
|
isScalarType,
|
|
isUnionType,
|
|
} from "/_nuxt/node_modules/graphql/type/definition.mjs?v=e4f18c29";
|
|
import { isSpecifiedScalarType } from "/_nuxt/node_modules/graphql/type/scalars.mjs?v=e4f18c29";
|
|
import { astFromValue } from "/_nuxt/node_modules/graphql/utilities/astFromValue.mjs?v=e4f18c29";
|
|
import { sortValueNode } from "/_nuxt/node_modules/graphql/utilities/sortValueNode.mjs?v=e4f18c29";
|
|
var BreakingChangeType;
|
|
|
|
(function (BreakingChangeType) {
|
|
BreakingChangeType['TYPE_REMOVED'] = 'TYPE_REMOVED';
|
|
BreakingChangeType['TYPE_CHANGED_KIND'] = 'TYPE_CHANGED_KIND';
|
|
BreakingChangeType['TYPE_REMOVED_FROM_UNION'] = 'TYPE_REMOVED_FROM_UNION';
|
|
BreakingChangeType['VALUE_REMOVED_FROM_ENUM'] = 'VALUE_REMOVED_FROM_ENUM';
|
|
BreakingChangeType['REQUIRED_INPUT_FIELD_ADDED'] =
|
|
'REQUIRED_INPUT_FIELD_ADDED';
|
|
BreakingChangeType['IMPLEMENTED_INTERFACE_REMOVED'] =
|
|
'IMPLEMENTED_INTERFACE_REMOVED';
|
|
BreakingChangeType['FIELD_REMOVED'] = 'FIELD_REMOVED';
|
|
BreakingChangeType['FIELD_CHANGED_KIND'] = 'FIELD_CHANGED_KIND';
|
|
BreakingChangeType['REQUIRED_ARG_ADDED'] = 'REQUIRED_ARG_ADDED';
|
|
BreakingChangeType['ARG_REMOVED'] = 'ARG_REMOVED';
|
|
BreakingChangeType['ARG_CHANGED_KIND'] = 'ARG_CHANGED_KIND';
|
|
BreakingChangeType['DIRECTIVE_REMOVED'] = 'DIRECTIVE_REMOVED';
|
|
BreakingChangeType['DIRECTIVE_ARG_REMOVED'] = 'DIRECTIVE_ARG_REMOVED';
|
|
BreakingChangeType['REQUIRED_DIRECTIVE_ARG_ADDED'] =
|
|
'REQUIRED_DIRECTIVE_ARG_ADDED';
|
|
BreakingChangeType['DIRECTIVE_REPEATABLE_REMOVED'] =
|
|
'DIRECTIVE_REPEATABLE_REMOVED';
|
|
BreakingChangeType['DIRECTIVE_LOCATION_REMOVED'] =
|
|
'DIRECTIVE_LOCATION_REMOVED';
|
|
})(BreakingChangeType || (BreakingChangeType = {}));
|
|
|
|
export { BreakingChangeType };
|
|
var DangerousChangeType;
|
|
|
|
(function (DangerousChangeType) {
|
|
DangerousChangeType['VALUE_ADDED_TO_ENUM'] = 'VALUE_ADDED_TO_ENUM';
|
|
DangerousChangeType['TYPE_ADDED_TO_UNION'] = 'TYPE_ADDED_TO_UNION';
|
|
DangerousChangeType['OPTIONAL_INPUT_FIELD_ADDED'] =
|
|
'OPTIONAL_INPUT_FIELD_ADDED';
|
|
DangerousChangeType['OPTIONAL_ARG_ADDED'] = 'OPTIONAL_ARG_ADDED';
|
|
DangerousChangeType['IMPLEMENTED_INTERFACE_ADDED'] =
|
|
'IMPLEMENTED_INTERFACE_ADDED';
|
|
DangerousChangeType['ARG_DEFAULT_VALUE_CHANGE'] = 'ARG_DEFAULT_VALUE_CHANGE';
|
|
})(DangerousChangeType || (DangerousChangeType = {}));
|
|
|
|
export { DangerousChangeType };
|
|
|
|
/**
|
|
* Given two schemas, returns an Array containing descriptions of all the types
|
|
* of breaking changes covered by the other functions down below.
|
|
*/
|
|
export function findBreakingChanges(oldSchema, newSchema) {
|
|
// @ts-expect-error
|
|
return findSchemaChanges(oldSchema, newSchema).filter(
|
|
(change) => change.type in BreakingChangeType,
|
|
);
|
|
}
|
|
/**
|
|
* Given two schemas, returns an Array containing descriptions of all the types
|
|
* of potentially dangerous changes covered by the other functions down below.
|
|
*/
|
|
|
|
export function findDangerousChanges(oldSchema, newSchema) {
|
|
// @ts-expect-error
|
|
return findSchemaChanges(oldSchema, newSchema).filter(
|
|
(change) => change.type in DangerousChangeType,
|
|
);
|
|
}
|
|
|
|
function findSchemaChanges(oldSchema, newSchema) {
|
|
return [
|
|
...findTypeChanges(oldSchema, newSchema),
|
|
...findDirectiveChanges(oldSchema, newSchema),
|
|
];
|
|
}
|
|
|
|
function findDirectiveChanges(oldSchema, newSchema) {
|
|
const schemaChanges = [];
|
|
const directivesDiff = diff(
|
|
oldSchema.getDirectives(),
|
|
newSchema.getDirectives(),
|
|
);
|
|
|
|
for (const oldDirective of directivesDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.DIRECTIVE_REMOVED,
|
|
description: `${oldDirective.name} was removed.`,
|
|
});
|
|
}
|
|
|
|
for (const [oldDirective, newDirective] of directivesDiff.persisted) {
|
|
const argsDiff = diff(oldDirective.args, newDirective.args);
|
|
|
|
for (const newArg of argsDiff.added) {
|
|
if (isRequiredArgument(newArg)) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.REQUIRED_DIRECTIVE_ARG_ADDED,
|
|
description: `A required arg ${newArg.name} on directive ${oldDirective.name} was added.`,
|
|
});
|
|
}
|
|
}
|
|
|
|
for (const oldArg of argsDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.DIRECTIVE_ARG_REMOVED,
|
|
description: `${oldArg.name} was removed from ${oldDirective.name}.`,
|
|
});
|
|
}
|
|
|
|
if (oldDirective.isRepeatable && !newDirective.isRepeatable) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.DIRECTIVE_REPEATABLE_REMOVED,
|
|
description: `Repeatable flag was removed from ${oldDirective.name}.`,
|
|
});
|
|
}
|
|
|
|
for (const location of oldDirective.locations) {
|
|
if (!newDirective.locations.includes(location)) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.DIRECTIVE_LOCATION_REMOVED,
|
|
description: `${location} was removed from ${oldDirective.name}.`,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
return schemaChanges;
|
|
}
|
|
|
|
function findTypeChanges(oldSchema, newSchema) {
|
|
const schemaChanges = [];
|
|
const typesDiff = diff(
|
|
Object.values(oldSchema.getTypeMap()),
|
|
Object.values(newSchema.getTypeMap()),
|
|
);
|
|
|
|
for (const oldType of typesDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.TYPE_REMOVED,
|
|
description: isSpecifiedScalarType(oldType)
|
|
? `Standard scalar ${oldType.name} was removed because it is not referenced anymore.`
|
|
: `${oldType.name} was removed.`,
|
|
});
|
|
}
|
|
|
|
for (const [oldType, newType] of typesDiff.persisted) {
|
|
if (isEnumType(oldType) && isEnumType(newType)) {
|
|
schemaChanges.push(...findEnumTypeChanges(oldType, newType));
|
|
} else if (isUnionType(oldType) && isUnionType(newType)) {
|
|
schemaChanges.push(...findUnionTypeChanges(oldType, newType));
|
|
} else if (isInputObjectType(oldType) && isInputObjectType(newType)) {
|
|
schemaChanges.push(...findInputObjectTypeChanges(oldType, newType));
|
|
} else if (isObjectType(oldType) && isObjectType(newType)) {
|
|
schemaChanges.push(
|
|
...findFieldChanges(oldType, newType),
|
|
...findImplementedInterfacesChanges(oldType, newType),
|
|
);
|
|
} else if (isInterfaceType(oldType) && isInterfaceType(newType)) {
|
|
schemaChanges.push(
|
|
...findFieldChanges(oldType, newType),
|
|
...findImplementedInterfacesChanges(oldType, newType),
|
|
);
|
|
} else if (oldType.constructor !== newType.constructor) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.TYPE_CHANGED_KIND,
|
|
description:
|
|
`${oldType.name} changed from ` +
|
|
`${typeKindName(oldType)} to ${typeKindName(newType)}.`,
|
|
});
|
|
}
|
|
}
|
|
|
|
return schemaChanges;
|
|
}
|
|
|
|
function findInputObjectTypeChanges(oldType, newType) {
|
|
const schemaChanges = [];
|
|
const fieldsDiff = diff(
|
|
Object.values(oldType.getFields()),
|
|
Object.values(newType.getFields()),
|
|
);
|
|
|
|
for (const newField of fieldsDiff.added) {
|
|
if (isRequiredInputField(newField)) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.REQUIRED_INPUT_FIELD_ADDED,
|
|
description: `A required field ${newField.name} on input type ${oldType.name} was added.`,
|
|
});
|
|
} else {
|
|
schemaChanges.push({
|
|
type: DangerousChangeType.OPTIONAL_INPUT_FIELD_ADDED,
|
|
description: `An optional field ${newField.name} on input type ${oldType.name} was added.`,
|
|
});
|
|
}
|
|
}
|
|
|
|
for (const oldField of fieldsDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.FIELD_REMOVED,
|
|
description: `${oldType.name}.${oldField.name} was removed.`,
|
|
});
|
|
}
|
|
|
|
for (const [oldField, newField] of fieldsDiff.persisted) {
|
|
const isSafe = isChangeSafeForInputObjectFieldOrFieldArg(
|
|
oldField.type,
|
|
newField.type,
|
|
);
|
|
|
|
if (!isSafe) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.FIELD_CHANGED_KIND,
|
|
description:
|
|
`${oldType.name}.${oldField.name} changed type from ` +
|
|
`${String(oldField.type)} to ${String(newField.type)}.`,
|
|
});
|
|
}
|
|
}
|
|
|
|
return schemaChanges;
|
|
}
|
|
|
|
function findUnionTypeChanges(oldType, newType) {
|
|
const schemaChanges = [];
|
|
const possibleTypesDiff = diff(oldType.getTypes(), newType.getTypes());
|
|
|
|
for (const newPossibleType of possibleTypesDiff.added) {
|
|
schemaChanges.push({
|
|
type: DangerousChangeType.TYPE_ADDED_TO_UNION,
|
|
description: `${newPossibleType.name} was added to union type ${oldType.name}.`,
|
|
});
|
|
}
|
|
|
|
for (const oldPossibleType of possibleTypesDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.TYPE_REMOVED_FROM_UNION,
|
|
description: `${oldPossibleType.name} was removed from union type ${oldType.name}.`,
|
|
});
|
|
}
|
|
|
|
return schemaChanges;
|
|
}
|
|
|
|
function findEnumTypeChanges(oldType, newType) {
|
|
const schemaChanges = [];
|
|
const valuesDiff = diff(oldType.getValues(), newType.getValues());
|
|
|
|
for (const newValue of valuesDiff.added) {
|
|
schemaChanges.push({
|
|
type: DangerousChangeType.VALUE_ADDED_TO_ENUM,
|
|
description: `${newValue.name} was added to enum type ${oldType.name}.`,
|
|
});
|
|
}
|
|
|
|
for (const oldValue of valuesDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.VALUE_REMOVED_FROM_ENUM,
|
|
description: `${oldValue.name} was removed from enum type ${oldType.name}.`,
|
|
});
|
|
}
|
|
|
|
return schemaChanges;
|
|
}
|
|
|
|
function findImplementedInterfacesChanges(oldType, newType) {
|
|
const schemaChanges = [];
|
|
const interfacesDiff = diff(oldType.getInterfaces(), newType.getInterfaces());
|
|
|
|
for (const newInterface of interfacesDiff.added) {
|
|
schemaChanges.push({
|
|
type: DangerousChangeType.IMPLEMENTED_INTERFACE_ADDED,
|
|
description: `${newInterface.name} added to interfaces implemented by ${oldType.name}.`,
|
|
});
|
|
}
|
|
|
|
for (const oldInterface of interfacesDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.IMPLEMENTED_INTERFACE_REMOVED,
|
|
description: `${oldType.name} no longer implements interface ${oldInterface.name}.`,
|
|
});
|
|
}
|
|
|
|
return schemaChanges;
|
|
}
|
|
|
|
function findFieldChanges(oldType, newType) {
|
|
const schemaChanges = [];
|
|
const fieldsDiff = diff(
|
|
Object.values(oldType.getFields()),
|
|
Object.values(newType.getFields()),
|
|
);
|
|
|
|
for (const oldField of fieldsDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.FIELD_REMOVED,
|
|
description: `${oldType.name}.${oldField.name} was removed.`,
|
|
});
|
|
}
|
|
|
|
for (const [oldField, newField] of fieldsDiff.persisted) {
|
|
schemaChanges.push(...findArgChanges(oldType, oldField, newField));
|
|
const isSafe = isChangeSafeForObjectOrInterfaceField(
|
|
oldField.type,
|
|
newField.type,
|
|
);
|
|
|
|
if (!isSafe) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.FIELD_CHANGED_KIND,
|
|
description:
|
|
`${oldType.name}.${oldField.name} changed type from ` +
|
|
`${String(oldField.type)} to ${String(newField.type)}.`,
|
|
});
|
|
}
|
|
}
|
|
|
|
return schemaChanges;
|
|
}
|
|
|
|
function findArgChanges(oldType, oldField, newField) {
|
|
const schemaChanges = [];
|
|
const argsDiff = diff(oldField.args, newField.args);
|
|
|
|
for (const oldArg of argsDiff.removed) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.ARG_REMOVED,
|
|
description: `${oldType.name}.${oldField.name} arg ${oldArg.name} was removed.`,
|
|
});
|
|
}
|
|
|
|
for (const [oldArg, newArg] of argsDiff.persisted) {
|
|
const isSafe = isChangeSafeForInputObjectFieldOrFieldArg(
|
|
oldArg.type,
|
|
newArg.type,
|
|
);
|
|
|
|
if (!isSafe) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.ARG_CHANGED_KIND,
|
|
description:
|
|
`${oldType.name}.${oldField.name} arg ${oldArg.name} has changed type from ` +
|
|
`${String(oldArg.type)} to ${String(newArg.type)}.`,
|
|
});
|
|
} else if (oldArg.defaultValue !== undefined) {
|
|
if (newArg.defaultValue === undefined) {
|
|
schemaChanges.push({
|
|
type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,
|
|
description: `${oldType.name}.${oldField.name} arg ${oldArg.name} defaultValue was removed.`,
|
|
});
|
|
} else {
|
|
// Since we looking only for client's observable changes we should
|
|
// compare default values in the same representation as they are
|
|
// represented inside introspection.
|
|
const oldValueStr = stringifyValue(oldArg.defaultValue, oldArg.type);
|
|
const newValueStr = stringifyValue(newArg.defaultValue, newArg.type);
|
|
|
|
if (oldValueStr !== newValueStr) {
|
|
schemaChanges.push({
|
|
type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,
|
|
description: `${oldType.name}.${oldField.name} arg ${oldArg.name} has changed defaultValue from ${oldValueStr} to ${newValueStr}.`,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (const newArg of argsDiff.added) {
|
|
if (isRequiredArgument(newArg)) {
|
|
schemaChanges.push({
|
|
type: BreakingChangeType.REQUIRED_ARG_ADDED,
|
|
description: `A required arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,
|
|
});
|
|
} else {
|
|
schemaChanges.push({
|
|
type: DangerousChangeType.OPTIONAL_ARG_ADDED,
|
|
description: `An optional arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,
|
|
});
|
|
}
|
|
}
|
|
|
|
return schemaChanges;
|
|
}
|
|
|
|
function isChangeSafeForObjectOrInterfaceField(oldType, newType) {
|
|
if (isListType(oldType)) {
|
|
return (
|
|
// if they're both lists, make sure the underlying types are compatible
|
|
(isListType(newType) &&
|
|
isChangeSafeForObjectOrInterfaceField(
|
|
oldType.ofType,
|
|
newType.ofType,
|
|
)) || // moving from nullable to non-null of the same underlying type is safe
|
|
(isNonNullType(newType) &&
|
|
isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType))
|
|
);
|
|
}
|
|
|
|
if (isNonNullType(oldType)) {
|
|
// if they're both non-null, make sure the underlying types are compatible
|
|
return (
|
|
isNonNullType(newType) &&
|
|
isChangeSafeForObjectOrInterfaceField(oldType.ofType, newType.ofType)
|
|
);
|
|
}
|
|
|
|
return (
|
|
// if they're both named types, see if their names are equivalent
|
|
(isNamedType(newType) && oldType.name === newType.name) || // moving from nullable to non-null of the same underlying type is safe
|
|
(isNonNullType(newType) &&
|
|
isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType))
|
|
);
|
|
}
|
|
|
|
function isChangeSafeForInputObjectFieldOrFieldArg(oldType, newType) {
|
|
if (isListType(oldType)) {
|
|
// if they're both lists, make sure the underlying types are compatible
|
|
return (
|
|
isListType(newType) &&
|
|
isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType.ofType)
|
|
);
|
|
}
|
|
|
|
if (isNonNullType(oldType)) {
|
|
return (
|
|
// if they're both non-null, make sure the underlying types are
|
|
// compatible
|
|
(isNonNullType(newType) &&
|
|
isChangeSafeForInputObjectFieldOrFieldArg(
|
|
oldType.ofType,
|
|
newType.ofType,
|
|
)) || // moving from non-null to nullable of the same underlying type is safe
|
|
(!isNonNullType(newType) &&
|
|
isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType))
|
|
);
|
|
} // if they're both named types, see if their names are equivalent
|
|
|
|
return isNamedType(newType) && oldType.name === newType.name;
|
|
}
|
|
|
|
function typeKindName(type) {
|
|
if (isScalarType(type)) {
|
|
return 'a Scalar type';
|
|
}
|
|
|
|
if (isObjectType(type)) {
|
|
return 'an Object type';
|
|
}
|
|
|
|
if (isInterfaceType(type)) {
|
|
return 'an Interface type';
|
|
}
|
|
|
|
if (isUnionType(type)) {
|
|
return 'a Union type';
|
|
}
|
|
|
|
if (isEnumType(type)) {
|
|
return 'an Enum type';
|
|
}
|
|
|
|
if (isInputObjectType(type)) {
|
|
return 'an Input type';
|
|
}
|
|
/* c8 ignore next 3 */
|
|
// Not reachable, all possible types have been considered.
|
|
|
|
false || invariant(false, 'Unexpected type: ' + inspect(type));
|
|
}
|
|
|
|
function stringifyValue(value, type) {
|
|
const ast = astFromValue(value, type);
|
|
ast != null || invariant(false);
|
|
return print(sortValueNode(ast));
|
|
}
|
|
|
|
function diff(oldArray, newArray) {
|
|
const added = [];
|
|
const removed = [];
|
|
const persisted = [];
|
|
const oldMap = keyMap(oldArray, ({ name }) => name);
|
|
const newMap = keyMap(newArray, ({ name }) => name);
|
|
|
|
for (const oldItem of oldArray) {
|
|
const newItem = newMap[oldItem.name];
|
|
|
|
if (newItem === undefined) {
|
|
removed.push(oldItem);
|
|
} else {
|
|
persisted.push([oldItem, newItem]);
|
|
}
|
|
}
|
|
|
|
for (const newItem of newArray) {
|
|
if (oldMap[newItem.name] === undefined) {
|
|
added.push(newItem);
|
|
}
|
|
}
|
|
|
|
return {
|
|
added,
|
|
persisted,
|
|
removed,
|
|
};
|
|
}
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbmRCcmVha2luZ0NoYW5nZXMubWpzP3Y9ZTRmMThjMjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gXCIvX251eHQvbm9kZV9tb2R1bGVzL2dyYXBocWwvanN1dGlscy9pbnNwZWN0Lm1qcz92PWU0ZjE4YzI5XCI7XG5pbXBvcnQgeyBpbnZhcmlhbnQgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMvaW52YXJpYW50Lm1qcz92PWU0ZjE4YzI5XCI7XG5pbXBvcnQgeyBrZXlNYXAgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMva2V5TWFwLm1qcz92PWU0ZjE4YzI5XCI7XG5pbXBvcnQgeyBwcmludCB9IGZyb20gXCIvX251eHQvbm9kZV9tb2R1bGVzL2dyYXBocWwvbGFuZ3VhZ2UvcHJpbnRlci5tanM/dj1lNGYxOGMyOVwiO1xuaW1wb3J0IHtcbiAgaXNFbnVtVHlwZSxcbiAgaXNJbnB1dE9iamVjdFR5cGUsXG4gIGlzSW50ZXJmYWNlVHlwZSxcbiAgaXNMaXN0VHlwZSxcbiAgaXNOYW1lZFR5cGUsXG4gIGlzTm9uTnVsbFR5cGUsXG4gIGlzT2JqZWN0VHlwZSxcbiAgaXNSZXF1aXJlZEFyZ3VtZW50LFxuICBpc1JlcXVpcmVkSW5wdXRGaWVsZCxcbiAgaXNTY2FsYXJUeXBlLFxuICBpc1VuaW9uVHlwZSxcbn0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC90eXBlL2RlZmluaXRpb24ubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IGlzU3BlY2lmaWVkU2NhbGFyVHlwZSB9IGZyb20gXCIvX251eHQvbm9kZV9tb2R1bGVzL2dyYXBocWwvdHlwZS9zY2FsYXJzLm1qcz92PWU0ZjE4YzI5XCI7XG5pbXBvcnQgeyBhc3RGcm9tVmFsdWUgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL3V0aWxpdGllcy9hc3RGcm9tVmFsdWUubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IHNvcnRWYWx1ZU5vZGUgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL3V0aWxpdGllcy9zb3J0VmFsdWVOb2RlLm1qcz92PWU0ZjE4YzI5XCI7XG52YXIgQnJlYWtpbmdDaGFuZ2VUeXBlO1xuXG4oZnVuY3Rpb24gKEJyZWFraW5nQ2hhbmdlVHlwZSkge1xuICBCcmVha2luZ0NoYW5nZVR5cGVbJ1RZUEVfUkVNT1ZFRCddID0gJ1RZUEVfUkVNT1ZFRCc7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnVFlQRV9DSEFOR0VEX0tJTkQnXSA9ICdUWVBFX0NIQU5HRURfS0lORCc7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnVFlQRV9SRU1PVkVEX0ZST01fVU5JT04nXSA9ICdUWVBFX1JFTU9WRURfRlJPTV9VTklPTic7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnVkFMVUVfUkVNT1ZFRF9GUk9NX0VOVU0nXSA9ICdWQUxVRV9SRU1PVkVEX0ZST01fRU5VTSc7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnUkVRVUlSRURfSU5QVVRfRklFTERfQURERUQnXSA9XG4gICAgJ1JFUVVJUkVEX0lOUFVUX0ZJRUxEX0FEREVEJztcbiAgQnJlYWtpbmdDaGFuZ2VUeXBlWydJTVBMRU1FTlRFRF9JTlRFUkZBQ0VfUkVNT1ZFRCddID1cbiAgICAnSU1QTEVNRU5URURfSU5URVJGQUNFX1JFTU9WRUQnO1xuICBCcmVha2luZ0NoYW5nZVR5cGVbJ0ZJRUxEX1JFTU9WRUQnXSA9ICdGSUVMRF9SRU1PVkVEJztcbiAgQnJlYWtpbmdDaGFuZ2VUeXBlWydGSUVMRF9DSEFOR0VEX0tJTkQnXSA9ICdGSUVMRF9DSEFOR0VEX0tJTkQnO1xuICBCcmVha2luZ0NoYW5nZVR5cGVbJ1JFUVVJUkVEX0FSR19BRERFRCddID0gJ1JFUVVJUkVEX0FSR19BRERFRCc7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnQVJHX1JFTU9WRUQnXSA9ICdBUkdfUkVNT1ZFRCc7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnQVJHX0NIQU5HRURfS0lORCddID0gJ0FSR19DSEFOR0VEX0tJTkQnO1xuICBCcmVha2luZ0NoYW5nZVR5cGVbJ0RJUkVDVElWRV9SRU1PVkVEJ10gPSAnRElSRUNUSVZFX1JFTU9WRUQnO1xuICBCcmVha2luZ0NoYW5nZVR5cGVbJ0RJUkVDVElWRV9BUkdfUkVNT1ZFRCddID0gJ0RJUkVDVElWRV9BUkdfUkVNT1ZFRCc7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnUkVRVUlSRURfRElSRUNUSVZFX0FSR19BRERFRCddID1cbiAgICAnUkVRVUlSRURfRElSRUNUSVZFX0FSR19BRERFRCc7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnRElSRUNUSVZFX1JFUEVBVEFCTEVfUkVNT1ZFRCddID1cbiAgICAnRElSRUNUSVZFX1JFUEVBVEFCTEVfUkVNT1ZFRCc7XG4gIEJyZWFraW5nQ2hhbmdlVHlwZVsnRElSRUNUSVZFX0xPQ0FUSU9OX1JFTU9WRUQnXSA9XG4gICAgJ0RJUkVDVElWRV9MT0NBVElPTl9SRU1PVkVEJztcbn0pKEJyZWFraW5nQ2hhbmdlVHlwZSB8fCAoQnJlYWtpbmdDaGFuZ2VUeXBlID0ge30pKTtcblxuZXhwb3J0IHsgQnJlYWtpbmdDaGFuZ2VUeXBlIH07XG52YXIgRGFuZ2Vyb3VzQ2hhbmdlVHlwZTtcblxuKGZ1bmN0aW9uIChEYW5nZXJvdXNDaGFuZ2VUeXBlKSB7XG4gIERhbmdlcm91c0NoYW5nZVR5cGVbJ1ZBTFVFX0FEREVEX1RPX0VOVU0nXSA9ICdWQUxVRV9BRERFRF9UT19FTlVNJztcbiAgRGFuZ2Vyb3VzQ2hhbmdlVHlwZVsnVFlQRV9BRERFRF9UT19VTklPTiddID0gJ1RZUEVfQURERURfVE9fVU5JT04nO1xuICBEYW5nZXJvdXNDaGFuZ2VUeXBlWydPUFRJT05BTF9JTlBVVF9GSUVMRF9BRERFRCddID1cbiAgICAnT1BUSU9OQUxfSU5QVVRfRklFTERfQURERUQnO1xuICBEYW5nZXJvdXNDaGFuZ2VUeXBlWydPUFRJT05BTF9BUkdfQURERUQnXSA9ICdPUFRJT05BTF9BUkdfQURERUQnO1xuICBEYW5nZXJvdXNDaGFuZ2VUeXBlWydJTVBMRU1FTlRFRF9JTlRFUkZBQ0VfQURERUQnXSA9XG4gICAgJ0lNUExFTUVOVEVEX0lOVEVSRkFDRV9BRERFRCc7XG4gIERhbmdlcm91c0NoYW5nZVR5cGVbJ0FSR19ERUZBVUxUX1ZBTFVFX0NIQU5HRSddID0gJ0FSR19ERUZBVUxUX1ZBTFVFX0NIQU5HRSc7XG59KShEYW5nZXJvdXNDaGFuZ2VUeXBlIHx8IChEYW5nZXJvdXNDaGFuZ2VUeXBlID0ge30pKTtcblxuZXhwb3J0IHsgRGFuZ2Vyb3VzQ2hhbmdlVHlwZSB9O1xuXG4vKipcbiAqIEdpdmVuIHR3byBzY2hlbWFzLCByZXR1cm5zIGFuIEFycmF5IGNvbnRhaW5pbmcgZGVzY3JpcHRpb25zIG9mIGFsbCB0aGUgdHlwZXNcbiAqIG9mIGJyZWFraW5nIGNoYW5nZXMgY292ZXJlZCBieSB0aGUgb3RoZXIgZnVuY3Rpb25zIGRvd24gYmVsb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQnJlYWtpbmdDaGFuZ2VzKG9sZFNjaGVtYSwgbmV3U2NoZW1hKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIGZpbmRTY2hlbWFDaGFuZ2VzKG9sZFNjaGVtYSwgbmV3U2NoZW1hKS5maWx0ZXIoXG4gICAgKGNoYW5nZSkgPT4gY2hhbmdlLnR5cGUgaW4gQnJlYWtpbmdDaGFuZ2VUeXBlLFxuICApO1xufVxuLyoqXG4gKiBHaXZlbiB0d28gc2NoZW1hcywgcmV0dXJucyBhbiBBcnJheSBjb250YWluaW5nIGRlc2NyaXB0aW9ucyBvZiBhbGwgdGhlIHR5cGVzXG4gKiBvZiBwb3RlbnRpYWxseSBkYW5nZXJvdXMgY2hhbmdlcyBjb3ZlcmVkIGJ5IHRoZSBvdGhlciBmdW5jdGlvbnMgZG93biBiZWxvdy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZERhbmdlcm91c0NoYW5nZXMob2xkU2NoZW1hLCBuZXdTY2hlbWEpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gZmluZFNjaGVtYUNoYW5nZXMob2xkU2NoZW1hLCBuZXdTY2hlbWEpLmZpbHRlcihcbiAgICAoY2hhbmdlKSA9PiBjaGFuZ2UudHlwZSBpbiBEYW5nZXJvdXNDaGFuZ2VUeXBlLFxuICApO1xufVxuXG5mdW5jdGlvbiBmaW5kU2NoZW1hQ2hhbmdlcyhvbGRTY2hlbWEsIG5ld1NjaGVtYSkge1xuICByZXR1cm4gW1xuICAgIC4uLmZpbmRUeXBlQ2hhbmdlcyhvbGRTY2hlbWEsIG5ld1NjaGVtYSksXG4gICAgLi4uZmluZERpcmVjdGl2ZUNoYW5nZXMob2xkU2NoZW1hLCBuZXdTY2hlbWEpLFxuICBdO1xufVxuXG5mdW5jdGlvbiBmaW5kRGlyZWN0aXZlQ2hhbmdlcyhvbGRTY2hlbWEsIG5ld1NjaGVtYSkge1xuICBjb25zdCBzY2hlbWFDaGFuZ2VzID0gW107XG4gIGNvbnN0IGRpcmVjdGl2ZXNEaWZmID0gZGlmZihcbiAgICBvbGRTY2hlbWEuZ2V0RGlyZWN0aXZlcygpLFxuICAgIG5ld1NjaGVtYS5nZXREaXJlY3RpdmVzKCksXG4gICk7XG5cbiAgZm9yIChjb25zdCBvbGREaXJlY3RpdmUgb2YgZGlyZWN0aXZlc0RpZmYucmVtb3ZlZCkge1xuICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICB0eXBlOiBCcmVha2luZ0NoYW5nZVR5cGUuRElSRUNUSVZFX1JFTU9WRUQsXG4gICAgICBkZXNjcmlwdGlvbjogYCR7b2xkRGlyZWN0aXZlLm5hbWV9IHdhcyByZW1vdmVkLmAsXG4gICAgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtvbGREaXJlY3RpdmUsIG5ld0RpcmVjdGl2ZV0gb2YgZGlyZWN0aXZlc0RpZmYucGVyc2lzdGVkKSB7XG4gICAgY29uc3QgYXJnc0RpZmYgPSBkaWZmKG9sZERpcmVjdGl2ZS5hcmdzLCBuZXdEaXJlY3RpdmUuYXJncyk7XG5cbiAgICBmb3IgKGNvbnN0IG5ld0FyZyBvZiBhcmdzRGlmZi5hZGRlZCkge1xuICAgICAgaWYgKGlzUmVxdWlyZWRBcmd1bWVudChuZXdBcmcpKSB7XG4gICAgICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgdHlwZTogQnJlYWtpbmdDaGFuZ2VUeXBlLlJFUVVJUkVEX0RJUkVDVElWRV9BUkdfQURERUQsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBBIHJlcXVpcmVkIGFyZyAke25ld0FyZy5uYW1lfSBvbiBkaXJlY3RpdmUgJHtvbGREaXJlY3RpdmUubmFtZX0gd2FzIGFkZGVkLmAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb2xkQXJnIG9mIGFyZ3NEaWZmLnJlbW92ZWQpIHtcbiAgICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5ESVJFQ1RJVkVfQVJHX1JFTU9WRUQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtvbGRBcmcubmFtZX0gd2FzIHJlbW92ZWQgZnJvbSAke29sZERpcmVjdGl2ZS5uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9sZERpcmVjdGl2ZS5pc1JlcGVhdGFibGUgJiYgIW5ld0RpcmVjdGl2ZS5pc1JlcGVhdGFibGUpIHtcbiAgICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5ESVJFQ1RJVkVfUkVQRUFUQUJMRV9SRU1PVkVELFxuICAgICAgICBkZXNjcmlwdGlvbjogYFJlcGVhdGFibGUgZmxhZyB3YXMgcmVtb3ZlZCBmcm9tICR7b2xkRGlyZWN0aXZlLm5hbWV9LmAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIG9sZERpcmVjdGl2ZS5sb2NhdGlvbnMpIHtcbiAgICAgIGlmICghbmV3RGlyZWN0aXZlLmxvY2F0aW9ucy5pbmNsdWRlcyhsb2NhdGlvbikpIHtcbiAgICAgICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBCcmVha2luZ0NoYW5nZVR5cGUuRElSRUNUSVZFX0xPQ0FUSU9OX1JFTU9WRUQsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGAke2xvY2F0aW9ufSB3YXMgcmVtb3ZlZCBmcm9tICR7b2xkRGlyZWN0aXZlLm5hbWV9LmAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWFDaGFuZ2VzO1xufVxuXG5mdW5jdGlvbiBmaW5kVHlwZUNoYW5nZXMob2xkU2NoZW1hLCBuZXdTY2hlbWEpIHtcbiAgY29uc3Qgc2NoZW1hQ2hhbmdlcyA9IFtdO1xuICBjb25zdCB0eXBlc0RpZmYgPSBkaWZmKFxuICAgIE9iamVjdC52YWx1ZXMob2xkU2NoZW1hLmdldFR5cGVNYXAoKSksXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdTY2hlbWEuZ2V0VHlwZU1hcCgpKSxcbiAgKTtcblxuICBmb3IgKGNvbnN0IG9sZFR5cGUgb2YgdHlwZXNEaWZmLnJlbW92ZWQpIHtcbiAgICBzY2hlbWFDaGFuZ2VzLnB1c2goe1xuICAgICAgdHlwZTogQnJlYWtpbmdDaGFuZ2VUeXBlLlRZUEVfUkVNT1ZFRCxcbiAgICAgIGRlc2NyaXB0aW9uOiBpc1NwZWNpZmllZFNjYWxhclR5cGUob2xkVHlwZSlcbiAgICAgICAgPyBgU3RhbmRhcmQgc2NhbGFyICR7b2xkVHlwZS5uYW1lfSB3YXMgcmVtb3ZlZCBiZWNhdXNlIGl0IGlzIG5vdCByZWZlcmVuY2VkIGFueW1vcmUuYFxuICAgICAgICA6IGAke29sZFR5cGUubmFtZX0gd2FzIHJlbW92ZWQuYCxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW29sZFR5cGUsIG5ld1R5cGVdIG9mIHR5cGVzRGlmZi5wZXJzaXN0ZWQpIHtcbiAgICBpZiAoaXNFbnVtVHlwZShvbGRUeXBlKSAmJiBpc0VudW1UeXBlKG5ld1R5cGUpKSB7XG4gICAgICBzY2hlbWFDaGFuZ2VzLnB1c2goLi4uZmluZEVudW1UeXBlQ2hhbmdlcyhvbGRUeXBlLCBuZXdUeXBlKSk7XG4gICAgfSBlbHNlIGlmIChpc1VuaW9uVHlwZShvbGRUeXBlKSAmJiBpc1VuaW9uVHlwZShuZXdUeXBlKSkge1xuICAgICAgc2NoZW1hQ2hhbmdlcy5wdXNoKC4uLmZpbmRVbmlvblR5cGVDaGFuZ2VzKG9sZFR5cGUsIG5ld1R5cGUpKTtcbiAgICB9IGVsc2UgaWYgKGlzSW5wdXRPYmplY3RUeXBlKG9sZFR5cGUpICYmIGlzSW5wdXRPYmplY3RUeXBlKG5ld1R5cGUpKSB7XG4gICAgICBzY2hlbWFDaGFuZ2VzLnB1c2goLi4uZmluZElucHV0T2JqZWN0VHlwZUNoYW5nZXMob2xkVHlwZSwgbmV3VHlwZSkpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3RUeXBlKG9sZFR5cGUpICYmIGlzT2JqZWN0VHlwZShuZXdUeXBlKSkge1xuICAgICAgc2NoZW1hQ2hhbmdlcy5wdXNoKFxuICAgICAgICAuLi5maW5kRmllbGRDaGFuZ2VzKG9sZFR5cGUsIG5ld1R5cGUpLFxuICAgICAgICAuLi5maW5kSW1wbGVtZW50ZWRJbnRlcmZhY2VzQ2hhbmdlcyhvbGRUeXBlLCBuZXdUeXBlKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChpc0ludGVyZmFjZVR5cGUob2xkVHlwZSkgJiYgaXNJbnRlcmZhY2VUeXBlKG5ld1R5cGUpKSB7XG4gICAgICBzY2hlbWFDaGFuZ2VzLnB1c2goXG4gICAgICAgIC4uLmZpbmRGaWVsZENoYW5nZXMob2xkVHlwZSwgbmV3VHlwZSksXG4gICAgICAgIC4uLmZpbmRJbXBsZW1lbnRlZEludGVyZmFjZXNDaGFuZ2VzKG9sZFR5cGUsIG5ld1R5cGUpLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9sZFR5cGUuY29uc3RydWN0b3IgIT09IG5ld1R5cGUuY29uc3RydWN0b3IpIHtcbiAgICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5UWVBFX0NIQU5HRURfS0lORCxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgYCR7b2xkVHlwZS5uYW1lfSBjaGFuZ2VkIGZyb20gYCArXG4gICAgICAgICAgYCR7dHlwZUtpbmROYW1lKG9sZFR5cGUpfSB0byAke3R5cGVLaW5kTmFtZShuZXdUeXBlKX0uYCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWFDaGFuZ2VzO1xufVxuXG5mdW5jdGlvbiBmaW5kSW5wdXRPYmplY3RUeXBlQ2hhbmdlcyhvbGRUeXBlLCBuZXdUeXBlKSB7XG4gIGNvbnN0IHNjaGVtYUNoYW5nZXMgPSBbXTtcbiAgY29uc3QgZmllbGRzRGlmZiA9IGRpZmYoXG4gICAgT2JqZWN0LnZhbHVlcyhvbGRUeXBlLmdldEZpZWxkcygpKSxcbiAgICBPYmplY3QudmFsdWVzKG5ld1R5cGUuZ2V0RmllbGRzKCkpLFxuICApO1xuXG4gIGZvciAoY29uc3QgbmV3RmllbGQgb2YgZmllbGRzRGlmZi5hZGRlZCkge1xuICAgIGlmIChpc1JlcXVpcmVkSW5wdXRGaWVsZChuZXdGaWVsZCkpIHtcbiAgICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5SRVFVSVJFRF9JTlBVVF9GSUVMRF9BRERFRCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBBIHJlcXVpcmVkIGZpZWxkICR7bmV3RmllbGQubmFtZX0gb24gaW5wdXQgdHlwZSAke29sZFR5cGUubmFtZX0gd2FzIGFkZGVkLmAsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgdHlwZTogRGFuZ2Vyb3VzQ2hhbmdlVHlwZS5PUFRJT05BTF9JTlBVVF9GSUVMRF9BRERFRCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBBbiBvcHRpb25hbCBmaWVsZCAke25ld0ZpZWxkLm5hbWV9IG9uIGlucHV0IHR5cGUgJHtvbGRUeXBlLm5hbWV9IHdhcyBhZGRlZC5gLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBvbGRGaWVsZCBvZiBmaWVsZHNEaWZmLnJlbW92ZWQpIHtcbiAgICBzY2hlbWFDaGFuZ2VzLnB1c2goe1xuICAgICAgdHlwZTogQnJlYWtpbmdDaGFuZ2VUeXBlLkZJRUxEX1JFTU9WRUQsXG4gICAgICBkZXNjcmlwdGlvbjogYCR7b2xkVHlwZS5uYW1lfS4ke29sZEZpZWxkLm5hbWV9IHdhcyByZW1vdmVkLmAsXG4gICAgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtvbGRGaWVsZCwgbmV3RmllbGRdIG9mIGZpZWxkc0RpZmYucGVyc2lzdGVkKSB7XG4gICAgY29uc3QgaXNTYWZlID0gaXNDaGFuZ2VTYWZlRm9ySW5wdXRPYmplY3RGaWVsZE9yRmllbGRBcmcoXG4gICAgICBvbGRGaWVsZC50eXBlLFxuICAgICAgbmV3RmllbGQudHlwZSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1NhZmUpIHtcbiAgICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5GSUVMRF9DSEFOR0VEX0tJTkQsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGAke29sZFR5cGUubmFtZX0uJHtvbGRGaWVsZC5uYW1lfSBjaGFuZ2VkIHR5cGUgZnJvbSBgICtcbiAgICAgICAgICBgJHtTdHJpbmcob2xkRmllbGQudHlwZSl9IHRvICR7U3RyaW5nKG5ld0ZpZWxkLnR5cGUpfS5gLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNjaGVtYUNoYW5nZXM7XG59XG5cbmZ1bmN0aW9uIGZpbmRVbmlvblR5cGVDaGFuZ2VzKG9sZFR5cGUsIG5ld1R5cGUpIHtcbiAgY29uc3Qgc2NoZW1hQ2hhbmdlcyA9IFtdO1xuICBjb25zdCBwb3NzaWJsZVR5cGVzRGlmZiA9IGRpZmYob2xkVHlwZS5nZXRUeXBlcygpLCBuZXdUeXBlLmdldFR5cGVzKCkpO1xuXG4gIGZvciAoY29uc3QgbmV3UG9zc2libGVUeXBlIG9mIHBvc3NpYmxlVHlwZXNEaWZmLmFkZGVkKSB7XG4gICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgIHR5cGU6IERhbmdlcm91c0NoYW5nZVR5cGUuVFlQRV9BRERFRF9UT19VTklPTixcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtuZXdQb3NzaWJsZVR5cGUubmFtZX0gd2FzIGFkZGVkIHRvIHVuaW9uIHR5cGUgJHtvbGRUeXBlLm5hbWV9LmAsXG4gICAgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG9sZFBvc3NpYmxlVHlwZSBvZiBwb3NzaWJsZVR5cGVzRGlmZi5yZW1vdmVkKSB7XG4gICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5UWVBFX1JFTU9WRURfRlJPTV9VTklPTixcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtvbGRQb3NzaWJsZVR5cGUubmFtZX0gd2FzIHJlbW92ZWQgZnJvbSB1bmlvbiB0eXBlICR7b2xkVHlwZS5uYW1lfS5gLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYUNoYW5nZXM7XG59XG5cbmZ1bmN0aW9uIGZpbmRFbnVtVHlwZUNoYW5nZXMob2xkVHlwZSwgbmV3VHlwZSkge1xuICBjb25zdCBzY2hlbWFDaGFuZ2VzID0gW107XG4gIGNvbnN0IHZhbHVlc0RpZmYgPSBkaWZmKG9sZFR5cGUuZ2V0VmFsdWVzKCksIG5ld1R5cGUuZ2V0VmFsdWVzKCkpO1xuXG4gIGZvciAoY29uc3QgbmV3VmFsdWUgb2YgdmFsdWVzRGlmZi5hZGRlZCkge1xuICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICB0eXBlOiBEYW5nZXJvdXNDaGFuZ2VUeXBlLlZBTFVFX0FEREVEX1RPX0VOVU0sXG4gICAgICBkZXNjcmlwdGlvbjogYCR7bmV3VmFsdWUubmFtZX0gd2FzIGFkZGVkIHRvIGVudW0gdHlwZSAke29sZFR5cGUubmFtZX0uYCxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgb2xkVmFsdWUgb2YgdmFsdWVzRGlmZi5yZW1vdmVkKSB7XG4gICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5WQUxVRV9SRU1PVkVEX0ZST01fRU5VTSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtvbGRWYWx1ZS5uYW1lfSB3YXMgcmVtb3ZlZCBmcm9tIGVudW0gdHlwZSAke29sZFR5cGUubmFtZX0uYCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWFDaGFuZ2VzO1xufVxuXG5mdW5jdGlvbiBmaW5kSW1wbGVtZW50ZWRJbnRlcmZhY2VzQ2hhbmdlcyhvbGRUeXBlLCBuZXdUeXBlKSB7XG4gIGNvbnN0IHNjaGVtYUNoYW5nZXMgPSBbXTtcbiAgY29uc3QgaW50ZXJmYWNlc0RpZmYgPSBkaWZmKG9sZFR5cGUuZ2V0SW50ZXJmYWNlcygpLCBuZXdUeXBlLmdldEludGVyZmFjZXMoKSk7XG5cbiAgZm9yIChjb25zdCBuZXdJbnRlcmZhY2Ugb2YgaW50ZXJmYWNlc0RpZmYuYWRkZWQpIHtcbiAgICBzY2hlbWFDaGFuZ2VzLnB1c2goe1xuICAgICAgdHlwZTogRGFuZ2Vyb3VzQ2hhbmdlVHlwZS5JTVBMRU1FTlRFRF9JTlRFUkZBQ0VfQURERUQsXG4gICAgICBkZXNjcmlwdGlvbjogYCR7bmV3SW50ZXJmYWNlLm5hbWV9IGFkZGVkIHRvIGludGVyZmFjZXMgaW1wbGVtZW50ZWQgYnkgJHtvbGRUeXBlLm5hbWV9LmAsXG4gICAgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG9sZEludGVyZmFjZSBvZiBpbnRlcmZhY2VzRGlmZi5yZW1vdmVkKSB7XG4gICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5JTVBMRU1FTlRFRF9JTlRFUkZBQ0VfUkVNT1ZFRCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtvbGRUeXBlLm5hbWV9IG5vIGxvbmdlciBpbXBsZW1lbnRzIGludGVyZmFjZSAke29sZEludGVyZmFjZS5uYW1lfS5gLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYUNoYW5nZXM7XG59XG5cbmZ1bmN0aW9uIGZpbmRGaWVsZENoYW5nZXMob2xkVHlwZSwgbmV3VHlwZSkge1xuICBjb25zdCBzY2hlbWFDaGFuZ2VzID0gW107XG4gIGNvbnN0IGZpZWxkc0RpZmYgPSBkaWZmKFxuICAgIE9iamVjdC52YWx1ZXMob2xkVHlwZS5nZXRGaWVsZHMoKSksXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdUeXBlLmdldEZpZWxkcygpKSxcbiAgKTtcblxuICBmb3IgKGNvbnN0IG9sZEZpZWxkIG9mIGZpZWxkc0RpZmYucmVtb3ZlZCkge1xuICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICB0eXBlOiBCcmVha2luZ0NoYW5nZVR5cGUuRklFTERfUkVNT1ZFRCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtvbGRUeXBlLm5hbWV9LiR7b2xkRmllbGQubmFtZX0gd2FzIHJlbW92ZWQuYCxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW29sZEZpZWxkLCBuZXdGaWVsZF0gb2YgZmllbGRzRGlmZi5wZXJzaXN0ZWQpIHtcbiAgICBzY2hlbWFDaGFuZ2VzLnB1c2goLi4uZmluZEFyZ0NoYW5nZXMob2xkVHlwZSwgb2xkRmllbGQsIG5ld0ZpZWxkKSk7XG4gICAgY29uc3QgaXNTYWZlID0gaXNDaGFuZ2VTYWZlRm9yT2JqZWN0T3JJbnRlcmZhY2VGaWVsZChcbiAgICAgIG9sZEZpZWxkLnR5cGUsXG4gICAgICBuZXdGaWVsZC50eXBlLFxuICAgICk7XG5cbiAgICBpZiAoIWlzU2FmZSkge1xuICAgICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgdHlwZTogQnJlYWtpbmdDaGFuZ2VUeXBlLkZJRUxEX0NIQU5HRURfS0lORCxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgYCR7b2xkVHlwZS5uYW1lfS4ke29sZEZpZWxkLm5hbWV9IGNoYW5nZWQgdHlwZSBmcm9tIGAgK1xuICAgICAgICAgIGAke1N0cmluZyhvbGRGaWVsZC50eXBlKX0gdG8gJHtTdHJpbmcobmV3RmllbGQudHlwZSl9LmAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2NoZW1hQ2hhbmdlcztcbn1cblxuZnVuY3Rpb24gZmluZEFyZ0NoYW5nZXMob2xkVHlwZSwgb2xkRmllbGQsIG5ld0ZpZWxkKSB7XG4gIGNvbnN0IHNjaGVtYUNoYW5nZXMgPSBbXTtcbiAgY29uc3QgYXJnc0RpZmYgPSBkaWZmKG9sZEZpZWxkLmFyZ3MsIG5ld0ZpZWxkLmFyZ3MpO1xuXG4gIGZvciAoY29uc3Qgb2xkQXJnIG9mIGFyZ3NEaWZmLnJlbW92ZWQpIHtcbiAgICBzY2hlbWFDaGFuZ2VzLnB1c2goe1xuICAgICAgdHlwZTogQnJlYWtpbmdDaGFuZ2VUeXBlLkFSR19SRU1PVkVELFxuICAgICAgZGVzY3JpcHRpb246IGAke29sZFR5cGUubmFtZX0uJHtvbGRGaWVsZC5uYW1lfSBhcmcgJHtvbGRBcmcubmFtZX0gd2FzIHJlbW92ZWQuYCxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW29sZEFyZywgbmV3QXJnXSBvZiBhcmdzRGlmZi5wZXJzaXN0ZWQpIHtcbiAgICBjb25zdCBpc1NhZmUgPSBpc0NoYW5nZVNhZmVGb3JJbnB1dE9iamVjdEZpZWxkT3JGaWVsZEFyZyhcbiAgICAgIG9sZEFyZy50eXBlLFxuICAgICAgbmV3QXJnLnR5cGUsXG4gICAgKTtcblxuICAgIGlmICghaXNTYWZlKSB7XG4gICAgICBzY2hlbWFDaGFuZ2VzLnB1c2goe1xuICAgICAgICB0eXBlOiBCcmVha2luZ0NoYW5nZVR5cGUuQVJHX0NIQU5HRURfS0lORCxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgYCR7b2xkVHlwZS5uYW1lfS4ke29sZEZpZWxkLm5hbWV9IGFyZyAke29sZEFyZy5uYW1lfSBoYXMgY2hhbmdlZCB0eXBlIGZyb20gYCArXG4gICAgICAgICAgYCR7U3RyaW5nKG9sZEFyZy50eXBlKX0gdG8gJHtTdHJpbmcobmV3QXJnLnR5cGUpfS5gLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChvbGRBcmcuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChuZXdBcmcuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBEYW5nZXJvdXNDaGFuZ2VUeXBlLkFSR19ERUZBVUxUX1ZBTFVFX0NIQU5HRSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7b2xkVHlwZS5uYW1lfS4ke29sZEZpZWxkLm5hbWV9IGFyZyAke29sZEFyZy5uYW1lfSBkZWZhdWx0VmFsdWUgd2FzIHJlbW92ZWQuYCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaW5jZSB3ZSBsb29raW5nIG9ubHkgZm9yIGNsaWVudCdzIG9ic2VydmFibGUgY2hhbmdlcyB3ZSBzaG91bGRcbiAgICAgICAgLy8gY29tcGFyZSBkZWZhdWx0IHZhbHVlcyBpbiB0aGUgc2FtZSByZXByZXNlbnRhdGlvbiBhcyB0aGV5IGFyZVxuICAgICAgICAvLyByZXByZXNlbnRlZCBpbnNpZGUgaW50cm9zcGVjdGlvbi5cbiAgICAgICAgY29uc3Qgb2xkVmFsdWVTdHIgPSBzdHJpbmdpZnlWYWx1ZShvbGRBcmcuZGVmYXVsdFZhbHVlLCBvbGRBcmcudHlwZSk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlU3RyID0gc3RyaW5naWZ5VmFsdWUobmV3QXJnLmRlZmF1bHRWYWx1ZSwgbmV3QXJnLnR5cGUpO1xuXG4gICAgICAgIGlmIChvbGRWYWx1ZVN0ciAhPT0gbmV3VmFsdWVTdHIpIHtcbiAgICAgICAgICBzY2hlbWFDaGFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogRGFuZ2Vyb3VzQ2hhbmdlVHlwZS5BUkdfREVGQVVMVF9WQUxVRV9DSEFOR0UsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7b2xkVHlwZS5uYW1lfS4ke29sZEZpZWxkLm5hbWV9IGFyZyAke29sZEFyZy5uYW1lfSBoYXMgY2hhbmdlZCBkZWZhdWx0VmFsdWUgZnJvbSAke29sZFZhbHVlU3RyfSB0byAke25ld1ZhbHVlU3RyfS5gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBuZXdBcmcgb2YgYXJnc0RpZmYuYWRkZWQpIHtcbiAgICBpZiAoaXNSZXF1aXJlZEFyZ3VtZW50KG5ld0FyZykpIHtcbiAgICAgIHNjaGVtYUNoYW5nZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IEJyZWFraW5nQ2hhbmdlVHlwZS5SRVFVSVJFRF9BUkdfQURERUQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQSByZXF1aXJlZCBhcmcgJHtuZXdBcmcubmFtZX0gb24gJHtvbGRUeXBlLm5hbWV9LiR7b2xkRmllbGQubmFtZX0gd2FzIGFkZGVkLmAsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZW1hQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgdHlwZTogRGFuZ2Vyb3VzQ2hhbmdlVHlwZS5PUFRJT05BTF9BUkdfQURERUQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQW4gb3B0aW9uYWwgYXJnICR7bmV3QXJnLm5hbWV9IG9uICR7b2xkVHlwZS5uYW1lfS4ke29sZEZpZWxkLm5hbWV9IHdhcyBhZGRlZC5gLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNjaGVtYUNoYW5nZXM7XG59XG5cbmZ1bmN0aW9uIGlzQ2hhbmdlU2FmZUZvck9iamVjdE9ySW50ZXJmYWNlRmllbGQob2xkVHlwZSwgbmV3VHlwZSkge1xuICBpZiAoaXNMaXN0VHlwZShvbGRUeXBlKSkge1xuICAgIHJldHVybiAoXG4gICAgICAvLyBpZiB0aGV5J3JlIGJvdGggbGlzdHMsIG1ha2Ugc3VyZSB0aGUgdW5kZXJseWluZyB0eXBlcyBhcmUgY29tcGF0aWJsZVxuICAgICAgKGlzTGlzdFR5cGUobmV3VHlwZSkgJiZcbiAgICAgICAgaXNDaGFuZ2VTYWZlRm9yT2JqZWN0T3JJbnRlcmZhY2VGaWVsZChcbiAgICAgICAgICBvbGRUeXBlLm9mVHlwZSxcbiAgICAgICAgICBuZXdUeXBlLm9mVHlwZSxcbiAgICAgICAgKSkgfHwgLy8gbW92aW5nIGZyb20gbnVsbGFibGUgdG8gbm9uLW51bGwgb2YgdGhlIHNhbWUgdW5kZXJseWluZyB0eXBlIGlzIHNhZmVcbiAgICAgIChpc05vbk51bGxUeXBlKG5ld1R5cGUpICYmXG4gICAgICAgIGlzQ2hhbmdlU2FmZUZvck9iamVjdE9ySW50ZXJmYWNlRmllbGQob2xkVHlwZSwgbmV3VHlwZS5vZlR5cGUpKVxuICAgICk7XG4gIH1cblxuICBpZiAoaXNOb25OdWxsVHlwZShvbGRUeXBlKSkge1xuICAgIC8vIGlmIHRoZXkncmUgYm90aCBub24tbnVsbCwgbWFrZSBzdXJlIHRoZSB1bmRlcmx5aW5nIHR5cGVzIGFyZSBjb21wYXRpYmxlXG4gICAgcmV0dXJuIChcbiAgICAgIGlzTm9uTnVsbFR5cGUobmV3VHlwZSkgJiZcbiAgICAgIGlzQ2hhbmdlU2FmZUZvck9iamVjdE9ySW50ZXJmYWNlRmllbGQob2xkVHlwZS5vZlR5cGUsIG5ld1R5cGUub2ZUeXBlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIC8vIGlmIHRoZXkncmUgYm90aCBuYW1lZCB0eXBlcywgc2VlIGlmIHRoZWlyIG5hbWVzIGFyZSBlcXVpdmFsZW50XG4gICAgKGlzTmFtZWRUeXBlKG5ld1R5cGUpICYmIG9sZFR5cGUubmFtZSA9PT0gbmV3VHlwZS5uYW1lKSB8fCAvLyBtb3ZpbmcgZnJvbSBudWxsYWJsZSB0byBub24tbnVsbCBvZiB0aGUgc2FtZSB1bmRlcmx5aW5nIHR5cGUgaXMgc2FmZVxuICAgIChpc05vbk51bGxUeXBlKG5ld1R5cGUpICYmXG4gICAgICBpc0NoYW5nZVNhZmVGb3JPYmplY3RPckludGVyZmFjZUZpZWxkKG9sZFR5cGUsIG5ld1R5cGUub2ZUeXBlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNDaGFuZ2VTYWZlRm9ySW5wdXRPYmplY3RGaWVsZE9yRmllbGRBcmcob2xkVHlwZSwgbmV3VHlwZSkge1xuICBpZiAoaXNMaXN0VHlwZShvbGRUeXBlKSkge1xuICAgIC8vIGlmIHRoZXkncmUgYm90aCBsaXN0cywgbWFrZSBzdXJlIHRoZSB1bmRlcmx5aW5nIHR5cGVzIGFyZSBjb21wYXRpYmxlXG4gICAgcmV0dXJuIChcbiAgICAgIGlzTGlzdFR5cGUobmV3VHlwZSkgJiZcbiAgICAgIGlzQ2hhbmdlU2FmZUZvcklucHV0T2JqZWN0RmllbGRPckZpZWxkQXJnKG9sZFR5cGUub2ZUeXBlLCBuZXdUeXBlLm9mVHlwZSlcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzTm9uTnVsbFR5cGUob2xkVHlwZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gaWYgdGhleSdyZSBib3RoIG5vbi1udWxsLCBtYWtlIHN1cmUgdGhlIHVuZGVybHlpbmcgdHlwZXMgYXJlXG4gICAgICAvLyBjb21wYXRpYmxlXG4gICAgICAoaXNOb25OdWxsVHlwZShuZXdUeXBlKSAmJlxuICAgICAgICBpc0NoYW5nZVNhZmVGb3JJbnB1dE9iamVjdEZpZWxkT3JGaWVsZEFyZyhcbiAgICAgICAgICBvbGRUeXBlLm9mVHlwZSxcbiAgICAgICAgICBuZXdUeXBlLm9mVHlwZSxcbiAgICAgICAgKSkgfHwgLy8gbW92aW5nIGZyb20gbm9uLW51bGwgdG8gbnVsbGFibGUgb2YgdGhlIHNhbWUgdW5kZXJseWluZyB0eXBlIGlzIHNhZmVcbiAgICAgICghaXNOb25OdWxsVHlwZShuZXdUeXBlKSAmJlxuICAgICAgICBpc0NoYW5nZVNhZmVGb3JJbnB1dE9iamVjdEZpZWxkT3JGaWVsZEFyZyhvbGRUeXBlLm9mVHlwZSwgbmV3VHlwZSkpXG4gICAgKTtcbiAgfSAvLyBpZiB0aGV5J3JlIGJvdGggbmFtZWQgdHlwZXMsIHNlZSBpZiB0aGVpciBuYW1lcyBhcmUgZXF1aXZhbGVudFxuXG4gIHJldHVybiBpc05hbWVkVHlwZShuZXdUeXBlKSAmJiBvbGRUeXBlLm5hbWUgPT09IG5ld1R5cGUubmFtZTtcbn1cblxuZnVuY3Rpb24gdHlwZUtpbmROYW1lKHR5cGUpIHtcbiAgaWYgKGlzU2NhbGFyVHlwZSh0eXBlKSkge1xuICAgIHJldHVybiAnYSBTY2FsYXIgdHlwZSc7XG4gIH1cblxuICBpZiAoaXNPYmplY3RUeXBlKHR5cGUpKSB7XG4gICAgcmV0dXJuICdhbiBPYmplY3QgdHlwZSc7XG4gIH1cblxuICBpZiAoaXNJbnRlcmZhY2VUeXBlKHR5cGUpKSB7XG4gICAgcmV0dXJuICdhbiBJbnRlcmZhY2UgdHlwZSc7XG4gIH1cblxuICBpZiAoaXNVbmlvblR5cGUodHlwZSkpIHtcbiAgICByZXR1cm4gJ2EgVW5pb24gdHlwZSc7XG4gIH1cblxuICBpZiAoaXNFbnVtVHlwZSh0eXBlKSkge1xuICAgIHJldHVybiAnYW4gRW51bSB0eXBlJztcbiAgfVxuXG4gIGlmIChpc0lucHV0T2JqZWN0VHlwZSh0eXBlKSkge1xuICAgIHJldHVybiAnYW4gSW5wdXQgdHlwZSc7XG4gIH1cbiAgLyogYzggaWdub3JlIG5leHQgMyAqL1xuICAvLyBOb3QgcmVhY2hhYmxlLCBhbGwgcG9zc2libGUgdHlwZXMgaGF2ZSBiZWVuIGNvbnNpZGVyZWQuXG5cbiAgZmFsc2UgfHwgaW52YXJpYW50KGZhbHNlLCAnVW5leHBlY3RlZCB0eXBlOiAnICsgaW5zcGVjdCh0eXBlKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVZhbHVlKHZhbHVlLCB0eXBlKSB7XG4gIGNvbnN0IGFzdCA9IGFzdEZyb21WYWx1ZSh2YWx1ZSwgdHlwZSk7XG4gIGFzdCAhPSBudWxsIHx8IGludmFyaWFudChmYWxzZSk7XG4gIHJldHVybiBwcmludChzb3J0VmFsdWVOb2RlKGFzdCkpO1xufVxuXG5mdW5jdGlvbiBkaWZmKG9sZEFycmF5LCBuZXdBcnJheSkge1xuICBjb25zdCBhZGRlZCA9IFtdO1xuICBjb25zdCByZW1vdmVkID0gW107XG4gIGNvbnN0IHBlcnNpc3RlZCA9IFtdO1xuICBjb25zdCBvbGRNYXAgPSBrZXlNYXAob2xkQXJyYXksICh7IG5hbWUgfSkgPT4gbmFtZSk7XG4gIGNvbnN0IG5ld01hcCA9IGtleU1hcChuZXdBcnJheSwgKHsgbmFtZSB9KSA9PiBuYW1lKTtcblxuICBmb3IgKGNvbnN0IG9sZEl0ZW0gb2Ygb2xkQXJyYXkpIHtcbiAgICBjb25zdCBuZXdJdGVtID0gbmV3TWFwW29sZEl0ZW0ubmFtZV07XG5cbiAgICBpZiAobmV3SXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZW1vdmVkLnB1c2gob2xkSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlcnNpc3RlZC5wdXNoKFtvbGRJdGVtLCBuZXdJdGVtXSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBuZXdJdGVtIG9mIG5ld0FycmF5KSB7XG4gICAgaWYgKG9sZE1hcFtuZXdJdGVtLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFkZGVkLnB1c2gobmV3SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRlZCxcbiAgICBwZXJzaXN0ZWQsXG4gICAgcmVtb3ZlZCxcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3BGLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDeEYsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENB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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCO0FBQzVELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ3JFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWE7QUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM1RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFB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QUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7O0FBRUEsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOztBQUVyRCxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzs7QUFFeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO0FBQ1gsQ0FBQyxDQUFDLENBQUM7QUFDSDsifQ== |