import { newInvariantError } from "/_nuxt/node_modules/@apollo/client/utilities/globals/index.js?v=e4f18c29"; import { isNonNullObject } from "/_nuxt/node_modules/@apollo/client/utilities/common/objects.js?v=e4f18c29"; import { getFragmentFromSelection } from "/_nuxt/node_modules/@apollo/client/utilities/graphql/fragments.js?v=e4f18c29"; import { canonicalStringify } from "/_nuxt/node_modules/@apollo/client/utilities/common/canonicalStringify.js?v=e4f18c29"; export function makeReference(id) { return { __ref: String(id) }; } export function isReference(obj) { return Boolean(obj && typeof obj === "object" && typeof obj.__ref === "string"); } export function isDocumentNode(value) { return (isNonNullObject(value) && value.kind === "Document" && Array.isArray(value.definitions)); } function isStringValue(value) { return value.kind === "StringValue"; } function isBooleanValue(value) { return value.kind === "BooleanValue"; } function isIntValue(value) { return value.kind === "IntValue"; } function isFloatValue(value) { return value.kind === "FloatValue"; } function isVariable(value) { return value.kind === "Variable"; } function isObjectValue(value) { return value.kind === "ObjectValue"; } function isListValue(value) { return value.kind === "ListValue"; } function isEnumValue(value) { return value.kind === "EnumValue"; } function isNullValue(value) { return value.kind === "NullValue"; } export function valueToObjectRepresentation(argObj, name, value, variables) { if (isIntValue(value) || isFloatValue(value)) { argObj[name.value] = Number(value.value); } else if (isBooleanValue(value) || isStringValue(value)) { argObj[name.value] = value.value; } else if (isObjectValue(value)) { var nestedArgObj_1 = {}; value.fields.map(function (obj) { return valueToObjectRepresentation(nestedArgObj_1, obj.name, obj.value, variables); }); argObj[name.value] = nestedArgObj_1; } else if (isVariable(value)) { var variableValue = (variables || {})[value.name.value]; argObj[name.value] = variableValue; } else if (isListValue(value)) { argObj[name.value] = value.values.map(function (listValue) { var nestedArgArrayObj = {}; valueToObjectRepresentation(nestedArgArrayObj, name, listValue, variables); return nestedArgArrayObj[name.value]; }); } else if (isEnumValue(value)) { argObj[name.value] = value.value; } else if (isNullValue(value)) { argObj[name.value] = null; } else { throw newInvariantError(96, name.value, value.kind); } } export function storeKeyNameFromField(field, variables) { var directivesObj = null; if (field.directives) { directivesObj = {}; field.directives.forEach(function (directive) { directivesObj[directive.name.value] = {}; if (directive.arguments) { directive.arguments.forEach(function (_a) { var name = _a.name, value = _a.value; return valueToObjectRepresentation(directivesObj[directive.name.value], name, value, variables); }); } }); } var argObj = null; if (field.arguments && field.arguments.length) { argObj = {}; field.arguments.forEach(function (_a) { var name = _a.name, value = _a.value; return valueToObjectRepresentation(argObj, name, value, variables); }); } return getStoreKeyName(field.name.value, argObj, directivesObj); } var KNOWN_DIRECTIVES = [ "connection", "include", "skip", "client", "rest", "export", "nonreactive", ]; // Default stable JSON.stringify implementation used by getStoreKeyName. Can be // updated/replaced with something better by calling // getStoreKeyName.setStringify(newStringifyFunction). var storeKeyNameStringify = canonicalStringify; export var getStoreKeyName = Object.assign(function (fieldName, args, directives) { if (args && directives && directives["connection"] && directives["connection"]["key"]) { if (directives["connection"]["filter"] && directives["connection"]["filter"].length > 0) { var filterKeys = directives["connection"]["filter"] ? directives["connection"]["filter"] : []; filterKeys.sort(); var filteredArgs_1 = {}; filterKeys.forEach(function (key) { filteredArgs_1[key] = args[key]; }); return "".concat(directives["connection"]["key"], "(").concat(storeKeyNameStringify(filteredArgs_1), ")"); } else { return directives["connection"]["key"]; } } var completeFieldName = fieldName; if (args) { // We can't use `JSON.stringify` here since it's non-deterministic, // and can lead to different store key names being created even though // the `args` object used during creation has the same properties/values. var stringifiedArgs = storeKeyNameStringify(args); completeFieldName += "(".concat(stringifiedArgs, ")"); } if (directives) { Object.keys(directives).forEach(function (key) { if (KNOWN_DIRECTIVES.indexOf(key) !== -1) return; if (directives[key] && Object.keys(directives[key]).length) { completeFieldName += "@".concat(key, "(").concat(storeKeyNameStringify(directives[key]), ")"); } else { completeFieldName += "@".concat(key); } }); } return completeFieldName; }, { setStringify: function (s) { var previous = storeKeyNameStringify; storeKeyNameStringify = s; return previous; }, }); export function argumentsObjectFromField(field, variables) { if (field.arguments && field.arguments.length) { var argObj_1 = {}; field.arguments.forEach(function (_a) { var name = _a.name, value = _a.value; return valueToObjectRepresentation(argObj_1, name, value, variables); }); return argObj_1; } return null; } export function resultKeyNameFromField(field) { return field.alias ? field.alias.value : field.name.value; } export function getTypenameFromResult(result, selectionSet, fragmentMap) { var fragments; for (var _i = 0, _a = selectionSet.selections; _i < _a.length; _i++) { var selection = _a[_i]; if (isField(selection)) { if (selection.name.value === "__typename") { return result[resultKeyNameFromField(selection)]; } } else if (fragments) { fragments.push(selection); } else { fragments = [selection]; } } if (typeof result.__typename === "string") { return result.__typename; } if (fragments) { for (var _b = 0, fragments_1 = fragments; _b < fragments_1.length; _b++) { var selection = fragments_1[_b]; var typename = getTypenameFromResult(result, getFragmentFromSelection(selection, fragmentMap).selectionSet, fragmentMap); if (typeof typename === "string") { return typename; } } } } export function isField(selection) { return selection.kind === "Field"; } export function isInlineFragment(selection) { return selection.kind === "InlineFragment"; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlsaXRpZXMvZ3JhcGhxbC9zdG9yZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBdUJ4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNckUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUFVO0lBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBUTtJQUNsQyxPQUFPLE9BQU8sQ0FDWixHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQ2hFLENBQUM7QUFDSixDQUFDO0FBb0NELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBVTtJQUN2QyxPQUFPLENBQ0wsZUFBZSxDQUFDLEtBQUssQ0FBQztRQUNyQixLQUFzQixDQUFDLElBQUksS0FBSyxVQUFVO1FBQzNDLEtBQUssQ0FBQyxPQUFPLENBQUUsS0FBc0IsQ0FBQyxXQUFXLENBQUMsQ0FDbkQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFnQjtJQUNyQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxLQUFnQjtJQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFnQjtJQUNs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aWFudEVycm9yIH0gZnJvbSBcIi4uL2dsb2JhbHMvaW5kZXguanNcIjtcblxuaW1wb3J0IHR5cGUge1xuICBEaXJlY3RpdmVOb2RlLFxuICBGaWVsZE5vZGUsXG4gIEludFZhbHVlTm9kZSxcbiAgRmxvYXRWYWx1ZU5vZGUsXG4gIFN0cmluZ1ZhbHVlTm9kZSxcbiAgQm9vbGVhblZhbHVlTm9kZSxcbiAgT2JqZWN0VmFsdWVOb2RlLFxuICBMaXN0VmFsdWVOb2RlLFxuICBFbnVtVmFsdWVOb2RlLFxuICBOdWxsVmFsdWVOb2RlLFxuICBWYXJpYWJsZU5vZGUsXG4gIElubGluZUZyYWdtZW50Tm9kZSxcbiAgVmFsdWVOb2RlLFxuICBTZWxlY3Rpb25Ob2RlLFxuICBOYW1lTm9kZSxcbiAgU2VsZWN0aW9uU2V0Tm9kZSxcbiAgRG9jdW1lbnROb2RlLFxuICBGcmFnbWVudFNwcmVhZE5vZGUsXG59IGZyb20gXCJncmFwaHFsXCI7XG5cbmltcG9ydCB7IGlzTm9uTnVsbE9iamVjdCB9IGZyb20gXCIuLi9jb21tb24vb2JqZWN0cy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGcmFnbWVudE1hcCB9IGZyb20gXCIuL2ZyYWdtZW50cy5qc1wiO1xuaW1wb3J0IHsgZ2V0RnJhZ21lbnRGcm9tU2VsZWN0aW9uIH0gZnJvbSBcIi4vZnJhZ21lbnRzLmpzXCI7XG5pbXBvcnQgeyBjYW5vbmljYWxTdHJpbmdpZnkgfSBmcm9tIFwiLi4vY29tbW9uL2Nhbm9uaWNhbFN0cmluZ2lmeS5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZmVyZW5jZSB7XG4gIHJlYWRvbmx5IF9fcmVmOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUmVmZXJlbmNlKGlkOiBzdHJpbmcpOiBSZWZlcmVuY2Uge1xuICByZXR1cm4geyBfX3JlZjogU3RyaW5nKGlkKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2Uob2JqOiBhbnkpOiBvYmogaXMgUmVmZXJlbmNlIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgb2JqICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iai5fX3JlZiA9PT0gXCJzdHJpbmdcIlxuICApO1xufVxuXG5leHBvcnQgdHlwZSBTdG9yZVZhbHVlID1cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBzdHJpbmdbXVxuICB8IFJlZmVyZW5jZVxuICB8IFJlZmVyZW5jZVtdXG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IHZvaWRcbiAgfCBPYmplY3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmVPYmplY3Qge1xuICBfX3R5cGVuYW1lPzogc3RyaW5nO1xuICBbc3RvcmVGaWVsZE5hbWU6IHN0cmluZ106IFN0b3JlVmFsdWU7XG59XG5cbi8qKlxuICogV29ya2Fyb3VuZCBmb3IgYSBUeXBlU2NyaXB0IHF1aXJrOlxuICogdHlwZXMgcGVyIGRlZmF1bHQgaGF2ZSBhbiBpbXBsaWNpdCBpbmRleCBzaWduYXR1cmUgdGhhdCBtYWtlcyB0aGVtXG4gKiBhc3NpZ25hYmxlIHRvIGBTdG9yZU9iamVjdGAuXG4gKiBpbnRlcmZhY2VzIGRvIG5vdCBoYXZlIHRoYXQgaW1wbGljaXQgaW5kZXggc2lnbmF0dXJlLCBzbyB0aGV5IGNhbm5vdFxuICogYmUgYXNzaWduZWQgdG8gYFN0b3JlT2JqZWN0YC5cbiAqIFRoaXMgdHlwZSBqdXN0IG1hcHMgb3ZlciBhIHR5cGUgb3IgaW50ZXJmYWNlIHRoYXQgaXMgcGFzc2VkIGluLFxuICogaW1wbGljaXRseSBhZGRpbmcgdGhlIGluZGV4IHNpZ25hdHVyZS5cbiAqIFRoYXQgd2F5LCB0aGUgcmVzdWx0IGNhbiBiZSBhc3NpZ25lZCB0byBgU3RvcmVPYmplY3RgLlxuICpcbiAqIFRoaXMgaXMgaW1wb3J0YW50IGlmIHNvbWUgdXNlci1kZWZpbmVkIGludGVyZmFjZSBpcyB1c2VkIGUuZy5cbiAqIGluIGNhY2hlLm1vZGlmeSwgd2hlcmUgdGhlIGB0b1JlZmVyZW5jZWAgbWV0aG9kIGV4cGVjdHMgYVxuICogYFN0b3JlT2JqZWN0YCBhcyBpbnB1dC5cbiAqL1xuZXhwb3J0IHR5cGUgQXNTdG9yZU9iamVjdDxUIGV4dGVuZHMgeyBfX3R5cGVuYW1lPzogc3RyaW5nIH0+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RvY3VtZW50Tm9kZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgRG9jdW1lbnROb2RlIHtcbiAgcmV0dXJuIChcbiAgICBpc05vbk51bGxPYmplY3QodmFsdWUpICYmXG4gICAgKHZhbHVlIGFzIERvY3VtZW50Tm9kZSkua2luZCA9PT0gXCJEb2N1bWVudFwiICYmXG4gICAgQXJyYXkuaXNBcnJheSgodmFsdWUgYXMgRG9jdW1lbnROb2RlKS5kZWZpbml0aW9ucylcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmdWYWx1ZSh2YWx1ZTogVmFsdWVOb2RlKTogdmFsdWUgaXMgU3RyaW5nVmFsdWVOb2RlIHtcbiAgcmV0dXJuIHZhbHVlLmtpbmQgPT09IFwiU3RyaW5nVmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuVmFsdWUodmFsdWU6IFZhbHVlTm9kZSk6IHZhbHVlIGlzIEJvb2xlYW5WYWx1ZU5vZGUge1xuICByZXR1cm4gdmFsdWUua2luZCA9PT0gXCJCb29sZWFuVmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gaXNJbnRWYWx1ZSh2YWx1ZTogVmFsdWVOb2RlKTogdmFsdWUgaXMgSW50VmFsdWVOb2RlIHtcbiAgcmV0dXJuIHZhbHVlLmtpbmQgPT09IFwiSW50VmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gaXNGbG9hdFZhbHVlKHZhbHVlOiBWYWx1ZU5vZGUpOiB2YWx1ZSBpcyBGbG9hdFZhbHVlTm9kZSB7XG4gIHJldHVybiB2YWx1ZS5raW5kID09PSBcIkZsb2F0VmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gaXNWYXJpYWJsZSh2YWx1ZTogVmFsdWVOb2RlKTogdmFsdWUgaXMgVmFyaWFibGVOb2RlIHtcbiAgcmV0dXJuIHZhbHVlLmtpbmQgPT09IFwiVmFyaWFibGVcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RWYWx1ZSh2YWx1ZTogVmFsdWVOb2RlKTogdmFsdWUgaXMgT2JqZWN0VmFsdWVOb2RlIHtcbiAgcmV0dXJuIHZhbHVlLmtpbmQgPT09IFwiT2JqZWN0VmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gaXNMaXN0VmFsdWUodmFsdWU6IFZhbHVlTm9kZSk6IHZhbHVlIGlzIExpc3RWYWx1ZU5vZGUge1xuICByZXR1cm4gdmFsdWUua2luZCA9PT0gXCJMaXN0VmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gaXNFbnVtVmFsdWUodmFsdWU6IFZhbHVlTm9kZSk6IHZhbHVlIGlzIEVudW1WYWx1ZU5vZGUge1xuICByZXR1cm4gdmFsdWUua2luZCA9PT0gXCJFbnVtVmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gaXNOdWxsVmFsdWUodmFsdWU6IFZhbHVlTm9kZSk6IHZhbHVlIGlzIE51bGxWYWx1ZU5vZGUge1xuICByZXR1cm4gdmFsdWUua2luZCA9PT0gXCJOdWxsVmFsdWVcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlVG9PYmplY3RSZXByZXNlbnRhdGlvbihcbiAgYXJnT2JqOiBhbnksXG4gIG5hbWU6IE5hbWVOb2RlLFxuICB2YWx1ZTogVmFsdWVOb2RlLFxuICB2YXJpYWJsZXM/OiBPYmplY3Rcbikge1xuICBpZiAoaXNJbnRWYWx1ZSh2YWx1ZSkgfHwgaXNGbG9hdFZhbHVlKHZhbHVlKSkge1xuICAgIGFyZ09ialtuYW1lLnZhbHVlXSA9IE51bWJlcih2YWx1ZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuVmFsdWUodmFsdWUpIHx8IGlzU3RyaW5nVmFsdWUodmFsdWUpKSB7XG4gICAgYXJnT2JqW25hbWUudmFsdWVdID0gdmFsdWUudmFsdWU7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3RWYWx1ZSh2YWx1ZSkpIHtcbiAgICBjb25zdCBuZXN0ZWRBcmdPYmogPSB7fTtcbiAgICB2YWx1ZS5maWVsZHMubWFwKChvYmopID0+XG4gICAgICB2YWx1ZVRvT2JqZWN0UmVwcmVzZW50YXRpb24obmVzdGVkQXJnT2JqLCBvYmoubmFtZSwgb2JqLnZhbHVlLCB2YXJpYWJsZXMpXG4gICAgKTtcbiAgICBhcmdPYmpbbmFtZS52YWx1ZV0gPSBuZXN0ZWRBcmdPYmo7XG4gIH0gZWxzZSBpZiAoaXNWYXJpYWJsZSh2YWx1ZSkpIHtcbiAgICBjb25zdCB2YXJpYWJsZVZhbHVlID0gKHZhcmlhYmxlcyB8fCAoe30gYXMgYW55KSlbdmFsdWUubmFtZS52YWx1ZV07XG4gICAgYXJnT2JqW25hbWUudmFsdWVdID0gdmFyaWFibGVWYWx1ZTtcbiAgfSBlbHNlIGlmIChpc0xpc3RWYWx1ZSh2YWx1ZSkpIHtcbiAgICBhcmdPYmpbbmFtZS52YWx1ZV0gPSB2YWx1ZS52YWx1ZXMubWFwKChsaXN0VmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG5lc3RlZEFyZ0FycmF5T2JqID0ge307XG4gICAgICB2YWx1ZVRvT2JqZWN0UmVwcmVzZW50YXRpb24oXG4gICAgICAgIG5lc3RlZEFyZ0FycmF5T2JqLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsaXN0VmFsdWUsXG4gICAgICAgIHZhcmlhYmxlc1xuICAgICAgKTtcbiAgICAgIHJldHVybiAobmVzdGVkQXJnQXJyYXlPYmogYXMgYW55KVtuYW1lLnZhbHVlXTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc0VudW1WYWx1ZSh2YWx1ZSkpIHtcbiAgICBhcmdPYmpbbmFtZS52YWx1ZV0gPSAodmFsdWUgYXMgRW51bVZhbHVlTm9kZSkudmFsdWU7XG4gIH0gZWxzZSBpZiAoaXNOdWxsVmFsdWUodmFsdWUpKSB7XG4gICAgYXJnT2JqW25hbWUudmFsdWVdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXdJbnZhcmlhbnRFcnJvcihcbiAgICAgIGBUaGUgaW5saW5lIGFyZ3VtZW50IFwiJXNcIiBvZiBraW5kIFwiJXNcImAgK1xuICAgICAgICBcImlzIG5vdCBzdXBwb3J0ZWQuIFVzZSB2YXJpYWJsZXMgaW5zdGVhZCBvZiBpbmxpbmUgYXJndW1lbnRzIHRvIFwiICtcbiAgICAgICAgXCJvdmVyY29tZSB0aGlzIGxpbWl0YXRpb24uXCIsXG4gICAgICBuYW1lLnZhbHVlLFxuICAgICAgKHZhbHVlIGFzIGFueSkua2luZFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlS2V5TmFtZUZyb21GaWVsZChcbiAgZmllbGQ6IEZpZWxkTm9kZSxcbiAgdmFyaWFibGVzPzogT2JqZWN0XG4pOiBzdHJpbmcge1xuICBsZXQgZGlyZWN0aXZlc09iajogYW55ID0gbnVsbDtcbiAgaWYgKGZpZWxkLmRpcmVjdGl2ZXMpIHtcbiAgICBkaXJlY3RpdmVzT2JqID0ge307XG4gICAgZmllbGQuZGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgIGRpcmVjdGl2ZXNPYmpbZGlyZWN0aXZlLm5hbWUudmFsdWVdID0ge307XG5cbiAgICAgIGlmIChkaXJlY3RpdmUuYXJndW1lbnRzKSB7XG4gICAgICAgIGRpcmVjdGl2ZS5hcmd1bWVudHMuZm9yRWFjaCgoeyBuYW1lLCB2YWx1ZSB9KSA9PlxuICAgICAgICAgIHZhbHVlVG9PYmplY3RSZXByZXNlbnRhdGlvbihcbiAgICAgICAgICAgIGRpcmVjdGl2ZXNPYmpbZGlyZWN0aXZlLm5hbWUudmFsdWVdLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFyaWFibGVzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbGV0IGFyZ09iajogYW55ID0gbnVsbDtcbiAgaWYgKGZpZWxkLmFyZ3VtZW50cyAmJiBmaWVsZC5hcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgYXJnT2JqID0ge307XG4gICAgZmllbGQuYXJndW1lbnRzLmZvckVhY2goKHsgbmFtZSwgdmFsdWUgfSkgPT5cbiAgICAgIHZhbHVlVG9PYmplY3RSZXByZXNlbnRhdGlvbihhcmdPYmosIG5hbWUsIHZhbHVlLCB2YXJpYWJsZXMpXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBnZXRTdG9yZUtleU5hbWUoZmllbGQubmFtZS52YWx1ZSwgYXJnT2JqLCBkaXJlY3RpdmVzT2JqKTtcbn1cblxuZXhwb3J0IHR5cGUgRGlyZWN0aXZlcyA9IHtcbiAgW2RpcmVjdGl2ZU5hbWU6IHN0cmluZ106IHtcbiAgICBbYXJnTmFtZTogc3RyaW5nXTogYW55O1xuICB9O1xufTtcblxuY29uc3QgS05PV05fRElSRUNUSVZFUzogc3RyaW5nW10gPSBbXG4gIFwiY29ubmVjdGlvblwiLFxuICBcImluY2x1ZGVcIixcbiAgXCJza2lwXCIsXG4gIFwiY2xpZW50XCIsXG4gIFwicmVzdFwiLFxuICBcImV4cG9ydFwiLFxuICBcIm5vbnJlYWN0aXZlXCIsXG5dO1xuXG4vLyBEZWZhdWx0IHN0YWJsZSBKU09OLnN0cmluZ2lmeSBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IGdldFN0b3JlS2V5TmFtZS4gQ2FuIGJlXG4vLyB1cGRhdGVkL3JlcGxhY2VkIHdpdGggc29tZXRoaW5nIGJldHRlciBieSBjYWxsaW5nXG4vLyBnZXRTdG9yZUtleU5hbWUuc2V0U3RyaW5naWZ5KG5ld1N0cmluZ2lmeUZ1bmN0aW9uKS5cbmxldCBzdG9yZUtleU5hbWVTdHJpbmdpZnk6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmcgPSBjYW5vbmljYWxTdHJpbmdpZnk7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9yZUtleU5hbWUgPSBPYmplY3QuYXNzaWduKFxuICBmdW5jdGlvbiAoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgYXJncz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLFxuICAgIGRpcmVjdGl2ZXM/OiBEaXJlY3RpdmVzXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKFxuICAgICAgYXJncyAmJlxuICAgICAgZGlyZWN0aXZlcyAmJlxuICAgICAgZGlyZWN0aXZlc1tcImNvbm5lY3Rpb25cIl0gJiZcbiAgICAgIGRpcmVjdGl2ZXNbXCJjb25uZWN0aW9uXCJdW1wia2V5XCJdXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRpcmVjdGl2ZXNbXCJjb25uZWN0aW9uXCJdW1wiZmlsdGVyXCJdICYmXG4gICAgICAgIChkaXJlY3RpdmVzW1wiY29ubmVjdGlvblwiXVtcImZpbHRlclwiXSBhcyBzdHJpbmdbXSkubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcktleXMgPVxuICAgICAgICAgIGRpcmVjdGl2ZXNbXCJjb25uZWN0aW9uXCJdW1wiZmlsdGVyXCJdID9cbiAgICAgICAgICAgIChkaXJlY3RpdmVzW1wiY29ubmVjdGlvblwiXVtcImZpbHRlclwiXSBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBmaWx0ZXJLZXlzLnNvcnQoKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJlZEFyZ3MgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgICAgICBmaWx0ZXJLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGZpbHRlcmVkQXJnc1trZXldID0gYXJnc1trZXldO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYCR7ZGlyZWN0aXZlc1tcImNvbm5lY3Rpb25cIl1bXCJrZXlcIl19KCR7c3RvcmVLZXlOYW1lU3RyaW5naWZ5KFxuICAgICAgICAgIGZpbHRlcmVkQXJnc1xuICAgICAgICApfSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZXNbXCJjb25uZWN0aW9uXCJdW1wia2V5XCJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb21wbGV0ZUZpZWxkTmFtZTogc3RyaW5nID0gZmllbGROYW1lO1xuXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSBgSlNPTi5zdHJpbmdpZnlgIGhlcmUgc2luY2UgaXQncyBub24tZGV0ZXJtaW5pc3RpYyxcbiAgICAgIC8vIGFuZCBjYW4gbGVhZCB0byBkaWZmZXJlbnQgc3RvcmUga2V5IG5hbWVzIGJlaW5nIGNyZWF0ZWQgZXZlbiB0aG91Z2hcbiAgICAgIC8vIHRoZSBgYXJnc2Agb2JqZWN0IHVzZWQgZHVyaW5nIGNyZWF0aW9uIGhhcyB0aGUgc2FtZSBwcm9wZXJ0aWVzL3ZhbHVlcy5cbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkQXJnczogc3RyaW5nID0gc3RvcmVLZXlOYW1lU3RyaW5naWZ5KGFyZ3MpO1xuICAgICAgY29tcGxldGVGaWVsZE5hbWUgKz0gYCgke3N0cmluZ2lmaWVkQXJnc30pYDtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aXZlcykge1xuICAgICAgT2JqZWN0LmtleXMoZGlyZWN0aXZlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChLTk9XTl9ESVJFQ1RJVkVTLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHJldHVybjtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZXNba2V5XSAmJiBPYmplY3Qua2V5cyhkaXJlY3RpdmVzW2tleV0pLmxlbmd0aCkge1xuICAgICAgICAgIGNvbXBsZXRlRmllbGROYW1lICs9IGBAJHtrZXl9KCR7c3RvcmVLZXlOYW1lU3RyaW5naWZ5KFxuICAgICAgICAgICAgZGlyZWN0aXZlc1trZXldXG4gICAgICAgICAgKX0pYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wbGV0ZUZpZWxkTmFtZSArPSBgQCR7a2V5fWA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wbGV0ZUZpZWxkTmFtZTtcbiAgfSxcbiAge1xuICAgIHNldFN0cmluZ2lmeShzOiB0eXBlb2Ygc3RvcmVLZXlOYW1lU3RyaW5naWZ5KSB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHN0b3JlS2V5TmFtZVN0cmluZ2lmeTtcbiAgICAgIHN0b3JlS2V5TmFtZVN0cmluZ2lmeSA9IHM7XG4gICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfSxcbiAgfVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFyZ3VtZW50c09iamVjdEZyb21GaWVsZChcbiAgZmllbGQ6IEZpZWxkTm9kZSB8IERpcmVjdGl2ZU5vZGUsXG4gIHZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIGFueT5cbik6IE9iamVjdCB8IG51bGwge1xuICBpZiAoZmllbGQuYXJndW1lbnRzICYmIGZpZWxkLmFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBhcmdPYmo6IE9iamVjdCA9IHt9O1xuICAgIGZpZWxkLmFyZ3VtZW50cy5mb3JFYWNoKCh7IG5hbWUsIHZhbHVlIH0pID0+XG4gICAgICB2YWx1ZVRvT2JqZWN0UmVwcmVzZW50YXRpb24oYXJnT2JqLCBuYW1lLCB2YWx1ZSwgdmFyaWFibGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGFyZ09iajtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3VsdEtleU5hbWVGcm9tRmllbGQoZmllbGQ6IEZpZWxkTm9kZSk6IHN0cmluZyB7XG4gIHJldHVybiBmaWVsZC5hbGlhcyA/IGZpZWxkLmFsaWFzLnZhbHVlIDogZmllbGQubmFtZS52YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVuYW1lRnJvbVJlc3VsdChcbiAgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBzZWxlY3Rpb25TZXQ6IFNlbGVjdGlvblNldE5vZGUsXG4gIGZyYWdtZW50TWFwPzogRnJhZ21lbnRNYXBcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGxldCBmcmFnbWVudHM6IHVuZGVmaW5lZCB8IEFycmF5PElubGluZUZyYWdtZW50Tm9kZSB8IEZyYWdtZW50U3ByZWFkTm9kZT47XG4gIGZvciAoY29uc3Qgc2VsZWN0aW9uIG9mIHNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSB7XG4gICAgaWYgKGlzRmllbGQoc2VsZWN0aW9uKSkge1xuICAgICAgaWYgKHNlbGVjdGlvbi5uYW1lLnZhbHVlID09PSBcIl9fdHlwZW5hbWVcIikge1xuICAgICAgICByZXR1cm4gcmVzdWx0W3Jlc3VsdEtleU5hbWVGcm9tRmllbGQoc2VsZWN0aW9uKV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmcmFnbWVudHMpIHtcbiAgICAgIGZyYWdtZW50cy5wdXNoKHNlbGVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyYWdtZW50cyA9IFtzZWxlY3Rpb25dO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHJlc3VsdC5fX3R5cGVuYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHJlc3VsdC5fX3R5cGVuYW1lO1xuICB9XG4gIGlmIChmcmFnbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBmcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHR5cGVuYW1lID0gZ2V0VHlwZW5hbWVGcm9tUmVzdWx0KFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIGdldEZyYWdtZW50RnJvbVNlbGVjdGlvbihzZWxlY3Rpb24sIGZyYWdtZW50TWFwKSEuc2VsZWN0aW9uU2V0LFxuICAgICAgICBmcmFnbWVudE1hcFxuICAgICAgKTtcbiAgICAgIGlmICh0eXBlb2YgdHlwZW5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVuYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWVsZChzZWxlY3Rpb246IFNlbGVjdGlvbk5vZGUpOiBzZWxlY3Rpb24gaXMgRmllbGROb2RlIHtcbiAgcmV0dXJuIHNlbGVjdGlvbi5raW5kID09PSBcIkZpZWxkXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZUZyYWdtZW50KFxuICBzZWxlY3Rpb246IFNlbGVjdGlvbk5vZGVcbik6IHNlbGVjdGlvbiBpcyBJbmxpbmVGcmFnbWVudE5vZGUge1xuICByZXR1cm4gc2VsZWN0aW9uLmtpbmQgPT09IFwiSW5saW5lRnJhZ21lbnRcIjtcbn1cblxuZXhwb3J0IHR5cGUgVmFyaWFibGVWYWx1ZSA9IChub2RlOiBWYXJpYWJsZU5vZGUpID0+IGFueTtcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF19